packages feed

botan-bindings-0.3.0.0: src/Botan/Bindings/PubKey/Verify.hsc

{-|
Module      : Botan.Bindings.Verify
Description : Signature Verification
Copyright   : (c) 2023-2024, Apotheca Labs
              (c) 2024-2025, Haskell Foundation
License     : BSD-3-Clause
Maintainer  : joris@well-typed.com, 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.ConstPtr
import Botan.Bindings.PubKey
import Botan.Bindings.PubKey.Sign
import Data.Word
import Foreign.C.Types
import Foreign.ForeignPtr
import Foreign.Ptr
import Foreign.Storable

-- | 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 { ptr :: Ptr BotanPKOpVerifyStruct }
        deriving newtype (Eq, Ord, 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