diff --git a/CHANGELOG.md b/CHANGELOG.md index e1c2e0086..42dce14ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,26 @@ +# 1.1.0 + +SMP server: + +- message TTL and periodic deletion of old messages +- configuration to prevent creation of the new queues + +SMP agent: + +- asynchronous connection handshake +- configurable SMP servers at run-time +- use TCP keep-alive for connection stability +- improve stability of connection subscriptions +- auto-vacuum DB to remove deleted records + # 1.0.3 SMP server: + - Reduce server message queue quota to 128 messages. SMP agent: + - Add "yes to migrations" option. - Make new SMP client attempt to reconnect on network error. - Reduce connection handshake expiration to 2 days. @@ -13,24 +30,29 @@ JSON encoding of types used in simplex-chat, some other minor adjustments. # 1.0.2 General: + - Enable TLS 1.3 parameters for TLS handshake (server and client). - Switch from hs-tls fork to original repo now that it supports getFinished and getPeerFinished APIs for both TLS 1.2 and TLS 1.3. SMP server: + - Perform TLS handshake in a separate thread per-connection. SMP agent: + - Cease attempts to send HELLO after one week timeout. - Coalesce requests to connect to SMP servers, to have 1 connection per server. # 1.0.1 SMP server: + - Explicitly set line buffering in stdout/stderr to log each line when output is redirected to files. # 1.0.0 Security and privacy improvements: + - Faster and more secure 2-layer E2E encryption with additional encryption layer between servers and recipients: - application messages in each duplex connection (managed by SMP agents - see [overview](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md)) are encrypted using [double-ratchet algorithm](https://www.signal.org/docs/specifications/doubleratchet/), providing forward secrecy and break-in recovery. This layer uses two Curve448 keys per client for [X3DH key agreement](https://www.signal.org/docs/specifications/x3dh/), SHA512 based HKDFs and AES-GCM AEAD encryption. - SMP client messages are additionally E2E encrypted in each SMP queue to avoid cipher-text correlation of messages sent via multiple redundant queues (that will be supported soon). This and the next layer use [NaCl crypto_box algorithm](https://nacl.cr.yp.to/index.html) with XSalsa20Poly1305 cipher and Curve25519 keys for DH key agreement. @@ -43,13 +65,16 @@ Security and privacy improvements: - Server identity verification via server offline certificate fingerprints included in SMP server addresses. New functionality: + - Support for notification servers with new SMP commands: `NKEY`/`NID`, `NSUB`/`NMSG`. Efficiency improvements: + - Binary protocol encodings to reduce overhead from circa 15% to approximately 3.7% of transmitted application message size, with only 2.2% overhead for SMP protocol messages. - More performant cryptographic algorithms. For more information about SimpleX: + - [SimpleX overview](https://github.com/simplex-chat/simplexmq/blob/master/protocol/overview-tjr.md). - [SimpleX chat v1 announcement](https://github.com/simplex-chat/simplex-chat/blob/master/blog/20220112-simplex-chat-v1-released.md). diff --git a/package.yaml b/package.yaml index a06edb7f6..c67d6a071 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: simplexmq -version: 1.0.3 +version: 1.1.0 synopsis: SimpleXMQ message broker description: | This package includes <./docs/Simplex-Messaging-Server.html server>, diff --git a/simplexmq.cabal b/simplexmq.cabal index 2d40d77ee..c27390aaa 100644 --- a/simplexmq.cabal +++ b/simplexmq.cabal @@ -5,7 +5,7 @@ cabal-version: 1.12 -- see: https://github.com/sol/hpack name: simplexmq -version: 1.0.3 +version: 1.1.0 synopsis: SimpleXMQ message broker description: This package includes <./docs/Simplex-Messaging-Server.html server>, <./docs/Simplex-Messaging-Client.html client> and diff --git a/src/Simplex/Messaging/Transport.hs b/src/Simplex/Messaging/Transport.hs index 0f487af7e..81248b221 100644 --- a/src/Simplex/Messaging/Transport.hs +++ b/src/Simplex/Messaging/Transport.hs @@ -97,7 +97,7 @@ supportedSMPVersions :: VersionRange supportedSMPVersions = mkVersionRange 1 1 simplexMQVersion :: String -simplexMQVersion = "1.0.3" +simplexMQVersion = "1.1.0" -- * Transport connection class diff --git a/tests/ServerTests.hs b/tests/ServerTests.hs index 1719caab9..06535c00d 100644 --- a/tests/ServerTests.hs +++ b/tests/ServerTests.hs @@ -491,7 +491,7 @@ testMsgExpireOnSend t = (sId, rId, rKey, dhShared) <- testSMPClient @c $ \rh -> createAndSecureQueue rh sPub let dec nonce = C.cbDecrypt dhShared (C.cbNonce nonce) Resp "1" _ OK <- signSendRecv sh sKey ("1", sId, SEND "hello (should expire)") - threadDelay 2000000 + threadDelay 2500000 Resp "2" _ OK <- signSendRecv sh sKey ("2", sId, SEND "hello (should NOT expire)") testSMPClient @c $ \rh -> do Resp "3" _ (MSG mId _ msg) <- signSendRecv rh rKey ("3", rId, SUB) @@ -508,7 +508,7 @@ testMsgExpireOnInterval t = testSMPClient @c $ \sh -> do (sId, rId, rKey, _) <- testSMPClient @c $ \rh -> createAndSecureQueue rh sPub Resp "1" _ OK <- signSendRecv sh sKey ("1", sId, SEND "hello (should expire)") - threadDelay 2000000 + threadDelay 2500000 testSMPClient @c $ \rh -> do Resp "2" _ OK <- signSendRecv rh rKey ("2", rId, SUB) 1000 `timeout` tGet @BrokerMsg rh >>= \case @@ -524,7 +524,7 @@ testMsgNOTExpireOnInterval t = (sId, rId, rKey, dhShared) <- testSMPClient @c $ \rh -> createAndSecureQueue rh sPub let dec nonce = C.cbDecrypt dhShared (C.cbNonce nonce) Resp "1" _ OK <- signSendRecv sh sKey ("1", sId, SEND "hello (should NOT expire)") - threadDelay 2000000 + threadDelay 2500000 testSMPClient @c $ \rh -> do Resp "2" _ (MSG mId _ msg) <- signSendRecv rh rKey ("2", rId, SUB) (dec mId msg, Right "hello (should NOT expire)") #== "delivered"