diff options
Diffstat (limited to 'Data/OpenPGP/Util/Verify.hs')
-rw-r--r-- | Data/OpenPGP/Util/Verify.hs | 30 |
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 #-} | ||
2 | module Data.OpenPGP.Util.Verify where | 3 | module Data.OpenPGP.Util.Verify where |
3 | 4 | ||
4 | import Debug.Trace | 5 | import Debug.Trace |
@@ -13,6 +14,9 @@ import qualified Crypto.PubKey.DSA as Vincent.DSA | |||
13 | import qualified Crypto.PubKey.RSA.PKCS15 as Vincent.RSA | 14 | import qualified Crypto.PubKey.RSA.PKCS15 as Vincent.RSA |
14 | import qualified Crypto.PubKey.ECC.ECDSA as Vincent.ECDSA | 15 | import qualified Crypto.PubKey.ECC.ECDSA as Vincent.ECDSA |
15 | -- import Math.NumberTheory.Moduli | 16 | -- import Math.NumberTheory.Moduli |
17 | #if !defined(VERSION_cryptonite) | ||
18 | import Crypto.PubKey.HashDescr | ||
19 | #endif | ||
16 | 20 | ||
17 | import Data.OpenPGP.Util.Base | 21 | import 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 |