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 |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;
}
