summaryrefslogtreecommitdiffhomepage
path: root/Crypto.hs
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2017-04-30 13:09:26 -0400
committerJoey Hess <joeyh@joeyh.name>2017-04-30 13:09:26 -0400
commit89d4e18cdb6ed1c3e7916dd66cf907bedf58a549 (patch)
tree2d7d5964fa08c311c88448548994ebc96e8f030b /Crypto.hs
parentff1ead88d0ed4494dbe668cf18b02f8cea482d69 (diff)
downloaddebug-me-89d4e18cdb6ed1c3e7916dd66cf907bedf58a549.tar.gz
dump developer state on protocol error
Diffstat (limited to 'Crypto.hs')
-rw-r--r--Crypto.hs18
1 files changed, 12 insertions, 6 deletions
diff --git a/Crypto.hs b/Crypto.hs
index 03228e8..3c4bf21 100644
--- a/Crypto.hs
+++ b/Crypto.hs
@@ -48,7 +48,7 @@ toSign = val . hashValue . hashExceptSignature
-- | Verifiy the signature of a Signed value.
verifySigned :: Signed v => SigVerifier -> v -> Bool
-verifySigned (SigVerifier verifier) v =
+verifySigned (SigVerifier _ verifier) v =
case getSignature v of
Ed25519Signature (Val s) ->
case Ed25519.signature s of
@@ -56,21 +56,27 @@ verifySigned (SigVerifier verifier) v =
CryptoFailed _ -> False
OtherSignature _ -> False
-data SigVerifier = SigVerifier (B.ByteString -> Ed25519.Signature -> Bool)
+data SigVerifier = SigVerifier Int (B.ByteString -> Ed25519.Signature -> Bool)
+
+instance Show SigVerifier where
+ show (SigVerifier n _) = "SigVerifier (" ++ show n ++ ")"
mkSigVerifier :: PublicKey -> SigVerifier
mkSigVerifier (PublicKey (Val pk)) =
case Ed25519.publicKey pk of
- CryptoPassed pk' -> SigVerifier (Ed25519.verify pk')
+ CryptoPassed pk' -> SigVerifier 1 (Ed25519.verify pk')
CryptoFailed _ -> mempty
instance Monoid SigVerifier where
- mempty = SigVerifier $ \_b _s -> False
- mappend (SigVerifier a) (SigVerifier b) =
- SigVerifier $ \d s -> b d s || a d s
+ mempty = SigVerifier 0 $ \_b _s -> False
+ mappend (SigVerifier na a) (SigVerifier nb b) =
+ SigVerifier (na+nb) $ \d s -> b d s || a d s
data MySessionKey = MySessionKey Ed25519.SecretKey Ed25519.PublicKey
+instance Show MySessionKey where
+ show _ = "<MySessionKey>"
+
genMySessionKey :: IO MySessionKey
genMySessionKey = do
-- Crypto.Random.Entropy may use rdrand, or /dev/random.