syntax = "proto2";

package textsecure;

option java_package         = "org.whispersystems.libsignal.protocol";
option java_outer_classname = "SignalProtos";

message SignalMessage {
  optional bytes  ratchetKey      = 1;
  optional uint32 counter         = 2;
  optional uint32 previousCounter = 3;
  optional bytes  ciphertext      = 4;
}

message PreKeySignalMessage {
  optional uint32 preKeyId       = 1;
  optional uint32 signedPreKeyId = 2;
  optional bytes  baseKey        = 3;
  optional bytes  message        = 4; // SignalMessage
}

message KeyExchangeMessage {
  optional uint32 id               = 1;
  optional bytes  baseKey          = 2;
  optional bytes  ratchetKey       = 3;
  optional bytes  identityKey      = 4;
  optional bytes  baseKeySignature = 5;
}

message SenderKeyMessage {
  optional uint32 id         = 1;
  optional uint32 iteration  = 2;
  optional bytes  ciphertext = 3;
}

message SenderKeyDistributionMessage {
  optional uint32 id         = 1;
  optional uint32 iteration  = 2;
  optional bytes  chainKey   = 3;
  optional bytes  signingKey = 4;
}

message DeviceConsistencyCodeMessage {
  optional uint32 generation = 1;
  optional bytes  signature  = 2;
}