message: {
messageID: {
ciphertext: string,
plaintext: string,
contact: string key,
group: string key,
timestamp: int,
},
}
groups: {
"name" : {
id: base64 encoded nonce,
contact_ids: ['nameA', 'nameB', …],
},
}
contacts: {
"name": {
public: base64-arraybuffer (pubkey),
devices: [
{
registration_id: int,
session: {
states: {
new Number(): {
localIdentityKey: base64-arraybuffer,
localRegistrationId: new Number(),
recievingChains: [
new Number(): {
chain: {
index: new Number(),
key: base64-arraybuffer,
messageKeys: [
//currently zero length need to figure out when this is populated
],
theirEphemeralKey: base64-arraybuffer,
},
theirEphemeralKey: base64-arraybuffer,
}
],
remoteIdentityKey: base64-arraybuffer,
rootKey: base64-arraybuffer,
senderRatchetKeyPair: { keypair },
sendingChain: {
index: new Number(),
key: base64-arraybuffer,
messageKeys: [
//currently zero length need to figure out when this is populated
],
},
sessionVersion: 3, //yes, this is currently hardcoded
theirBaseKey: null, //currently null need to figure out when this is populated
}
}
}
}
...
],
}
}