aboutsummaryrefslogtreecommitdiffstats
path: root/lib/crypto/c_src/pkey.c
diff options
context:
space:
mode:
authorDoug Hogan <[email protected]>2019-01-07 06:23:51 -0800
committerDoug Hogan <[email protected]>2019-01-08 01:11:59 -0800
commita62cd2fde09cc7b58b7cfdb2ac9fde720e37e285 (patch)
treed1cf3df5c941f06bf7988e4be85a318869f71582 /lib/crypto/c_src/pkey.c
parent9e96731b2e1b67f3d8ed816cab670806c23fd261 (diff)
downloadotp-a62cd2fde09cc7b58b7cfdb2ac9fde720e37e285.tar.gz
otp-a62cd2fde09cc7b58b7cfdb2ac9fde720e37e285.tar.bz2
otp-a62cd2fde09cc7b58b7cfdb2ac9fde720e37e285.zip
Revamp size_of_RSA()
Diffstat (limited to 'lib/crypto/c_src/pkey.c')
-rw-r--r--lib/crypto/c_src/pkey.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/crypto/c_src/pkey.c b/lib/crypto/c_src/pkey.c
index acaa8abb7e..d37806b653 100644
--- a/lib/crypto/c_src/pkey.c
+++ b/lib/crypto/c_src/pkey.c
@@ -995,12 +995,18 @@ static int get_pkey_crypt_options(ErlNifEnv *env, ERL_NIF_TERM algorithm, ERL_NI
}
static size_t size_of_RSA(EVP_PKEY *pkey) {
- size_t tmplen;
- RSA *rsa = EVP_PKEY_get1_RSA(pkey);
- if (rsa == NULL) return 0;
- tmplen = RSA_size(rsa);
- RSA_free(rsa);
- return tmplen;
+ int ret = 0;
+ RSA *rsa = NULL;
+
+ if ((rsa = EVP_PKEY_get1_RSA(pkey)) == NULL)
+ goto err;
+ ret = RSA_size(rsa);
+
+ err:
+ if (rsa)
+ RSA_free(rsa);
+
+ return (ret < 0) ? 0 : (size_t)ret;
}
ERL_NIF_TERM pkey_crypt_nif(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])