summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2020-01-25 04:22:21 -0500
committerJoe Crayne <joe@jerkface.net>2020-01-25 19:18:12 -0500
commitab97bbab7861355cc5e6384ea8c124ff5d1c41b0 (patch)
tree016d863df8532d998a2452fce955f2a078bb39da
parent6d89d327883f41ce7f3a8231620d98a9a5aec7e9 (diff)
Fixed decryption of cookies via TCP.
-rw-r--r--dht/src/Network/Tox/DHT/Transport.hs13
-rw-r--r--dht/src/Network/Tox/Transport.hs16
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
59import Data.Word 59import Data.Word
60import GHC.Generics 60import GHC.Generics
61import Network.Socket 61import Network.Socket
62import DPut
63import DebugTag
62 64
63type DHTTransport ni = Transport String ni (DHTMessage Encrypted8) 65type DHTTransport ni = Transport String ni (DHTMessage Encrypted8)
64type HandleHi ni a = Arrival String ni (DHTMessage Encrypted8) -> IO a 66type HandleHi ni a = Arrival String ni (DHTMessage Encrypted8) -> IO a
@@ -97,8 +99,8 @@ mapMessage f (DHTLanDiscovery nid) = Nothing
97instance Sized Ping where size = ConstSize 1 99instance Sized Ping where size = ConstSize 1
98instance Sized Pong where size = ConstSize 1 100instance Sized Pong where size = ConstSize 1
99 101
100parseDHTAddr :: Eq saddr => 102parseDHTAddr :: (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
18import Network.Tox.Crypto.Transport 18import Network.Tox.Crypto.Transport
19import Network.Tox.Onion.Routes 19import Network.Tox.Onion.Routes
20 20
21import Control.Applicative
21import Control.Concurrent.STM 22import Control.Concurrent.STM
22import qualified Data.ByteString as B 23import qualified Data.ByteString as B
23import qualified Data.Dependent.Map as DMap 24import qualified Data.Dependent.Map as DMap
24import Data.Dependent.Sum 25import Data.Dependent.Sum
25import Data.Functor.Identity 26import Data.Functor.Identity
27import Data.Maybe
26import Network.Socket 28import Network.Socket
27 29
28pendingCookiesUDP :: TransportCrypto -> STM [(SockAddr, (Int, PublicKey))] 30pendingCookiesUDP :: TransportCrypto -> SockAddr -> STM (Maybe UDP.NodeInfo)
29pendingCookiesUDP crypto = readTVar $ pendingCookies crypto 31pendingCookiesUDP 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
31pendingCookiesTCP :: TransportCrypto -> STM [(ViaRelay, (Int, PublicKey))] 37pendingCookiesTCP :: ViaRelay -> STM (Maybe ViaRelay)
32pendingCookiesTCP crypto = return [] -- TODO 38pendingCookiesTCP ni = return $ Just ni
33 39
34toxTransport :: 40toxTransport ::
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)