mirror of
https://github.com/simplex-chat/simplexmq.git
synced 2026-06-09 04:12:55 +00:00
b83d897650
* smp protocol: short links types and other changes from RFC * add fields for queue link ID and data * create queue and ntf credentials with NEW command * all tests * simplfiy types, update rfc * update rfc * include SenderId in NEW request in case queue data is sent * store queue data and generate link ID if needed * update rfc * agent API and types * SMP commands and persistence for short links * SMP client functions for short links * agent client functions for short links * create rcv queue with short link (TODO secret_box) * encryption and encoding for link data, postgres client migration * test creating short link * get link and data, tests * comments * type signature
47 lines
1.7 KiB
Haskell
47 lines
1.7 KiB
Haskell
{-# LANGUAGE DataKinds #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
{-# LANGUAGE TypeApplications #-}
|
|
|
|
module AgentTests.ShortLinkTests (shortLinkTests) where
|
|
|
|
import AgentTests.ConnectionRequestTests (contactConnRequest, invConnRequest)
|
|
import Control.Concurrent.STM
|
|
import Simplex.Messaging.Agent.Protocol (supportedSMPAgentVRange)
|
|
import qualified Simplex.Messaging.Crypto as C
|
|
import qualified Simplex.Messaging.Crypto.ShortLink as SL
|
|
import Test.Hspec
|
|
|
|
-- TODO [short tests] tests failures
|
|
shortLinkTests :: Spec
|
|
shortLinkTests = do
|
|
it "should encrypt and decrypt invitation short link data" testInvShortLink
|
|
it "should encrypt and decrypt contact short link data" testContactShortLink
|
|
|
|
testInvShortLink :: IO ()
|
|
testInvShortLink = do
|
|
-- encrypt
|
|
g <- C.newRandom
|
|
sigKeys <- atomically $ C.generateKeyPair @'C.Ed25519 g
|
|
let userData = "some user data"
|
|
(linkKey, linkData) = SL.encodeSignLinkData sigKeys supportedSMPAgentVRange invConnRequest userData
|
|
k = SL.invShortLinkKdf linkKey
|
|
srvData <- SL.encryptLinkData g k linkData
|
|
-- decrypt
|
|
Right (connReq, userData') <- pure $ SL.decryptLinkData linkKey k srvData
|
|
connReq `shouldBe` invConnRequest
|
|
userData' `shouldBe` userData
|
|
|
|
testContactShortLink :: IO ()
|
|
testContactShortLink = do
|
|
-- encrypt
|
|
g <- C.newRandom
|
|
sigKeys <- atomically $ C.generateKeyPair @'C.Ed25519 g
|
|
let userData = "some user data"
|
|
(linkKey, linkData) = SL.encodeSignLinkData sigKeys supportedSMPAgentVRange contactConnRequest userData
|
|
(_linkId, k) = SL.contactShortLinkKdf linkKey
|
|
srvData <- SL.encryptLinkData g k linkData
|
|
-- decrypt
|
|
Right (connReq, userData') <- pure $ SL.decryptLinkData linkKey k srvData
|
|
connReq `shouldBe` contactConnRequest
|
|
userData' `shouldBe` userData
|