{-# OPTIONS_GHC -optc-DOPENSSL_HAS_PBKDF2 #-} {-# OPTIONS_GHC -optc-DOPENSSL_HAS_GCM #-} {-# LINE 1 "Crypto/OpenSSL/AES/Foreign.hsc" #-} {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE EmptyDataDecls #-} module Crypto.OpenSSL.AES.Foreign where {-# LINE 11 "Crypto/OpenSSL/AES/Foreign.hsc" #-} {-# LINE 13 "Crypto/OpenSSL/AES/Foreign.hsc" #-} {-# LINE 16 "Crypto/OpenSSL/AES/Foreign.hsc" #-} import Foreign.Marshal.Alloc import Foreign.Ptr import Foreign.ForeignPtr import Foreign.C.Types import Data.Word {-# LINE 23 "Crypto/OpenSSL/AES/Foreign.hsc" #-} import qualified Data.Memory.PtrMethods as B (memSet) {-# LINE 25 "Crypto/OpenSSL/AES/Foreign.hsc" #-} gcmTagLength :: Int gcmTagLength = 16 {-# LINE 30 "Crypto/OpenSSL/AES/Foreign.hsc" #-} sizeofEVP :: Int sizeofEVP = (168) {-# LINE 32 "Crypto/OpenSSL/AES/Foreign.hsc" #-} {-# LINE 33 "Crypto/OpenSSL/AES/Foreign.hsc" #-} data ENGINE data EVP_CIPHER data EVP_CIPHER_CTX type KeyBuf = Ptr Word8 type IvBuf = Ptr Word8 type DataBuf = Ptr Word8 type OutputOffset = Ptr CInt type InputLength = CInt compatNewEvpCipherCtx :: IO (ForeignPtr EVP_CIPHER_CTX) compatNewEvpCipherCtx = do {-# LINE 52 "Crypto/OpenSSL/AES/Foreign.hsc" #-} ptr <- mallocBytes sizeofEVP B.memSet (castPtr ptr) 0 (fromIntegral sizeofEVP) ssl_c_cipher_ctx_init ptr newForeignPtr ssl_c_cipher_ctx_cleanup ptr {-# LINE 57 "Crypto/OpenSSL/AES/Foreign.hsc" #-} {-# LINE 62 "Crypto/OpenSSL/AES/Foreign.hsc" #-} {-# LINE 64 "Crypto/OpenSSL/AES/Foreign.hsc" #-} foreign import ccall unsafe "EVP_CIPHER_CTX_init" ssl_c_cipher_ctx_init :: Ptr EVP_CIPHER_CTX -> IO () {-# LINE 67 "Crypto/OpenSSL/AES/Foreign.hsc" #-} foreign import ccall unsafe "&EVP_CIPHER_CTX_free" ssl_c_cipher_ctx_free :: FunPtr (Ptr EVP_CIPHER_CTX -> IO ()) {-# LINE 72 "Crypto/OpenSSL/AES/Foreign.hsc" #-} foreign import ccall unsafe "&EVP_CIPHER_CTX_cleanup" ssl_c_cipher_ctx_cleanup :: FunPtr (Ptr EVP_CIPHER_CTX -> IO ()) {-# LINE 75 "Crypto/OpenSSL/AES/Foreign.hsc" #-} foreign import ccall unsafe "EVP_CIPHER_CTX_ctrl" ssl_c_cipher_ctx_ctrl :: Ptr EVP_CIPHER_CTX -> CInt -> CInt -> Ptr a -> IO CInt foreign import ccall unsafe "EVP_CIPHER_CTX_set_padding" ssl_c_cipher_ctx_set_padding :: Ptr EVP_CIPHER_CTX -> CInt -> IO CInt foreign import ccall unsafe "EVP_CIPHER_CTX_set_key_length" ssl_c_cipher_ctx_set_key_length :: Ptr EVP_CIPHER_CTX -> CInt -> IO CInt foreign import ccall unsafe "EVP_EncryptInit_ex" ssl_c_encryptinit_ex :: Ptr EVP_CIPHER_CTX -> Ptr EVP_CIPHER -> Ptr ENGINE -> KeyBuf -> IvBuf -> IO CInt foreign import ccall unsafe "EVP_DecryptInit_ex" ssl_c_decryptinit_ex :: Ptr EVP_CIPHER_CTX -> Ptr EVP_CIPHER -> Ptr ENGINE -> KeyBuf -> IvBuf -> IO CInt foreign import ccall unsafe "EVP_EncryptUpdate" ssl_c_encryptupdate :: Ptr EVP_CIPHER_CTX -> DataBuf -> OutputOffset -> DataBuf -> InputLength -> IO CInt foreign import ccall unsafe "EVP_DecryptUpdate" ssl_c_decryptupdate :: Ptr EVP_CIPHER_CTX -> DataBuf -> OutputOffset -> DataBuf -> InputLength -> IO CInt foreign import ccall unsafe "EVP_EncryptFinal_ex" ssl_c_encryptfinal_ex :: Ptr EVP_CIPHER_CTX -> DataBuf -> OutputOffset -> IO CInt foreign import ccall unsafe "EVP_DecryptFinal_ex" ssl_c_decryptfinal_ex :: Ptr EVP_CIPHER_CTX -> DataBuf -> OutputOffset -> IO CInt {-# LINE 104 "Crypto/OpenSSL/AES/Foreign.hsc" #-} foreign import ccall unsafe "EVP_aes_256_gcm" ssl_c_aes_256_gcm :: IO (Ptr EVP_CIPHER) {-# LINE 110 "Crypto/OpenSSL/AES/Foreign.hsc" #-} ctrl_GCM_SET_IVLEN, ctrl_GCM_GET_TAG, ctrl_GCM_SET_TAG :: CInt {-# LINE 113 "Crypto/OpenSSL/AES/Foreign.hsc" #-} ctrl_GCM_SET_IVLEN = (9) {-# LINE 114 "Crypto/OpenSSL/AES/Foreign.hsc" #-} ctrl_GCM_GET_TAG = (16) {-# LINE 115 "Crypto/OpenSSL/AES/Foreign.hsc" #-} ctrl_GCM_SET_TAG = (17) {-# LINE 116 "Crypto/OpenSSL/AES/Foreign.hsc" #-} {-# LINE 122 "Crypto/OpenSSL/AES/Foreign.hsc" #-}