// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.weave;

/// Error codes for WeaveKeyStore operations.
enum ErrorCode {
    /// Key/pairing code not found in storage.
    FILE_NOT_FOUND = 1;
    /// Error occurred during cryptographic operations.
    CRYPTO_ERROR = 2;
};

/// This protocol is used for signing operations with the factory-provisioned
/// Weave key.
[Discoverable]
protocol Signer {
    /// Sign the provided |hash| with the factory provisioned key. On success
    /// the result is returned in |signature|. The signature must be of a type
    /// that is supported by Weave, and must take the standard form of an ASN.1
    /// DER SEQUENCE. This operation must support SHA1 and SHA256 hash values.
    ///
    /// Currently, Weave only supports ECDSA signatures using the P224 curve,
    /// however, to allow this protocol to support future changes to supported
    /// Weave signatures the maximum size of the returned signature is set to
    /// 139 bytes which is the largest amount of space needed to return an
    /// encoded ECDSA P521 signature.
    SignHash(bytes:32 hash) -> (bytes:139 signature) error ErrorCode;
};

/// This protocol is used to retrieve factory data that may be encrypted at
/// rest.
[Discoverable]
protocol FactoryDataManager {
    /// Return the device |pairing_code| on success.
    GetPairingCode() -> (bytes:16 pairing_code) error ErrorCode;
};
