diff options
author | Doug Hogan <hogand@users.noreply.github.com> | 2019-01-07 06:23:51 -0800 |
---|---|---|
committer | Doug Hogan <hogand@users.noreply.github.com> | 2019-01-08 01:11:59 -0800 |
commit | a62cd2fde09cc7b58b7cfdb2ac9fde720e37e285 (patch) | |
tree | d1cf3df5c941f06bf7988e4be85a318869f71582 /lib | |
parent | 9e96731b2e1b67f3d8ed816cab670806c23fd261 (diff) | |
download | otp-a62cd2fde09cc7b58b7cfdb2ac9fde720e37e285.tar.gz otp-a62cd2fde09cc7b58b7cfdb2ac9fde720e37e285.tar.bz2 otp-a62cd2fde09cc7b58b7cfdb2ac9fde720e37e285.zip |
Revamp size_of_RSA()
Diffstat (limited to 'lib')
-rw-r--r-- | lib/crypto/c_src/pkey.c | 18 |
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[]) |