OpenCoverage

tls1_prf.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/kdf/tls1_prf.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 <stdio.h>-
11#include "internal/cryptlib.h"-
12#include <openssl/kdf.h>-
13#include <openssl/evp.h>-
14#include "internal/evp_int.h"-
15-
16static int tls1_prf_alg(const EVP_MD *md,-
17 const unsigned char *sec, size_t slen,-
18 const unsigned char *seed, size_t seed_len,-
19 unsigned char *out, size_t olen);-
20-
21#define TLS1_PRF_MAXBUF 1024-
22-
23/* TLS KDF pkey context structure */-
24-
25typedef struct {-
26 /* Digest to use for PRF */-
27 const EVP_MD *md;-
28 /* Secret value to use for PRF */-
29 unsigned char *sec;-
30 size_t seclen;-
31 /* Buffer of concatenated seed data */-
32 unsigned char seed[TLS1_PRF_MAXBUF];-
33 size_t seedlen;-
34} TLS1_PRF_PKEY_CTX;-
35-
36static int pkey_tls1_prf_init(EVP_PKEY_CTX *ctx)-
37{-
38 TLS1_PRF_PKEY_CTX *kctx;-
39-
40 if ((kctx = OPENSSL_zalloc(sizeof(*kctx))) == NULL) {
(kctx = CRYPTO...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 9913 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-9913
41 KDFerr(KDF_F_PKEY_TLS1_PRF_INIT, ERR_R_MALLOC_FAILURE);-
42 return 0;
never executed: return 0;
0
43 }-
44 ctx->data = kctx;-
45-
46 return 1;
executed 9913 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
9913
47}-
48-
49static void pkey_tls1_prf_cleanup(EVP_PKEY_CTX *ctx)-
50{-
51 TLS1_PRF_PKEY_CTX *kctx = ctx->data;-
52 OPENSSL_clear_free(kctx->sec, kctx->seclen);-
53 OPENSSL_cleanse(kctx->seed, kctx->seedlen);-
54 OPENSSL_free(kctx);-
55}
executed 9913 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
9913
56-
57static int pkey_tls1_prf_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)-
58{-
59 TLS1_PRF_PKEY_CTX *kctx = ctx->data;-
60 switch (type) {-
61 case EVP_PKEY_CTRL_TLS_MD:
executed 9906 times by 1 test: case (0x1000):
Executed by:
  • libcrypto.so.1.1
9906
62 kctx->md = p2;-
63 return 1;
executed 9906 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
9906
64-
65 case EVP_PKEY_CTRL_TLS_SECRET:
executed 9912 times by 1 test: case (0x1000 + 1):
Executed by:
  • libcrypto.so.1.1
9912
66 if (p1 < 0)
p1 < 0Description
TRUEnever evaluated
FALSEevaluated 9912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-9912
67 return 0;
never executed: return 0;
0
68 if (kctx->sec != NULL)
kctx->sec != ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 9912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-9912
69 OPENSSL_clear_free(kctx->sec, kctx->seclen);
never executed: CRYPTO_clear_free(kctx->sec, kctx->seclen, __FILE__, 69);
0
70 OPENSSL_cleanse(kctx->seed, kctx->seedlen);-
71 kctx->seedlen = 0;-
72 kctx->sec = OPENSSL_memdup(p2, p1);-
73 if (kctx->sec == NULL)
kctx->sec == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 9912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-9912
74 return 0;
never executed: return 0;
0
75 kctx->seclen = p1;-
76 return 1;
executed 9912 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
9912
77-
78 case EVP_PKEY_CTRL_TLS_SEED:
executed 49539 times by 1 test: case (0x1000 + 2):
Executed by:
  • libcrypto.so.1.1
49539
79 if (p1 == 0 || p2 == NULL)
p1 == 0Description
TRUEevaluated 26654 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 22885 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
p2 == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 22885 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-26654
80 return 1;
executed 26654 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
26654
81 if (p1 < 0 || p1 > (int)(TLS1_PRF_MAXBUF - kctx->seedlen))
p1 < 0Description
TRUEnever evaluated
FALSEevaluated 22885 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
p1 > (int)(102...kctx->seedlen)Description
TRUEnever evaluated
FALSEevaluated 22885 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-22885
82 return 0;
never executed: return 0;
0
83 memcpy(kctx->seed + kctx->seedlen, p2, p1);-
84 kctx->seedlen += p1;-
85 return 1;
executed 22885 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
22885
86-
87 default:
never executed: default:
0
88 return -2;
never executed: return -2;
0
89-
90 }-
91}-
92-
93static int pkey_tls1_prf_ctrl_str(EVP_PKEY_CTX *ctx,-
94 const char *type, const char *value)-
95{-
96 if (value == NULL) {
value == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 29 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-29
97 KDFerr(KDF_F_PKEY_TLS1_PRF_CTRL_STR, KDF_R_VALUE_MISSING);-
98 return 0;
never executed: return 0;
0
99 }-
100 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 6 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
executed 6 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
__extension__ ... )))); }) == 0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 23 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 29 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__result == 0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 23 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__s2_len > 1Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__result == 0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-29
101 TLS1_PRF_PKEY_CTX *kctx = ctx->data;-
102-
103 const EVP_MD *md = EVP_get_digestbyname(value);-
104 if (md == NULL) {
md == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-6
105 KDFerr(KDF_F_PKEY_TLS1_PRF_CTRL_STR, KDF_R_INVALID_DIGEST);-
106 return 0;
never executed: return 0;
0
107 }-
108 kctx->md = md;-
109 return 1;
executed 6 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
6
110 }-
111 if (strcmp(type, "secret") == 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 *) ( "secret" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEevaluated 23 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-23
112 return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_TLS_SECRET, value);
never executed: return EVP_PKEY_CTX_str2ctrl(ctx, (0x1000 + 1), value);
0
113 if (strcmp(type, "hexsecret") == 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 *) ( "hexsecret" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 17 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-17
114 return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_TLS_SECRET, value);
executed 6 times by 1 test: return EVP_PKEY_CTX_hex2ctrl(ctx, (0x1000 + 1), value);
Executed by:
  • libcrypto.so.1.1
6
115 if (strcmp(type, "seed") == 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 *) ( "seed" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 12 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-12
116 return EVP_PKEY_CTX_str2ctrl(ctx, EVP_PKEY_CTRL_TLS_SEED, value);
executed 5 times by 1 test: return EVP_PKEY_CTX_str2ctrl(ctx, (0x1000 + 2), value);
Executed by:
  • libcrypto.so.1.1
5
117 if (strcmp(type, "hexseed") == 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 *) ( "hexseed" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) == 0Description
TRUEevaluated 12 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-12
118 return EVP_PKEY_CTX_hex2ctrl(ctx, EVP_PKEY_CTRL_TLS_SEED, value);
executed 12 times by 1 test: return EVP_PKEY_CTX_hex2ctrl(ctx, (0x1000 + 2), value);
Executed by:
  • libcrypto.so.1.1
12
119-
120 KDFerr(KDF_F_PKEY_TLS1_PRF_CTRL_STR, KDF_R_UNKNOWN_PARAMETER_TYPE);-
121 return -2;
never executed: return -2;
0
122}-
123-
124static int pkey_tls1_prf_derive(EVP_PKEY_CTX *ctx, unsigned char *key,-
125 size_t *keylen)-
126{-
127 TLS1_PRF_PKEY_CTX *kctx = ctx->data;-
128 if (kctx->md == NULL) {
kctx->md == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 9912 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-9912
129 KDFerr(KDF_F_PKEY_TLS1_PRF_DERIVE, KDF_R_MISSING_MESSAGE_DIGEST);-
130 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
1
131 }-
132 if (kctx->sec == NULL) {
kctx->sec == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 9911 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-9911
133 KDFerr(KDF_F_PKEY_TLS1_PRF_DERIVE, KDF_R_MISSING_SECRET);-
134 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
1
135 }-
136 if (kctx->seedlen == 0) {
kctx->seedlen == 0Description
TRUEnever evaluated
FALSEevaluated 9911 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-9911
137 KDFerr(KDF_F_PKEY_TLS1_PRF_DERIVE, KDF_R_MISSING_SEED);-
138 return 0;
never executed: return 0;
0
139 }-
140 return tls1_prf_alg(kctx->md, kctx->sec, kctx->seclen,
executed 9911 times by 1 test: return tls1_prf_alg(kctx->md, kctx->sec, kctx->seclen, kctx->seed, kctx->seedlen, key, *keylen);
Executed by:
  • libcrypto.so.1.1
9911
141 kctx->seed, kctx->seedlen,
executed 9911 times by 1 test: return tls1_prf_alg(kctx->md, kctx->sec, kctx->seclen, kctx->seed, kctx->seedlen, key, *keylen);
Executed by:
  • libcrypto.so.1.1
9911
142 key, *keylen);
executed 9911 times by 1 test: return tls1_prf_alg(kctx->md, kctx->sec, kctx->seclen, kctx->seed, kctx->seedlen, key, *keylen);
Executed by:
  • libcrypto.so.1.1
9911
143}-
144-
145const EVP_PKEY_METHOD tls1_prf_pkey_meth = {-
146 EVP_PKEY_TLS1_PRF,-
147 0,-
148 pkey_tls1_prf_init,-
149 0,-
150 pkey_tls1_prf_cleanup,-
151-
152 0, 0,-
153 0, 0,-
154-
155 0,-
156 0,-
157-
158 0,-
159 0,-
160-
161 0, 0,-
162-
163 0, 0, 0, 0,-
164-
165 0, 0,-
166-
167 0, 0,-
168-
169 0,-
170 pkey_tls1_prf_derive,-
171 pkey_tls1_prf_ctrl,-
172 pkey_tls1_prf_ctrl_str-
173};-
174-
175static int tls1_prf_P_hash(const EVP_MD *md,-
176 const unsigned char *sec, size_t sec_len,-
177 const unsigned char *seed, size_t seed_len,-
178 unsigned char *out, size_t olen)-
179{-
180 int chunk;-
181 EVP_MD_CTX *ctx = NULL, *ctx_tmp = NULL, *ctx_init = NULL;-
182 EVP_PKEY *mac_key = NULL;-
183 unsigned char A1[EVP_MAX_MD_SIZE];-
184 size_t A1_len;-
185 int ret = 0;-
186-
187 chunk = EVP_MD_size(md);-
188 if (!ossl_assert(chunk > 0))
!((chunk > 0) != 0)Description
TRUEnever evaluated
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13505
189 goto err;
never executed: goto err;
0
190-
191 ctx = EVP_MD_CTX_new();-
192 ctx_tmp = EVP_MD_CTX_new();-
193 ctx_init = EVP_MD_CTX_new();-
194 if (ctx == NULL || ctx_tmp == NULL || ctx_init == NULL)
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
ctx_tmp == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
ctx_init == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13505
195 goto err;
never executed: goto err;
0
196 EVP_MD_CTX_set_flags(ctx_init, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);-
197 mac_key = EVP_PKEY_new_raw_private_key(EVP_PKEY_HMAC, NULL, sec, sec_len);-
198 if (mac_key == NULL)
mac_key == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13505
199 goto err;
never executed: goto err;
0
200 if (!EVP_DigestSignInit(ctx_init, NULL, md, NULL, mac_key))
!EVP_DigestSig...)0) , mac_key)Description
TRUEnever evaluated
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13505
201 goto err;
never executed: goto err;
0
202 if (!EVP_MD_CTX_copy_ex(ctx, ctx_init))
!EVP_MD_CTX_co...ctx, ctx_init)Description
TRUEnever evaluated
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13505
203 goto err;
never executed: goto err;
0
204 if (seed != NULL && !EVP_DigestSignUpdate(ctx, seed, seed_len))
seed != ((void *)0)Description
TRUEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
!EVP_DigestUpd...seed,seed_len)Description
TRUEnever evaluated
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13505
205 goto err;
never executed: goto err;
0
206 if (!EVP_DigestSignFinal(ctx, A1, &A1_len))
!EVP_DigestSig..., A1, &A1_len)Description
TRUEnever evaluated
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13505
207 goto err;
never executed: goto err;
0
208-
209 for (;;) {-
210 /* Reinit mac contexts */-
211 if (!EVP_MD_CTX_copy_ex(ctx, ctx_init))
!EVP_MD_CTX_co...ctx, ctx_init)Description
TRUEnever evaluated
FALSEevaluated 33408 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-33408
212 goto err;
never executed: goto err;
0
213 if (!EVP_DigestSignUpdate(ctx, A1, A1_len))
!EVP_DigestUpd...ctx,A1,A1_len)Description
TRUEnever evaluated
FALSEevaluated 33408 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-33408
214 goto err;
never executed: goto err;
0
215 if (olen > (size_t)chunk && !EVP_MD_CTX_copy_ex(ctx_tmp, ctx))
olen > (size_t)chunkDescription
TRUEevaluated 19903 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
!EVP_MD_CTX_co...(ctx_tmp, ctx)Description
TRUEnever evaluated
FALSEevaluated 19903 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-19903
216 goto err;
never executed: goto err;
0
217 if (seed && !EVP_DigestSignUpdate(ctx, seed, seed_len))
seedDescription
TRUEevaluated 33408 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
!EVP_DigestUpd...seed,seed_len)Description
TRUEnever evaluated
FALSEevaluated 33408 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-33408
218 goto err;
never executed: goto err;
0
219-
220 if (olen > (size_t)chunk) {
olen > (size_t)chunkDescription
TRUEevaluated 19903 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
13505-19903
221 size_t mac_len;-
222 if (!EVP_DigestSignFinal(ctx, out, &mac_len))
!EVP_DigestSig...out, &mac_len)Description
TRUEnever evaluated
FALSEevaluated 19903 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-19903
223 goto err;
never executed: goto err;
0
224 out += mac_len;-
225 olen -= mac_len;-
226 /* calc the next A1 value */-
227 if (!EVP_DigestSignFinal(ctx_tmp, A1, &A1_len))
!EVP_DigestSig..., A1, &A1_len)Description
TRUEnever evaluated
FALSEevaluated 19903 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-19903
228 goto err;
never executed: goto err;
0
229 } else { /* last one */
executed 19903 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
19903
230-
231 if (!EVP_DigestSignFinal(ctx, A1, &A1_len))
!EVP_DigestSig..., A1, &A1_len)Description
TRUEnever evaluated
FALSEevaluated 13505 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-13505
232 goto err;
never executed: goto err;
0
233 memcpy(out, A1, olen);-
234 break;
executed 13505 times by 1 test: break;
Executed by:
  • libcrypto.so.1.1
13505
235 }-
236 }-
237 ret = 1;-
238 err:
code before this statement executed 13505 times by 1 test: err:
Executed by:
  • libcrypto.so.1.1
13505
239 EVP_PKEY_free(mac_key);-
240 EVP_MD_CTX_free(ctx);-
241 EVP_MD_CTX_free(ctx_tmp);-
242 EVP_MD_CTX_free(ctx_init);-
243 OPENSSL_cleanse(A1, sizeof(A1));-
244 return ret;
executed 13505 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
13505
245}-
246-
247static int tls1_prf_alg(const EVP_MD *md,-
248 const unsigned char *sec, size_t slen,-
249 const unsigned char *seed, size_t seed_len,-
250 unsigned char *out, size_t olen)-
251{-
252-
253 if (EVP_MD_type(md) == NID_md5_sha1) {
EVP_MD_type(md) == 114Description
TRUEevaluated 3594 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 6317 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
3594-6317
254 size_t i;-
255 unsigned char *tmp;-
256 if (!tls1_prf_P_hash(EVP_md5(), sec, slen/2 + (slen & 1),
!tls1_prf_P_ha...en, out, olen)Description
TRUEnever evaluated
FALSEevaluated 3594 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3594
257 seed, seed_len, out, olen))
!tls1_prf_P_ha...en, out, olen)Description
TRUEnever evaluated
FALSEevaluated 3594 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3594
258 return 0;
never executed: return 0;
0
259-
260 if ((tmp = OPENSSL_malloc(olen)) == NULL) {
(tmp = CRYPTO_...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 3594 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3594
261 KDFerr(KDF_F_TLS1_PRF_ALG, ERR_R_MALLOC_FAILURE);-
262 return 0;
never executed: return 0;
0
263 }-
264 if (!tls1_prf_P_hash(EVP_sha1(), sec + slen/2, slen/2 + (slen & 1),
!tls1_prf_P_ha...en, tmp, olen)Description
TRUEnever evaluated
FALSEevaluated 3594 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3594
265 seed, seed_len, tmp, olen)) {
!tls1_prf_P_ha...en, tmp, olen)Description
TRUEnever evaluated
FALSEevaluated 3594 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-3594
266 OPENSSL_clear_free(tmp, olen);-
267 return 0;
never executed: return 0;
0
268 }-
269 for (i = 0; i < olen; i++)
i < olenDescription
TRUEevaluated 186972 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 3594 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
3594-186972
270 out[i] ^= tmp[i];
executed 186972 times by 1 test: out[i] ^= tmp[i];
Executed by:
  • libcrypto.so.1.1
186972
271 OPENSSL_clear_free(tmp, olen);-
272 return 1;
executed 3594 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
3594
273 }-
274 if (!tls1_prf_P_hash(md, sec, slen, seed, seed_len, out, olen))
!tls1_prf_P_ha...en, out, olen)Description
TRUEnever evaluated
FALSEevaluated 6317 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-6317
275 return 0;
never executed: return 0;
0
276-
277 return 1;
executed 6317 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
6317
278}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2