diff options
Diffstat (limited to 'Data')
-rw-r--r-- | Data/OpenPGP/Util/Cv25519.hs | 2 | ||||
-rw-r--r-- | Data/OpenPGP/Util/Verify.hs | 14 |
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 | |||
17 | import Data.Int | 17 | import Data.Int |
18 | 18 | ||
19 | import Data.OpenPGP.Internal | 19 | import Data.OpenPGP.Internal |
20 | import Data.OpenPGP.Util | 20 | import Data.OpenPGP.Util.Fingerprint |
21 | import Data.OpenPGP.Util.Base | 21 | import Data.OpenPGP.Util.Base |
22 | import Data.OpenPGP as OpenPGP | 22 | import Data.OpenPGP as OpenPGP |
23 | import Crypto.Cipher.SBox | 23 | import 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 | ||
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? |