summaryrefslogtreecommitdiff
path: root/Data/OpenPGP/Util/Verify.hs
diff options
context:
space:
mode:
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?