OpenCoverage

hkdf.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/kdf/hkdf.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.-
3 *-
4 * Licensed under the OpenSSL license (the "License"). You may not use-
5 * this file except in compliance with the License. You can obtain a copy-
6 * in the file LICENSE in the source distribution or at-
7 * https://www.openssl.org/source/license.html-
8 */-
9-
10#include <stdlib.h>-
11#include <string.h>-
12#include <openssl/hmac.h>-
13#include <openssl/kdf.h>-
14#include <openssl/evp.h>-
15#include "internal/cryptlib.h"-
16#include "internal/evp_int.h"-
17-
18#define HKDF_MAXBUF 1024-
19-
20static unsigned char *HKDF(const EVP_MD *evp_md,-
21 const unsigned char *salt, size_t salt_len,-
22 const unsigned char *key, size_t key_len,-
23 const unsigned char *info, size_t info_len,-
24 unsigned char *okm, size_t okm_len);-
25-
26static unsigned char *HKDF_Extract(const EVP_MD *evp_md,-
27 const unsigned char *salt, size_t salt_len,-
28 const unsigned char *key, size_t key_len,-
29 unsigned char *prk, size_t *prk_len);-
30-
31static unsigned char *HKDF_Expand(const EVP_MD *evp_md,-
32 const unsigned char *prk, size_t prk_len,-
33 const unsigned char *info, size_t info_len,-
34 unsigned char *okm, size_t okm_len);-
35-
36typedef struct {-
37 int mode;-
38 const EVP_MD *md;-
39 unsigned char *salt;-
40 size_t salt_len;-
41 unsigned char *key;-
42 size_t key_len;-
43 unsigned char info[HKDF_MAXBUF];-
44 size_t info_len;-
45} HKDF_PKEY_CTX;-
46-
47static int pkey_hkdf_init(EVP_PKEY_CTX *ctx)-
48{-
49 HKDF_PKEY_CTX *kctx;-
50-
51 if ((kctx = OPENSSL_zalloc(sizeof(*kctx))) == NULL) {
(kctx = CRYPTO...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 32250 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-32250
52 KDFerr(KDF_F_PKEY_HKDF_INIT, ERR_R_MALLOC_FAILURE);-
53 return 0;
never executed: return 0;
0
54 }-
55-
56 ctx->data = kctx;-
57-
58 return 1;
executed 32250 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
32250
59}-
60-
61static void pkey_hkdf_cleanup(EVP_PKEY_CTX *ctx)-
62{-
63 HKDF_PKEY_CTX *kctx = ctx->data;-
64 OPENSSL_clear_free(kctx->salt, kctx->salt_len);-
65 OPENSSL_clear_free(kctx->key, kctx->key_len);-
66 OPENSSL_cleanse(kctx->info, kctx->info_len);-
67 OPENSSL_free(kctx);-
68}
executed 32250 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
32250
69-
70static int pkey_hkdf_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)-
71{-
72 HKDF_PKEY_CTX *kctx = ctx->data;-
73-
74 switch (type) {-
75 case EVP_PKEY_CTRL_HKDF_MD:
executed 32249 times by 1 test: case (0x1000 + 3):
Executed by:
  • libcrypto.so.1.1
32249
76 if (p2 == NULL)
p2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 32249 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-32249
77 return 0;
never executed: return 0;
0
78-
79 kctx->md = p2;-
80 return 1;
executed 32249 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
32249
81-
82 case EVP_PKEY_CTRL_HKDF_MODE:
executed 32238 times by 1 test: case (0x1000 + 7):
Executed by:
  • libcrypto.so.1.1
32238
83 kctx->mode = p1;-
84 return 1;
executed 32238 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
32238
85-
86 case EVP_PKEY_CTRL_HKDF_SALT:
executed 4481 times by 1 test: case (0x1000 + 4):
Executed by:
  • libcrypto.so.1.1
4481
87 if (p1 == 0 || p2 == NULL)
p1 == 0Description
TRUEevaluated 1571 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2910 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
p2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2910 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2910
88 return 1;
executed 1571 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
1571
89-
90 if (p1 < 0)
p1 < 0Description
TRUEnever evaluated
FALSEevaluated 2910 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2910
91 return 0;
never executed: return 0;
0
92-
93 if (kctx->salt != NULL)
kctx->salt != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2910 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2910
94 OPENSSL_clear_free(kctx->salt, kctx->salt_len);
never executed: CRYPTO_clear_free(kctx->salt, kctx->salt_len, __FILE__, 94);
0
95-
96 kctx->salt = OPENSSL_memdup(p2, p1);-
97 if (kctx->salt == NULL)
kctx->salt == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2910 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2910
98 return 0;
never executed: return 0;
0
99-
100 kctx->salt_len = p1;-
101 return 1;
executed 2910 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
2910
102-
103 case EVP_PKEY_CTRL_HKDF_KEY:
executed 32249 times by 1 test: case (0x1000 + 5):
Executed by:
  • libcrypto.so.1.1
32249
104 if (p1 < 0)
p1 < 0Description
TRUEnever evaluated
FALSEevaluated 32249 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-32249
105 return 0;
never executed: return 0;
0
106-
107 if (kctx->key != NULL)
kctx->key != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 32249 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-32249
108 OPENSSL_clear_free(kctx->key, kctx->key_len);
never executed: CRYPTO_clear_free(kctx->key, kctx->key_len, __FILE__, 108);
0
109-
110 kctx->key = OPENSSL_memdup(p2, p1);-
111 if (kctx->key == NULL)
kctx->key == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 32249 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-32249
112 return 0;
never executed: return 0;
0
113-
114 kctx->key_len = p1;-
115 return 1;
executed 32249 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
32249
116-
117 case EVP_PKEY_CTRL_HKDF_INFO:
executed 27780 times by 1 test: case (0x1000 + 6):
Executed by:
  • libcrypto.so.1.1
27780
118 if (p1 == 0 || p2 == NULL)
p1 == 0Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 27770 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
p2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 27770 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-27770
119 return 1;
executed 10 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
10
120-
121 if (p1 < 0 || p1 > (int)(HKDF_MAXBUF - kctx->info_len))
p1 < 0Description
TRUEnever evaluated
FALSEevaluated 27770 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
p1 > (int)(102...ctx->info_len)Description
TRUEnever evaluated
FALSEevaluated 27770 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-27770
122 return 0;
never executed: return 0;
0
123-
124 memcpy(kctx->info + kctx->info_len, p2, p1);-
125 kctx->info_len += p1;-
126 return 1;
executed 27770 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
27770
127-
128 default:
never executed: default:
0
129 return -2;
never executed: return -2;
0
130-
131 }-
132}-
133-
134static int pkey_hkdf_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,-
135 const char *value)-
136{-
137 if (strcmp(type, "mode") == 0) {
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "mode" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 86 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-86
138 int mode;-
139-
140 if (strcmp(value, "EXTRACT_AND_EXPAND") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "EXTRACT_AND_EXPAND" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 14 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-14
141 mode = EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND;
executed 1 time by 1 test: mode = 0;
Executed by:
  • libcrypto.so.1.1
1
142 else if (strcmp(value, "EXTRACT_ONLY") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "EXTRACT_ONLY" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-7
143 mode = EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY;
executed 7 times by 1 test: mode = 1;
Executed by:
  • libcrypto.so.1.1
7
144 else if (strcmp(value, "EXPAND_ONLY") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( value ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "EXPAND_ONLY" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-7
145 mode = EVP_PKEY_HKDEF_MODE_EXPAND_ONLY;
executed 7 times by 1 test: mode = 2;
Executed by:
  • libcrypto.so.1.1
7
146 else-
147 return 0;
never executed: return 0;
0
148-
149 return EVP_PKEY_CTX_hkdf_mode(ctx, mode);
executed 15 times by 1 test: return EVP_PKEY_CTX_ctrl(ctx, -1, (1<<10), (0x1000 + 7), mode, ((void *)0) );
Executed by:
  • libcrypto.so.1.1
15
150 }-
151-
152 if (strcmp(type, "md") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "md" ))[3] - __s2[3]);
executed 25 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
executed 25 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
__extension__ ... )))); }) == 0Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 61 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEevaluated 86 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__result == 0Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 61 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s2_len > 1Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__result == 0Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEevaluated 25 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-86
153 return EVP_PKEY_CTX_md(ctx, EVP_PKEY_OP_DERIVE,
executed 25 times by 1 test: return EVP_PKEY_CTX_md(ctx, (1<<10), (0x1000 + 3), value);
Executed by:
  • libcrypto.so.1.1
25
154 EVP_PKEY_CTRL_HKDF_MD, value);
executed 25 times by 1 test: return EVP_PKEY_CTX_md(ctx, (1<<10), (0x1000 + 3), value);
Executed by:
  • libcrypto.so.1.1
25
155-
156 if (strcmp(type, "salt") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "salt" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 51 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-51
157 return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_HKDF_SALT, value);
executed 10 times by 1 test: return EVP_PKEY_CTX_str2ctrl(ctx, (0x1000 + 4), value);
Executed by:
  • libcrypto.so.1.1
10
158-
159 if (strcmp(type, "hexsalt") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "hexsalt" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 43 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-43
160 return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_HKDF_SALT, value);
executed 8 times by 1 test: return EVP_PKEY_CTX_hex2ctrl(ctx, (0x1000 + 4), value);
Executed by:
  • libcrypto.so.1.1
8
161-
162 if (strcmp(type, "key") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "key" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEevaluated 43 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEevaluated 43 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEevaluated 43 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-43
163 return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_HKDF_KEY, value);
never executed: return EVP_PKEY_CTX_str2ctrl(ctx, (0x1000 + 5), value);
0
164-
165 if (strcmp(type, "hexkey") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "hexkey" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 25 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 18 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-25
166 return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_HKDF_KEY, value);
executed 25 times by 1 test: return EVP_PKEY_CTX_hex2ctrl(ctx, (0x1000 + 5), value);
Executed by:
  • libcrypto.so.1.1
25
167-
168 if (strcmp(type, "info") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "info" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-10
169 return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_HKDF_INFO, value);
executed 10 times by 1 test: return EVP_PKEY_CTX_str2ctrl(ctx, (0x1000 + 6), value);
Executed by:
  • libcrypto.so.1.1
10
170-
171 if (strcmp(type, "hexinfo") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( type ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "hexinfo" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-8
172 return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_HKDF_INFO, value);
executed 8 times by 1 test: return EVP_PKEY_CTX_hex2ctrl(ctx, (0x1000 + 6), value);
Executed by:
  • libcrypto.so.1.1
8
173-
174 KDFerr(KDF_F_PKEY_HKDF_CTRL_STR, KDF_R_UNKNOWN_PARAMETER_TYPE);-
175 return -2;
never executed: return -2;
0
176}-
177-
178static int pkey_hkdf_derive(EVP_PKEY_CTX *ctx, unsigned char *key,-
179 size_t *keylen)-
180{-
181 HKDF_PKEY_CTX *kctx = ctx->data;-
182-
183 if (kctx->md == NULL) {
kctx->md == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 32249 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-32249
184 KDFerr(KDF_F_PKEY_HKDF_DERIVE, KDF_R_MISSING_MESSAGE_DIGEST);-
185 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
1
186 }-
187 if (kctx->key == NULL) {
kctx->key == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 32248 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-32248
188 KDFerr(KDF_F_PKEY_HKDF_DERIVE, KDF_R_MISSING_KEY);-
189 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
1
190 }-
191-
192 switch (kctx->mode) {-
193 case EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND:
executed 11 times by 1 test: case 0:
Executed by:
  • libcrypto.so.1.1
11
194 return HKDF(kctx->md, kctx->salt, kctx->salt_len, kctx->key,
executed 11 times by 1 test: return HKDF(kctx->md, kctx->salt, kctx->salt_len, kctx->key, kctx->key_len, kctx->info, kctx->info_len, key, *keylen) != ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
11
195 kctx->key_len, kctx->info, kctx->info_len, key,
executed 11 times by 1 test: return HKDF(kctx->md, kctx->salt, kctx->salt_len, kctx->key, kctx->key_len, kctx->info, kctx->info_len, key, *keylen) != ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
11
196 *keylen) != NULL;
executed 11 times by 1 test: return HKDF(kctx->md, kctx->salt, kctx->salt_len, kctx->key, kctx->key_len, kctx->info, kctx->info_len, key, *keylen) != ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
11
197-
198 case EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY:
executed 4469 times by 1 test: case 1:
Executed by:
  • libcrypto.so.1.1
4469
199 if (key == NULL) {
key == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4469 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-4469
200 *keylen = EVP_MD_size(kctx->md);-
201 return 1;
never executed: return 1;
0
202 }-
203 return HKDF_Extract(kctx->md, kctx->salt, kctx->salt_len, kctx->key,
executed 4469 times by 1 test: return HKDF_Extract(kctx->md, kctx->salt, kctx->salt_len, kctx->key, kctx->key_len, key, keylen) != ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
4469
204 kctx->key_len, key, keylen) != NULL;
executed 4469 times by 1 test: return HKDF_Extract(kctx->md, kctx->salt, kctx->salt_len, kctx->key, kctx->key_len, key, keylen) != ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
4469
205-
206 case EVP_PKEY_HKDEF_MODE_EXPAND_ONLY:
executed 27768 times by 1 test: case 2:
Executed by:
  • libcrypto.so.1.1
27768
207 return HKDF_Expand(kctx->md, kctx->key, kctx->key_len, kctx->info,
executed 27768 times by 1 test: return HKDF_Expand(kctx->md, kctx->key, kctx->key_len, kctx->info, kctx->info_len, key, *keylen) != ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
27768
208 kctx->info_len, key, *keylen) != NULL;
executed 27768 times by 1 test: return HKDF_Expand(kctx->md, kctx->key, kctx->key_len, kctx->info, kctx->info_len, key, *keylen) != ((void *)0) ;
Executed by:
  • libcrypto.so.1.1
27768
209-
210 default:
never executed: default:
0
211 return 0;
never executed: return 0;
0
212 }-
213}-
214-
215const EVP_PKEY_METHOD hkdf_pkey_meth = {-
216 EVP_PKEY_HKDF,-
217 0,-
218 pkey_hkdf_init,-
219 0,-
220 pkey_hkdf_cleanup,-
221-
222 0, 0,-
223 0, 0,-
224-
225 0,-
226 0,-
227-
228 0,-
229 0,-
230-
231 0, 0,-
232-
233 0, 0, 0, 0,-
234-
235 0, 0,-
236-
237 0, 0,-
238-
239 0,-
240 pkey_hkdf_derive,-
241 pkey_hkdf_ctrl,-
242 pkey_hkdf_ctrl_str-
243};-
244-
245static unsigned char *HKDF(const EVP_MD *evp_md,-
246 const unsigned char *salt, size_t salt_len,-
247 const unsigned char *key, size_t key_len,-
248 const unsigned char *info, size_t info_len,-
249 unsigned char *okm, size_t okm_len)-
250{-
251 unsigned char prk[EVP_MAX_MD_SIZE];-
252 unsigned char *ret;-
253 size_t prk_len;-
254-
255 if (!HKDF_Extract(evp_md, salt, salt_len, key, key_len, prk, &prk_len))
!HKDF_Extract(...prk, &prk_len)Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-11
256 return NULL;
never executed: return ((void *)0) ;
0
257-
258 ret = HKDF_Expand(evp_md, prk, prk_len, info, info_len, okm, okm_len);-
259 OPENSSL_cleanse(prk, sizeof(prk));-
260-
261 return ret;
executed 11 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
11
262}-
263-
264static unsigned char *HKDF_Extract(const EVP_MD *evp_md,-
265 const unsigned char *salt, size_t salt_len,-
266 const unsigned char *key, size_t key_len,-
267 unsigned char *prk, size_t *prk_len)-
268{-
269 unsigned int tmp_len;-
270-
271 if (!HMAC(evp_md, salt, salt_len, key, key_len, prk, &tmp_len))
!HMAC(evp_md, ...prk, &tmp_len)Description
TRUEnever evaluated
FALSEevaluated 4480 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-4480
272 return NULL;
never executed: return ((void *)0) ;
0
273-
274 *prk_len = tmp_len;-
275 return prk;
executed 4480 times by 1 test: return prk;
Executed by:
  • libcrypto.so.1.1
4480
276}-
277-
278static unsigned char *HKDF_Expand(const EVP_MD *evp_md,-
279 const unsigned char *prk, size_t prk_len,-
280 const unsigned char *info, size_t info_len,-
281 unsigned char *okm, size_t okm_len)-
282{-
283 HMAC_CTX *hmac;-
284 unsigned char *ret = NULL;-
285-
286 unsigned int i;-
287-
288 unsigned char prev[EVP_MAX_MD_SIZE];-
289-
290 size_t done_len = 0, dig_len = EVP_MD_size(evp_md);-
291-
292 size_t n = okm_len / dig_len;-
293 if (okm_len % dig_len)
okm_len % dig_lenDescription
TRUEevaluated 10801 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 16978 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
10801-16978
294 n++;
executed 10801 times by 1 test: n++;
Executed by:
  • libcrypto.so.1.1
10801
295-
296 if (n > 255 || okm == NULL)
n > 255Description
TRUEnever evaluated
FALSEevaluated 27779 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
okm == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 27779 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-27779
297 return NULL;
never executed: return ((void *)0) ;
0
298-
299 if ((hmac = HMAC_CTX_new()) == NULL)
(hmac = HMAC_C...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 27779 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-27779
300 return NULL;
never executed: return ((void *)0) ;
0
301-
302 if (!HMAC_Init_ex(hmac, prk, prk_len, evp_md, NULL))
!HMAC_Init_ex(... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 27779 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-27779
303 goto err;
never executed: goto err;
0
304-
305 for (i = 1; i <= n; i++) {
i <= nDescription
TRUEevaluated 27831 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 27779 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
27779-27831
306 size_t copy_len;-
307 const unsigned char ctr = i;-
308-
309 if (i > 1) {
i > 1Description
TRUEevaluated 52 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 27779 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
52-27779
310 if (!HMAC_Init_ex(hmac, NULL, 0, NULL, NULL))
!HMAC_Init_ex(... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 52 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-52
311 goto err;
never executed: goto err;
0
312-
313 if (!HMAC_Update(hmac, prev, dig_len))
!HMAC_Update(h...prev, dig_len)Description
TRUEnever evaluated
FALSEevaluated 52 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-52
314 goto err;
never executed: goto err;
0
315 }
executed 52 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
52
316-
317 if (!HMAC_Update(hmac, info, info_len))
!HMAC_Update(h...nfo, info_len)Description
TRUEnever evaluated
FALSEevaluated 27831 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-27831
318 goto err;
never executed: goto err;
0
319-
320 if (!HMAC_Update(hmac, &ctr, 1))
!HMAC_Update(hmac, &ctr, 1)Description
TRUEnever evaluated
FALSEevaluated 27831 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-27831
321 goto err;
never executed: goto err;
0
322-
323 if (!HMAC_Final(hmac, prev, NULL))
!HMAC_Final(hm... ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 27831 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-27831
324 goto err;
never executed: goto err;
0
325-
326 copy_len = (done_len + dig_len > okm_len) ?
(done_len + dig_len > okm_len)Description
TRUEevaluated 10801 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 17030 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
10801-17030
327 okm_len - done_len :-
328 dig_len;-
329-
330 memcpy(okm + done_len, prev, copy_len);-
331-
332 done_len += copy_len;-
333 }
executed 27831 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
27831
334 ret = okm;-
335-
336 err:
code before this statement executed 27779 times by 1 test: err:
Executed by:
  • libcrypto.so.1.1
27779
337 OPENSSL_cleanse(prev, sizeof(prev));-
338 HMAC_CTX_free(hmac);-
339 return ret;
executed 27779 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
27779
340}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2