summaryrefslogtreecommitdiff
path: root/Data
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
parentb42c0d847a785487f3222b0d5360746d25d3209c (diff)
XEd25519 signature algorithm. (Signatures using montgomery cv25519 keys).
Diffstat (limited to 'Data')
-rw-r--r--Data/OpenPGP/Util/Cv25519.hs2
-rw-r--r--Data/OpenPGP/Util/Verify.hs14
2 files changed, 14 insertions, 2 deletions
diff --git a/Data/OpenPGP/Util/Cv25519.hs b/Data/OpenPGP/Util/Cv25519.hs
index aef3521..4900b2f 100644
--- a/Data/OpenPGP/Util/Cv25519.hs
+++ b/Data/OpenPGP/Util/Cv25519.hs
@@ -17,7 +17,7 @@ import Numeric
17import Data.Int 17import Data.Int
18 18
19import Data.OpenPGP.Internal 19import Data.OpenPGP.Internal
20import Data.OpenPGP.Util 20import Data.OpenPGP.Util.Fingerprint
21import Data.OpenPGP.Util.Base 21import Data.OpenPGP.Util.Base
22import Data.OpenPGP as OpenPGP 22import Data.OpenPGP as OpenPGP
23import Crypto.Cipher.SBox 23import Crypto.Cipher.SBox
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?