diff options
author | Joe Crayne <joe@jerkface.net> | 2020-01-25 04:22:21 -0500 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2020-01-25 19:18:12 -0500 |
commit | ab97bbab7861355cc5e6384ea8c124ff5d1c41b0 (patch) | |
tree | 016d863df8532d998a2452fce955f2a078bb39da | |
parent | 6d89d327883f41ce7f3a8231620d98a9a5aec7e9 (diff) |
Fixed decryption of cookies via TCP.
-rw-r--r-- | dht/src/Network/Tox/DHT/Transport.hs | 13 | ||||
-rw-r--r-- | dht/src/Network/Tox/Transport.hs | 16 |
2 files changed, 18 insertions, 11 deletions
diff --git a/dht/src/Network/Tox/DHT/Transport.hs b/dht/src/Network/Tox/DHT/Transport.hs index ed755880..5de92916 100644 --- a/dht/src/Network/Tox/DHT/Transport.hs +++ b/dht/src/Network/Tox/DHT/Transport.hs | |||
@@ -59,6 +59,8 @@ import Data.Tuple | |||
59 | import Data.Word | 59 | import Data.Word |
60 | import GHC.Generics | 60 | import GHC.Generics |
61 | import Network.Socket | 61 | import Network.Socket |
62 | import DPut | ||
63 | import DebugTag | ||
62 | 64 | ||
63 | type DHTTransport ni = Transport String ni (DHTMessage Encrypted8) | 65 | type DHTTransport ni = Transport String ni (DHTMessage Encrypted8) |
64 | type HandleHi ni a = Arrival String ni (DHTMessage Encrypted8) -> IO a | 66 | type HandleHi ni a = Arrival String ni (DHTMessage Encrypted8) -> IO a |
@@ -97,8 +99,8 @@ mapMessage f (DHTLanDiscovery nid) = Nothing | |||
97 | instance Sized Ping where size = ConstSize 1 | 99 | instance Sized Ping where size = ConstSize 1 |
98 | instance Sized Pong where size = ConstSize 1 | 100 | instance Sized Pong where size = ConstSize 1 |
99 | 101 | ||
100 | parseDHTAddr :: Eq saddr => | 102 | parseDHTAddr :: (Eq saddr, Show ni) => |
101 | STM [(saddr, (Int, PublicKey))] | 103 | (saddr -> STM (Maybe ni)) |
102 | -> (NodeId -> saddr -> Either String ni) | 104 | -> (NodeId -> saddr -> Either String ni) |
103 | -> (ByteString, saddr) | 105 | -> (ByteString, saddr) |
104 | -> IO (Either (DHTMessage Encrypted8,ni) (ByteString,saddr)) | 106 | -> IO (Either (DHTMessage Encrypted8,ni) (ByteString,saddr)) |
@@ -113,10 +115,9 @@ parseDHTAddr pendingCookies nodeInfo (msg,saddr) | |||
113 | 0x04 -> left $ direct nodeInfo bs saddr DHTSendNodes | 115 | 0x04 -> left $ direct nodeInfo bs saddr DHTSendNodes |
114 | 0x18 -> left $ direct nodeInfo bs saddr DHTCookieRequest | 116 | 0x18 -> left $ direct nodeInfo bs saddr DHTCookieRequest |
115 | 0x19 -> do | 117 | 0x19 -> do |
116 | cs <- atomically pendingCookies | 118 | mni <- atomically $ pendingCookies saddr |
117 | let ni = fromMaybe (noReplyAddr nodeInfo saddr) $ do | 119 | let ni = fromMaybe (noReplyAddr nodeInfo saddr) mni |
118 | (cnt,key) <- lookup saddr cs <|> listToMaybe (map snd cs) | 120 | dput XMan $ "Got encrypted cookie! mni="++show mni |
119 | either (const Nothing) Just $ nodeInfo (key2id key) saddr | ||
120 | left $ fanGet bs getCookie (uncurry DHTCookie) (const $ ni) | 121 | left $ fanGet bs getCookie (uncurry DHTCookie) (const $ ni) |
121 | 0x20 -> left $ fanGet bs getDHTReqest (uncurry DHTDHTRequest) (asymNodeInfo nodeInfo saddr . snd) | 122 | 0x20 -> left $ fanGet bs getDHTReqest (uncurry DHTDHTRequest) (asymNodeInfo nodeInfo saddr . snd) |
122 | 0x21 -> left $ do | 123 | 0x21 -> left $ do |
diff --git a/dht/src/Network/Tox/Transport.hs b/dht/src/Network/Tox/Transport.hs index b017f7be..e90917f6 100644 --- a/dht/src/Network/Tox/Transport.hs +++ b/dht/src/Network/Tox/Transport.hs | |||
@@ -18,18 +18,24 @@ import Network.Tox.Onion.Transport | |||
18 | import Network.Tox.Crypto.Transport | 18 | import Network.Tox.Crypto.Transport |
19 | import Network.Tox.Onion.Routes | 19 | import Network.Tox.Onion.Routes |
20 | 20 | ||
21 | import Control.Applicative | ||
21 | import Control.Concurrent.STM | 22 | import Control.Concurrent.STM |
22 | import qualified Data.ByteString as B | 23 | import qualified Data.ByteString as B |
23 | import qualified Data.Dependent.Map as DMap | 24 | import qualified Data.Dependent.Map as DMap |
24 | import Data.Dependent.Sum | 25 | import Data.Dependent.Sum |
25 | import Data.Functor.Identity | 26 | import Data.Functor.Identity |
27 | import Data.Maybe | ||
26 | import Network.Socket | 28 | import Network.Socket |
27 | 29 | ||
28 | pendingCookiesUDP :: TransportCrypto -> STM [(SockAddr, (Int, PublicKey))] | 30 | pendingCookiesUDP :: TransportCrypto -> SockAddr -> STM (Maybe UDP.NodeInfo) |
29 | pendingCookiesUDP crypto = readTVar $ pendingCookies crypto | 31 | pendingCookiesUDP crypto saddr = do |
32 | cs <- readTVar $ pendingCookies crypto | ||
33 | return $ do | ||
34 | (_,key) <- lookup saddr cs <|> listToMaybe (map snd cs) | ||
35 | either (const Nothing) Just $ nodeInfo (key2id key) saddr | ||
30 | 36 | ||
31 | pendingCookiesTCP :: TransportCrypto -> STM [(ViaRelay, (Int, PublicKey))] | 37 | pendingCookiesTCP :: ViaRelay -> STM (Maybe ViaRelay) |
32 | pendingCookiesTCP crypto = return [] -- TODO | 38 | pendingCookiesTCP ni = return $ Just ni |
33 | 39 | ||
34 | toxTransport :: | 40 | toxTransport :: |
35 | TransportCrypto | 41 | TransportCrypto |
@@ -52,7 +58,7 @@ toxTransport crypto orouter closeLookup addr udp relaynet _ tcp2client = do | |||
52 | -- rlynet0 = layerTransportM (DHT.decrypt crypto Multi.relayNodeId) (DHT.encrypt crypto Multi.relayNodeId) relaynet | 58 | -- rlynet0 = layerTransportM (DHT.decrypt crypto Multi.relayNodeId) (DHT.encrypt crypto Multi.relayNodeId) relaynet |
53 | (netcryptoTCP, relaynet0) <- partitionTransport parseCrypto encodeCrypto relaynet | 59 | (netcryptoTCP, relaynet0) <- partitionTransport parseCrypto encodeCrypto relaynet |
54 | (dhtTCP,relaynet1) <- partitionTransportM | 60 | (dhtTCP,relaynet1) <- partitionTransportM |
55 | (parseDHTAddr (pendingCookiesTCP crypto) (\nid viarelay -> Right viarelay)) | 61 | (parseDHTAddr pendingCookiesTCP (\nid viarelay -> Right viarelay)) |
56 | (fmap Just . encodeDHTAddr id) | 62 | (fmap Just . encodeDHTAddr id) |
57 | relaynet0 | 63 | relaynet0 |
58 | let _ = dhtTCP :: Transport String ViaRelay (DHTMessage Encrypted8) | 64 | let _ = dhtTCP :: Transport String ViaRelay (DHTMessage Encrypted8) |