diff options
| author | tb <> | 2024-07-09 17:56:41 +0000 |
|---|---|---|
| committer | tb <> | 2024-07-09 17:56:41 +0000 |
| commit | 1d37f76d5044c1374e14316ecf9de89223b7096e (patch) | |
| tree | 964546cf5d4d27c0309455f3fbfc56f06c8825c4 /src | |
| parent | ad435e6afcf5da671e3d66380107cd00fbd4292a (diff) | |
| download | openbsd-1d37f76d5044c1374e14316ecf9de89223b7096e.tar.gz openbsd-1d37f76d5044c1374e14316ecf9de89223b7096e.tar.bz2 openbsd-1d37f76d5044c1374e14316ecf9de89223b7096e.zip | |
Turn tls1_prf_alg() into single exit
requested by jsing on review
ok beck
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/kdf/tls1_prf.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/lib/libcrypto/kdf/tls1_prf.c b/src/lib/libcrypto/kdf/tls1_prf.c index ce574928d4..7c07e23bbb 100644 --- a/src/lib/libcrypto/kdf/tls1_prf.c +++ b/src/lib/libcrypto/kdf/tls1_prf.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls1_prf.c,v 1.37 2024/07/09 17:47:20 tb Exp $ */ | 1 | /* $OpenBSD: tls1_prf.c,v 1.38 2024/07/09 17:56:41 tb Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project | 3 | * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project |
| 4 | * 2016. | 4 | * 2016. |
| @@ -258,9 +258,10 @@ static int | |||
| 258 | tls1_prf_alg(const EVP_MD *md, const unsigned char *secret, size_t secret_len, | 258 | tls1_prf_alg(const EVP_MD *md, const unsigned char *secret, size_t secret_len, |
| 259 | const unsigned char *seed, size_t seed_len, unsigned char *out, size_t out_len) | 259 | const unsigned char *seed, size_t seed_len, unsigned char *out, size_t out_len) |
| 260 | { | 260 | { |
| 261 | unsigned char *tmp; | 261 | unsigned char *tmp = NULL; |
| 262 | size_t half_len; | 262 | size_t half_len; |
| 263 | size_t i; | 263 | size_t i; |
| 264 | int ret = 0; | ||
| 264 | 265 | ||
| 265 | if (EVP_MD_type(md) != NID_md5_sha1) | 266 | if (EVP_MD_type(md) != NID_md5_sha1) |
| 266 | return tls1_prf_P_hash(md, secret, secret_len, seed, seed_len, | 267 | return tls1_prf_P_hash(md, secret, secret_len, seed, seed_len, |
| @@ -269,24 +270,25 @@ tls1_prf_alg(const EVP_MD *md, const unsigned char *secret, size_t secret_len, | |||
| 269 | half_len = secret_len - secret_len / 2; | 270 | half_len = secret_len - secret_len / 2; |
| 270 | if (!tls1_prf_P_hash(EVP_md5(), secret, half_len, seed, seed_len, | 271 | if (!tls1_prf_P_hash(EVP_md5(), secret, half_len, seed, seed_len, |
| 271 | out, out_len)) | 272 | out, out_len)) |
| 272 | return 0; | 273 | goto err; |
| 273 | 274 | ||
| 274 | if ((tmp = calloc(1, out_len)) == NULL) { | 275 | if ((tmp = calloc(1, out_len)) == NULL) { |
| 275 | KDFerror(ERR_R_MALLOC_FAILURE); | 276 | KDFerror(ERR_R_MALLOC_FAILURE); |
| 276 | return 0; | 277 | goto err; |
| 277 | } | 278 | } |
| 278 | secret += secret_len - half_len; | 279 | secret += secret_len - half_len; |
| 279 | if (!tls1_prf_P_hash(EVP_sha1(), secret, half_len, seed, seed_len, | 280 | if (!tls1_prf_P_hash(EVP_sha1(), secret, half_len, seed, seed_len, |
| 280 | tmp, out_len)) { | 281 | tmp, out_len)) |
| 281 | freezero(tmp, out_len); | 282 | goto err; |
| 282 | return 0; | ||
| 283 | } | ||
| 284 | for (i = 0; i < out_len; i++) | 283 | for (i = 0; i < out_len; i++) |
| 285 | out[i] ^= tmp[i]; | 284 | out[i] ^= tmp[i]; |
| 286 | 285 | ||
| 286 | ret = 1; | ||
| 287 | |||
| 288 | err: | ||
| 287 | freezero(tmp, out_len); | 289 | freezero(tmp, out_len); |
| 288 | 290 | ||
| 289 | return 1; | 291 | return ret; |
| 290 | } | 292 | } |
| 291 | 293 | ||
| 292 | static int | 294 | static int |
