module Botan.Low.PubKey.ElGamal where
import qualified Data.ByteString as ByteString
import Botan.Bindings.PubKey
import Botan.Bindings.PubKey.ElGamal
import Botan.Low.Error
import Botan.Low.Make
import Botan.Low.MPI
import Botan.Low.Prelude
import Botan.Low.PubKey
import Botan.Low.RNG
privKeyCreateElGamal
:: RNG
-> Int
-> Int
-> IO PrivKey
privKeyCreateElGamal :: RNG -> Int -> Int -> IO PrivKey
privKeyCreateElGamal RNG
rng Int
pbits Int
qbits = RNG -> (BotanRNG -> IO PrivKey) -> IO PrivKey
forall a. RNG -> (BotanRNG -> IO a) -> IO a
withRNG RNG
rng ((BotanRNG -> IO PrivKey) -> IO PrivKey)
-> (BotanRNG -> IO PrivKey) -> IO PrivKey
forall a b. (a -> b) -> a -> b
$ \ BotanRNG
botanRNG -> do
(Ptr BotanPrivKey -> IO CInt) -> IO PrivKey
createPrivKey ((Ptr BotanPrivKey -> IO CInt) -> IO PrivKey)
-> (Ptr BotanPrivKey -> IO CInt) -> IO PrivKey
forall a b. (a -> b) -> a -> b
$ \ Ptr BotanPrivKey
out -> Ptr BotanPrivKey -> BotanRNG -> CSize -> CSize -> IO CInt
botan_privkey_create_elgamal
Ptr BotanPrivKey
out
BotanRNG
botanRNG
(Int -> CSize
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
pbits)
(Int -> CSize
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
qbits)
privKeyLoadElGamal
:: MP
-> MP
-> MP
-> IO PrivKey
privKeyLoadElGamal :: MP -> MP -> MP -> IO PrivKey
privKeyLoadElGamal = (Ptr BotanPrivKey -> BotanMP -> BotanMP -> BotanMP -> IO CInt)
-> MP -> MP -> MP -> IO PrivKey
mkPrivKeyLoad3 Ptr BotanPrivKey -> BotanMP -> BotanMP -> BotanMP -> IO CInt
botan_privkey_load_elgamal
pubKeyLoadElGamal
:: MP
-> MP
-> MP
-> IO PubKey
pubKeyLoadElGamal :: MP -> MP -> MP -> IO PubKey
pubKeyLoadElGamal = (Ptr BotanPubKey -> BotanMP -> BotanMP -> BotanMP -> IO CInt)
-> MP -> MP -> MP -> IO PubKey
mkPubKeyLoad3 Ptr BotanPubKey -> BotanMP -> BotanMP -> BotanMP -> IO CInt
botan_pubkey_load_elgamal