Change encryption handshake brains methods

This commit is contained in:
Sergey Ivanov 2023-07-13 00:57:38 +04:00
parent 792d627870
commit dd9cbcd284
2 changed files with 32 additions and 49 deletions

View File

@ -605,63 +605,51 @@ transactional brains action = do
--- ---
insertPeerAsymmKey :: forall e m . insertPeerAsymmKey :: forall e m . (e ~ L4Proto, MonadIO m)
( e ~ L4Proto
, MonadIO m
)
=> BasicBrains e => BasicBrains e
-> Peer e -> Peer e
-> Encrypt.PublicKey -> Encrypt.PublicKey
-> m ()
insertPeerAsymmKey br peer hAsymmKey = do
let conn = view brainsDb br
void $ liftIO $ execute conn [qc|
INSERT INTO peer_asymmkey (peer,asymmkey)
VALUES (?,?)
ON CONFLICT (peer)
DO UPDATE SET
asymmkey = excluded.asymmkey
|] (show $ pretty peer, show hAsymmKey)
insertPeerSymmKey :: forall e m .
( e ~ L4Proto
, MonadIO m
)
=> BasicBrains e
-> Peer e
-> Encrypt.CombinedKey -> Encrypt.CombinedKey
-> m () -> m ()
insertPeerSymmKey br peer hSymmKey = do insertPeerAsymmKey br peer hAsymmKey hSymmKey = do
insertPeerAsymmKey br peer hAsymmKey hSymmKey
insertPeerAsymmKey' br (show $ pretty peer) hAsymmKey hSymmKey
insertPeerAsymmKey' :: forall e m . (e ~ L4Proto, MonadIO m)
=> BasicBrains e
-> String
-> Encrypt.PublicKey
-> Encrypt.CombinedKey
-> m ()
insertPeerAsymmKey' br key hAsymmKey hSymmKey = do
let conn = view brainsDb br let conn = view brainsDb br
void $ liftIO $ execute conn [qc| void $ liftIO $ execute conn [qc|
INSERT INTO peer_symmkey (peer,symmkey) INSERT INTO peer_asymmkey (peer,asymmkey,symmkey)
VALUES (?,?) VALUES (?,?,?)
ON CONFLICT (peer) ON CONFLICT (peer)
DO UPDATE SET DO UPDATE SET
symmkey = excluded.symmkey asymmkey = excluded.asymmkey
, symmkey = excluded.symmkey
|] (key, show hAsymmKey, show hSymmKey)
|] (show $ pretty peer, show hSymmKey) ---
deletePeerAsymmKey :: forall e m . (e ~ L4Proto, MonadIO m) deletePeerAsymmKey :: forall e m . (e ~ L4Proto, MonadIO m)
=> BasicBrains e -> Peer e -> m () => BasicBrains e -> Peer e -> m ()
deletePeerAsymmKey br peer = deletePeerAsymmKey br peer =
void $ liftIO $ execute (view brainsDb br) [qc| deletePeerAsymmKey' br (show $ pretty peer)
DELETE FROM peer_symmkey
WHERE peer = ?
|] (Only (show $ pretty peer))
deletePeerSymmKey :: forall e m . (e ~ L4Proto, MonadIO m) deletePeerAsymmKey' :: forall e m . (e ~ L4Proto, MonadIO m)
=> BasicBrains e -> Peer e -> m () => BasicBrains e -> String -> m ()
deletePeerSymmKey br peer = deletePeerAsymmKey' br key =
void $ liftIO $ execute (view brainsDb br) [qc| void $ liftIO $ execute (view brainsDb br) [qc|
DELETE FROM peer_symmkey DELETE FROM peer_asymmkey
WHERE peer = ? WHERE peer = ?
|] (Only (show $ pretty peer)) |] (Only key)
--- ---
@ -757,14 +745,6 @@ newBasicBrains cfg = liftIO do
create table if not exists peer_asymmkey create table if not exists peer_asymmkey
( peer text not null ( peer text not null
, asymmkey text not null , asymmkey text not null
, ts DATE DEFAULT (datetime('now','localtime'))
, primary key (peer)
)
|]
execute_ conn [qc|
create table if not exists peer_symmkey
( peer text not null
, symmkey text not null , symmkey text not null
, ts DATE DEFAULT (datetime('now','localtime')) , ts DATE DEFAULT (datetime('now','localtime'))
, primary key (peer) , primary key (peer)

View File

@ -654,14 +654,17 @@ runPeer opts = U.handle (\e -> myException e
{ encHandshake_considerPeerAsymmKey = \peer mpeerData -> \case { encHandshake_considerPeerAsymmKey = \peer mpeerData -> \case
Nothing -> do Nothing -> do
deletePeerAsymmKey brains peer deletePeerAsymmKey brains peer
deletePeerSymmKey brains peer forM_ mpeerData \peerData ->
deletePeerAsymmKey' brains (show peerData)
Just pk -> do Just pk -> do
-- emit PeerAsymmInfoKey (PeerAsymmPubKey peer pk) -- emit PeerAsymmInfoKey (PeerAsymmPubKey peer pk)
insertPeerAsymmKey brains peer pk let symmk = genCommonSecret @s
insertPeerSymmKey brains peer $
genCommonSecret @s
(privKeyFromKeypair @s (view envAsymmetricKeyPair penv)) (privKeyFromKeypair @s (view envAsymmetricKeyPair penv))
pk pk
case mpeerData of
Nothing -> insertPeerAsymmKey brains peer pk symmk
Just peerData ->
insertPeerAsymmKey' brains (show peerData) pk symmk
} }
env <- ask env <- ask