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