| syntax = "proto3"; |
| |
| package cobalt; |
| |
| |
| |
| option java_multiple_files = true; |
| option java_package = "com.google.cobalt"; |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // NOTE: This file is used by the Cobalt client and the Cobalt servers. |
| // The source-of-truth of this file is located in Google's internal code |
| // repository, and the file is automatically copied to Cobalt's open source |
| // repo where it is used by the Cobalt client code. Do not edit the copy of this |
| // file in the open-source repo as those edits will be overwritten when the file |
| // is next copied. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| // An EncryptedMessage carries the encrypted bytes of another proto message, |
| // along with information about how it is encrypted. |
| // |
| // Observations collected via Cobalt are doubly encrypted. First each individual |
| // message is encrypted to the Analyzer that will process it. Second each |
| // Envelope containing many observations is encrypted to the Shuffler. We use |
| // the EncryptedMessage proto to carry the ciphertext in both cases. |
| // |
| message EncryptedMessage { |
| // The different schemes used in Cobalt to encrypt a message. |
| enum EncryptionScheme { |
| // The message is not encrypted. |ciphertext| contains plaintext bytes of a |
| // serialized protocol buffer message. This scheme must only be used in |
| // tests. |
| NONE = 0; |
| |
| // Hybrid Cipher using elliptic curve Diffie-Hellman, version 1. |
| HYBRID_ECDH_V1 = 1; |
| |
| // Hybrid cipher compatible with Tink hybrid encryption/decryption |
| // primitives declared in |
| // third_party/tink/cc/hybrid/hybrid_key_templates.h |
| // Multiple hybrid encryption schemes are supported and indicated by the |
| // type of key used. |
| HYBRID_TINK = 2; |
| } |
| // Which scheme was used to encrypt this message? |
| EncryptionScheme scheme = 1; |
| |
| // Which key was used to encrypt this message? |
| // This key is mutually exclusive with |scheme| being set. |
| uint32 key_index = 4; |
| |
| // 32-byte fingerprint (SHA256) of the recipient’s public key. |
| // This is used to facilitate key rotation. |
| bytes public_key_fingerprint = 2; |
| |
| // The |contribution_id| field is a cryptographically-secure random number |
| // generated and attached by the Cobalt client. The shuffler counts the |
| // number of unique ids to determine the contribution count per report. |
| // |
| // This field should only be set when the |ciphertext| contains a |
| // cobalt.Observation that should be counted towards the shuffler threshold. |
| // All other encrypted messages should not receive a |contribution_id|. |
| // |
| // Once an observation is encrypted and assigned a |contribution_id| it |
| // should never be given another id or stored unencrypted. |
| bytes contribution_id = 5; |
| |
| // The |ciphertext| field contains the bytes of the encryption of the standard |
| // serialization of one of the following types of proto messages: |
| // |
| // - A cobalt.Envelope, as defined in Cobalt's envelope.proto. |
| // EncryptedMessages containing Envelopes are the input to the Shuffler. |
| // |
| // - A cobalt.Observation, as defined in Cobalt's observation.proto. |
| // An ObservationBatch (defined in observation_batch.proto) contains |
| // EncryptedMessages of this type. ObservationBatches are output from the |
| // Shuffler. |
| bytes ciphertext = 3; |
| } |