public static extern int EVP_CipherUpdate(EVP_CIPHER_CTX *handle, IntPtr outbuf, ref int outlen, IntPtr inbuf, int inlen);
public static extern int EVP_CipherFinal_ex(EVP_CIPHER_CTX *handle, IntPtr outbuf, ref int outlen);
public static extern int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *handle, int type, int arg, IntPtr ptr);
public static extern int EVP_CipherUpdate(EVP_CIPHER_CTX *handle, byte[] outbuf, ref int outlen, byte[] inbuf, int inlen);
internal static extern unsafe int EVP_EncryptInit_ex(EVP_CIPHER_CTX ctx, IntPtr type, IntPtr impl, void *key, void *iv);
public static extern int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *handle, int type, int arg, byte[] ptr);
public static extern void EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *handle);
public static extern int EVP_CIPHER_CTX_iv_length(EVP_CIPHER_CTX *handle);
public static extern void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *handle);
public static extern void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *handle);
private static extern int EVP_CipherFinal_ex(EVP_CIPHER_CTX ctx, IntPtr outm, out int outl);
public static int EVP_CipherFinal_ex(EVP_CIPHER_CTX ctx) { var result = EVP_CipherFinal_ex(ctx, IntPtr.Zero, out var size); return(ThrowOnErrorReturnCode(result)); }
private static extern unsafe int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX ctx, EVP_CIPHER_CTRL type, int arg, void *ptr);
public static extern EVP_CIPHER* EVP_CIPHER_CTX_cipher(EVP_CIPHER_CTX *handle);
public static extern int EVP_CipherInit_ex(EVP_CIPHER_CTX *handle, EVP_CIPHER *cipher, IntPtr engine, byte[] key, byte[] iv, int enc);
public static extern int EVP_CIPHER_CTX_block_size(EVP_CIPHER_CTX *handle);
public static extern int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *handle, int padding);
public static extern int EVP_CIPHER_CTX_set_iv_length(EVP_CIPHER_CTX *handle, int length);
public unsafe void SetKey(Span <byte> key) { _ctx = EVP_CIPHER_CTX_new(); key.CopyTo(new Span <byte>(_keyPointer.ToPointer(), _keyLength)); }