From c2c1dd84a0c8fb01c9b7d310466f8889f2897d1e Mon Sep 17 00:00:00 2001 From: Sergey Ivanov Date: Tue, 18 Jul 2023 22:11:51 +0400 Subject: [PATCH] _envEncryptionKeys :: Map -> HashMap --- hbs2-core/lib/HBS2/Actors/Peer.hs | 11 +++++++++-- hbs2-core/lib/HBS2/Data/Types/Peer.hs | 17 ++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/hbs2-core/lib/HBS2/Actors/Peer.hs b/hbs2-core/lib/HBS2/Actors/Peer.hs index a03f3b02..d548498d 100644 --- a/hbs2-core/lib/HBS2/Actors/Peer.hs +++ b/hbs2-core/lib/HBS2/Actors/Peer.hs @@ -35,7 +35,7 @@ import Data.Map (Map) import Data.Map qualified as Map import Data.Maybe import GHC.TypeLits -import Lens.Micro.Platform +import Lens.Micro.Platform as Lens import Data.HashMap.Strict (HashMap) import Data.HashMap.Strict qualified as HashMap import Control.Concurrent.STM.TVar @@ -157,9 +157,16 @@ data PeerEnv e = , _envReqMsgLimit :: Cache (Peer e, Integer, Encoded e) () , _envReqProtoLimit :: Cache (Peer e, Integer) () , _envAsymmetricKeyPair :: AsymmKeypair (Encryption e) - , _envEncryptionKeys :: TVar (Map (PeerData L4Proto) (CommonSecret (Encryption L4Proto))) + , _envEncryptionKeys :: TVar (HashMap (PeerData L4Proto) (CommonSecret (Encryption L4Proto))) } +setEncryptionKey :: + ( Hashable (PubKey 'Sign (Encryption L4Proto)) + , Hashable PeerNonce + ) => PeerEnv L4Proto -> PeerData L4Proto -> Maybe (CommonSecret (Encryption L4Proto)) -> IO () +setEncryptionKey penv pd msecret = + atomically $ modifyTVar' (_envEncryptionKeys penv) $ Lens.at pd .~ msecret + newtype PeerM e m a = PeerM { fromPeerM :: ReaderT (PeerEnv e) m a } deriving newtype ( Functor , Applicative diff --git a/hbs2-core/lib/HBS2/Data/Types/Peer.hs b/hbs2-core/lib/HBS2/Data/Types/Peer.hs index 1e12b828..0c250a00 100644 --- a/hbs2-core/lib/HBS2/Data/Types/Peer.hs +++ b/hbs2-core/lib/HBS2/Data/Types/Peer.hs @@ -1,7 +1,9 @@ {-# Language UndecidableInstances #-} module HBS2.Data.Types.Peer where +import Codec.Serialise import Data.ByteString qualified as BS +import Data.Hashable import Lens.Micro.Platform import HBS2.Prelude @@ -20,9 +22,22 @@ data PeerData e = } deriving stock (Typeable,Generic) +deriving instance + ( Eq (PubKey 'Sign (Encryption e)) + , Eq PeerNonce + ) + => Eq (PeerData e) + +instance + ( Hashable (PubKey 'Sign (Encryption e)) + , Hashable PeerNonce + ) + => Hashable (PeerData e) where + hashWithSalt s PeerData{..} = hashWithSalt s (_peerOwnNonce) + deriving instance ( Show (PubKey 'Sign (Encryption e)) - , Show (Nonce ()) + , Show PeerNonce ) => Show (PeerData e)