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.hs30
1 files changed, 28 insertions, 2 deletions
diff --git a/Data/OpenPGP/Util/Verify.hs b/Data/OpenPGP/Util/Verify.hs
index b42e664..fd83485 100644
--- a/Data/OpenPGP/Util/Verify.hs
+++ b/Data/OpenPGP/Util/Verify.hs
@@ -1,4 +1,5 @@
1{-# LANGUAGE OverloadedStrings #-} 1{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE CPP #-}
2module Data.OpenPGP.Util.Verify where 3module Data.OpenPGP.Util.Verify where
3 4
4import Debug.Trace 5import Debug.Trace
@@ -13,6 +14,9 @@ import qualified Crypto.PubKey.DSA as Vincent.DSA
13import qualified Crypto.PubKey.RSA.PKCS15 as Vincent.RSA 14import qualified Crypto.PubKey.RSA.PKCS15 as Vincent.RSA
14import qualified Crypto.PubKey.ECC.ECDSA as Vincent.ECDSA 15import qualified Crypto.PubKey.ECC.ECDSA as Vincent.ECDSA
15-- import Math.NumberTheory.Moduli 16-- import Math.NumberTheory.Moduli
17#if !defined(VERSION_cryptonite)
18import Crypto.PubKey.HashDescr
19#endif
16 20
17import Data.OpenPGP.Util.Base 21import Data.OpenPGP.Util.Base
18 22
@@ -50,12 +54,30 @@ verifyOne keys sig over = fmap (const sig) $ maybeKey >>= verification >>= guard
50 OpenPGP.ECDSA -> ecdsaVerify 54 OpenPGP.ECDSA -> ecdsaVerify
51 alg | alg `elem` [OpenPGP.RSA,OpenPGP.RSA_S] -> rsaVerify 55 alg | alg `elem` [OpenPGP.RSA,OpenPGP.RSA_S] -> rsaVerify
52 | otherwise -> const Nothing 56 | otherwise -> const Nothing
53 dsaVerify k = let k' = dsaKey k in 57
58#if defined(VERSION_cryptonite)
59 dsaVerify k = let k' = dsaKey k in
60 -- XXX: What happened to dsaTruncate?
61 Just $ case desc of HashDescr h -> Vincent.DSA.verify h k' dsaSig over
62#else
63 dsaVerify k = let k' = dsaKey k in
54 Just $ Vincent.DSA.verify (dsaTruncate k' . bhash) k' dsaSig over 64 Just $ Vincent.DSA.verify (dsaTruncate k' . bhash) k' dsaSig over
65#endif
66
55 ecdsaVerify k = let k' = ecdsaKey k 67 ecdsaVerify k = let k' = ecdsaKey k
68#if defined(VERSION_cryptonite)
69 r = Just $ case desc of
70 HashDescr h -> Vincent.ECDSA.verify h k' ecdsaSig over
71#else
56 r = Just $ Vincent.ECDSA.verify bhash k' ecdsaSig over 72 r = Just $ Vincent.ECDSA.verify bhash k' ecdsaSig over
73#endif
57 in r -- trace ("ecdsaVerify: "++show r) r 74 in r -- trace ("ecdsaVerify: "++show r) r
75#if defined(VERSION_cryptonite)
76 rsaVerify k = Just $ case desc of
77 HashDescr h -> Vincent.RSA.verify (Just h) (rsaKey k) over rsaSig
78#else
58 rsaVerify k = Just $ Vincent.RSA.verify desc (rsaKey k) over rsaSig 79 rsaVerify k = Just $ Vincent.RSA.verify desc (rsaKey k) over rsaSig
80#endif
59 [rsaSig] = map (toStrictBS . LZ.drop 2 . encode) (OpenPGP.signature sig) 81 [rsaSig] = map (toStrictBS . LZ.drop 2 . encode) (OpenPGP.signature sig)
60 dsaSig = let [OpenPGP.MPI r, OpenPGP.MPI s] = OpenPGP.signature sig in 82 dsaSig = let [OpenPGP.MPI r, OpenPGP.MPI s] = OpenPGP.signature sig in
61 Vincent.DSA.Signature r s 83 Vincent.DSA.Signature r s
@@ -66,7 +88,11 @@ verifyOne keys sig over = fmap (const sig) $ maybeKey >>= verification >>= guard
66 ecdsaTruncate (Vincent.ECDSA.PublicKey _ (Vincent.ECDSA.Point x y)) = BS.take (integerBytesize x 88 ecdsaTruncate (Vincent.ECDSA.PublicKey _ (Vincent.ECDSA.Point x y)) = BS.take (integerBytesize x
67 + integerBytesize y ) 89 + integerBytesize y )
68 -} 90 -}
69 bhash = hashBySymbol hash_algo . toLazyBS 91#if defined(VERSION_cryptonite)
92 -- bhash = case desc of HashDescr alg -> alg
93#else
94 bhash = hashFunction desc
95#endif
70 desc = hashAlgoDesc hash_algo 96 desc = hashAlgoDesc hash_algo
71 hash_algo = OpenPGP.hash_algorithm sig 97 hash_algo = OpenPGP.hash_algorithm sig
72 maybeKey = OpenPGP.signature_issuer sig >>= find_key keys 98 maybeKey = OpenPGP.signature_issuer sig >>= find_key keys