Bug Summary

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