]> git.ipfire.org Git - thirdparty/openssl.git/blame - crypto/seed/seed.c
Run util/openssl-format-source -v -c .
[thirdparty/openssl.git] / crypto / seed / seed.c
CommitLineData
96afc1cf 1/*
0f113f3e 2 * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved.
96afc1cf
BM
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Neither the name of author nor the names of its contributors may
10 * be used to endorse or promote products derived from this software
11 * without specific prior written permission.
12 *
13 * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 * SUCH DAMAGE.
24 *
25 */
26#ifndef OPENSSL_NO_SEED
27
0f113f3e
MC
28# include <stdio.h>
29# include <stdlib.h>
30# include <string.h>
31# ifdef WIN32
32# include <memory.h>
33# endif
96afc1cf 34
0f113f3e
MC
35# include <openssl/seed.h>
36# include "seed_locl.h"
96afc1cf 37
0f113f3e
MC
38# ifdef SS /* can get defined on Solaris by inclusion of
39 * <stdlib.h> */
40# undef SS
41# endif
d0e68a98 42
0f113f3e
MC
43static const seed_word SS[4][256] = { {
44 0x2989a1a8, 0x05858184, 0x16c6d2d4,
45 0x13c3d3d0, 0x14445054, 0x1d0d111c,
46 0x2c8ca0ac, 0x25052124,
47 0x1d4d515c, 0x03434340, 0x18081018,
48 0x1e0e121c, 0x11415150, 0x3cccf0fc,
49 0x0acac2c8, 0x23436360,
50 0x28082028, 0x04444044, 0x20002020,
51 0x1d8d919c, 0x20c0e0e0, 0x22c2e2e0,
52 0x08c8c0c8, 0x17071314,
53 0x2585a1a4, 0x0f8f838c, 0x03030300,
54 0x3b4b7378, 0x3b8bb3b8, 0x13031310,
55 0x12c2d2d0, 0x2ecee2ec,
56 0x30407070, 0x0c8c808c, 0x3f0f333c,
57 0x2888a0a8, 0x32023230, 0x1dcdd1dc,
58 0x36c6f2f4, 0x34447074,
59 0x2ccce0ec, 0x15859194, 0x0b0b0308,
60 0x17475354, 0x1c4c505c, 0x1b4b5358,
61 0x3d8db1bc, 0x01010100,
62 0x24042024, 0x1c0c101c, 0x33437370,
63 0x18889098, 0x10001010, 0x0cccc0cc,
64 0x32c2f2f0, 0x19c9d1d8,
65 0x2c0c202c, 0x27c7e3e4, 0x32427270,
66 0x03838380, 0x1b8b9398, 0x11c1d1d0,
67 0x06868284, 0x09c9c1c8,
68 0x20406060, 0x10405050, 0x2383a3a0,
69 0x2bcbe3e8, 0x0d0d010c, 0x3686b2b4,
70 0x1e8e929c, 0x0f4f434c,
71 0x3787b3b4, 0x1a4a5258, 0x06c6c2c4,
72 0x38487078, 0x2686a2a4, 0x12021210,
73 0x2f8fa3ac, 0x15c5d1d4,
74 0x21416160, 0x03c3c3c0, 0x3484b0b4,
75 0x01414140, 0x12425250, 0x3d4d717c,
76 0x0d8d818c, 0x08080008,
77 0x1f0f131c, 0x19899198, 0x00000000,
78 0x19091118, 0x04040004, 0x13435350,
79 0x37c7f3f4, 0x21c1e1e0,
80 0x3dcdf1fc, 0x36467274, 0x2f0f232c,
81 0x27072324, 0x3080b0b0, 0x0b8b8388,
82 0x0e0e020c, 0x2b8ba3a8,
83 0x2282a2a0, 0x2e4e626c, 0x13839390,
84 0x0d4d414c, 0x29496168, 0x3c4c707c,
85 0x09090108, 0x0a0a0208,
86 0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0,
87 0x05c5c1c4, 0x07878384, 0x14041014,
88 0x3ecef2fc, 0x24446064,
89 0x1eced2dc, 0x2e0e222c, 0x0b4b4348,
90 0x1a0a1218, 0x06060204, 0x21012120,
91 0x2b4b6368, 0x26466264,
92 0x02020200, 0x35c5f1f4, 0x12829290,
93 0x0a8a8288, 0x0c0c000c, 0x3383b3b0,
94 0x3e4e727c, 0x10c0d0d0,
95 0x3a4a7278, 0x07474344, 0x16869294,
96 0x25c5e1e4, 0x26062224, 0x00808080,
97 0x2d8da1ac, 0x1fcfd3dc,
98 0x2181a1a0, 0x30003030, 0x37073334,
99 0x2e8ea2ac, 0x36063234, 0x15051114,
100 0x22022220, 0x38083038,
101 0x34c4f0f4, 0x2787a3a4, 0x05454144,
102 0x0c4c404c, 0x01818180, 0x29c9e1e8,
103 0x04848084, 0x17879394,
104 0x35053134, 0x0bcbc3c8, 0x0ecec2cc,
105 0x3c0c303c, 0x31417170, 0x11011110,
106 0x07c7c3c4, 0x09898188,
107 0x35457174, 0x3bcbf3f8, 0x1acad2d8,
108 0x38c8f0f8, 0x14849094, 0x19495158,
109 0x02828280, 0x04c4c0c4,
110 0x3fcff3fc, 0x09494148, 0x39093138,
111 0x27476364, 0x00c0c0c0, 0x0fcfc3cc,
112 0x17c7d3d4, 0x3888b0b8,
113 0x0f0f030c, 0x0e8e828c, 0x02424240,
114 0x23032320, 0x11819190, 0x2c4c606c,
115 0x1bcbd3d8, 0x2484a0a4,
116 0x34043034, 0x31c1f1f0, 0x08484048,
117 0x02c2c2c0, 0x2f4f636c, 0x3d0d313c,
118 0x2d0d212c, 0x00404040,
119 0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc,
120 0x01c1c1c0, 0x2a8aa2a8, 0x3a8ab2b8,
121 0x0e4e424c, 0x15455154,
122 0x3b0b3338, 0x1cccd0dc, 0x28486068,
123 0x3f4f737c, 0x1c8c909c, 0x18c8d0d8,
124 0x0a4a4248, 0x16465254,
125 0x37477374, 0x2080a0a0, 0x2dcde1ec,
126 0x06464244, 0x3585b1b4, 0x2b0b2328,
127 0x25456164, 0x3acaf2f8,
128 0x23c3e3e0, 0x3989b1b8, 0x3181b1b0,
129 0x1f8f939c, 0x1e4e525c, 0x39c9f1f8,
130 0x26c6e2e4, 0x3282b2b0,
131 0x31013130, 0x2acae2e8, 0x2d4d616c,
132 0x1f4f535c, 0x24c4e0e4, 0x30c0f0f0,
133 0x0dcdc1cc, 0x08888088,
134 0x16061214, 0x3a0a3238, 0x18485058,
135 0x14c4d0d4, 0x22426260, 0x29092128,
136 0x07070304, 0x33033330,
137 0x28c8e0e8, 0x1b0b1318, 0x05050104,
138 0x39497178, 0x10809090, 0x2a4a6268,
139 0x2a0a2228, 0x1a8a9298}, {
140 0x38380830,
141 0xe828c8e0,
142 0x2c2d0d21,
143 0xa42686a2,
144 0xcc0fcfc3,
145 0xdc1eced2,
146 0xb03383b3,
147 0xb83888b0,
148 0xac2f8fa3,
149 0x60204060,
150 0x54154551,
151 0xc407c7c3,
152 0x44044440,
153 0x6c2f4f63,
154 0x682b4b63,
155 0x581b4b53,
156 0xc003c3c3,
157 0x60224262,
158 0x30330333,
159 0xb43585b1,
160 0x28290921,
161 0xa02080a0,
162 0xe022c2e2,
163 0xa42787a3,
164 0xd013c3d3,
165 0x90118191,
166 0x10110111,
167 0x04060602,
168 0x1c1c0c10,
169 0xbc3c8cb0,
170 0x34360632,
171 0x480b4b43,
172 0xec2fcfe3,
173 0x88088880,
174 0x6c2c4c60,
175 0xa82888a0,
176 0x14170713,
177 0xc404c4c0,
178 0x14160612,
179 0xf434c4f0,
180 0xc002c2c2,
181 0x44054541,
182 0xe021c1e1,
183 0xd416c6d2,
184 0x3c3f0f33,
185 0x3c3d0d31,
186 0x8c0e8e82,
187 0x98188890,
188 0x28280820,
189 0x4c0e4e42,
190 0xf436c6f2,
191 0x3c3e0e32,
192 0xa42585a1,
193 0xf839c9f1,
194 0x0c0d0d01,
195 0xdc1fcfd3,
196 0xd818c8d0,
197 0x282b0b23,
198 0x64264662,
199 0x783a4a72,
200 0x24270723,
201 0x2c2f0f23,
202 0xf031c1f1,
203 0x70324272,
204 0x40024242,
205 0xd414c4d0,
206 0x40014141,
207 0xc000c0c0,
208 0x70334373,
209 0x64274763,
210 0xac2c8ca0,
211 0x880b8b83,
212 0xf437c7f3,
213 0xac2d8da1,
214 0x80008080,
215 0x1c1f0f13,
216 0xc80acac2,
217 0x2c2c0c20,
218 0xa82a8aa2,
219 0x34340430,
220 0xd012c2d2,
221 0x080b0b03,
222 0xec2ecee2,
223 0xe829c9e1,
224 0x5c1d4d51,
225 0x94148490,
226 0x18180810,
227 0xf838c8f0,
228 0x54174753,
229 0xac2e8ea2,
230 0x08080800,
231 0xc405c5c1,
232 0x10130313,
233 0xcc0dcdc1,
234 0x84068682,
235 0xb83989b1,
236 0xfc3fcff3,
237 0x7c3d4d71,
238 0xc001c1c1,
239 0x30310131,
240 0xf435c5f1,
241 0x880a8a82,
242 0x682a4a62,
243 0xb03181b1,
244 0xd011c1d1,
245 0x20200020,
246 0xd417c7d3,
247 0x00020202,
248 0x20220222,
249 0x04040400,
250 0x68284860,
251 0x70314171,
252 0x04070703,
253 0xd81bcbd3,
254 0x9c1d8d91,
255 0x98198991,
256 0x60214161,
257 0xbc3e8eb2,
258 0xe426c6e2,
259 0x58194951,
260 0xdc1dcdd1,
261 0x50114151,
262 0x90108090,
263 0xdc1cccd0,
264 0x981a8a92,
265 0xa02383a3,
266 0xa82b8ba3,
267 0xd010c0d0,
268 0x80018181,
269 0x0c0f0f03,
270 0x44074743,
271 0x181a0a12,
272 0xe023c3e3,
273 0xec2ccce0,
274 0x8c0d8d81,
275 0xbc3f8fb3,
276 0x94168692,
277 0x783b4b73,
278 0x5c1c4c50,
279 0xa02282a2,
280 0xa02181a1,
281 0x60234363,
282 0x20230323,
283 0x4c0d4d41,
284 0xc808c8c0,
285 0x9c1e8e92,
286 0x9c1c8c90,
287 0x383a0a32,
288 0x0c0c0c00,
289 0x2c2e0e22,
290 0xb83a8ab2,
291 0x6c2e4e62,
292 0x9c1f8f93,
293 0x581a4a52,
294 0xf032c2f2,
295 0x90128292,
296 0xf033c3f3,
297 0x48094941,
298 0x78384870,
299 0xcc0cccc0,
300 0x14150511,
301 0xf83bcbf3,
302 0x70304070,
303 0x74354571,
304 0x7c3f4f73,
305 0x34350531,
306 0x10100010,
307 0x00030303,
308 0x64244460,
309 0x6c2d4d61,
310 0xc406c6c2,
311 0x74344470,
312 0xd415c5d1,
313 0xb43484b0,
314 0xe82acae2,
315 0x08090901,
316 0x74364672,
317 0x18190911,
318 0xfc3ecef2,
319 0x40004040,
320 0x10120212,
321 0xe020c0e0,
322 0xbc3d8db1,
323 0x04050501,
324 0xf83acaf2,
325 0x00010101,
326 0xf030c0f0,
327 0x282a0a22,
328 0x5c1e4e52,
329 0xa82989a1,
330 0x54164652,
331 0x40034343,
332 0x84058581,
333 0x14140410,
334 0x88098981,
335 0x981b8b93,
336 0xb03080b0,
337 0xe425c5e1,
338 0x48084840,
339 0x78394971,
340 0x94178793,
341 0xfc3cccf0,
342 0x1c1e0e12,
343 0x80028282,
344 0x20210121,
345 0x8c0c8c80,
346 0x181b0b13,
347 0x5c1f4f53,
348 0x74374773,
349 0x54144450,
350 0xb03282b2,
351 0x1c1d0d11,
352 0x24250521,
353 0x4c0f4f43,
354 0x00000000,
355 0x44064642,
356 0xec2dcde1,
357 0x58184850,
358 0x50124252,
359 0xe82bcbe3,
360 0x7c3e4e72,
361 0xd81acad2,
362 0xc809c9c1,
363 0xfc3dcdf1,
364 0x30300030,
365 0x94158591,
366 0x64254561,
367 0x3c3c0c30,
368 0xb43686b2,
369 0xe424c4e0,
370 0xb83b8bb3,
371 0x7c3c4c70,
372 0x0c0e0e02,
373 0x50104050,
374 0x38390931,
375 0x24260622,
376 0x30320232,
377 0x84048480,
378 0x68294961,
379 0x90138393,
380 0x34370733,
381 0xe427c7e3,
382 0x24240420,
383 0xa42484a0,
384 0xc80bcbc3,
385 0x50134353,
386 0x080a0a02,
387 0x84078783,
388 0xd819c9d1,
389 0x4c0c4c40,
390 0x80038383,
391 0x8c0f8f83,
392 0xcc0ecec2,
393 0x383b0b33,
394 0x480a4a42,
395 0xb43787b3},
396{
397 0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3, 0x50541444, 0x111c1d0d,
398 0xa0ac2c8c, 0x21242505,
399 0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e, 0x51501141, 0xf0fc3ccc,
400 0xc2c80aca, 0x63602343,
401 0x20282808, 0x40440444, 0x20202000, 0x919c1d8d, 0xe0e020c0, 0xe2e022c2,
402 0xc0c808c8, 0x13141707,
403 0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b, 0xb3b83b8b, 0x13101303,
404 0xd2d012c2, 0xe2ec2ece,
405 0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888, 0x32303202, 0xd1dc1dcd,
406 0xf2f436c6, 0x70743444,
407 0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747, 0x505c1c4c, 0x53581b4b,
408 0xb1bc3d8d, 0x01000101,
409 0x20242404, 0x101c1c0c, 0x73703343, 0x90981888, 0x10101000, 0xc0cc0ccc,
410 0xf2f032c2, 0xd1d819c9,
411 0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383, 0x93981b8b, 0xd1d011c1,
412 0x82840686, 0xc1c809c9,
413 0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb, 0x010c0d0d, 0xb2b43686,
414 0x929c1e8e, 0x434c0f4f,
415 0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848, 0xa2a42686, 0x12101202,
416 0xa3ac2f8f, 0xd1d415c5,
417 0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141, 0x52501242, 0x717c3d4d,
418 0x818c0d8d, 0x00080808,
419 0x131c1f0f, 0x91981989, 0x00000000, 0x11181909, 0x00040404, 0x53501343,
420 0xf3f437c7, 0xe1e021c1,
421 0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707, 0xb0b03080, 0x83880b8b,
422 0x020c0e0e, 0xa3a82b8b,
423 0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d, 0x61682949, 0x707c3c4c,
424 0x01080909, 0x02080a0a,
425 0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5, 0x83840787, 0x10141404,
426 0xf2fc3ece, 0x60642444,
427 0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a, 0x02040606, 0x21202101,
428 0x63682b4b, 0x62642646,
429 0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a, 0x000c0c0c, 0xb3b03383,
430 0x727c3e4e, 0xd0d010c0,
431 0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5, 0x22242606, 0x80800080,
432 0xa1ac2d8d, 0xd3dc1fcf,
433 0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e, 0x32343606, 0x11141505,
434 0x22202202, 0x30383808,
435 0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c, 0x81800181, 0xe1e829c9,
436 0x80840484, 0x93941787,
437 0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c, 0x71703141, 0x11101101,
438 0xc3c407c7, 0x81880989,
439 0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8, 0x90941484, 0x51581949,
440 0x82800282, 0xc0c404c4,
441 0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747, 0xc0c000c0, 0xc3cc0fcf,
442 0xd3d417c7, 0xb0b83888,
443 0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303, 0x91901181, 0x606c2c4c,
444 0xd3d81bcb, 0xa0a42484,
445 0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2, 0x636c2f4f, 0x313c3d0d,
446 0x212c2d0d, 0x40400040,
447 0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1, 0xa2a82a8a, 0xb2b83a8a,
448 0x424c0e4e, 0x51541545,
449 0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f, 0x909c1c8c, 0xd0d818c8,
450 0x42480a4a, 0x52541646,
451 0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646, 0xb1b43585, 0x23282b0b,
452 0x61642545, 0xf2f83aca,
453 0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f, 0x525c1e4e, 0xf1f839c9,
454 0xe2e426c6, 0xb2b03282,
455 0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f, 0xe0e424c4, 0xf0f030c0,
456 0xc1cc0dcd, 0x80880888,
457 0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4, 0x62602242, 0x21282909,
458 0x03040707, 0x33303303,
459 0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949, 0x90901080, 0x62682a4a,
460 0x22282a0a, 0x92981a8a}, {
461 0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426,
462 0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838,
463 0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407,
464 0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b,
465 0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435,
466 0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427,
467 0xc3d3d013, 0x81919011, 0x01111011, 0x06020406,
468 0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b,
469 0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828,
470 0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434,
471 0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416,
472 0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818,
473 0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e,
474 0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f,
475 0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a,
476 0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032,
477 0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000,
478 0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b,
479 0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f,
480 0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434,
481 0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829,
482 0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838,
483 0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405,
484 0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839,
485 0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031,
486 0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031,
487 0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002,
488 0x02222022, 0x04000404, 0x48606828, 0x41717031,
489 0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819,
490 0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819,
491 0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c,
492 0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010,
493 0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a,
494 0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f,
495 0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022,
496 0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d,
497 0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a,
498 0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e,
499 0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012,
500 0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c,
501 0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435,
502 0x4f737c3f, 0x05313435, 0x00101010, 0x03030003,
503 0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434,
504 0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809,
505 0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000,
506 0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405,
507 0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a,
508 0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003,
509 0x85818405, 0x04101414, 0x89818809, 0x8b93981b,
510 0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839,
511 0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002,
512 0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f,
513 0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d,
514 0x05212425, 0x4f434c0f, 0x00000000, 0x46424406,
515 0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b,
516 0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d,
517 0x00303030, 0x85919415, 0x45616425, 0x0c303c3c,
518 0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c,
519 0x0e020c0e, 0x40505010, 0x09313839, 0x06222426,
520 0x02323032, 0x84808404, 0x49616829, 0x83939013,
521 0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424,
522 0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407,
523 0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f,
524 0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437}
525};
96afc1cf
BM
526
527/* key schedule constants - golden ratio */
0f113f3e
MC
528# define KC0 0x9e3779b9
529# define KC1 0x3c6ef373
530# define KC2 0x78dde6e6
531# define KC3 0xf1bbcdcc
532# define KC4 0xe3779b99
533# define KC5 0xc6ef3733
534# define KC6 0x8dde6e67
535# define KC7 0x1bbcdccf
536# define KC8 0x3779b99e
537# define KC9 0x6ef3733c
538# define KC10 0xdde6e678
539# define KC11 0xbbcdccf1
540# define KC12 0x779b99e3
541# define KC13 0xef3733c6
542# define KC14 0xde6e678d
543# define KC15 0xbcdccf1b
96afc1cf 544
0f113f3e 545# if defined(OPENSSL_SMALL_FOOTPRINT)
f826bf77 546static const seed_word KC[] = {
0f113f3e
MC
547 KC0, KC1, KC2, KC3, KC4, KC5, KC6, KC7,
548 KC8, KC9, KC10, KC11, KC12, KC13, KC14, KC15
549};
550# endif
96afc1cf 551
0f113f3e
MC
552void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH],
553 SEED_KEY_SCHEDULE *ks)
96afc1cf 554{
0f113f3e
MC
555 seed_word x1, x2, x3, x4;
556 seed_word t0, t1;
96afc1cf 557
0f113f3e
MC
558 char2word(rawkey, x1);
559 char2word(rawkey + 4, x2);
560 char2word(rawkey + 8, x3);
561 char2word(rawkey + 12, x4);
96afc1cf 562
0f113f3e
MC
563 t0 = (x1 + x3 - KC0) & 0xffffffff;
564 t1 = (x2 - x4 + KC0) & 0xffffffff;
565 KEYUPDATE_TEMP(t0, t1, &ks->data[0]);
566 KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC1);
567 KEYUPDATE_TEMP(t0, t1, &ks->data[2]);
f826bf77 568
0f113f3e
MC
569# if !defined(OPENSSL_SMALL_FOOTPRINT)
570 KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC2);
571 KEYUPDATE_TEMP(t0, t1, &ks->data[4]);
572 KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC3);
573 KEYUPDATE_TEMP(t0, t1, &ks->data[6]);
574 KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC4);
575 KEYUPDATE_TEMP(t0, t1, &ks->data[8]);
576 KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC5);
577 KEYUPDATE_TEMP(t0, t1, &ks->data[10]);
578 KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC6);
579 KEYUPDATE_TEMP(t0, t1, &ks->data[12]);
580 KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC7);
581 KEYUPDATE_TEMP(t0, t1, &ks->data[14]);
582 KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC8);
583 KEYUPDATE_TEMP(t0, t1, &ks->data[16]);
584 KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC9);
585 KEYUPDATE_TEMP(t0, t1, &ks->data[18]);
586 KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC10);
587 KEYUPDATE_TEMP(t0, t1, &ks->data[20]);
588 KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC11);
589 KEYUPDATE_TEMP(t0, t1, &ks->data[22]);
590 KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC12);
591 KEYUPDATE_TEMP(t0, t1, &ks->data[24]);
592 KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC13);
593 KEYUPDATE_TEMP(t0, t1, &ks->data[26]);
594 KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC14);
595 KEYUPDATE_TEMP(t0, t1, &ks->data[28]);
596 KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC15);
597 KEYUPDATE_TEMP(t0, t1, &ks->data[30]);
598# else
599 {
600 int i;
601 for (i = 2; i < 16; i += 2) {
602 KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC[i]);
603 KEYUPDATE_TEMP(t0, t1, &ks->data[i * 2]);
604 KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC[i + 1]);
605 KEYUPDATE_TEMP(t0, t1, &ks->data[i * 2 + 2]);
606 }
607 }
608# endif
96afc1cf
BM
609}
610
0f113f3e
MC
611void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE],
612 unsigned char d[SEED_BLOCK_SIZE],
613 const SEED_KEY_SCHEDULE *ks)
96afc1cf 614{
0f113f3e
MC
615 seed_word x1, x2, x3, x4;
616 seed_word t0, t1;
96afc1cf 617
0f113f3e
MC
618 char2word(s, x1);
619 char2word(s + 4, x2);
620 char2word(s + 8, x3);
621 char2word(s + 12, x4);
f826bf77 622
0f113f3e
MC
623# if !defined(OPENSSL_SMALL_FOOTPRINT)
624 E_SEED(t0, t1, x1, x2, x3, x4, 0);
625 E_SEED(t0, t1, x3, x4, x1, x2, 2);
626 E_SEED(t0, t1, x1, x2, x3, x4, 4);
627 E_SEED(t0, t1, x3, x4, x1, x2, 6);
628 E_SEED(t0, t1, x1, x2, x3, x4, 8);
629 E_SEED(t0, t1, x3, x4, x1, x2, 10);
630 E_SEED(t0, t1, x1, x2, x3, x4, 12);
631 E_SEED(t0, t1, x3, x4, x1, x2, 14);
632 E_SEED(t0, t1, x1, x2, x3, x4, 16);
633 E_SEED(t0, t1, x3, x4, x1, x2, 18);
634 E_SEED(t0, t1, x1, x2, x3, x4, 20);
635 E_SEED(t0, t1, x3, x4, x1, x2, 22);
636 E_SEED(t0, t1, x1, x2, x3, x4, 24);
637 E_SEED(t0, t1, x3, x4, x1, x2, 26);
638 E_SEED(t0, t1, x1, x2, x3, x4, 28);
639 E_SEED(t0, t1, x3, x4, x1, x2, 30);
640# else
641 {
642 int i;
643 for (i = 0; i < 30; i += 4) {
644 E_SEED(t0, t1, x1, x2, x3, x4, i);
645 E_SEED(t0, t1, x3, x4, x1, x2, i + 2);
646 }
647 }
648# endif
96afc1cf 649
0f113f3e
MC
650 word2char(x3, d);
651 word2char(x4, d + 4);
652 word2char(x1, d + 8);
653 word2char(x2, d + 12);
96afc1cf
BM
654}
655
0f113f3e
MC
656void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE],
657 unsigned char d[SEED_BLOCK_SIZE],
658 const SEED_KEY_SCHEDULE *ks)
96afc1cf 659{
0f113f3e
MC
660 seed_word x1, x2, x3, x4;
661 seed_word t0, t1;
96afc1cf 662
0f113f3e
MC
663 char2word(s, x1);
664 char2word(s + 4, x2);
665 char2word(s + 8, x3);
666 char2word(s + 12, x4);
f826bf77 667
0f113f3e
MC
668# if !defined(OPENSSL_SMALL_FOOTPRINT)
669 E_SEED(t0, t1, x1, x2, x3, x4, 30);
670 E_SEED(t0, t1, x3, x4, x1, x2, 28);
671 E_SEED(t0, t1, x1, x2, x3, x4, 26);
672 E_SEED(t0, t1, x3, x4, x1, x2, 24);
673 E_SEED(t0, t1, x1, x2, x3, x4, 22);
674 E_SEED(t0, t1, x3, x4, x1, x2, 20);
675 E_SEED(t0, t1, x1, x2, x3, x4, 18);
676 E_SEED(t0, t1, x3, x4, x1, x2, 16);
677 E_SEED(t0, t1, x1, x2, x3, x4, 14);
678 E_SEED(t0, t1, x3, x4, x1, x2, 12);
679 E_SEED(t0, t1, x1, x2, x3, x4, 10);
680 E_SEED(t0, t1, x3, x4, x1, x2, 8);
681 E_SEED(t0, t1, x1, x2, x3, x4, 6);
682 E_SEED(t0, t1, x3, x4, x1, x2, 4);
683 E_SEED(t0, t1, x1, x2, x3, x4, 2);
684 E_SEED(t0, t1, x3, x4, x1, x2, 0);
685# else
686 {
687 int i;
688 for (i = 30; i > 0; i -= 4) {
689 E_SEED(t0, t1, x1, x2, x3, x4, i);
690 E_SEED(t0, t1, x3, x4, x1, x2, i - 2);
f826bf77 691
0f113f3e
MC
692 }
693 }
694# endif
96afc1cf 695
0f113f3e
MC
696 word2char(x3, d);
697 word2char(x4, d + 4);
698 word2char(x1, d + 8);
699 word2char(x2, d + 12);
96afc1cf
BM
700}
701
0f113f3e 702#endif /* OPENSSL_NO_SEED */