summaryrefslogtreecommitdiff
path: root/lib/crypto/c_src/pkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/crypto/c_src/pkey.c')
-rw-r--r--lib/crypto/c_src/pkey.c47
1 files changed, 23 insertions, 24 deletions
diff --git a/lib/crypto/c_src/pkey.c b/lib/crypto/c_src/pkey.c
index 2125aed537..2c2fbc9a15 100644
--- a/lib/crypto/c_src/pkey.c
+++ b/lib/crypto/c_src/pkey.c
@@ -73,7 +73,7 @@ static int get_pkey_digest_type(ErlNifEnv *env, ERL_NIF_TERM algorithm, ERL_NIF_
return PKEY_OK;
if (algorithm == atom_eddsa) {
#ifdef HAVE_EDDSA
- if (!FIPS_mode()) return PKEY_OK;
+ if (!FIPS_MODE()) return PKEY_OK;
#else
return PKEY_NOTSUP;
#endif
@@ -282,10 +282,10 @@ static int get_pkey_private_key(ErlNifEnv *env, ERL_NIF_TERM algorithm, ERL_NIF_
#else
return PKEY_BADARG;
#endif
+
} else if (algorithm == atom_rsa) {
if ((rsa = RSA_new()) == NULL)
goto err;
-
if (!get_rsa_private_key(env, key, rsa))
goto err;
if ((result = EVP_PKEY_new()) == NULL)
@@ -299,7 +299,6 @@ static int get_pkey_private_key(ErlNifEnv *env, ERL_NIF_TERM algorithm, ERL_NIF_
#if defined(HAVE_EC)
const ERL_NIF_TERM *tpl_terms;
int tpl_arity;
-
if (!enif_get_tuple(env, key, &tpl_arity, &tpl_terms))
goto err;
if (tpl_arity != 2)
@@ -317,48 +316,41 @@ static int get_pkey_private_key(ErlNifEnv *env, ERL_NIF_TERM algorithm, ERL_NIF_
goto err;
/* On success, result owns ec */
ec = NULL;
-
#else
return PKEY_NOTSUP;
#endif
+
} else if (algorithm == atom_eddsa) {
#ifdef HAVE_EDDSA
- if (!FIPS_mode())
- {
- if (!get_eddsa_key(env, 0, key, &result))
- goto err;
- else
- goto done; // Not nice....
- }
+ if (FIPS_MODE())
+ return PKEY_NOTSUP;
+ if (!get_eddsa_key(env, 0, key, &result))
+ goto err;
#else
return PKEY_NOTSUP;
#endif
+
} else if (algorithm == atom_dss) {
#ifdef HAVE_DSA
if ((dsa = DSA_new()) == NULL)
goto err;
if (!get_dss_private_key(env, key, dsa))
goto err;
-
if ((result = EVP_PKEY_new()) == NULL)
goto err;
if (EVP_PKEY_assign_DSA(result, dsa) != 1)
goto err;
/* On success, result owns dsa */
dsa = NULL;
-
- } else {
+#else
+ return PKEY_NOTSUP;
#endif
+
+ } else
return PKEY_BADARG;
- }
- goto done;
- err:
- if (result)
- EVP_PKEY_free(result);
- result = NULL;
- done:
+ free_and_return:
if (password)
enif_free(password);
if (id)
@@ -380,8 +372,15 @@ static int get_pkey_private_key(ErlNifEnv *env, ERL_NIF_TERM algorithm, ERL_NIF_
*pkey = result;
return PKEY_OK;
}
+
+ err:
+ if (result)
+ EVP_PKEY_free(result);
+ result = NULL;
+ goto free_and_return;
}
+
static int get_pkey_public_key(ErlNifEnv *env, ERL_NIF_TERM algorithm, ERL_NIF_TERM key,
EVP_PKEY **pkey)
{
@@ -453,7 +452,7 @@ static int get_pkey_public_key(ErlNifEnv *env, ERL_NIF_TERM algorithm, ERL_NIF_T
#endif
} else if (algorithm == atom_eddsa) {
#ifdef HAVE_EDDSA
- if (!FIPS_mode()) {
+ if (!FIPS_MODE()) {
if (!get_eddsa_key(env, 1, key, &result))
goto err;
}
@@ -610,7 +609,7 @@ enif_get_atom(env,argv[1],buf,1024,ERL_NIF_LATIN1); printf("hash=%s ",buf);
if (argv[0] == atom_eddsa) {
#ifdef HAVE_EDDSA
- if (!FIPS_mode()) {
+ if (!FIPS_MODE()) {
if ((mdctx = EVP_MD_CTX_new()) == NULL)
goto err;
@@ -843,7 +842,7 @@ ERL_NIF_TERM pkey_verify_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]
if (argv[0] == atom_eddsa) {
#ifdef HAVE_EDDSA
- if (!FIPS_mode()) {
+ if (!FIPS_MODE()) {
if ((mdctx = EVP_MD_CTX_new()) == NULL)
goto err;