diff options
author | Loïc Hoguin <[email protected]> | 2019-03-05 13:34:48 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2019-03-06 12:42:40 +0100 |
commit | 2f0aff476c585524b4eb2d8edb13c5e7357c111d (patch) | |
tree | afccd817f3334f7c55bb5835cdbbeb2c130137f4 /lib/crypto/c_src/hash.c | |
parent | 1378b465cfa5e6eb2311bb633a0ebae1a8de3773 (diff) | |
download | otp-2f0aff476c585524b4eb2d8edb13c5e7357c111d.tar.gz otp-2f0aff476c585524b4eb2d8edb13c5e7357c111d.tar.bz2 otp-2f0aff476c585524b4eb2d8edb13c5e7357c111d.zip |
Add crypto:cipher_info/1 and crypto:hash_info/1
Also adds some more aliases that contain the key length
in their name.
Diffstat (limited to 'lib/crypto/c_src/hash.c')
-rw-r--r-- | lib/crypto/c_src/hash.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/crypto/c_src/hash.c b/lib/crypto/c_src/hash.c index 457e9d071a..0a9f64acef 100644 --- a/lib/crypto/c_src/hash.c +++ b/lib/crypto/c_src/hash.c @@ -61,6 +61,32 @@ int init_hash_ctx(ErlNifEnv* env) { #endif } +ERL_NIF_TERM hash_info_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) +{/* (Type) */ + struct digest_type_t *digp = NULL; + const EVP_MD *md; + ERL_NIF_TERM ret; + + ASSERT(argc == 1); + + if ((digp = get_digest_type(argv[0])) == NULL) + return enif_make_badarg(env); + + if ((md = digp->md.p) == NULL) + return atom_notsup; + + ret = enif_make_new_map(env); + + enif_make_map_put(env, ret, atom_type, + enif_make_int(env, EVP_MD_type(md)), &ret); + enif_make_map_put(env, ret, atom_size, + enif_make_int(env, EVP_MD_size(md)), &ret); + enif_make_map_put(env, ret, atom_block_size, + enif_make_int(env, EVP_MD_block_size(md)), &ret); + + return ret; +} + ERL_NIF_TERM hash_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {/* (Type, Data) */ struct digest_type_t *digp = NULL; |