{-# LINE 1 "src/Botan/Bindings/PubKey/Decrypt.hsc" #-}
{-|
Module      : Botan.Bindings.Decrypt
Description : Public Key Decryption
Copyright   : (c) Leo D, 2023
License     : BSD-3-Clause
Maintainer  : leo@apotheca.io
Stability   : experimental
Portability : POSIX
-}

{-# LANGUAGE CApiFFI #-}

module Botan.Bindings.PubKey.Decrypt where

import Botan.Bindings.Prelude
import Botan.Bindings.PubKey



-- | Opaque decrypt struct
data {-# CTYPE "botan/ffi.h" "struct botan_pk_op_decrypt_struct" #-} BotanPKOpDecryptStruct

-- | Botan decrypt object
newtype {-# CTYPE "botan/ffi.h" "botan_pk_op_decrypt_t" #-} BotanPKOpDecrypt
    = MkBotanPKOpDecrypt { BotanPKOpDecrypt -> Ptr BotanPKOpDecryptStruct
runBotanPKOpDecrypt :: Ptr BotanPKOpDecryptStruct }
        deriving newtype (BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
(BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool)
-> (BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool)
-> Eq BotanPKOpDecrypt
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
== :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
$c/= :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
/= :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
Eq, Eq BotanPKOpDecrypt
Eq BotanPKOpDecrypt
-> (BotanPKOpDecrypt -> BotanPKOpDecrypt -> Ordering)
-> (BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool)
-> (BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool)
-> (BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool)
-> (BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool)
-> (BotanPKOpDecrypt -> BotanPKOpDecrypt -> BotanPKOpDecrypt)
-> (BotanPKOpDecrypt -> BotanPKOpDecrypt -> BotanPKOpDecrypt)
-> Ord BotanPKOpDecrypt
BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
BotanPKOpDecrypt -> BotanPKOpDecrypt -> Ordering
BotanPKOpDecrypt -> BotanPKOpDecrypt -> BotanPKOpDecrypt
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Ordering
compare :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Ordering
$c< :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
< :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
$c<= :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
<= :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
$c> :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
> :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
$c>= :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
>= :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> Bool
$cmax :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> BotanPKOpDecrypt
max :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> BotanPKOpDecrypt
$cmin :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> BotanPKOpDecrypt
min :: BotanPKOpDecrypt -> BotanPKOpDecrypt -> BotanPKOpDecrypt
Ord, Ptr BotanPKOpDecrypt -> IO BotanPKOpDecrypt
Ptr BotanPKOpDecrypt -> Int -> IO BotanPKOpDecrypt
Ptr BotanPKOpDecrypt -> Int -> BotanPKOpDecrypt -> IO ()
Ptr BotanPKOpDecrypt -> BotanPKOpDecrypt -> IO ()
BotanPKOpDecrypt -> Int
(BotanPKOpDecrypt -> Int)
-> (BotanPKOpDecrypt -> Int)
-> (Ptr BotanPKOpDecrypt -> Int -> IO BotanPKOpDecrypt)
-> (Ptr BotanPKOpDecrypt -> Int -> BotanPKOpDecrypt -> IO ())
-> (forall b. Ptr b -> Int -> IO BotanPKOpDecrypt)
-> (forall b. Ptr b -> Int -> BotanPKOpDecrypt -> IO ())
-> (Ptr BotanPKOpDecrypt -> IO BotanPKOpDecrypt)
-> (Ptr BotanPKOpDecrypt -> BotanPKOpDecrypt -> IO ())
-> Storable BotanPKOpDecrypt
forall b. Ptr b -> Int -> IO BotanPKOpDecrypt
forall b. Ptr b -> Int -> BotanPKOpDecrypt -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: BotanPKOpDecrypt -> Int
sizeOf :: BotanPKOpDecrypt -> Int
$calignment :: BotanPKOpDecrypt -> Int
alignment :: BotanPKOpDecrypt -> Int
$cpeekElemOff :: Ptr BotanPKOpDecrypt -> Int -> IO BotanPKOpDecrypt
peekElemOff :: Ptr BotanPKOpDecrypt -> Int -> IO BotanPKOpDecrypt
$cpokeElemOff :: Ptr BotanPKOpDecrypt -> Int -> BotanPKOpDecrypt -> IO ()
pokeElemOff :: Ptr BotanPKOpDecrypt -> Int -> BotanPKOpDecrypt -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO BotanPKOpDecrypt
peekByteOff :: forall b. Ptr b -> Int -> IO BotanPKOpDecrypt
$cpokeByteOff :: forall b. Ptr b -> Int -> BotanPKOpDecrypt -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> BotanPKOpDecrypt -> IO ()
$cpeek :: Ptr BotanPKOpDecrypt -> IO BotanPKOpDecrypt
peek :: Ptr BotanPKOpDecrypt -> IO BotanPKOpDecrypt
$cpoke :: Ptr BotanPKOpDecrypt -> BotanPKOpDecrypt -> IO ()
poke :: Ptr BotanPKOpDecrypt -> BotanPKOpDecrypt -> IO ()
Storable)

-- | Destroy a decrypt object
foreign import capi safe "botan/ffi.h &botan_pk_op_decrypt_destroy"
    botan_pk_op_decrypt_destroy
        :: FinalizerPtr BotanPKOpDecryptStruct

pattern BOTAN_PUBKEY_DECRYPT_FLAGS_NONE -- ^ Not actual flag
    ::  (Eq a, Num a) => a
pattern $mBOTAN_PUBKEY_DECRYPT_FLAGS_NONE :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bBOTAN_PUBKEY_DECRYPT_FLAGS_NONE :: forall a. (Eq a, Num a) => a
BOTAN_PUBKEY_DECRYPT_FLAGS_NONE = 0

foreign import capi safe "botan/ffi.h botan_pk_op_decrypt_create"
    botan_pk_op_decrypt_create
        :: Ptr BotanPKOpDecrypt      -- ^ __op__
        -> BotanPrivKey              -- ^ __key__
        -> Ptr CChar                 -- ^ __padding__
        -> Word32                    -- ^ __flags__
        -> IO CInt

foreign import capi safe "botan/ffi.h botan_pk_op_decrypt_output_length"
    botan_pk_op_decrypt_output_length
        :: BotanPKOpDecrypt      -- ^ __op__
        -> CSize                 -- ^ __ctext_len__
        -> Ptr CSize             -- ^ __ptext_len__
        -> IO CInt

foreign import capi safe "botan/ffi.h botan_pk_op_decrypt"
    botan_pk_op_decrypt
        :: BotanPKOpDecrypt      -- ^ __op__
        -> Ptr Word8             -- ^ __out[]__
        -> Ptr CSize             -- ^ __out_len__
        -> ConstPtr Word8        -- ^ __ciphertext__
        -> CSize                 -- ^ __ciphertext_len__
        -> IO CInt