Bug Summary

File:out/../deps/openssl/openssl/crypto/rc2/rc2_cbc.c
Warning:line 90, column 19
Although the value stored to 'tout0' is used in the enclosing expression, the value is never actually read from 'tout0'

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name rc2_cbc.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/home/maurizio/node-v18.6.0/out -resource-dir /usr/local/lib/clang/16.0.0 -D V8_DEPRECATION_WARNINGS -D V8_IMMINENT_DEPRECATION_WARNINGS -D _GLIBCXX_USE_CXX11_ABI=1 -D NODE_OPENSSL_CONF_NAME=nodejs_conf -D NODE_OPENSSL_HAS_QUIC -D __STDC_FORMAT_MACROS -D OPENSSL_NO_PINSHARED -D OPENSSL_THREADS -D OPENSSL_NO_HW -D OPENSSL_API_COMPAT=0x10100001L -D STATIC_LEGACY -D NDEBUG -D OPENSSL_USE_NODELETE -D L_ENDIAN -D OPENSSL_BUILDING_OPENSSL -D AES_ASM -D BSAES_ASM -D CMLL_ASM -D ECP_NISTZ256_ASM -D GHASH_ASM -D KECCAK1600_ASM -D MD5_ASM -D OPENSSL_BN_ASM_GF2m -D OPENSSL_BN_ASM_MONT -D OPENSSL_BN_ASM_MONT5 -D OPENSSL_CPUID_OBJ -D OPENSSL_IA32_SSE2 -D PADLOCK_ASM -D POLY1305_ASM -D SHA1_ASM -D SHA256_ASM -D SHA512_ASM -D VPAES_ASM -D WHIRLPOOL_ASM -D X25519_ASM -D OPENSSL_PIC -D MODULESDIR="/home/maurizio/node-v18.6.0/out/Release/obj.target/deps/openssl/lib/openssl-modules" -D OPENSSLDIR="/home/maurizio/node-v18.6.0/out/Release/obj.target/deps/openssl" -D OPENSSLDIR="/etc/ssl" -D ENGINESDIR="/dev/null" -D TERMIOS -I ../deps/openssl/openssl -I ../deps/openssl/openssl/include -I ../deps/openssl/openssl/crypto -I ../deps/openssl/openssl/crypto/include -I ../deps/openssl/openssl/crypto/modes -I ../deps/openssl/openssl/crypto/ec/curve448 -I ../deps/openssl/openssl/crypto/ec/curve448/arch_32 -I ../deps/openssl/openssl/providers/common/include -I ../deps/openssl/openssl/providers/implementations/include -I ../deps/openssl/config -I ../deps/openssl/config/archs/linux-x86_64/asm -I ../deps/openssl/config/archs/linux-x86_64/asm/include -I ../deps/openssl/config/archs/linux-x86_64/asm/crypto -I ../deps/openssl/config/archs/linux-x86_64/asm/crypto/include/internal -I ../deps/openssl/config/archs/linux-x86_64/asm/providers/common/include -internal-isystem /usr/local/lib/clang/16.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-redhat-linux/8/../../../../x86_64-redhat-linux/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O3 -Wno-unused-parameter -Wno-missing-field-initializers -Wno-old-style-declaration -fdebug-compilation-dir=/home/maurizio/node-v18.6.0/out -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/scan-build-2022-08-22-142216-507842-1 -x c ../deps/openssl/openssl/crypto/rc2/rc2_cbc.c
1/*
2 * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License 2.0 (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/*
11 * RC2 low level APIs are deprecated for public use, but still ok for internal
12 * use.
13 */
14#include "internal/deprecated.h"
15
16#include <openssl/rc2.h>
17#include "rc2_local.h"
18
19void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
20 RC2_KEY *ks, unsigned char *iv, int encrypt)
21{
22 register unsigned long tin0, tin1;
23 register unsigned long tout0, tout1, xor0, xor1;
24 register long l = length;
25 unsigned long tin[2];
26
27 if (encrypt) {
28 c2l(iv, tout0)(tout0 =((unsigned long)(*((iv)++))) , tout0|=((unsigned long
)(*((iv)++)))<< 8L, tout0|=((unsigned long)(*((iv)++)))
<<16L, tout0|=((unsigned long)(*((iv)++)))<<24L)
;
29 c2l(iv, tout1)(tout1 =((unsigned long)(*((iv)++))) , tout1|=((unsigned long
)(*((iv)++)))<< 8L, tout1|=((unsigned long)(*((iv)++)))
<<16L, tout1|=((unsigned long)(*((iv)++)))<<24L)
;
30 iv -= 8;
31 for (l -= 8; l >= 0; l -= 8) {
32 c2l(in, tin0)(tin0 =((unsigned long)(*((in)++))) , tin0|=((unsigned long)(
*((in)++)))<< 8L, tin0|=((unsigned long)(*((in)++)))<<
16L, tin0|=((unsigned long)(*((in)++)))<<24L)
;
33 c2l(in, tin1)(tin1 =((unsigned long)(*((in)++))) , tin1|=((unsigned long)(
*((in)++)))<< 8L, tin1|=((unsigned long)(*((in)++)))<<
16L, tin1|=((unsigned long)(*((in)++)))<<24L)
;
34 tin0 ^= tout0;
35 tin1 ^= tout1;
36 tin[0] = tin0;
37 tin[1] = tin1;
38 RC2_encrypt(tin, ks);
39 tout0 = tin[0];
40 l2c(tout0, out)(*((out)++)=(unsigned char)(((tout0) )&0xff), *((out)++)=
(unsigned char)(((tout0)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout0)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout0)>>24L)&0xff))
;
41 tout1 = tin[1];
42 l2c(tout1, out)(*((out)++)=(unsigned char)(((tout1) )&0xff), *((out)++)=
(unsigned char)(((tout1)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout1)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout1)>>24L)&0xff))
;
43 }
44 if (l != -8) {
45 c2ln(in, tin0, tin1, l + 8){ in+=l + 8; tin0=tin1=0; switch (l + 8) { case 8: tin1 =((unsigned
long)(*(--(in))))<<24L; case 7: tin1|=((unsigned long)
(*(--(in))))<<16L; case 6: tin1|=((unsigned long)(*(--(
in))))<< 8L; case 5: tin1|=((unsigned long)(*(--(in))))
; case 4: tin0 =((unsigned long)(*(--(in))))<<24L; case
3: tin0|=((unsigned long)(*(--(in))))<<16L; case 2: tin0
|=((unsigned long)(*(--(in))))<< 8L; case 1: tin0|=((unsigned
long)(*(--(in)))); } }
;
46 tin0 ^= tout0;
47 tin1 ^= tout1;
48 tin[0] = tin0;
49 tin[1] = tin1;
50 RC2_encrypt(tin, ks);
51 tout0 = tin[0];
52 l2c(tout0, out)(*((out)++)=(unsigned char)(((tout0) )&0xff), *((out)++)=
(unsigned char)(((tout0)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout0)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout0)>>24L)&0xff))
;
53 tout1 = tin[1];
54 l2c(tout1, out)(*((out)++)=(unsigned char)(((tout1) )&0xff), *((out)++)=
(unsigned char)(((tout1)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout1)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout1)>>24L)&0xff))
;
55 }
56 l2c(tout0, iv)(*((iv)++)=(unsigned char)(((tout0) )&0xff), *((iv)++)=(unsigned
char)(((tout0)>> 8L)&0xff), *((iv)++)=(unsigned char
)(((tout0)>>16L)&0xff), *((iv)++)=(unsigned char)((
(tout0)>>24L)&0xff))
;
57 l2c(tout1, iv)(*((iv)++)=(unsigned char)(((tout1) )&0xff), *((iv)++)=(unsigned
char)(((tout1)>> 8L)&0xff), *((iv)++)=(unsigned char
)(((tout1)>>16L)&0xff), *((iv)++)=(unsigned char)((
(tout1)>>24L)&0xff))
;
58 } else {
59 c2l(iv, xor0)(xor0 =((unsigned long)(*((iv)++))) , xor0|=((unsigned long)(
*((iv)++)))<< 8L, xor0|=((unsigned long)(*((iv)++)))<<
16L, xor0|=((unsigned long)(*((iv)++)))<<24L)
;
60 c2l(iv, xor1)(xor1 =((unsigned long)(*((iv)++))) , xor1|=((unsigned long)(
*((iv)++)))<< 8L, xor1|=((unsigned long)(*((iv)++)))<<
16L, xor1|=((unsigned long)(*((iv)++)))<<24L)
;
61 iv -= 8;
62 for (l -= 8; l >= 0; l -= 8) {
63 c2l(in, tin0)(tin0 =((unsigned long)(*((in)++))) , tin0|=((unsigned long)(
*((in)++)))<< 8L, tin0|=((unsigned long)(*((in)++)))<<
16L, tin0|=((unsigned long)(*((in)++)))<<24L)
;
64 tin[0] = tin0;
65 c2l(in, tin1)(tin1 =((unsigned long)(*((in)++))) , tin1|=((unsigned long)(
*((in)++)))<< 8L, tin1|=((unsigned long)(*((in)++)))<<
16L, tin1|=((unsigned long)(*((in)++)))<<24L)
;
66 tin[1] = tin1;
67 RC2_decrypt(tin, ks);
68 tout0 = tin[0] ^ xor0;
69 tout1 = tin[1] ^ xor1;
70 l2c(tout0, out)(*((out)++)=(unsigned char)(((tout0) )&0xff), *((out)++)=
(unsigned char)(((tout0)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout0)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout0)>>24L)&0xff))
;
71 l2c(tout1, out)(*((out)++)=(unsigned char)(((tout1) )&0xff), *((out)++)=
(unsigned char)(((tout1)>> 8L)&0xff), *((out)++)=(unsigned
char)(((tout1)>>16L)&0xff), *((out)++)=(unsigned char
)(((tout1)>>24L)&0xff))
;
72 xor0 = tin0;
73 xor1 = tin1;
74 }
75 if (l != -8) {
76 c2l(in, tin0)(tin0 =((unsigned long)(*((in)++))) , tin0|=((unsigned long)(
*((in)++)))<< 8L, tin0|=((unsigned long)(*((in)++)))<<
16L, tin0|=((unsigned long)(*((in)++)))<<24L)
;
77 tin[0] = tin0;
78 c2l(in, tin1)(tin1 =((unsigned long)(*((in)++))) , tin1|=((unsigned long)(
*((in)++)))<< 8L, tin1|=((unsigned long)(*((in)++)))<<
16L, tin1|=((unsigned long)(*((in)++)))<<24L)
;
79 tin[1] = tin1;
80 RC2_decrypt(tin, ks);
81 tout0 = tin[0] ^ xor0;
82 tout1 = tin[1] ^ xor1;
83 l2cn(tout0, tout1, out, l + 8){ out+=l + 8; switch (l + 8) { case 8: *(--(out))=(unsigned char
)(((tout1)>>24L)&0xff); case 7: *(--(out))=(unsigned
char)(((tout1)>>16L)&0xff); case 6: *(--(out))=(unsigned
char)(((tout1)>> 8L)&0xff); case 5: *(--(out))=(unsigned
char)(((tout1) )&0xff); case 4: *(--(out))=(unsigned char
)(((tout0)>>24L)&0xff); case 3: *(--(out))=(unsigned
char)(((tout0)>>16L)&0xff); case 2: *(--(out))=(unsigned
char)(((tout0)>> 8L)&0xff); case 1: *(--(out))=(unsigned
char)(((tout0) )&0xff); } }
;
84 xor0 = tin0;
85 xor1 = tin1;
86 }
87 l2c(xor0, iv)(*((iv)++)=(unsigned char)(((xor0) )&0xff), *((iv)++)=(unsigned
char)(((xor0)>> 8L)&0xff), *((iv)++)=(unsigned char
)(((xor0)>>16L)&0xff), *((iv)++)=(unsigned char)(((
xor0)>>24L)&0xff))
;
88 l2c(xor1, iv)(*((iv)++)=(unsigned char)(((xor1) )&0xff), *((iv)++)=(unsigned
char)(((xor1)>> 8L)&0xff), *((iv)++)=(unsigned char
)(((xor1)>>16L)&0xff), *((iv)++)=(unsigned char)(((
xor1)>>24L)&0xff))
;
89 }
90 tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
Although the value stored to 'tout0' is used in the enclosing expression, the value is never actually read from 'tout0'
91 tin[0] = tin[1] = 0;
92}
93
94void RC2_encrypt(unsigned long *d, RC2_KEY *key)
95{
96 int i, n;
97 register RC2_INT *p0, *p1;
98 register RC2_INT x0, x1, x2, x3, t;
99 unsigned long l;
100
101 l = d[0];
102 x0 = (RC2_INT) l & 0xffff;
103 x1 = (RC2_INT) (l >> 16L);
104 l = d[1];
105 x2 = (RC2_INT) l & 0xffff;
106 x3 = (RC2_INT) (l >> 16L);
107
108 n = 3;
109 i = 5;
110
111 p0 = p1 = &(key->data[0]);
112 for (;;) {
113 t = (x0 + (x1 & ~x3) + (x2 & x3) + *(p0++)) & 0xffff;
114 x0 = (t << 1) | (t >> 15);
115 t = (x1 + (x2 & ~x0) + (x3 & x0) + *(p0++)) & 0xffff;
116 x1 = (t << 2) | (t >> 14);
117 t = (x2 + (x3 & ~x1) + (x0 & x1) + *(p0++)) & 0xffff;
118 x2 = (t << 3) | (t >> 13);
119 t = (x3 + (x0 & ~x2) + (x1 & x2) + *(p0++)) & 0xffff;
120 x3 = (t << 5) | (t >> 11);
121
122 if (--i == 0) {
123 if (--n == 0)
124 break;
125 i = (n == 2) ? 6 : 5;
126
127 x0 += p1[x3 & 0x3f];
128 x1 += p1[x0 & 0x3f];
129 x2 += p1[x1 & 0x3f];
130 x3 += p1[x2 & 0x3f];
131 }
132 }
133
134 d[0] =
135 (unsigned long)(x0 & 0xffff) | ((unsigned long)(x1 & 0xffff) << 16L);
136 d[1] =
137 (unsigned long)(x2 & 0xffff) | ((unsigned long)(x3 & 0xffff) << 16L);
138}
139
140void RC2_decrypt(unsigned long *d, RC2_KEY *key)
141{
142 int i, n;
143 register RC2_INT *p0, *p1;
144 register RC2_INT x0, x1, x2, x3, t;
145 unsigned long l;
146
147 l = d[0];
148 x0 = (RC2_INT) l & 0xffff;
149 x1 = (RC2_INT) (l >> 16L);
150 l = d[1];
151 x2 = (RC2_INT) l & 0xffff;
152 x3 = (RC2_INT) (l >> 16L);
153
154 n = 3;
155 i = 5;
156
157 p0 = &(key->data[63]);
158 p1 = &(key->data[0]);
159 for (;;) {
160 t = ((x3 << 11) | (x3 >> 5)) & 0xffff;
161 x3 = (t - (x0 & ~x2) - (x1 & x2) - *(p0--)) & 0xffff;
162 t = ((x2 << 13) | (x2 >> 3)) & 0xffff;
163 x2 = (t - (x3 & ~x1) - (x0 & x1) - *(p0--)) & 0xffff;
164 t = ((x1 << 14) | (x1 >> 2)) & 0xffff;
165 x1 = (t - (x2 & ~x0) - (x3 & x0) - *(p0--)) & 0xffff;
166 t = ((x0 << 15) | (x0 >> 1)) & 0xffff;
167 x0 = (t - (x1 & ~x3) - (x2 & x3) - *(p0--)) & 0xffff;
168
169 if (--i == 0) {
170 if (--n == 0)
171 break;
172 i = (n == 2) ? 6 : 5;
173
174 x3 = (x3 - p1[x2 & 0x3f]) & 0xffff;
175 x2 = (x2 - p1[x1 & 0x3f]) & 0xffff;
176 x1 = (x1 - p1[x0 & 0x3f]) & 0xffff;
177 x0 = (x0 - p1[x3 & 0x3f]) & 0xffff;
178 }
179 }
180
181 d[0] =
182 (unsigned long)(x0 & 0xffff) | ((unsigned long)(x1 & 0xffff) << 16L);
183 d[1] =
184 (unsigned long)(x2 & 0xffff) | ((unsigned long)(x3 & 0xffff) << 16L);
185}