diff options
author | Doug Hogan <[email protected]> | 2018-12-21 07:44:02 -0800 |
---|---|---|
committer | Doug Hogan <[email protected]> | 2018-12-21 08:23:39 -0800 |
commit | da3831bbe75f68626e362fdadd653becf230cf1f (patch) | |
tree | 3208398c4f867ba7ead9fd54e80839a905360695 /lib/crypto/c_src/hmac.c | |
parent | bd2ce3b7ba891b0bc4872fcf17e2eda44767bcd4 (diff) | |
download | otp-da3831bbe75f68626e362fdadd653becf230cf1f.tar.gz otp-da3831bbe75f68626e362fdadd653becf230cf1f.tar.bz2 otp-da3831bbe75f68626e362fdadd653becf230cf1f.zip |
Make HMAC ctx init internal to hmac.c per PR feedback
Diffstat (limited to 'lib/crypto/c_src/hmac.c')
-rw-r--r-- | lib/crypto/c_src/hmac.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/lib/crypto/c_src/hmac.c b/lib/crypto/c_src/hmac.c index 0774dbfb48..143cde90e1 100644 --- a/lib/crypto/c_src/hmac.c +++ b/lib/crypto/c_src/hmac.c @@ -21,7 +21,28 @@ #include "hmac.h" #include "digest.h" -ErlNifResourceType* hmac_context_rtype; +struct hmac_context +{ + ErlNifMutex* mtx; + int alive; + HMAC_CTX* ctx; +}; + +static ErlNifResourceType* hmac_context_rtype; + +static void hmac_context_dtor(ErlNifEnv* env, struct hmac_context*); + +int init_hmac_ctx(ErlNifEnv *env) { + hmac_context_rtype = enif_open_resource_type(env, NULL, "hmac_context", + (ErlNifResourceDtor*) hmac_context_dtor, + ERL_NIF_RT_CREATE|ERL_NIF_RT_TAKEOVER, + NULL); + if (hmac_context_rtype == NULL) { + PRINTF_ERR0("CRYPTO: Could not open resource type 'hmac_context'"); + return 0; + } + return 1; +} ERL_NIF_TERM hmac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {/* (Type, Key, Data) or (Type, Key, Data, MacSize) */ @@ -61,7 +82,7 @@ ERL_NIF_TERM hmac_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) return ret; } -void hmac_context_dtor(ErlNifEnv* env, struct hmac_context *obj) +static void hmac_context_dtor(ErlNifEnv* env, struct hmac_context *obj) { if (obj->alive) { HMAC_CTX_free(obj->ctx); |