Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/evp/digest.c |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | /* | - | ||||||||||||||||||
2 | * Copyright 1995-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/objects.h> | - | ||||||||||||||||||
13 | #include <openssl/evp.h> | - | ||||||||||||||||||
14 | #include <openssl/engine.h> | - | ||||||||||||||||||
15 | #include "internal/evp_int.h" | - | ||||||||||||||||||
16 | #include "evp_locl.h" | - | ||||||||||||||||||
17 | - | |||||||||||||||||||
18 | /* This call frees resources associated with the context */ | - | ||||||||||||||||||
19 | int EVP_MD_CTX_reset(EVP_MD_CTX *ctx) | - | ||||||||||||||||||
20 | { | - | ||||||||||||||||||
21 | if (ctx == NULL)
| 783053-2564792 | ||||||||||||||||||
22 | return 1; executed 783053 times by 1 test: return 1; Executed by:
| 783053 | ||||||||||||||||||
23 | - | |||||||||||||||||||
24 | /* | - | ||||||||||||||||||
25 | * Don't assume ctx->md_data was cleaned in EVP_Digest_Final, because | - | ||||||||||||||||||
26 | * sometimes only copies of the context are ever finalised. | - | ||||||||||||||||||
27 | */ | - | ||||||||||||||||||
28 | if (ctx->digest && ctx->digest->cleanup
| 0-1346167 | ||||||||||||||||||
29 | && !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_CLEANED))
| 0 | ||||||||||||||||||
30 | ctx->digest->cleanup(ctx); never executed: ctx->digest->cleanup(ctx); | 0 | ||||||||||||||||||
31 | if (ctx->digest && ctx->digest->ctx_size && ctx->md_data
| 0-1346167 | ||||||||||||||||||
32 | && !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) {
| 306587-733840 | ||||||||||||||||||
33 | OPENSSL_clear_free(ctx->md_data, ctx->digest->ctx_size); | - | ||||||||||||||||||
34 | } executed 733840 times by 3 tests: end of block Executed by:
| 733840 | ||||||||||||||||||
35 | /* | - | ||||||||||||||||||
36 | * pctx should be freed by the user of EVP_MD_CTX | - | ||||||||||||||||||
37 | * if EVP_MD_CTX_FLAG_KEEP_PKEY_CTX is set | - | ||||||||||||||||||
38 | */ | - | ||||||||||||||||||
39 | if (!EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_KEEP_PKEY_CTX))
| 3-2564789 | ||||||||||||||||||
40 | EVP_PKEY_CTX_free(ctx->pctx); executed 2564789 times by 3 tests: EVP_PKEY_CTX_free(ctx->pctx); Executed by:
| 2564789 | ||||||||||||||||||
41 | #ifndef OPENSSL_NO_ENGINE | - | ||||||||||||||||||
42 | ENGINE_finish(ctx->engine); | - | ||||||||||||||||||
43 | #endif | - | ||||||||||||||||||
44 | OPENSSL_cleanse(ctx, sizeof(*ctx)); | - | ||||||||||||||||||
45 | - | |||||||||||||||||||
46 | return 1; executed 2564792 times by 3 tests: return 1; Executed by:
| 2564792 | ||||||||||||||||||
47 | } | - | ||||||||||||||||||
48 | - | |||||||||||||||||||
49 | EVP_MD_CTX *EVP_MD_CTX_new(void) | - | ||||||||||||||||||
50 | { | - | ||||||||||||||||||
51 | return OPENSSL_zalloc(sizeof(EVP_MD_CTX)); executed 882945 times by 3 tests: return CRYPTO_zalloc(sizeof(EVP_MD_CTX), __FILE__, 51); Executed by:
| 882945 | ||||||||||||||||||
52 | } | - | ||||||||||||||||||
53 | - | |||||||||||||||||||
54 | void EVP_MD_CTX_free(EVP_MD_CTX *ctx) | - | ||||||||||||||||||
55 | { | - | ||||||||||||||||||
56 | EVP_MD_CTX_reset(ctx); | - | ||||||||||||||||||
57 | OPENSSL_free(ctx); | - | ||||||||||||||||||
58 | } executed 1018217 times by 3 tests: end of block Executed by:
| 1018217 | ||||||||||||||||||
59 | - | |||||||||||||||||||
60 | int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type) | - | ||||||||||||||||||
61 | { | - | ||||||||||||||||||
62 | EVP_MD_CTX_reset(ctx); | - | ||||||||||||||||||
63 | return EVP_DigestInit_ex(ctx, type, NULL); executed 18 times by 2 tests: return EVP_DigestInit_ex(ctx, type, ((void *)0) ); Executed by:
| 18 | ||||||||||||||||||
64 | } | - | ||||||||||||||||||
65 | - | |||||||||||||||||||
66 | int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl) | - | ||||||||||||||||||
67 | { | - | ||||||||||||||||||
68 | EVP_MD_CTX_clear_flags(ctx, EVP_MD_CTX_FLAG_CLEANED); | - | ||||||||||||||||||
69 | #ifndef OPENSSL_NO_ENGINE | - | ||||||||||||||||||
70 | /* | - | ||||||||||||||||||
71 | * Whether it's nice or not, "Inits" can be used on "Final"'d contexts so | - | ||||||||||||||||||
72 | * this context may already have an ENGINE! Try to avoid releasing the | - | ||||||||||||||||||
73 | * previous handle, re-querying for an ENGINE, and having a | - | ||||||||||||||||||
74 | * reinitialisation, when it may all be unnecessary. | - | ||||||||||||||||||
75 | */ | - | ||||||||||||||||||
76 | if (ctx->engine && ctx->digest &&
| 0-689700 | ||||||||||||||||||
77 | (type == NULL || (type->type == ctx->digest->type)))
| 0-730 | ||||||||||||||||||
78 | goto skip_to_init; executed 730 times by 1 test: goto skip_to_init; Executed by:
| 730 | ||||||||||||||||||
79 | if (type) {
| 0-689700 | ||||||||||||||||||
80 | /* | - | ||||||||||||||||||
81 | * Ensure an ENGINE left lying around from last time is cleared (the | - | ||||||||||||||||||
82 | * previous check attempted to avoid this if the same ENGINE and | - | ||||||||||||||||||
83 | * EVP_MD could be used). | - | ||||||||||||||||||
84 | */ | - | ||||||||||||||||||
85 | ENGINE_finish(ctx->engine); | - | ||||||||||||||||||
86 | if (impl != NULL) {
| 0-689700 | ||||||||||||||||||
87 | if (!ENGINE_init(impl)) {
| 0 | ||||||||||||||||||
88 | EVPerr(EVP_F_EVP_DIGESTINIT_EX, EVP_R_INITIALIZATION_ERROR); | - | ||||||||||||||||||
89 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
90 | } | - | ||||||||||||||||||
91 | } else { never executed: end of block | 0 | ||||||||||||||||||
92 | /* Ask if an ENGINE is reserved for this job */ | - | ||||||||||||||||||
93 | impl = ENGINE_get_digest_engine(type->type); | - | ||||||||||||||||||
94 | } executed 689700 times by 3 tests: end of block Executed by:
| 689700 | ||||||||||||||||||
95 | if (impl != NULL) {
| 10747-678953 | ||||||||||||||||||
96 | /* There's an ENGINE for this job ... (apparently) */ | - | ||||||||||||||||||
97 | const EVP_MD *d = ENGINE_get_digest(impl, type->type); | - | ||||||||||||||||||
98 | - | |||||||||||||||||||
99 | if (d == NULL) {
| 0-10747 | ||||||||||||||||||
100 | EVPerr(EVP_F_EVP_DIGESTINIT_EX, EVP_R_INITIALIZATION_ERROR); | - | ||||||||||||||||||
101 | ENGINE_finish(impl); | - | ||||||||||||||||||
102 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
103 | } | - | ||||||||||||||||||
104 | /* We'll use the ENGINE's private digest definition */ | - | ||||||||||||||||||
105 | type = d; | - | ||||||||||||||||||
106 | /* | - | ||||||||||||||||||
107 | * Store the ENGINE functional reference so we know 'type' came | - | ||||||||||||||||||
108 | * from an ENGINE and we need to release it when done. | - | ||||||||||||||||||
109 | */ | - | ||||||||||||||||||
110 | ctx->engine = impl; | - | ||||||||||||||||||
111 | } else executed 10747 times by 1 test: end of block Executed by:
| 10747 | ||||||||||||||||||
112 | ctx->engine = NULL; executed 678953 times by 3 tests: ctx->engine = ((void *)0) ; Executed by:
| 678953 | ||||||||||||||||||
113 | } else { | - | ||||||||||||||||||
114 | if (!ctx->digest) {
| 0 | ||||||||||||||||||
115 | EVPerr(EVP_F_EVP_DIGESTINIT_EX, EVP_R_NO_DIGEST_SET); | - | ||||||||||||||||||
116 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
117 | } | - | ||||||||||||||||||
118 | type = ctx->digest; | - | ||||||||||||||||||
119 | } never executed: end of block | 0 | ||||||||||||||||||
120 | #endif | - | ||||||||||||||||||
121 | if (ctx->digest != type) {
| 196733-492967 | ||||||||||||||||||
122 | if (ctx->digest && ctx->digest->ctx_size) {
| 0-196731 | ||||||||||||||||||
123 | OPENSSL_clear_free(ctx->md_data, ctx->digest->ctx_size); | - | ||||||||||||||||||
124 | ctx->md_data = NULL; | - | ||||||||||||||||||
125 | } executed 2 times by 1 test: end of block Executed by:
| 2 | ||||||||||||||||||
126 | ctx->digest = type; | - | ||||||||||||||||||
127 | if (!(ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) && type->ctx_size) {
| 0-177835 | ||||||||||||||||||
128 | ctx->update = type->update; | - | ||||||||||||||||||
129 | ctx->md_data = OPENSSL_zalloc(type->ctx_size); | - | ||||||||||||||||||
130 | if (ctx->md_data == NULL) {
| 0-177835 | ||||||||||||||||||
131 | EVPerr(EVP_F_EVP_DIGESTINIT_EX, ERR_R_MALLOC_FAILURE); | - | ||||||||||||||||||
132 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
133 | } | - | ||||||||||||||||||
134 | } executed 177835 times by 3 tests: end of block Executed by:
| 177835 | ||||||||||||||||||
135 | } executed 196733 times by 3 tests: end of block Executed by:
| 196733 | ||||||||||||||||||
136 | #ifndef OPENSSL_NO_ENGINE | - | ||||||||||||||||||
137 | skip_to_init: code before this statement executed 689700 times by 3 tests: skip_to_init: Executed by:
| 689700 | ||||||||||||||||||
138 | #endif | - | ||||||||||||||||||
139 | if (ctx->pctx) {
| 24374-666056 | ||||||||||||||||||
140 | int r; | - | ||||||||||||||||||
141 | r = EVP_PKEY_CTX_ctrl(ctx->pctx, -1, EVP_PKEY_OP_TYPE_SIG, | - | ||||||||||||||||||
142 | EVP_PKEY_CTRL_DIGESTINIT, 0, ctx); | - | ||||||||||||||||||
143 | if (r <= 0 && (r != -2))
| 0-24371 | ||||||||||||||||||
144 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
145 | } executed 24374 times by 1 test: end of block Executed by:
| 24374 | ||||||||||||||||||
146 | if (ctx->flags & EVP_MD_CTX_FLAG_NO_INIT)
| 19206-671224 | ||||||||||||||||||
147 | return 1; executed 19206 times by 1 test: return 1; Executed by:
| 19206 | ||||||||||||||||||
148 | return ctx->digest->init(ctx); executed 671224 times by 3 tests: return ctx->digest->init(ctx); Executed by:
| 671224 | ||||||||||||||||||
149 | } | - | ||||||||||||||||||
150 | - | |||||||||||||||||||
151 | int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *data, size_t count) | - | ||||||||||||||||||
152 | { | - | ||||||||||||||||||
153 | return ctx->update(ctx, data, count); executed 2536966 times by 3 tests: return ctx->update(ctx, data, count); Executed by:
| 2536966 | ||||||||||||||||||
154 | } | - | ||||||||||||||||||
155 | - | |||||||||||||||||||
156 | /* The caller can assume that this removes any secret data from the context */ | - | ||||||||||||||||||
157 | int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size) | - | ||||||||||||||||||
158 | { | - | ||||||||||||||||||
159 | int ret; | - | ||||||||||||||||||
160 | ret = EVP_DigestFinal_ex(ctx, md, size); | - | ||||||||||||||||||
161 | EVP_MD_CTX_reset(ctx); | - | ||||||||||||||||||
162 | return ret; executed 374 times by 2 tests: return ret; Executed by:
| 374 | ||||||||||||||||||
163 | } | - | ||||||||||||||||||
164 | - | |||||||||||||||||||
165 | /* The caller can assume that this removes any secret data from the context */ | - | ||||||||||||||||||
166 | int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *size) | - | ||||||||||||||||||
167 | { | - | ||||||||||||||||||
168 | int ret; | - | ||||||||||||||||||
169 | - | |||||||||||||||||||
170 | OPENSSL_assert(ctx->digest->md_size <= EVP_MAX_MD_SIZE); | - | ||||||||||||||||||
171 | ret = ctx->digest->final(ctx, md); | - | ||||||||||||||||||
172 | if (size != NULL)
| 259342-642946 | ||||||||||||||||||
173 | *size = ctx->digest->md_size; executed 259342 times by 1 test: *size = ctx->digest->md_size; Executed by:
| 259342 | ||||||||||||||||||
174 | if (ctx->digest->cleanup) {
| 0-902288 | ||||||||||||||||||
175 | ctx->digest->cleanup(ctx); | - | ||||||||||||||||||
176 | EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_CLEANED); | - | ||||||||||||||||||
177 | } never executed: end of block | 0 | ||||||||||||||||||
178 | OPENSSL_cleanse(ctx->md_data, ctx->digest->ctx_size); | - | ||||||||||||||||||
179 | return ret; executed 902288 times by 2 tests: return ret; Executed by:
| 902288 | ||||||||||||||||||
180 | } | - | ||||||||||||||||||
181 | - | |||||||||||||||||||
182 | int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, size_t size) | - | ||||||||||||||||||
183 | { | - | ||||||||||||||||||
184 | int ret = 0; | - | ||||||||||||||||||
185 | - | |||||||||||||||||||
186 | if (ctx->digest->flags & EVP_MD_FLAG_XOF
| 0-136 | ||||||||||||||||||
187 | && size <= INT_MAX
| 0-136 | ||||||||||||||||||
188 | && ctx->digest->md_ctrl(ctx, EVP_MD_CTRL_XOF_LEN, (int)size, NULL)) {
| 0-136 | ||||||||||||||||||
189 | ret = ctx->digest->final(ctx, md); | - | ||||||||||||||||||
190 | - | |||||||||||||||||||
191 | if (ctx->digest->cleanup != NULL) {
| 0-136 | ||||||||||||||||||
192 | ctx->digest->cleanup(ctx); | - | ||||||||||||||||||
193 | EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_CLEANED); | - | ||||||||||||||||||
194 | } never executed: end of block | 0 | ||||||||||||||||||
195 | OPENSSL_cleanse(ctx->md_data, ctx->digest->ctx_size); | - | ||||||||||||||||||
196 | } else { executed 136 times by 2 tests: end of block Executed by:
| 136 | ||||||||||||||||||
197 | EVPerr(EVP_F_EVP_DIGESTFINALXOF, EVP_R_NOT_XOF_OR_INVALID_LENGTH); | - | ||||||||||||||||||
198 | } never executed: end of block | 0 | ||||||||||||||||||
199 | - | |||||||||||||||||||
200 | return ret; executed 136 times by 2 tests: return ret; Executed by:
| 136 | ||||||||||||||||||
201 | } | - | ||||||||||||||||||
202 | - | |||||||||||||||||||
203 | int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in) | - | ||||||||||||||||||
204 | { | - | ||||||||||||||||||
205 | EVP_MD_CTX_reset(out); | - | ||||||||||||||||||
206 | return EVP_MD_CTX_copy_ex(out, in); executed 11621 times by 1 test: return EVP_MD_CTX_copy_ex(out, in); Executed by:
| 11621 | ||||||||||||||||||
207 | } | - | ||||||||||||||||||
208 | - | |||||||||||||||||||
209 | int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in) | - | ||||||||||||||||||
210 | { | - | ||||||||||||||||||
211 | unsigned char *tmp_buf; | - | ||||||||||||||||||
212 | if ((in == NULL) || (in->digest == NULL)) {
| 0-1021894 | ||||||||||||||||||
213 | EVPerr(EVP_F_EVP_MD_CTX_COPY_EX, EVP_R_INPUT_NOT_INITIALIZED); | - | ||||||||||||||||||
214 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
215 | } | - | ||||||||||||||||||
216 | #ifndef OPENSSL_NO_ENGINE | - | ||||||||||||||||||
217 | /* Make sure it's safe to copy a digest context using an ENGINE */ | - | ||||||||||||||||||
218 | if (in->engine && !ENGINE_init(in->engine)) {
| 0-982683 | ||||||||||||||||||
219 | EVPerr(EVP_F_EVP_MD_CTX_COPY_EX, ERR_R_ENGINE_LIB); | - | ||||||||||||||||||
220 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
221 | } | - | ||||||||||||||||||
222 | #endif | - | ||||||||||||||||||
223 | - | |||||||||||||||||||
224 | if (out->digest == in->digest) {
| 353623-668271 | ||||||||||||||||||
225 | tmp_buf = out->md_data; | - | ||||||||||||||||||
226 | EVP_MD_CTX_set_flags(out, EVP_MD_CTX_FLAG_REUSE); | - | ||||||||||||||||||
227 | } else executed 353623 times by 1 test: end of block Executed by:
| 353623 | ||||||||||||||||||
228 | tmp_buf = NULL; executed 668271 times by 1 test: tmp_buf = ((void *)0) ; Executed by:
| 668271 | ||||||||||||||||||
229 | EVP_MD_CTX_reset(out); | - | ||||||||||||||||||
230 | memcpy(out, in, sizeof(*out)); | - | ||||||||||||||||||
231 | - | |||||||||||||||||||
232 | /* copied EVP_MD_CTX should free the copied EVP_PKEY_CTX */ | - | ||||||||||||||||||
233 | EVP_MD_CTX_clear_flags(out, EVP_MD_CTX_FLAG_KEEP_PKEY_CTX); | - | ||||||||||||||||||
234 | - | |||||||||||||||||||
235 | /* Null these variables, since they are getting fixed up | - | ||||||||||||||||||
236 | * properly below. Anything else may cause a memleak and/or | - | ||||||||||||||||||
237 | * double free if any of the memory allocations below fail | - | ||||||||||||||||||
238 | */ | - | ||||||||||||||||||
239 | out->md_data = NULL; | - | ||||||||||||||||||
240 | out->pctx = NULL; | - | ||||||||||||||||||
241 | - | |||||||||||||||||||
242 | if (in->md_data && out->digest->ctx_size) {
| 0-862594 | ||||||||||||||||||
243 | if (tmp_buf)
| 306587-556007 | ||||||||||||||||||
244 | out->md_data = tmp_buf; executed 306587 times by 1 test: out->md_data = tmp_buf; Executed by:
| 306587 | ||||||||||||||||||
245 | else { | - | ||||||||||||||||||
246 | out->md_data = OPENSSL_malloc(out->digest->ctx_size); | - | ||||||||||||||||||
247 | if (out->md_data == NULL) {
| 0-556007 | ||||||||||||||||||
248 | EVPerr(EVP_F_EVP_MD_CTX_COPY_EX, ERR_R_MALLOC_FAILURE); | - | ||||||||||||||||||
249 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
250 | } | - | ||||||||||||||||||
251 | } executed 556007 times by 1 test: end of block Executed by:
| 556007 | ||||||||||||||||||
252 | memcpy(out->md_data, in->md_data, out->digest->ctx_size); | - | ||||||||||||||||||
253 | } executed 862594 times by 1 test: end of block Executed by:
| 862594 | ||||||||||||||||||
254 | - | |||||||||||||||||||
255 | out->update = in->update; | - | ||||||||||||||||||
256 | - | |||||||||||||||||||
257 | if (in->pctx) {
| 164769-857125 | ||||||||||||||||||
258 | out->pctx = EVP_PKEY_CTX_dup(in->pctx); | - | ||||||||||||||||||
259 | if (!out->pctx) {
| 0-164769 | ||||||||||||||||||
260 | EVP_MD_CTX_reset(out); | - | ||||||||||||||||||
261 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
262 | } | - | ||||||||||||||||||
263 | } executed 164769 times by 1 test: end of block Executed by:
| 164769 | ||||||||||||||||||
264 | - | |||||||||||||||||||
265 | if (out->digest->copy)
| 0-1021894 | ||||||||||||||||||
266 | return out->digest->copy(out, in); never executed: return out->digest->copy(out, in); | 0 | ||||||||||||||||||
267 | - | |||||||||||||||||||
268 | return 1; executed 1021894 times by 1 test: return 1; Executed by:
| 1021894 | ||||||||||||||||||
269 | } | - | ||||||||||||||||||
270 | - | |||||||||||||||||||
271 | int EVP_Digest(const void *data, size_t count, | - | ||||||||||||||||||
272 | unsigned char *md, unsigned int *size, const EVP_MD *type, | - | ||||||||||||||||||
273 | ENGINE *impl) | - | ||||||||||||||||||
274 | { | - | ||||||||||||||||||
275 | EVP_MD_CTX *ctx = EVP_MD_CTX_new(); | - | ||||||||||||||||||
276 | int ret; | - | ||||||||||||||||||
277 | - | |||||||||||||||||||
278 | if (ctx == NULL)
| 0-50360 | ||||||||||||||||||
279 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
280 | EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_ONESHOT); | - | ||||||||||||||||||
281 | ret = EVP_DigestInit_ex(ctx, type, impl)
| 0-50360 | ||||||||||||||||||
282 | && EVP_DigestUpdate(ctx, data, count)
| 0-50360 | ||||||||||||||||||
283 | && EVP_DigestFinal_ex(ctx, md, size);
| 0-50360 | ||||||||||||||||||
284 | EVP_MD_CTX_free(ctx); | - | ||||||||||||||||||
285 | - | |||||||||||||||||||
286 | return ret; executed 50360 times by 1 test: return ret; Executed by:
| 50360 | ||||||||||||||||||
287 | } | - | ||||||||||||||||||
288 | - | |||||||||||||||||||
289 | int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2) | - | ||||||||||||||||||
290 | { | - | ||||||||||||||||||
291 | if (ctx->digest && ctx->digest->md_ctrl) {
| 0 | ||||||||||||||||||
292 | int ret = ctx->digest->md_ctrl(ctx, cmd, p1, p2); | - | ||||||||||||||||||
293 | if (ret <= 0)
| 0 | ||||||||||||||||||
294 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
295 | return 1; never executed: return 1; | 0 | ||||||||||||||||||
296 | } | - | ||||||||||||||||||
297 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
298 | } | - | ||||||||||||||||||
Source code | Switch to Preprocessed file |