Coverage Report

Created: 2022-11-30 06:20

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