From 6b42fc6904d05979c409c0043d6d7b2eed22b58c Mon Sep 17 00:00:00 2001 From: joe Date: Sat, 14 Dec 2013 23:14:16 -0500 Subject: Refactoring. --- Data/OpenPGP/Util/Base.hs | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Data/OpenPGP/Util/Base.hs (limited to 'Data/OpenPGP/Util/Base.hs') diff --git a/Data/OpenPGP/Util/Base.hs b/Data/OpenPGP/Util/Base.hs new file mode 100644 index 0000000..802d503 --- /dev/null +++ b/Data/OpenPGP/Util/Base.hs @@ -0,0 +1,67 @@ +module Data.OpenPGP.Util.Base where + +import qualified Data.ByteString as BS +import qualified Data.ByteString.Lazy as LZ +import Data.Binary (encode) + +import Data.OpenPGP as OpenPGP +import Crypto.Hash.MD5 as MD5 +import Crypto.Hash.SHA1 as SHA1 +import Crypto.Hash.SHA256 as SHA256 +import Crypto.Hash.SHA384 as SHA384 +import Crypto.Hash.SHA512 as SHA512 +import Crypto.Hash.SHA224 as SHA224 +import Crypto.Hash.RIPEMD160 as RIPEMD160 +import qualified Crypto.PubKey.RSA as Vincent.RSA +import Crypto.PubKey.HashDescr as Vincent + +import Data.OpenPGP.Util.Fingerprint (fingerprint) + +hashBySymbol OpenPGP.MD5 = MD5.hashlazy +hashBySymbol OpenPGP.SHA1 = SHA1.hashlazy +hashBySymbol OpenPGP.SHA256 = SHA256.hashlazy +hashBySymbol OpenPGP.SHA384 = SHA384.hashlazy +hashBySymbol OpenPGP.SHA512 = SHA512.hashlazy +hashBySymbol OpenPGP.SHA224 = SHA224.hashlazy +hashBySymbol OpenPGP.RIPEMD160 = RIPEMD160.hashlazy + +toStrictBS :: LZ.ByteString -> BS.ByteString +toStrictBS = BS.concat . LZ.toChunks + +toLazyBS :: BS.ByteString -> LZ.ByteString +toLazyBS = LZ.fromChunks . (:[]) + +find_key :: OpenPGP.Message -> String -> Maybe OpenPGP.Packet +find_key = OpenPGP.find_key fingerprint + + + +keyParam :: Char -> OpenPGP.Packet -> Integer +keyParam c k = fromJustMPI $ lookup c (OpenPGP.key k) + where + fromJustMPI :: Maybe OpenPGP.MPI -> Integer + fromJustMPI (Just (OpenPGP.MPI x)) = x + fromJustMPI _ = error "Not a Just MPI, Data.OpenPGP.CryptoAPI" + +integerBytesize :: Integer -> Int +integerBytesize i = fromIntegral $ LZ.length (encode (OpenPGP.MPI i)) - 2 + +rsaKey :: OpenPGP.Packet -> Vincent.RSA.PublicKey +rsaKey k = + Vincent.RSA.PublicKey (integerBytesize n) n (keyParam 'e' k) + where + n = keyParam 'n' k + +-- http://tools.ietf.org/html/rfc3447#page-43 +-- http://tools.ietf.org/html/rfc4880#section-5.2.2 +hashAlgoDesc OpenPGP.MD5 = Vincent.hashDescrMD5 +hashAlgoDesc OpenPGP.SHA1 = Vincent.hashDescrSHA1 +hashAlgoDesc OpenPGP.RIPEMD160 = Vincent.hashDescrRIPEMD160 +hashAlgoDesc OpenPGP.SHA256 = Vincent.hashDescrSHA256 +hashAlgoDesc OpenPGP.SHA384 = Vincent.hashDescrSHA384 +hashAlgoDesc OpenPGP.SHA512 = Vincent.hashDescrSHA512 +hashAlgoDesc OpenPGP.SHA224 = Vincent.hashDescrSHA224 +hashAlgoDesc _ = + error "Unsupported HashAlgorithm in hashAlgoDesc" + + -- cgit v1.2.3