summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/bf/blowfish.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/libcrypto/bf/blowfish.c696
1 files changed, 0 insertions, 696 deletions
diff --git a/src/lib/libcrypto/bf/blowfish.c b/src/lib/libcrypto/bf/blowfish.c
deleted file mode 100644
index 330d7a8e07..0000000000
--- a/src/lib/libcrypto/bf/blowfish.c
+++ /dev/null
@@ -1,696 +0,0 @@
1/* $OpenBSD: blowfish.c,v 1.3 2024/03/29 02:37:20 joshua Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <openssl/blowfish.h>
60
61#include <string.h>
62
63#include "bf_local.h"
64
65/*
66 * Blowfish as implemented from 'Blowfish: Springer-Verlag paper'
67 * (From LECTURE NOTES IN COMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION,
68 * CAMBRIDGE SECURITY WORKSHOP, CAMBRIDGE, U.K., DECEMBER 9-11, 1993)
69 */
70
71#if (BF_ROUNDS != 16) && (BF_ROUNDS != 20)
72#error If you set BF_ROUNDS to some value other than 16 or 20, you will have \
73to modify the code.
74#endif
75
76static const BF_KEY bf_init = {
77 .P = {
78 0x243f6a88L, 0x85a308d3L, 0x13198a2eL, 0x03707344L,
79 0xa4093822L, 0x299f31d0L, 0x082efa98L, 0xec4e6c89L,
80 0x452821e6L, 0x38d01377L, 0xbe5466cfL, 0x34e90c6cL,
81 0xc0ac29b7L, 0xc97c50ddL, 0x3f84d5b5L, 0xb5470917L,
82 0x9216d5d9L, 0x8979fb1b
83 },
84 .S = {
85 0xd1310ba6L, 0x98dfb5acL, 0x2ffd72dbL, 0xd01adfb7L,
86 0xb8e1afedL, 0x6a267e96L, 0xba7c9045L, 0xf12c7f99L,
87 0x24a19947L, 0xb3916cf7L, 0x0801f2e2L, 0x858efc16L,
88 0x636920d8L, 0x71574e69L, 0xa458fea3L, 0xf4933d7eL,
89 0x0d95748fL, 0x728eb658L, 0x718bcd58L, 0x82154aeeL,
90 0x7b54a41dL, 0xc25a59b5L, 0x9c30d539L, 0x2af26013L,
91 0xc5d1b023L, 0x286085f0L, 0xca417918L, 0xb8db38efL,
92 0x8e79dcb0L, 0x603a180eL, 0x6c9e0e8bL, 0xb01e8a3eL,
93 0xd71577c1L, 0xbd314b27L, 0x78af2fdaL, 0x55605c60L,
94 0xe65525f3L, 0xaa55ab94L, 0x57489862L, 0x63e81440L,
95 0x55ca396aL, 0x2aab10b6L, 0xb4cc5c34L, 0x1141e8ceL,
96 0xa15486afL, 0x7c72e993L, 0xb3ee1411L, 0x636fbc2aL,
97 0x2ba9c55dL, 0x741831f6L, 0xce5c3e16L, 0x9b87931eL,
98 0xafd6ba33L, 0x6c24cf5cL, 0x7a325381L, 0x28958677L,
99 0x3b8f4898L, 0x6b4bb9afL, 0xc4bfe81bL, 0x66282193L,
100 0x61d809ccL, 0xfb21a991L, 0x487cac60L, 0x5dec8032L,
101 0xef845d5dL, 0xe98575b1L, 0xdc262302L, 0xeb651b88L,
102 0x23893e81L, 0xd396acc5L, 0x0f6d6ff3L, 0x83f44239L,
103 0x2e0b4482L, 0xa4842004L, 0x69c8f04aL, 0x9e1f9b5eL,
104 0x21c66842L, 0xf6e96c9aL, 0x670c9c61L, 0xabd388f0L,
105 0x6a51a0d2L, 0xd8542f68L, 0x960fa728L, 0xab5133a3L,
106 0x6eef0b6cL, 0x137a3be4L, 0xba3bf050L, 0x7efb2a98L,
107 0xa1f1651dL, 0x39af0176L, 0x66ca593eL, 0x82430e88L,
108 0x8cee8619L, 0x456f9fb4L, 0x7d84a5c3L, 0x3b8b5ebeL,
109 0xe06f75d8L, 0x85c12073L, 0x401a449fL, 0x56c16aa6L,
110 0x4ed3aa62L, 0x363f7706L, 0x1bfedf72L, 0x429b023dL,
111 0x37d0d724L, 0xd00a1248L, 0xdb0fead3L, 0x49f1c09bL,
112 0x075372c9L, 0x80991b7bL, 0x25d479d8L, 0xf6e8def7L,
113 0xe3fe501aL, 0xb6794c3bL, 0x976ce0bdL, 0x04c006baL,
114 0xc1a94fb6L, 0x409f60c4L, 0x5e5c9ec2L, 0x196a2463L,
115 0x68fb6fafL, 0x3e6c53b5L, 0x1339b2ebL, 0x3b52ec6fL,
116 0x6dfc511fL, 0x9b30952cL, 0xcc814544L, 0xaf5ebd09L,
117 0xbee3d004L, 0xde334afdL, 0x660f2807L, 0x192e4bb3L,
118 0xc0cba857L, 0x45c8740fL, 0xd20b5f39L, 0xb9d3fbdbL,
119 0x5579c0bdL, 0x1a60320aL, 0xd6a100c6L, 0x402c7279L,
120 0x679f25feL, 0xfb1fa3ccL, 0x8ea5e9f8L, 0xdb3222f8L,
121 0x3c7516dfL, 0xfd616b15L, 0x2f501ec8L, 0xad0552abL,
122 0x323db5faL, 0xfd238760L, 0x53317b48L, 0x3e00df82L,
123 0x9e5c57bbL, 0xca6f8ca0L, 0x1a87562eL, 0xdf1769dbL,
124 0xd542a8f6L, 0x287effc3L, 0xac6732c6L, 0x8c4f5573L,
125 0x695b27b0L, 0xbbca58c8L, 0xe1ffa35dL, 0xb8f011a0L,
126 0x10fa3d98L, 0xfd2183b8L, 0x4afcb56cL, 0x2dd1d35bL,
127 0x9a53e479L, 0xb6f84565L, 0xd28e49bcL, 0x4bfb9790L,
128 0xe1ddf2daL, 0xa4cb7e33L, 0x62fb1341L, 0xcee4c6e8L,
129 0xef20cadaL, 0x36774c01L, 0xd07e9efeL, 0x2bf11fb4L,
130 0x95dbda4dL, 0xae909198L, 0xeaad8e71L, 0x6b93d5a0L,
131 0xd08ed1d0L, 0xafc725e0L, 0x8e3c5b2fL, 0x8e7594b7L,
132 0x8ff6e2fbL, 0xf2122b64L, 0x8888b812L, 0x900df01cL,
133 0x4fad5ea0L, 0x688fc31cL, 0xd1cff191L, 0xb3a8c1adL,
134 0x2f2f2218L, 0xbe0e1777L, 0xea752dfeL, 0x8b021fa1L,
135 0xe5a0cc0fL, 0xb56f74e8L, 0x18acf3d6L, 0xce89e299L,
136 0xb4a84fe0L, 0xfd13e0b7L, 0x7cc43b81L, 0xd2ada8d9L,
137 0x165fa266L, 0x80957705L, 0x93cc7314L, 0x211a1477L,
138 0xe6ad2065L, 0x77b5fa86L, 0xc75442f5L, 0xfb9d35cfL,
139 0xebcdaf0cL, 0x7b3e89a0L, 0xd6411bd3L, 0xae1e7e49L,
140 0x00250e2dL, 0x2071b35eL, 0x226800bbL, 0x57b8e0afL,
141 0x2464369bL, 0xf009b91eL, 0x5563911dL, 0x59dfa6aaL,
142 0x78c14389L, 0xd95a537fL, 0x207d5ba2L, 0x02e5b9c5L,
143 0x83260376L, 0x6295cfa9L, 0x11c81968L, 0x4e734a41L,
144 0xb3472dcaL, 0x7b14a94aL, 0x1b510052L, 0x9a532915L,
145 0xd60f573fL, 0xbc9bc6e4L, 0x2b60a476L, 0x81e67400L,
146 0x08ba6fb5L, 0x571be91fL, 0xf296ec6bL, 0x2a0dd915L,
147 0xb6636521L, 0xe7b9f9b6L, 0xff34052eL, 0xc5855664L,
148 0x53b02d5dL, 0xa99f8fa1L, 0x08ba4799L, 0x6e85076aL,
149 0x4b7a70e9L, 0xb5b32944L, 0xdb75092eL, 0xc4192623L,
150 0xad6ea6b0L, 0x49a7df7dL, 0x9cee60b8L, 0x8fedb266L,
151 0xecaa8c71L, 0x699a17ffL, 0x5664526cL, 0xc2b19ee1L,
152 0x193602a5L, 0x75094c29L, 0xa0591340L, 0xe4183a3eL,
153 0x3f54989aL, 0x5b429d65L, 0x6b8fe4d6L, 0x99f73fd6L,
154 0xa1d29c07L, 0xefe830f5L, 0x4d2d38e6L, 0xf0255dc1L,
155 0x4cdd2086L, 0x8470eb26L, 0x6382e9c6L, 0x021ecc5eL,
156 0x09686b3fL, 0x3ebaefc9L, 0x3c971814L, 0x6b6a70a1L,
157 0x687f3584L, 0x52a0e286L, 0xb79c5305L, 0xaa500737L,
158 0x3e07841cL, 0x7fdeae5cL, 0x8e7d44ecL, 0x5716f2b8L,
159 0xb03ada37L, 0xf0500c0dL, 0xf01c1f04L, 0x0200b3ffL,
160 0xae0cf51aL, 0x3cb574b2L, 0x25837a58L, 0xdc0921bdL,
161 0xd19113f9L, 0x7ca92ff6L, 0x94324773L, 0x22f54701L,
162 0x3ae5e581L, 0x37c2dadcL, 0xc8b57634L, 0x9af3dda7L,
163 0xa9446146L, 0x0fd0030eL, 0xecc8c73eL, 0xa4751e41L,
164 0xe238cd99L, 0x3bea0e2fL, 0x3280bba1L, 0x183eb331L,
165 0x4e548b38L, 0x4f6db908L, 0x6f420d03L, 0xf60a04bfL,
166 0x2cb81290L, 0x24977c79L, 0x5679b072L, 0xbcaf89afL,
167 0xde9a771fL, 0xd9930810L, 0xb38bae12L, 0xdccf3f2eL,
168 0x5512721fL, 0x2e6b7124L, 0x501adde6L, 0x9f84cd87L,
169 0x7a584718L, 0x7408da17L, 0xbc9f9abcL, 0xe94b7d8cL,
170 0xec7aec3aL, 0xdb851dfaL, 0x63094366L, 0xc464c3d2L,
171 0xef1c1847L, 0x3215d908L, 0xdd433b37L, 0x24c2ba16L,
172 0x12a14d43L, 0x2a65c451L, 0x50940002L, 0x133ae4ddL,
173 0x71dff89eL, 0x10314e55L, 0x81ac77d6L, 0x5f11199bL,
174 0x043556f1L, 0xd7a3c76bL, 0x3c11183bL, 0x5924a509L,
175 0xf28fe6edL, 0x97f1fbfaL, 0x9ebabf2cL, 0x1e153c6eL,
176 0x86e34570L, 0xeae96fb1L, 0x860e5e0aL, 0x5a3e2ab3L,
177 0x771fe71cL, 0x4e3d06faL, 0x2965dcb9L, 0x99e71d0fL,
178 0x803e89d6L, 0x5266c825L, 0x2e4cc978L, 0x9c10b36aL,
179 0xc6150ebaL, 0x94e2ea78L, 0xa5fc3c53L, 0x1e0a2df4L,
180 0xf2f74ea7L, 0x361d2b3dL, 0x1939260fL, 0x19c27960L,
181 0x5223a708L, 0xf71312b6L, 0xebadfe6eL, 0xeac31f66L,
182 0xe3bc4595L, 0xa67bc883L, 0xb17f37d1L, 0x018cff28L,
183 0xc332ddefL, 0xbe6c5aa5L, 0x65582185L, 0x68ab9802L,
184 0xeecea50fL, 0xdb2f953bL, 0x2aef7dadL, 0x5b6e2f84L,
185 0x1521b628L, 0x29076170L, 0xecdd4775L, 0x619f1510L,
186 0x13cca830L, 0xeb61bd96L, 0x0334fe1eL, 0xaa0363cfL,
187 0xb5735c90L, 0x4c70a239L, 0xd59e9e0bL, 0xcbaade14L,
188 0xeecc86bcL, 0x60622ca7L, 0x9cab5cabL, 0xb2f3846eL,
189 0x648b1eafL, 0x19bdf0caL, 0xa02369b9L, 0x655abb50L,
190 0x40685a32L, 0x3c2ab4b3L, 0x319ee9d5L, 0xc021b8f7L,
191 0x9b540b19L, 0x875fa099L, 0x95f7997eL, 0x623d7da8L,
192 0xf837889aL, 0x97e32d77L, 0x11ed935fL, 0x16681281L,
193 0x0e358829L, 0xc7e61fd6L, 0x96dedfa1L, 0x7858ba99L,
194 0x57f584a5L, 0x1b227263L, 0x9b83c3ffL, 0x1ac24696L,
195 0xcdb30aebL, 0x532e3054L, 0x8fd948e4L, 0x6dbc3128L,
196 0x58ebf2efL, 0x34c6ffeaL, 0xfe28ed61L, 0xee7c3c73L,
197 0x5d4a14d9L, 0xe864b7e3L, 0x42105d14L, 0x203e13e0L,
198 0x45eee2b6L, 0xa3aaabeaL, 0xdb6c4f15L, 0xfacb4fd0L,
199 0xc742f442L, 0xef6abbb5L, 0x654f3b1dL, 0x41cd2105L,
200 0xd81e799eL, 0x86854dc7L, 0xe44b476aL, 0x3d816250L,
201 0xcf62a1f2L, 0x5b8d2646L, 0xfc8883a0L, 0xc1c7b6a3L,
202 0x7f1524c3L, 0x69cb7492L, 0x47848a0bL, 0x5692b285L,
203 0x095bbf00L, 0xad19489dL, 0x1462b174L, 0x23820e00L,
204 0x58428d2aL, 0x0c55f5eaL, 0x1dadf43eL, 0x233f7061L,
205 0x3372f092L, 0x8d937e41L, 0xd65fecf1L, 0x6c223bdbL,
206 0x7cde3759L, 0xcbee7460L, 0x4085f2a7L, 0xce77326eL,
207 0xa6078084L, 0x19f8509eL, 0xe8efd855L, 0x61d99735L,
208 0xa969a7aaL, 0xc50c06c2L, 0x5a04abfcL, 0x800bcadcL,
209 0x9e447a2eL, 0xc3453484L, 0xfdd56705L, 0x0e1e9ec9L,
210 0xdb73dbd3L, 0x105588cdL, 0x675fda79L, 0xe3674340L,
211 0xc5c43465L, 0x713e38d8L, 0x3d28f89eL, 0xf16dff20L,
212 0x153e21e7L, 0x8fb03d4aL, 0xe6e39f2bL, 0xdb83adf7L,
213 0xe93d5a68L, 0x948140f7L, 0xf64c261cL, 0x94692934L,
214 0x411520f7L, 0x7602d4f7L, 0xbcf46b2eL, 0xd4a20068L,
215 0xd4082471L, 0x3320f46aL, 0x43b7d4b7L, 0x500061afL,
216 0x1e39f62eL, 0x97244546L, 0x14214f74L, 0xbf8b8840L,
217 0x4d95fc1dL, 0x96b591afL, 0x70f4ddd3L, 0x66a02f45L,
218 0xbfbc09ecL, 0x03bd9785L, 0x7fac6dd0L, 0x31cb8504L,
219 0x96eb27b3L, 0x55fd3941L, 0xda2547e6L, 0xabca0a9aL,
220 0x28507825L, 0x530429f4L, 0x0a2c86daL, 0xe9b66dfbL,
221 0x68dc1462L, 0xd7486900L, 0x680ec0a4L, 0x27a18deeL,
222 0x4f3ffea2L, 0xe887ad8cL, 0xb58ce006L, 0x7af4d6b6L,
223 0xaace1e7cL, 0xd3375fecL, 0xce78a399L, 0x406b2a42L,
224 0x20fe9e35L, 0xd9f385b9L, 0xee39d7abL, 0x3b124e8bL,
225 0x1dc9faf7L, 0x4b6d1856L, 0x26a36631L, 0xeae397b2L,
226 0x3a6efa74L, 0xdd5b4332L, 0x6841e7f7L, 0xca7820fbL,
227 0xfb0af54eL, 0xd8feb397L, 0x454056acL, 0xba489527L,
228 0x55533a3aL, 0x20838d87L, 0xfe6ba9b7L, 0xd096954bL,
229 0x55a867bcL, 0xa1159a58L, 0xcca92963L, 0x99e1db33L,
230 0xa62a4a56L, 0x3f3125f9L, 0x5ef47e1cL, 0x9029317cL,
231 0xfdf8e802L, 0x04272f70L, 0x80bb155cL, 0x05282ce3L,
232 0x95c11548L, 0xe4c66d22L, 0x48c1133fL, 0xc70f86dcL,
233 0x07f9c9eeL, 0x41041f0fL, 0x404779a4L, 0x5d886e17L,
234 0x325f51ebL, 0xd59bc0d1L, 0xf2bcc18fL, 0x41113564L,
235 0x257b7834L, 0x602a9c60L, 0xdff8e8a3L, 0x1f636c1bL,
236 0x0e12b4c2L, 0x02e1329eL, 0xaf664fd1L, 0xcad18115L,
237 0x6b2395e0L, 0x333e92e1L, 0x3b240b62L, 0xeebeb922L,
238 0x85b2a20eL, 0xe6ba0d99L, 0xde720c8cL, 0x2da2f728L,
239 0xd0127845L, 0x95b794fdL, 0x647d0862L, 0xe7ccf5f0L,
240 0x5449a36fL, 0x877d48faL, 0xc39dfd27L, 0xf33e8d1eL,
241 0x0a476341L, 0x992eff74L, 0x3a6f6eabL, 0xf4f8fd37L,
242 0xa812dc60L, 0xa1ebddf8L, 0x991be14cL, 0xdb6e6b0dL,
243 0xc67b5510L, 0x6d672c37L, 0x2765d43bL, 0xdcd0e804L,
244 0xf1290dc7L, 0xcc00ffa3L, 0xb5390f92L, 0x690fed0bL,
245 0x667b9ffbL, 0xcedb7d9cL, 0xa091cf0bL, 0xd9155ea3L,
246 0xbb132f88L, 0x515bad24L, 0x7b9479bfL, 0x763bd6ebL,
247 0x37392eb3L, 0xcc115979L, 0x8026e297L, 0xf42e312dL,
248 0x6842ada7L, 0xc66a2b3bL, 0x12754cccL, 0x782ef11cL,
249 0x6a124237L, 0xb79251e7L, 0x06a1bbe6L, 0x4bfb6350L,
250 0x1a6b1018L, 0x11caedfaL, 0x3d25bdd8L, 0xe2e1c3c9L,
251 0x44421659L, 0x0a121386L, 0xd90cec6eL, 0xd5abea2aL,
252 0x64af674eL, 0xda86a85fL, 0xbebfe988L, 0x64e4c3feL,
253 0x9dbc8057L, 0xf0f7c086L, 0x60787bf8L, 0x6003604dL,
254 0xd1fd8346L, 0xf6381fb0L, 0x7745ae04L, 0xd736fcccL,
255 0x83426b33L, 0xf01eab71L, 0xb0804187L, 0x3c005e5fL,
256 0x77a057beL, 0xbde8ae24L, 0x55464299L, 0xbf582e61L,
257 0x4e58f48fL, 0xf2ddfda2L, 0xf474ef38L, 0x8789bdc2L,
258 0x5366f9c3L, 0xc8b38e74L, 0xb475f255L, 0x46fcd9b9L,
259 0x7aeb2661L, 0x8b1ddf84L, 0x846a0e79L, 0x915f95e2L,
260 0x466e598eL, 0x20b45770L, 0x8cd55591L, 0xc902de4cL,
261 0xb90bace1L, 0xbb8205d0L, 0x11a86248L, 0x7574a99eL,
262 0xb77f19b6L, 0xe0a9dc09L, 0x662d09a1L, 0xc4324633L,
263 0xe85a1f02L, 0x09f0be8cL, 0x4a99a025L, 0x1d6efe10L,
264 0x1ab93d1dL, 0x0ba5a4dfL, 0xa186f20fL, 0x2868f169L,
265 0xdcb7da83L, 0x573906feL, 0xa1e2ce9bL, 0x4fcd7f52L,
266 0x50115e01L, 0xa70683faL, 0xa002b5c4L, 0x0de6d027L,
267 0x9af88c27L, 0x773f8641L, 0xc3604c06L, 0x61a806b5L,
268 0xf0177a28L, 0xc0f586e0L, 0x006058aaL, 0x30dc7d62L,
269 0x11e69ed7L, 0x2338ea63L, 0x53c2dd94L, 0xc2c21634L,
270 0xbbcbee56L, 0x90bcb6deL, 0xebfc7da1L, 0xce591d76L,
271 0x6f05e409L, 0x4b7c0188L, 0x39720a3dL, 0x7c927c24L,
272 0x86e3725fL, 0x724d9db9L, 0x1ac15bb4L, 0xd39eb8fcL,
273 0xed545578L, 0x08fca5b5L, 0xd83d7cd3L, 0x4dad0fc4L,
274 0x1e50ef5eL, 0xb161e6f8L, 0xa28514d9L, 0x6c51133cL,
275 0x6fd5c7e7L, 0x56e14ec4L, 0x362abfceL, 0xddc6c837L,
276 0xd79a3234L, 0x92638212L, 0x670efa8eL, 0x406000e0L,
277 0x3a39ce37L, 0xd3faf5cfL, 0xabc27737L, 0x5ac52d1bL,
278 0x5cb0679eL, 0x4fa33742L, 0xd3822740L, 0x99bc9bbeL,
279 0xd5118e9dL, 0xbf0f7315L, 0xd62d1c7eL, 0xc700c47bL,
280 0xb78c1b6bL, 0x21a19045L, 0xb26eb1beL, 0x6a366eb4L,
281 0x5748ab2fL, 0xbc946e79L, 0xc6a376d2L, 0x6549c2c8L,
282 0x530ff8eeL, 0x468dde7dL, 0xd5730a1dL, 0x4cd04dc6L,
283 0x2939bbdbL, 0xa9ba4650L, 0xac9526e8L, 0xbe5ee304L,
284 0xa1fad5f0L, 0x6a2d519aL, 0x63ef8ce2L, 0x9a86ee22L,
285 0xc089c2b8L, 0x43242ef6L, 0xa51e03aaL, 0x9cf2d0a4L,
286 0x83c061baL, 0x9be96a4dL, 0x8fe51550L, 0xba645bd6L,
287 0x2826a2f9L, 0xa73a3ae1L, 0x4ba99586L, 0xef5562e9L,
288 0xc72fefd3L, 0xf752f7daL, 0x3f046f69L, 0x77fa0a59L,
289 0x80e4a915L, 0x87b08601L, 0x9b09e6adL, 0x3b3ee593L,
290 0xe990fd5aL, 0x9e34d797L, 0x2cf0b7d9L, 0x022b8b51L,
291 0x96d5ac3aL, 0x017da67dL, 0xd1cf3ed6L, 0x7c7d2d28L,
292 0x1f9f25cfL, 0xadf2b89bL, 0x5ad6b472L, 0x5a88f54cL,
293 0xe029ac71L, 0xe019a5e6L, 0x47b0acfdL, 0xed93fa9bL,
294 0xe8d3c48dL, 0x283b57ccL, 0xf8d56629L, 0x79132e28L,
295 0x785f0191L, 0xed756055L, 0xf7960e44L, 0xe3d35e8cL,
296 0x15056dd4L, 0x88f46dbaL, 0x03a16125L, 0x0564f0bdL,
297 0xc3eb9e15L, 0x3c9057a2L, 0x97271aecL, 0xa93a072aL,
298 0x1b3f6d9bL, 0x1e6321f5L, 0xf59c66fbL, 0x26dcf319L,
299 0x7533d928L, 0xb155fdf5L, 0x03563482L, 0x8aba3cbbL,
300 0x28517711L, 0xc20ad9f8L, 0xabcc5167L, 0xccad925fL,
301 0x4de81751L, 0x3830dc8eL, 0x379d5862L, 0x9320f991L,
302 0xea7a90c2L, 0xfb3e7bceL, 0x5121ce64L, 0x774fbe32L,
303 0xa8b6e37eL, 0xc3293d46L, 0x48de5369L, 0x6413e680L,
304 0xa2ae0810L, 0xdd6db224L, 0x69852dfdL, 0x09072166L,
305 0xb39a460aL, 0x6445c0ddL, 0x586cdecfL, 0x1c20c8aeL,
306 0x5bbef7ddL, 0x1b588d40L, 0xccd2017fL, 0x6bb4e3bbL,
307 0xdda26a7eL, 0x3a59ff45L, 0x3e350a44L, 0xbcb4cdd5L,
308 0x72eacea8L, 0xfa6484bbL, 0x8d6612aeL, 0xbf3c6f47L,
309 0xd29be463L, 0x542f5d9eL, 0xaec2771bL, 0xf64e6370L,
310 0x740e0d8dL, 0xe75b1357L, 0xf8721671L, 0xaf537d5dL,
311 0x4040cb08L, 0x4eb4e2ccL, 0x34d2466aL, 0x0115af84L,
312 0xe1b00428L, 0x95983a1dL, 0x06b89fb4L, 0xce6ea048L,
313 0x6f3f3b82L, 0x3520ab82L, 0x011a1d4bL, 0x277227f8L,
314 0x611560b1L, 0xe7933fdcL, 0xbb3a792bL, 0x344525bdL,
315 0xa08839e1L, 0x51ce794bL, 0x2f32c9b7L, 0xa01fbac9L,
316 0xe01cc87eL, 0xbcc7d1f6L, 0xcf0111c3L, 0xa1e8aac7L,
317 0x1a908749L, 0xd44fbd9aL, 0xd0dadecbL, 0xd50ada38L,
318 0x0339c32aL, 0xc6913667L, 0x8df9317cL, 0xe0b12b4fL,
319 0xf79e59b7L, 0x43f5bb3aL, 0xf2d519ffL, 0x27d9459cL,
320 0xbf97222cL, 0x15e6fc2aL, 0x0f91fc71L, 0x9b941525L,
321 0xfae59361L, 0xceb69cebL, 0xc2a86459L, 0x12baa8d1L,
322 0xb6c1075eL, 0xe3056a0cL, 0x10d25065L, 0xcb03a442L,
323 0xe0ec6e0eL, 0x1698db3bL, 0x4c98a0beL, 0x3278e964L,
324 0x9f1f9532L, 0xe0d392dfL, 0xd3a0342bL, 0x8971f21eL,
325 0x1b0a7441L, 0x4ba3348cL, 0xc5be7120L, 0xc37632d8L,
326 0xdf359f8dL, 0x9b992f2eL, 0xe60b6f47L, 0x0fe3f11dL,
327 0xe54cda54L, 0x1edad891L, 0xce6279cfL, 0xcd3e7e6fL,
328 0x1618b166L, 0xfd2c1d05L, 0x848fd2c5L, 0xf6fb2299L,
329 0xf523f357L, 0xa6327623L, 0x93a83531L, 0x56cccd02L,
330 0xacf08162L, 0x5a75ebb5L, 0x6e163697L, 0x88d273ccL,
331 0xde966292L, 0x81b949d0L, 0x4c50901bL, 0x71c65614L,
332 0xe6c6c7bdL, 0x327a140aL, 0x45e1d006L, 0xc3f27b9aL,
333 0xc9aa53fdL, 0x62a80f00L, 0xbb25bfe2L, 0x35bdd2f6L,
334 0x71126905L, 0xb2040222L, 0xb6cbcf7cL, 0xcd769c2bL,
335 0x53113ec0L, 0x1640e3d3L, 0x38abbd60L, 0x2547adf0L,
336 0xba38209cL, 0xf746ce76L, 0x77afa1c5L, 0x20756060L,
337 0x85cbfe4eL, 0x8ae88dd8L, 0x7aaaf9b0L, 0x4cf9aa7eL,
338 0x1948c25cL, 0x02fb8a8cL, 0x01c36ae4L, 0xd6ebe1f9L,
339 0x90d4f869L, 0xa65cdea0L, 0x3f09252dL, 0xc208e69fL,
340 0xb74e6132L, 0xce77e25bL, 0x578fdfe3L, 0x3ac372e6L,
341 }
342};
343
344void
345BF_encrypt(BF_LONG *data, const BF_KEY *key)
346{
347 BF_LONG l, r;
348 const BF_LONG *p, *s;
349
350 p = key->P;
351 s = &(key->S[0]);
352 l = data[0];
353 r = data[1];
354
355 l ^= p[0];
356 BF_ENC(r, l,s, p[1]);
357 BF_ENC(l, r,s, p[2]);
358 BF_ENC(r, l,s, p[3]);
359 BF_ENC(l, r,s, p[4]);
360 BF_ENC(r, l,s, p[5]);
361 BF_ENC(l, r,s, p[6]);
362 BF_ENC(r, l,s, p[7]);
363 BF_ENC(l, r,s, p[8]);
364 BF_ENC(r, l,s, p[9]);
365 BF_ENC(l, r,s, p[10]);
366 BF_ENC(r, l,s, p[11]);
367 BF_ENC(l, r,s, p[12]);
368 BF_ENC(r, l,s, p[13]);
369 BF_ENC(l, r,s, p[14]);
370 BF_ENC(r, l,s, p[15]);
371 BF_ENC(l, r,s, p[16]);
372#if BF_ROUNDS == 20
373 BF_ENC(r, l,s, p[17]);
374 BF_ENC(l, r,s, p[18]);
375 BF_ENC(r, l,s, p[19]);
376 BF_ENC(l, r,s, p[20]);
377#endif
378 r ^= p[BF_ROUNDS + 1];
379
380 data[1] = l&0xffffffffL;
381 data[0] = r&0xffffffffL;
382}
383LCRYPTO_ALIAS(BF_encrypt);
384
385#ifndef BF_DEFAULT_OPTIONS
386
387void
388BF_decrypt(BF_LONG *data, const BF_KEY *key)
389{
390 BF_LONG l, r;
391 const BF_LONG *p, *s;
392
393 p = key->P;
394 s = &(key->S[0]);
395 l = data[0];
396 r = data[1];
397
398 l ^= p[BF_ROUNDS + 1];
399#if BF_ROUNDS == 20
400 BF_ENC(r, l,s, p[20]);
401 BF_ENC(l, r,s, p[19]);
402 BF_ENC(r, l,s, p[18]);
403 BF_ENC(l, r,s, p[17]);
404#endif
405 BF_ENC(r, l,s, p[16]);
406 BF_ENC(l, r,s, p[15]);
407 BF_ENC(r, l,s, p[14]);
408 BF_ENC(l, r,s, p[13]);
409 BF_ENC(r, l,s, p[12]);
410 BF_ENC(l, r,s, p[11]);
411 BF_ENC(r, l,s, p[10]);
412 BF_ENC(l, r,s, p[9]);
413 BF_ENC(r, l,s, p[8]);
414 BF_ENC(l, r,s, p[7]);
415 BF_ENC(r, l,s, p[6]);
416 BF_ENC(l, r,s, p[5]);
417 BF_ENC(r, l,s, p[4]);
418 BF_ENC(l, r,s, p[3]);
419 BF_ENC(r, l,s, p[2]);
420 BF_ENC(l, r,s, p[1]);
421 r ^= p[0];
422
423 data[1] = l&0xffffffffL;
424 data[0] = r&0xffffffffL;
425}
426LCRYPTO_ALIAS(BF_decrypt);
427
428void
429BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
430 const BF_KEY *schedule, unsigned char *ivec, int encrypt)
431{
432 BF_LONG tin0, tin1;
433 BF_LONG tout0, tout1, xor0, xor1;
434 long l = length;
435 BF_LONG tin[2];
436
437 if (encrypt) {
438 n2l(ivec, tout0);
439 n2l(ivec, tout1);
440 ivec -= 8;
441 for (l -= 8; l >= 0; l -= 8) {
442 n2l(in, tin0);
443 n2l(in, tin1);
444 tin0 ^= tout0;
445 tin1 ^= tout1;
446 tin[0] = tin0;
447 tin[1] = tin1;
448 BF_encrypt(tin, schedule);
449 tout0 = tin[0];
450 tout1 = tin[1];
451 l2n(tout0, out);
452 l2n(tout1, out);
453 }
454 if (l != -8) {
455 n2ln(in, tin0, tin1, l + 8);
456 tin0 ^= tout0;
457 tin1 ^= tout1;
458 tin[0] = tin0;
459 tin[1] = tin1;
460 BF_encrypt(tin, schedule);
461 tout0 = tin[0];
462 tout1 = tin[1];
463 l2n(tout0, out);
464 l2n(tout1, out);
465 }
466 l2n(tout0, ivec);
467 l2n(tout1, ivec);
468 } else {
469 n2l(ivec, xor0);
470 n2l(ivec, xor1);
471 ivec -= 8;
472 for (l -= 8; l >= 0; l -= 8) {
473 n2l(in, tin0);
474 n2l(in, tin1);
475 tin[0] = tin0;
476 tin[1] = tin1;
477 BF_decrypt(tin, schedule);
478 tout0 = tin[0]^xor0;
479 tout1 = tin[1]^xor1;
480 l2n(tout0, out);
481 l2n(tout1, out);
482 xor0 = tin0;
483 xor1 = tin1;
484 }
485 if (l != -8) {
486 n2l(in, tin0);
487 n2l(in, tin1);
488 tin[0] = tin0;
489 tin[1] = tin1;
490 BF_decrypt(tin, schedule);
491 tout0 = tin[0]^xor0;
492 tout1 = tin[1]^xor1;
493 l2nn(tout0, tout1, out, l + 8);
494 xor0 = tin0;
495 xor1 = tin1;
496 }
497 l2n(xor0, ivec);
498 l2n(xor1, ivec);
499 }
500 tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
501 tin[0] = tin[1] = 0;
502}
503LCRYPTO_ALIAS(BF_cbc_encrypt);
504
505/*
506 * The input and output encrypted as though 64bit cfb mode is being
507 * used. The extra state information to record how much of the
508 * 64bit block we have used is contained in *num;
509 */
510
511void
512BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, long length,
513 const BF_KEY *schedule, unsigned char *ivec, int *num, int encrypt)
514{
515 BF_LONG v0, v1, t;
516 int n= *num;
517 long l = length;
518 BF_LONG ti[2];
519 unsigned char *iv, c, cc;
520
521 iv = (unsigned char *)ivec;
522 if (encrypt) {
523 while (l--) {
524 if (n == 0) {
525 n2l(iv, v0);
526 ti[0] = v0;
527 n2l(iv, v1);
528 ti[1] = v1;
529 BF_encrypt((BF_LONG *)ti, schedule);
530 iv = (unsigned char *)ivec;
531 t = ti[0];
532 l2n(t, iv);
533 t = ti[1];
534 l2n(t, iv);
535 iv = (unsigned char *)ivec;
536 }
537 c= *(in++)^iv[n];
538 *(out++) = c;
539 iv[n] = c;
540 n = (n + 1)&0x07;
541 }
542 } else {
543 while (l--) {
544 if (n == 0) {
545 n2l(iv, v0);
546 ti[0] = v0;
547 n2l(iv, v1);
548 ti[1] = v1;
549 BF_encrypt((BF_LONG *)ti, schedule);
550 iv = (unsigned char *)ivec;
551 t = ti[0];
552 l2n(t, iv);
553 t = ti[1];
554 l2n(t, iv);
555 iv = (unsigned char *)ivec;
556 }
557 cc= *(in++);
558 c = iv[n];
559 iv[n] = cc;
560 *(out++) = c^cc;
561 n = (n + 1)&0x07;
562 }
563 }
564 v0 = v1 = ti[0] = ti[1] = t=c = cc = 0;
565 *num = n;
566}
567LCRYPTO_ALIAS(BF_cfb64_encrypt);
568
569void
570BF_ecb_encrypt(const unsigned char *in, unsigned char *out,
571 const BF_KEY *key, int encrypt)
572{
573 BF_LONG l, d[2];
574
575 n2l(in, l);
576 d[0] = l;
577 n2l(in, l);
578 d[1] = l;
579 if (encrypt)
580 BF_encrypt(d, key);
581 else
582 BF_decrypt(d, key);
583 l = d[0];
584 l2n(l, out);
585 l = d[1];
586 l2n(l, out);
587 l = d[0] = d[1] = 0;
588}
589LCRYPTO_ALIAS(BF_ecb_encrypt);
590
591/*
592 * The input and output encrypted as though 64bit ofb mode is being
593 * used. The extra state information to record how much of the
594 * 64bit block we have used is contained in *num;
595 */
596void
597BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, long length,
598 const BF_KEY *schedule, unsigned char *ivec, int *num)
599{
600 BF_LONG v0, v1, t;
601 int n= *num;
602 long l = length;
603 unsigned char d[8];
604 char *dp;
605 BF_LONG ti[2];
606 unsigned char *iv;
607 int save = 0;
608
609 iv = (unsigned char *)ivec;
610 n2l(iv, v0);
611 n2l(iv, v1);
612 ti[0] = v0;
613 ti[1] = v1;
614 dp = (char *)d;
615 l2n(v0, dp);
616 l2n(v1, dp);
617 while (l--) {
618 if (n == 0) {
619 BF_encrypt((BF_LONG *)ti, schedule);
620 dp = (char *)d;
621 t = ti[0];
622 l2n(t, dp);
623 t = ti[1];
624 l2n(t, dp);
625 save++;
626 }
627 *(out++)= *(in++)^d[n];
628 n = (n + 1)&0x07;
629 }
630 if (save) {
631 v0 = ti[0];
632 v1 = ti[1];
633 iv = (unsigned char *)ivec;
634 l2n(v0, iv);
635 l2n(v1, iv);
636 }
637 t = v0 = v1 = ti[0] = ti[1] = 0;
638 *num = n;
639}
640LCRYPTO_ALIAS(BF_ofb64_encrypt);
641
642void
643BF_set_key(BF_KEY *key, int len, const unsigned char *data)
644{
645 int i;
646 BF_LONG *p, ri, in[2];
647 const unsigned char *d, *end;
648
649 memcpy(key, &bf_init, sizeof(BF_KEY));
650 p = key->P;
651
652 if (len > ((BF_ROUNDS + 2)*4))
653 len = (BF_ROUNDS + 2)*4;
654
655 d = data;
656 end = &(data[len]);
657 for (i = 0; i < (BF_ROUNDS + 2); i++) {
658 ri= *(d++);
659 if (d >= end)
660 d = data;
661
662 ri <<= 8;
663 ri |= *(d++);
664 if (d >= end)
665 d = data;
666
667 ri <<= 8;
668 ri |= *(d++);
669 if (d >= end)
670 d = data;
671
672 ri <<= 8;
673 ri |= *(d++);
674 if (d >= end)
675 d = data;
676
677 p[i]^=ri;
678 }
679
680 in[0] = 0L;
681 in[1] = 0L;
682 for (i = 0; i < (BF_ROUNDS + 2); i += 2) {
683 BF_encrypt(in, key);
684 p[i ] = in[0];
685 p[i + 1] = in[1];
686 }
687
688 p = key->S;
689 for (i = 0; i < 4*256; i += 2) {
690 BF_encrypt(in, key);
691 p[i ] = in[0];
692 p[i + 1] = in[1];
693 }
694}
695LCRYPTO_ALIAS(BF_set_key);
696#endif