summaryrefslogtreecommitdiff
path: root/src/Network/Tox/Onion/Transport.hs
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2017-11-05 18:34:15 -0500
committerjoe <joe@jerkface.net>2017-11-05 18:34:15 -0500
commitdf92dcd4acbb5d1b035cbca1f3290553e00afd2f (patch)
tree76be2ce29ab67c9268a8cc26691c5588a986209b /src/Network/Tox/Onion/Transport.hs
parenteed5ae421e6e0e57ba4259cc4b4c8b132d643aa2 (diff)
Fixed Onion.Transport.decrypt broken by side-effecting style
at commit 8039d812b7ea8ae566f8873452ac34597336ddfc.
Diffstat (limited to 'src/Network/Tox/Onion/Transport.hs')
-rw-r--r--src/Network/Tox/Onion/Transport.hs13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/Network/Tox/Onion/Transport.hs b/src/Network/Tox/Onion/Transport.hs
index 539e7cee..5c4544ca 100644
--- a/src/Network/Tox/Onion/Transport.hs
+++ b/src/Network/Tox/Onion/Transport.hs
@@ -685,19 +685,19 @@ decrypt :: TransportCrypto -> OnionMessage Encrypted -> OnionDestination r -> IO
685decrypt crypto msg addr = do 685decrypt crypto msg addr = do
686 (skey,pkey) <- selectKey crypto msg addr 686 (skey,pkey) <- selectKey crypto msg addr
687 let decipher1 :: Serialize a => 687 let decipher1 :: Serialize a =>
688 TransportCrypto -> SecretKey -> PublicKey -> Nonce24 688 TransportCrypto -> SecretKey -> Nonce24
689 -> Either (PublicKey,Encrypted a) (Asymm (Encrypted a)) 689 -> Either (PublicKey,Encrypted a) (Asymm (Encrypted a))
690 -> (IO ∘ Either String ∘ Identity) a 690 -> (IO ∘ Either String ∘ Identity) a
691 decipher1 crypto k pk n d = Composed $ do 691 decipher1 crypto k n arg = Composed $ do
692 secret <- lookupSharedSecret crypto k pk n 692 let (sender,e) = either id (senderKey &&& asymmData) arg
693 let ciphered = either snd asymmData d 693 secret <- lookupSharedSecret crypto k sender n
694 return $ Composed $ do 694 return $ Composed $ do
695 plain <- ToxCrypto.decrypt secret ciphered 695 plain <- ToxCrypto.decrypt secret e
696 Identity <$> decodePlain plain 696 Identity <$> decodePlain plain
697 decipher :: Serialize a 697 decipher :: Serialize a
698 => Nonce24 -> Either (Encrypted a) (Asymm (Encrypted a)) 698 => Nonce24 -> Either (Encrypted a) (Asymm (Encrypted a))
699 -> (IO ∘ Either String ∘ Identity) a 699 -> (IO ∘ Either String ∘ Identity) a
700 decipher = (\n -> decipher1 crypto skey pkey n . left (senderkey addr)) 700 decipher = (\n -> decipher1 crypto skey n . left (senderkey addr))
701 foo <- sequenceMessage $ transcode decipher msg 701 foo <- sequenceMessage $ transcode decipher msg
702 return $ do 702 return $ do
703 msg <- sequenceMessage foo 703 msg <- sequenceMessage foo
@@ -726,7 +726,6 @@ decryptMessage crypto (sk,pk) n arg = do
726 secret <- lookupSharedSecret crypto sk sender n 726 secret <- lookupSharedSecret crypto sk sender n
727 return $ plain $ ToxCrypto.decrypt secret e 727 return $ plain $ ToxCrypto.decrypt secret e
728 728
729
730sequenceMessage :: Applicative m => OnionMessage (m ∘ f) -> m (OnionMessage f) 729sequenceMessage :: Applicative m => OnionMessage (m ∘ f) -> m (OnionMessage f)
731sequenceMessage (OnionAnnounce a) = fmap OnionAnnounce $ sequenceA $ fmap uncomposed a 730sequenceMessage (OnionAnnounce a) = fmap OnionAnnounce $ sequenceA $ fmap uncomposed a
732sequenceMessage (OnionAnnounceResponse n8 n24 dta) = OnionAnnounceResponse n8 n24 <$> uncomposed dta 731sequenceMessage (OnionAnnounceResponse n8 n24 dta) = OnionAnnounceResponse n8 n24 <$> uncomposed dta