mirror of https://github.com/voidlizard/hbs2
Actual handlers for ProxyMessaging
This commit is contained in:
parent
c2c1dd84a0
commit
a0334f5dee
|
@ -167,6 +167,13 @@ setEncryptionKey ::
|
||||||
setEncryptionKey penv pd msecret =
|
setEncryptionKey penv pd msecret =
|
||||||
atomically $ modifyTVar' (_envEncryptionKeys penv) $ Lens.at pd .~ msecret
|
atomically $ modifyTVar' (_envEncryptionKeys penv) $ Lens.at pd .~ msecret
|
||||||
|
|
||||||
|
getEncryptionKey ::
|
||||||
|
( Hashable (PubKey 'Sign (Encryption L4Proto))
|
||||||
|
, Hashable PeerNonce
|
||||||
|
) => PeerEnv L4Proto -> PeerData L4Proto -> IO (Maybe (CommonSecret (Encryption L4Proto)))
|
||||||
|
getEncryptionKey penv pd =
|
||||||
|
readTVarIO (_envEncryptionKeys penv) <&> preview (Lens.ix pd)
|
||||||
|
|
||||||
newtype PeerM e m a = PeerM { fromPeerM :: ReaderT (PeerEnv e) m a }
|
newtype PeerM e m a = PeerM { fromPeerM :: ReaderT (PeerEnv e) m a }
|
||||||
deriving newtype ( Functor
|
deriving newtype ( Functor
|
||||||
, Applicative
|
, Applicative
|
||||||
|
|
|
@ -65,16 +65,14 @@ sendBeginEncryptionExchange :: forall e s m .
|
||||||
, e ~ L4Proto
|
, e ~ L4Proto
|
||||||
, s ~ Encryption e
|
, s ~ Encryption e
|
||||||
)
|
)
|
||||||
=> PeerEnv e
|
=> PeerCredentials s
|
||||||
-> PeerCredentials s
|
|
||||||
-> Peer e
|
|
||||||
-> PubKey 'Encrypt (Encryption e)
|
-> PubKey 'Encrypt (Encryption e)
|
||||||
|
-> Peer e
|
||||||
-> m ()
|
-> m ()
|
||||||
|
|
||||||
sendBeginEncryptionExchange penv creds peer pubkey = do
|
sendBeginEncryptionExchange creds ourpubkey peer = do
|
||||||
let ourpubkey = pubKeyFromKeypair @s $ view envAsymmetricKeyPair penv
|
|
||||||
let sign = makeSign @s (view peerSignSk creds) ((cs . serialise) ourpubkey)
|
let sign = makeSign @s (view peerSignSk creds) ((cs . serialise) ourpubkey)
|
||||||
request peer (BeginEncryptionExchange @e sign pubkey)
|
request peer (BeginEncryptionExchange @e sign ourpubkey)
|
||||||
|
|
||||||
data EncryptionHandshakeAdapter e m s = EncryptionHandshakeAdapter
|
data EncryptionHandshakeAdapter e m s = EncryptionHandshakeAdapter
|
||||||
{ encHandshake_considerPeerAsymmKey :: Peer e -> Maybe (PeerData e) -> Maybe Encrypt.PublicKey -> m ()
|
{ encHandshake_considerPeerAsymmKey :: Peer e -> Maybe (PeerData e) -> Maybe Encrypt.PublicKey -> m ()
|
||||||
|
@ -115,7 +113,7 @@ encryptionHandshakeProto EncryptionHandshakeAdapter{..} penv = \case
|
||||||
|
|
||||||
creds <- getCredentials @s
|
creds <- getCredentials @s
|
||||||
let ourpubkey = pubKeyFromKeypair @s $ view envAsymmetricKeyPair penv
|
let ourpubkey = pubKeyFromKeypair @s $ view envAsymmetricKeyPair penv
|
||||||
sendBeginEncryptionExchange @e penv creds peer ourpubkey
|
sendBeginEncryptionExchange @e creds ourpubkey peer
|
||||||
|
|
||||||
BeginEncryptionExchange theirsign theirpubkey -> do
|
BeginEncryptionExchange theirsign theirpubkey -> do
|
||||||
peer <- thatPeer proto
|
peer <- thatPeer proto
|
||||||
|
|
|
@ -74,4 +74,4 @@ encryptionHandshakeWorker pconf penv creds EncryptionHandshakeAdapter{..} = do
|
||||||
|
|
||||||
forM_ peers \peer -> do
|
forM_ peers \peer -> do
|
||||||
-- TODO: Только если ещё не знаем ключ ноды
|
-- TODO: Только если ещё не знаем ключ ноды
|
||||||
sendBeginEncryptionExchange @e penv creds peer ourpubkey
|
sendBeginEncryptionExchange @e creds ourpubkey peer
|
||||||
|
|
|
@ -578,12 +578,26 @@ runPeer opts = U.handle (\e -> myException e
|
||||||
pure $ Just tcpEnv
|
pure $ Just tcpEnv
|
||||||
|
|
||||||
(proxy, penv) <- mdo
|
(proxy, penv) <- mdo
|
||||||
proxy <- newProxyMessaging mess tcp >>= \p -> do
|
proxy <- newProxyMessaging mess tcp >>= \peer -> pure peer
|
||||||
pure p
|
{ _proxy_getEncryptionKey = \peer -> do
|
||||||
{ _proxy_getEncryptionKey = undefined
|
mpeerData <- withPeerM penv $ find (KnownPeerKey peer) id
|
||||||
, _proxy_clearEncryptionKey = undefined
|
join <$> forM mpeerData \peerData -> getEncryptionKey penv peerData
|
||||||
, _proxy_sendResetEncryptionKeys = undefined
|
|
||||||
, _proxy_sendBeginEncryptionExchange = undefined
|
, _proxy_clearEncryptionKey = \peer -> do
|
||||||
|
mpeerData <- withPeerM penv $ find (KnownPeerKey peer) id
|
||||||
|
forM_ mpeerData \peerData -> setEncryptionKey penv peerData Nothing
|
||||||
|
-- deletePeerAsymmKey brains peer
|
||||||
|
forM_ mpeerData \peerData ->
|
||||||
|
deletePeerAsymmKey' brains (show peerData)
|
||||||
|
|
||||||
|
, _proxy_sendResetEncryptionKeys = \peer -> withPeerM penv do
|
||||||
|
sendResetEncryptionKeys peer
|
||||||
|
|
||||||
|
, _proxy_sendBeginEncryptionExchange = \peer -> withPeerM penv do
|
||||||
|
sendBeginEncryptionExchange pc
|
||||||
|
((pubKeyFromKeypair @s . view envAsymmetricKeyPair) penv)
|
||||||
|
peer
|
||||||
|
|
||||||
}
|
}
|
||||||
penv <- newPeerEnv (AnyStorage s) (Fabriq proxy) (getOwnPeer mess)
|
penv <- newPeerEnv (AnyStorage s) (Fabriq proxy) (getOwnPeer mess)
|
||||||
pure (proxy, penv)
|
pure (proxy, penv)
|
||||||
|
@ -661,7 +675,7 @@ runPeer opts = U.handle (\e -> myException e
|
||||||
encryptionHshakeAdapter = EncryptionHandshakeAdapter
|
encryptionHshakeAdapter = EncryptionHandshakeAdapter
|
||||||
{ encHandshake_considerPeerAsymmKey = \peer mpeerData -> \case
|
{ encHandshake_considerPeerAsymmKey = \peer mpeerData -> \case
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
deletePeerAsymmKey brains peer
|
-- deletePeerAsymmKey brains peer
|
||||||
forM_ mpeerData \peerData ->
|
forM_ mpeerData \peerData ->
|
||||||
deletePeerAsymmKey' brains (show peerData)
|
deletePeerAsymmKey' brains (show peerData)
|
||||||
Just pk -> do
|
Just pk -> do
|
||||||
|
@ -670,7 +684,9 @@ runPeer opts = U.handle (\e -> myException e
|
||||||
(privKeyFromKeypair @s (view envAsymmetricKeyPair penv))
|
(privKeyFromKeypair @s (view envAsymmetricKeyPair penv))
|
||||||
pk
|
pk
|
||||||
case mpeerData of
|
case mpeerData of
|
||||||
Nothing -> insertPeerAsymmKey brains peer pk symmk
|
Nothing -> do
|
||||||
|
-- insertPeerAsymmKey brains peer pk symmk
|
||||||
|
pure ()
|
||||||
Just peerData ->
|
Just peerData ->
|
||||||
insertPeerAsymmKey' brains (show peerData) pk symmk
|
insertPeerAsymmKey' brains (show peerData) pk symmk
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue