OpenCoverage

bio_enc.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/evp/bio_enc.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: bio_enc.c,v 1.22 2018/08/24 19:30:24 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 <errno.h>-
60#include <stdio.h>-
61#include <string.h>-
62-
63#include <openssl/buffer.h>-
64#include <openssl/evp.h>-
65-
66static int enc_write(BIO *h, const char *buf, int num);-
67static int enc_read(BIO *h, char *buf, int size);-
68/*static int enc_puts(BIO *h, const char *str); */-
69/*static int enc_gets(BIO *h, char *str, int size); */-
70static long enc_ctrl(BIO *h, int cmd, long arg1, void *arg2);-
71static int enc_new(BIO *h);-
72static int enc_free(BIO *data);-
73static long enc_callback_ctrl(BIO *h, int cmd, bio_info_cb *fps);-
74#define ENC_BLOCK_SIZE (1024*4)-
75#define BUF_OFFSET (EVP_MAX_BLOCK_LENGTH*2)-
76-
77typedef struct enc_struct {-
78 int buf_len;-
79 int buf_off;-
80 int cont; /* <= 0 when finished */-
81 int finished;-
82 int ok; /* bad decrypt */-
83 EVP_CIPHER_CTX cipher;-
84 /* buf is larger than ENC_BLOCK_SIZE because EVP_DecryptUpdate-
85 * can return up to a block more data than is presented to it-
86 */-
87 char buf[ENC_BLOCK_SIZE + BUF_OFFSET + 2];-
88} BIO_ENC_CTX;-
89-
90static const BIO_METHOD methods_enc = {-
91 .type = BIO_TYPE_CIPHER,-
92 .name = "cipher",-
93 .bwrite = enc_write,-
94 .bread = enc_read,-
95 .ctrl = enc_ctrl,-
96 .create = enc_new,-
97 .destroy = enc_free,-
98 .callback_ctrl = enc_callback_ctrl-
99};-
100-
101const BIO_METHOD *-
102BIO_f_cipher(void)-
103{-
104 return (&methods_enc);
executed 198 times by 2 tests: return (&methods_enc);
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
198
105}-
106-
107static int-
108enc_new(BIO *bi)-
109{-
110 BIO_ENC_CTX *ctx;-
111-
112 ctx = malloc(sizeof(BIO_ENC_CTX));-
113 if (ctx == NULL)
ctx == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 198 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
0-198
114 return (0);
never executed: return (0);
0
115 EVP_CIPHER_CTX_init(&ctx->cipher);-
116-
117 ctx->buf_len = 0;-
118 ctx->buf_off = 0;-
119 ctx->cont = 1;-
120 ctx->finished = 0;-
121 ctx->ok = 1;-
122-
123 bi->init = 0;-
124 bi->ptr = (char *)ctx;-
125 bi->flags = 0;-
126 return (1);
executed 198 times by 2 tests: return (1);
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
198
127}-
128-
129static int-
130enc_free(BIO *a)-
131{-
132 BIO_ENC_CTX *b;-
133-
134 if (a == NULL)
a == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 198 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
0-198
135 return (0);
never executed: return (0);
0
136 b = (BIO_ENC_CTX *)a->ptr;-
137 EVP_CIPHER_CTX_cleanup(&(b->cipher));-
138 freezero(a->ptr, sizeof(BIO_ENC_CTX));-
139 a->ptr = NULL;-
140 a->init = 0;-
141 a->flags = 0;-
142 return (1);
executed 198 times by 2 tests: return (1);
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
198
143}-
144-
145static int-
146enc_read(BIO *b, char *out, int outl)-
147{-
148 int ret = 0, i;-
149 BIO_ENC_CTX *ctx;-
150-
151 if (out == NULL)
out == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
152 return (0);
never executed: return (0);
0
153 ctx = (BIO_ENC_CTX *)b->ptr;-
154-
155 if ((ctx == NULL) || (b->next_bio == NULL))
(ctx == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
(b->next_bio == ((void *)0) )Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
156 return (0);
never executed: return (0);
0
157-
158 /* First check if there are bytes decoded/encoded */-
159 if (ctx->buf_len > 0) {
ctx->buf_len > 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
1
160 i = ctx->buf_len - ctx->buf_off;-
161 if (i > outl)
i > outlDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
162 i = outl;
never executed: i = outl;
0
163 memcpy(out, &(ctx->buf[ctx->buf_off]), i);-
164 ret = i;-
165 out += i;-
166 outl -= i;-
167 ctx->buf_off += i;-
168 if (ctx->buf_len == ctx->buf_off) {
ctx->buf_len == ctx->buf_offDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-1
169 ctx->buf_len = 0;-
170 ctx->buf_off = 0;-
171 }
executed 1 time by 1 test: end of block
Executed by:
  • pkcs7test
1
172 }
executed 1 time by 1 test: end of block
Executed by:
  • pkcs7test
1
173-
174 /* At this point, we have room of outl bytes and an empty-
175 * buffer, so we should read in some more. */-
176-
177 while (outl > 0) {
outl > 0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-4
178 if (ctx->cont <= 0)
ctx->cont <= 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
2
179 break;
executed 2 times by 1 test: break;
Executed by:
  • pkcs7test
2
180-
181 /* read in at IV offset, read the EVP_Cipher-
182 * documentation about why */-
183 i = BIO_read(b->next_bio, &(ctx->buf[BUF_OFFSET]), ENC_BLOCK_SIZE);-
184-
185 if (i <= 0) {
i <= 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
1
186 /* Should be continue next time we are called? */-
187 if (!BIO_should_retry(b->next_bio)) {
!BIO_test_flag...ext_bio, 0x08)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-1
188 ctx->cont = i;-
189 i = EVP_CipherFinal_ex(&(ctx->cipher),-
190 (unsigned char *)ctx->buf,-
191 &(ctx->buf_len));-
192 ctx->ok = i;-
193 ctx->buf_off = 0;-
194 } else {
executed 1 time by 1 test: end of block
Executed by:
  • pkcs7test
1
195 ret = (ret == 0) ? i : ret;
(ret == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
196 break;
never executed: break;
0
197 }-
198 } else {-
199 EVP_CipherUpdate(&(ctx->cipher),-
200 (unsigned char *)ctx->buf, &ctx->buf_len,-
201 (unsigned char *)&(ctx->buf[BUF_OFFSET]), i);-
202 ctx->cont = 1;-
203 /* Note: it is possible for EVP_CipherUpdate to-
204 * decrypt zero bytes because this is or looks like-
205 * the final block: if this happens we should retry-
206 * and either read more data or decrypt the final-
207 * block-
208 */-
209 if (ctx->buf_len == 0)
ctx->buf_len == 0Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
0-1
210 continue;
never executed: continue;
0
211 }
executed 1 time by 1 test: end of block
Executed by:
  • pkcs7test
1
212-
213 if (ctx->buf_len <= outl)
ctx->buf_len <= outlDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
FALSEnever evaluated
0-2
214 i = ctx->buf_len;
executed 2 times by 1 test: i = ctx->buf_len;
Executed by:
  • pkcs7test
2
215 else-
216 i = outl;
never executed: i = outl;
0
217 if (i <= 0)
i <= 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • pkcs7test
0-2
218 break;
never executed: break;
0
219 memcpy(out, ctx->buf, i);-
220 ret += i;-
221 ctx->buf_off = i;-
222 outl -= i;-
223 out += i;-
224 }
executed 2 times by 1 test: end of block
Executed by:
  • pkcs7test
2
225-
226 BIO_clear_retry_flags(b);-
227 BIO_copy_next_retry(b);-
228 return ((ret == 0) ? ctx->cont : ret);
executed 2 times by 1 test: return ((ret == 0) ? ctx->cont : ret);
Executed by:
  • pkcs7test
(ret == 0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • pkcs7test
1-2
229}-
230-
231static int-
232enc_write(BIO *b, const char *in, int inl)-
233{-
234 int ret = 0, n, i;-
235 BIO_ENC_CTX *ctx;-
236-
237 ctx = (BIO_ENC_CTX *)b->ptr;-
238 ret = inl;-
239-
240 BIO_clear_retry_flags(b);-
241 n = ctx->buf_len - ctx->buf_off;-
242 while (n > 0) {
n > 0Description
TRUEevaluated 57 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
FALSEevaluated 254 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
57-254
243 i = BIO_write(b->next_bio, &(ctx->buf[ctx->buf_off]), n);-
244 if (i <= 0) {
i <= 0Description
TRUEnever evaluated
FALSEevaluated 57 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
0-57
245 BIO_copy_next_retry(b);-
246 return (i);
never executed: return (i);
0
247 }-
248 ctx->buf_off += i;-
249 n -= i;-
250 }
executed 57 times by 2 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
57
251 /* at this point all pending data has been written */-
252-
253 if ((in == NULL) || (inl <= 0))
(in == ((void *)0) )Description
TRUEevaluated 57 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
FALSEevaluated 197 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
(inl <= 0)Description
TRUEnever evaluated
FALSEevaluated 197 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
0-197
254 return (0);
executed 57 times by 2 tests: return (0);
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
57
255-
256 ctx->buf_off = 0;-
257 while (inl > 0) {
inl > 0Description
TRUEevaluated 197 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
FALSEevaluated 197 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
197
258 n = (inl > ENC_BLOCK_SIZE) ? ENC_BLOCK_SIZE : inl;
(inl > (1024*4))Description
TRUEnever evaluated
FALSEevaluated 197 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
0-197
259 EVP_CipherUpdate(&(ctx->cipher),-
260 (unsigned char *)ctx->buf, &ctx->buf_len,-
261 (unsigned char *)in, n);-
262 inl -= n;-
263 in += n;-
264-
265 ctx->buf_off = 0;-
266 n = ctx->buf_len;-
267 while (n > 0) {
n > 0Description
TRUEevaluated 197 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
FALSEevaluated 197 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
197
268 i = BIO_write(b->next_bio, &(ctx->buf[ctx->buf_off]), n);-
269 if (i <= 0) {
i <= 0Description
TRUEnever evaluated
FALSEevaluated 197 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
0-197
270 BIO_copy_next_retry(b);-
271 return (ret == inl) ? i : ret - inl;
never executed: return (ret == inl) ? i : ret - inl;
(ret == inl)Description
TRUEnever evaluated
FALSEnever evaluated
0
272 }-
273 n -= i;-
274 ctx->buf_off += i;-
275 }
executed 197 times by 2 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
197
276 ctx->buf_len = 0;-
277 ctx->buf_off = 0;-
278 }
executed 197 times by 2 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
197
279 BIO_copy_next_retry(b);-
280 return (ret);
executed 197 times by 2 tests: return (ret);
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
197
281}-
282-
283static long-
284enc_ctrl(BIO *b, int cmd, long num, void *ptr)-
285{-
286 BIO *dbio;-
287 BIO_ENC_CTX *ctx, *dctx;-
288 long ret = 1;-
289 int i;-
290 EVP_CIPHER_CTX **c_ctx;-
291-
292 ctx = (BIO_ENC_CTX *)b->ptr;-
293-
294 switch (cmd) {-
295 case BIO_CTRL_RESET:
never executed: case 1:
0
296 ctx->ok = 1;-
297 ctx->finished = 0;-
298 EVP_CipherInit_ex(&(ctx->cipher), NULL, NULL, NULL, NULL,-
299 ctx->cipher.encrypt);-
300 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);-
301 break;
never executed: break;
0
302 case BIO_CTRL_EOF: /* More to read */
never executed: case 2:
0
303 if (ctx->cont <= 0)
ctx->cont <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
304 ret = 1;
never executed: ret = 1;
0
305 else-
306 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
never executed: ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
0
307 break;
never executed: break;
0
308 case BIO_CTRL_WPENDING:
never executed: case 13:
0
309 ret = ctx->buf_len - ctx->buf_off;-
310 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
311 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
never executed: ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
0
312 break;
never executed: break;
0
313 case BIO_CTRL_PENDING: /* More to read in buffer */
never executed: case 10:
0
314 ret = ctx->buf_len - ctx->buf_off;-
315 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
316 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
never executed: ret = BIO_ctrl(b->next_bio, cmd, num, ptr);
0
317 break;
never executed: break;
0
318 case BIO_CTRL_FLUSH:
executed 198 times by 2 tests: case 11:
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
198
319 /* do a final write */-
320again:-
321 while (ctx->buf_len != ctx->buf_off) {
ctx->buf_len != ctx->buf_offDescription
TRUEevaluated 57 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
FALSEevaluated 395 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
57-395
322 i = enc_write(b, NULL, 0);-
323 if (i < 0)
i < 0Description
TRUEnever evaluated
FALSEevaluated 57 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
0-57
324 return i;
never executed: return i;
0
325 }
executed 57 times by 2 tests: end of block
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
57
326-
327 if (!ctx->finished) {
!ctx->finishedDescription
TRUEevaluated 197 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
FALSEevaluated 198 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
197-198
328 ctx->finished = 1;-
329 ctx->buf_off = 0;-
330 ret = EVP_CipherFinal_ex(&(ctx->cipher),-
331 (unsigned char *)ctx->buf,-
332 &(ctx->buf_len));-
333 ctx->ok = (int)ret;-
334 if (ret <= 0)
ret <= 0Description
TRUEnever evaluated
FALSEevaluated 197 times by 2 tests
Evaluated by:
  • libcrypto.so.44.0.1
  • pkcs7test
0-197
335 break;
never executed: break;
0
336-
337 /* push out the bytes */-
338 goto again;
executed 197 times by 2 tests: goto again;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
197
339 }-
340-
341 /* Finally flush the underlying BIO */-
342 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);-
343 break;
executed 198 times by 2 tests: break;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
198
344 case BIO_C_GET_CIPHER_STATUS:
executed 1 time by 1 test: case 113:
Executed by:
  • pkcs7test
1
345 ret = (long)ctx->ok;-
346 break;
executed 1 time by 1 test: break;
Executed by:
  • pkcs7test
1
347 case BIO_C_DO_STATE_MACHINE:
never executed: case 101:
0
348 BIO_clear_retry_flags(b);-
349 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);-
350 BIO_copy_next_retry(b);-
351 break;
never executed: break;
0
352 case BIO_C_GET_CIPHER_CTX:
executed 198 times by 2 tests: case 129:
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
198
353 c_ctx = (EVP_CIPHER_CTX **)ptr;-
354 (*c_ctx) = &(ctx->cipher);-
355 b->init = 1;-
356 break;
executed 198 times by 2 tests: break;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
198
357 case BIO_CTRL_DUP:
never executed: case 12:
0
358 dbio = (BIO *)ptr;-
359 dctx = (BIO_ENC_CTX *)dbio->ptr;-
360 EVP_CIPHER_CTX_init(&dctx->cipher);-
361 ret = EVP_CIPHER_CTX_copy(&dctx->cipher, &ctx->cipher);-
362 if (ret)
retDescription
TRUEnever evaluated
FALSEnever evaluated
0
363 dbio->init = 1;
never executed: dbio->init = 1;
0
364 break;
never executed: break;
0
365 default:
executed 200 times by 2 tests: default:
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
200
366 ret = BIO_ctrl(b->next_bio, cmd, num, ptr);-
367 break;
executed 200 times by 2 tests: break;
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
200
368 }-
369 return (ret);
executed 597 times by 2 tests: return (ret);
Executed by:
  • libcrypto.so.44.0.1
  • pkcs7test
597
370}-
371-
372static long-
373enc_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp)-
374{-
375 long ret = 1;-
376-
377 if (b->next_bio == NULL)
b->next_bio == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
378 return (0);
never executed: return (0);
0
379 switch (cmd) {-
380 default:
never executed: default:
0
381 ret = BIO_callback_ctrl(b->next_bio, cmd, fp);-
382 break;
never executed: break;
0
383 }-
384 return (ret);
never executed: return (ret);
0
385}-
386-
387/*-
388void BIO_set_cipher_ctx(b,c)-
389BIO *b;-
390EVP_CIPHER_ctx *c;-
391 {-
392 if (b == NULL) return;-
393-
394 if ((b->callback != NULL) &&-
395 (b->callback(b,BIO_CB_CTRL,(char *)c,BIO_CTRL_SET,e,0L) <= 0))-
396 return;-
397-
398 b->init=1;-
399 ctx=(BIO_ENC_CTX *)b->ptr;-
400 memcpy(ctx->cipher,c,sizeof(EVP_CIPHER_CTX));-
401-
402 if (b->callback != NULL)-
403 b->callback(b,BIO_CB_CTRL,(char *)c,BIO_CTRL_SET,e,1L);-
404 }-
405*/-
406-
407int-
408BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k,-
409 const unsigned char *i, int e)-
410{-
411 BIO_ENC_CTX *ctx;-
412 long (*cb)(BIO *, int, const char *, int, long, long);-
413-
414 if (b == NULL)
b == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
415 return 0;
never executed: return 0;
0
416-
417 if ((ctx = BIO_get_data(b)) == NULL)
(ctx = BIO_get...== ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
418 return 0;
never executed: return 0;
0
419-
420 if ((cb = BIO_get_callback(b)) != NULL) {
(cb = BIO_get_...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
421 if (cb(b, BIO_CB_CTRL, (const char *)c, BIO_CTRL_SET, e, 0L)
cb(b, 0x06, (c...4, e, 0L) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
422 <= 0)
cb(b, 0x06, (c...4, e, 0L) <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
423 return 0;
never executed: return 0;
0
424 }
never executed: end of block
0
425-
426 BIO_set_init(b, 1);-
427-
428 if (!EVP_CipherInit_ex(&(ctx->cipher), c, NULL, k, i, e))
!EVP_CipherIni...)0) , k, i, e)Description
TRUEnever evaluated
FALSEnever evaluated
0
429 return 0;
never executed: return 0;
0
430-
431 if (cb != NULL)
cb != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
432 return cb(b, BIO_CB_CTRL, (const char *)c, BIO_CTRL_SET, e, 1L);
never executed: return cb(b, 0x06, (const char *)c, 4, e, 1L);
0
433-
434 return 1;
never executed: return 1;
0
435}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2