1183234Ssimon/*
2280297Sjkim * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved.
3183234Ssimon *
4183234Ssimon * Redistribution and use in source and binary forms, with or without
5183234Ssimon * modification, are permitted provided that the following conditions
6183234Ssimon * are met:
7183234Ssimon * 1. Redistributions of source code must retain the above copyright
8183234Ssimon *    notice, this list of conditions and the following disclaimer.
9183234Ssimon * 2. Neither the name of author nor the names of its contributors may
10183234Ssimon *    be used to endorse or promote products derived from this software
11183234Ssimon *    without specific prior written permission.
12183234Ssimon *
13183234Ssimon * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14183234Ssimon * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15183234Ssimon * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16183234Ssimon * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
17183234Ssimon * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18183234Ssimon * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19183234Ssimon * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20183234Ssimon * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21183234Ssimon * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22183234Ssimon * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23183234Ssimon * SUCH DAMAGE.
24183234Ssimon *
25183234Ssimon */
26183234Ssimon#ifndef OPENSSL_NO_SEED
27183234Ssimon
28280297Sjkim# include <stdio.h>
29280297Sjkim# include <stdlib.h>
30280297Sjkim# include <string.h>
31280297Sjkim# ifdef WIN32
32280297Sjkim#  include <memory.h>
33280297Sjkim# endif
34183234Ssimon
35280297Sjkim# include <openssl/crypto.h>
36280297Sjkim# include <openssl/seed.h>
37280297Sjkim# include "seed_locl.h"
38183234Ssimon
39280297Sjkim# ifdef SS                      /* can get defined on Solaris by inclusion of
40280297Sjkim                                 * <stdlib.h> */
41280297Sjkim#  undef SS
42280297Sjkim# endif
43238405Sjkim
44280297Sjkimstatic const seed_word SS[4][256] = { {
45280297Sjkim                                       0x2989a1a8, 0x05858184, 0x16c6d2d4,
46280297Sjkim                                       0x13c3d3d0, 0x14445054, 0x1d0d111c,
47280297Sjkim                                       0x2c8ca0ac, 0x25052124,
48280297Sjkim                                       0x1d4d515c, 0x03434340, 0x18081018,
49280297Sjkim                                       0x1e0e121c, 0x11415150, 0x3cccf0fc,
50280297Sjkim                                       0x0acac2c8, 0x23436360,
51280297Sjkim                                       0x28082028, 0x04444044, 0x20002020,
52280297Sjkim                                       0x1d8d919c, 0x20c0e0e0, 0x22c2e2e0,
53280297Sjkim                                       0x08c8c0c8, 0x17071314,
54280297Sjkim                                       0x2585a1a4, 0x0f8f838c, 0x03030300,
55280297Sjkim                                       0x3b4b7378, 0x3b8bb3b8, 0x13031310,
56280297Sjkim                                       0x12c2d2d0, 0x2ecee2ec,
57280297Sjkim                                       0x30407070, 0x0c8c808c, 0x3f0f333c,
58280297Sjkim                                       0x2888a0a8, 0x32023230, 0x1dcdd1dc,
59280297Sjkim                                       0x36c6f2f4, 0x34447074,
60280297Sjkim                                       0x2ccce0ec, 0x15859194, 0x0b0b0308,
61280297Sjkim                                       0x17475354, 0x1c4c505c, 0x1b4b5358,
62280297Sjkim                                       0x3d8db1bc, 0x01010100,
63280297Sjkim                                       0x24042024, 0x1c0c101c, 0x33437370,
64280297Sjkim                                       0x18889098, 0x10001010, 0x0cccc0cc,
65280297Sjkim                                       0x32c2f2f0, 0x19c9d1d8,
66280297Sjkim                                       0x2c0c202c, 0x27c7e3e4, 0x32427270,
67280297Sjkim                                       0x03838380, 0x1b8b9398, 0x11c1d1d0,
68280297Sjkim                                       0x06868284, 0x09c9c1c8,
69280297Sjkim                                       0x20406060, 0x10405050, 0x2383a3a0,
70280297Sjkim                                       0x2bcbe3e8, 0x0d0d010c, 0x3686b2b4,
71280297Sjkim                                       0x1e8e929c, 0x0f4f434c,
72280297Sjkim                                       0x3787b3b4, 0x1a4a5258, 0x06c6c2c4,
73280297Sjkim                                       0x38487078, 0x2686a2a4, 0x12021210,
74280297Sjkim                                       0x2f8fa3ac, 0x15c5d1d4,
75280297Sjkim                                       0x21416160, 0x03c3c3c0, 0x3484b0b4,
76280297Sjkim                                       0x01414140, 0x12425250, 0x3d4d717c,
77280297Sjkim                                       0x0d8d818c, 0x08080008,
78280297Sjkim                                       0x1f0f131c, 0x19899198, 0x00000000,
79280297Sjkim                                       0x19091118, 0x04040004, 0x13435350,
80280297Sjkim                                       0x37c7f3f4, 0x21c1e1e0,
81280297Sjkim                                       0x3dcdf1fc, 0x36467274, 0x2f0f232c,
82280297Sjkim                                       0x27072324, 0x3080b0b0, 0x0b8b8388,
83280297Sjkim                                       0x0e0e020c, 0x2b8ba3a8,
84280297Sjkim                                       0x2282a2a0, 0x2e4e626c, 0x13839390,
85280297Sjkim                                       0x0d4d414c, 0x29496168, 0x3c4c707c,
86280297Sjkim                                       0x09090108, 0x0a0a0208,
87280297Sjkim                                       0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0,
88280297Sjkim                                       0x05c5c1c4, 0x07878384, 0x14041014,
89280297Sjkim                                       0x3ecef2fc, 0x24446064,
90280297Sjkim                                       0x1eced2dc, 0x2e0e222c, 0x0b4b4348,
91280297Sjkim                                       0x1a0a1218, 0x06060204, 0x21012120,
92280297Sjkim                                       0x2b4b6368, 0x26466264,
93280297Sjkim                                       0x02020200, 0x35c5f1f4, 0x12829290,
94280297Sjkim                                       0x0a8a8288, 0x0c0c000c, 0x3383b3b0,
95280297Sjkim                                       0x3e4e727c, 0x10c0d0d0,
96280297Sjkim                                       0x3a4a7278, 0x07474344, 0x16869294,
97280297Sjkim                                       0x25c5e1e4, 0x26062224, 0x00808080,
98280297Sjkim                                       0x2d8da1ac, 0x1fcfd3dc,
99280297Sjkim                                       0x2181a1a0, 0x30003030, 0x37073334,
100280297Sjkim                                       0x2e8ea2ac, 0x36063234, 0x15051114,
101280297Sjkim                                       0x22022220, 0x38083038,
102280297Sjkim                                       0x34c4f0f4, 0x2787a3a4, 0x05454144,
103280297Sjkim                                       0x0c4c404c, 0x01818180, 0x29c9e1e8,
104280297Sjkim                                       0x04848084, 0x17879394,
105280297Sjkim                                       0x35053134, 0x0bcbc3c8, 0x0ecec2cc,
106280297Sjkim                                       0x3c0c303c, 0x31417170, 0x11011110,
107280297Sjkim                                       0x07c7c3c4, 0x09898188,
108280297Sjkim                                       0x35457174, 0x3bcbf3f8, 0x1acad2d8,
109280297Sjkim                                       0x38c8f0f8, 0x14849094, 0x19495158,
110280297Sjkim                                       0x02828280, 0x04c4c0c4,
111280297Sjkim                                       0x3fcff3fc, 0x09494148, 0x39093138,
112280297Sjkim                                       0x27476364, 0x00c0c0c0, 0x0fcfc3cc,
113280297Sjkim                                       0x17c7d3d4, 0x3888b0b8,
114280297Sjkim                                       0x0f0f030c, 0x0e8e828c, 0x02424240,
115280297Sjkim                                       0x23032320, 0x11819190, 0x2c4c606c,
116280297Sjkim                                       0x1bcbd3d8, 0x2484a0a4,
117280297Sjkim                                       0x34043034, 0x31c1f1f0, 0x08484048,
118280297Sjkim                                       0x02c2c2c0, 0x2f4f636c, 0x3d0d313c,
119280297Sjkim                                       0x2d0d212c, 0x00404040,
120280297Sjkim                                       0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc,
121280297Sjkim                                       0x01c1c1c0, 0x2a8aa2a8, 0x3a8ab2b8,
122280297Sjkim                                       0x0e4e424c, 0x15455154,
123280297Sjkim                                       0x3b0b3338, 0x1cccd0dc, 0x28486068,
124280297Sjkim                                       0x3f4f737c, 0x1c8c909c, 0x18c8d0d8,
125280297Sjkim                                       0x0a4a4248, 0x16465254,
126280297Sjkim                                       0x37477374, 0x2080a0a0, 0x2dcde1ec,
127280297Sjkim                                       0x06464244, 0x3585b1b4, 0x2b0b2328,
128280297Sjkim                                       0x25456164, 0x3acaf2f8,
129280297Sjkim                                       0x23c3e3e0, 0x3989b1b8, 0x3181b1b0,
130280297Sjkim                                       0x1f8f939c, 0x1e4e525c, 0x39c9f1f8,
131280297Sjkim                                       0x26c6e2e4, 0x3282b2b0,
132280297Sjkim                                       0x31013130, 0x2acae2e8, 0x2d4d616c,
133280297Sjkim                                       0x1f4f535c, 0x24c4e0e4, 0x30c0f0f0,
134280297Sjkim                                       0x0dcdc1cc, 0x08888088,
135280297Sjkim                                       0x16061214, 0x3a0a3238, 0x18485058,
136280297Sjkim                                       0x14c4d0d4, 0x22426260, 0x29092128,
137280297Sjkim                                       0x07070304, 0x33033330,
138280297Sjkim                                       0x28c8e0e8, 0x1b0b1318, 0x05050104,
139280297Sjkim                                       0x39497178, 0x10809090, 0x2a4a6268,
140280297Sjkim                                       0x2a0a2228, 0x1a8a9298}, {
141280297Sjkim                                                                 0x38380830,
142280297Sjkim                                                                 0xe828c8e0,
143280297Sjkim                                                                 0x2c2d0d21,
144280297Sjkim                                                                 0xa42686a2,
145280297Sjkim                                                                 0xcc0fcfc3,
146280297Sjkim                                                                 0xdc1eced2,
147280297Sjkim                                                                 0xb03383b3,
148280297Sjkim                                                                 0xb83888b0,
149280297Sjkim                                                                 0xac2f8fa3,
150280297Sjkim                                                                 0x60204060,
151280297Sjkim                                                                 0x54154551,
152280297Sjkim                                                                 0xc407c7c3,
153280297Sjkim                                                                 0x44044440,
154280297Sjkim                                                                 0x6c2f4f63,
155280297Sjkim                                                                 0x682b4b63,
156280297Sjkim                                                                 0x581b4b53,
157280297Sjkim                                                                 0xc003c3c3,
158280297Sjkim                                                                 0x60224262,
159280297Sjkim                                                                 0x30330333,
160280297Sjkim                                                                 0xb43585b1,
161280297Sjkim                                                                 0x28290921,
162280297Sjkim                                                                 0xa02080a0,
163280297Sjkim                                                                 0xe022c2e2,
164280297Sjkim                                                                 0xa42787a3,
165280297Sjkim                                                                 0xd013c3d3,
166280297Sjkim                                                                 0x90118191,
167280297Sjkim                                                                 0x10110111,
168280297Sjkim                                                                 0x04060602,
169280297Sjkim                                                                 0x1c1c0c10,
170280297Sjkim                                                                 0xbc3c8cb0,
171280297Sjkim                                                                 0x34360632,
172280297Sjkim                                                                 0x480b4b43,
173280297Sjkim                                                                 0xec2fcfe3,
174280297Sjkim                                                                 0x88088880,
175280297Sjkim                                                                 0x6c2c4c60,
176280297Sjkim                                                                 0xa82888a0,
177280297Sjkim                                                                 0x14170713,
178280297Sjkim                                                                 0xc404c4c0,
179280297Sjkim                                                                 0x14160612,
180280297Sjkim                                                                 0xf434c4f0,
181280297Sjkim                                                                 0xc002c2c2,
182280297Sjkim                                                                 0x44054541,
183280297Sjkim                                                                 0xe021c1e1,
184280297Sjkim                                                                 0xd416c6d2,
185280297Sjkim                                                                 0x3c3f0f33,
186280297Sjkim                                                                 0x3c3d0d31,
187280297Sjkim                                                                 0x8c0e8e82,
188280297Sjkim                                                                 0x98188890,
189280297Sjkim                                                                 0x28280820,
190280297Sjkim                                                                 0x4c0e4e42,
191280297Sjkim                                                                 0xf436c6f2,
192280297Sjkim                                                                 0x3c3e0e32,
193280297Sjkim                                                                 0xa42585a1,
194280297Sjkim                                                                 0xf839c9f1,
195280297Sjkim                                                                 0x0c0d0d01,
196280297Sjkim                                                                 0xdc1fcfd3,
197280297Sjkim                                                                 0xd818c8d0,
198280297Sjkim                                                                 0x282b0b23,
199280297Sjkim                                                                 0x64264662,
200280297Sjkim                                                                 0x783a4a72,
201280297Sjkim                                                                 0x24270723,
202280297Sjkim                                                                 0x2c2f0f23,
203280297Sjkim                                                                 0xf031c1f1,
204280297Sjkim                                                                 0x70324272,
205280297Sjkim                                                                 0x40024242,
206280297Sjkim                                                                 0xd414c4d0,
207280297Sjkim                                                                 0x40014141,
208280297Sjkim                                                                 0xc000c0c0,
209280297Sjkim                                                                 0x70334373,
210280297Sjkim                                                                 0x64274763,
211280297Sjkim                                                                 0xac2c8ca0,
212280297Sjkim                                                                 0x880b8b83,
213280297Sjkim                                                                 0xf437c7f3,
214280297Sjkim                                                                 0xac2d8da1,
215280297Sjkim                                                                 0x80008080,
216280297Sjkim                                                                 0x1c1f0f13,
217280297Sjkim                                                                 0xc80acac2,
218280297Sjkim                                                                 0x2c2c0c20,
219280297Sjkim                                                                 0xa82a8aa2,
220280297Sjkim                                                                 0x34340430,
221280297Sjkim                                                                 0xd012c2d2,
222280297Sjkim                                                                 0x080b0b03,
223280297Sjkim                                                                 0xec2ecee2,
224280297Sjkim                                                                 0xe829c9e1,
225280297Sjkim                                                                 0x5c1d4d51,
226280297Sjkim                                                                 0x94148490,
227280297Sjkim                                                                 0x18180810,
228280297Sjkim                                                                 0xf838c8f0,
229280297Sjkim                                                                 0x54174753,
230280297Sjkim                                                                 0xac2e8ea2,
231280297Sjkim                                                                 0x08080800,
232280297Sjkim                                                                 0xc405c5c1,
233280297Sjkim                                                                 0x10130313,
234280297Sjkim                                                                 0xcc0dcdc1,
235280297Sjkim                                                                 0x84068682,
236280297Sjkim                                                                 0xb83989b1,
237280297Sjkim                                                                 0xfc3fcff3,
238280297Sjkim                                                                 0x7c3d4d71,
239280297Sjkim                                                                 0xc001c1c1,
240280297Sjkim                                                                 0x30310131,
241280297Sjkim                                                                 0xf435c5f1,
242280297Sjkim                                                                 0x880a8a82,
243280297Sjkim                                                                 0x682a4a62,
244280297Sjkim                                                                 0xb03181b1,
245280297Sjkim                                                                 0xd011c1d1,
246280297Sjkim                                                                 0x20200020,
247280297Sjkim                                                                 0xd417c7d3,
248280297Sjkim                                                                 0x00020202,
249280297Sjkim                                                                 0x20220222,
250280297Sjkim                                                                 0x04040400,
251280297Sjkim                                                                 0x68284860,
252280297Sjkim                                                                 0x70314171,
253280297Sjkim                                                                 0x04070703,
254280297Sjkim                                                                 0xd81bcbd3,
255280297Sjkim                                                                 0x9c1d8d91,
256280297Sjkim                                                                 0x98198991,
257280297Sjkim                                                                 0x60214161,
258280297Sjkim                                                                 0xbc3e8eb2,
259280297Sjkim                                                                 0xe426c6e2,
260280297Sjkim                                                                 0x58194951,
261280297Sjkim                                                                 0xdc1dcdd1,
262280297Sjkim                                                                 0x50114151,
263280297Sjkim                                                                 0x90108090,
264280297Sjkim                                                                 0xdc1cccd0,
265280297Sjkim                                                                 0x981a8a92,
266280297Sjkim                                                                 0xa02383a3,
267280297Sjkim                                                                 0xa82b8ba3,
268280297Sjkim                                                                 0xd010c0d0,
269280297Sjkim                                                                 0x80018181,
270280297Sjkim                                                                 0x0c0f0f03,
271280297Sjkim                                                                 0x44074743,
272280297Sjkim                                                                 0x181a0a12,
273280297Sjkim                                                                 0xe023c3e3,
274280297Sjkim                                                                 0xec2ccce0,
275280297Sjkim                                                                 0x8c0d8d81,
276280297Sjkim                                                                 0xbc3f8fb3,
277280297Sjkim                                                                 0x94168692,
278280297Sjkim                                                                 0x783b4b73,
279280297Sjkim                                                                 0x5c1c4c50,
280280297Sjkim                                                                 0xa02282a2,
281280297Sjkim                                                                 0xa02181a1,
282280297Sjkim                                                                 0x60234363,
283280297Sjkim                                                                 0x20230323,
284280297Sjkim                                                                 0x4c0d4d41,
285280297Sjkim                                                                 0xc808c8c0,
286280297Sjkim                                                                 0x9c1e8e92,
287280297Sjkim                                                                 0x9c1c8c90,
288280297Sjkim                                                                 0x383a0a32,
289280297Sjkim                                                                 0x0c0c0c00,
290280297Sjkim                                                                 0x2c2e0e22,
291280297Sjkim                                                                 0xb83a8ab2,
292280297Sjkim                                                                 0x6c2e4e62,
293280297Sjkim                                                                 0x9c1f8f93,
294280297Sjkim                                                                 0x581a4a52,
295280297Sjkim                                                                 0xf032c2f2,
296280297Sjkim                                                                 0x90128292,
297280297Sjkim                                                                 0xf033c3f3,
298280297Sjkim                                                                 0x48094941,
299280297Sjkim                                                                 0x78384870,
300280297Sjkim                                                                 0xcc0cccc0,
301280297Sjkim                                                                 0x14150511,
302280297Sjkim                                                                 0xf83bcbf3,
303280297Sjkim                                                                 0x70304070,
304280297Sjkim                                                                 0x74354571,
305280297Sjkim                                                                 0x7c3f4f73,
306280297Sjkim                                                                 0x34350531,
307280297Sjkim                                                                 0x10100010,
308280297Sjkim                                                                 0x00030303,
309280297Sjkim                                                                 0x64244460,
310280297Sjkim                                                                 0x6c2d4d61,
311280297Sjkim                                                                 0xc406c6c2,
312280297Sjkim                                                                 0x74344470,
313280297Sjkim                                                                 0xd415c5d1,
314280297Sjkim                                                                 0xb43484b0,
315280297Sjkim                                                                 0xe82acae2,
316280297Sjkim                                                                 0x08090901,
317280297Sjkim                                                                 0x74364672,
318280297Sjkim                                                                 0x18190911,
319280297Sjkim                                                                 0xfc3ecef2,
320280297Sjkim                                                                 0x40004040,
321280297Sjkim                                                                 0x10120212,
322280297Sjkim                                                                 0xe020c0e0,
323280297Sjkim                                                                 0xbc3d8db1,
324280297Sjkim                                                                 0x04050501,
325280297Sjkim                                                                 0xf83acaf2,
326280297Sjkim                                                                 0x00010101,
327280297Sjkim                                                                 0xf030c0f0,
328280297Sjkim                                                                 0x282a0a22,
329280297Sjkim                                                                 0x5c1e4e52,
330280297Sjkim                                                                 0xa82989a1,
331280297Sjkim                                                                 0x54164652,
332280297Sjkim                                                                 0x40034343,
333280297Sjkim                                                                 0x84058581,
334280297Sjkim                                                                 0x14140410,
335280297Sjkim                                                                 0x88098981,
336280297Sjkim                                                                 0x981b8b93,
337280297Sjkim                                                                 0xb03080b0,
338280297Sjkim                                                                 0xe425c5e1,
339280297Sjkim                                                                 0x48084840,
340280297Sjkim                                                                 0x78394971,
341280297Sjkim                                                                 0x94178793,
342280297Sjkim                                                                 0xfc3cccf0,
343280297Sjkim                                                                 0x1c1e0e12,
344280297Sjkim                                                                 0x80028282,
345280297Sjkim                                                                 0x20210121,
346280297Sjkim                                                                 0x8c0c8c80,
347280297Sjkim                                                                 0x181b0b13,
348280297Sjkim                                                                 0x5c1f4f53,
349280297Sjkim                                                                 0x74374773,
350280297Sjkim                                                                 0x54144450,
351280297Sjkim                                                                 0xb03282b2,
352280297Sjkim                                                                 0x1c1d0d11,
353280297Sjkim                                                                 0x24250521,
354280297Sjkim                                                                 0x4c0f4f43,
355280297Sjkim                                                                 0x00000000,
356280297Sjkim                                                                 0x44064642,
357280297Sjkim                                                                 0xec2dcde1,
358280297Sjkim                                                                 0x58184850,
359280297Sjkim                                                                 0x50124252,
360280297Sjkim                                                                 0xe82bcbe3,
361280297Sjkim                                                                 0x7c3e4e72,
362280297Sjkim                                                                 0xd81acad2,
363280297Sjkim                                                                 0xc809c9c1,
364280297Sjkim                                                                 0xfc3dcdf1,
365280297Sjkim                                                                 0x30300030,
366280297Sjkim                                                                 0x94158591,
367280297Sjkim                                                                 0x64254561,
368280297Sjkim                                                                 0x3c3c0c30,
369280297Sjkim                                                                 0xb43686b2,
370280297Sjkim                                                                 0xe424c4e0,
371280297Sjkim                                                                 0xb83b8bb3,
372280297Sjkim                                                                 0x7c3c4c70,
373280297Sjkim                                                                 0x0c0e0e02,
374280297Sjkim                                                                 0x50104050,
375280297Sjkim                                                                 0x38390931,
376280297Sjkim                                                                 0x24260622,
377280297Sjkim                                                                 0x30320232,
378280297Sjkim                                                                 0x84048480,
379280297Sjkim                                                                 0x68294961,
380280297Sjkim                                                                 0x90138393,
381280297Sjkim                                                                 0x34370733,
382280297Sjkim                                                                 0xe427c7e3,
383280297Sjkim                                                                 0x24240420,
384280297Sjkim                                                                 0xa42484a0,
385280297Sjkim                                                                 0xc80bcbc3,
386280297Sjkim                                                                 0x50134353,
387280297Sjkim                                                                 0x080a0a02,
388280297Sjkim                                                                 0x84078783,
389280297Sjkim                                                                 0xd819c9d1,
390280297Sjkim                                                                 0x4c0c4c40,
391280297Sjkim                                                                 0x80038383,
392280297Sjkim                                                                 0x8c0f8f83,
393280297Sjkim                                                                 0xcc0ecec2,
394280297Sjkim                                                                 0x383b0b33,
395280297Sjkim                                                                 0x480a4a42,
396280297Sjkim                                                                 0xb43787b3},
397280297Sjkim{
398280297Sjkim 0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3, 0x50541444, 0x111c1d0d,
399280297Sjkim 0xa0ac2c8c, 0x21242505,
400280297Sjkim 0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e, 0x51501141, 0xf0fc3ccc,
401280297Sjkim 0xc2c80aca, 0x63602343,
402280297Sjkim 0x20282808, 0x40440444, 0x20202000, 0x919c1d8d, 0xe0e020c0, 0xe2e022c2,
403280297Sjkim 0xc0c808c8, 0x13141707,
404280297Sjkim 0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b, 0xb3b83b8b, 0x13101303,
405280297Sjkim 0xd2d012c2, 0xe2ec2ece,
406280297Sjkim 0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888, 0x32303202, 0xd1dc1dcd,
407280297Sjkim 0xf2f436c6, 0x70743444,
408280297Sjkim 0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747, 0x505c1c4c, 0x53581b4b,
409280297Sjkim 0xb1bc3d8d, 0x01000101,
410280297Sjkim 0x20242404, 0x101c1c0c, 0x73703343, 0x90981888, 0x10101000, 0xc0cc0ccc,
411280297Sjkim 0xf2f032c2, 0xd1d819c9,
412280297Sjkim 0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383, 0x93981b8b, 0xd1d011c1,
413280297Sjkim 0x82840686, 0xc1c809c9,
414280297Sjkim 0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb, 0x010c0d0d, 0xb2b43686,
415280297Sjkim 0x929c1e8e, 0x434c0f4f,
416280297Sjkim 0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848, 0xa2a42686, 0x12101202,
417280297Sjkim 0xa3ac2f8f, 0xd1d415c5,
418280297Sjkim 0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141, 0x52501242, 0x717c3d4d,
419280297Sjkim 0x818c0d8d, 0x00080808,
420280297Sjkim 0x131c1f0f, 0x91981989, 0x00000000, 0x11181909, 0x00040404, 0x53501343,
421280297Sjkim 0xf3f437c7, 0xe1e021c1,
422280297Sjkim 0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707, 0xb0b03080, 0x83880b8b,
423280297Sjkim 0x020c0e0e, 0xa3a82b8b,
424280297Sjkim 0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d, 0x61682949, 0x707c3c4c,
425280297Sjkim 0x01080909, 0x02080a0a,
426280297Sjkim 0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5, 0x83840787, 0x10141404,
427280297Sjkim 0xf2fc3ece, 0x60642444,
428280297Sjkim 0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a, 0x02040606, 0x21202101,
429280297Sjkim 0x63682b4b, 0x62642646,
430280297Sjkim 0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a, 0x000c0c0c, 0xb3b03383,
431280297Sjkim 0x727c3e4e, 0xd0d010c0,
432280297Sjkim 0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5, 0x22242606, 0x80800080,
433280297Sjkim 0xa1ac2d8d, 0xd3dc1fcf,
434280297Sjkim 0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e, 0x32343606, 0x11141505,
435280297Sjkim 0x22202202, 0x30383808,
436280297Sjkim 0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c, 0x81800181, 0xe1e829c9,
437280297Sjkim 0x80840484, 0x93941787,
438280297Sjkim 0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c, 0x71703141, 0x11101101,
439280297Sjkim 0xc3c407c7, 0x81880989,
440280297Sjkim 0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8, 0x90941484, 0x51581949,
441280297Sjkim 0x82800282, 0xc0c404c4,
442280297Sjkim 0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747, 0xc0c000c0, 0xc3cc0fcf,
443280297Sjkim 0xd3d417c7, 0xb0b83888,
444280297Sjkim 0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303, 0x91901181, 0x606c2c4c,
445280297Sjkim 0xd3d81bcb, 0xa0a42484,
446280297Sjkim 0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2, 0x636c2f4f, 0x313c3d0d,
447280297Sjkim 0x212c2d0d, 0x40400040,
448280297Sjkim 0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1, 0xa2a82a8a, 0xb2b83a8a,
449280297Sjkim 0x424c0e4e, 0x51541545,
450280297Sjkim 0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f, 0x909c1c8c, 0xd0d818c8,
451280297Sjkim 0x42480a4a, 0x52541646,
452280297Sjkim 0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646, 0xb1b43585, 0x23282b0b,
453280297Sjkim 0x61642545, 0xf2f83aca,
454280297Sjkim 0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f, 0x525c1e4e, 0xf1f839c9,
455280297Sjkim 0xe2e426c6, 0xb2b03282,
456280297Sjkim 0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f, 0xe0e424c4, 0xf0f030c0,
457280297Sjkim 0xc1cc0dcd, 0x80880888,
458280297Sjkim 0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4, 0x62602242, 0x21282909,
459280297Sjkim 0x03040707, 0x33303303,
460280297Sjkim 0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949, 0x90901080, 0x62682a4a,
461280297Sjkim 0x22282a0a, 0x92981a8a}, {
462280297Sjkim                           0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426,
463280297Sjkim                           0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838,
464280297Sjkim                           0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407,
465280297Sjkim                           0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b,
466280297Sjkim                           0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435,
467280297Sjkim                           0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427,
468280297Sjkim                           0xc3d3d013, 0x81919011, 0x01111011, 0x06020406,
469280297Sjkim                           0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b,
470280297Sjkim                           0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828,
471280297Sjkim                           0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434,
472280297Sjkim                           0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416,
473280297Sjkim                           0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818,
474280297Sjkim                           0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e,
475280297Sjkim                           0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f,
476280297Sjkim                           0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a,
477280297Sjkim                           0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032,
478280297Sjkim                           0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000,
479280297Sjkim                           0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b,
480280297Sjkim                           0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f,
481280297Sjkim                           0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434,
482280297Sjkim                           0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829,
483280297Sjkim                           0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838,
484280297Sjkim                           0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405,
485280297Sjkim                           0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839,
486280297Sjkim                           0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031,
487280297Sjkim                           0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031,
488280297Sjkim                           0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002,
489280297Sjkim                           0x02222022, 0x04000404, 0x48606828, 0x41717031,
490280297Sjkim                           0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819,
491280297Sjkim                           0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819,
492280297Sjkim                           0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c,
493280297Sjkim                           0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010,
494280297Sjkim                           0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a,
495280297Sjkim                           0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f,
496280297Sjkim                           0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022,
497280297Sjkim                           0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d,
498280297Sjkim                           0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a,
499280297Sjkim                           0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e,
500280297Sjkim                           0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012,
501280297Sjkim                           0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c,
502280297Sjkim                           0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435,
503280297Sjkim                           0x4f737c3f, 0x05313435, 0x00101010, 0x03030003,
504280297Sjkim                           0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434,
505280297Sjkim                           0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809,
506280297Sjkim                           0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000,
507280297Sjkim                           0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405,
508280297Sjkim                           0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a,
509280297Sjkim                           0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003,
510280297Sjkim                           0x85818405, 0x04101414, 0x89818809, 0x8b93981b,
511280297Sjkim                           0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839,
512280297Sjkim                           0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002,
513280297Sjkim                           0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f,
514280297Sjkim                           0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d,
515280297Sjkim                           0x05212425, 0x4f434c0f, 0x00000000, 0x46424406,
516280297Sjkim                           0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b,
517280297Sjkim                           0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d,
518280297Sjkim                           0x00303030, 0x85919415, 0x45616425, 0x0c303c3c,
519280297Sjkim                           0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c,
520280297Sjkim                           0x0e020c0e, 0x40505010, 0x09313839, 0x06222426,
521280297Sjkim                           0x02323032, 0x84808404, 0x49616829, 0x83939013,
522280297Sjkim                           0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424,
523280297Sjkim                           0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407,
524280297Sjkim                           0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f,
525280297Sjkim                           0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437}
526280297Sjkim};
527183234Ssimon
528183234Ssimon/* key schedule constants - golden ratio */
529280297Sjkim# define KC0     0x9e3779b9
530280297Sjkim# define KC1     0x3c6ef373
531280297Sjkim# define KC2     0x78dde6e6
532280297Sjkim# define KC3     0xf1bbcdcc
533280297Sjkim# define KC4     0xe3779b99
534280297Sjkim# define KC5     0xc6ef3733
535280297Sjkim# define KC6     0x8dde6e67
536280297Sjkim# define KC7     0x1bbcdccf
537280297Sjkim# define KC8     0x3779b99e
538280297Sjkim# define KC9     0x6ef3733c
539280297Sjkim# define KC10    0xdde6e678
540280297Sjkim# define KC11    0xbbcdccf1
541280297Sjkim# define KC12    0x779b99e3
542280297Sjkim# define KC13    0xef3733c6
543280297Sjkim# define KC14    0xde6e678d
544280297Sjkim# define KC15    0xbcdccf1b
545183234Ssimon
546280297Sjkim# if defined(OPENSSL_SMALL_FOOTPRINT)
547238405Sjkimstatic const seed_word KC[] = {
548280297Sjkim    KC0, KC1, KC2, KC3, KC4, KC5, KC6, KC7,
549280297Sjkim    KC8, KC9, KC10, KC11, KC12, KC13, KC14, KC15
550280297Sjkim};
551280297Sjkim# endif
552280297Sjkimvoid SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH],
553280297Sjkim                  SEED_KEY_SCHEDULE *ks)
554280297Sjkim# ifdef OPENSSL_FIPS
555183234Ssimon{
556280297Sjkim    fips_cipher_abort(SEED);
557280297Sjkim    private_SEED_set_key(rawkey, ks);
558280297Sjkim}
559183234Ssimon
560280297Sjkimvoid private_SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH],
561280297Sjkim                          SEED_KEY_SCHEDULE *ks)
562280297Sjkim# endif
563280297Sjkim{
564280297Sjkim    seed_word x1, x2, x3, x4;
565280297Sjkim    seed_word t0, t1;
566183234Ssimon
567280297Sjkim    char2word(rawkey, x1);
568280297Sjkim    char2word(rawkey + 4, x2);
569280297Sjkim    char2word(rawkey + 8, x3);
570280297Sjkim    char2word(rawkey + 12, x4);
571238405Sjkim
572280297Sjkim    t0 = (x1 + x3 - KC0) & 0xffffffff;
573280297Sjkim    t1 = (x2 - x4 + KC0) & 0xffffffff;
574280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[0]);
575280297Sjkim    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC1);
576280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[2]);
577280297Sjkim
578280297Sjkim# if !defined(OPENSSL_SMALL_FOOTPRINT)
579280297Sjkim    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC2);
580280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[4]);
581280297Sjkim    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC3);
582280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[6]);
583280297Sjkim    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC4);
584280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[8]);
585280297Sjkim    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC5);
586280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[10]);
587280297Sjkim    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC6);
588280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[12]);
589280297Sjkim    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC7);
590280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[14]);
591280297Sjkim    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC8);
592280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[16]);
593280297Sjkim    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC9);
594280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[18]);
595280297Sjkim    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC10);
596280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[20]);
597280297Sjkim    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC11);
598280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[22]);
599280297Sjkim    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC12);
600280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[24]);
601280297Sjkim    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC13);
602280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[26]);
603280297Sjkim    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC14);
604280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[28]);
605280297Sjkim    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC15);
606280297Sjkim    KEYUPDATE_TEMP(t0, t1, &ks->data[30]);
607280297Sjkim# else
608280297Sjkim    {
609280297Sjkim        int i;
610280297Sjkim        for (i = 2; i < 16; i += 2) {
611280297Sjkim            KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC[i]);
612280297Sjkim            KEYUPDATE_TEMP(t0, t1, &ks->data[i * 2]);
613280297Sjkim            KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC[i + 1]);
614280297Sjkim            KEYUPDATE_TEMP(t0, t1, &ks->data[i * 2 + 2]);
615280297Sjkim        }
616280297Sjkim    }
617280297Sjkim# endif
618183234Ssimon}
619183234Ssimon
620280297Sjkimvoid SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE],
621280297Sjkim                  unsigned char d[SEED_BLOCK_SIZE],
622280297Sjkim                  const SEED_KEY_SCHEDULE *ks)
623183234Ssimon{
624280297Sjkim    seed_word x1, x2, x3, x4;
625280297Sjkim    seed_word t0, t1;
626183234Ssimon
627280297Sjkim    char2word(s, x1);
628280297Sjkim    char2word(s + 4, x2);
629280297Sjkim    char2word(s + 8, x3);
630280297Sjkim    char2word(s + 12, x4);
631238405Sjkim
632280297Sjkim# if !defined(OPENSSL_SMALL_FOOTPRINT)
633280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 0);
634280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 2);
635280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 4);
636280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 6);
637280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 8);
638280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 10);
639280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 12);
640280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 14);
641280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 16);
642280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 18);
643280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 20);
644280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 22);
645280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 24);
646280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 26);
647280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 28);
648280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 30);
649280297Sjkim# else
650280297Sjkim    {
651280297Sjkim        int i;
652280297Sjkim        for (i = 0; i < 30; i += 4) {
653280297Sjkim            E_SEED(t0, t1, x1, x2, x3, x4, i);
654280297Sjkim            E_SEED(t0, t1, x3, x4, x1, x2, i + 2);
655280297Sjkim        }
656280297Sjkim    }
657280297Sjkim# endif
658183234Ssimon
659280297Sjkim    word2char(x3, d);
660280297Sjkim    word2char(x4, d + 4);
661280297Sjkim    word2char(x1, d + 8);
662280297Sjkim    word2char(x2, d + 12);
663183234Ssimon}
664183234Ssimon
665280297Sjkimvoid SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE],
666280297Sjkim                  unsigned char d[SEED_BLOCK_SIZE],
667280297Sjkim                  const SEED_KEY_SCHEDULE *ks)
668183234Ssimon{
669280297Sjkim    seed_word x1, x2, x3, x4;
670280297Sjkim    seed_word t0, t1;
671183234Ssimon
672280297Sjkim    char2word(s, x1);
673280297Sjkim    char2word(s + 4, x2);
674280297Sjkim    char2word(s + 8, x3);
675280297Sjkim    char2word(s + 12, x4);
676238405Sjkim
677280297Sjkim# if !defined(OPENSSL_SMALL_FOOTPRINT)
678280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 30);
679280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 28);
680280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 26);
681280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 24);
682280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 22);
683280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 20);
684280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 18);
685280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 16);
686280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 14);
687280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 12);
688280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 10);
689280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 8);
690280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 6);
691280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 4);
692280297Sjkim    E_SEED(t0, t1, x1, x2, x3, x4, 2);
693280297Sjkim    E_SEED(t0, t1, x3, x4, x1, x2, 0);
694280297Sjkim# else
695280297Sjkim    {
696280297Sjkim        int i;
697280297Sjkim        for (i = 30; i > 0; i -= 4) {
698280297Sjkim            E_SEED(t0, t1, x1, x2, x3, x4, i);
699280297Sjkim            E_SEED(t0, t1, x3, x4, x1, x2, i - 2);
700183234Ssimon
701280297Sjkim        }
702280297Sjkim    }
703280297Sjkim# endif
704238405Sjkim
705280297Sjkim    word2char(x3, d);
706280297Sjkim    word2char(x4, d + 4);
707280297Sjkim    word2char(x1, d + 8);
708280297Sjkim    word2char(x2, d + 12);
709183234Ssimon}
710183234Ssimon
711280297Sjkim#endif                          /* OPENSSL_NO_SEED */
712