// Copyright 2018 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.auth;

// This file contains an interface to cryptographically sign any plain text data
// using any crypto key. This interface is useful for signing JWT's in device
// attestation based authentication.

// Specifies the success/failure status from the attestation signer.
enum AttestationSignerStatus {
    // The command completed successfully
    OK = 0;
    // The command referred to a missing, or an invalid argument.
    INVALID_ARGUMENT = 1;
    // There was an error in generating crypto signatures for the given
    // plaintext. This usually indicates errors for misconfigured keys or
    // signature algorithms from the underlying crypto library.
    SIGNING_ERROR = 2;
};

protocol AttestationSigner {
    // Cryptographically signs the |plaintext| data sent in request using a
    // crypto key configured at initialization.
    //
    // Returns the raw bytes of the |signature| string on success. Otherwise,
    // an error status is returned.
    SignData(bytes plaintext)
        -> (AttestationSignerStatus status, bytes? signature);
};
