Efim Poberezkin
4727e568d5
fix x509 call to be compatible with openssl version 1.1.1 ( #253 )
2022-01-03 20:59:53 +04:00
Evgeny Poberezkin
4a73a7ecd4
remove public header from all messages, fix envelope sizes ( #251 )
...
* fix envelope sizes
* only send sender DH pub key for per-queue E2E with confirmation message
2022-01-03 14:33:30 +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
Efim Poberezkin
33bb38299b
refactor server Main.hs ( #248 )
2022-01-02 21:49:40 +04: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
c66f9efa55
merge migrations, prepare schema for multiple queues per connection ( #243 )
...
* merge migrations into initial
* update connection/queue tables in schema, simplify creating connections
* refactor create connection
* remove queue fields from connections table
* update server constraints
2021-12-29 17:55:27 +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
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
Efim Poberezkin
0c866105d2
chain of two certificates - offline (identity) and online; switch certificates to v3 ( #238 )
2021-12-23 21:20:41 +04:00
Efim Poberezkin
96cf4d288c
base64url encode fingerprint in agent test ( #237 )
2021-12-23 13:04:56 +04:00
Efim Poberezkin
e2cd370513
certificate validation on client side; check stored fingerprint on server start-up; non-optional fingerprint parsing ( #234 , closes #155 )
...
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com >
2021-12-22 23:24:58 +04:00
Efim Poberezkin
129246c9e6
unencrypted SMP transport over TLS; simplified handshake ( #229 )
...
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com >
2021-12-19 13:04:44 +04:00
Evgeny Poberezkin
e0acb42a28
Merge branch 'stable'
2021-12-17 15:44:58 +00:00
Evgeny Poberezkin
5f7fe8b0dc
remove client from servers subscribers map after client disconnection ( #228 )
...
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
2021-12-17 16:28:48 +04:00
Evgeny Poberezkin
323fb1f03c
remove SMP server signing responses ( #226 )
...
* remove SMP server signing responses
* keep only one session ID
2021-12-16 07:15:45 +00:00
Efim Poberezkin
de01692ffd
enable WebSockets over TLS ( #225 )
2021-12-15 22:58:47 +04:00
Evgeny Poberezkin
5aa0e97cd9
sign server responses
2021-12-15 11:52:09 +00:00
Evgeny Poberezkin
cf3d0dfdc3
Transaction fields for size, session IDs, refactor ( #222 )
...
* add SMP session IDs/tls-unique to transmission
* refactor SMP transmissions: precise transmission types in server & client
* use correct session IDs
* remove TSession
2021-12-15 08:06:34 +00:00
Evgeny Poberezkin
83d352cfbe
TLS 1.3 transport ( #203 )
...
* TLS as Transport class instance with pre-defined server certificate/key
* refactor error logging
* remove Ed25519
* refactor TLS.cGet
* TLS over TCP for Transport
* Plain -> TLS
* comment
* getLn, change supported cipher
* use non fixed certificates
* comment
* check options earlier
* wording
* headers
* Update apps/smp-server/Main.hs
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com >
* Update apps/smp-server/Main.hs
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com >
* localhost -> server
* Update apps/smp-server/Main.hs
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com >
* remove comment
* agent key and cert fixtures WIP
* certificate and key in correct order
* exitFailure
* refactor loadServerCertificate
* remove liftIO
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
2021-12-15 07:48:57 +00:00
Evgeny Poberezkin
95fbd70346
encrypt recipient message bodies with crypto_box
2021-12-13 10:56:26 +00:00
Evgeny Poberezkin
bfa05c9432
all tests pass!
2021-12-12 21:17:25 +00:00
Evgeny Poberezkin
c45454d9e5
update server store log to save/restore additional keys, use Ed keys in tests instead of RSA
2021-12-12 20:51:34 +00:00
Evgeny Poberezkin
f6991539a2
add server signature keys and DH keys for server->recipient msg bodis to SMP commands (server store log and agent tests are skipped)
2021-12-12 12:22:44 +00:00
Evgeny Poberezkin
f640e71f82
remove BlockArguments extension ( #220 )
2021-12-10 12:21:54 +00:00
Evgeny Poberezkin
52eef2d7c7
Merge branch 'master' into v5
2021-12-10 11:52:08 +00:00
Evgeny Poberezkin
ff2b975cd8
prepare v0.5.0 - update versions, changelog ( #219 )
...
* prepare v0.5.0 - update versions, changelog
* Update CHANGELOG.md
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
2021-12-08 15:02:28 +00:00
Efim Poberezkin
6bdf4f3ff3
change ports for tests (fix for ports now in use on macOS) ( #217 )
2021-12-06 18:56:07 +04:00
Evgeny Poberezkin
218a7756f8
RJCT / rejectContact to reject contact requests ( #214 )
2021-12-06 13:12:10 +00:00
Evgeny Poberezkin
82ae5c623f
Merge branch 'master' into v5
2021-12-06 09:22:45 +00:00
Evgeny Poberezkin
57c9ccfc08
use base64url encoding for public key in connection requests; only allow accepting invitations that were not accepted ( #213 )
...
* use base64url encoding for public key in connection requests; only allow accepting invitations that were not accepted
* subscribe ContactConnection, fix test to use base64url encoding in key example
2021-12-06 09:05:13 +00:00
Evgeny Poberezkin
58758e0572
Merge branch 'master' into v5
2021-12-04 21:08:38 +00:00
Evgeny Poberezkin
3e226fc3f2
add CONF/LET for invitations, use REQ/ACPT only with contact connections ( #212 )
2021-12-04 21:08:02 +00:00
Evgeny Poberezkin
b116408ec3
Merge branch 'master' into v5
2021-12-04 18:55:23 +00:00
Evgeny Poberezkin
04c65d98da
support permanent connection link ("contact") in SMP agent protocols ( #143 )
...
* open/public queue extension for SMP and SMP agent protocols
* add connection mode - invitation or contact
* use ConnectionMode with REQ and ACPT agent notification/command
* parameterize ConnectionRequest with ConnectionMode
* implement Contact connection mode for permanent connection links
* tests for contact connections
2021-12-04 18:42:08 +00:00
Evgeny Poberezkin
6126e72d4f
Merge branch 'master' into v5
2021-12-02 18:06:42 +00:00
Evgeny Poberezkin
606bbf5062
URI syntax for SMP queues and connection requests ( #210 )
...
* URI syntax for SMP queues and connection requests
* fix connection request parsing/serializing
* add ConnectionRequest sqlite instances
2021-12-02 17:43:05 +00:00
Evgeny Poberezkin
e1002d5ac0
GADTs for cryptographic keys ( #208 )
...
* GADTs for cryptographic keys
* update tests (signature timing tests still fail)
* fix signature verification timing tests
* configurable algorithm to sign commands to SMP queues (Ed448 by default)
* add dummy Ed keys, add timing tests for Ed keys
* re-enable Connection subscriptions tests
2021-11-28 11:44:22 +00:00
Evgeny Poberezkin
99b3749890
simplify RSA private key types ( #207 )
...
* simplify RSA private key types
* remove updateSignKey method
2021-11-28 07:08:47 +00:00
Evgeny Poberezkin
227d83d0e7
SMP commands for notifications (NKEY/NID and NSUB/NMSG) with separate queue ID and key ( #199 )
...
* SMP commands for notifications (LSTN, NTFY) with separate queue IDs and keys
* rename Notifier types
* remove notify key and id from NEW and IDS commands (TODO add other commands)
* fix StoreLog serialization
* add commands for managing notifications
* add notification subscribers to server state, add notifier ID and key to store log
* add notifier ID and key to the queue
* refactor END notification to work for both types of subscriptions, deliver message notification (NMSG)
* process NSUB command - subscribe to message notifications
* test for message notifications
* fix SMP client function for NSUB command
* fix parse/serialize NID command
* refactor use ifM
* check duplicate notifier ID only against other notifier IDs
* refactor getQueue
* test notifier ID and key with store log
* Update src/Simplex/Messaging/Client.hs
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
* Update src/Simplex/Messaging/Server.hs
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
* store log: s/NOTIFY/NOTIFIER/
Co-authored-by: Efim Poberezkin <8711996+efim-poberezkin@users.noreply.github.com >
2021-11-14 18:52:29 +00:00
Evgeny Poberezkin
33de5f6fec
include migrations in the package, update docs, versions ( #194 )
...
* include migrations in the package, update versions
* update DigitalOcean version
2021-09-11 18:36:12 +01:00
Evgeny Poberezkin
0f9226ba2a
update version (0.4.0) and changelog ( #193 )
...
* update version (0.4.0) and changelog
* changelog corrections
* make tests more stable
2021-09-11 10:26:51 +01:00
Efim Poberezkin
862f25500d
v4 ( #192 )
2021-09-09 01:30:39 +10:00
Evgeny Poberezkin
d23254f44a
SMP block size via config, the client can override size set by the server ( #188 )
2021-09-03 20:16:10 +01:00
Evgeny Poberezkin
9a3afda290
ACK command, ackMessage, do not send ACK to SMP server on MSG (after the initial handshake) ( #187 )
2021-09-01 08:29:12 +01:00
Evgeny Poberezkin
7b5ebf7bd2
change type of agent sendMessage result to AgentMsgId ( #183 )
2021-08-26 23:25:49 +01:00
Evgeny Poberezkin
cb950ae2e4
add SMP queue quota to server config (and use TBQueue for messages) ( #182 )
2021-08-26 22:54:51 +01:00
Evgeny Poberezkin
cda02a3b30
support 3072 bits RSA key size ( #180 )
2021-08-22 10:04:49 +01:00
Evgeny Poberezkin
dd5137c336
asynchronous message sending to allow accepting messages when agent (or server) is offline ( #179 )
...
* asynchronous message sending to allow accepting messages when agent (or server) is offline
* send pending messages after agent restart; test for pending messages delivery when server restarted
* test pending message delivery after agent restart
* message delivery process per server
* test layout
2021-08-12 22:15:55 +01:00
Evgeny Poberezkin
e045774caa
reconnect server and resubscribe connections after disconnection ( #178 )
2021-08-09 08:49:49 +01:00
Evgeny Poberezkin
3829479a21
Remove introductions, rename CONF/LET to REQ/ACPT ( #175 )
...
* remove intros and functions in Reader monad
* rename CONF/LET to REQ/ACPT, allowConnection to acceptConnection
2021-08-05 08:27:44 +01:00