Commit Graph

152 Commits

Author SHA1 Message Date
06707d1a34 feat: Compute the fingerprint of a bundle 2022-12-27 12:43:18 +01:00
fe1ba99b14 feat: Indicate whether a ratchet has been created or not
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2022-12-09 20:41:53 +01:00
797bf69856 fix: Crash when calling getDevicesTrust for unknown Jid
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2022-12-09 18:42:23 +01:00
c68471349a fix: Reuse old key exchange when the ratchet is unacked
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2022-10-22 12:41:41 +02:00
1472624b1d fix: Use stanza receival timestamps to guard against stale kex messages
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
2022-10-02 19:23:58 +02:00
0826d043d5 feat: Attempt to detect already decrypted messages 2022-10-02 17:03:39 +02:00
2aa3674c4b fix: Fix receiving an old key exchange breaking decryption
This was mostly caused by Dart not copying values but referencing
them. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.

We know make some assumptions about received key exchanges, so this
needs some field testing.
2022-10-02 14:56:20 +02:00
96771cf317 feat: Allow getting the device's fingerprint 2022-09-25 12:50:59 +02:00
bea433e377 fix: React to all decryption errors with ratchet restoration 2022-09-25 11:35:12 +02:00
a23dd30eee chore: Commit the protobuf artifacts 2022-09-18 15:56:09 +02:00
b4c14a9769 fix: Guard against a crash in the critical section 2022-09-15 23:33:07 +02:00
b69acdd936 fix: Fix replaceOnetimePrekey mutating the device's id 2022-09-15 23:31:56 +02:00
0480e9156f fix: Fix occurence of not using synchronized's return 2022-09-15 13:46:52 +02:00
96d9c55c87 fix: Make fromJson* functions work when reading JSON from a String 2022-09-15 13:41:33 +02:00
49c847a96b feat: Remove toJson and fromJson from OmemoSessionManager 2022-09-15 13:22:50 +02:00
cf5331a026 feat: Introduce logging for logging purposes 2022-09-15 13:17:30 +02:00
c1d8073af0 refactor: Remove BTBV's loadState method 2022-09-15 13:06:14 +02:00
438012d8f8 fix: Hopefully fix all tests being flaky
It seems that the varint encoding function would not work for
some integers as input. This should in theory fix this issue. Since
the SPK IDs are randomly between 0 and 2**32 - 1, it makes sense that
the tests fail only sometimes.
2022-09-14 23:50:54 +02:00
79704da99c fix: Fix issues with the maps being unmodifiable 2022-09-14 22:02:50 +02:00
4341797f14 fix: Commit the restored ratchet 2022-09-14 22:02:35 +02:00
c5c579810e fix: Restore the ratchets in case of an error
This means that if the ratchet fails to decrypt a message, from the
outside it will be as if that one message had never been received.
Thus, the ratchet can be used normally. This is to guard against
messages that are received again.
2022-09-14 21:58:41 +02:00
8991599a0b feat: Allow removing all ratchets for a given Jid 2022-09-11 17:26:54 +02:00
dad938b0e1 feat: Allow initializing the BTBV trust manager in the constructor 2022-09-11 13:43:07 +02:00
ff52c82039 feat: Help with serializing and deserializing the BTVT manager 2022-09-11 13:33:45 +02:00
12e09947f6 feat: Implement enabling and disabling devices 2022-09-11 12:34:31 +02:00
0e370a8e19 refactor: Use synchronized's return 2022-09-09 17:39:28 +02:00
2e10842c54 feat: Make accepted ratchets unacknowledged by default 2022-08-19 16:59:24 +02:00
0e2af1f2a3 feat: Add a function to check if a ratchet is acknowledged 2022-08-19 16:58:23 +02:00
80e1b20f27 fix: Fix crash when calling getUnacknowledgedRatchets for a new Jid 2022-08-18 16:21:53 +02:00
d5d4aa9014 feat: Add getDeviceId and getDeviceBundle 2022-08-18 15:30:31 +02:00
ee7b09bdb0 feat: Ratchets should overwrite each other 2022-08-18 15:20:32 +02:00
73613e266f feat: Allow regerating a device's id 2022-08-18 15:08:05 +02:00
0a03483aaf feat: Allow regenerating one's device identity 2022-08-18 15:02:17 +02:00
fda06cef55 feat: Implement acknowledging ratchet sessions 2022-08-16 14:02:04 +02:00
5a097e4d2a feat: Allow removing a ratchet session 2022-08-16 13:27:21 +02:00
710b3c9497 feat: Allow serialising and deserialising without the ratchets 2022-08-16 12:57:16 +02:00
f540a80ec2 docs: Remove trust manager serialization from OmemoSessionManager 2022-08-16 12:54:15 +02:00
a4589b6e09 feat: Allow access to the device map 2022-08-11 12:02:21 +02:00
d0986a4608 fix: Fix ratchet only working for one message 2022-08-11 11:57:33 +02:00
234c2088b9 docs: Add notes on protobuf 2022-08-09 16:00:12 +02:00
6e7b8e3905 docs: Add an example 2022-08-09 15:48:26 +02:00
cb43bbb112 fix: Allow empty OMEMO messages to bypass trust 2022-08-09 14:45:04 +02:00
fa16f97113 refactor: Move events to lib/src/omemo 2022-08-08 19:11:27 +02:00
5158c32c3d feat: Make BlindTrustBeforeVerificationTrustManager abstract 2022-08-08 18:58:53 +02:00
c1fb79a20f feat: Implement a BTBV TrustManager 2022-08-08 18:47:43 +02:00
dafd0af1e5 feat: Add a base trust manager class 2022-08-08 18:03:05 +02:00
e9f190036c refactor: Move data classes into their own files 2022-08-08 17:43:15 +02:00
5b739aaf1a fix: Do not keep the old SPK signature 2022-08-08 15:50:00 +02:00
1bcbf27c83 feat: Make any SPK survive exactly one rotation 2022-08-08 15:48:12 +02:00
b8b6bbf800 feat: Track the old Signed Prekey after rotation 2022-08-08 15:32:08 +02:00
9c23721904 docs: Add documentation string to Device.toBundle() 2022-08-08 15:11:15 +02:00
9626763b44 feat: Make the replacement functions internal 2022-08-08 15:10:36 +02:00
43080d2ba0 feat: Expose rotating our own bundle's SPK 2022-08-08 15:09:44 +02:00
9f986c3369 feat: Handle empty OMEMO messages 2022-08-08 14:59:46 +02:00
8c1a78e360 feat: Allow encrypting to multiple Jids 2022-08-08 14:44:05 +02:00
5a187bae97 docs: Add documentation string for EncryptedKey 2022-08-08 14:28:52 +02:00
9a9c9f064b feat: Make RatchetMapKey internal 2022-08-08 14:28:02 +02:00
dd96e840d4 feat: Allow calculating fingerprints 2022-08-08 14:26:25 +02:00
be239fdb43 feat: Add events for commiting the device map and ratchet 2022-08-06 13:51:07 +02:00
859f25d867 feat: Allow serialising and deserialising OmemoSessionManager 2022-08-06 12:24:26 +02:00
189d823c87 fix: Track ratchet sessions using the (jid, device) tuple 2022-08-06 11:25:41 +02:00
fdc3985a8d feat: Serialise the Double Ratchet 2022-08-05 18:14:10 +02:00
cd77996db4 feat: Allow serialising Device to Json 2022-08-05 17:32:59 +02:00
3a7489a9c3 feat: Make most methods of the SessionManager private 2022-08-05 16:53:31 +02:00
62fdf568aa feat: Notify the user of a modified device 2022-08-05 16:52:02 +02:00
30e3bd78cd feat: Allow initiating multiple sessions for a message 2022-08-05 16:05:05 +02:00
b5d39339d1 feat: Allow building a session when receiving 2022-08-05 13:34:42 +02:00
ff7cc8e95a fix: Migrate more from protobuf 2022-08-05 13:02:44 +02:00
9ed94c8f3a fix: Migrate to custom protobuf 2022-08-05 12:59:10 +02:00
5c3cc424de feat: Implement all protobuf messages 2022-08-05 12:28:46 +02:00
b8d70f1b88 feat: Add helper functions for field Ids 2022-08-04 23:08:02 +02:00
a82b5d0990 feat: Reimplement the OMEMOMessage protobuf schema 2022-08-04 22:55:47 +02:00
08ec093675 fix: Track device Ids as integers 2022-08-04 16:57:12 +02:00
31ee61a5cd feat: Add convenience functions 2022-08-04 16:42:12 +02:00
b745973188 fix: Make decryption work 2022-08-04 16:30:09 +02:00
31d3897995 fix: Migrate Double Ratchet to the helper functions 2022-08-04 14:10:08 +02:00
4d6dbef549 feat: Add a untest decrypt function 2022-08-04 14:01:50 +02:00
e34e0cc7fb feat: Add managing our own keys 2022-08-04 13:19:27 +02:00
27b1931629 feat: Add a basic OMEMO session manager 2022-08-04 12:50:19 +02:00
713ea8e1b1 refactor: Rename key.dart to keys.dart 2022-08-03 17:18:14 +02:00
749e2e1a0a refactor: Move OmemoBundle into omemo/ 2022-08-03 17:16:40 +02:00
55979fcbbe refactor: Move the implementations into their own directory 2022-08-03 17:15:08 +02:00
1349df9274 refactor: Move the DH function into its own file 2022-08-03 16:55:56 +02:00
e11baabfa0 feat: Remove the identityKey == 3 case 2022-08-03 16:52:42 +02:00
f897431692 docs: Improve documentation 2022-08-03 16:50:27 +02:00
45d0c57305 fix: Throw a custom exception 2022-08-03 16:44:18 +02:00
8d222a160f feat: Check the HMAC during decryption 2022-08-03 16:41:33 +02:00
6d8238475c refactor: Remove pkcs7padding function 2022-08-03 16:38:04 +02:00
2fc2623092 docs: I meant 0.8.3, not 0.8.0 2022-08-03 16:32:22 +02:00
1a0f470ada feat: IMPLEMENT THE DOUBLE RATCHET WITH X3DH 2022-08-03 15:29:13 +02:00
4e3e20f08c ???: Move code around 2022-08-03 15:13:03 +02:00
d3c8d813a9 wip: Add the basics for the Double Ratchet 2022-08-02 18:13:14 +02:00
56ae882aa0 style: Fix linter warning 2022-08-02 15:44:31 +02:00
26019ac704 style: Move the X3DH info string into a constant 2022-08-02 15:43:39 +02:00
4211775c90 feat: Add signature validation 2022-08-02 15:40:26 +02:00
fc43655956 feat: Calculate the Appended Data 2022-08-02 15:26:00 +02:00
15df3b7f6b fix: Remove TODO
The X3DH spec says that salt (presumably the nonce) is supposed
to be [0, 0, ..., 0] with the length of the hash. I seem to have
skipped over that.

From Section 2.2:
"HKDF salt = A zero-filled byte sequence with length equal to the
hash output length."
2022-08-02 15:17:07 +02:00
566cb1b0ec style: Lint using very_good_analysis 2022-08-02 15:10:31 +02:00
d86e7f5963 refactor: Clean up the X3DH implementation 2022-08-02 15:03:58 +02:00
34df73c929 ENABLE X3DH WITH ED25519 KEYS 2022-08-01 23:20:31 +02:00