mirror of
https://github.com/status-im/status-go.git
synced 2025-01-11 07:07:24 +00:00
1f6cccd0fc
This commit adds a list new table, installations, which is used to keep track of which installation are active for a given identity key. In general, we limit the number of installation that we keep synchronized to 5, to avoid excessive usage of resources. Any installation coming from our own identity, will have to be manually enabled, otherwise we trust the other peer has correctly paired their devices. We use a timestamp to decide which installations to keep synchronized as a logical clock would have make the creation of the bundle more complicated, but this can always be converted to a logical clock at later stages without breaking compatibility.
79 lines
1.5 KiB
Protocol Buffer
79 lines
1.5 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package chat;
|
|
|
|
message SignedPreKey {
|
|
bytes signed_pre_key = 1;
|
|
uint32 version = 2;
|
|
}
|
|
|
|
// X3DH prekey bundle
|
|
message Bundle {
|
|
// Identity key
|
|
bytes identity = 1;
|
|
// Installation id
|
|
map<string,SignedPreKey> signed_pre_keys = 2;
|
|
// Prekey signature
|
|
bytes signature = 4;
|
|
|
|
// When the bundle was created locally
|
|
int64 timestamp = 5;
|
|
}
|
|
|
|
message BundleContainer {
|
|
reserved 3;
|
|
// X3DH prekey bundle
|
|
Bundle bundle = 1;
|
|
// Private signed prekey
|
|
bytes private_signed_pre_key = 2;
|
|
}
|
|
|
|
message DRHeader {
|
|
// Current ratchet public key
|
|
bytes key = 1;
|
|
// Number of the message in the sending chain
|
|
uint32 n = 2;
|
|
// Length of the previous sending chain
|
|
uint32 pn = 3;
|
|
// Bundle ID
|
|
bytes id = 4;
|
|
}
|
|
|
|
message DHHeader {
|
|
// Compressed ephemeral public key
|
|
bytes key = 1;
|
|
}
|
|
|
|
message X3DHHeader {
|
|
reserved 3;
|
|
// Ephemeral key used
|
|
bytes key = 1;
|
|
// Used bundle's signed prekey
|
|
bytes id = 4;
|
|
}
|
|
|
|
// Direct message value
|
|
message DirectMessageProtocol {
|
|
X3DHHeader X3DH_header = 1;
|
|
DRHeader DR_header = 2;
|
|
DHHeader DH_header = 101;
|
|
// Encrypted payload
|
|
bytes payload = 3;
|
|
}
|
|
|
|
// Top-level protocol message
|
|
message ProtocolMessage {
|
|
// An optional bundle is exchanged with each message
|
|
Bundle bundle = 1;
|
|
|
|
// The device id of the sender
|
|
string installation_id = 2;
|
|
|
|
// One to one message, encrypted, indexed by installation_id
|
|
map<string,DirectMessageProtocol> direct_message = 101;
|
|
|
|
// Public chats, not encrypted
|
|
bytes public_message = 102;
|
|
|
|
}
|