Print this page
3882 remove xmod & friends
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/lib/crypt_modules/bsdbf/blowfish.c
+++ new/usr/src/lib/crypt_modules/bsdbf/blowfish.c
1 1 /*
2 2 * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
3 3 * Use is subject to license terms.
4 4 */
5 5
6 6 /*
7 7 * The above Sun copyright is included due to changes made to this code
8 8 * for US export control. No changes to the algorithm implementations have
9 9 * been made.
10 10 */
11 11
12 12 #pragma ident "%Z%%M% %I% %E% SMI"
13 13
14 14 /* $OpenBSD: blowfish.c,v 1.16 2002/02/19 19:39:36 millert Exp $ */
15 15 /*
16 16 * Blowfish block cipher for OpenBSD
17 17 * Copyright 1997 Niels Provos <provos@physnet.uni-hamburg.de>
18 18 * All rights reserved.
19 19 *
20 20 * Implementation advice by David Mazieres <dm@lcs.mit.edu>.
21 21 *
22 22 * Redistribution and use in source and binary forms, with or without
23 23 * modification, are permitted provided that the following conditions
24 24 * are met:
25 25 * 1. Redistributions of source code must retain the above copyright
26 26 * notice, this list of conditions and the following disclaimer.
27 27 * 2. Redistributions in binary form must reproduce the above copyright
28 28 * notice, this list of conditions and the following disclaimer in the
29 29 * documentation and/or other materials provided with the distribution.
30 30 * 3. All advertising materials mentioning features or use of this software
31 31 * must display the following acknowledgement:
32 32 * This product includes software developed by Niels Provos.
33 33 * 4. The name of the author may not be used to endorse or promote products
34 34 * derived from this software without specific prior written permission.
35 35 *
36 36 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
37 37 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38 38 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
39 39 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
40 40 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41 41 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
42 42 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
43 43 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
44 44 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
45 45 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
46 46 */
47 47
48 48 /*
49 49 * This code is derived from section 14.3 and the given source
50 50 * in section V of Applied Cryptography, second edition.
51 51 * Blowfish is an unpatented fast block cipher designed by
52 52 * Bruce Schneier.
53 53 */
54 54
55 55 #if 0
56 56 #include <stdio.h> /* used for debugging */
57 57 #include <string.h>
58 58 #endif
59 59
60 60 #include <sys/types.h>
61 61 #include <blf.h>
62 62
63 63 #undef inline
64 64 #ifdef __GNUC__
65 65 #define inline __inline
66 66 #else /* !__GNUC__ */
67 67 #define inline
68 68 #endif /* !__GNUC__ */
69 69
70 70 /* Function for Feistel Networks */
71 71
72 72 #define F(s, x) ((((s)[ (((x)>>24)&0xFF)] \
73 73 + (s)[0x100 + (((x)>>16)&0xFF)]) \
74 74 ^ (s)[0x200 + (((x)>> 8)&0xFF)]) \
↓ open down ↓ |
74 lines elided |
↑ open up ↑ |
75 75 + (s)[0x300 + ( (x) &0xFF)])
76 76
77 77 #define BLFRND(s,p,i,j,n) (i ^= F(s,j) ^ (p)[n])
78 78
79 79 void
80 80 Blowfish_encipher(c, xl, xr)
81 81 blf_ctx *c;
82 82 uint32_t *xl;
83 83 uint32_t *xr;
84 84 {
85 -/* CRYPT DELETE START */
86 85 uint32_t Xl;
87 86 uint32_t Xr;
88 87 uint32_t *s = c->S[0];
89 88 uint32_t *p = c->P;
90 89
91 90 Xl = *xl;
92 91 Xr = *xr;
93 92
94 93 Xl ^= p[0];
95 94 BLFRND(s, p, Xr, Xl, 1); BLFRND(s, p, Xl, Xr, 2);
96 95 BLFRND(s, p, Xr, Xl, 3); BLFRND(s, p, Xl, Xr, 4);
97 96 BLFRND(s, p, Xr, Xl, 5); BLFRND(s, p, Xl, Xr, 6);
98 97 BLFRND(s, p, Xr, Xl, 7); BLFRND(s, p, Xl, Xr, 8);
99 98 BLFRND(s, p, Xr, Xl, 9); BLFRND(s, p, Xl, Xr, 10);
100 99 BLFRND(s, p, Xr, Xl, 11); BLFRND(s, p, Xl, Xr, 12);
101 100 BLFRND(s, p, Xr, Xl, 13); BLFRND(s, p, Xl, Xr, 14);
102 101 BLFRND(s, p, Xr, Xl, 15); BLFRND(s, p, Xl, Xr, 16);
103 102
104 103 *xl = Xr ^ p[17];
105 104 *xr = Xl;
106 -/* CRYPT DELETE END */
107 105 }
108 106
109 107 void
110 108 Blowfish_decipher(c, xl, xr)
111 109 blf_ctx *c;
112 110 uint32_t *xl;
113 111 uint32_t *xr;
114 112 {
115 -/* CRYPT DELETE START */
116 113 uint32_t Xl;
117 114 uint32_t Xr;
118 115 uint32_t *s = c->S[0];
119 116 uint32_t *p = c->P;
120 117
121 118 Xl = *xl;
122 119 Xr = *xr;
123 120
124 121 Xl ^= p[17];
125 122 BLFRND(s, p, Xr, Xl, 16); BLFRND(s, p, Xl, Xr, 15);
126 123 BLFRND(s, p, Xr, Xl, 14); BLFRND(s, p, Xl, Xr, 13);
127 124 BLFRND(s, p, Xr, Xl, 12); BLFRND(s, p, Xl, Xr, 11);
128 125 BLFRND(s, p, Xr, Xl, 10); BLFRND(s, p, Xl, Xr, 9);
129 126 BLFRND(s, p, Xr, Xl, 8); BLFRND(s, p, Xl, Xr, 7);
130 127 BLFRND(s, p, Xr, Xl, 6); BLFRND(s, p, Xl, Xr, 5);
131 128 BLFRND(s, p, Xr, Xl, 4); BLFRND(s, p, Xl, Xr, 3);
132 129 BLFRND(s, p, Xr, Xl, 2); BLFRND(s, p, Xl, Xr, 1);
133 130
134 131 *xl = Xr ^ p[0];
135 132 *xr = Xl;
136 -/* CRYPT DELETE END */
137 133 }
138 134
139 135 void
140 136 Blowfish_initstate(c)
141 137 blf_ctx *c;
142 138 {
143 -/* CRYPT DELETE START */
144 -
145 139 /* P-box and S-box tables initialized with digits of Pi */
146 140
147 141 const blf_ctx initstate =
148 142
149 143 { {
150 144 {
151 145 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,
152 146 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
153 147 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,
154 148 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
155 149 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,
156 150 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
157 151 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,
158 152 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
159 153 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,
160 154 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
161 155 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,
162 156 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
163 157 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,
164 158 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
165 159 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,
166 160 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
167 161 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,
168 162 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
169 163 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,
170 164 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
171 165 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,
172 166 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
173 167 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,
174 168 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
175 169 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,
176 170 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
177 171 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,
178 172 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
179 173 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,
180 174 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
181 175 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,
182 176 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
183 177 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,
184 178 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
185 179 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,
186 180 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
187 181 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,
188 182 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
189 183 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,
190 184 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
191 185 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,
192 186 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
193 187 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,
194 188 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
195 189 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,
196 190 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
197 191 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,
198 192 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
199 193 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,
200 194 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
201 195 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,
202 196 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
203 197 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,
204 198 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
205 199 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,
206 200 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
207 201 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,
208 202 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
209 203 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,
210 204 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
211 205 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,
212 206 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
213 207 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,
214 208 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a},
215 209 {
216 210 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,
217 211 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
218 212 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,
219 213 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
220 214 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,
221 215 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
222 216 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,
223 217 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
224 218 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,
225 219 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
226 220 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,
227 221 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
228 222 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,
229 223 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
230 224 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,
231 225 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
232 226 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,
233 227 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
234 228 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,
235 229 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
236 230 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,
237 231 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
238 232 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,
239 233 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
240 234 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,
241 235 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
242 236 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,
243 237 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
244 238 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,
245 239 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
246 240 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,
247 241 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
248 242 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,
249 243 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
250 244 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,
251 245 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
252 246 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,
253 247 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
254 248 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,
255 249 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
256 250 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,
257 251 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
258 252 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,
259 253 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
260 254 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,
261 255 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
262 256 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,
263 257 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
264 258 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,
265 259 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
266 260 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,
267 261 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
268 262 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,
269 263 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
270 264 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,
271 265 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
272 266 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,
273 267 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
274 268 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,
275 269 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
276 270 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,
277 271 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
278 272 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,
279 273 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7},
280 274 {
281 275 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,
282 276 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
283 277 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,
284 278 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
285 279 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,
286 280 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
287 281 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,
288 282 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
289 283 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,
290 284 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
291 285 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,
292 286 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
293 287 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,
294 288 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
295 289 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,
296 290 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
297 291 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,
298 292 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
299 293 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,
300 294 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
301 295 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,
302 296 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
303 297 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,
304 298 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
305 299 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,
306 300 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
307 301 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,
308 302 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
309 303 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,
310 304 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
311 305 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,
312 306 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
313 307 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,
314 308 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
315 309 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,
316 310 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
317 311 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,
318 312 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
319 313 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,
320 314 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
321 315 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,
322 316 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
323 317 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,
324 318 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
325 319 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,
326 320 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
327 321 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,
328 322 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
329 323 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,
330 324 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
331 325 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,
332 326 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
333 327 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,
334 328 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
335 329 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,
336 330 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
337 331 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,
338 332 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
339 333 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,
340 334 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
341 335 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,
342 336 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
343 337 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,
344 338 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0},
345 339 {
346 340 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,
347 341 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
348 342 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,
349 343 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
350 344 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,
351 345 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
352 346 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,
353 347 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
354 348 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,
355 349 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
356 350 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,
357 351 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
358 352 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,
359 353 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
360 354 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,
361 355 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
362 356 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,
363 357 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
364 358 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,
365 359 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
366 360 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,
367 361 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
368 362 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,
369 363 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
370 364 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,
371 365 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
372 366 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,
373 367 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
374 368 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,
375 369 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
376 370 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,
377 371 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
378 372 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,
379 373 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
380 374 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,
381 375 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
382 376 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,
383 377 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
384 378 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,
385 379 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
386 380 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,
387 381 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
388 382 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,
389 383 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
390 384 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,
391 385 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
392 386 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,
393 387 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
394 388 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,
395 389 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
396 390 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,
397 391 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
398 392 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,
399 393 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
400 394 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,
401 395 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
402 396 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,
403 397 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
404 398 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,
405 399 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
406 400 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,
407 401 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
408 402 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,
409 403 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6}
↓ open down ↓ |
255 lines elided |
↑ open up ↑ |
410 404 },
411 405 {
412 406 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
413 407 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
414 408 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
415 409 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
416 410 0x9216d5d9, 0x8979fb1b
417 411 } };
418 412
419 413 *c = initstate;
420 -
421 -/* CRYPT DELETE END */
422 414 }
423 415
424 416 uint32_t
425 417 Blowfish_stream2word(const uint8_t *data, uint16_t databytes, uint16_t *current)
426 418 {
427 419 uint8_t i;
428 420 uint16_t j;
429 421 uint32_t temp;
430 422
431 423 temp = 0x00000000;
432 -/* CRYPT DELETE START */
433 424 j = *current;
434 425
435 426 for (i = 0; i < 4; i++, j++) {
436 427 if (j >= databytes)
437 428 j = 0;
438 429 temp = (temp << 8) | data[j];
439 430 }
440 431
441 432 *current = j;
442 -/* CRYPT DELETE END */
443 433 return temp;
444 434 }
445 435
446 436 void
447 437 Blowfish_expand0state(blf_ctx *c, const uint8_t *key, uint16_t keybytes)
448 438 {
449 -/* CRYPT DELETE START */
450 439 uint16_t i;
451 440 uint16_t j;
452 441 uint16_t k;
453 442 uint32_t temp;
454 443 uint32_t datal;
455 444 uint32_t datar;
456 445
457 446 j = 0;
458 447 for (i = 0; i < BLF_N + 2; i++) {
459 448 /* Extract 4 int8 to 1 int32 from keystream */
460 449 temp = Blowfish_stream2word(key, keybytes, &j);
461 450 c->P[i] = c->P[i] ^ temp;
462 451 }
463 452
464 453 j = 0;
465 454 datal = 0x00000000;
466 455 datar = 0x00000000;
467 456 for (i = 0; i < BLF_N + 2; i += 2) {
468 457 Blowfish_encipher(c, &datal, &datar);
469 458
470 459 c->P[i] = datal;
471 460 c->P[i + 1] = datar;
↓ open down ↓ |
12 lines elided |
↑ open up ↑ |
472 461 }
473 462
474 463 for (i = 0; i < 4; i++) {
475 464 for (k = 0; k < 256; k += 2) {
476 465 Blowfish_encipher(c, &datal, &datar);
477 466
478 467 c->S[i][k] = datal;
479 468 c->S[i][k + 1] = datar;
480 469 }
481 470 }
482 -/* CRYPT DELETE END */
483 471 }
484 472
485 473
486 474 void
487 475 Blowfish_expandstate(blf_ctx *c, const uint8_t *data, uint16_t databytes,
488 476 const uint8_t *key, uint16_t keybytes)
489 477 {
490 -/* CRYPT DELETE START */
491 478 uint16_t i;
492 479 uint16_t j;
493 480 uint16_t k;
494 481 uint32_t temp;
495 482 uint32_t datal;
496 483 uint32_t datar;
497 484
498 485 j = 0;
499 486 for (i = 0; i < BLF_N + 2; i++) {
500 487 /* Extract 4 int8 to 1 int32 from keystream */
501 488 temp = Blowfish_stream2word(key, keybytes, &j);
502 489 c->P[i] = c->P[i] ^ temp;
503 490 }
504 491
505 492 j = 0;
506 493 datal = 0x00000000;
507 494 datar = 0x00000000;
508 495 for (i = 0; i < BLF_N + 2; i += 2) {
509 496 datal ^= Blowfish_stream2word(data, databytes, &j);
510 497 datar ^= Blowfish_stream2word(data, databytes, &j);
511 498 Blowfish_encipher(c, &datal, &datar);
512 499
513 500 c->P[i] = datal;
514 501 c->P[i + 1] = datar;
515 502 }
516 503
↓ open down ↓ |
16 lines elided |
↑ open up ↑ |
517 504 for (i = 0; i < 4; i++) {
518 505 for (k = 0; k < 256; k += 2) {
519 506 datal ^= Blowfish_stream2word(data, databytes, &j);
520 507 datar ^= Blowfish_stream2word(data, databytes, &j);
521 508 Blowfish_encipher(c, &datal, &datar);
522 509
523 510 c->S[i][k] = datal;
524 511 c->S[i][k + 1] = datar;
525 512 }
526 513 }
527 -
528 -/* CRYPT DELETE END */
529 514 }
530 515
531 516 void
532 517 blf_key(blf_ctx *c, const uint8_t *k, uint16_t len)
533 518 {
534 -/* CRYPT DELETE START */
535 519 /* Initialize S-boxes and subkeys with Pi */
536 520 Blowfish_initstate(c);
537 521
538 522 /* Transform S-boxes and subkeys with key */
539 523 Blowfish_expand0state(c, k, len);
540 -/* CRYPT DELETE END */
541 524 }
542 525
543 526 void
544 527 blf_enc(blf_ctx *c, uint32_t *data, uint16_t blocks)
545 528 {
546 -/* CRYPT DELETE START */
547 529 uint32_t *d;
548 530 uint16_t i;
549 531
550 532 d = data;
551 533 for (i = 0; i < blocks; i++) {
552 534 Blowfish_encipher(c, d, d + 1);
553 535 d += 2;
554 536 }
555 -/* CRYPT DELETE END */
556 537 }
557 538
558 539 void
559 540 blf_dec(blf_ctx *c, uint32_t *data, uint16_t blocks)
560 541 {
561 -/* CRYPT DELETE START */
562 542 uint32_t *d;
563 543 uint16_t i;
564 544
565 545 d = data;
566 546 for (i = 0; i < blocks; i++) {
567 547 Blowfish_decipher(c, d, d + 1);
568 548 d += 2;
569 549 }
570 -/* CRYPT DELETE END */
571 550 }
572 551
573 552 void
574 553 blf_ecb_encrypt(blf_ctx *c, uint8_t *data, uint32_t len)
575 554 {
576 -/* CRYPT DELETE START */
577 555 uint32_t l, r;
578 556 uint32_t i;
579 557
580 558 for (i = 0; i < len; i += 8) {
581 559 l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
582 560 r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
583 561 Blowfish_encipher(c, &l, &r);
584 562 data[0] = l >> 24 & 0xff;
585 563 data[1] = l >> 16 & 0xff;
586 564 data[2] = l >> 8 & 0xff;
587 565 data[3] = l & 0xff;
588 566 data[4] = r >> 24 & 0xff;
589 567 data[5] = r >> 16 & 0xff;
590 568 data[6] = r >> 8 & 0xff;
591 569 data[7] = r & 0xff;
592 570 data += 8;
593 571 }
594 -/* CRYPT DELETE END */
595 572 }
596 573
597 574 void
598 575 blf_ecb_decrypt(blf_ctx *c, uint8_t *data, uint32_t len)
599 576 {
600 -/* CRYPT DELETE START */
601 577 uint32_t l, r;
602 578 uint32_t i;
603 579
604 580 for (i = 0; i < len; i += 8) {
605 581 l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
606 582 r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
607 583 Blowfish_decipher(c, &l, &r);
608 584 data[0] = l >> 24 & 0xff;
609 585 data[1] = l >> 16 & 0xff;
610 586 data[2] = l >> 8 & 0xff;
611 587 data[3] = l & 0xff;
612 588 data[4] = r >> 24 & 0xff;
613 589 data[5] = r >> 16 & 0xff;
614 590 data[6] = r >> 8 & 0xff;
615 591 data[7] = r & 0xff;
616 592 data += 8;
617 593 }
618 -/* CRYPT DELETE END */
619 594 }
620 595
621 596 void
622 597 blf_cbc_encrypt(blf_ctx *c, uint8_t *iv, uint8_t *data, uint32_t len)
623 598 {
624 -/* CRYPT DELETE START */
625 599 uint32_t l, r;
626 600 uint32_t i, j;
627 601
628 602 for (i = 0; i < len; i += 8) {
629 603 for (j = 0; j < 8; j++)
630 604 data[j] ^= iv[j];
631 605 l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
632 606 r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
633 607 Blowfish_encipher(c, &l, &r);
634 608 data[0] = l >> 24 & 0xff;
635 609 data[1] = l >> 16 & 0xff;
636 610 data[2] = l >> 8 & 0xff;
637 611 data[3] = l & 0xff;
638 612 data[4] = r >> 24 & 0xff;
639 613 data[5] = r >> 16 & 0xff;
640 614 data[6] = r >> 8 & 0xff;
641 615 data[7] = r & 0xff;
642 616 iv = data;
643 617 data += 8;
644 618 }
645 -/* CRYPT DELETE END */
646 619 }
647 620
648 621 void
649 622 blf_cbc_decrypt(blf_ctx *c, uint8_t *iva, uint8_t *data, uint32_t len)
650 623 {
651 -/* CRYPT DELETE START */
652 624 uint32_t l, r;
653 625 uint8_t *iv;
654 626 uint32_t i, j;
655 627
656 628 iv = data + len - 16;
657 629 data = data + len - 8;
658 630 for (i = len - 8; i >= 8; i -= 8) {
659 631 l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
660 632 r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
661 633 Blowfish_decipher(c, &l, &r);
662 634 data[0] = l >> 24 & 0xff;
663 635 data[1] = l >> 16 & 0xff;
664 636 data[2] = l >> 8 & 0xff;
665 637 data[3] = l & 0xff;
666 638 data[4] = r >> 24 & 0xff;
667 639 data[5] = r >> 16 & 0xff;
668 640 data[6] = r >> 8 & 0xff;
669 641 data[7] = r & 0xff;
670 642 for (j = 0; j < 8; j++)
671 643 data[j] ^= iv[j];
672 644 iv -= 8;
673 645 data -= 8;
674 646 }
675 647 l = data[0] << 24 | data[1] << 16 | data[2] << 8 | data[3];
676 648 r = data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7];
677 649 Blowfish_decipher(c, &l, &r);
↓ open down ↓ |
16 lines elided |
↑ open up ↑ |
678 650 data[0] = l >> 24 & 0xff;
679 651 data[1] = l >> 16 & 0xff;
680 652 data[2] = l >> 8 & 0xff;
681 653 data[3] = l & 0xff;
682 654 data[4] = r >> 24 & 0xff;
683 655 data[5] = r >> 16 & 0xff;
684 656 data[6] = r >> 8 & 0xff;
685 657 data[7] = r & 0xff;
686 658 for (j = 0; j < 8; j++)
687 659 data[j] ^= iva[j];
688 -/* CRYPT DELETE END */
689 660 }
690 661
691 -/* CRYPT DELETE START */
692 662 #if 0
693 663 void
694 664 report(uint32_t data[], uint16_t len)
695 665 {
696 666 uint16_t i;
697 667 for (i = 0; i < len; i += 2)
698 668 printf("Block %0hd: %08lx %08lx.\n",
699 669 i / 2, data[i], data[i + 1]);
700 670 }
701 671 void
702 672 main(void)
703 673 {
704 674
705 675 blf_ctx c;
706 676 char key[] = "AAAAA";
707 677 char key2[] = "abcdefghijklmnopqrstuvwxyz";
708 678
709 679 uint32_t data[10];
710 680 uint32_t data2[] =
711 681 {0x424c4f57l, 0x46495348l};
712 682
713 683 uint16_t i;
714 684
715 685 /* First test */
716 686 for (i = 0; i < 10; i++)
717 687 data[i] = i;
718 688
719 689 blf_key(&c, (uint8_t *) key, 5);
720 690 blf_enc(&c, data, 5);
721 691 blf_dec(&c, data, 1);
722 692 blf_dec(&c, data + 2, 4);
723 693 printf("Should read as 0 - 9.\n");
724 694 report(data, 10);
↓ open down ↓ |
23 lines elided |
↑ open up ↑ |
725 695
726 696 /* Second test */
727 697 blf_key(&c, (uint8_t *) key2, strlen(key2));
728 698 blf_enc(&c, data2, 1);
729 699 printf("\nShould read as: 0x324ed0fe 0xf413a203.\n");
730 700 report(data2, 2);
731 701 blf_dec(&c, data2, 1);
732 702 report(data2, 2);
733 703 }
734 704 #endif
735 -/* CRYPT DELETE END */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX