aboutsummaryrefslogtreecommitdiffstats
path: root/lib/crypto/c_src/cipher.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/crypto/c_src/cipher.h')
-rw-r--r--lib/crypto/c_src/cipher.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/crypto/c_src/cipher.h b/lib/crypto/c_src/cipher.h
new file mode 100644
index 0000000000..25cb53e2e0
--- /dev/null
+++ b/lib/crypto/c_src/cipher.h
@@ -0,0 +1,30 @@
+#ifndef E_CIPHER_H__
+#define E_CIPHER_H__ 1
+
+#include "common.h"
+
+struct cipher_type_t {
+ union {
+ const char* str; /* before init */
+ ERL_NIF_TERM atom; /* after init */
+ }type;
+ union {
+ const EVP_CIPHER* (*funcp)(void); /* before init, NULL if notsup */
+ const EVP_CIPHER* p; /* after init, NULL if notsup */
+ }cipher;
+ const size_t key_len; /* != 0 to also match on key_len */
+};
+
+#ifdef HAVE_EVP_AES_CTR
+extern ErlNifResourceType* evp_cipher_ctx_rtype;
+struct evp_cipher_ctx {
+ EVP_CIPHER_CTX* ctx;
+};
+
+void evp_cipher_ctx_dtor(ErlNifEnv* env, struct evp_cipher_ctx* ctx);
+#endif
+
+void init_cipher_types(ErlNifEnv* env);
+struct cipher_type_t* get_cipher_type(ERL_NIF_TERM type, size_t key_len);
+
+#endif /* E_CIPHER_H__ */