b8b402da8d
This commit adds new tables to the database and APIs in `Messenger` and communities `Manager` to store `CheckChannelPermissionsResponse`s. The responses are stored whenever channel permissions have been checked. The reason we're doing this is so that clients can retrieve the last known channel permission state before waiting for onchain checks to finish. |
||
---|---|---|
.. | ||
github.com/protocol/encryption | ||
migrations | ||
multidevice | ||
publisher | ||
sharedsecret | ||
README.md | ||
encryption_multi_device_test.go | ||
encryption_test.go | ||
encryptor.go | ||
persistence.go | ||
persistence_keys_storage_test.go | ||
persistence_test.go | ||
protocol.go | ||
protocol_message.pb.go | ||
protocol_message.proto | ||
protocol_test.go | ||
x3dh.go | ||
x3dh_test.go |
README.md
protocol/encryption package
Hash ratchet encryption
encryptor.GenerateHashRatchetKey()
generates a hash ratchet key and stores it in in the DB.
There, 2 new tables are created: hash_ratchet_encryption
and hash_ratchet_encryption_cache
.
Each hash ratchet key is uniquely identified by the (groupId, keyId)
pair, where keyId
is derived from a clock value.
protocol.BuildHashRatchetKeyExchangeMessage
builds an 1-on-1 message containing the hash ratchet key, given it's ID.
protocol.BuildHashRatchetMessage
builds a hash ratchet message with arbitrary payload, given groupId
. It will use the latest hash ratchet key available. encryptor.encryptWithHR
encrypts the payload using Hash Ratchet algorithms. Intermediate hashes are stored in hash_ratchet_encryption_cache
table.
protocol.HandleMessage
uses encryptor.decryptWithHR
fn for decryption.