summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/kdf/tls1_prf.c
diff options
context:
space:
mode:
authortb <>2024-07-09 17:56:41 +0000
committertb <>2024-07-09 17:56:41 +0000
commit1d37f76d5044c1374e14316ecf9de89223b7096e (patch)
tree964546cf5d4d27c0309455f3fbfc56f06c8825c4 /src/lib/libcrypto/kdf/tls1_prf.c
parentad435e6afcf5da671e3d66380107cd00fbd4292a (diff)
downloadopenbsd-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/lib/libcrypto/kdf/tls1_prf.c')
-rw-r--r--src/lib/libcrypto/kdf/tls1_prf.c20
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
258tls1_prf_alg(const EVP_MD *md, const unsigned char *secret, size_t secret_len, 258tls1_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
292static int 294static int