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