OpenCoverage

encode.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/evp/encode.c
Source codeSwitch to Preprocessed file
LineSourceCount
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 <limits.h>-
12#include "internal/cryptlib.h"-
13#include <openssl/evp.h>-
14#include "evp_locl.h"-
15#include "internal/evp_int.h"-
16-
17static unsigned char conv_ascii2bin(unsigned char a,-
18 const unsigned char *table);-
19static int evp_encodeblock_int(EVP_ENCODE_CTX *ctx, unsigned char *t,-
20 const unsigned char *f, int dlen);-
21static int evp_decodeblock_int(EVP_ENCODE_CTX *ctx, unsigned char *t,-
22 const unsigned char *f, int n);-
23-
24#ifndef CHARSET_EBCDIC-
25# define conv_bin2ascii(a, table) ((table)[(a)&0x3f])-
26#else-
27/*-
28 * We assume that PEM encoded files are EBCDIC files (i.e., printable text-
29 * files). Convert them here while decoding. When encoding, output is EBCDIC-
30 * (text) format again. (No need for conversion in the conv_bin2ascii macro,-
31 * as the underlying textstring data_bin2ascii[] is already EBCDIC)-
32 */-
33# define conv_bin2ascii(a, table) ((table)[(a)&0x3f])-
34#endif-
35-
36/*--
37 * 64 char lines-
38 * pad input with 0-
39 * left over chars are set to =-
40 * 1 byte => xx==-
41 * 2 bytes => xxx=-
42 * 3 bytes => xxxx-
43 */-
44#define BIN_PER_LINE (64/4*3)-
45#define CHUNKS_PER_LINE (64/4)-
46#define CHAR_PER_LINE (64+1)-
47-
48static const unsigned char data_bin2ascii[65] =-
49 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";-
50-
51/* SRP uses a different base64 alphabet */-
52static const unsigned char srpdata_bin2ascii[65] =-
53 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./";-
54-
55-
56/*--
57 * 0xF0 is a EOLN-
58 * 0xF1 is ignore but next needs to be 0xF0 (for \r\n processing).-
59 * 0xF2 is EOF-
60 * 0xE0 is ignore at start of line.-
61 * 0xFF is error-
62 */-
63-
64#define B64_EOLN 0xF0-
65#define B64_CR 0xF1-
66#define B64_EOF 0xF2-
67#define B64_WS 0xE0-
68#define B64_ERROR 0xFF-
69#define B64_NOT_BASE64(a) (((a)|0x13) == 0xF3)-
70#define B64_BASE64(a) (!B64_NOT_BASE64(a))-
71-
72static const unsigned char data_ascii2bin[128] = {-
73 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
74 0xFF, 0xE0, 0xF0, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF,-
75 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
76 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
77 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
78 0xFF, 0xFF, 0xFF, 0x3E, 0xFF, 0xF2, 0xFF, 0x3F,-
79 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,-
80 0x3C, 0x3D, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,-
81 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,-
82 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,-
83 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,-
84 0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
85 0xFF, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,-
86 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,-
87 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30,-
88 0x31, 0x32, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
89};-
90-
91static const unsigned char srpdata_ascii2bin[128] = {-
92 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
93 0xFF, 0xE0, 0xF0, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF,-
94 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
95 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
96 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
97 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF2, 0x3E, 0x3F,-
98 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,-
99 0x08, 0x09, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF,-
100 0xFF, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,-
101 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,-
102 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20,-
103 0x21, 0x22, 0x23, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
104 0xFF, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A,-
105 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32,-
106 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A,-
107 0x3B, 0x3C, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,-
108};-
109-
110#ifndef CHARSET_EBCDIC-
111static unsigned char conv_ascii2bin(unsigned char a, const unsigned char *table)-
112{-
113 if (a & 0x80)
a & 0x80Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 35049650 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2-35049650
114 return B64_ERROR;
executed 2 times by 1 test: return 0xFF;
Executed by:
  • libcrypto.so.1.1
2
115 return table[a];
executed 35049650 times by 1 test: return table[a];
Executed by:
  • libcrypto.so.1.1
35049650
116}-
117#else-
118static unsigned char conv_ascii2bin(unsigned char a, const unsigned char *table)-
119{-
120 a = os_toascii[a];-
121 if (a & 0x80)-
122 return B64_ERROR;-
123 return table[a];-
124}-
125#endif-
126-
127EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void)-
128{-
129 return OPENSSL_zalloc(sizeof(EVP_ENCODE_CTX));
executed 22934 times by 1 test: return CRYPTO_zalloc(sizeof(EVP_ENCODE_CTX), __FILE__, 129);
Executed by:
  • libcrypto.so.1.1
22934
130}-
131-
132void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx)-
133{-
134 OPENSSL_free(ctx);-
135}
executed 22934 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
22934
136-
137int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx)-
138{-
139 memcpy(dctx, sctx, sizeof(EVP_ENCODE_CTX));-
140-
141 return 1;
never executed: return 1;
0
142}-
143-
144int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx)-
145{-
146 return ctx->num;
executed 352 times by 1 test: return ctx->num;
Executed by:
  • libcrypto.so.1.1
352
147}-
148-
149void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags)-
150{-
151 ctx->flags = flags;-
152}
executed 12 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
12
153-
154void EVP_EncodeInit(EVP_ENCODE_CTX *ctx)-
155{-
156 ctx->length = 48;-
157 ctx->num = 0;-
158 ctx->line_num = 0;-
159 ctx->flags = 0;-
160}
executed 402 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
402
161-
162int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,-
163 const unsigned char *in, int inl)-
164{-
165 int i, j;-
166 size_t total = 0;-
167-
168 *outl = 0;-
169 if (inl <= 0)
inl <= 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2425 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
1-2425
170 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • libcrypto.so.1.1
1
171 OPENSSL_assert(ctx->length <= (int)sizeof(ctx->enc_data));-
172 if (ctx->length - ctx->num > inl) {
ctx->length - ctx->num > inlDescription
TRUEevaluated 386 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2039 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
386-2039
173 memcpy(&(ctx->enc_data[ctx->num]), in, inl);-
174 ctx->num += inl;-
175 return 1;
executed 386 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
386
176 }-
177 if (ctx->num != 0) {
ctx->num != 0Description
TRUEevaluated 1482 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 557 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
557-1482
178 i = ctx->length - ctx->num;-
179 memcpy(&(ctx->enc_data[ctx->num]), in, i);-
180 in += i;-
181 inl -= i;-
182 j = evp_encodeblock_int(ctx, out, ctx->enc_data, ctx->length);-
183 ctx->num = 0;-
184 out += j;-
185 total = j;-
186 if ((ctx->flags & EVP_ENCODE_CTX_NO_NEWLINES) == 0) {
(ctx->flags & 1) == 0Description
TRUEevaluated 1480 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2-1480
187 *(out++) = '\n';-
188 total++;-
189 }
executed 1480 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1480
190 *out = '\0';-
191 }
executed 1482 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1482
192 while (inl >= ctx->length && total <= INT_MAX) {
inl >= ctx->lengthDescription
TRUEevaluated 8968 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 2039 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
total <= 0x7fffffffDescription
TRUEevaluated 8968 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-8968
193 j = evp_encodeblock_int(ctx, out, in, ctx->length);-
194 in += ctx->length;-
195 inl -= ctx->length;-
196 out += j;-
197 total += j;-
198 if ((ctx->flags & EVP_ENCODE_CTX_NO_NEWLINES) == 0) {
(ctx->flags & 1) == 0Description
TRUEevaluated 8928 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 40 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
40-8928
199 *(out++) = '\n';-
200 total++;-
201 }
executed 8928 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
8928
202 *out = '\0';-
203 }
executed 8968 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
8968
204 if (total > INT_MAX) {
total > 0x7fffffffDescription
TRUEnever evaluated
FALSEevaluated 2039 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-2039
205 /* Too much output data! */-
206 *outl = 0;-
207 return 0;
never executed: return 0;
0
208 }-
209 if (inl != 0)
inl != 0Description
TRUEevaluated 1722 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 317 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
317-1722
210 memcpy(&(ctx->enc_data[0]), in, inl);
executed 1722 times by 1 test: memcpy(&(ctx->enc_data[0]), in, inl);
Executed by:
  • libcrypto.so.1.1
1722
211 ctx->num = inl;-
212 *outl = total;-
213-
214 return 1;
executed 2039 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
2039
215}-
216-
217void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl)-
218{-
219 unsigned int ret = 0;-
220-
221 if (ctx->num != 0) {
ctx->num != 0Description
TRUEevaluated 395 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
5-395
222 ret = evp_encodeblock_int(ctx, out, ctx->enc_data, ctx->num);-
223 if ((ctx->flags & EVP_ENCODE_CTX_NO_NEWLINES) == 0)
(ctx->flags & 1) == 0Description
TRUEevaluated 391 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
4-391
224 out[ret++] = '\n';
executed 391 times by 1 test: out[ret++] = '\n';
Executed by:
  • libcrypto.so.1.1
391
225 out[ret] = '\0';-
226 ctx->num = 0;-
227 }
executed 395 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
395
228 *outl = ret;-
229}
executed 400 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
400
230-
231static int evp_encodeblock_int(EVP_ENCODE_CTX *ctx, unsigned char *t,-
232 const unsigned char *f, int dlen)-
233{-
234 int i, ret = 0;-
235 unsigned long l;-
236 const unsigned char *table;-
237-
238 if (ctx != NULL && (ctx->flags & EVP_ENCODE_CTX_USE_SRP_ALPHABET) != 0)
ctx != ((void *)0)Description
TRUEevaluated 10845 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
(ctx->flags & 2) != 0Description
TRUEevaluated 46 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 10799 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-10845
239 table = srpdata_bin2ascii;
executed 46 times by 1 test: table = srpdata_bin2ascii;
Executed by:
  • libcrypto.so.1.1
46
240 else-
241 table = data_bin2ascii;
executed 10799 times by 1 test: table = data_bin2ascii;
Executed by:
  • libcrypto.so.1.1
10799
242-
243 for (i = dlen; i > 0; i -= 3) {
i > 0Description
TRUEevaluated 171032 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 10845 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
10845-171032
244 if (i >= 3) {
i >= 3Description
TRUEevaluated 170741 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 291 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
291-170741
245 l = (((unsigned long)f[0]) << 16L) |-
246 (((unsigned long)f[1]) << 8L) | f[2];-
247 *(t++) = conv_bin2ascii(l >> 18L, table);-
248 *(t++) = conv_bin2ascii(l >> 12L, table);-
249 *(t++) = conv_bin2ascii(l >> 6L, table);-
250 *(t++) = conv_bin2ascii(l, table);-
251 } else {
executed 170741 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
170741
252 l = ((unsigned long)f[0]) << 16L;-
253 if (i == 2)
i == 2Description
TRUEevaluated 43 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 248 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
43-248
254 l |= ((unsigned long)f[1] << 8L);
executed 43 times by 1 test: l |= ((unsigned long)f[1] << 8L);
Executed by:
  • libcrypto.so.1.1
43
255-
256 *(t++) = conv_bin2ascii(l >> 18L, table);-
257 *(t++) = conv_bin2ascii(l >> 12L, table);-
258 *(t++) = (i == 1) ? '=' : conv_bin2ascii(l >> 6L, table);
(i == 1)Description
TRUEevaluated 248 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 43 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
43-248
259 *(t++) = '=';-
260 }
executed 291 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
291
261 ret += 4;-
262 f += 3;-
263 }
executed 171032 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
171032
264-
265 *t = '\0';-
266 return ret;
executed 10845 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
10845
267}-
268-
269int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int dlen)-
270{-
271 return evp_encodeblock_int(NULL, t, f, dlen);
never executed: return evp_encodeblock_int( ((void *)0) , t, f, dlen);
0
272}-
273-
274void EVP_DecodeInit(EVP_ENCODE_CTX *ctx)-
275{-
276 /* Only ctx->num and ctx->flags are used during decoding. */-
277 ctx->num = 0;-
278 ctx->length = 0;-
279 ctx->line_num = 0;-
280 ctx->flags = 0;-
281}
executed 18641 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
18641
282-
283/*--
284 * -1 for error-
285 * 0 for last line-
286 * 1 for full line-
287 *-
288 * Note: even though EVP_DecodeUpdate attempts to detect and report end of-
289 * content, the context doesn't currently remember it and will accept more data-
290 * in the next call. Therefore, the caller is responsible for checking and-
291 * rejecting a 0 return value in the middle of content.-
292 *-
293 * Note: even though EVP_DecodeUpdate has historically tried to detect end of-
294 * content based on line length, this has never worked properly. Therefore,-
295 * we now return 0 when one of the following is true:-
296 * - Padding or B64_EOF was detected and the last block is complete.-
297 * - Input has zero-length.-
298 * -1 is returned if:-
299 * - Invalid characters are detected.-
300 * - There is extra trailing padding, or data after padding.-
301 * - B64_EOF is detected after an incomplete base64 block.-
302 */-
303int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,-
304 const unsigned char *in, int inl)-
305{-
306 int seof = 0, eof = 0, rv = -1, ret = 0, i, v, tmp, n, decoded_len;-
307 unsigned char *d;-
308 const unsigned char *table;-
309-
310 n = ctx->num;-
311 d = ctx->enc_data;-
312-
313 if (n > 0 && d[n - 1] == '=') {
n > 0Description
TRUEevaluated 287 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 18656 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
d[n - 1] == '='Description
TRUEnever evaluated
FALSEevaluated 287 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-18656
314 eof++;-
315 if (n > 1 && d[n - 2] == '=')
n > 1Description
TRUEnever evaluated
FALSEnever evaluated
d[n - 2] == '='Description
TRUEnever evaluated
FALSEnever evaluated
0
316 eof++;
never executed: eof++;
0
317 }
never executed: end of block
0
318-
319 /* Legacy behaviour: an empty input chunk signals end of input. */-
320 if (inl == 0) {
inl == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 18941 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
2-18941
321 rv = 0;-
322 goto end;
executed 2 times by 1 test: goto end;
Executed by:
  • libcrypto.so.1.1
2
323 }-
324-
325 if ((ctx->flags & EVP_ENCODE_CTX_USE_SRP_ALPHABET) != 0)
(ctx->flags & 2) != 0Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 18925 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
16-18925
326 table = srpdata_ascii2bin;
executed 16 times by 1 test: table = srpdata_ascii2bin;
Executed by:
  • libcrypto.so.1.1
16
327 else-
328 table = data_ascii2bin;
executed 18925 times by 1 test: table = data_ascii2bin;
Executed by:
  • libcrypto.so.1.1
18925
329-
330 for (i = 0; i < inl; i++) {
i < inlDescription
TRUEevaluated 16252417 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 18917 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
18917-16252417
331 tmp = *(in++);-
332 v = conv_ascii2bin(tmp, table);-
333 if (v == B64_ERROR) {
v == 0xFFDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 16252411 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
6-16252411
334 rv = -1;-
335 goto end;
executed 6 times by 1 test: goto end;
Executed by:
  • libcrypto.so.1.1
6
336 }-
337-
338 if (tmp == '=') {
tmp == '='Description
TRUEevaluated 23615 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 16228796 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
23615-16228796
339 eof++;-
340 } else if (eof > 0 && B64_BASE64(v)) {
executed 23615 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
eof > 0Description
TRUEevaluated 13315 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 16215481 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(!(((v)|0x13) == 0xF3))Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 13311 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
4-16215481
341 /* More data after padding. */-
342 rv = -1;-
343 goto end;
executed 4 times by 1 test: goto end;
Executed by:
  • libcrypto.so.1.1
4
344 }-
345-
346 if (eof > 2) {
eof > 2Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 16252397 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
10-16252397
347 rv = -1;-
348 goto end;
executed 10 times by 1 test: goto end;
Executed by:
  • libcrypto.so.1.1
10
349 }-
350-
351 if (v == B64_EOF) {
v == 0xF2Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 16252393 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
4-16252393
352 seof = 1;-
353 goto tail;
executed 4 times by 1 test: goto tail;
Executed by:
  • libcrypto.so.1.1
4
354 }-
355-
356 /* Only save valid base64 characters. */-
357 if (B64_BASE64(v)) {
(!(((v)|0x13) == 0xF3))Description
TRUEevaluated 15991495 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 260898 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
260898-15991495
358 if (n >= 64) {
n >= 64Description
TRUEnever evaluated
FALSEevaluated 15991495 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-15991495
359 /*-
360 * We increment n once per loop, and empty the buffer as soon as-
361 * we reach 64 characters, so this can only happen if someone's-
362 * manually messed with the ctx. Refuse to write any more data.-
363 */-
364 rv = -1;-
365 goto end;
never executed: goto end;
0
366 }-
367 OPENSSL_assert(n < (int)sizeof(ctx->enc_data));-
368 d[n++] = tmp;-
369 }
executed 15991495 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
15991495
370-
371 if (n == 64) {
n == 64Description
TRUEevaluated 239986 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 16012407 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
239986-16012407
372 decoded_len = evp_decodeblock_int(ctx, out, d, n);-
373 n = 0;-
374 if (decoded_len < 0 || eof > decoded_len) {
decoded_len < 0Description
TRUEnever evaluated
FALSEevaluated 239986 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
eof > decoded_lenDescription
TRUEnever evaluated
FALSEevaluated 239986 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-239986
375 rv = -1;-
376 goto end;
never executed: goto end;
0
377 }-
378 ret += decoded_len - eof;-
379 out += decoded_len - eof;-
380 }
executed 239986 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
239986
381 }
executed 16252393 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
16252393
382-
383 /*-
384 * Legacy behaviour: if the current line is a full base64-block (i.e., has-
385 * 0 mod 4 base64 characters), it is processed immediately. We keep this-
386 * behaviour as applications may not be calling EVP_DecodeFinal properly.-
387 */-
388tail:
code before this statement executed 18917 times by 1 test: tail:
Executed by:
  • libcrypto.so.1.1
18917
389 if (n > 0) {
n > 0Description
TRUEevaluated 18502 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 419 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
419-18502
390 if ((n & 3) == 0) {
(n & 3) == 0Description
TRUEevaluated 18203 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 299 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
299-18203
391 decoded_len = evp_decodeblock_int(ctx, out, d, n);-
392 n = 0;-
393 if (decoded_len < 0 || eof > decoded_len) {
decoded_len < 0Description
TRUEnever evaluated
FALSEevaluated 18203 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
eof > decoded_lenDescription
TRUEnever evaluated
FALSEevaluated 18203 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-18203
394 rv = -1;-
395 goto end;
never executed: goto end;
0
396 }-
397 ret += (decoded_len - eof);-
398 } else if (seof) {
executed 18203 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
seofDescription
TRUEnever evaluated
FALSEevaluated 299 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-18203
399 /* EOF in the middle of a base64 block. */-
400 rv = -1;-
401 goto end;
never executed: goto end;
0
402 }-
403 }
executed 18502 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
18502
404-
405 rv = seof || (n == 0 && eof) ? 0 : 1;
seofDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 18917 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
n == 0Description
TRUEevaluated 18618 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 299 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
eofDescription
TRUEevaluated 13279 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 5339 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
4-18917
406end:
code before this statement executed 18921 times by 1 test: end:
Executed by:
  • libcrypto.so.1.1
18921
407 /* Legacy behaviour. This should probably rather be zeroed on error. */-
408 *outl = ret;-
409 ctx->num = n;-
410 return rv;
executed 18943 times by 1 test: return rv;
Executed by:
  • libcrypto.so.1.1
18943
411}-
412-
413static int evp_decodeblock_int(EVP_ENCODE_CTX *ctx, unsigned char *t,-
414 const unsigned char *f, int n)-
415{-
416 int i, ret = 0, a, b, c, d;-
417 unsigned long l;-
418 const unsigned char *table;-
419-
420 if (ctx != NULL && (ctx->flags & EVP_ENCODE_CTX_USE_SRP_ALPHABET) != 0)
ctx != ((void *)0)Description
TRUEevaluated 258201 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 14701 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(ctx->flags & 2) != 0Description
TRUEevaluated 92 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 258109 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
92-258201
421 table = srpdata_ascii2bin;
executed 92 times by 1 test: table = srpdata_ascii2bin;
Executed by:
  • libcrypto.so.1.1
92
422 else-
423 table = data_ascii2bin;
executed 272810 times by 1 test: table = data_ascii2bin;
Executed by:
  • libcrypto.so.1.1
272810
424-
425 /* trim white space from the start of the line. */-
426 while ((conv_ascii2bin(*f, table) == B64_WS) && (n > 0)) {
(conv_ascii2bi...able) == 0xE0)Description
TRUEnever evaluated
FALSEevaluated 272902 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(n > 0)Description
TRUEnever evaluated
FALSEnever evaluated
0-272902
427 f++;-
428 n--;-
429 }
never executed: end of block
0
430-
431 /*-
432 * strip off stuff at the end of the line ascii2bin values B64_WS,-
433 * B64_EOLN, B64_EOLN and B64_EOF-
434 */-
435 while ((n > 3) && (B64_NOT_BASE64(conv_ascii2bin(f[n - 1], table))))
(n > 3)Description
TRUEevaluated 272897 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 5 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
((((conv_ascii...x13) == 0xF3))Description
TRUEnever evaluated
FALSEevaluated 272897 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-272897
436 n--;
never executed: n--;
0
437-
438 if (n % 4 != 0)
n % 4 != 0Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 272890 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
12-272890
439 return -1;
executed 12 times by 1 test: return -1;
Executed by:
  • libcrypto.so.1.1
12
440-
441 for (i = 0; i < n; i += 4) {
i < nDescription
TRUEevaluated 4562859 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 272889 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
272889-4562859
442 a = conv_ascii2bin(*(f++), table);-
443 b = conv_ascii2bin(*(f++), table);-
444 c = conv_ascii2bin(*(f++), table);-
445 d = conv_ascii2bin(*(f++), table);-
446 if ((a & 0x80) || (b & 0x80) || (c & 0x80) || (d & 0x80))
(a & 0x80)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 4562858 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(b & 0x80)Description
TRUEnever evaluated
FALSEevaluated 4562858 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(c & 0x80)Description
TRUEnever evaluated
FALSEevaluated 4562858 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
(d & 0x80)Description
TRUEnever evaluated
FALSEevaluated 4562858 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
0-4562858
447 return -1;
executed 1 time by 1 test: return -1;
Executed by:
  • libcrypto.so.1.1
1
448 l = ((((unsigned long)a) << 18L) |-
449 (((unsigned long)b) << 12L) |-
450 (((unsigned long)c) << 6L) | (((unsigned long)d)));-
451 *(t++) = (unsigned char)(l >> 16L) & 0xff;-
452 *(t++) = (unsigned char)(l >> 8L) & 0xff;-
453 *(t++) = (unsigned char)(l) & 0xff;-
454 ret += 3;-
455 }
executed 4562858 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
4562858
456 return ret;
executed 272889 times by 1 test: return ret;
Executed by:
  • libcrypto.so.1.1
272889
457}-
458-
459int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n)-
460{-
461 return evp_decodeblock_int(NULL, t, f, n);
executed 14701 times by 1 test: return evp_decodeblock_int( ((void *)0) , t, f, n);
Executed by:
  • libcrypto.so.1.1
14701
462}-
463-
464int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl)-
465{-
466 int i;-
467-
468 *outl = 0;-
469 if (ctx->num != 0) {
ctx->num != 0Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 18261 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
12-18261
470 i = evp_decodeblock_int(ctx, out, ctx->enc_data, ctx->num);-
471 if (i < 0)
i < 0Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
0-12
472 return -1;
executed 12 times by 1 test: return -1;
Executed by:
  • libcrypto.so.1.1
12
473 ctx->num = 0;-
474 *outl = i;-
475 return 1;
never executed: return 1;
0
476 } else-
477 return 1;
executed 18261 times by 1 test: return 1;
Executed by:
  • libcrypto.so.1.1
18261
478}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2