OpenCoverage

bio_md.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/evp/bio_md.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: bio_md.c,v 1.15 2018/05/02 15:51:41 tb Exp $ */-
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)-
3 * All rights reserved.-
4 *-
5 * This package is an SSL implementation written-
6 * by Eric Young (eay@cryptsoft.com).-
7 * The implementation was written so as to conform with Netscapes SSL.-
8 *-
9 * This library is free for commercial and non-commercial use as long as-
10 * the following conditions are aheared to. The following conditions-
11 * apply to all code found in this distribution, be it the RC4, RSA,-
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation-
13 * included with this distribution is covered by the same copyright terms-
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).-
15 *-
16 * Copyright remains Eric Young's, and as such any Copyright notices in-
17 * the code are not to be removed.-
18 * If this package is used in a product, Eric Young should be given attribution-
19 * as the author of the parts of the library used.-
20 * This can be in the form of a textual message at program startup or-
21 * in documentation (online or textual) provided with the package.-
22 *-
23 * Redistribution and use in source and binary forms, with or without-
24 * modification, are permitted provided that the following conditions-
25 * are met:-
26 * 1. Redistributions of source code must retain the copyright-
27 * notice, this list of conditions and the following disclaimer.-
28 * 2. Redistributions in binary form must reproduce the above copyright-
29 * notice, this list of conditions and the following disclaimer in the-
30 * documentation and/or other materials provided with the distribution.-
31 * 3. All advertising materials mentioning features or use of this software-
32 * must display the following acknowledgement:-
33 * "This product includes cryptographic software written by-
34 * Eric Young (eay@cryptsoft.com)"-
35 * The word 'cryptographic' can be left out if the rouines from the library-
36 * being used are not cryptographic related :-).-
37 * 4. If you include any Windows specific code (or a derivative thereof) from-
38 * the apps directory (application code) you must include an acknowledgement:-
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"-
40 *-
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND-
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE-
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE-
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL-
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS-
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT-
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY-
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF-
51 * SUCH DAMAGE.-
52 *-
53 * The licence and distribution terms for any publically available version or-
54 * derivative of this code cannot be changed. i.e. this code cannot simply be-
55 * copied and put under another distribution licence-
56 * [including the GNU Public Licence.]-
57 */-
58-
59#include <stdio.h>-
60#include <errno.h>-
61-
62#include <openssl/buffer.h>-
63#include <openssl/evp.h>-
64-
65/* BIO_put and BIO_get both add to the digest,-
66 * BIO_gets returns the digest */-
67-
68static int md_write(BIO *h, char const *buf, int num);-
69static int md_read(BIO *h, char *buf, int size);-
70/*static int md_puts(BIO *h, const char *str); */-
71static int md_gets(BIO *h, char *str, int size);-
72static long md_ctrl(BIO *h, int cmd, long arg1, void *arg2);-
73static int md_new(BIO *h);-
74static int md_free(BIO *data);-
75static long md_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp);-
76-
77static const BIO_METHOD methods_md = {-
78 .type = BIO_TYPE_MD,-
79 .name = "message digest",-
80 .bwrite = md_write,-
81 .bread = md_read,-
82 .bgets = md_gets,-
83 .ctrl = md_ctrl,-
84 .create = md_new,-
85 .destroy = md_free,-
86 .callback_ctrl = md_callback_ctrl-
87};-
88-
89const BIO_METHOD *-
90BIO_f_md(void)-
91{-
92 return (&methods_md);
executed 4 times by 1 test: return (&methods_md);
Executed by:
  • pkcs7test
4
93}-
94-
95static int-
96md_new(BIO *bi)-
97{-
98 EVP_MD_CTX *ctx;-
99-
100 ctx = EVP_MD_CTX_create();-
101 if (ctx == NULL)
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • pkcs7test
0-4
102 return (0);
never executed: return (0);
0
103-
104 bi->init = 0;-
105 bi->ptr = (char *)ctx;-
106 bi->flags = 0;-
107 return (1);
executed 4 times by 1 test: return (1);
Executed by:
  • pkcs7test
4
108}-
109-
110static int-
111md_free(BIO *a)-
112{-
113 if (a == NULL)
a == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • pkcs7test
0-4
114 return (0);
never executed: return (0);
0
115 EVP_MD_CTX_destroy(a->ptr);-
116 a->ptr = NULL;-
117 a->init = 0;-
118 a->flags = 0;-
119 return (1);
executed 4 times by 1 test: return (1);
Executed by:
  • pkcs7test
4
120}-
121-
122static int-
123md_read(BIO *b, char *out, int outl)-
124{-
125 int ret = 0;-
126 EVP_MD_CTX *ctx;-
127-
128 if (out == NULL)
out == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • pkcs7test
0-4
129 return (0);
never executed: return (0);
0
130 ctx = b->ptr;-
131-
132 if ((ctx == NULL) || (b->next_bio == NULL))
(ctx == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • pkcs7test
(b->next_bio == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • pkcs7test
0-4
133 return (0);
never executed: return (0);
0
134-
135 ret = BIO_read(b->next_bio, out, outl);-
136 if (b->init) {
b->initDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-4
137 if (ret > 0) {
ret > 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
2
138 if (EVP_DigestUpdate(ctx, (unsigned char *)out,
EVP_DigestUpda... int)ret) <= 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
139 (unsigned int)ret) <= 0)
EVP_DigestUpda... int)ret) <= 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
140 return (-1);
never executed: return (-1);
0
141 }
executed 2 times by 1 test: end of block
Executed by:
  • pkcs7test
2
142 }
executed 4 times by 1 test: end of block
Executed by:
  • pkcs7test
4
143 BIO_clear_retry_flags(b);-
144 BIO_copy_next_retry(b);-
145 return (ret);
executed 4 times by 1 test: return (ret);
Executed by:
  • pkcs7test
4
146}-
147-
148static int-
149md_write(BIO *b, const char *in, int inl)-
150{-
151 int ret = 0;-
152 EVP_MD_CTX *ctx;-
153-
154 if ((in == NULL) || (inl <= 0))
(in == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
(inl <= 0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
155 return (0);
never executed: return (0);
0
156 ctx = b->ptr;-
157-
158 if ((ctx != NULL) && (b->next_bio != NULL))
(ctx != ((void *)0) )Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
(b->next_bio != ((void *)0) )Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-2
159 ret = BIO_write(b->next_bio, in, inl);
executed 2 times by 1 test: ret = BIO_write(b->next_bio, in, inl);
Executed by:
  • pkcs7test
2
160 if (b->init) {
b->initDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-2
161 if (ret > 0) {
ret > 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-2
162 if (!EVP_DigestUpdate(ctx, (const unsigned char *)in,
!EVP_DigestUpd...igned int)ret)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
163 (unsigned int)ret)) {
!EVP_DigestUpd...igned int)ret)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
164 BIO_clear_retry_flags(b);-
165 return 0;
never executed: return 0;
0
166 }-
167 }
executed 2 times by 1 test: end of block
Executed by:
  • pkcs7test
2
168 }
executed 2 times by 1 test: end of block
Executed by:
  • pkcs7test
2
169 if (b->next_bio != NULL) {
b->next_bio != ((void *)0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-2
170 BIO_clear_retry_flags(b);-
171 BIO_copy_next_retry(b);-
172 }
executed 2 times by 1 test: end of block
Executed by:
  • pkcs7test
2
173 return (ret);
executed 2 times by 1 test: return (ret);
Executed by:
  • pkcs7test
2
174}-
175-
176static long-
177md_ctrl(BIO *b, int cmd, long num, void *ptr)-
178{-
179 EVP_MD_CTX *ctx, *dctx, **pctx;-
180 const EVP_MD **ppmd;-
181 EVP_MD *md;-
182 long ret = 1;-
183 BIO *dbio;-
184-
185 ctx = b->ptr;-
186-
187 switch (cmd) {-
188 case BIO_CTRL_RESET:
never executed: case 1:
0
189 if (b->init)
b->initDescription
TRUEnever evaluated
FALSEnever evaluated
0
190 ret = EVP_DigestInit_ex(ctx, ctx->digest, NULL);
never executed: ret = EVP_DigestInit_ex(ctx, ctx->digest, ((void *)0) );
0
191 else-
192 ret = 0;
never executed: ret = 0;
0
193 if (ret > 0)
ret > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
194 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
never executed: ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
0
195 break;
never executed: break;
0
196 case BIO_C_GET_MD:
never executed: case 112:
0
197 if (b->init) {
b->initDescription
TRUEnever evaluated
FALSEnever evaluated
0
198 ppmd = ptr;-
199 *ppmd = ctx->digest;-
200 } else
never executed: end of block
0
201 ret = 0;
never executed: ret = 0;
0
202 break;
never executed: break;
0
203 case BIO_C_GET_MD_CTX:
executed 4 times by 1 test: case 120:
Executed by:
  • pkcs7test
4
204 pctx = ptr;-
205 *pctx = ctx;-
206 b->init = 1;-
207 break;
executed 4 times by 1 test: break;
Executed by:
  • pkcs7test
4
208 case BIO_C_SET_MD_CTX:
never executed: case 148:
0
209 if (b->init)
b->initDescription
TRUEnever evaluated
FALSEnever evaluated
0
210 b->ptr = ptr;
never executed: b->ptr = ptr;
0
211 else-
212 ret = 0;
never executed: ret = 0;
0
213 break;
never executed: break;
0
214 case BIO_C_DO_STATE_MACHINE:
never executed: case 101:
0
215 BIO_clear_retry_flags(b);-
216 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);-
217 BIO_copy_next_retry(b);-
218 break;
never executed: break;
0
219-
220 case BIO_C_SET_MD:
executed 4 times by 1 test: case 111:
Executed by:
  • pkcs7test
4
221 md = ptr;-
222 ret = EVP_DigestInit_ex(ctx, md, NULL);-
223 if (ret > 0)
ret > 0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-4
224 b->init = 1;
executed 4 times by 1 test: b->init = 1;
Executed by:
  • pkcs7test
4
225 break;
executed 4 times by 1 test: break;
Executed by:
  • pkcs7test
4
226 case BIO_CTRL_DUP:
never executed: case 12:
0
227 dbio = ptr;-
228 dctx = dbio->ptr;-
229 if (!EVP_MD_CTX_copy_ex(dctx, ctx))
!EVP_MD_CTX_copy_ex(dctx, ctx)Description
TRUEnever evaluated
FALSEnever evaluated
0
230 return 0;
never executed: return 0;
0
231 b->init = 1;-
232 break;
never executed: break;
0
233 default:
executed 12 times by 1 test: default:
Executed by:
  • pkcs7test
12
234 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);-
235 break;
executed 12 times by 1 test: break;
Executed by:
  • pkcs7test
12
236 }-
237 return (ret);
executed 20 times by 1 test: return (ret);
Executed by:
  • pkcs7test
20
238}-
239-
240static long-
241md_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp)-
242{-
243 long ret = 1;-
244-
245 if (b->next_bio == NULL)
b->next_bio == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
246 return (0);
never executed: return (0);
0
247 switch (cmd) {-
248 default:
never executed: default:
0
249 ret = BIO_callback_ctrl(b->next_bio, cmd, fp);-
250 break;
never executed: break;
0
251 }-
252 return (ret);
never executed: return (ret);
0
253}-
254-
255static int-
256md_gets(BIO *bp, char *buf, int size)-
257{-
258 EVP_MD_CTX *ctx;-
259 unsigned int ret;-
260-
261 ctx = bp->ptr;-
262 if (size < ctx->digest->md_size)
size < ctx->digest->md_sizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
263 return (0);
never executed: return (0);
0
264 if (EVP_DigestFinal_ex(ctx, (unsigned char *)buf, &ret) <= 0)
EVP_DigestFina...uf, &ret) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
265 return -1;
never executed: return -1;
0
266-
267 return ((int)ret);
never executed: return ((int)ret);
0
268}-
269-
270/*-
271static int md_puts(bp,str)-
272BIO *bp;-
273char *str;-
274 {-
275 return(-1);-
276 }-
277*/-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2