From 7909c13a18e260af68819be7444829f799cb7c38 Mon Sep 17 00:00:00 2001 From: joe Date: Fri, 26 Aug 2016 01:21:22 -0400 Subject: WIP: support for cryptonite. --- Data/OpenPGP/Util/Verify.hs | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'Data/OpenPGP/Util/Verify.hs') 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 @@ {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE CPP #-} module Data.OpenPGP.Util.Verify where import Debug.Trace @@ -13,6 +14,9 @@ import qualified Crypto.PubKey.DSA as Vincent.DSA import qualified Crypto.PubKey.RSA.PKCS15 as Vincent.RSA import qualified Crypto.PubKey.ECC.ECDSA as Vincent.ECDSA -- import Math.NumberTheory.Moduli +#if !defined(VERSION_cryptonite) +import Crypto.PubKey.HashDescr +#endif import Data.OpenPGP.Util.Base @@ -50,12 +54,30 @@ verifyOne keys sig over = fmap (const sig) $ maybeKey >>= verification >>= guard OpenPGP.ECDSA -> ecdsaVerify alg | alg `elem` [OpenPGP.RSA,OpenPGP.RSA_S] -> rsaVerify | otherwise -> const Nothing - dsaVerify k = let k' = dsaKey k in + +#if defined(VERSION_cryptonite) + dsaVerify k = let k' = dsaKey k in + -- XXX: What happened to dsaTruncate? + Just $ case desc of HashDescr h -> Vincent.DSA.verify h k' dsaSig over +#else + dsaVerify k = let k' = dsaKey k in Just $ Vincent.DSA.verify (dsaTruncate k' . bhash) k' dsaSig over +#endif + ecdsaVerify k = let k' = ecdsaKey k +#if defined(VERSION_cryptonite) + r = Just $ case desc of + HashDescr h -> Vincent.ECDSA.verify h k' ecdsaSig over +#else r = Just $ Vincent.ECDSA.verify bhash k' ecdsaSig over +#endif in r -- trace ("ecdsaVerify: "++show r) r +#if defined(VERSION_cryptonite) + rsaVerify k = Just $ case desc of + HashDescr h -> Vincent.RSA.verify (Just h) (rsaKey k) over rsaSig +#else rsaVerify k = Just $ Vincent.RSA.verify desc (rsaKey k) over rsaSig +#endif [rsaSig] = map (toStrictBS . LZ.drop 2 . encode) (OpenPGP.signature sig) dsaSig = let [OpenPGP.MPI r, OpenPGP.MPI s] = OpenPGP.signature sig in Vincent.DSA.Signature r s @@ -66,7 +88,11 @@ verifyOne keys sig over = fmap (const sig) $ maybeKey >>= verification >>= guard ecdsaTruncate (Vincent.ECDSA.PublicKey _ (Vincent.ECDSA.Point x y)) = BS.take (integerBytesize x + integerBytesize y ) -} - bhash = hashBySymbol hash_algo . toLazyBS +#if defined(VERSION_cryptonite) + -- bhash = case desc of HashDescr alg -> alg +#else + bhash = hashFunction desc +#endif desc = hashAlgoDesc hash_algo hash_algo = OpenPGP.hash_algorithm sig maybeKey = OpenPGP.signature_issuer sig >>= find_key keys -- cgit v1.2.3