summaryrefslogtreecommitdiff
path: root/Data/OpenPGP/Util/Verify.hs
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2019-11-14 18:49:43 -0500
committerJoe Crayne <joe@jerkface.net>2019-11-14 18:49:43 -0500
commit6252bdbd0531feaa6ac9e881dffe5c92b8b40197 (patch)
treea36167c0739ee8c3bd4f36658ae1b3c8e0e6c333 /Data/OpenPGP/Util/Verify.hs
parentb42c0d847a785487f3222b0d5360746d25d3209c (diff)
XEd25519 signature algorithm. (Signatures using montgomery cv25519 keys).
Diffstat (limited to 'Data/OpenPGP/Util/Verify.hs')
-rw-r--r--Data/OpenPGP/Util/Verify.hs14
1 files changed, 13 insertions, 1 deletions
diff --git a/Data/OpenPGP/Util/Verify.hs b/Data/OpenPGP/Util/Verify.hs
index 5eea260..66db2ab 100644
--- a/Data/OpenPGP/Util/Verify.hs
+++ b/Data/OpenPGP/Util/Verify.hs
@@ -20,7 +20,8 @@ import Crypto.PubKey.HashDescr
20 20
21import Data.OpenPGP.Util.Base 21import Data.OpenPGP.Util.Base
22import Data.OpenPGP.Util.Ed25519 22import Data.OpenPGP.Util.Ed25519
23 23import Data.OpenPGP.Util.Cv25519 as Cv25519
24import Crypto.XEd25519 as Xed25519
24 25
25dsaKey :: OpenPGP.Packet -> Vincent.DSA.PublicKey 26dsaKey :: OpenPGP.Packet -> Vincent.DSA.PublicKey
26dsaKey k = Vincent.DSA.PublicKey 27dsaKey k = Vincent.DSA.PublicKey
@@ -55,9 +56,20 @@ verifyOne keys sig over = fmap (const sig) $ maybeKey >>= verification >>= guard
55 OpenPGP.DSA -> dsaVerify 56 OpenPGP.DSA -> dsaVerify
56 OpenPGP.ECDSA -> ecdsaVerify 57 OpenPGP.ECDSA -> ecdsaVerify
57 OpenPGP.Ed25519 -> ed25519Verify sig over 58 OpenPGP.Ed25519 -> ed25519Verify sig over
59 OpenPGP.ECC -> xed25519Verify
58 alg | alg `elem` [OpenPGP.RSA,OpenPGP.RSA_S] -> rsaVerify 60 alg | alg `elem` [OpenPGP.RSA,OpenPGP.RSA_S] -> rsaVerify
59 | otherwise -> const Nothing 61 | otherwise -> const Nothing
60 62
63 xed25519Verify k = do
64 guard $ oid_cv25519 == keyParam 'c' k
65 cvk <- cv25519Key $ OpenPGP.key k
66 let xed = Xed25519.toSigningKey cvk
67 -- verify :: ByteArrayAccess dta => PublicKey -> dta -> Signature -> Bool
68 let hashbs = hashBySymbol (OpenPGP.hash_algorithm sig) $ LZ.fromChunks [over]
69 edsig <- ed25519sig sig
70 xedsig <- Xed25519.signatureDecode edsig
71 Just $ Xed25519.verify xed hashbs xedsig
72
61#if defined(VERSION_cryptonite) 73#if defined(VERSION_cryptonite)
62 dsaVerify k = let k' = dsaKey k in 74 dsaVerify k = let k' = dsaKey k in
63 -- XXX: What happened to dsaTruncate? 75 -- XXX: What happened to dsaTruncate?