-- |
-- Module      : Crypto.Gpgme
-- Copyright   : (c) Reto Hablützel 2015
-- License     : MIT
--
-- Maintainer  : rethab@rethab.ch
-- Stability   : experimental
-- Portability : untested
--
-- High Level Binding for GnuPG Made Easy (gpgme)
-- 
-- Most of these functions are a one-to-one translation
-- from GnuPG API with some Haskell idiomatics to make
-- the API more convenient.
--
-- See the GnuPG manual for more information: <https://www.gnupg.org/documentation/manuals/gpgme.pdf>
--
--
-- == Example (from the tests):
--
-- >let alice_pub_fpr = "EAACEB8A"                                      
-- >                                                                    
-- >Just enc <- withCtx "test/bob" "C" OpenPGP $ \bCtx -> runMaybeT $ do
-- >        aPubKey <- MaybeT $ getKey bCtx alice_pub_fpr NoSecret      
-- >        fromRight $ encrypt bCtx [aPubKey] NoFlag plain             
-- >                                                                    
-- >-- decrypt                                                          
-- >dec <- withCtx "test/alice" "C" OpenPGP $ \aCtx ->                  
-- >        decrypt aCtx enc                                            
-- >
--

module Crypto.Gpgme (
      -- * Context
      Ctx
    , newCtx
    , freeCtx
    , withCtx
    , setArmor
      -- ** Passphrase callbacks
    , isPassphraseCbSupported
    , PassphraseCb
    , setPassphraseCallback
      -- ** Progress callbacks
    , progressCb
    , setProgressCallback

    -- * Keys
    , Key
    , getKey
    , listKeys
    , removeKey
    -- * Information about keys
    , Validity (..)
    , PubKeyAlgo (..)
    , KeySignature (..)
    , UserId (..)
    , KeyUserId (..)
    , keyUserIds
    , keyUserIds'
    , SubKey (..)
    , keySubKeys
    , keySubKeys'

    -- * Encryption
    , Signature
    , SignatureSummary(..)
    , VerificationResult
    , encrypt
    , encryptSign
    , encryptFd
    , encryptSignFd
    , encrypt'
    , encryptSign'
    , decrypt
    , decryptFd
    , decryptVerifyFd
    , decrypt'
    , decryptVerify
    , decryptVerify'
    , verify
    , verify'
    , verifyDetached
    , verifyDetached'
    , verifyPlain
    , verifyPlain'
    , sign

    -- * Error handling
    , GpgmeError
    , errorString
    , sourceString

    -- * Other Types
    , SignMode(..)

    , Fpr
    , Encrypted
    , Plain

    , Protocol(..)

    , InvalidKey

    , IncludeSecret(..)

    , Flag(..)

    , DecryptError(..)

    , HgpgmeException(..)

) where


import Crypto.Gpgme.Ctx
import Crypto.Gpgme.Crypto
import Crypto.Gpgme.Types
import Crypto.Gpgme.Key