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

{-# LANGUAGE CApiFFI #-}

module Botan.Bindings.PubKey.Verify
( BotanPKOpVerifyStruct
, BotanPKOpVerify(..)
, botan_pk_op_verify_destroy
, botan_pk_op_verify_create
, botan_pk_op_verify_update
, botan_pk_op_verify_finish
, pattern BOTAN_PUBKEY_STD_FORMAT_SIGNATURE 
, pattern BOTAN_PUBKEY_DER_FORMAT_SIGNATURE
) where

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

-- | Opaque verify struct
data {-# CTYPE "botan/ffi.h" "struct botan_pk_op_verify_struct" #-} BotanPKOpVerifyStruct

-- | Botan verify object
newtype {-# CTYPE "botan/ffi.h" "botan_pk_op_verify_t" #-} BotanPKOpVerify
    = MkBotanPKOpVerify { BotanPKOpVerify -> Ptr BotanPKOpVerifyStruct
runBotanPKOpVerify :: Ptr BotanPKOpVerifyStruct }
        deriving newtype (BotanPKOpVerify -> BotanPKOpVerify -> Bool
(BotanPKOpVerify -> BotanPKOpVerify -> Bool)
-> (BotanPKOpVerify -> BotanPKOpVerify -> Bool)
-> Eq BotanPKOpVerify
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
== :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
$c/= :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
/= :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
Eq, Eq BotanPKOpVerify
Eq BotanPKOpVerify
-> (BotanPKOpVerify -> BotanPKOpVerify -> Ordering)
-> (BotanPKOpVerify -> BotanPKOpVerify -> Bool)
-> (BotanPKOpVerify -> BotanPKOpVerify -> Bool)
-> (BotanPKOpVerify -> BotanPKOpVerify -> Bool)
-> (BotanPKOpVerify -> BotanPKOpVerify -> Bool)
-> (BotanPKOpVerify -> BotanPKOpVerify -> BotanPKOpVerify)
-> (BotanPKOpVerify -> BotanPKOpVerify -> BotanPKOpVerify)
-> Ord BotanPKOpVerify
BotanPKOpVerify -> BotanPKOpVerify -> Bool
BotanPKOpVerify -> BotanPKOpVerify -> Ordering
BotanPKOpVerify -> BotanPKOpVerify -> BotanPKOpVerify
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 :: BotanPKOpVerify -> BotanPKOpVerify -> Ordering
compare :: BotanPKOpVerify -> BotanPKOpVerify -> Ordering
$c< :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
< :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
$c<= :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
<= :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
$c> :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
> :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
$c>= :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
>= :: BotanPKOpVerify -> BotanPKOpVerify -> Bool
$cmax :: BotanPKOpVerify -> BotanPKOpVerify -> BotanPKOpVerify
max :: BotanPKOpVerify -> BotanPKOpVerify -> BotanPKOpVerify
$cmin :: BotanPKOpVerify -> BotanPKOpVerify -> BotanPKOpVerify
min :: BotanPKOpVerify -> BotanPKOpVerify -> BotanPKOpVerify
Ord, Ptr BotanPKOpVerify -> IO BotanPKOpVerify
Ptr BotanPKOpVerify -> Int -> IO BotanPKOpVerify
Ptr BotanPKOpVerify -> Int -> BotanPKOpVerify -> IO ()
Ptr BotanPKOpVerify -> BotanPKOpVerify -> IO ()
BotanPKOpVerify -> Int
(BotanPKOpVerify -> Int)
-> (BotanPKOpVerify -> Int)
-> (Ptr BotanPKOpVerify -> Int -> IO BotanPKOpVerify)
-> (Ptr BotanPKOpVerify -> Int -> BotanPKOpVerify -> IO ())
-> (forall b. Ptr b -> Int -> IO BotanPKOpVerify)
-> (forall b. Ptr b -> Int -> BotanPKOpVerify -> IO ())
-> (Ptr BotanPKOpVerify -> IO BotanPKOpVerify)
-> (Ptr BotanPKOpVerify -> BotanPKOpVerify -> IO ())
-> Storable BotanPKOpVerify
forall b. Ptr b -> Int -> IO BotanPKOpVerify
forall b. Ptr b -> Int -> BotanPKOpVerify -> 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 :: BotanPKOpVerify -> Int
sizeOf :: BotanPKOpVerify -> Int
$calignment :: BotanPKOpVerify -> Int
alignment :: BotanPKOpVerify -> Int
$cpeekElemOff :: Ptr BotanPKOpVerify -> Int -> IO BotanPKOpVerify
peekElemOff :: Ptr BotanPKOpVerify -> Int -> IO BotanPKOpVerify
$cpokeElemOff :: Ptr BotanPKOpVerify -> Int -> BotanPKOpVerify -> IO ()
pokeElemOff :: Ptr BotanPKOpVerify -> Int -> BotanPKOpVerify -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO BotanPKOpVerify
peekByteOff :: forall b. Ptr b -> Int -> IO BotanPKOpVerify
$cpokeByteOff :: forall b. Ptr b -> Int -> BotanPKOpVerify -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> BotanPKOpVerify -> IO ()
$cpeek :: Ptr BotanPKOpVerify -> IO BotanPKOpVerify
peek :: Ptr BotanPKOpVerify -> IO BotanPKOpVerify
$cpoke :: Ptr BotanPKOpVerify -> BotanPKOpVerify -> IO ()
poke :: Ptr BotanPKOpVerify -> BotanPKOpVerify -> IO ()
Storable)

-- | Destroy a verify object
foreign import capi safe "botan/ffi.h &botan_pk_op_verify_destroy"
    botan_pk_op_verify_destroy
        :: FinalizerPtr BotanPKOpVerifyStruct

-- | Uses the same flags as botan_pk_op_sign_create
foreign import capi safe "botan/ffi.h botan_pk_op_verify_create"
    botan_pk_op_verify_create
        :: Ptr BotanPKOpVerify      -- ^ __op__
        -> BotanPubKey              -- ^ __key__
        -> ConstPtr CChar           -- ^ __hash_and_padding__
        -> Word32                   -- ^ __flags__
        -> IO CInt

foreign import capi safe "botan/ffi.h botan_pk_op_verify_update"
    botan_pk_op_verify_update
        :: BotanPKOpVerify      -- ^ __op__
        -> ConstPtr Word8       -- ^ __in[]__
        -> CSize                -- ^ __in_len__
        -> IO CInt

foreign import capi safe "botan/ffi.h botan_pk_op_verify_finish"
    botan_pk_op_verify_finish
        :: BotanPKOpVerify      -- ^ __op__
        -> ConstPtr Word8       -- ^ __sig[]__
        -> CSize                -- ^ __sig_len__
        -> IO CInt