diff options
author | Joe Crayne <joe@jerkface.net> | 2019-11-14 18:49:43 -0500 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2019-11-14 18:49:43 -0500 |
commit | 6252bdbd0531feaa6ac9e881dffe5c92b8b40197 (patch) | |
tree | a36167c0739ee8c3bd4f36658ae1b3c8e0e6c333 /Data/OpenPGP/Util/Verify.hs | |
parent | b42c0d847a785487f3222b0d5360746d25d3209c (diff) |
XEd25519 signature algorithm. (Signatures using montgomery cv25519 keys).
Diffstat (limited to 'Data/OpenPGP/Util/Verify.hs')
-rw-r--r-- | Data/OpenPGP/Util/Verify.hs | 14 |
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 | ||
21 | import Data.OpenPGP.Util.Base | 21 | import Data.OpenPGP.Util.Base |
22 | import Data.OpenPGP.Util.Ed25519 | 22 | import Data.OpenPGP.Util.Ed25519 |
23 | 23 | import Data.OpenPGP.Util.Cv25519 as Cv25519 | |
24 | import Crypto.XEd25519 as Xed25519 | ||
24 | 25 | ||
25 | dsaKey :: OpenPGP.Packet -> Vincent.DSA.PublicKey | 26 | dsaKey :: OpenPGP.Packet -> Vincent.DSA.PublicKey |
26 | dsaKey k = Vincent.DSA.PublicKey | 27 | dsaKey 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? |