diff options
| author | jsing <> | 2019-11-01 03:41:40 +0000 |
|---|---|---|
| committer | jsing <> | 2019-11-01 03:41:40 +0000 |
| commit | 4b2131d8548ee7ba37e4c4ddc15c4db5c5142254 (patch) | |
| tree | d88de625441e4ba372a575c1b1eb494e21ed0046 /src/lib/libcrypto/rsa/rsa_lib.c | |
| parent | b7c16782b73b43c43385b8f2b5b7aa8dbfa03668 (diff) | |
| download | openbsd-4b2131d8548ee7ba37e4c4ddc15c4db5c5142254.tar.gz openbsd-4b2131d8548ee7ba37e4c4ddc15c4db5c5142254.tar.bz2 openbsd-4b2131d8548ee7ba37e4c4ddc15c4db5c5142254.zip | |
Clean up RSA_new_method().
Use calloc() instead of malloc() for initialisation and remove explicit
zero initialisation of members. This ensures that new members always get
initialised.
Also use a single error return path, simplifying code.
ok tb@
Diffstat (limited to 'src/lib/libcrypto/rsa/rsa_lib.c')
| -rw-r--r-- | src/lib/libcrypto/rsa/rsa_lib.c | 64 |
1 files changed, 24 insertions, 40 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_lib.c b/src/lib/libcrypto/rsa/rsa_lib.c index bf6865d260..7cae5cb2ed 100644 --- a/src/lib/libcrypto/rsa/rsa_lib.c +++ b/src/lib/libcrypto/rsa/rsa_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: rsa_lib.c,v 1.38 2019/10/24 15:47:15 jsing Exp $ */ | 1 | /* $OpenBSD: rsa_lib.c,v 1.39 2019/11/01 03:41:40 jsing Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -131,68 +131,52 @@ RSA_new_method(ENGINE *engine) | |||
| 131 | { | 131 | { |
| 132 | RSA *ret; | 132 | RSA *ret; |
| 133 | 133 | ||
| 134 | ret = malloc(sizeof(RSA)); | 134 | if ((ret = calloc(1, sizeof(RSA))) == NULL) { |
| 135 | if (ret == NULL) { | ||
| 136 | RSAerror(ERR_R_MALLOC_FAILURE); | 135 | RSAerror(ERR_R_MALLOC_FAILURE); |
| 137 | return NULL; | 136 | return NULL; |
| 138 | } | 137 | } |
| 139 | 138 | ||
| 140 | ret->meth = RSA_get_default_method(); | 139 | ret->meth = RSA_get_default_method(); |
| 140 | |||
| 141 | #ifndef OPENSSL_NO_ENGINE | 141 | #ifndef OPENSSL_NO_ENGINE |
| 142 | if (engine) { | 142 | if (engine != NULL) { |
| 143 | if (!ENGINE_init(engine)) { | 143 | if (!ENGINE_init(engine)) { |
| 144 | RSAerror(ERR_R_ENGINE_LIB); | 144 | RSAerror(ERR_R_ENGINE_LIB); |
| 145 | free(ret); | 145 | goto err; |
| 146 | return NULL; | ||
| 147 | } | 146 | } |
| 148 | ret->engine = engine; | 147 | ret->engine = engine; |
| 149 | } else | 148 | } else { |
| 150 | ret->engine = ENGINE_get_default_RSA(); | 149 | ret->engine = ENGINE_get_default_RSA(); |
| 151 | if (ret->engine) { | 150 | } |
| 152 | ret->meth = ENGINE_get_RSA(ret->engine); | 151 | |
| 153 | if (ret->meth == NULL) { | 152 | if (ret->engine != NULL) { |
| 153 | if ((ret->meth = ENGINE_get_RSA(ret->engine)) == NULL) { | ||
| 154 | RSAerror(ERR_R_ENGINE_LIB); | 154 | RSAerror(ERR_R_ENGINE_LIB); |
| 155 | ENGINE_finish(ret->engine); | 155 | goto err; |
| 156 | free(ret); | ||
| 157 | return NULL; | ||
| 158 | } | 156 | } |
| 159 | } | 157 | } |
| 160 | #endif | 158 | #endif |
| 161 | 159 | ||
| 162 | ret->pad = 0; | ||
| 163 | ret->version = 0; | ||
| 164 | ret->n = NULL; | ||
| 165 | ret->e = NULL; | ||
| 166 | ret->d = NULL; | ||
| 167 | ret->p = NULL; | ||
| 168 | ret->q = NULL; | ||
| 169 | ret->dmp1 = NULL; | ||
| 170 | ret->dmq1 = NULL; | ||
| 171 | ret->iqmp = NULL; | ||
| 172 | ret->references = 1; | 160 | ret->references = 1; |
| 173 | ret->_method_mod_n = NULL; | ||
| 174 | ret->_method_mod_p = NULL; | ||
| 175 | ret->_method_mod_q = NULL; | ||
| 176 | ret->blinding = NULL; | ||
| 177 | ret->mt_blinding = NULL; | ||
| 178 | ret->flags = ret->meth->flags & ~RSA_FLAG_NON_FIPS_ALLOW; | 161 | ret->flags = ret->meth->flags & ~RSA_FLAG_NON_FIPS_ALLOW; |
| 179 | if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data)) { | 162 | |
| 180 | #ifndef OPENSSL_NO_ENGINE | 163 | if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data)) |
| 181 | ENGINE_finish(ret->engine); | 164 | goto err; |
| 182 | #endif | ||
| 183 | free(ret); | ||
| 184 | return NULL; | ||
| 185 | } | ||
| 186 | 165 | ||
| 187 | if (ret->meth->init != NULL && !ret->meth->init(ret)) { | 166 | if (ret->meth->init != NULL && !ret->meth->init(ret)) { |
| 188 | #ifndef OPENSSL_NO_ENGINE | ||
| 189 | ENGINE_finish(ret->engine); | ||
| 190 | #endif | ||
| 191 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data); | 167 | CRYPTO_free_ex_data(CRYPTO_EX_INDEX_RSA, ret, &ret->ex_data); |
| 192 | free(ret); | 168 | goto err; |
| 193 | ret = NULL; | ||
| 194 | } | 169 | } |
| 170 | |||
| 195 | return ret; | 171 | return ret; |
| 172 | |||
| 173 | err: | ||
| 174 | #ifndef OPENSSL_NO_ENGINE | ||
| 175 | ENGINE_finish(ret->engine); | ||
| 176 | #endif | ||
| 177 | free(ret); | ||
| 178 | |||
| 179 | return NULL; | ||
| 196 | } | 180 | } |
| 197 | 181 | ||
| 198 | void | 182 | void |
