Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
2551-crypto-pbkdf2_hmac-5-error-ERR-error-ERR-F...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2551-crypto-pbkdf2_hmac-5-error-ERR-error-ERR-FileInfo-De.patch of Package erlang
From 814234aa91b52b744bb7251b15a6e4b19df4e05d Mon Sep 17 00:00:00 2001 From: Hans Nilsson <hans@erlang.org> Date: Tue, 8 Mar 2022 11:30:35 +0100 Subject: [PATCH 1/8] crypto:pbkdf2_hmac/5: error:ERR -> error:{ERR,FileInfo,Description} --- lib/crypto/c_src/common.h | 2 ++ lib/crypto/c_src/pbkdf2_hmac.c | 36 +++++++++++++++------------------- lib/crypto/doc/src/crypto.xml | 4 +--- lib/crypto/src/crypto.erl | 2 +- 4 files changed, 20 insertions(+), 24 deletions(-) diff --git a/lib/crypto/c_src/common.h b/lib/crypto/c_src/common.h index 593a58373f..911652b023 100644 --- a/lib/crypto/c_src/common.h +++ b/lib/crypto/c_src/common.h @@ -46,4 +46,6 @@ ERL_NIF_TERM raise_exception(ErlNifEnv* env, ERL_NIF_TERM id, int arg_num, char* #define EXCP_NOTSUP_N(Env, ArgNum, Str) raise_exception((Env), atom_notsup, (ArgNum), (Str), __FILE__, __LINE__) #define EXCP_BADARG_N(Env, ArgNum, Str) raise_exception((Env), atom_badarg, (ArgNum), (Str), __FILE__, __LINE__) +#define assign_goto(Var, Goto, CALL) {Var = (CALL); goto Goto;} + #endif /* E_COMMON_H__ */ diff --git a/lib/crypto/c_src/pbkdf2_hmac.c b/lib/crypto/c_src/pbkdf2_hmac.c index 7eec603d9c..461932eba7 100644 --- a/lib/crypto/c_src/pbkdf2_hmac.c +++ b/lib/crypto/c_src/pbkdf2_hmac.c @@ -30,43 +30,38 @@ static ERL_NIF_TERM pbkdf2_hmac(ErlNifEnv* env, int argc, ErlNifUInt64 iter, keylen; struct digest_type_t* digp = NULL; - ASSERT(argc == 5); - if ((digp = get_digest_type(argv[0])) == NULL) - goto bad_arg; + return EXCP_BADARG_N(env, 0, "Bad digest type"); if (digp->md.p == NULL) - goto bad_arg; - if ((digp->flags & PBKDF2_ELIGIBLE_DIGEST) == 0) { - goto bad_arg; - } + return EXCP_BADARG_N(env, 0, "md.p is not NULL"); + if ((digp->flags & PBKDF2_ELIGIBLE_DIGEST) == 0) + return EXCP_BADARG_N(env, 0, "Not eligible digest type"); if (!enif_inspect_binary(env, argv[1], &pass)) - goto bad_arg; + return EXCP_BADARG_N(env, 1, "Not binary"); + if (!enif_inspect_binary(env, argv[2], &salt)) - goto bad_arg; + return EXCP_BADARG_N(env, 2, "Not binary"); /* We already checked iter<0 and keylen<0 in pbkdf2_hmac_nif */ if (!enif_get_uint64(env, argv[3], &iter)) - goto bad_arg; + return EXCP_BADARG_N(env, 3, "Not integer"); if (!enif_get_uint64(env, argv[4], &keylen)) - goto bad_arg; + return EXCP_BADARG_N(env, 4, "Not integer"); if (!enif_alloc_binary(keylen, &out)) - goto err; + return EXCP_ERROR(env, "Can't allocate binary"); if (!PKCS5_PBKDF2_HMAC((const char *)pass.data, pass.size, salt.data, salt.size, iter, digp->md.p, keylen, out.data)) { enif_release_binary(&out); - goto err; + return EXCP_ERROR(env, "Low-level call failed"); } return enif_make_binary(env, &out); - bad_arg: - err: - return enif_make_badarg(env); } #endif /* HAS_PKCS5_PBKDF2_HMAC */ diff --git a/lib/crypto/doc/src/crypto.xml b/lib/crypto/doc/src/crypto.xml index c4cde105c6..34abbfa279 100644 --- a/lib/crypto/doc/src/crypto.xml +++ b/lib/crypto/doc/src/crypto.xml @@ -1982,12 +1982,10 @@ FloatValue = rand:uniform(). % again <name name="pbkdf2_hmac" arity="5" since="OTP 24.2"/> <fsummary>PBKDF2 in combination with HMAC</fsummary> <desc> + <p>Uses the <seeerl marker="#error_3tup">3-tuple style</seeerl> for error handling.</p> <p> PKCS #5 PBKDF2 (Password-Based Key Derivation Function 2) in combination with HMAC. </p> - <p> - The function raises a <c>error:badarg</c> if the parameters are in wrong format. - </p> </desc> </func> diff --git a/lib/crypto/src/crypto.erl b/lib/crypto/src/crypto.erl index d9627b2f6f..9d54849ee6 100644 --- a/lib/crypto/src/crypto.erl +++ b/lib/crypto/src/crypto.erl @@ -580,7 +580,7 @@ enable_fips_mode_nif(_) -> ?nif_stub. KeyLen :: pos_integer(), Result :: binary(). pbkdf2_hmac(Digest, Pass, Salt, Iter, KeyLen) -> - pbkdf2_hmac_nif(Digest, Pass, Salt, Iter, KeyLen). + ?nif_call(pbkdf2_hmac_nif(Digest, Pass, Salt, Iter, KeyLen)). pbkdf2_hmac_nif(_, _, _, _, _) -> ?nif_stub. -- 2.34.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor