module Botan.Low.PubKey.Decrypt
(
Decrypt(..)
, withDecrypt
, decryptCreate
, decryptDestroy
, decryptOutputLength
, decrypt
) where
import qualified Data.ByteString as ByteString
import Botan.Bindings.PubKey.Decrypt
import Botan.Low.Error
import Botan.Low.Make
import Botan.Low.Prelude
import Botan.Low.RNG
import Botan.Low.PubKey
import Botan.Low.Remake
newtype Decrypt = MkDecrypt { Decrypt -> ForeignPtr BotanPKOpDecryptStruct
getDecryptForeignPtr :: ForeignPtr BotanPKOpDecryptStruct }
newDecrypt :: BotanPKOpDecrypt -> IO Decrypt
withDecrypt :: Decrypt -> (BotanPKOpDecrypt -> IO a) -> IO a
decryptDestroy :: Decrypt -> IO ()
createDecrypt :: (Ptr BotanPKOpDecrypt -> IO CInt) -> IO Decrypt
(BotanPKOpDecrypt -> IO Decrypt
newDecrypt, Decrypt -> (BotanPKOpDecrypt -> IO a) -> IO a
withDecrypt, Decrypt -> IO ()
decryptDestroy, (Ptr BotanPKOpDecrypt -> IO CInt) -> IO Decrypt
createDecrypt, (Ptr BotanPKOpDecrypt -> Ptr CSize -> IO CInt) -> IO [Decrypt]
_)
= (Ptr BotanPKOpDecryptStruct -> BotanPKOpDecrypt)
-> (BotanPKOpDecrypt -> Ptr BotanPKOpDecryptStruct)
-> (ForeignPtr BotanPKOpDecryptStruct -> Decrypt)
-> (Decrypt -> ForeignPtr BotanPKOpDecryptStruct)
-> FinalizerPtr BotanPKOpDecryptStruct
-> (BotanPKOpDecrypt -> IO Decrypt,
Decrypt -> (BotanPKOpDecrypt -> IO a) -> IO a, Decrypt -> IO (),
(Ptr BotanPKOpDecrypt -> IO CInt) -> IO Decrypt,
(Ptr BotanPKOpDecrypt -> Ptr CSize -> IO CInt) -> IO [Decrypt])
forall botan struct object a.
Storable botan =>
(Ptr struct -> botan)
-> (botan -> Ptr struct)
-> (ForeignPtr struct -> object)
-> (object -> ForeignPtr struct)
-> FinalizerPtr struct
-> (botan -> IO object, object -> (botan -> IO a) -> IO a,
object -> IO (), (Ptr botan -> IO CInt) -> IO object,
(Ptr botan -> Ptr CSize -> IO CInt) -> IO [object])
mkBindings
Ptr BotanPKOpDecryptStruct -> BotanPKOpDecrypt
MkBotanPKOpDecrypt BotanPKOpDecrypt -> Ptr BotanPKOpDecryptStruct
runBotanPKOpDecrypt
ForeignPtr BotanPKOpDecryptStruct -> Decrypt
MkDecrypt Decrypt -> ForeignPtr BotanPKOpDecryptStruct
getDecryptForeignPtr
FinalizerPtr BotanPKOpDecryptStruct
botan_pk_op_decrypt_destroy
decryptCreate
:: PrivKey
-> EMEName
-> IO Decrypt
decryptCreate :: PrivKey -> EMEName -> IO Decrypt
decryptCreate PrivKey
sk EMEName
padding = PrivKey -> (BotanPrivKey -> IO Decrypt) -> IO Decrypt
forall a. PrivKey -> (BotanPrivKey -> IO a) -> IO a
withPrivKey PrivKey
sk ((BotanPrivKey -> IO Decrypt) -> IO Decrypt)
-> (BotanPrivKey -> IO Decrypt) -> IO Decrypt
forall a b. (a -> b) -> a -> b
$ \ BotanPrivKey
skPtr -> do
EMEName -> (Ptr CChar -> IO Decrypt) -> IO Decrypt
forall a. EMEName -> (Ptr CChar -> IO a) -> IO a
asCString EMEName
padding ((Ptr CChar -> IO Decrypt) -> IO Decrypt)
-> (Ptr CChar -> IO Decrypt) -> IO Decrypt
forall a b. (a -> b) -> a -> b
$ \ Ptr CChar
paddingPtr -> do
(Ptr BotanPKOpDecrypt -> IO CInt) -> IO Decrypt
createDecrypt ((Ptr BotanPKOpDecrypt -> IO CInt) -> IO Decrypt)
-> (Ptr BotanPKOpDecrypt -> IO CInt) -> IO Decrypt
forall a b. (a -> b) -> a -> b
$ \ Ptr BotanPKOpDecrypt
out -> Ptr BotanPKOpDecrypt
-> BotanPrivKey -> Ptr CChar -> Word32 -> IO CInt
botan_pk_op_decrypt_create
Ptr BotanPKOpDecrypt
out
BotanPrivKey
skPtr
Ptr CChar
paddingPtr
Word32
forall a. (Eq a, Num a) => a
BOTAN_PUBKEY_DECRYPT_FLAGS_NONE
withDecryptCreate :: PrivKey -> EMEName -> (Decrypt -> IO a) -> IO a
withDecryptCreate :: forall a. PrivKey -> EMEName -> (Decrypt -> IO a) -> IO a
withDecryptCreate = (PrivKey -> EMEName -> IO Decrypt)
-> (Decrypt -> IO ())
-> PrivKey
-> EMEName
-> (Decrypt -> IO a)
-> IO a
forall x y t a.
(x -> y -> IO t) -> (t -> IO ()) -> x -> y -> (t -> IO a) -> IO a
mkWithTemp2 PrivKey -> EMEName -> IO Decrypt
decryptCreate Decrypt -> IO ()
decryptDestroy
decryptOutputLength
:: Decrypt
-> Int
-> IO Int
decryptOutputLength :: Decrypt -> Int -> IO Int
decryptOutputLength = WithPtr Decrypt BotanPKOpDecrypt
-> GetSize_csize BotanPKOpDecrypt -> Decrypt -> Int -> IO Int
forall typ ptr.
WithPtr typ ptr -> GetSize_csize ptr -> typ -> Int -> IO Int
mkGetSize_csize Decrypt -> (BotanPKOpDecrypt -> IO a) -> IO a
WithPtr Decrypt BotanPKOpDecrypt
withDecrypt GetSize_csize BotanPKOpDecrypt
botan_pk_op_decrypt_output_length
decrypt
:: Decrypt
-> ByteString
-> IO ByteString
decrypt :: Decrypt -> EMEName -> IO EMEName
decrypt Decrypt
dec EMEName
ctext = Decrypt -> (BotanPKOpDecrypt -> IO EMEName) -> IO EMEName
WithPtr Decrypt BotanPKOpDecrypt
withDecrypt Decrypt
dec ((BotanPKOpDecrypt -> IO EMEName) -> IO EMEName)
-> (BotanPKOpDecrypt -> IO EMEName) -> IO EMEName
forall a b. (a -> b) -> a -> b
$ \ BotanPKOpDecrypt
decPtr -> do
EMEName -> (Ptr Word8 -> CSize -> IO EMEName) -> IO EMEName
forall byte a. EMEName -> (Ptr byte -> CSize -> IO a) -> IO a
asBytesLen EMEName
ctext ((Ptr Word8 -> CSize -> IO EMEName) -> IO EMEName)
-> (Ptr Word8 -> CSize -> IO EMEName) -> IO EMEName
forall a b. (a -> b) -> a -> b
$ \ Ptr Word8
ctextPtr CSize
ctextLen -> do
(Ptr Word8 -> Ptr CSize -> IO CInt) -> IO EMEName
forall byte. (Ptr byte -> Ptr CSize -> IO CInt) -> IO EMEName
allocBytesQuerying ((Ptr Word8 -> Ptr CSize -> IO CInt) -> IO EMEName)
-> (Ptr Word8 -> Ptr CSize -> IO CInt) -> IO EMEName
forall a b. (a -> b) -> a -> b
$ \ Ptr Word8
outPtr Ptr CSize
szPtr -> BotanPKOpDecrypt
-> Ptr Word8 -> Ptr CSize -> ConstPtr Word8 -> CSize -> IO CInt
botan_pk_op_decrypt
BotanPKOpDecrypt
decPtr
Ptr Word8
outPtr
Ptr CSize
szPtr
(Ptr Word8 -> ConstPtr Word8
forall a. Ptr a -> ConstPtr a
ConstPtr Ptr Word8
ctextPtr)
CSize
ctextLen