-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Implementation of the OpenPGP message format
--   
--   This is an OpenPGP library inspired by my work on OpenPGP libraries in
--   Ruby <a>https://github.com/singpolyma/openpgp</a>, PHP
--   <a>http://github.com/singpolyma/openpgp-php</a>, and Python
--   <a>https://github.com/singpolyma/OpenPGP-Python</a>.
--   
--   It defines types to represent OpenPGP messages as a series of packets
--   and then defines instances of Data.Binary for each to facilitate
--   encoding/decoding.
--   
--   For performing cryptography, see
--   <a>http://hackage.haskell.org/package/openpgp-crypto-api</a> or
--   <a>http://hackage.haskell.org/package/openpgp-Crypto</a>
--   
--   For dealing with ASCII armor, see
--   <a>http://hackage.haskell.org/package/openpgp-asciiarmor</a>
--   
--   It is intended that you use qualified imports with this library.
--   
--   <pre>
--   import qualified Data.OpenPGP as OpenPGP
--   </pre>
@package openpgp
@version 0.6.1


-- | Main implementation of the OpenPGP message format
--   <a>http://tools.ietf.org/html/rfc4880</a>
--   
--   The recommended way to import this module is:
--   
--   <pre>
--   import qualified Data.OpenPGP as OpenPGP
--   </pre>
module Data.OpenPGP
data Packet

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.1</a>
AsymmetricSessionKeyPacket :: Word8 -> String -> KeyAlgorithm -> ByteString -> Packet
version :: Packet -> Word8
key_id :: Packet -> String
key_algorithm :: Packet -> KeyAlgorithm
encrypted_data :: Packet -> ByteString

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.3</a>
SymmetricSessionKeyPacket :: Word8 -> SymmetricAlgorithm -> S2K -> ByteString -> Packet
version :: Packet -> Word8
symmetric_algorithm :: Packet -> SymmetricAlgorithm

-- | This is meaningless if symmetric_algorithm == Unencrypted
s2k :: Packet -> S2K
encrypted_data :: Packet -> ByteString

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.4</a>
OnePassSignaturePacket :: Word8 -> Word8 -> HashAlgorithm -> KeyAlgorithm -> String -> Word8 -> Packet
version :: Packet -> Word8
signature_type :: Packet -> Word8
hash_algorithm :: Packet -> HashAlgorithm
key_algorithm :: Packet -> KeyAlgorithm
key_id :: Packet -> String
nested :: Packet -> Word8

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.5.1.1</a> (also
--   subkey)
PublicKeyPacket :: Word8 -> Word32 -> KeyAlgorithm -> [(Char, MPI)] -> Bool -> Maybe Word16 -> Packet
version :: Packet -> Word8
timestamp :: Packet -> Word32
key_algorithm :: Packet -> KeyAlgorithm
key :: Packet -> [(Char, MPI)]
is_subkey :: Packet -> Bool
v3_days_of_validity :: Packet -> Maybe Word16

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.5.1.3</a> (also
--   subkey)
SecretKeyPacket :: Word8 -> Word32 -> KeyAlgorithm -> [(Char, MPI)] -> Word8 -> S2K -> SymmetricAlgorithm -> ByteString -> Bool -> Packet
version :: Packet -> Word8
timestamp :: Packet -> Word32
key_algorithm :: Packet -> KeyAlgorithm
key :: Packet -> [(Char, MPI)]
s2k_useage :: Packet -> Word8

-- | This is meaningless if symmetric_algorithm == Unencrypted
s2k :: Packet -> S2K
symmetric_algorithm :: Packet -> SymmetricAlgorithm
encrypted_data :: Packet -> ByteString
is_subkey :: Packet -> Bool

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.6</a>
CompressedDataPacket :: CompressionAlgorithm -> Message -> Packet
compression_algorithm :: Packet -> CompressionAlgorithm
message :: Packet -> Message

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.8</a>
MarkerPacket :: Packet

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.9</a>
LiteralDataPacket :: Char -> String -> Word32 -> ByteString -> Packet
format :: Packet -> Char
filename :: Packet -> String
timestamp :: Packet -> Word32
content :: Packet -> ByteString

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.10</a>
TrustPacket :: ByteString -> Packet

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.11</a>
UserIDPacket :: String -> Packet

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.13</a> or
--   <a>http://tools.ietf.org/html/rfc4880#section-5.7</a> when version is
--   0
EncryptedDataPacket :: Word8 -> ByteString -> Packet
version :: Packet -> Word8
encrypted_data :: Packet -> ByteString

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.14</a>
ModificationDetectionCodePacket :: ByteString -> Packet
UnsupportedPacket :: Word8 -> ByteString -> Packet
isSignaturePacket :: Packet -> Bool

-- | SignaturePacket smart constructor
--   
--   <a>http://tools.ietf.org/html/rfc4880#section-5.2</a>
signaturePacket :: Word8 -> Word8 -> KeyAlgorithm -> HashAlgorithm -> [SignatureSubpacket] -> [SignatureSubpacket] -> Word16 -> [MPI] -> Packet

-- | A message is encoded as a list that takes the entire file
newtype Message
Message :: [Packet] -> Message

-- | <a>http://tools.ietf.org/html/rfc4880#section-5.2.3.1</a>
data SignatureSubpacket
SignatureCreationTimePacket :: Word32 -> SignatureSubpacket

-- | seconds after CreationTime
SignatureExpirationTimePacket :: Word32 -> SignatureSubpacket
ExportableCertificationPacket :: Bool -> SignatureSubpacket
TrustSignaturePacket :: Word8 -> Word8 -> SignatureSubpacket
depth :: SignatureSubpacket -> Word8
trust :: SignatureSubpacket -> Word8
RegularExpressionPacket :: String -> SignatureSubpacket
RevocablePacket :: Bool -> SignatureSubpacket

-- | seconds after key CreationTime
KeyExpirationTimePacket :: Word32 -> SignatureSubpacket
PreferredSymmetricAlgorithmsPacket :: [SymmetricAlgorithm] -> SignatureSubpacket
RevocationKeyPacket :: Bool -> KeyAlgorithm -> String -> SignatureSubpacket
sensitive :: SignatureSubpacket -> Bool
revocation_key_algorithm :: SignatureSubpacket -> KeyAlgorithm
revocation_key_fingerprint :: SignatureSubpacket -> String
IssuerPacket :: String -> SignatureSubpacket
NotationDataPacket :: Bool -> String -> String -> SignatureSubpacket
human_readable :: SignatureSubpacket -> Bool
notation_name :: SignatureSubpacket -> String
notation_value :: SignatureSubpacket -> String
PreferredHashAlgorithmsPacket :: [HashAlgorithm] -> SignatureSubpacket
PreferredCompressionAlgorithmsPacket :: [CompressionAlgorithm] -> SignatureSubpacket
KeyServerPreferencesPacket :: Bool -> SignatureSubpacket
keyserver_no_modify :: SignatureSubpacket -> Bool
PreferredKeyServerPacket :: String -> SignatureSubpacket
PrimaryUserIDPacket :: Bool -> SignatureSubpacket
PolicyURIPacket :: String -> SignatureSubpacket
KeyFlagsPacket :: Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> SignatureSubpacket
certify_keys :: SignatureSubpacket -> Bool
sign_data :: SignatureSubpacket -> Bool
encrypt_communication :: SignatureSubpacket -> Bool
encrypt_storage :: SignatureSubpacket -> Bool
split_key :: SignatureSubpacket -> Bool
authentication :: SignatureSubpacket -> Bool
group_key :: SignatureSubpacket -> Bool
SignerUserIDPacket :: String -> SignatureSubpacket
ReasonForRevocationPacket :: RevocationCode -> String -> SignatureSubpacket
FeaturesPacket :: Bool -> SignatureSubpacket
supports_mdc :: SignatureSubpacket -> Bool
SignatureTargetPacket :: KeyAlgorithm -> HashAlgorithm -> ByteString -> SignatureSubpacket
target_key_algorithm :: SignatureSubpacket -> KeyAlgorithm
target_hash_algorithm :: SignatureSubpacket -> HashAlgorithm
hash :: SignatureSubpacket -> ByteString
EmbeddedSignaturePacket :: Packet -> SignatureSubpacket
UnsupportedSignatureSubpacket :: Word8 -> ByteString -> SignatureSubpacket
data S2K
SimpleS2K :: HashAlgorithm -> S2K
SaltedS2K :: HashAlgorithm -> Word64 -> S2K
IteratedSaltedS2K :: HashAlgorithm -> Word64 -> Word32 -> S2K
S2K :: Word8 -> ByteString -> S2K

-- | Take a hash function and an <a>S2K</a> value and generate the bytes
--   needed for creating a symmetric key.
--   
--   Return value is always infinite length. Take the first n bytes you
--   need for your keysize.
string2key :: (HashAlgorithm -> ByteString -> ByteString) -> S2K -> ByteString -> ByteString
data HashAlgorithm
MD5 :: HashAlgorithm
SHA1 :: HashAlgorithm
RIPEMD160 :: HashAlgorithm
SHA256 :: HashAlgorithm
SHA384 :: HashAlgorithm
SHA512 :: HashAlgorithm
SHA224 :: HashAlgorithm
HashAlgorithm :: Word8 -> HashAlgorithm
data KeyAlgorithm
RSA :: KeyAlgorithm
RSA_E :: KeyAlgorithm
RSA_S :: KeyAlgorithm
ELGAMAL :: KeyAlgorithm
DSA :: KeyAlgorithm
ECC :: KeyAlgorithm
ECDSA :: KeyAlgorithm
DH :: KeyAlgorithm
KeyAlgorithm :: Word8 -> KeyAlgorithm
data SymmetricAlgorithm
Unencrypted :: SymmetricAlgorithm
IDEA :: SymmetricAlgorithm
TripleDES :: SymmetricAlgorithm
CAST5 :: SymmetricAlgorithm
Blowfish :: SymmetricAlgorithm
AES128 :: SymmetricAlgorithm
AES192 :: SymmetricAlgorithm
AES256 :: SymmetricAlgorithm
Twofish :: SymmetricAlgorithm
SymmetricAlgorithm :: Word8 -> SymmetricAlgorithm
data CompressionAlgorithm
Uncompressed :: CompressionAlgorithm
ZIP :: CompressionAlgorithm
ZLIB :: CompressionAlgorithm
BZip2 :: CompressionAlgorithm
CompressionAlgorithm :: Word8 -> CompressionAlgorithm
data RevocationCode
NoReason :: RevocationCode
KeySuperseded :: RevocationCode
KeyCompromised :: RevocationCode
KeyRetired :: RevocationCode
UserIDInvalid :: RevocationCode
RevocationCode :: Word8 -> RevocationCode

-- | <a>http://tools.ietf.org/html/rfc4880#section-3.2</a>
newtype MPI
MPI :: Integer -> MPI

-- | Find a key with the given Fingerprint/KeyID
find_key :: (Packet -> String) -> Message -> String -> Maybe Packet

-- | Helper method for fingerprints and such
fingerprint_material :: Packet -> [ByteString]

-- | Data needed to verify a signature
data SignatureOver
DataSignature :: Packet -> [Packet] -> SignatureOver
literal :: SignatureOver -> Packet
signatures_over :: SignatureOver -> [Packet]
KeySignature :: Packet -> [Packet] -> SignatureOver
topkey :: SignatureOver -> Packet
signatures_over :: SignatureOver -> [Packet]
SubkeySignature :: Packet -> Packet -> [Packet] -> SignatureOver
topkey :: SignatureOver -> Packet
subkey :: SignatureOver -> Packet
signatures_over :: SignatureOver -> [Packet]
CertificationSignature :: Packet -> Packet -> [Packet] -> SignatureOver
topkey :: SignatureOver -> Packet
user_id :: SignatureOver -> Packet
signatures_over :: SignatureOver -> [Packet]

-- | Extract signed objects from a well-formatted message
--   
--   Recurses into CompressedDataPacket
--   
--   <a>http://tools.ietf.org/html/rfc4880#section-11</a>
signatures :: Message -> [SignatureOver]

-- | Find the keyid that issued a SignaturePacket
signature_issuer :: Packet -> Maybe String
public_key_fields :: KeyAlgorithm -> [Char]
secret_key_fields :: KeyAlgorithm -> [Char]
instance Show HashAlgorithm
instance Read HashAlgorithm
instance Eq HashAlgorithm
instance Show S2K
instance Read S2K
instance Eq S2K
instance Show KeyAlgorithm
instance Read KeyAlgorithm
instance Eq KeyAlgorithm
instance Show SymmetricAlgorithm
instance Read SymmetricAlgorithm
instance Eq SymmetricAlgorithm
instance Show CompressionAlgorithm
instance Read CompressionAlgorithm
instance Eq CompressionAlgorithm
instance Show RevocationCode
instance Read RevocationCode
instance Eq RevocationCode
instance Show MPI
instance Read MPI
instance Eq MPI
instance Ord MPI
instance Show SignatureSubpacket
instance Read SignatureSubpacket
instance Eq SignatureSubpacket
instance Show Packet
instance Read Packet
instance Eq Packet
instance Show Message
instance Read Message
instance Eq Message
instance Show SignatureOver
instance Read SignatureOver
instance Eq SignatureOver
instance Binary SignatureSubpacket
instance Binary MPI
instance Binary SignatureOver
instance Monoid Message
instance Binary Message
instance Binary RevocationCode
instance Enum RevocationCode
instance Binary CompressionAlgorithm
instance Enum CompressionAlgorithm
instance Binary SymmetricAlgorithm
instance Enum SymmetricAlgorithm
instance Binary KeyAlgorithm
instance Enum KeyAlgorithm
instance Binary HashAlgorithm
instance Enum HashAlgorithm
instance Binary S2K
instance Binary Packet
