107 lines
		
	
	
	
		
			2.5 KiB
			
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
		
		
			
		
	
	
			107 lines
		
	
	
	
		
			2.5 KiB
			
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
|   | syntax = "proto3";
 | ||
|  | 
 | ||
|  | //
 | ||
|  | // Copyright 2020-2021 Signal Messenger, LLC.
 | ||
|  | // SPDX-License-Identifier: AGPL-3.0-only
 | ||
|  | //
 | ||
|  | 
 | ||
|  | package signal.proto.storage;
 | ||
|  | 
 | ||
|  | message SessionStructure {
 | ||
|  |   message Chain {
 | ||
|  |     bytes sender_ratchet_key         = 1;
 | ||
|  |     bytes sender_ratchet_key_private = 2;
 | ||
|  | 
 | ||
|  |     message ChainKey {
 | ||
|  |       uint32 index = 1;
 | ||
|  |       bytes  key   = 2;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     ChainKey chain_key = 3;
 | ||
|  | 
 | ||
|  |     message MessageKey {
 | ||
|  |       uint32 index      = 1;
 | ||
|  |       bytes  cipher_key = 2;
 | ||
|  |       bytes  mac_key    = 3;
 | ||
|  |       bytes  iv         = 4;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     repeated MessageKey message_keys = 4;
 | ||
|  |   }
 | ||
|  | 
 | ||
|  |   message PendingPreKey {
 | ||
|  |     uint32 pre_key_id        = 1;
 | ||
|  |     int32  signed_pre_key_id = 3;
 | ||
|  |     bytes  base_key          = 2;
 | ||
|  |   }
 | ||
|  | 
 | ||
|  |   uint32         session_version            = 1;
 | ||
|  |   bytes          local_identity_public      = 2;
 | ||
|  |   bytes          remote_identity_public     = 3;
 | ||
|  | 
 | ||
|  |   bytes          root_key                   = 4;
 | ||
|  |   uint32         previous_counter           = 5;
 | ||
|  | 
 | ||
|  |   Chain          sender_chain               = 6;
 | ||
|  |   // The order is significant; keys at the end are "older" and will get trimmed.
 | ||
|  |   repeated Chain receiver_chains            = 7;
 | ||
|  | 
 | ||
|  |   PendingPreKey      pending_pre_key        = 9;
 | ||
|  | 
 | ||
|  |   uint32             remote_registration_id = 10;
 | ||
|  |   uint32             local_registration_id  = 11;
 | ||
|  | 
 | ||
|  |   bool               needs_refresh          = 12;
 | ||
|  |   bytes              alice_base_key         = 13;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | message RecordStructure {
 | ||
|  |   SessionStructure          current_session   = 1;
 | ||
|  |   // The order is significant; sessions at the end are "older" and will get trimmed.
 | ||
|  |   repeated SessionStructure previous_sessions = 2;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | message PreKeyRecordStructure {
 | ||
|  |   uint32 id          = 1;
 | ||
|  |   bytes  public_key  = 2;
 | ||
|  |   bytes  private_key = 3;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | message SignedPreKeyRecordStructure {
 | ||
|  |   uint32  id          = 1;
 | ||
|  |   bytes   public_key  = 2;
 | ||
|  |   bytes   private_key = 3;
 | ||
|  |   bytes   signature   = 4;
 | ||
|  |   fixed64 timestamp   = 5;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | message IdentityKeyPairStructure {
 | ||
|  |   bytes public_key  = 1;
 | ||
|  |   bytes private_key = 2;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | message SenderKeyStateStructure {
 | ||
|  |   message SenderChainKey {
 | ||
|  |     uint32 iteration = 1;
 | ||
|  |     bytes  seed      = 2;
 | ||
|  |   }
 | ||
|  | 
 | ||
|  |   message SenderMessageKey {
 | ||
|  |     uint32 iteration = 1;
 | ||
|  |     bytes  seed      = 2;
 | ||
|  |   }
 | ||
|  | 
 | ||
|  |   message SenderSigningKey {
 | ||
|  |     bytes public  = 1;
 | ||
|  |     bytes private = 2;
 | ||
|  |   }
 | ||
|  | 
 | ||
|  |   uint32                    sender_key_id       = 1;
 | ||
|  |   SenderChainKey            sender_chain_key    = 2;
 | ||
|  |   SenderSigningKey          sender_signing_key  = 3;
 | ||
|  |   repeated SenderMessageKey sender_message_keys = 4;
 | ||
|  | }
 | ||
|  | 
 | ||
|  | message SenderKeyRecordStructure {
 | ||
|  |   repeated SenderKeyStateStructure sender_key_states = 1;
 | ||
|  | }
 |