OpenCoverage

hkdf.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/hkdf/hkdf.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: hkdf.c,v 1.2 2018/04/03 13:33:53 tb Exp $ */-
2/* Copyright (c) 2014, Google Inc.-
3 *-
4 * Permission to use, copy, modify, and/or distribute this software for any-
5 * purpose with or without fee is hereby granted, provided that the above-
6 * copyright notice and this permission notice appear in all copies.-
7 *-
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES-
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF-
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY-
11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES-
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION-
13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN-
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.-
15 */-
16-
17#include <openssl/hkdf.h>-
18-
19#include <assert.h>-
20#include <string.h>-
21-
22#include <openssl/err.h>-
23#include <openssl/hmac.h>-
24-
25/* https://tools.ietf.org/html/rfc5869#section-2 */-
26int-
27HKDF(uint8_t *out_key, size_t out_len, const EVP_MD *digest,-
28 const uint8_t *secret, size_t secret_len, const uint8_t *salt,-
29 size_t salt_len, const uint8_t *info, size_t info_len)-
30{-
31 uint8_t prk[EVP_MAX_MD_SIZE];-
32 size_t prk_len;-
33-
34 if (!HKDF_extract(prk, &prk_len, digest, secret, secret_len, salt,
!HKDF_extract(...alt, salt_len)Description
TRUEnever evaluated
FALSEevaluated 7 times by 1 test
Evaluated by:
  • hkdftest
0-7
35 salt_len))
!HKDF_extract(...alt, salt_len)Description
TRUEnever evaluated
FALSEevaluated 7 times by 1 test
Evaluated by:
  • hkdftest
0-7
36 return 0;
never executed: return 0;
0
37 if (!HKDF_expand(out_key, out_len, digest, prk, prk_len, info,
!HKDF_expand(o...nfo, info_len)Description
TRUEnever evaluated
FALSEevaluated 7 times by 1 test
Evaluated by:
  • hkdftest
0-7
38 info_len))
!HKDF_expand(o...nfo, info_len)Description
TRUEnever evaluated
FALSEevaluated 7 times by 1 test
Evaluated by:
  • hkdftest
0-7
39 return 0;
never executed: return 0;
0
40-
41 return 1;
executed 7 times by 1 test: return 1;
Executed by:
  • hkdftest
7
42}-
43-
44/* https://tools.ietf.org/html/rfc5869#section-2.2 */-
45int-
46HKDF_extract(uint8_t *out_key, size_t *out_len,-
47 const EVP_MD *digest, const uint8_t *secret, size_t secret_len,-
48 const uint8_t *salt, size_t salt_len)-
49{-
50 unsigned int len;-
51-
52 /*-
53 * If salt is not given, HashLength zeros are used. However, HMAC does that-
54 * internally already so we can ignore it.-
55 */-
56 if (HMAC(digest, salt, salt_len, secret, secret_len, out_key, &len) ==
HMAC(digest, s...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 14 times by 1 test
Evaluated by:
  • hkdftest
0-14
57 NULL) {
HMAC(digest, s...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 14 times by 1 test
Evaluated by:
  • hkdftest
0-14
58 CRYPTOerror(ERR_R_CRYPTO_LIB);-
59 return 0;
never executed: return 0;
0
60 }-
61 *out_len = len;-
62 return 1;
executed 14 times by 1 test: return 1;
Executed by:
  • hkdftest
14
63}-
64-
65/* https://tools.ietf.org/html/rfc5869#section-2.3 */-
66int-
67HKDF_expand(uint8_t *out_key, size_t out_len,-
68 const EVP_MD *digest, const uint8_t *prk, size_t prk_len,-
69 const uint8_t *info, size_t info_len)-
70{-
71 const size_t digest_len = EVP_MD_size(digest);-
72 uint8_t previous[EVP_MAX_MD_SIZE];-
73 size_t n, done = 0;-
74 unsigned int i;-
75 int ret = 0;-
76 HMAC_CTX hmac;-
77-
78 /* Expand key material to desired length. */-
79 n = (out_len + digest_len - 1) / digest_len;-
80 if (out_len + digest_len < out_len || n > 255) {
out_len + digest_len < out_lenDescription
TRUEnever evaluated
FALSEevaluated 14 times by 1 test
Evaluated by:
  • hkdftest
n > 255Description
TRUEnever evaluated
FALSEevaluated 14 times by 1 test
Evaluated by:
  • hkdftest
0-14
81 CRYPTOerror(EVP_R_TOO_LARGE);-
82 return 0;
never executed: return 0;
0
83 }-
84-
85 HMAC_CTX_init(&hmac);-
86 if (!HMAC_Init_ex(&hmac, prk, prk_len, digest, NULL))
!HMAC_Init_ex(... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 14 times by 1 test
Evaluated by:
  • hkdftest
0-14
87 goto out;
never executed: goto out;
0
88-
89 for (i = 0; i < n; i++) {
i < nDescription
TRUEevaluated 42 times by 1 test
Evaluated by:
  • hkdftest
FALSEevaluated 14 times by 1 test
Evaluated by:
  • hkdftest
14-42
90 uint8_t ctr = i + 1;-
91 size_t todo;-
92-
93 if (i != 0 && (!HMAC_Init_ex(&hmac, NULL, 0, NULL, NULL) ||
i != 0Description
TRUEevaluated 28 times by 1 test
Evaluated by:
  • hkdftest
FALSEevaluated 14 times by 1 test
Evaluated by:
  • hkdftest
!HMAC_Init_ex(... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 28 times by 1 test
Evaluated by:
  • hkdftest
0-28
94 !HMAC_Update(&hmac, previous, digest_len)))
!HMAC_Update(&...s, digest_len)Description
TRUEnever evaluated
FALSEevaluated 28 times by 1 test
Evaluated by:
  • hkdftest
0-28
95 goto out;
never executed: goto out;
0
96-
97 if (!HMAC_Update(&hmac, info, info_len) ||
!HMAC_Update(&...nfo, info_len)Description
TRUEnever evaluated
FALSEevaluated 42 times by 1 test
Evaluated by:
  • hkdftest
0-42
98 !HMAC_Update(&hmac, &ctr, 1) ||
!HMAC_Update(&hmac, &ctr, 1)Description
TRUEnever evaluated
FALSEevaluated 42 times by 1 test
Evaluated by:
  • hkdftest
0-42
99 !HMAC_Final(&hmac, previous, NULL))
!HMAC_Final(&h... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 42 times by 1 test
Evaluated by:
  • hkdftest
0-42
100 goto out;
never executed: goto out;
0
101-
102 todo = digest_len;-
103 if (done + todo > out_len)
done + todo > out_lenDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • hkdftest
FALSEevaluated 28 times by 1 test
Evaluated by:
  • hkdftest
14-28
104 todo = out_len - done;
executed 14 times by 1 test: todo = out_len - done;
Executed by:
  • hkdftest
14
105-
106 memcpy(out_key + done, previous, todo);-
107 done += todo;-
108 }
executed 42 times by 1 test: end of block
Executed by:
  • hkdftest
42
109-
110 ret = 1;-
111-
112 out:
code before this statement executed 14 times by 1 test: out:
Executed by:
  • hkdftest
14
113 HMAC_CTX_cleanup(&hmac);-
114 if (ret != 1)
ret != 1Description
TRUEnever evaluated
FALSEevaluated 14 times by 1 test
Evaluated by:
  • hkdftest
0-14
115 CRYPTOerror(ERR_R_CRYPTO_LIB);
never executed: ERR_put_error(15,(0xfff),(15),__FILE__,115);
0
116 return ret;
executed 14 times by 1 test: return ret;
Executed by:
  • hkdftest
14
117}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2