Bug Summary

File:src/lib/libcrypto/des/des_enc.c
Warning:line 400, column 12
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 amd64-unknown-openbsd7.0 -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name des_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 -fhalf-no-semantic-interposition -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 -D PIC -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/des/des_enc.c
1/* $OpenBSD: des_enc.c,v 1.12 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 "des_locl.h"
60#include "spr.h"
61
62#ifndef OPENBSD_DES_ASM
63
64void DES_encrypt1(DES_LONGunsigned int *data, DES_key_schedule *ks, int enc)
65 {
66 DES_LONGunsigned int l,r,t,u;
67#ifdef DES_PTR
68 const unsigned char *des_SP=(const unsigned char *)DES_SPtrans;
69#endif
70#ifndef DES_UNROLL
71 int i;
72#endif
73 DES_LONGunsigned int *s;
74
75 r=data[0];
76 l=data[1];
77
78 IP(r,l){ unsigned int tt; ((tt)=((((l)>>(4))^(r))&(0x0f0f0f0fL
)), (r)^=(tt), (l)^=((tt)<<(4))); ((tt)=((((r)>>(
16))^(l))&(0x0000ffffL)), (l)^=(tt), (r)^=((tt)<<(16
))); ((tt)=((((l)>>(2))^(r))&(0x33333333L)), (r)^=(
tt), (l)^=((tt)<<(2))); ((tt)=((((r)>>(8))^(l))&
(0x00ff00ffL)), (l)^=(tt), (r)^=((tt)<<(8))); ((tt)=(((
(l)>>(1))^(r))&(0x55555555L)), (r)^=(tt), (l)^=((tt
)<<(1))); }
;
79 /* Things have been modified so that the initial rotate is
80 * done outside the loop. This required the
81 * DES_SPtrans values in sp.h to be rotated 1 bit to the right.
82 * One perl script later and things have a 5% speed up on a sparc2.
83 * Thanks to Richard Outerbridge <71755.204@CompuServe.COM>
84 * for pointing this out. */
85 /* clear the top bits on machines with 8byte longs */
86 /* shift left by 2 */
87 r=ROTATE(r,29)&0xffffffffL;
88 l=ROTATE(l,29)&0xffffffffL;
89
90 s=ks->ks->deslong;
91 /* I don't know if it is worth the effort of loop unrolling the
92 * inner loop */
93 if (enc)
94 {
95#ifdef DES_UNROLL
96 D_ENCRYPT(l,r, 0){ u=r^s[0 ]; t=r^s[0 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 1 */
97 D_ENCRYPT(r,l, 2){ u=l^s[2 ]; t=l^s[2 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 2 */
98 D_ENCRYPT(l,r, 4){ u=r^s[4 ]; t=r^s[4 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 3 */
99 D_ENCRYPT(r,l, 6){ u=l^s[6 ]; t=l^s[6 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 4 */
100 D_ENCRYPT(l,r, 8){ u=r^s[8 ]; t=r^s[8 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 5 */
101 D_ENCRYPT(r,l,10){ u=l^s[10 ]; t=l^s[10 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 6 */
102 D_ENCRYPT(l,r,12){ u=r^s[12 ]; t=r^s[12 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 7 */
103 D_ENCRYPT(r,l,14){ u=l^s[14 ]; t=l^s[14 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 8 */
104 D_ENCRYPT(l,r,16){ u=r^s[16 ]; t=r^s[16 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 9 */
105 D_ENCRYPT(r,l,18){ u=l^s[18 ]; t=l^s[18 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 10 */
106 D_ENCRYPT(l,r,20){ u=r^s[20 ]; t=r^s[20 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 11 */
107 D_ENCRYPT(r,l,22){ u=l^s[22 ]; t=l^s[22 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 12 */
108 D_ENCRYPT(l,r,24){ u=r^s[24 ]; t=r^s[24 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 13 */
109 D_ENCRYPT(r,l,26){ u=l^s[26 ]; t=l^s[26 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 14 */
110 D_ENCRYPT(l,r,28){ u=r^s[28 ]; t=r^s[28 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 15 */
111 D_ENCRYPT(r,l,30){ u=l^s[30 ]; t=l^s[30 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 16 */
112#else
113 for (i=0; i<32; i+=4)
114 {
115 D_ENCRYPT(l,r,i+0){ u=r^s[i+0 ]; t=r^s[i+0 +1]; t=ROTATE(t,4); l^= DES_SPtrans[
0][(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 1 */
116 D_ENCRYPT(r,l,i+2){ u=l^s[i+2 ]; t=l^s[i+2 +1]; t=ROTATE(t,4); r^= DES_SPtrans[
0][(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 2 */
117 }
118#endif
119 }
120 else
121 {
122#ifdef DES_UNROLL
123 D_ENCRYPT(l,r,30){ u=r^s[30 ]; t=r^s[30 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 16 */
124 D_ENCRYPT(r,l,28){ u=l^s[28 ]; t=l^s[28 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 15 */
125 D_ENCRYPT(l,r,26){ u=r^s[26 ]; t=r^s[26 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 14 */
126 D_ENCRYPT(r,l,24){ u=l^s[24 ]; t=l^s[24 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 13 */
127 D_ENCRYPT(l,r,22){ u=r^s[22 ]; t=r^s[22 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 12 */
128 D_ENCRYPT(r,l,20){ u=l^s[20 ]; t=l^s[20 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 11 */
129 D_ENCRYPT(l,r,18){ u=r^s[18 ]; t=r^s[18 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 10 */
130 D_ENCRYPT(r,l,16){ u=l^s[16 ]; t=l^s[16 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 9 */
131 D_ENCRYPT(l,r,14){ u=r^s[14 ]; t=r^s[14 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 8 */
132 D_ENCRYPT(r,l,12){ u=l^s[12 ]; t=l^s[12 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 7 */
133 D_ENCRYPT(l,r,10){ u=r^s[10 ]; t=r^s[10 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 6 */
134 D_ENCRYPT(r,l, 8){ u=l^s[8 ]; t=l^s[8 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 5 */
135 D_ENCRYPT(l,r, 6){ u=r^s[6 ]; t=r^s[6 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 4 */
136 D_ENCRYPT(r,l, 4){ u=l^s[4 ]; t=l^s[4 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 3 */
137 D_ENCRYPT(l,r, 2){ u=r^s[2 ]; t=r^s[2 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 2 */
138 D_ENCRYPT(r,l, 0){ u=l^s[0 ]; t=l^s[0 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 1 */
139#else
140 for (i=30; i>0; i-=4)
141 {
142 D_ENCRYPT(l,r,i-0){ u=r^s[i-0 ]; t=r^s[i-0 +1]; t=ROTATE(t,4); l^= DES_SPtrans[
0][(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 16 */
143 D_ENCRYPT(r,l,i-2){ u=l^s[i-2 ]; t=l^s[i-2 +1]; t=ROTATE(t,4); r^= DES_SPtrans[
0][(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 15 */
144 }
145#endif
146 }
147
148 /* rotate and clear the top bits on machines with 8byte longs */
149 l=ROTATE(l,3)&0xffffffffL;
150 r=ROTATE(r,3)&0xffffffffL;
151
152 FP(r,l){ unsigned int tt; ((tt)=((((r)>>(1))^(l))&(0x55555555L
)), (l)^=(tt), (r)^=((tt)<<(1))); ((tt)=((((l)>>(
8))^(r))&(0x00ff00ffL)), (r)^=(tt), (l)^=((tt)<<(8)
)); ((tt)=((((r)>>(2))^(l))&(0x33333333L)), (l)^=(tt
), (r)^=((tt)<<(2))); ((tt)=((((l)>>(16))^(r))&
(0x0000ffffL)), (r)^=(tt), (l)^=((tt)<<(16))); ((tt)=((
((r)>>(4))^(l))&(0x0f0f0f0fL)), (l)^=(tt), (r)^=((tt
)<<(4))); }
;
153 data[0]=l;
154 data[1]=r;
155 l=r=t=u=0;
156 }
157
158void DES_encrypt2(DES_LONGunsigned int *data, DES_key_schedule *ks, int enc)
159 {
160 DES_LONGunsigned int l,r,t,u;
161#ifdef DES_PTR
162 const unsigned char *des_SP=(const unsigned char *)DES_SPtrans;
163#endif
164#ifndef DES_UNROLL
165 int i;
166#endif
167 DES_LONGunsigned int *s;
168
169 r=data[0];
170 l=data[1];
171
172 /* Things have been modified so that the initial rotate is
173 * done outside the loop. This required the
174 * DES_SPtrans values in sp.h to be rotated 1 bit to the right.
175 * One perl script later and things have a 5% speed up on a sparc2.
176 * Thanks to Richard Outerbridge <71755.204@CompuServe.COM>
177 * for pointing this out. */
178 /* clear the top bits on machines with 8byte longs */
179 r=ROTATE(r,29)&0xffffffffL;
180 l=ROTATE(l,29)&0xffffffffL;
181
182 s=ks->ks->deslong;
183 /* I don't know if it is worth the effort of loop unrolling the
184 * inner loop */
185 if (enc)
186 {
187#ifdef DES_UNROLL
188 D_ENCRYPT(l,r, 0){ u=r^s[0 ]; t=r^s[0 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 1 */
189 D_ENCRYPT(r,l, 2){ u=l^s[2 ]; t=l^s[2 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 2 */
190 D_ENCRYPT(l,r, 4){ u=r^s[4 ]; t=r^s[4 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 3 */
191 D_ENCRYPT(r,l, 6){ u=l^s[6 ]; t=l^s[6 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 4 */
192 D_ENCRYPT(l,r, 8){ u=r^s[8 ]; t=r^s[8 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 5 */
193 D_ENCRYPT(r,l,10){ u=l^s[10 ]; t=l^s[10 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 6 */
194 D_ENCRYPT(l,r,12){ u=r^s[12 ]; t=r^s[12 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 7 */
195 D_ENCRYPT(r,l,14){ u=l^s[14 ]; t=l^s[14 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 8 */
196 D_ENCRYPT(l,r,16){ u=r^s[16 ]; t=r^s[16 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 9 */
197 D_ENCRYPT(r,l,18){ u=l^s[18 ]; t=l^s[18 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 10 */
198 D_ENCRYPT(l,r,20){ u=r^s[20 ]; t=r^s[20 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 11 */
199 D_ENCRYPT(r,l,22){ u=l^s[22 ]; t=l^s[22 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 12 */
200 D_ENCRYPT(l,r,24){ u=r^s[24 ]; t=r^s[24 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 13 */
201 D_ENCRYPT(r,l,26){ u=l^s[26 ]; t=l^s[26 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 14 */
202 D_ENCRYPT(l,r,28){ u=r^s[28 ]; t=r^s[28 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 15 */
203 D_ENCRYPT(r,l,30){ u=l^s[30 ]; t=l^s[30 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 16 */
204#else
205 for (i=0; i<32; i+=4)
206 {
207 D_ENCRYPT(l,r,i+0){ u=r^s[i+0 ]; t=r^s[i+0 +1]; t=ROTATE(t,4); l^= DES_SPtrans[
0][(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 1 */
208 D_ENCRYPT(r,l,i+2){ u=l^s[i+2 ]; t=l^s[i+2 +1]; t=ROTATE(t,4); r^= DES_SPtrans[
0][(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 2 */
209 }
210#endif
211 }
212 else
213 {
214#ifdef DES_UNROLL
215 D_ENCRYPT(l,r,30){ u=r^s[30 ]; t=r^s[30 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 16 */
216 D_ENCRYPT(r,l,28){ u=l^s[28 ]; t=l^s[28 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 15 */
217 D_ENCRYPT(l,r,26){ u=r^s[26 ]; t=r^s[26 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 14 */
218 D_ENCRYPT(r,l,24){ u=l^s[24 ]; t=l^s[24 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 13 */
219 D_ENCRYPT(l,r,22){ u=r^s[22 ]; t=r^s[22 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 12 */
220 D_ENCRYPT(r,l,20){ u=l^s[20 ]; t=l^s[20 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 11 */
221 D_ENCRYPT(l,r,18){ u=r^s[18 ]; t=r^s[18 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 10 */
222 D_ENCRYPT(r,l,16){ u=l^s[16 ]; t=l^s[16 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 9 */
223 D_ENCRYPT(l,r,14){ u=r^s[14 ]; t=r^s[14 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 8 */
224 D_ENCRYPT(r,l,12){ u=l^s[12 ]; t=l^s[12 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 7 */
225 D_ENCRYPT(l,r,10){ u=r^s[10 ]; t=r^s[10 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0]
[(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 6 */
226 D_ENCRYPT(r,l, 8){ u=l^s[8 ]; t=l^s[8 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 5 */
227 D_ENCRYPT(l,r, 6){ u=r^s[6 ]; t=r^s[6 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 4 */
228 D_ENCRYPT(r,l, 4){ u=l^s[4 ]; t=l^s[4 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 3 */
229 D_ENCRYPT(l,r, 2){ u=r^s[2 ]; t=r^s[2 +1]; t=ROTATE(t,4); l^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 2 */
230 D_ENCRYPT(r,l, 0){ u=l^s[0 ]; t=l^s[0 +1]; t=ROTATE(t,4); r^= DES_SPtrans[0][(
u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&0x3f
]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6][(u
>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&0x3f
]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5][(t
>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&0x3f
]; }
; /* 1 */
231#else
232 for (i=30; i>0; i-=4)
233 {
234 D_ENCRYPT(l,r,i-0){ u=r^s[i-0 ]; t=r^s[i-0 +1]; t=ROTATE(t,4); l^= DES_SPtrans[
0][(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 16 */
235 D_ENCRYPT(r,l,i-2){ u=l^s[i-2 ]; t=l^s[i-2 +1]; t=ROTATE(t,4); r^= DES_SPtrans[
0][(u>> 2L)&0x3f]^ DES_SPtrans[2][(u>>10L)&
0x3f]^ DES_SPtrans[4][(u>>18L)&0x3f]^ DES_SPtrans[6
][(u>>26L)&0x3f]^ DES_SPtrans[1][(t>> 2L)&
0x3f]^ DES_SPtrans[3][(t>>10L)&0x3f]^ DES_SPtrans[5
][(t>>18L)&0x3f]^ DES_SPtrans[7][(t>>26L)&
0x3f]; }
; /* 15 */
236 }
237#endif
238 }
239 /* rotate and clear the top bits on machines with 8byte longs */
240 data[0]=ROTATE(l,3)&0xffffffffL;
241 data[1]=ROTATE(r,3)&0xffffffffL;
242 l=r=t=u=0;
243 }
244
245#endif /* OPENBSD_DES_ASM */
246
247void DES_encrypt3(DES_LONGunsigned int *data, DES_key_schedule *ks1,
248 DES_key_schedule *ks2, DES_key_schedule *ks3)
249 {
250 DES_LONGunsigned int l,r;
251
252 l=data[0];
253 r=data[1];
254 IP(l,r){ unsigned int tt; ((tt)=((((r)>>(4))^(l))&(0x0f0f0f0fL
)), (l)^=(tt), (r)^=((tt)<<(4))); ((tt)=((((l)>>(
16))^(r))&(0x0000ffffL)), (r)^=(tt), (l)^=((tt)<<(16
))); ((tt)=((((r)>>(2))^(l))&(0x33333333L)), (l)^=(
tt), (r)^=((tt)<<(2))); ((tt)=((((l)>>(8))^(r))&
(0x00ff00ffL)), (r)^=(tt), (l)^=((tt)<<(8))); ((tt)=(((
(r)>>(1))^(l))&(0x55555555L)), (l)^=(tt), (r)^=((tt
)<<(1))); }
;
255 data[0]=l;
256 data[1]=r;
257 DES_encrypt2((DES_LONGunsigned int *)data,ks1,DES_ENCRYPT1);
258 DES_encrypt2((DES_LONGunsigned int *)data,ks2,DES_DECRYPT0);
259 DES_encrypt2((DES_LONGunsigned int *)data,ks3,DES_ENCRYPT1);
260 l=data[0];
261 r=data[1];
262 FP(r,l){ unsigned int tt; ((tt)=((((r)>>(1))^(l))&(0x55555555L
)), (l)^=(tt), (r)^=((tt)<<(1))); ((tt)=((((l)>>(
8))^(r))&(0x00ff00ffL)), (r)^=(tt), (l)^=((tt)<<(8)
)); ((tt)=((((r)>>(2))^(l))&(0x33333333L)), (l)^=(tt
), (r)^=((tt)<<(2))); ((tt)=((((l)>>(16))^(r))&
(0x0000ffffL)), (r)^=(tt), (l)^=((tt)<<(16))); ((tt)=((
((r)>>(4))^(l))&(0x0f0f0f0fL)), (l)^=(tt), (r)^=((tt
)<<(4))); }
;
263 data[0]=l;
264 data[1]=r;
265 }
266
267void DES_decrypt3(DES_LONGunsigned int *data, DES_key_schedule *ks1,
268 DES_key_schedule *ks2, DES_key_schedule *ks3)
269 {
270 DES_LONGunsigned int l,r;
271
272 l=data[0];
273 r=data[1];
274 IP(l,r){ unsigned int tt; ((tt)=((((r)>>(4))^(l))&(0x0f0f0f0fL
)), (l)^=(tt), (r)^=((tt)<<(4))); ((tt)=((((l)>>(
16))^(r))&(0x0000ffffL)), (r)^=(tt), (l)^=((tt)<<(16
))); ((tt)=((((r)>>(2))^(l))&(0x33333333L)), (l)^=(
tt), (r)^=((tt)<<(2))); ((tt)=((((l)>>(8))^(r))&
(0x00ff00ffL)), (r)^=(tt), (l)^=((tt)<<(8))); ((tt)=(((
(r)>>(1))^(l))&(0x55555555L)), (l)^=(tt), (r)^=((tt
)<<(1))); }
;
275 data[0]=l;
276 data[1]=r;
277 DES_encrypt2((DES_LONGunsigned int *)data,ks3,DES_DECRYPT0);
278 DES_encrypt2((DES_LONGunsigned int *)data,ks2,DES_ENCRYPT1);
279 DES_encrypt2((DES_LONGunsigned int *)data,ks1,DES_DECRYPT0);
280 l=data[0];
281 r=data[1];
282 FP(r,l){ unsigned int tt; ((tt)=((((r)>>(1))^(l))&(0x55555555L
)), (l)^=(tt), (r)^=((tt)<<(1))); ((tt)=((((l)>>(
8))^(r))&(0x00ff00ffL)), (r)^=(tt), (l)^=((tt)<<(8)
)); ((tt)=((((r)>>(2))^(l))&(0x33333333L)), (l)^=(tt
), (r)^=((tt)<<(2))); ((tt)=((((l)>>(16))^(r))&
(0x0000ffffL)), (r)^=(tt), (l)^=((tt)<<(16))); ((tt)=((
((r)>>(4))^(l))&(0x0f0f0f0fL)), (l)^=(tt), (r)^=((tt
)<<(4))); }
;
283 data[0]=l;
284 data[1]=r;
285 }
286
287#ifndef DES_DEFAULT_OPTIONS
288
289#undef CBC_ENC_C__DONT_UPDATE_IV
290#include "ncbc_enc.c" /* DES_ncbc_encrypt */
291
292void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
293 long length, DES_key_schedule *ks1,
294 DES_key_schedule *ks2, DES_key_schedule *ks3,
295 DES_cblock *ivec, int enc)
296 {
297 DES_LONGunsigned int tin0,tin1;
298 DES_LONGunsigned int tout0,tout1,xor0,xor1;
299 const unsigned char *in;
300 unsigned char *out;
301 long l=length;
302 DES_LONGunsigned int tin[2];
303 unsigned char *iv;
304
305 in=input;
306 out=output;
307 iv = &(*ivec)[0];
308
309 if (enc)
310 {
311 c2l(iv,tout0)(tout0 =((unsigned int)(*((iv)++))) , tout0|=((unsigned int)(
*((iv)++)))<< 8L, tout0|=((unsigned int)(*((iv)++)))<<
16L, tout0|=((unsigned int)(*((iv)++)))<<24L)
;
312 c2l(iv,tout1)(tout1 =((unsigned int)(*((iv)++))) , tout1|=((unsigned int)(
*((iv)++)))<< 8L, tout1|=((unsigned int)(*((iv)++)))<<
16L, tout1|=((unsigned int)(*((iv)++)))<<24L)
;
313 for (l-=8; l>=0; l-=8)
314 {
315 c2l(in,tin0)(tin0 =((unsigned int)(*((in)++))) , tin0|=((unsigned int)(*(
(in)++)))<< 8L, tin0|=((unsigned int)(*((in)++)))<<
16L, tin0|=((unsigned int)(*((in)++)))<<24L)
;
316 c2l(in,tin1)(tin1 =((unsigned int)(*((in)++))) , tin1|=((unsigned int)(*(
(in)++)))<< 8L, tin1|=((unsigned int)(*((in)++)))<<
16L, tin1|=((unsigned int)(*((in)++)))<<24L)
;
317 tin0^=tout0;
318 tin1^=tout1;
319
320 tin[0]=tin0;
321 tin[1]=tin1;
322 DES_encrypt3((DES_LONGunsigned int *)tin,ks1,ks2,ks3);
323 tout0=tin[0];
324 tout1=tin[1];
325
326 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))
;
327 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))
;
328 }
329 if (l != -8)
330 {
331 c2ln(in,tin0,tin1,l+8){ in+=l+8; tin0=tin1=0; switch (l+8) { case 8: tin1 =((unsigned
int)(*(--(in))))<<24L; case 7: tin1|=((unsigned int)(*
(--(in))))<<16L; case 6: tin1|=((unsigned int)(*(--(in)
)))<< 8L; case 5: tin1|=((unsigned int)(*(--(in)))); case
4: tin0 =((unsigned int)(*(--(in))))<<24L; case 3: tin0
|=((unsigned int)(*(--(in))))<<16L; case 2: tin0|=((unsigned
int)(*(--(in))))<< 8L; case 1: tin0|=((unsigned int)(*
(--(in)))); } }
;
332 tin0^=tout0;
333 tin1^=tout1;
334
335 tin[0]=tin0;
336 tin[1]=tin1;
337 DES_encrypt3((DES_LONGunsigned int *)tin,ks1,ks2,ks3);
338 tout0=tin[0];
339 tout1=tin[1];
340
341 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))
;
342 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))
;
343 }
344 iv = &(*ivec)[0];
345 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))
;
346 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))
;
347 }
348 else
349 {
350 DES_LONGunsigned int t0,t1;
351
352 c2l(iv,xor0)(xor0 =((unsigned int)(*((iv)++))) , xor0|=((unsigned int)(*(
(iv)++)))<< 8L, xor0|=((unsigned int)(*((iv)++)))<<
16L, xor0|=((unsigned int)(*((iv)++)))<<24L)
;
353 c2l(iv,xor1)(xor1 =((unsigned int)(*((iv)++))) , xor1|=((unsigned int)(*(
(iv)++)))<< 8L, xor1|=((unsigned int)(*((iv)++)))<<
16L, xor1|=((unsigned int)(*((iv)++)))<<24L)
;
354 for (l-=8; l>=0; l-=8)
355 {
356 c2l(in,tin0)(tin0 =((unsigned int)(*((in)++))) , tin0|=((unsigned int)(*(
(in)++)))<< 8L, tin0|=((unsigned int)(*((in)++)))<<
16L, tin0|=((unsigned int)(*((in)++)))<<24L)
;
357 c2l(in,tin1)(tin1 =((unsigned int)(*((in)++))) , tin1|=((unsigned int)(*(
(in)++)))<< 8L, tin1|=((unsigned int)(*((in)++)))<<
16L, tin1|=((unsigned int)(*((in)++)))<<24L)
;
358
359 t0=tin0;
360 t1=tin1;
361
362 tin[0]=tin0;
363 tin[1]=tin1;
364 DES_decrypt3((DES_LONGunsigned int *)tin,ks1,ks2,ks3);
365 tout0=tin[0];
366 tout1=tin[1];
367
368 tout0^=xor0;
369 tout1^=xor1;
370 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))
;
371 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))
;
372 xor0=t0;
373 xor1=t1;
374 }
375 if (l != -8)
376 {
377 c2l(in,tin0)(tin0 =((unsigned int)(*((in)++))) , tin0|=((unsigned int)(*(
(in)++)))<< 8L, tin0|=((unsigned int)(*((in)++)))<<
16L, tin0|=((unsigned int)(*((in)++)))<<24L)
;
378 c2l(in,tin1)(tin1 =((unsigned int)(*((in)++))) , tin1|=((unsigned int)(*(
(in)++)))<< 8L, tin1|=((unsigned int)(*((in)++)))<<
16L, tin1|=((unsigned int)(*((in)++)))<<24L)
;
379
380 t0=tin0;
381 t1=tin1;
382
383 tin[0]=tin0;
384 tin[1]=tin1;
385 DES_decrypt3((DES_LONGunsigned int *)tin,ks1,ks2,ks3);
386 tout0=tin[0];
387 tout1=tin[1];
388
389 tout0^=xor0;
390 tout1^=xor1;
391 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); } }
;
392 xor0=t0;
393 xor1=t1;
394 }
395
396 iv = &(*ivec)[0];
397 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))
;
398 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))
;
399 }
400 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'
401 tin[0]=tin[1]=0;
402 }
403
404#endif /* DES_DEFAULT_OPTIONS */