    -- SignatureQualities.hs: OpenPGP (RFC4880) signature qualities
    -- Copyright © 2012-2019  Clint Adams
    -- This software is released under the terms of the Expat license.
    -- (See the LICENSE file).
    module Codec.Encryption.OpenPGP.SignatureQualities
      ( sigType
      , sigPKA
      , sigHA
      , sigCT
      ) where

    import Data.List (find)

    import Codec.Encryption.OpenPGP.Ontology (isSigCreationTime)
    import Codec.Encryption.OpenPGP.Types

    sigType :: SignaturePayload -> Maybe SigType
    sigType (SigV3 st _ _ _ _ _ _) = Just st
    sigType (SigV4 st _ _ _ _ _ _) = Just st
    sigType _ = Nothing -- this includes v2 sigs, which don't seem to be specified in the RFCs but exist in the wild

    sigPKA :: SignaturePayload -> Maybe PubKeyAlgorithm
    sigPKA (SigV3 _ _ _ pka _ _ _) = Just pka
    sigPKA (SigV4 _ pka _ _ _ _ _) = Just pka
    sigPKA _ = Nothing -- this includes v2 sigs, which don't seem to be specified in the RFCs but exist in the wild

    sigHA :: SignaturePayload -> Maybe HashAlgorithm
    sigHA (SigV3 _ _ _ _ ha _ _) = Just ha
    sigHA (SigV4 _ _ ha _ _ _ _) = Just ha
    sigHA _ = Nothing -- this includes v2 sigs, which don't seem to be specified in the RFCs but exist in the wild

    sigCT :: SignaturePayload -> Maybe ThirtyTwoBitTimeStamp
    sigCT (SigV3 _ ct _ _ _ _ _) = Just ct
    sigCT (SigV4 _ _ _ hsubs _ _ _) =
      fmap
        (\(SigSubPacket _ (SigCreationTime i)) -> i)
        (find isSigCreationTime hsubs)
    sigCT _ = Nothing