From 9e91ad5c7d29c2e5702ca86c73f1f699e1c2714a Mon Sep 17 00:00:00 2001 From: joe Date: Thu, 31 May 2018 00:56:14 -0400 Subject: parseNetCrypto should peel id byte before deserializing the rest of the message. --- dht-client.cabal | 1 + examples/testcookie.hs | 13 +++++++++++++ src/Network/Tox/Crypto/Transport.hs | 4 ++-- src/Network/Tox/DHT/Transport.hs | 1 + 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/dht-client.cabal b/dht-client.cabal index 81521e05..ef634a01 100644 --- a/dht-client.cabal +++ b/dht-client.cabal @@ -286,6 +286,7 @@ executable dhtd ghc-options: -rtsopts -fdefer-typed-holes -threaded executable testcookie + buildable: False hs-source-dirs: examples main-is: testcookie.hs default-language: Haskell2010 diff --git a/examples/testcookie.hs b/examples/testcookie.hs index c4974125..5f5d4e83 100644 --- a/examples/testcookie.hs +++ b/examples/testcookie.hs @@ -7,6 +7,7 @@ import Crypto.Tox import Network.Tox import Network.Tox.DHT.Handlers import Network.Tox.Crypto.Handlers +import Network.Tox.DHT.Transport (Cookie(..)) import Data.Serialize as S @@ -28,6 +29,18 @@ import Data.Serialize as S main = do crypto <- newCrypto + secUser <- generateSecretKey + let pubUser = toPublic secUser + node = read "Ivr3mkGriCmv5FeF91UPZbkirDfpIagXcfvo6ozUCRp@92.99.99.99:33412" + ecookie@(Cookie cookieNonce eCookieData) <- createCookie crypto node pubUser + + let bs = encode ecookie + print $ (decode bs :: Either String Cookie) + + + sym <- atomically $ transportSymmetric crypto + print $ decryptSymmetric sym cookieNonce eCookieData >>= decodePlain + n24 <- atomically $ transportNewNonce crypto putStrLn $ "n24 = " ++ show n24 let e24 = S.encode n24 diff --git a/src/Network/Tox/Crypto/Transport.hs b/src/Network/Tox/Crypto/Transport.hs index 141ef792..1444ffca 100644 --- a/src/Network/Tox/Crypto/Transport.hs +++ b/src/Network/Tox/Crypto/Transport.hs @@ -81,8 +81,8 @@ data NetCrypto | NetCrypto (CryptoPacket Encrypted) parseNetCrypto :: ByteString -> SockAddr -> Either String (NetCrypto, SockAddr) -parseNetCrypto pkt@(B.uncons -> Just (0x1a,_)) saddr = left ("parseNetCrypto: "++) $ (,saddr) . NetHandshake <$> runGet get pkt -parseNetCrypto pkt@(B.uncons -> Just (0x1b,_)) saddr = left ("parseNetCrypto: "++) $ (,saddr) . NetCrypto <$> runGet get pkt +parseNetCrypto (B.uncons -> Just (0x1a,pkt)) saddr = left ("parseNetCrypto: "++) $ (,saddr) . NetHandshake <$> runGet get pkt +parseNetCrypto (B.uncons -> Just (0x1b,pkt)) saddr = left ("parseNetCrypto: "++) $ (,saddr) . NetCrypto <$> runGet get pkt parseNetCrypto _ _ = Left "parseNetCrypto: ?" encodeNetCrypto :: NetCrypto -> SockAddr -> (ByteString, SockAddr) diff --git a/src/Network/Tox/DHT/Transport.hs b/src/Network/Tox/DHT/Transport.hs index f7feea3b..59b22673 100644 --- a/src/Network/Tox/DHT/Transport.hs +++ b/src/Network/Tox/DHT/Transport.hs @@ -371,6 +371,7 @@ data CookieData = CookieData -- 16 (mac) , longTermKey :: PublicKey -- 32 , dhtKey :: PublicKey -- + 32 } -- = 88 bytes when encrypted. + deriving Show instance Sized CookieData where size = ConstSize 72 -- cgit v1.2.3