From dc67ee394205802d30d888387dffa7f588099217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 5 May 2019 13:37:01 +0200 Subject: Signed identities using ED25519 --- src/Network.hs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src/Network.hs') diff --git a/src/Network.hs b/src/Network.hs index 6609667..44f27e7 100644 --- a/src/Network.hs +++ b/src/Network.hs @@ -17,6 +17,7 @@ import Network.Socket import Network.Socket.ByteString (recvFrom, sendTo) import Identity +import PubKey import Storage @@ -108,30 +109,38 @@ peerDiscovery bhost sidentity = do void $ sendTo sock (BL.toStrict $ BL.concat [ serializeObject $ transportToObject $ IdentityRequest ref (storedRef sidentity) , lazyLoadBytes $ storedRef sidentity + , lazyLoadBytes $ storedRef $ signedData $ fromStored sidentity + , lazyLoadBytes $ storedRef $ idKeyIdentity $ fromStored $ signedData $ fromStored sidentity + , lazyLoadBytes $ storedRef $ signedSignature $ fromStored sidentity ]) peer packet _ _ peer (IdentityRequest ref from) [] = do putStrLn $ "Got identity request: for " ++ show ref ++ " by " ++ show from ++ " from " ++ show peer ++ " without content" - packet chan sock peer (IdentityRequest ref from) objs@(obj:_) = do + packet chan sock peer (IdentityRequest ref from) (obj:objs) = do putStrLn $ "Got identity request: for " ++ show ref ++ " by " ++ show from ++ " from " ++ show peer - print objs + print (obj:objs) from' <- store (storedStorage sidentity) obj if from == from' - then do writeChan chan $ Peer (wrappedLoad from) (DatagramAddress peer) + then do forM_ objs $ store $ storedStorage sidentity + writeChan chan $ Peer (wrappedLoad from) (DatagramAddress peer) void $ sendTo sock (BL.toStrict $ BL.concat [ serializeObject $ transportToObject $ IdentityResponse (storedRef sidentity) , lazyLoadBytes $ storedRef sidentity + , lazyLoadBytes $ storedRef $ signedData $ fromStored sidentity + , lazyLoadBytes $ storedRef $ idKeyIdentity $ fromStored $ signedData $ fromStored sidentity + , lazyLoadBytes $ storedRef $ signedSignature $ fromStored sidentity ]) peer else putStrLn $ "Mismatched content" packet _ _ peer (IdentityResponse ref) [] = do putStrLn $ "Got identity response: by " ++ show ref ++ " from " ++ show peer ++ " without content" - packet chan _ peer (IdentityResponse ref) objs@(obj:_) = do + packet chan _ peer (IdentityResponse ref) (obj:objs) = do putStrLn $ "Got identity response: by " ++ show ref ++ " from " ++ show peer - print objs + print (obj:objs) ref' <- store (storedStorage sidentity) obj if ref == ref' - then writeChan chan $ Peer (wrappedLoad ref) (DatagramAddress peer) + then do forM_ objs $ store $ storedStorage sidentity + writeChan chan $ Peer (wrappedLoad ref) (DatagramAddress peer) else putStrLn $ "Mismatched content" -- cgit v1.2.3