aboutsummaryrefslogtreecommitdiffstats
path: root/lib/crypto/c_src/hash.c
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2019-03-05 13:34:48 +0100
committerLoïc Hoguin <[email protected]>2019-03-06 12:42:40 +0100
commit2f0aff476c585524b4eb2d8edb13c5e7357c111d (patch)
treeafccd817f3334f7c55bb5835cdbbeb2c130137f4 /lib/crypto/c_src/hash.c
parent1378b465cfa5e6eb2311bb633a0ebae1a8de3773 (diff)
downloadotp-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.c26
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;