-- KeyInfo.hs: OpenPGP (RFC4880) fingerprinting methods -- Copyright © 2012-2015 Clint Adams -- This software is released under the terms of the Expat license. -- (See the LICENSE file). module Codec.Encryption.OpenPGP.KeyInfo ( pubkeySize , pkalgoAbbrev ) where import qualified Crypto.PubKey.RSA as RSA import qualified Crypto.PubKey.DSA as DSA import qualified Data.ByteString as B import Data.Bits (shiftR) import Data.List (unfoldr) import Codec.Encryption.OpenPGP.Types pubkeySize (RSAPubKey (RSA_PublicKey x)) = Right (RSA.public_size x * 8) pubkeySize (DSAPubKey (DSA_PublicKey x)) = Right (bitcount . DSA.params_p . DSA.public_params $ x) pubkeySize (ElGamalPubKey x) = Right (bitcount $ head x) pubkeySize x = Left $ "Unable to calculate size of " ++ show x bitcount = (*8) . length . unfoldr (\x -> if x == 0 then Nothing else Just (True, x `shiftR` 8)) pkalgoAbbrev RSA = "R" pkalgoAbbrev DSA = "D" pkalgoAbbrev ElgamalEncryptOnly = "g" pkalgoAbbrev DeprecatedRSAEncryptOnly = "-" pkalgoAbbrev DeprecatedRSASignOnly = "_" pkalgoAbbrev ECDH = "e" pkalgoAbbrev ECDSA = "E" pkalgoAbbrev ForbiddenElgamal = "f" pkalgoAbbrev DH = "d" pkalgoAbbrev (OtherPKA _) = "."