43d6305157
This introduces the ability for status notes to handle community history archive magnetlinks. To make this work, a few things are needed: 1. A new database table has been introduced to store message archive hashes. This is necessary so status nodes can determine whether or not they need to download a certain archive 2. The messenger's `handleRetrievedMessages()` has been exteded to take magnetlink messages into account 3. New APIs were added to download torrent data given a magnetlink and also to extract messages from downloaded archives, which are then later fed to `handleRetrievedMessages` Closes #2568 |
||
---|---|---|
.. | ||
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.