Evgeny Poberezkin
b4c90781bb
pqdr: update envelope sizes
2024-03-10 17:53:57 +00:00
Evgeny Poberezkin
851ed2d02e
pqdr: more tests, pass e2e version to rcEncrypt from config ( #1040 )
...
* pqdr: more tests, pass e2e version to rcEncrypt from config
* fix
2024-03-10 13:29:03 +00:00
Evgeny Poberezkin
054b6edb14
pqdr: clean up ( #1039 )
2024-03-10 11:27:31 +00:00
Alexander Bondarenko
8cdd49b912
core: restore Eq instances ( #1038 )
...
* core: restore Eq instances
* remove duplicates from tests
2024-03-08 13:43:33 +00:00
Evgeny Poberezkin
8ff4c628b5
pqdr: make envelope sizes dependent on version, test enabling PQ ( #1035 )
2024-03-08 08:28:15 +00:00
Evgeny Poberezkin
11288866f9
pqdr: refactor
2024-03-07 12:41:10 +00:00
Evgeny Poberezkin
4ffb6a348a
pqdr: use different newtypes for supporting and enabling PQ encryption in connections ( #1031 )
...
* pqdr: use different newtypes for supporting and enabling PQ encryption in connections
* rename field, fix test
* refactor
2024-03-06 21:28:03 +00:00
Evgeny Poberezkin
b435a4dacb
envelope sizes dependent on PQ encryption ( #1028 )
...
* envelope sizes dependent on PQ encryption (WIP)
* add "supported" flag to ratchets, update this flag on ratchet resync
* change connection PQ status on sendMessage
* comment, fix
* refactor
2024-03-06 16:38:30 +00:00
Evgeny Poberezkin
b050cf5027
double ratchet versioning for post-quantum encryption ( #1025 )
...
* correctly parse new Ratchet fields when omitted
* rfc: migrating connection versions to pqdr
* update rfc
* WIP (dont commit)
* rename versions
* update ratchet version based on PQ encryption feature flag
* remove duplicate function
* synchronize ratchet, fix tests, refactor
* comments
* test
* pattern
2024-03-05 17:07:15 +00:00
Evgeny Poberezkin
ba1bfaa5aa
Merge branch 'master' into pq
2024-03-04 20:13:01 +00:00
Evgeny Poberezkin
dd2bd11584
parameterize version scopes with phantom types ( #1026 )
...
* parameterize version scopes with phantom types
* move Version to another module
* parens
2024-03-04 19:06:51 +00:00
Evgeny Poberezkin and spaced4ndy
e06e22328f
agent: quantum-resistant double ratchet encryption ( #939 )
...
* doc
* diff
* ratchet header
* types
* ratchet step with PQ KEM, message header with KEM
* comment
* update types, remove Eq instances, store KEM keys to database
* pqx3dh
* PQ double ratchet test
* pqdr tests pass
* fix most tests
* refactor
* allow KEM proposals from both sides
* test names
* agent API parameters to use PQ KEM
* initialize ratchet state for enabling KEM
* fix/test KEM state machine to support disabling/enabling via messages
* more tests
* diff
* diff2
* refactor
* refactor
* refactor
* refactor
* remove Maybe
* rename
* add PQ encryption status to CON, MID and MSG events and sendMessage API results
* different PQ parameter when creating connection
* rename/reorganize types for PQ encryption modes
* rename
* fix testWaitDeliveryTimeout
* rename
* rename2
* ghc8107
* rename
* increase timeouts for concurrent send/receive test
* enable all tests
---------
Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com >
2024-03-03 19:40:49 +00:00
Evgeny Poberezkin
c179073260
remove support for old versions ( #990 )
...
* remove support for old versions (WIP)
* fix
* updates
* use version var
2024-02-16 13:28:50 +00:00
Evgeny Poberezkin
ca527b4d6c
use Builder for batching commands ( #953 )
...
* use Builder for batching commands
* refactor
* refactor
* increase timeout in test
* do not materialize builder
* use concat
* debug test
* debug2
* delays
* more delay, less worker delay
* remove logs
* reduce delay
* tests
* sized builder
* builder
* comment
* remove unsafe
* style
* remove fromIntegral
2024-01-08 22:54:27 +00:00
Evgeny Poberezkin
13a60d1d39
use ChaChaDRG as the source of randomness ( #920 )
...
* use ChaChaDRG as the source of randomness
* remove functions using entropy directly
* comment
2023-12-21 00:12:08 +00:00
Evgeny Poberezkin
6a2e6b040e
additional lazy crypto for XRCP ( #890 )
2023-11-10 11:16:43 +00:00
Evgeny Poberezkin
248144f3de
do not use previous KEM shared secret in multicast packets and in host HELLO ( #888 )
...
* do not use previous KEM shared secret in multicast packets and in host HELLO
* simplify
2023-11-08 12:06:10 +00:00
Alexander Bondarenko
c0566d37a0
add To/FromField instance to KEMShardKey ( #886 )
2023-11-07 17:09:38 +00:00
Alexander Bondarenko and Evgeny Poberezkin
1a8dfb4cbe
agent: xrcp implementation for connection via link (no multicast) ( #884 )
...
* WIP: start working on connection invites
startSession/OOB is broken now - the port isn't coming from the actualy assigned one.
* Add invite types
* clean old invite-related types
* apply renames
* Move SessionKeys from Invitation
* Stub host-side keys and handle
* move keys and handles to Types
* add Simplex.RemoteControl.Client
* more keys
* progress
* crypto for sessions
* progress to multicast
* multicast crypto
* add RC TLS server
* agent api for remote control
* WIP: tls client
* fix test
* update encoding to include nonce
* add TODO
* update
* Use network-info to find TransportHost
* request and submit tls client certificate
* WIP: add missing bits for testing RC client
* RCEncryptedHello encoding
* add block encoding
* refactor
* validate known host certificate
* remove some spaghetti
* functional API to host/ctrl clients
* refactor connectRCCtrl_
* refactor connectRCHost
* question
* add type
* fix RC session
* update doc
* update doc 2
* add block on confirmation
* remove unused parameter
* export CtrlSessKeys
* export
* fix parsing
* move test of xrcp handshake
* move KEM to HELLO step
* fix JSON
* type
---------
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com >
2023-11-07 13:05:18 +00:00
Evgeny Poberezkin
a5fed340e2
hybrid shared secret X25519 + sntrup761 ( #881 )
...
* hybrid shared secret X25519 + sntrup761
* use IORef
* enable all tests
* update
* update
* use newtype
* move withDRG
2023-11-01 10:33:15 +00:00
Evgeny Poberezkin and IC Rainbow
c22c15a2e8
sntrup761 ( #865 )
...
* add sntrup761 source
* it compiles
* Wrap bindings in non-FFI types
Test passes with a dummy RNG.
* pass ChaChaDRG via FunPtr
* Add iOS smoke test at createAgentStore
* style
* add "ssl" library dep
Attempt to fix missing _SHA512 symbol on macos.
* remove sha512 wrapper and use openssl directly
* restore names, remove dummy RNG
* Revert "remove sha512 wrapper and use openssl directly"
This reverts commit f9f7781f09 .
* restore code from RFC
* shorter names
* enable all tests
* remove run test
---------
Co-authored-by: IC Rainbow <aenor.realm@gmail.com >
2023-10-31 22:44:46 +00:00
Evgeny Poberezkin
511d793b92
derive JSON instances with TH ( #869 )
...
* derive JSON instances with TH
* defaultJSON
* remove ToJSON
2023-10-26 09:20:30 +01:00
Evgeny Poberezkin
9d12d76078
add fourmolu ( #868 )
...
* add fourmolu
* linebreak
* simplify
* comment
2023-10-22 09:20:14 +01:00
Evgeny Poberezkin
887ccbcf6c
Merge branch 'master' into master-ghc9
2023-09-10 18:00:33 +01:00
Evgeny Poberezkin
17a1a911d8
import stateTVar
2023-09-01 22:24:53 +01:00
Evgeny Poberezkin
5dc3d739b2
agent: support encrypted local files ( #837 )
...
* agent: support encrypted local files
* migration, update store, api
* tests, fix
* use CF.plain
2023-08-31 22:43:58 +01:00
Moritz Angermann and Evgeny Poberezkin
002f36dde0
5.4.0.0: use ghc 9.6.2 ( #791 )
...
* Add 9.6 compat
* compile with GHC9.6.2: dependencies, imports, code
* refactor typeclasses
* refactor record dot
* update cabal version
* update github actions
* update direct-sqlcipher
* 5.4.0.0
* update cabal.project
---------
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com >
2023-08-24 20:22:02 +01:00
Evgeny Poberezkin
2b93e0b17d
report ratchet decryption errors from agent ( #720 )
...
* report ratchet decryption errors from agent
* agent crypto errors
2023-04-14 20:05:29 +01:00
Evgeny Poberezkin
bab689099f
xftp: streaming file encryption/decryption to avoid memory spikes ( #687 )
...
* xftp: streaming file decryption to avoid memory spikes
* refactor, enable tests
* streaming encryption
* refactor
2023-03-16 13:57:21 +00:00
Evgeny Poberezkin
94de01a06f
xftp: use SHA256 digest for file chunks to reduce file description size ( #666 )
...
* xftp: use SHA256 digest for file chunks to reduce file description size
* enable all tests
2023-03-01 14:36:55 +00:00
Evgeny Poberezkin
4ce4fa3423
xftp: write secret_box auth tag to the end of the file, for efficiency of ecryption/decryption ( #650 )
...
* xftp: write secret_box auth tag to the end of the file, for efficiency of ecryption/decryption
* comments
2023-02-23 18:28:20 +00:00
Evgeny Poberezkin
bbf9e28696
xftp: add server to client encryption layer with cryptobox ( #646 )
...
* xftp: add server to client encryption layer with cryptobox
* workarounds for http2
* update http2 commit
* remove TODOs
2023-02-22 09:03:18 +00:00
Evgeny Poberezkin
c970674452
faster lazy secret_box
2023-02-19 10:54:54 +00:00
Evgeny Poberezkin
2ae3100bed
lazy pad/unpad, secretbox encrypt/decrypt ( #639 )
2023-02-15 22:01:33 +00:00
Evgeny Poberezkin
1d3a604988
refactor SMP client, NTF server store ( #580 )
...
* refactor SMP client, NTF server store
* remove undefined
2022-12-26 18:54:28 +00:00
Evgeny Poberezkin
d06bb2b9c5
use KDF in X3DH ( #548 )
...
* use KDF in X3DH
* configure ratchet version via agent config, test matrix
* add comment
2022-10-20 11:03:19 +01:00
Evgeny Poberezkin
c1348aa54f
SMP connection handshake v2 ( #390 )
...
* SMP connection handshake v2
* hadshake v2 [mostly] works
* all tests pass, some race conditions remain
* fix build
* fix race conditions, send CON after all HELLOs in duplexHandshake mode
* add comments
* comment
* add comments
2022-06-09 13:47:07 +01:00
Evgeny Poberezkin
bfa4911217
improve message error handling ( #286 )
...
* message envelope sizes and protocol doc corrections
* change error handling in message delivery loop
2022-01-12 10:36:22 +00:00
Evgeny Poberezkin
38f4cbe74f
Merge branch 'master' into ep/v1-rc
2022-01-11 21:20:27 +00:00
Evgeny Poberezkin
657c9b1b37
reduce SMP envelope sizes ( #284 )
2022-01-11 21:01:21 +00:00
Evgeny Poberezkin
d8a61de290
Merge branch 'master' into ep/v1-rc
2022-01-11 16:02:10 +00:00
Evgeny Poberezkin
083d39be22
store missing port as empty string instead of NULL ( #280 )
2022-01-11 16:01:09 +00:00
Evgeny Poberezkin
77b1d05da2
preparing v1 release
2022-01-10 14:04:41 +00:00
Evgeny Poberezkin
2a89394174
integrate double ratchet into agent ( #268 )
...
* separate skipped messages from ratchet
* return diff for skipped messages instead of the whole state (tests fail)
* fix ratchet tests
* JSON encoding/decoding for ratchet state
* schema for ratchets
* split MonadUnliftIO instance for ExceptT to a separate file
* update StrEncoding instance for Str
* ratchet store methods
* updateRatchet store method
* move E2E ratchet params to Ratchet module
* x3dh key agreement for double ratchet
* test/fix x3dh, use x3dh for ratchets initialization
* store/get x3dh keys, save ratchet of fixed X448 type
* double-ratchet encryption integration (tests fail)
* fix double ratchet
* fix padding and message length
* remove unused code for "activations"
* remove comment
* add version checks for forward/backward compatibility
* split loading ratchet and skipped message keys
* remove unused encoding instances for Algorithm types
* update ratchet initialization params
2022-01-10 12:01:54 +00:00
Evgeny Poberezkin and Efim Poberezkin
488398df9f
change message envelopes and encoding, unify message delivery ( #252 )
...
* types and encodings for double ratchet integration
* upgrade stack resolver
* type classes for version agreement, encode/decode connection request links and E2E params with versioning
* encode/decode client parameters (version and DH key) in SMP queue URI using query string parameters
* restore support of the current SMP queue URI format
* update AMessage to only send queues in REPLY message (not the full connection request)
* new agent message evnvelopes (tests fail)
* new message envelopes - tests pass
* store fully encrypted messages before sending
* unify message delivery via DB queue (excluding confirmation and invitation)
* remove activateSecuredQueue
* linter hints
* remove comment
* export order
* save rachet-encrypted message, not per-queue encrypted
* delete message after it is accepted by the server, reduce message delivery interval for the tests
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
2022-01-05 19:52:37 +00:00
Evgeny Poberezkin
f3523bbba9
make KeyHash non-optional, verify KeyHash in SMP handshake, use StrEncoding class ( #250 )
...
* make KeyHash non-optional, StrEncoding class
* change server URI format in agent config, refactor with StrEncoding
* refactor Crypto using checkAlgorithm
* refactor parsing connection requests
* prepare to validate CA fingerprint sent in client handshake
* KeyHash check in handshake
* rename type to CliCommand
* server validates keyhash sent by the client
* validate -a option when parsing
* more of StrEncoding
2022-01-02 22:24:43 +00:00
Evgeny Poberezkin
5e29e3698e
binary SMP protocol encoding, split Command type to two types ( #245 )
...
* binary SMP protocol encoding (server tests fail)
* use 1 byte for bytestring length when encoding/decoding
* Encoding class, binary tags
* update server tests
* negotiate SMP version in client/server handshake
* add version columns to queues and connections
* split parsing SMP client commands and server responses to different functions
* check uniqueness of protocol tags
* split client commands and server responses/messages to separate types
* update types in SMP client
* remove pattern synonyms for SMP errors
* simplify getHandshake
* update SMP protocol encoding in protocol spec
* encode time as a number of seconds (64-bit integer) since epoch
2022-01-01 13:10:19 +00:00
Evgeny Poberezkin
73cad5a6c4
simple per-queue e2e encryption with NaCl crypto_box ( #242 )
...
* simple per-queue e2e encryption with NaCl crypto_box
* add e2e keys and DH secrets to schema
* agree and save shared DH secret per queue (not used yet)
* protocol changes for uniform padding and message part lengths
* correct message structure diagrams
* make per-queue E2E encryption non-optional
* refactor crypto keys
* use NaCl crypto_box for per-queue E2E encryption, remove RSA keys from queues
* remove RSA support
* merge migration with E2E DH keys
* clean up
* remove unused methods
* parsing/serializing agent messages
* remove sender timestamp from DB and code
* clean up
* slean up
* s/SMPConfMsg/SMPConfirmation/
* serializeAgentMessage = serializeClientMessage . agentToClientMsg
* simplify error handling
* update protocol docs
2021-12-29 14:27:10 +00:00
Evgeny Poberezkin and Efim Poberezkin
51a9750891
double ratchet algorithm implementation ( #236 )
...
* started double ratchet implementation
* initialize ratchets
* started ratchet encryption
* ratchet encryption
* simplify / narrow down Ratchet type
* double ratchet decryption "framework"
* advance receive ratched on skipped messages
* more ratchet decryption
* double ratchet encrypt/decrypt (TODO tests)
* double ratchet tests
* double ratchet tests
* use ratchet AD in header encryption, use header and ratchet AD as AD in message encryption
* change ratchet message error, remove Show instances
* Update tests/AgentTests/DoubleRatchetTests.hs
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
* Update tests/AgentTests/DoubleRatchetTests.hs
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
* Update tests/AgentTests/DoubleRatchetTests.hs
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
* Update tests/AgentTests/DoubleRatchetTests.hs
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
* Update tests/AgentTests/DoubleRatchetTests.hs
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
* Update src/Simplex/Messaging/Crypto/Ratchet.hs
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
* test in the same ratchet step
* merge tests
* Update src/Simplex/Messaging/Crypto/Ratchet.hs
* Update src/Simplex/Messaging/Crypto/Ratchet.hs
* remove HMAC comment
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
2021-12-25 17:13:53 +00:00