// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto3"; package tink_testing_api; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; option java_package = "com.google.crypto.tink.testing.proto"; option java_multiple_files = true; option go_package = "github.com/google/tink/testing/go/proto/testing_api_go_proto"; // Placeholder for java_stubby_library // Service providing metadata about the server. service Metadata { // Returns some server information. A test may use this information to verify // that it is talking to the right server. rpc GetServerInfo(ServerInfoRequest) returns (ServerInfoResponse) {} } message ServerInfoRequest {} message ServerInfoResponse { string tink_version = 1; // For example '1.4' string language = 2; // For example 'cc', 'java', 'go' or 'python'. } // Service for Keyset operations. service Keyset { // Generates a key template from a key template name. rpc GetTemplate(KeysetTemplateRequest) returns (KeysetTemplateResponse) {} // Generates a new keyset from a template. rpc Generate(KeysetGenerateRequest) returns (KeysetGenerateResponse) {} // Generates a public-key keyset from a private-key keyset. rpc Public(KeysetPublicRequest) returns (KeysetPublicResponse) {} // Converts a Keyset from Binary to Json Format rpc ToJson(KeysetToJsonRequest) returns (KeysetToJsonResponse) {} // Converts a Keyset from Json to Binary Format rpc FromJson(KeysetFromJsonRequest) returns (KeysetFromJsonResponse) {} // Reads an encrypted keyset using KeysetHandle.read() or // KeysetHandle.readWithAssociatedData() and the BinaryKeysetReader. rpc ReadEncrypted(KeysetReadEncryptedRequest) returns (KeysetReadEncryptedResponse) {} // Writes an encrypted keyset using KeysetHandle.write() or // KeysetHandle.writeWithAssociatedData() and the BinaryKeysetWriter. rpc WriteEncrypted(KeysetWriteEncryptedRequest) returns (KeysetWriteEncryptedResponse) {} } message KeysetTemplateRequest { string template_name = 1; // template name used by Tinkey } message KeysetTemplateResponse { oneof result { bytes key_template = 1; // serialized google.crypto.tink.KeyTemplate. string err = 2; } } message KeysetGenerateRequest { bytes template = 1; // serialized google.crypto.tink.KeyTemplate. } message KeysetGenerateResponse { oneof result { bytes keyset = 1; // serialized google.crypto.tink.Keyset. string err = 2; } } message KeysetPublicRequest { bytes private_keyset = 1; // serialized google.crypto.tink.Keyset. } message KeysetPublicResponse { oneof result { bytes public_keyset = 1; // serialized google.crypto.tink.Keyset. string err = 2; } } message KeysetToJsonRequest { bytes keyset = 1; // serialized google.crypto.tink.Keyset. } message KeysetToJsonResponse { oneof result { string json_keyset = 1; string err = 2; } } message KeysetFromJsonRequest { string json_keyset = 1; } message KeysetFromJsonResponse { oneof result { bytes keyset = 1; // serialized google.crypto.tink.Keyset. string err = 2; } } // Copy of google.protobuf.BytesValue message BytesValue { // The bytes value. bytes value = 1; } enum KeysetReaderType { KEYSET_READER_UNKNOWN = 0; KEYSET_READER_BINARY = 1; KEYSET_READER_JSON = 2; } message KeysetReadEncryptedRequest { bytes encrypted_keyset = 1; bytes master_keyset = 2; // serialized google.crypto.tink.Keyset. BytesValue associated_data = 3; KeysetReaderType keyset_reader_type = 4; } message KeysetReadEncryptedResponse { oneof result { bytes keyset = 1; // serialized google.crypto.tink.Keyset. string err = 2; } } enum KeysetWriterType { KEYSET_WRITER_UNKNOWN = 0; KEYSET_WRITER_BINARY = 1; KEYSET_WRITER_JSON = 2; } message KeysetWriteEncryptedRequest { bytes keyset = 1; // serialized google.crypto.tink.Keyset. bytes master_keyset = 2; // serialized google.crypto.tink.Keyset. BytesValue associated_data = 3; KeysetWriterType keyset_writer_type = 4; } message KeysetWriteEncryptedResponse { oneof result { bytes encrypted_keyset = 1; string err = 2; } } message AnnotatedKeyset { bytes serialized_keyset = 1; // serialized google.crypto.tink.Keyset. map annotations = 2; } message CreationRequest { AnnotatedKeyset annotated_keyset = 1; } message CreationResponse { // Empty means no error string err = 1; } // Service for AEAD encryption and decryption service Aead { // Creates an Aead object without using it. rpc Create(CreationRequest) returns (CreationResponse) {} // Encrypts a plaintext with the provided keyset. The client must call // "Create" first to see if creation succeeds before calling this. rpc Encrypt(AeadEncryptRequest) returns (AeadEncryptResponse) {} // Decrypts a ciphertext with the provided keyset. The client must call // "Create" first to see if creation succeeds before calling this. rpc Decrypt(AeadDecryptRequest) returns (AeadDecryptResponse) {} } message AeadEncryptRequest { AnnotatedKeyset annotated_keyset = 1; bytes plaintext = 2; bytes associated_data = 3; } message AeadEncryptResponse { oneof result { bytes ciphertext = 1; string err = 2; } } message AeadDecryptRequest { AnnotatedKeyset annotated_keyset = 1; bytes ciphertext = 2; bytes associated_data = 3; } message AeadDecryptResponse { oneof result { bytes plaintext = 1; string err = 2; } } // Service for Deterministic AEAD encryption and decryption service DeterministicAead { // Creates a Deterministic AEAD object without using it. rpc Create(CreationRequest) returns (CreationResponse) {} // Encrypts a plaintext with the provided keyset. The client must call // "Create" first to see if creation succeeds before calling // this. rpc EncryptDeterministically(DeterministicAeadEncryptRequest) returns (DeterministicAeadEncryptResponse) {} // Decrypts a ciphertext with the provided keyset. The client must call // "Create" first to see if creation succeeds before calling // this. rpc DecryptDeterministically(DeterministicAeadDecryptRequest) returns (DeterministicAeadDecryptResponse) {} } message DeterministicAeadEncryptRequest { AnnotatedKeyset annotated_keyset = 1; bytes plaintext = 2; bytes associated_data = 3; } message DeterministicAeadEncryptResponse { oneof result { bytes ciphertext = 1; string err = 2; } } message DeterministicAeadDecryptRequest { AnnotatedKeyset annotated_keyset = 1; bytes ciphertext = 2; bytes associated_data = 3; } message DeterministicAeadDecryptResponse { oneof result { bytes plaintext = 1; string err = 2; } } // Service for Streaming AEAD encryption and decryption service StreamingAead { // Creates a StreamingAead object without using it. rpc Create(CreationRequest) returns (CreationResponse) {} // Encrypts a plaintext with the provided keyset. The client must call // "Create" first to see if creation succeeds before calling this. rpc Encrypt(StreamingAeadEncryptRequest) returns (StreamingAeadEncryptResponse) {} // Decrypts a ciphertext with the provided keyset. The client must call // "Create" first to see if creation succeeds before calling this. rpc Decrypt(StreamingAeadDecryptRequest) returns (StreamingAeadDecryptResponse) {} } message StreamingAeadEncryptRequest { AnnotatedKeyset annotated_keyset = 1; bytes plaintext = 2; bytes associated_data = 3; } message StreamingAeadEncryptResponse { oneof result { bytes ciphertext = 1; string err = 2; } } message StreamingAeadDecryptRequest { AnnotatedKeyset annotated_keyset = 1; bytes ciphertext = 2; bytes associated_data = 3; } message StreamingAeadDecryptResponse { oneof result { bytes plaintext = 1; string err = 2; } } // Service to compute and verify MACs service Mac { // Creates a Mac object without using it. rpc Create(CreationRequest) returns (CreationResponse) {} // Computes a MAC for given data. The client must call "Create" first to see // if creation succeeds before calling this. rpc ComputeMac(ComputeMacRequest) returns (ComputeMacResponse) {} // Verifies the validity of the MAC value, no error means success. The client // must call "Create" first to see if creation succeeds before calling this. rpc VerifyMac(VerifyMacRequest) returns (VerifyMacResponse) {} } message ComputeMacRequest { AnnotatedKeyset annotated_keyset = 1; bytes data = 2; } message ComputeMacResponse { oneof result { bytes mac_value = 1; string err = 2; } } message VerifyMacRequest { AnnotatedKeyset annotated_keyset = 1; bytes mac_value = 2; bytes data = 3; } message VerifyMacResponse { string err = 1; } // Service to hybrid encrypt and decrypt service Hybrid { // Creates a HybridEncrypt object without using it. rpc CreateHybridEncrypt(CreationRequest) returns (CreationResponse) {} // Creates a HybridDecrypt object without using it. rpc CreateHybridDecrypt(CreationRequest) returns (CreationResponse) {} // Encrypts plaintext binding context_info to the resulting ciphertext. The // client must call "CreateHybridEncrypt" first to see if creation succeeds // before calling this. rpc Encrypt(HybridEncryptRequest) returns (HybridEncryptResponse) {} // Decrypts ciphertext verifying the integrity of context_info. The client // must call "CreateHybridDecrypt" first to see if creation succeeds before // calling this. rpc Decrypt(HybridDecryptRequest) returns (HybridDecryptResponse) {} } message HybridEncryptRequest { AnnotatedKeyset public_annotated_keyset = 1; bytes plaintext = 2; bytes context_info = 3; } message HybridEncryptResponse { oneof result { bytes ciphertext = 1; string err = 2; } } message HybridDecryptRequest { AnnotatedKeyset private_annotated_keyset = 1; bytes ciphertext = 2; bytes context_info = 3; } message HybridDecryptResponse { oneof result { bytes plaintext = 1; string err = 2; } } // Service to sign and verify signatures. service Signature { // Creates a PublicKeySign object without using it. rpc CreatePublicKeySign(CreationRequest) returns (CreationResponse) {} // Creates a PublicKeyVerify object without using it. rpc CreatePublicKeyVerify(CreationRequest) returns (CreationResponse) {} // Computes the signature for data. The client must call "CreatePublicKeySign" // first to see if creation succeeds before calling this. rpc Sign(SignatureSignRequest) returns (SignatureSignResponse) {} // Verifies that signature is a digital signature for data. The client must // call "CreatePublicKeyVerify" first to see if creation succeeds before // calling this. rpc Verify(SignatureVerifyRequest) returns (SignatureVerifyResponse) {} } message SignatureSignRequest { AnnotatedKeyset private_annotated_keyset = 1; bytes data = 2; } message SignatureSignResponse { oneof result { bytes signature = 1; string err = 2; } } message SignatureVerifyRequest { AnnotatedKeyset public_annotated_keyset = 1; bytes signature = 2; bytes data = 3; } message SignatureVerifyResponse { string err = 1; } // Service for PrfSet computation service PrfSet { // Creates a PrfSet object without using it. rpc Create(CreationRequest) returns (CreationResponse) {} // Returns the key ids and the primary key id in the keyset.The client must // call "Create" first to see if creation succeeds before calling this. rpc KeyIds(PrfSetKeyIdsRequest) returns (PrfSetKeyIdsResponse) {} // Computes the output of the PRF with the given key_id in the PrfSet.The // client must call "Create" first to see if creation succeeds before calling // this. rpc Compute(PrfSetComputeRequest) returns (PrfSetComputeResponse) {} } message PrfSetKeyIdsRequest { AnnotatedKeyset annotated_keyset = 1; } message PrfSetKeyIdsResponse { message Output { uint32 primary_key_id = 1; repeated uint32 key_id = 2; } oneof result { Output output = 1; string err = 2; } } message PrfSetComputeRequest { AnnotatedKeyset annotated_keyset = 1; uint32 key_id = 2; bytes input_data = 3; int32 output_length = 4; } message PrfSetComputeResponse { oneof result { bytes output = 1; string err = 2; } } // Service for JSON Web Tokens (JWT) service Jwt { // Creates a JwtMac object without using it. rpc CreateJwtMac(CreationRequest) returns (CreationResponse) {} // Creates a JwtPublicKeySign object without using it. rpc CreateJwtPublicKeySign(CreationRequest) returns (CreationResponse) {} // Creates a JwtPublicKeyVerify object without using it. rpc CreateJwtPublicKeyVerify(CreationRequest) returns (CreationResponse) {} // Computes a signed compact JWT token. rpc ComputeMacAndEncode(JwtSignRequest) returns (JwtSignResponse) {} // Verifies the validity of the signed compact JWT token rpc VerifyMacAndDecode(JwtVerifyRequest) returns (JwtVerifyResponse) {} // Computes a signed compact JWT token. rpc PublicKeySignAndEncode(JwtSignRequest) returns (JwtSignResponse) {} // Verifies the validity of the signed compact JWT token rpc PublicKeyVerifyAndDecode(JwtVerifyRequest) returns (JwtVerifyResponse) {} // Converts a Keyset from Tink Binary to JWK Set Format rpc ToJwkSet(JwtToJwkSetRequest) returns (JwtToJwkSetResponse) {} // Converts a Keyset from JWK Set to Tink Binary Format rpc FromJwkSet(JwtFromJwkSetRequest) returns (JwtFromJwkSetResponse) {} } // Used to represent the JSON null value. enum NullValue { NULL_VALUE = 0; } message JwtClaimValue { oneof kind { NullValue null_value = 2; double number_value = 3; string string_value = 4; bool bool_value = 5; string json_object_value = 6; string json_array_value = 7; } } message JwtToken { google.protobuf.StringValue issuer = 1; google.protobuf.StringValue subject = 2; repeated string audiences = 3; google.protobuf.StringValue jwt_id = 4; google.protobuf.Timestamp expiration = 5; google.protobuf.Timestamp not_before = 6; google.protobuf.Timestamp issued_at = 7; map custom_claims = 8; google.protobuf.StringValue type_header = 9; } message JwtValidator { google.protobuf.StringValue expected_type_header = 7; google.protobuf.StringValue expected_issuer = 1; google.protobuf.StringValue expected_audience = 3; bool ignore_type_header = 8; bool ignore_issuer = 9; bool ignore_audience = 11; bool allow_missing_expiration = 12; bool expect_issued_in_the_past = 13; google.protobuf.Timestamp now = 5; google.protobuf.Duration clock_skew = 6; } message JwtSignRequest { AnnotatedKeyset annotated_keyset = 1; JwtToken raw_jwt = 2; } message JwtSignResponse { oneof result { string signed_compact_jwt = 1; string err = 2; } } message JwtVerifyRequest { AnnotatedKeyset annotated_keyset = 1; string signed_compact_jwt = 2; JwtValidator validator = 3; } message JwtVerifyResponse { oneof result { JwtToken verified_jwt = 1; string err = 2; } } message JwtToJwkSetRequest { bytes keyset = 1; // serialized google.crypto.tink.Keyset. } message JwtToJwkSetResponse { oneof result { string jwk_set = 1; string err = 2; } } message JwtFromJwkSetRequest { string jwk_set = 1; } message JwtFromJwkSetResponse { oneof result { bytes keyset = 1; // serialized google.crypto.tink.Keyset. string err = 2; } }