Bug Summary

File:src/lib/libcrypto/bf/bf_enc.c
Warning:line 302, column 18
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.0 -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name bf_enc.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -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 -fno-rounding-math -mconstructor-aliases -munwind-tables -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/lib/clang/13.0.0 -D LIBRESSL_INTERNAL -D LIBRESSL_CRYPTO_INTERNAL -D DSO_DLFCN -D HAVE_DLFCN_H -D HAVE_FUNOPEN -D OPENSSL_NO_HW_PADLOCK -I /usr/src/lib/libcrypto -I /usr/src/lib/libcrypto/asn1 -I /usr/src/lib/libcrypto/bio -I /usr/src/lib/libcrypto/bn -I /usr/src/lib/libcrypto/bytestring -I /usr/src/lib/libcrypto/dh -I /usr/src/lib/libcrypto/dsa -I /usr/src/lib/libcrypto/ec -I /usr/src/lib/libcrypto/ecdh -I /usr/src/lib/libcrypto/ecdsa -I /usr/src/lib/libcrypto/evp -I /usr/src/lib/libcrypto/hmac -I /usr/src/lib/libcrypto/modes -I /usr/src/lib/libcrypto/ocsp -I /usr/src/lib/libcrypto/rsa -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 OPENSSL_BN_ASM_GF2m -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/lib/clang/13.0.0/include -internal-externc-isystem /usr/include -O2 -fdebug-compilation-dir=/usr/src/lib/libcrypto/obj -ferror-limit 19 -fwrapv -D_RET_PROTECTOR -ret-protector -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/vmm/scan-build/2022-01-12-194120-40624-1 -x c /usr/src/lib/libcrypto/bf/bf_enc.c
1/* $OpenBSD: bf_enc.c,v 1.6 2014/10/28 07:35:58 jsg 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#include "bf_locl.h"
61
62/* Blowfish as implemented from 'Blowfish: Springer-Verlag paper'
63 * (From LECTURE NOTES IN COMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION,
64 * CAMBRIDGE SECURITY WORKSHOP, CAMBRIDGE, U.K., DECEMBER 9-11, 1993)
65 */
66
67#if (BF_ROUNDS16 != 16) && (BF_ROUNDS16 != 20)
68#error If you set BF_ROUNDS16 to some value other than 16 or 20, you will have \
69to modify the code.
70#endif
71
72void BF_encrypt(BF_LONGunsigned int *data, const BF_KEY *key)
73 {
74#ifndef BF_PTR2
75 BF_LONGunsigned int l,r;
76 const BF_LONGunsigned int *p,*s;
77
78 p=key->P;
79 s= &(key->S[0]);
80 l=data[0];
81 r=data[1];
82
83 l^=p[0];
84 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
)
;
85 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
)
;
86 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
)
;
87 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
)
;
88 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
)
;
89 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
)
;
90 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
)
;
91 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
)
;
92 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
)
;
93 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
)
;
94 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
)
;
95 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
)
;
96 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
)
;
97 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
)
;
98 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
)
;
99 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
)
;
100#if BF_ROUNDS16 == 20
101 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
)
;
102 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
)
;
103 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
)
;
104 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
)
;
105#endif
106 r^=p[BF_ROUNDS16+1];
107
108 data[1]=l&0xffffffffL;
109 data[0]=r&0xffffffffL;
110#else
111 BF_LONGunsigned int l,r,t,*k;
112
113 l=data[0];
114 r=data[1];
115 k=(BF_LONGunsigned int*)key;
116
117 l^=k[0];
118 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 )
;
119 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 )
;
120 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 )
;
121 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 )
;
122 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 )
;
123 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 )
;
124 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 )
;
125 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 )
;
126 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 )
;
127 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
)
;
128 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
)
;
129 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
)
;
130 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
)
;
131 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
)
;
132 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
)
;
133 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
)
;
134#if BF_ROUNDS16 == 20
135 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
)
;
136 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
)
;
137 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
)
;
138 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
)
;
139#endif
140 r^=k[BF_ROUNDS16+1];
141
142 data[1]=l&0xffffffffL;
143 data[0]=r&0xffffffffL;
144#endif
145 }
146
147#ifndef BF_DEFAULT_OPTIONS
148
149void BF_decrypt(BF_LONGunsigned int *data, const BF_KEY *key)
150 {
151#ifndef BF_PTR2
152 BF_LONGunsigned int l,r;
153 const BF_LONGunsigned int *p,*s;
154
155 p=key->P;
156 s= &(key->S[0]);
157 l=data[0];
158 r=data[1];
159
160 l^=p[BF_ROUNDS16+1];
161#if BF_ROUNDS16 == 20
162 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
)
;
163 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
)
;
164 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
)
;
165 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
)
;
166#endif
167 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
)
;
168 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
)
;
169 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
)
;
170 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
)
;
171 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
)
;
172 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
)
;
173 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
)
;
174 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
)
;
175 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
)
;
176 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
)
;
177 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
)
;
178 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
)
;
179 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
)
;
180 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
)
;
181 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
)
;
182 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
)
;
183 r^=p[0];
184
185 data[1]=l&0xffffffffL;
186 data[0]=r&0xffffffffL;
187#else
188 BF_LONGunsigned int l,r,t,*k;
189
190 l=data[0];
191 r=data[1];
192 k=(BF_LONGunsigned int *)key;
193
194 l^=k[BF_ROUNDS16+1];
195#if BF_ROUNDS16 == 20
196 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
)
;
197 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
)
;
198 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
)
;
199 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
)
;
200#endif
201 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
)
;
202 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
)
;
203 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
)
;
204 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
)
;
205 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
)
;
206 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
)
;
207 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
)
;
208 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 )
;
209 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 )
;
210 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 )
;
211 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 )
;
212 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 )
;
213 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 )
;
214 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 )
;
215 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 )
;
216 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 )
;
217 r^=k[0];
218
219 data[1]=l&0xffffffffL;
220 data[0]=r&0xffffffffL;
221#endif
222 }
223
224void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
225 const BF_KEY *schedule, unsigned char *ivec, int encrypt)
226 {
227 BF_LONGunsigned int tin0,tin1;
228 BF_LONGunsigned int tout0,tout1,xor0,xor1;
229 long l=length;
230 BF_LONGunsigned int tin[2];
231
232 if (encrypt)
233 {
234 n2l(ivec,tout0)(tout0 =((unsigned long)(*((ivec)++)))<<24L, tout0|=((unsigned
long)(*((ivec)++)))<<16L, tout0|=((unsigned long)(*((ivec
)++)))<< 8L, tout0|=((unsigned long)(*((ivec)++))))
;
235 n2l(ivec,tout1)(tout1 =((unsigned long)(*((ivec)++)))<<24L, tout1|=((unsigned
long)(*((ivec)++)))<<16L, tout1|=((unsigned long)(*((ivec
)++)))<< 8L, tout1|=((unsigned long)(*((ivec)++))))
;
236 ivec-=8;
237 for (l-=8; l>=0; l-=8)
238 {
239 n2l(in,tin0)(tin0 =((unsigned long)(*((in)++)))<<24L, tin0|=((unsigned
long)(*((in)++)))<<16L, tin0|=((unsigned long)(*((in)++
)))<< 8L, tin0|=((unsigned long)(*((in)++))))
;
240 n2l(in,tin1)(tin1 =((unsigned long)(*((in)++)))<<24L, tin1|=((unsigned
long)(*((in)++)))<<16L, tin1|=((unsigned long)(*((in)++
)))<< 8L, tin1|=((unsigned long)(*((in)++))))
;
241 tin0^=tout0;
242 tin1^=tout1;
243 tin[0]=tin0;
244 tin[1]=tin1;
245 BF_encrypt(tin,schedule);
246 tout0=tin[0];
247 tout1=tin[1];
248 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))
;
249 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))
;
250 }
251 if (l != -8)
252 {
253 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; } }
;
254 tin0^=tout0;
255 tin1^=tout1;
256 tin[0]=tin0;
257 tin[1]=tin1;
258 BF_encrypt(tin,schedule);
259 tout0=tin[0];
260 tout1=tin[1];
261 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))
;
262 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))
;
263 }
264 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))
;
265 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))
;
266 }
267 else
268 {
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 {
274 n2l(in,tin0)(tin0 =((unsigned long)(*((in)++)))<<24L, tin0|=((unsigned
long)(*((in)++)))<<16L, tin0|=((unsigned long)(*((in)++
)))<< 8L, tin0|=((unsigned long)(*((in)++))))
;
275 n2l(in,tin1)(tin1 =((unsigned long)(*((in)++)))<<24L, tin1|=((unsigned
long)(*((in)++)))<<16L, tin1|=((unsigned long)(*((in)++
)))<< 8L, tin1|=((unsigned long)(*((in)++))))
;
276 tin[0]=tin0;
277 tin[1]=tin1;
278 BF_decrypt(tin,schedule);
279 tout0=tin[0]^xor0;
280 tout1=tin[1]^xor1;
281 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))
;
282 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))
;
283 xor0=tin0;
284 xor1=tin1;
285 }
286 if (l != -8)
287 {
288 n2l(in,tin0)(tin0 =((unsigned long)(*((in)++)))<<24L, tin0|=((unsigned
long)(*((in)++)))<<16L, tin0|=((unsigned long)(*((in)++
)))<< 8L, tin0|=((unsigned long)(*((in)++))))
;
289 n2l(in,tin1)(tin1 =((unsigned long)(*((in)++)))<<24L, tin1|=((unsigned
long)(*((in)++)))<<16L, tin1|=((unsigned long)(*((in)++
)))<< 8L, tin1|=((unsigned long)(*((in)++))))
;
290 tin[0]=tin0;
291 tin[1]=tin1;
292 BF_decrypt(tin,schedule);
293 tout0=tin[0]^xor0;
294 tout1=tin[1]^xor1;
295 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); } }
;
296 xor0=tin0;
297 xor1=tin1;
298 }
299 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))
;
300 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))
;
301 }
302 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'
303 tin[0]=tin[1]=0;
304 }
305
306#endif