syntax = "proto3"; package proto; // KeyManagement Interface service KeyManagement { // CreateKey creates as asymmetric key pair and returns the PublicKey rpc CreateKey(Algorithm) returns (PublicKey) {} // DeleteKey deletes the key associated with a KeyID rpc DeleteKey(KeyID) returns (Void) {} // GetKeyInfo returns the PublicKey associated with a KeyID rpc GetKeyInfo(KeyID) returns (PublicKey) {} // CheckHealth returns the HealthStatus with the service rpc CheckHealth(Void) returns (HealthStatus) {} } // Signer Interface service Signer { // Sign calculates a cryptographic signature using the Key associated with a KeyID and returns the signature rpc Sign(SignatureRequest) returns (Signature) {} // CheckHealth returns the HealthStatus with the service rpc CheckHealth(Void) returns (HealthStatus) {} } // KeyInfo holds a KeyID that is used to reference the key and it's algorithm message KeyInfo { KeyID keyID = 1; Algorithm algorithm = 2; } // KeyID holds an ID that is used to reference the key message KeyID { string ID = 1; } // Type holds the type of crypto algorithm used message Algorithm { string algorithm = 1; } // PublicKey has a KeyInfo that is used to reference the key, and opaque bytes of a publicKey message PublicKey { KeyInfo keyInfo = 1; bytes publicKey = 2; } // Signature specifies a KeyInfo that was used for signing and signed content message Signature { KeyInfo keyInfo = 1; Algorithm algorithm = 2; bytes content = 3; } // SignatureRequests specifies a KeyInfo, and content to be signed message SignatureRequest { KeyID keyID = 1; bytes content = 2; } // Void represents an empty message type message Void { } // A mapping of health check name to the check result message message HealthStatus { map status = 1; }