Bug Summary

File:out/../deps/openssl/openssl/crypto/des/xcbc_enc.c
Warning:line 107, column 19
Although the value stored to 'outW0' is used in the enclosing expression, the value is never actually read from 'outW0'

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 xcbc_enc.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/des/xcbc_enc.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 * DES low level APIs are deprecated for public use, but still ok for internal
12 * use.
13 */
14#include "internal/deprecated.h"
15
16#include "des_local.h"
17
18/* RSA's DESX */
19
20void DES_xcbc_encrypt(const unsigned char *in, unsigned char *out,
21 long length, DES_key_schedule *schedule,
22 DES_cblock *ivec, const_DES_cblock *inw,
23 const_DES_cblock *outw, int enc)
24{
25 register DES_LONG tin0, tin1;
26 register DES_LONG tout0, tout1, xor0, xor1;
27 register DES_LONG inW0, inW1, outW0, outW1;
28 register const unsigned char *in2;
29 register long l = length;
30 DES_LONG tin[2];
31 unsigned char *iv;
32
33 in2 = &(*inw)[0];
34 c2l(in2, inW0)(inW0 =((DES_LONG)(*((in2)++))) , inW0|=((DES_LONG)(*((in2)++
)))<< 8L, inW0|=((DES_LONG)(*((in2)++)))<<16L, inW0
|=((DES_LONG)(*((in2)++)))<<24L)
;
35 c2l(in2, inW1)(inW1 =((DES_LONG)(*((in2)++))) , inW1|=((DES_LONG)(*((in2)++
)))<< 8L, inW1|=((DES_LONG)(*((in2)++)))<<16L, inW1
|=((DES_LONG)(*((in2)++)))<<24L)
;
36 in2 = &(*outw)[0];
37 c2l(in2, outW0)(outW0 =((DES_LONG)(*((in2)++))) , outW0|=((DES_LONG)(*((in2)
++)))<< 8L, outW0|=((DES_LONG)(*((in2)++)))<<16L,
outW0|=((DES_LONG)(*((in2)++)))<<24L)
;
38 c2l(in2, outW1)(outW1 =((DES_LONG)(*((in2)++))) , outW1|=((DES_LONG)(*((in2)
++)))<< 8L, outW1|=((DES_LONG)(*((in2)++)))<<16L,
outW1|=((DES_LONG)(*((in2)++)))<<24L)
;
39
40 iv = &(*ivec)[0];
41
42 if (enc) {
43 c2l(iv, tout0)(tout0 =((DES_LONG)(*((iv)++))) , tout0|=((DES_LONG)(*((iv)++
)))<< 8L, tout0|=((DES_LONG)(*((iv)++)))<<16L, tout0
|=((DES_LONG)(*((iv)++)))<<24L)
;
44 c2l(iv, tout1)(tout1 =((DES_LONG)(*((iv)++))) , tout1|=((DES_LONG)(*((iv)++
)))<< 8L, tout1|=((DES_LONG)(*((iv)++)))<<16L, tout1
|=((DES_LONG)(*((iv)++)))<<24L)
;
45 for (l -= 8; l >= 0; l -= 8) {
46 c2l(in, tin0)(tin0 =((DES_LONG)(*((in)++))) , tin0|=((DES_LONG)(*((in)++))
)<< 8L, tin0|=((DES_LONG)(*((in)++)))<<16L, tin0|=
((DES_LONG)(*((in)++)))<<24L)
;
47 c2l(in, tin1)(tin1 =((DES_LONG)(*((in)++))) , tin1|=((DES_LONG)(*((in)++))
)<< 8L, tin1|=((DES_LONG)(*((in)++)))<<16L, tin1|=
((DES_LONG)(*((in)++)))<<24L)
;
48 tin0 ^= tout0 ^ inW0;
49 tin[0] = tin0;
50 tin1 ^= tout1 ^ inW1;
51 tin[1] = tin1;
52 DES_encrypt1(tin, schedule, DES_ENCRYPT1);
53 tout0 = tin[0] ^ outW0;
54 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))
;
55 tout1 = tin[1] ^ outW1;
56 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))
;
57 }
58 if (l != -8) {
59 c2ln(in, tin0, tin1, l + 8){ in+=l + 8; tin0=tin1=0; switch (l + 8) { case 8: tin1 =((DES_LONG
)(*(--(in))))<<24L; case 7: tin1|=((DES_LONG)(*(--(in))
))<<16L; case 6: tin1|=((DES_LONG)(*(--(in))))<< 8L
; case 5: tin1|=((DES_LONG)(*(--(in)))); case 4: tin0 =((DES_LONG
)(*(--(in))))<<24L; case 3: tin0|=((DES_LONG)(*(--(in))
))<<16L; case 2: tin0|=((DES_LONG)(*(--(in))))<< 8L
; case 1: tin0|=((DES_LONG)(*(--(in)))); } }
;
60 tin0 ^= tout0 ^ inW0;
61 tin[0] = tin0;
62 tin1 ^= tout1 ^ inW1;
63 tin[1] = tin1;
64 DES_encrypt1(tin, schedule, DES_ENCRYPT1);
65 tout0 = tin[0] ^ outW0;
66 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))
;
67 tout1 = tin[1] ^ outW1;
68 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))
;
69 }
70 iv = &(*ivec)[0];
71 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))
;
72 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))
;
73 } else {
74 c2l(iv, xor0)(xor0 =((DES_LONG)(*((iv)++))) , xor0|=((DES_LONG)(*((iv)++))
)<< 8L, xor0|=((DES_LONG)(*((iv)++)))<<16L, xor0|=
((DES_LONG)(*((iv)++)))<<24L)
;
75 c2l(iv, xor1)(xor1 =((DES_LONG)(*((iv)++))) , xor1|=((DES_LONG)(*((iv)++))
)<< 8L, xor1|=((DES_LONG)(*((iv)++)))<<16L, xor1|=
((DES_LONG)(*((iv)++)))<<24L)
;
76 for (l -= 8; l > 0; l -= 8) {
77 c2l(in, tin0)(tin0 =((DES_LONG)(*((in)++))) , tin0|=((DES_LONG)(*((in)++))
)<< 8L, tin0|=((DES_LONG)(*((in)++)))<<16L, tin0|=
((DES_LONG)(*((in)++)))<<24L)
;
78 tin[0] = tin0 ^ outW0;
79 c2l(in, tin1)(tin1 =((DES_LONG)(*((in)++))) , tin1|=((DES_LONG)(*((in)++))
)<< 8L, tin1|=((DES_LONG)(*((in)++)))<<16L, tin1|=
((DES_LONG)(*((in)++)))<<24L)
;
80 tin[1] = tin1 ^ outW1;
81 DES_encrypt1(tin, schedule, DES_DECRYPT0);
82 tout0 = tin[0] ^ xor0 ^ inW0;
83 tout1 = tin[1] ^ xor1 ^ inW1;
84 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))
;
85 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))
;
86 xor0 = tin0;
87 xor1 = tin1;
88 }
89 if (l != -8) {
90 c2l(in, tin0)(tin0 =((DES_LONG)(*((in)++))) , tin0|=((DES_LONG)(*((in)++))
)<< 8L, tin0|=((DES_LONG)(*((in)++)))<<16L, tin0|=
((DES_LONG)(*((in)++)))<<24L)
;
91 tin[0] = tin0 ^ outW0;
92 c2l(in, tin1)(tin1 =((DES_LONG)(*((in)++))) , tin1|=((DES_LONG)(*((in)++))
)<< 8L, tin1|=((DES_LONG)(*((in)++)))<<16L, tin1|=
((DES_LONG)(*((in)++)))<<24L)
;
93 tin[1] = tin1 ^ outW1;
94 DES_encrypt1(tin, schedule, DES_DECRYPT0);
95 tout0 = tin[0] ^ xor0 ^ inW0;
96 tout1 = tin[1] ^ xor1 ^ inW1;
97 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); } }
;
98 xor0 = tin0;
99 xor1 = tin1;
100 }
101
102 iv = &(*ivec)[0];
103 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))
;
104 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))
;
105 }
106 tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
107 inW0 = inW1 = outW0 = outW1 = 0;
Although the value stored to 'outW0' is used in the enclosing expression, the value is never actually read from 'outW0'
108 tin[0] = tin[1] = 0;
109}