aboutsummaryrefslogtreecommitdiffstats
path: root/lib/crypto/c_src/hash.c
diff options
context:
space:
mode:
authorHans Nilsson <[email protected]>2019-03-08 10:23:33 +0100
committerGitHub <[email protected]>2019-03-08 10:23:33 +0100
commit0c9d6cb2ab23afb8e4bde0a3fa56fafb0d3a8a27 (patch)
tree1a037ff3be06d74d4bc9c3c342231c5f4fc845c4 /lib/crypto/c_src/hash.c
parentae6a710613fc4ee54c184be9d554cea4a39284ae (diff)
parent2f0aff476c585524b4eb2d8edb13c5e7357c111d (diff)
downloadotp-0c9d6cb2ab23afb8e4bde0a3fa56fafb0d3a8a27.tar.gz
otp-0c9d6cb2ab23afb8e4bde0a3fa56fafb0d3a8a27.tar.bz2
otp-0c9d6cb2ab23afb8e4bde0a3fa56fafb0d3a8a27.zip
Merge pull request #2173 from essen/crypto-info
Add crypto:cipher_info/1 and crypto:hash_info/1 OTP-15655
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;