syntax = "proto3";
package SignalWhisperTextProtocol;

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

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

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

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

message PreKeySignalMessage {
    optional uint32 registrationId = 5;
    optional uint32 preKeyId = 1;
    optional uint32 signedPreKeyId = 6;
    optional bytes baseKey = 2;
    optional bytes identityKey = 3;
    optional bytes message = 4;
}

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