Bug Summary

File:src/lib/libcrypto/bf/bf_enc.c
Warning:line 300, column 24
Although the value stored to 'tout1' is used in the enclosing expression, the value is never actually read from 'tout1'

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple amd64-unknown-openbsd7.4 -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name bf_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 1 -pic-is-pie -mframe-pointer=all -relaxed-aliasing -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -target-feature +retpoline-indirect-calls -target-feature +retpoline-indirect-branches -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/usr/src/lib/libcrypto/obj -resource-dir /usr/local/llvm16/lib/clang/16 -D LIBRESSL_INTERNAL -D HAVE_FUNOPEN -I /usr/src/lib/libcrypto -I /usr/src/lib/libcrypto/arch/amd64 -I /usr/src/lib/libcrypto/asn1 -I /usr/src/lib/libcrypto/bio -I /usr/src/lib/libcrypto/bn -I /usr/src/lib/libcrypto/bn/arch/amd64 -I /usr/src/lib/libcrypto/bytestring -I /usr/src/lib/libcrypto/curve25519 -I /usr/src/lib/libcrypto/dh -I /usr/src/lib/libcrypto/dsa -I /usr/src/lib/libcrypto/ec -I /usr/src/lib/libcrypto/ecdsa -I /usr/src/lib/libcrypto/evp -I /usr/src/lib/libcrypto/hidden -I /usr/src/lib/libcrypto/hmac -I /usr/src/lib/libcrypto/kdf -I /usr/src/lib/libcrypto/modes -I /usr/src/lib/libcrypto/ocsp -I /usr/src/lib/libcrypto/pkcs12 -I /usr/src/lib/libcrypto/rsa -I /usr/src/lib/libcrypto/sha -I /usr/src/lib/libcrypto/ts -I /usr/src/lib/libcrypto/x509 -I /usr/src/lib/libcrypto/obj -D AES_ASM -D BSAES_ASM -D VPAES_ASM -D OPENSSL_IA32_SSE2 -D RSA_ASM -D OPENSSL_BN_ASM_MONT -D OPENSSL_BN_ASM_MONT5 -D MD5_ASM -D GHASH_ASM -D RC4_MD5_ASM -D SHA1_ASM -D SHA256_ASM -D SHA512_ASM -D WHIRLPOOL_ASM -D OPENSSL_CPUID_OBJ -internal-isystem /usr/local/llvm16/lib/clang/16/include -internal-externc-isystem /usr/include -O2 -fdebug-compilation-dir=/usr/src/lib/libcrypto/obj -ferror-limit 19 -fwrapv -D_RET_PROTECTOR -ret-protector -fcf-protection=branch -fno-jump-tables -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free -fno-builtin-strdup -fno-builtin-strndup -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /home/ben/Projects/scan/2024-01-11-140451-98009-1 -x c /usr/src/lib/libcrypto/bf/bf_enc.c
1/* $OpenBSD: bf_enc.c,v 1.9 2022/11/26 16:08:51 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 <openssl/blowfish.h>
60
61#include "bf_local.h"
62
63/*
64 * Blowfish as implemented from 'Blowfish: Springer-Verlag paper'
65 * (From LECTURE NOTES IN COMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION,
66 * CAMBRIDGE SECURITY WORKSHOP, CAMBRIDGE, U.K., DECEMBER 9-11, 1993)
67 */
68
69#if (BF_ROUNDS16 != 16) && (BF_ROUNDS16 != 20)
70#error If you set BF_ROUNDS16 to some value other than 16 or 20, you will have \
71to modify the code.
72#endif
73
74void
75BF_encrypt(BF_LONGunsigned int *data, const BF_KEY *key)
76{
77#ifndef BF_PTR2
78 BF_LONGunsigned int l, r;
79 const BF_LONGunsigned int *p, *s;
80
81 p = key->P;
82 s = &(key->S[0]);
83 l = data[0];
84 r = data[1];
85
86 l ^= p[0];
87 BF_ENC(r, l,s, p[1])( r^=p[1], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
88 BF_ENC(l, r,s, p[2])( l^=p[2], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
89 BF_ENC(r, l,s, p[3])( r^=p[3], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
90 BF_ENC(l, r,s, p[4])( l^=p[4], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
91 BF_ENC(r, l,s, p[5])( r^=p[5], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
92 BF_ENC(l, r,s, p[6])( l^=p[6], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
93 BF_ENC(r, l,s, p[7])( r^=p[7], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
94 BF_ENC(l, r,s, p[8])( l^=p[8], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
95 BF_ENC(r, l,s, p[9])( r^=p[9], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
96 BF_ENC(l, r,s, p[10])( l^=p[10], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
97 BF_ENC(r, l,s, p[11])( r^=p[11], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
98 BF_ENC(l, r,s, p[12])( l^=p[12], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
99 BF_ENC(r, l,s, p[13])( r^=p[13], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
100 BF_ENC(l, r,s, p[14])( l^=p[14], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
101 BF_ENC(r, l,s, p[15])( r^=p[15], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
102 BF_ENC(l, r,s, p[16])( l^=p[16], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
103#if BF_ROUNDS16 == 20
104 BF_ENC(r, l,s, p[17])( r^=p[17], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
105 BF_ENC(l, r,s, p[18])( l^=p[18], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
106 BF_ENC(r, l,s, p[19])( r^=p[19], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
107 BF_ENC(l, r,s, p[20])( l^=p[20], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
108#endif
109 r ^= p[BF_ROUNDS16 + 1];
110
111 data[1] = l&0xffffffffL;
112 data[0] = r&0xffffffffL;
113#else
114 BF_LONGunsigned int l, r,t, *k;
115
116 l = data[0];
117 r = data[1];
118 k = (BF_LONGunsigned int*)key;
119
120 l ^= k[0];
121 BF_ENC(r, l, k, 1)( r^=1, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+(
(int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)&
0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL )
;
122 BF_ENC(l, r, k, 2)( l^=2, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+(
(int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)&
0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL )
;
123 BF_ENC(r, l, k, 3)( r^=3, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+(
(int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)&
0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL )
;
124 BF_ENC(l, r, k, 4)( l^=4, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+(
(int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)&
0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL )
;
125 BF_ENC(r, l, k, 5)( r^=5, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+(
(int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)&
0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL )
;
126 BF_ENC(l, r, k, 6)( l^=6, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+(
(int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)&
0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL )
;
127 BF_ENC(r, l, k, 7)( r^=7, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+(
(int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)&
0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL )
;
128 BF_ENC(l, r, k, 8)( l^=8, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+(
(int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)&
0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL )
;
129 BF_ENC(r, l, k, 9)( r^=9, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+(
(int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)&
0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL )
;
130 BF_ENC(l, r,k, 10)( l^=10, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+
((int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)
&0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
131 BF_ENC(r, l,k, 11)( r^=11, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+
((int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)
&0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
132 BF_ENC(l, r,k, 12)( l^=12, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+
((int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)
&0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
133 BF_ENC(r, l,k, 13)( r^=13, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+
((int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)
&0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
134 BF_ENC(l, r,k, 14)( l^=14, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+
((int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)
&0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
135 BF_ENC(r, l,k, 15)( r^=15, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+
((int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)
&0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
136 BF_ENC(l, r,k, 16)( l^=16, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+
((int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)
&0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
137#if BF_ROUNDS16 == 20
138 BF_ENC(r, l,k, 17)( r^=17, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+
((int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)
&0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
139 BF_ENC(l, r,k, 18)( l^=18, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+
((int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)
&0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
140 BF_ENC(r, l,k, 19)( r^=19, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+
((int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)
&0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
141 BF_ENC(l, r,k, 20)( l^=20, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+
((int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)
&0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
142#endif
143 r ^= k[BF_ROUNDS16 + 1];
144
145 data[1] = l&0xffffffffL;
146 data[0] = r&0xffffffffL;
147#endif
148}
149
150#ifndef BF_DEFAULT_OPTIONS
151
152void
153BF_decrypt(BF_LONGunsigned int *data, const BF_KEY *key)
154{
155#ifndef BF_PTR2
156 BF_LONGunsigned int l, r;
157 const BF_LONGunsigned int *p, *s;
158
159 p = key->P;
160 s = &(key->S[0]);
161 l = data[0];
162 r = data[1];
163
164 l ^= p[BF_ROUNDS16 + 1];
165#if BF_ROUNDS16 == 20
166 BF_ENC(r, l,s, p[20])( r^=p[20], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
167 BF_ENC(l, r,s, p[19])( l^=p[19], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
168 BF_ENC(r, l,s, p[18])( r^=p[18], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
169 BF_ENC(l, r,s, p[17])( l^=p[17], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
170#endif
171 BF_ENC(r, l,s, p[16])( r^=p[16], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
172 BF_ENC(l, r,s, p[15])( l^=p[15], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
173 BF_ENC(r, l,s, p[14])( r^=p[14], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
174 BF_ENC(l, r,s, p[13])( l^=p[13], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
175 BF_ENC(r, l,s, p[12])( r^=p[12], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
176 BF_ENC(l, r,s, p[11])( l^=p[11], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
177 BF_ENC(r, l,s, p[10])( r^=p[10], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
178 BF_ENC(l, r,s, p[9])( l^=p[9], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
179 BF_ENC(r, l,s, p[8])( r^=p[8], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
180 BF_ENC(l, r,s, p[7])( l^=p[7], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
181 BF_ENC(r, l,s, p[6])( r^=p[6], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
182 BF_ENC(l, r,s, p[5])( l^=p[5], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
183 BF_ENC(r, l,s, p[4])( r^=p[4], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
184 BF_ENC(l, r,s, p[3])( l^=p[3], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
185 BF_ENC(r, l,s, p[2])( r^=p[2], r^=((( s[ ((int)(l>>24)&0xff)] + s[0x0100
+((int)(l>>16)&0xff)])^ s[0x0200+((int)(l>> 8
)&0xff)])+ s[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
186 BF_ENC(l, r,s, p[1])( l^=p[1], l^=((( s[ ((int)(r>>24)&0xff)] + s[0x0100
+((int)(r>>16)&0xff)])^ s[0x0200+((int)(r>> 8
)&0xff)])+ s[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
187 r ^= p[0];
188
189 data[1] = l&0xffffffffL;
190 data[0] = r&0xffffffffL;
191#else
192 BF_LONGunsigned int l, r,t, *k;
193
194 l = data[0];
195 r = data[1];
196 k = (BF_LONGunsigned int *)key;
197
198 l ^= k[BF_ROUNDS16 + 1];
199#if BF_ROUNDS16 == 20
200 BF_ENC(r, l,k, 20)( r^=20, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+
((int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)
&0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
201 BF_ENC(l, r,k, 19)( l^=19, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+
((int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)
&0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
202 BF_ENC(r, l,k, 18)( r^=18, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+
((int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)
&0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
203 BF_ENC(l, r,k, 17)( l^=17, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+
((int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)
&0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
204#endif
205 BF_ENC(r, l,k, 16)( r^=16, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+
((int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)
&0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
206 BF_ENC(l, r,k, 15)( l^=15, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+
((int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)
&0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
207 BF_ENC(r, l,k, 14)( r^=14, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+
((int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)
&0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
208 BF_ENC(l, r,k, 13)( l^=13, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+
((int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)
&0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
209 BF_ENC(r, l,k, 12)( r^=12, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+
((int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)
&0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
210 BF_ENC(l, r,k, 11)( l^=11, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+
((int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)
&0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL
)
;
211 BF_ENC(r, l,k, 10)( r^=10, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+
((int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)
&0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL
)
;
212 BF_ENC(l, r, k, 9)( l^=9, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+(
(int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)&
0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL )
;
213 BF_ENC(r, l, k, 8)( r^=8, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+(
(int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)&
0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL )
;
214 BF_ENC(l, r, k, 7)( l^=7, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+(
(int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)&
0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL )
;
215 BF_ENC(r, l, k, 6)( r^=6, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+(
(int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)&
0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL )
;
216 BF_ENC(l, r, k, 5)( l^=5, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+(
(int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)&
0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL )
;
217 BF_ENC(r, l, k, 4)( r^=4, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+(
(int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)&
0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL )
;
218 BF_ENC(l, r, k, 3)( l^=3, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+(
(int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)&
0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL )
;
219 BF_ENC(r, l, k, 2)( r^=2, r^=((( k[ ((int)(l>>24)&0xff)] + k[0x0100+(
(int)(l>>16)&0xff)])^ k[0x0200+((int)(l>> 8)&
0xff)])+ k[0x0300+((int)(l )&0xff)])&0xffffffffL )
;
220 BF_ENC(l, r, k, 1)( l^=1, l^=((( k[ ((int)(r>>24)&0xff)] + k[0x0100+(
(int)(r>>16)&0xff)])^ k[0x0200+((int)(r>> 8)&
0xff)])+ k[0x0300+((int)(r )&0xff)])&0xffffffffL )
;
221 r ^= k[0];
222
223 data[1] = l&0xffffffffL;
224 data[0] = r&0xffffffffL;
225#endif
226}
227
228void
229BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
230 const BF_KEY *schedule, unsigned char *ivec, int encrypt)
231{
232 BF_LONGunsigned int tin0, tin1;
233 BF_LONGunsigned int tout0, tout1, xor0, xor1;
234 long l = length;
235 BF_LONGunsigned int tin[2];
236
237 if (encrypt) {
238 n2l(ivec, tout0)(tout0 =((unsigned long)(*((ivec)++)))<<24L, tout0|=((unsigned
long)(*((ivec)++)))<<16L, tout0|=((unsigned long)(*((ivec
)++)))<< 8L, tout0|=((unsigned long)(*((ivec)++))))
;
239 n2l(ivec, tout1)(tout1 =((unsigned long)(*((ivec)++)))<<24L, tout1|=((unsigned
long)(*((ivec)++)))<<16L, tout1|=((unsigned long)(*((ivec
)++)))<< 8L, tout1|=((unsigned long)(*((ivec)++))))
;
240 ivec -= 8;
241 for (l -= 8; l >= 0; l -= 8) {
242 n2l(in, tin0)(tin0 =((unsigned long)(*((in)++)))<<24L, tin0|=((unsigned
long)(*((in)++)))<<16L, tin0|=((unsigned long)(*((in)++
)))<< 8L, tin0|=((unsigned long)(*((in)++))))
;
243 n2l(in, tin1)(tin1 =((unsigned long)(*((in)++)))<<24L, tin1|=((unsigned
long)(*((in)++)))<<16L, tin1|=((unsigned long)(*((in)++
)))<< 8L, tin1|=((unsigned long)(*((in)++))))
;
244 tin0 ^= tout0;
245 tin1 ^= tout1;
246 tin[0] = tin0;
247 tin[1] = tin1;
248 BF_encrypt(tin, schedule);
249 tout0 = tin[0];
250 tout1 = tin[1];
251 l2n(tout0, out)(*((out)++)=(unsigned char)(((tout0)>>24L)&0xff), *
((out)++)=(unsigned char)(((tout0)>>16L)&0xff), *((
out)++)=(unsigned char)(((tout0)>> 8L)&0xff), *((out
)++)=(unsigned char)(((tout0) )&0xff))
;
252 l2n(tout1, out)(*((out)++)=(unsigned char)(((tout1)>>24L)&0xff), *
((out)++)=(unsigned char)(((tout1)>>16L)&0xff), *((
out)++)=(unsigned char)(((tout1)>> 8L)&0xff), *((out
)++)=(unsigned char)(((tout1) )&0xff))
;
253 }
254 if (l != -8) {
255 n2ln(in, tin0, tin1, l + 8){ in+=l + 8; tin0=tin1=0; switch (l + 8) { case 8: tin1 =((unsigned
long)(*(--(in)))) ; case 7: tin1|=((unsigned long)(*(--(in))
))<< 8; case 6: tin1|=((unsigned long)(*(--(in))))<<
16; case 5: tin1|=((unsigned long)(*(--(in))))<<24; case
4: tin0 =((unsigned long)(*(--(in)))) ; case 3: tin0|=((unsigned
long)(*(--(in))))<< 8; case 2: tin0|=((unsigned long)(
*(--(in))))<<16; case 1: tin0|=((unsigned long)(*(--(in
))))<<24; } }
;
256 tin0 ^= tout0;
257 tin1 ^= tout1;
258 tin[0] = tin0;
259 tin[1] = tin1;
260 BF_encrypt(tin, schedule);
261 tout0 = tin[0];
262 tout1 = tin[1];
263 l2n(tout0, out)(*((out)++)=(unsigned char)(((tout0)>>24L)&0xff), *
((out)++)=(unsigned char)(((tout0)>>16L)&0xff), *((
out)++)=(unsigned char)(((tout0)>> 8L)&0xff), *((out
)++)=(unsigned char)(((tout0) )&0xff))
;
264 l2n(tout1, out)(*((out)++)=(unsigned char)(((tout1)>>24L)&0xff), *
((out)++)=(unsigned char)(((tout1)>>16L)&0xff), *((
out)++)=(unsigned char)(((tout1)>> 8L)&0xff), *((out
)++)=(unsigned char)(((tout1) )&0xff))
;
265 }
266 l2n(tout0, ivec)(*((ivec)++)=(unsigned char)(((tout0)>>24L)&0xff), *
((ivec)++)=(unsigned char)(((tout0)>>16L)&0xff), *(
(ivec)++)=(unsigned char)(((tout0)>> 8L)&0xff), *((
ivec)++)=(unsigned char)(((tout0) )&0xff))
;
267 l2n(tout1, ivec)(*((ivec)++)=(unsigned char)(((tout1)>>24L)&0xff), *
((ivec)++)=(unsigned char)(((tout1)>>16L)&0xff), *(
(ivec)++)=(unsigned char)(((tout1)>> 8L)&0xff), *((
ivec)++)=(unsigned char)(((tout1) )&0xff))
;
268 } else {
269 n2l(ivec, xor0)(xor0 =((unsigned long)(*((ivec)++)))<<24L, xor0|=((unsigned
long)(*((ivec)++)))<<16L, xor0|=((unsigned long)(*((ivec
)++)))<< 8L, xor0|=((unsigned long)(*((ivec)++))))
;
270 n2l(ivec, xor1)(xor1 =((unsigned long)(*((ivec)++)))<<24L, xor1|=((unsigned
long)(*((ivec)++)))<<16L, xor1|=((unsigned long)(*((ivec
)++)))<< 8L, xor1|=((unsigned long)(*((ivec)++))))
;
271 ivec -= 8;
272 for (l -= 8; l >= 0; l -= 8) {
273 n2l(in, tin0)(tin0 =((unsigned long)(*((in)++)))<<24L, tin0|=((unsigned
long)(*((in)++)))<<16L, tin0|=((unsigned long)(*((in)++
)))<< 8L, tin0|=((unsigned long)(*((in)++))))
;
274 n2l(in, tin1)(tin1 =((unsigned long)(*((in)++)))<<24L, tin1|=((unsigned
long)(*((in)++)))<<16L, tin1|=((unsigned long)(*((in)++
)))<< 8L, tin1|=((unsigned long)(*((in)++))))
;
275 tin[0] = tin0;
276 tin[1] = tin1;
277 BF_decrypt(tin, schedule);
278 tout0 = tin[0]^xor0;
279 tout1 = tin[1]^xor1;
280 l2n(tout0, out)(*((out)++)=(unsigned char)(((tout0)>>24L)&0xff), *
((out)++)=(unsigned char)(((tout0)>>16L)&0xff), *((
out)++)=(unsigned char)(((tout0)>> 8L)&0xff), *((out
)++)=(unsigned char)(((tout0) )&0xff))
;
281 l2n(tout1, out)(*((out)++)=(unsigned char)(((tout1)>>24L)&0xff), *
((out)++)=(unsigned char)(((tout1)>>16L)&0xff), *((
out)++)=(unsigned char)(((tout1)>> 8L)&0xff), *((out
)++)=(unsigned char)(((tout1) )&0xff))
;
282 xor0 = tin0;
283 xor1 = tin1;
284 }
285 if (l != -8) {
286 n2l(in, tin0)(tin0 =((unsigned long)(*((in)++)))<<24L, tin0|=((unsigned
long)(*((in)++)))<<16L, tin0|=((unsigned long)(*((in)++
)))<< 8L, tin0|=((unsigned long)(*((in)++))))
;
287 n2l(in, tin1)(tin1 =((unsigned long)(*((in)++)))<<24L, tin1|=((unsigned
long)(*((in)++)))<<16L, tin1|=((unsigned long)(*((in)++
)))<< 8L, tin1|=((unsigned long)(*((in)++))))
;
288 tin[0] = tin0;
289 tin[1] = tin1;
290 BF_decrypt(tin, schedule);
291 tout0 = tin[0]^xor0;
292 tout1 = tin[1]^xor1;
293 l2nn(tout0, tout1, out, l + 8){ out+=l + 8; switch (l + 8) { case 8: *(--(out))=(unsigned char
)(((tout1) )&0xff); case 7: *(--(out))=(unsigned char)(((
tout1)>> 8)&0xff); case 6: *(--(out))=(unsigned char
)(((tout1)>>16)&0xff); case 5: *(--(out))=(unsigned
char)(((tout1)>>24)&0xff); case 4: *(--(out))=(unsigned
char)(((tout0) )&0xff); case 3: *(--(out))=(unsigned char
)(((tout0)>> 8)&0xff); case 2: *(--(out))=(unsigned
char)(((tout0)>>16)&0xff); case 1: *(--(out))=(unsigned
char)(((tout0)>>24)&0xff); } }
;
294 xor0 = tin0;
295 xor1 = tin1;
296 }
297 l2n(xor0, ivec)(*((ivec)++)=(unsigned char)(((xor0)>>24L)&0xff), *
((ivec)++)=(unsigned char)(((xor0)>>16L)&0xff), *((
ivec)++)=(unsigned char)(((xor0)>> 8L)&0xff), *((ivec
)++)=(unsigned char)(((xor0) )&0xff))
;
298 l2n(xor1, ivec)(*((ivec)++)=(unsigned char)(((xor1)>>24L)&0xff), *
((ivec)++)=(unsigned char)(((xor1)>>16L)&0xff), *((
ivec)++)=(unsigned char)(((xor1)>> 8L)&0xff), *((ivec
)++)=(unsigned char)(((xor1) )&0xff))
;
299 }
300 tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
Although the value stored to 'tout1' is used in the enclosing expression, the value is never actually read from 'tout1'
301 tin[0] = tin[1] = 0;
302}
303
304#endif