summaryrefslogtreecommitdiff
path: root/src/Network/Tox/NodeId.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/Tox/NodeId.hs')
-rw-r--r--src/Network/Tox/NodeId.hs15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/Network/Tox/NodeId.hs b/src/Network/Tox/NodeId.hs
index dc600db7..97faa942 100644
--- a/src/Network/Tox/NodeId.hs
+++ b/src/Network/Tox/NodeId.hs
@@ -13,6 +13,7 @@
13{-# LANGUAGE LambdaCase #-} 13{-# LANGUAGE LambdaCase #-}
14{-# LANGUAGE PatternSynonyms #-} 14{-# LANGUAGE PatternSynonyms #-}
15{-# LANGUAGE ScopedTypeVariables #-} 15{-# LANGUAGE ScopedTypeVariables #-}
16{-# LANGUAGE StandaloneDeriving #-}
16{-# LANGUAGE TupleSections #-} 17{-# LANGUAGE TupleSections #-}
17{- LANGUAGE TypeApplications -} 18{- LANGUAGE TypeApplications -}
18module Network.Tox.NodeId 19module Network.Tox.NodeId
@@ -118,6 +119,19 @@ packPublicKey ws = BA.allocAndFreeze (8 * length ws) $
118-- convenient for short-circuiting xor/distance comparisons. The PublicKey 119-- convenient for short-circuiting xor/distance comparisons. The PublicKey
119-- format is convenient for encryption. 120-- format is convenient for encryption.
120data NodeId = NodeId [Word64] !(Maybe PublicKey) 121data NodeId = NodeId [Word64] !(Maybe PublicKey)
122 deriving Data
123
124instance Data PublicKey where
125 -- Data a => (forall d b . Data d => c (d -> b) -> d -> c b) -> (forall g . g -> c g) -> a -> c a
126 gfoldl f z txt = z (throwCryptoError . publicKey) `f` (BA.convert txt :: ByteString)
127 toConstr _ = error "Crypto.PubKey.Curve25519.toConstr"
128 gunfold _ _ = error "Crypto.PubKey.Curve25519.gunfold"
129#if MIN_VERSION_base(4,2,0)
130 dataTypeOf _ = mkNoRepType "Crypto.PubKey.Curve25519.PublicKey"
131#else
132 dataTypeOf _ = mkNorepType "Crypto.PubKey.Curve25519.PublicKey"
133#endif
134
121 135
122instance Eq NodeId where 136instance Eq NodeId where
123 (NodeId ws _) == (NodeId xs _) 137 (NodeId ws _) == (NodeId xs _)
@@ -586,6 +600,7 @@ parseNoSpamJID jid = do
586 '$' : b64digits -> solveBase64NoSpamID b64digits pub 600 '$' : b64digits -> solveBase64NoSpamID b64digits pub
587 '0' : 'x' : hexdigits -> do nospam <- readEither ('0':'x':hexdigits) 601 '0' : 'x' : hexdigits -> do nospam <- readEither ('0':'x':hexdigits)
588 return $ NoSpamId nospam pub 602 return $ NoSpamId nospam pub
603 _ -> Left "Missing nospam."
589 604
590solveBase64NoSpamID :: String -> PublicKey -> Either String NoSpamId 605solveBase64NoSpamID :: String -> PublicKey -> Either String NoSpamId
591solveBase64NoSpamID b64digits pub = do 606solveBase64NoSpamID b64digits pub = do