OpenCoverage

cbc128.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/crypto/modes/cbc128.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 2008-2016 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 <openssl/crypto.h>-
11#include "modes_lcl.h"-
12#include <string.h>-
13-
14#if !defined(STRICT_ALIGNMENT) && !defined(PEDANTIC)-
15# define STRICT_ALIGNMENT 0-
16#endif-
17-
18void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,-
19 size_t len, const void *key,-
20 unsigned char ivec[16], block128_f block)-
21{-
22 size_t n;-
23 const unsigned char *iv = ivec;-
24-
25 if (len == 0)
len == 0Description
TRUEnever evaluated
FALSEevaluated 689 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
0-689
26 return;
never executed: return;
0
27-
28#if !defined(OPENSSL_SMALL_FOOTPRINT)-
29 if (STRICT_ALIGNMENT &&-
30 ((size_t)in | (size_t)out | (size_t)ivec) % sizeof(size_t) != 0) {
dead code: ((size_t)in | (size_t)out | (size_t)ivec) % sizeof(size_t) != 0
dead code: { while (len >= 16) { for (n = 0; n < 16; ++n) out[n] = in[n] ^ iv[n]; (*block) (out, out, key); iv = out; len -= 16; in += 16; out += 16; } }
-
31 while (len >= 16) {
dead code: { while (len >= 16) { for (n = 0; n < 16; ++n) out[n] = in[n] ^ iv[n]; (*block) (out, out, key); iv = out; len -= 16; in += 16; out += 16; } }
-
32 for (n = 0; n < 16; ++n)
dead code: { while (len >= 16) { for (n = 0; n < 16; ++n) out[n] = in[n] ^ iv[n]; (*block) (out, out, key); iv = out; len -= 16; in += 16; out += 16; } }
-
33 out[n] = in[n] ^ iv[n];
dead code: { while (len >= 16) { for (n = 0; n < 16; ++n) out[n] = in[n] ^ iv[n]; (*block) (out, out, key); iv = out; len -= 16; in += 16; out += 16; } }
-
34 (*block) (out, out, key);
dead code: { while (len >= 16) { for (n = 0; n < 16; ++n) out[n] = in[n] ^ iv[n]; (*block) (out, out, key); iv = out; len -= 16; in += 16; out += 16; } }
-
35 iv = out;
dead code: { while (len >= 16) { for (n = 0; n < 16; ++n) out[n] = in[n] ^ iv[n]; (*block) (out, out, key); iv = out; len -= 16; in += 16; out += 16; } }
-
36 len -= 16;
dead code: { while (len >= 16) { for (n = 0; n < 16; ++n) out[n] = in[n] ^ iv[n]; (*block) (out, out, key); iv = out; len -= 16; in += 16; out += 16; } }
-
37 in += 16;
dead code: { while (len >= 16) { for (n = 0; n < 16; ++n) out[n] = in[n] ^ iv[n]; (*block) (out, out, key); iv = out; len -= 16; in += 16; out += 16; } }
-
38 out += 16;
dead code: { while (len >= 16) { for (n = 0; n < 16; ++n) out[n] = in[n] ^ iv[n]; (*block) (out, out, key); iv = out; len -= 16; in += 16; out += 16; } }
-
39 }
dead code: { while (len >= 16) { for (n = 0; n < 16; ++n) out[n] = in[n] ^ iv[n]; (*block) (out, out, key); iv = out; len -= 16; in += 16; out += 16; } }
-
40 } else {
dead code: { while (len >= 16) { for (n = 0; n < 16; ++n) out[n] = in[n] ^ iv[n]; (*block) (out, out, key); iv = out; len -= 16; in += 16; out += 16; } }
-
41 while (len >= 16) {
len >= 16Description
TRUEevaluated 3825 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
FALSEevaluated 689 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
689-3825
42 for (n = 0; n < 16; n += sizeof(size_t))
n < 16Description
TRUEevaluated 7650 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
FALSEevaluated 3825 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
3825-7650
43 *(size_t *)(out + n) =
executed 7650 times by 2 tests: *(size_t *)(out + n) = *(size_t *)(in + n) ^ *(size_t *)(iv + n);
Executed by:
  • libcrypto.so.1.1
  • modes_internal_test
7650
44 *(size_t *)(in + n) ^ *(size_t *)(iv + n);
executed 7650 times by 2 tests: *(size_t *)(out + n) = *(size_t *)(in + n) ^ *(size_t *)(iv + n);
Executed by:
  • libcrypto.so.1.1
  • modes_internal_test
7650
45 (*block) (out, out, key);-
46 iv = out;-
47 len -= 16;-
48 in += 16;-
49 out += 16;-
50 }
executed 3825 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • modes_internal_test
3825
51 }
executed 689 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • modes_internal_test
689
52#endif-
53 while (len) {
lenDescription
TRUEnever evaluated
FALSEevaluated 689 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
0-689
54 for (n = 0; n < 16 && n < len; ++n)
n < 16Description
TRUEnever evaluated
FALSEnever evaluated
n < lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
55 out[n] = in[n] ^ iv[n];
never executed: out[n] = in[n] ^ iv[n];
0
56 for (; n < 16; ++n)
n < 16Description
TRUEnever evaluated
FALSEnever evaluated
0
57 out[n] = iv[n];
never executed: out[n] = iv[n];
0
58 (*block) (out, out, key);-
59 iv = out;-
60 if (len <= 16)
len <= 16Description
TRUEnever evaluated
FALSEnever evaluated
0
61 break;
never executed: break;
0
62 len -= 16;-
63 in += 16;-
64 out += 16;-
65 }
never executed: end of block
0
66 memcpy(ivec, iv, 16);-
67}
executed 689 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • modes_internal_test
689
68-
69void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,-
70 size_t len, const void *key,-
71 unsigned char ivec[16], block128_f block)-
72{-
73 size_t n;-
74 union {-
75 size_t t[16 / sizeof(size_t)];-
76 unsigned char c[16];-
77 } tmp;-
78-
79 if (len == 0)
len == 0Description
TRUEnever evaluated
FALSEevaluated 473 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
0-473
80 return;
never executed: return;
0
81-
82#if !defined(OPENSSL_SMALL_FOOTPRINT)-
83 if (in != out) {
in != outDescription
TRUEevaluated 417 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
FALSEevaluated 56 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
56-417
84 const unsigned char *iv = ivec;-
85-
86 if (STRICT_ALIGNMENT &&-
87 ((size_t)in | (size_t)out | (size_t)ivec) % sizeof(size_t) != 0) {
dead code: ((size_t)in | (size_t)out | (size_t)ivec) % sizeof(size_t) != 0
dead code: { while (len >= 16) { (*block) (in, out, key); for (n = 0; n < 16; ++n) out[n] ^= iv[n]; iv = in; len -= 16; in += 16; out += 16; } }
-
88 while (len >= 16) {
dead code: { while (len >= 16) { (*block) (in, out, key); for (n = 0; n < 16; ++n) out[n] ^= iv[n]; iv = in; len -= 16; in += 16; out += 16; } }
-
89 (*block) (in, out, key);
dead code: { while (len >= 16) { (*block) (in, out, key); for (n = 0; n < 16; ++n) out[n] ^= iv[n]; iv = in; len -= 16; in += 16; out += 16; } }
-
90 for (n = 0; n < 16; ++n)
dead code: { while (len >= 16) { (*block) (in, out, key); for (n = 0; n < 16; ++n) out[n] ^= iv[n]; iv = in; len -= 16; in += 16; out += 16; } }
-
91 out[n] ^= iv[n];
dead code: { while (len >= 16) { (*block) (in, out, key); for (n = 0; n < 16; ++n) out[n] ^= iv[n]; iv = in; len -= 16; in += 16; out += 16; } }
-
92 iv = in;
dead code: { while (len >= 16) { (*block) (in, out, key); for (n = 0; n < 16; ++n) out[n] ^= iv[n]; iv = in; len -= 16; in += 16; out += 16; } }
-
93 len -= 16;
dead code: { while (len >= 16) { (*block) (in, out, key); for (n = 0; n < 16; ++n) out[n] ^= iv[n]; iv = in; len -= 16; in += 16; out += 16; } }
-
94 in += 16;
dead code: { while (len >= 16) { (*block) (in, out, key); for (n = 0; n < 16; ++n) out[n] ^= iv[n]; iv = in; len -= 16; in += 16; out += 16; } }
-
95 out += 16;
dead code: { while (len >= 16) { (*block) (in, out, key); for (n = 0; n < 16; ++n) out[n] ^= iv[n]; iv = in; len -= 16; in += 16; out += 16; } }
-
96 }
dead code: { while (len >= 16) { (*block) (in, out, key); for (n = 0; n < 16; ++n) out[n] ^= iv[n]; iv = in; len -= 16; in += 16; out += 16; } }
-
97 } else if (16 % sizeof(size_t) == 0) { /* always true */
16 % sizeof(size_t) == 0Description
TRUEevaluated 417 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
FALSEnever evaluated
dead code: { while (len >= 16) { (*block) (in, out, key); for (n = 0; n < 16; ++n) out[n] ^= iv[n]; iv = in; len -= 16; in += 16; out += 16; } }
-
98 while (len >= 16) {
len >= 16Description
TRUEevaluated 3136 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
FALSEevaluated 417 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
417-3136
99 size_t *out_t = (size_t *)out, *iv_t = (size_t *)iv;-
100-
101 (*block) (in, out, key);-
102 for (n = 0; n < 16 / sizeof(size_t); n++)
n < 16 / sizeof(size_t)Description
TRUEevaluated 6272 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
FALSEevaluated 3136 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
3136-6272
103 out_t[n] ^= iv_t[n];
executed 6272 times by 2 tests: out_t[n] ^= iv_t[n];
Executed by:
  • libcrypto.so.1.1
  • modes_internal_test
6272
104 iv = in;-
105 len -= 16;-
106 in += 16;-
107 out += 16;-
108 }
executed 3136 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • modes_internal_test
3136
109 }
executed 417 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • modes_internal_test
417
110 memcpy(ivec, iv, 16);-
111 } else {
executed 417 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • modes_internal_test
417
112 if (STRICT_ALIGNMENT &&-
113 ((size_t)in | (size_t)out | (size_t)ivec) % sizeof(size_t) != 0) {
dead code: ((size_t)in | (size_t)out | (size_t)ivec) % sizeof(size_t) != 0
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
114 unsigned char c;
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
115 while (len >= 16) {
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
116 (*block) (in, tmp.c, key);
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
117 for (n = 0; n < 16; ++n) {
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
118 c = in[n];
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
119 out[n] = tmp.c[n] ^ ivec[n];
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
120 ivec[n] = c;
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
121 }
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
122 len -= 16;
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
123 in += 16;
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
124 out += 16;
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
125 }
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
126 } else if (16 % sizeof(size_t) == 0) { /* always true */
16 % sizeof(size_t) == 0Description
TRUEevaluated 56 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEnever evaluated
dead code: { unsigned char c; while (len >= 16) { (*block) (in, tmp.c, key); for (n = 0; n < 16; ++n) { c = in[n]; out[n] = tmp.c[n] ^ ivec[n]; ivec[n] = c; } len -= 16; in += 16; out += 16; } }
-
127 while (len >= 16) {
len >= 16Description
TRUEevaluated 814 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 56 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
56-814
128 size_t c, *out_t = (size_t *)out, *ivec_t = (size_t *)ivec;-
129 const size_t *in_t = (const size_t *)in;-
130-
131 (*block) (in, tmp.c, key);-
132 for (n = 0; n < 16 / sizeof(size_t); n++) {
n < 16 / sizeof(size_t)Description
TRUEevaluated 1628 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
FALSEevaluated 814 times by 1 test
Evaluated by:
  • libcrypto.so.1.1
814-1628
133 c = in_t[n];-
134 out_t[n] = tmp.t[n] ^ ivec_t[n];-
135 ivec_t[n] = c;-
136 }
executed 1628 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
1628
137 len -= 16;-
138 in += 16;-
139 out += 16;-
140 }
executed 814 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
814
141 }
executed 56 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
56
142 }
executed 56 times by 1 test: end of block
Executed by:
  • libcrypto.so.1.1
56
143#endif-
144 while (len) {
lenDescription
TRUEnever evaluated
FALSEevaluated 473 times by 2 tests
Evaluated by:
  • libcrypto.so.1.1
  • modes_internal_test
0-473
145 unsigned char c;-
146 (*block) (in, tmp.c, key);-
147 for (n = 0; n < 16 && n < len; ++n) {
n < 16Description
TRUEnever evaluated
FALSEnever evaluated
n < lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
148 c = in[n];-
149 out[n] = tmp.c[n] ^ ivec[n];-
150 ivec[n] = c;-
151 }
never executed: end of block
0
152 if (len <= 16) {
len <= 16Description
TRUEnever evaluated
FALSEnever evaluated
0
153 for (; n < 16; ++n)
n < 16Description
TRUEnever evaluated
FALSEnever evaluated
0
154 ivec[n] = in[n];
never executed: ivec[n] = in[n];
0
155 break;
never executed: break;
0
156 }-
157 len -= 16;-
158 in += 16;-
159 out += 16;-
160 }
never executed: end of block
0
161}
executed 473 times by 2 tests: end of block
Executed by:
  • libcrypto.so.1.1
  • modes_internal_test
473
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2