summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2022-05-05 07:50:06 +0000
committertb <>2022-05-05 07:50:06 +0000
commit2e4ad2802422c50618b3d85dd57dfaf0016eb54b (patch)
treee920e7f62fff206faaaa4a81d9a4645436107505 /src
parentc6eb9dd9bbc883f07fcfdfdbadd1c8a6323a9045 (diff)
downloadopenbsd-2e4ad2802422c50618b3d85dd57dfaf0016eb54b.tar.gz
openbsd-2e4ad2802422c50618b3d85dd57dfaf0016eb54b.tar.bz2
openbsd-2e4ad2802422c50618b3d85dd57dfaf0016eb54b.zip
Remove OpenSSL versions of HKDF*().
ok beck jsing
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/kdf/hkdf_evp.c118
1 files changed, 1 insertions, 117 deletions
diff --git a/src/lib/libcrypto/kdf/hkdf_evp.c b/src/lib/libcrypto/kdf/hkdf_evp.c
index 997835fe9c..50164239dc 100644
--- a/src/lib/libcrypto/kdf/hkdf_evp.c
+++ b/src/lib/libcrypto/kdf/hkdf_evp.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: hkdf_evp.c,v 1.6 2022/05/04 19:15:52 tb Exp $ */ 1/* $OpenBSD: hkdf_evp.c,v 1.7 2022/05/05 07:50:06 tb Exp $ */
2/* ==================================================================== 2/* ====================================================================
3 * Copyright (c) 2016-2018 The OpenSSL Project. All rights reserved. 3 * Copyright (c) 2016-2018 The OpenSSL Project. All rights reserved.
4 * 4 *
@@ -57,22 +57,6 @@
57 57
58#define HKDF_MAXBUF 1024 58#define HKDF_MAXBUF 1024
59 59
60static unsigned char *HKDF(const EVP_MD *evp_md,
61 const unsigned char *salt, size_t salt_len,
62 const unsigned char *key, size_t key_len,
63 const unsigned char *info, size_t info_len,
64 unsigned char *okm, size_t okm_len);
65
66static unsigned char *HKDF_Extract(const EVP_MD *evp_md,
67 const unsigned char *salt, size_t salt_len,
68 const unsigned char *key, size_t key_len,
69 unsigned char *prk, size_t *prk_len);
70
71static unsigned char *HKDF_Expand(const EVP_MD *evp_md,
72 const unsigned char *prk, size_t prk_len,
73 const unsigned char *info, size_t info_len,
74 unsigned char *okm, size_t okm_len);
75
76typedef struct { 60typedef struct {
77 int mode; 61 int mode;
78 const EVP_MD *md; 62 const EVP_MD *md;
@@ -303,103 +287,3 @@ const EVP_PKEY_METHOD hkdf_pkey_meth = {
303 pkey_hkdf_ctrl, 287 pkey_hkdf_ctrl,
304 pkey_hkdf_ctrl_str 288 pkey_hkdf_ctrl_str
305}; 289};
306
307static unsigned char *
308HKDF(const EVP_MD *evp_md,
309 const unsigned char *salt, size_t salt_len,
310 const unsigned char *key, size_t key_len,
311 const unsigned char *info, size_t info_len,
312 unsigned char *okm, size_t okm_len)
313{
314 unsigned char prk[EVP_MAX_MD_SIZE];
315 unsigned char *ret;
316 size_t prk_len;
317
318 if (!HKDF_Extract(evp_md, salt, salt_len, key, key_len, prk, &prk_len))
319 return NULL;
320
321 ret = HKDF_Expand(evp_md, prk, prk_len, info, info_len, okm, okm_len);
322 OPENSSL_cleanse(prk, sizeof(prk));
323
324 return ret;
325}
326
327static unsigned char *
328HKDF_Extract(const EVP_MD *evp_md,
329 const unsigned char *salt, size_t salt_len,
330 const unsigned char *key, size_t key_len,
331 unsigned char *prk, size_t *prk_len)
332{
333 unsigned int tmp_len;
334
335 if (!HMAC(evp_md, salt, salt_len, key, key_len, prk, &tmp_len))
336 return NULL;
337
338 *prk_len = tmp_len;
339 return prk;
340}
341
342static unsigned char *
343HKDF_Expand(const EVP_MD *evp_md,
344 const unsigned char *prk, size_t prk_len,
345 const unsigned char *info, size_t info_len,
346 unsigned char *okm, size_t okm_len)
347{
348 HMAC_CTX *hmac;
349 unsigned char *ret = NULL;
350
351 unsigned int i;
352
353 unsigned char prev[EVP_MAX_MD_SIZE];
354
355 size_t done_len = 0, dig_len = EVP_MD_size(evp_md);
356
357 size_t n = okm_len / dig_len;
358 if (okm_len % dig_len)
359 n++;
360
361 if (n > 255 || okm == NULL)
362 return NULL;
363
364 if ((hmac = HMAC_CTX_new()) == NULL)
365 return NULL;
366
367 if (!HMAC_Init_ex(hmac, prk, prk_len, evp_md, NULL))
368 goto err;
369
370 for (i = 1; i <= n; i++) {
371 size_t copy_len;
372 const unsigned char ctr = i;
373
374 if (i > 1) {
375 if (!HMAC_Init_ex(hmac, NULL, 0, NULL, NULL))
376 goto err;
377
378 if (!HMAC_Update(hmac, prev, dig_len))
379 goto err;
380 }
381
382 if (!HMAC_Update(hmac, info, info_len))
383 goto err;
384
385 if (!HMAC_Update(hmac, &ctr, 1))
386 goto err;
387
388 if (!HMAC_Final(hmac, prev, NULL))
389 goto err;
390
391 copy_len = (done_len + dig_len > okm_len) ?
392 okm_len - done_len :
393 dig_len;
394
395 memcpy(okm + done_len, prev, copy_len);
396
397 done_len += copy_len;
398 }
399 ret = okm;
400
401 err:
402 OPENSSL_cleanse(prev, sizeof(prev));
403 HMAC_CTX_free(hmac);
404 return ret;
405}