packages feed

botan-bindings-0.1.0.0: src/Botan/Bindings/X509/CRL.hs

module Botan.Bindings.X509.CRL where

import Botan.Bindings.Error
import Botan.Bindings.Prelude
import Botan.Bindings.X509
import Botan.Bindings.X509.Extensions


--
-- Certificate Revocation List
--
-- TODO: Eventually move the read-only CRL functions into here

{-
data X509CRLStruct
type X509CRLPtr = Ptr X509CRLStruct

foreign import ccall unsafe botan_x509_crl_load :: Ptr X509CRLPtr -> Ptr Word8 -> CSize -> IO BotanErrorCode
foreign import ccall unsafe botan_x509_crl_load_file :: Ptr X509CRLPtr -> Ptr CChar -> IO BotanErrorCode
foreign import ccall unsafe "&botan_x509_crl_destroy" botan_x509_crl_destroy :: FinalizerPtr X509CRLStruct
-- NOTE: Need to rename botan_x509_is_revoked to botan_x509_crl_is_revoked first
foreign import ccall unsafe botan_x509_crl_is_revoked :: X509CRLPtr -> X509CertPtr -> IO BotanErrorCode
-}

foreign import ccall unsafe botan_x509_crl_get_revoked
    :: Ptr X509CRLEntryPtr -> Ptr CSize
    -> X509CRLPtr
    -> IO BotanErrorCode

-- NOTE: If we were to follow the pattern set in `botan_x509_cert_get_issuer_dn`
--  then this would merely be an accessor for a single value using key + index)
-- NOTE: We're keeping our own return-value-first style still though so keep that
--  difference in mind
foreign import ccall unsafe botan_x509_crl_get_issuer_dn
    :: Ptr Word8 -> Ptr CSize
    -> X509CRLPtr
    -> Ptr CChar
    -> CSize
    -> IO BotanErrorCode
-- With actual DN objects, we could just return the object:
{-
foreign import ccall unsafe botan_x509_crl_issuer_dn
    :: Ptr X509DNPtr
    -> X509CRLPtr
    -> IO BotanErrorCode
-}
-- Probably should create a new pattern using  botan_foo_get_dn_attribute(?)
--  (make consistent with DN object accessors) and botan_foo_get_dn_object

foreign import ccall unsafe botan_x509_crl_extensions
    :: Ptr X509ExtensionsPtr
    -> X509CRLPtr
    -> IO BotanErrorCode

foreign import ccall unsafe botan_x509_crl_authority_key_id
    :: Ptr Word8 -> Ptr CSize
    -> X509CRLPtr
    -> IO BotanErrorCode

foreign import ccall unsafe botan_x509_crl_serial_number
    :: Ptr Word32
    -> X509CRLPtr
    -> IO BotanErrorCode

foreign import ccall unsafe botan_x509_crl_this_update
    :: Ptr Word64
    -> X509CRLPtr
    -> IO BotanErrorCode

foreign import ccall unsafe botan_x509_crl_next_update
    :: Ptr Word64
    -> X509CRLPtr
    -> IO BotanErrorCode

foreign import ccall unsafe botan_x509_crl_issuing_distribution_point
    :: Ptr Word8 -> Ptr CSize
    -> X509CRLPtr
    -> IO BotanErrorCode

foreign import ccall unsafe botan_x509_crl_create_der
    :: Ptr X509CRLPtr
    -> Ptr Word8 -> CSize
    -> IO BotanErrorCode

foreign import ccall unsafe botan_x509_crl_create
    :: Ptr X509CRLPtr
    -> Ptr Word8 -> CSize           -- Encodeed Issuer DN, not DN object
    -> Word64                       -- this update
    -> Word64                       -- next update
    -> Ptr X509CRLEntryPtr -> CSize -- Entries
    -> IO BotanErrorCode

foreign import ccall unsafe botan_x509_crl_add_entry
    :: X509CRLPtr
    -> X509CRLEntryPtr
    -> IO BotanErrorCode

-- NOTE: A convenience function
foreign import ccall unsafe botan_x509_crl_revoke_cert
    :: X509CRLPtr
    -> X509CertPtr
    -> Word32   -- Reason
    -> IO BotanErrorCode

--
-- Certificate Revocation List Entry
--

data X509CRLEntryStruct
type X509CRLEntryPtr = Ptr X509CRLEntryStruct
-- TODO: These functions are only bound to declarations, and the functions are currently not implemented
-- Do not use them yet, it will just crash

foreign import ccall unsafe "&botan_x509_crl_entry_destroy" botan_x509_crl_entry_destroy :: FinalizerPtr X509CRLEntryStruct

foreign import ccall unsafe botan_x509_crl_entry_create
    :: Ptr X509CRLEntryPtr
    -> X509CertPtr
    -> Word32   -- Reason
    -> IO BotanErrorCode

-- TODO: CRL_Entry PEM / BER encode / decode (and for CRL too)

foreign import ccall unsafe botan_x509_crl_entry_get_serial_number
    :: Ptr Word8 -> Ptr CSize
    -> X509CRLEntryPtr
    -> IO BotanErrorCode

foreign import ccall unsafe botan_x509_crl_entry_get_expire_time
    :: Ptr Word64
    -> X509CRLEntryPtr
    -> IO BotanErrorCode

foreign import ccall unsafe botan_x509_crl_entry_get_reason_code
    :: Ptr Word32
    -> X509CRLEntryPtr
    -> IO BotanErrorCode

foreign import ccall unsafe botan_x509_crl_entry_get_extensions
    :: Ptr X509ExtensionsPtr
    -> X509CRLEntryPtr
    -> IO BotanErrorCode