~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/crypto/seed.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /crypto/seed.c (Version linux-6.12-rc7) and /crypto/seed.c (Version linux-6.2.16)


  1 // SPDX-License-Identifier: GPL-2.0-or-later        1 // SPDX-License-Identifier: GPL-2.0-or-later
  2 /*                                                  2 /*
  3  * Cryptographic API.                               3  * Cryptographic API.
  4  *                                                  4  *
  5  * SEED Cipher Algorithm.                           5  * SEED Cipher Algorithm.
  6  *                                                  6  *
  7  * Documentation of SEED can be found in RFC 4      7  * Documentation of SEED can be found in RFC 4269.
  8  * Copyright (C) 2007 Korea Information Securi      8  * Copyright (C) 2007 Korea Information Security Agency (KISA).
  9  */                                                 9  */
 10                                                    10 
 11 #include <crypto/algapi.h>                         11 #include <crypto/algapi.h>
 12 #include <linux/module.h>                          12 #include <linux/module.h>
 13 #include <linux/init.h>                            13 #include <linux/init.h>
 14 #include <linux/types.h>                           14 #include <linux/types.h>
 15 #include <linux/errno.h>                           15 #include <linux/errno.h>
 16 #include <asm/byteorder.h>                         16 #include <asm/byteorder.h>
 17                                                    17 
 18 #define SEED_NUM_KCONSTANTS     16                 18 #define SEED_NUM_KCONSTANTS     16
 19 #define SEED_KEY_SIZE           16                 19 #define SEED_KEY_SIZE           16
 20 #define SEED_BLOCK_SIZE         16                 20 #define SEED_BLOCK_SIZE         16
 21 #define SEED_KEYSCHED_LEN       32                 21 #define SEED_KEYSCHED_LEN       32
 22                                                    22 
 23 /*                                                 23 /*
 24  * #define byte(x, nr) ((unsigned char)((x) >>     24  * #define byte(x, nr) ((unsigned char)((x) >> (nr*8)))
 25  */                                                25  */
 26 static inline u8                                   26 static inline u8
 27 byte(const u32 x, const unsigned n)                27 byte(const u32 x, const unsigned n)
 28 {                                                  28 {
 29         return x >> (n << 3);                      29         return x >> (n << 3);
 30 }                                                  30 }
 31                                                    31 
 32 struct seed_ctx {                                  32 struct seed_ctx {
 33         u32 keysched[SEED_KEYSCHED_LEN];           33         u32 keysched[SEED_KEYSCHED_LEN];
 34 };                                                 34 };
 35                                                    35 
 36 static const u32 SS0[256] = {                      36 static const u32 SS0[256] = {
 37         0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x     37         0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x13c3d3d0,
 38         0x14445054, 0x1d0d111c, 0x2c8ca0ac, 0x     38         0x14445054, 0x1d0d111c, 0x2c8ca0ac, 0x25052124,
 39         0x1d4d515c, 0x03434340, 0x18081018, 0x     39         0x1d4d515c, 0x03434340, 0x18081018, 0x1e0e121c,
 40         0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x     40         0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x23436360,
 41         0x28082028, 0x04444044, 0x20002020, 0x     41         0x28082028, 0x04444044, 0x20002020, 0x1d8d919c,
 42         0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x     42         0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x17071314,
 43         0x2585a1a4, 0x0f8f838c, 0x03030300, 0x     43         0x2585a1a4, 0x0f8f838c, 0x03030300, 0x3b4b7378,
 44         0x3b8bb3b8, 0x13031310, 0x12c2d2d0, 0x     44         0x3b8bb3b8, 0x13031310, 0x12c2d2d0, 0x2ecee2ec,
 45         0x30407070, 0x0c8c808c, 0x3f0f333c, 0x     45         0x30407070, 0x0c8c808c, 0x3f0f333c, 0x2888a0a8,
 46         0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x     46         0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x34447074,
 47         0x2ccce0ec, 0x15859194, 0x0b0b0308, 0x     47         0x2ccce0ec, 0x15859194, 0x0b0b0308, 0x17475354,
 48         0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x     48         0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x01010100,
 49         0x24042024, 0x1c0c101c, 0x33437370, 0x     49         0x24042024, 0x1c0c101c, 0x33437370, 0x18889098,
 50         0x10001010, 0x0cccc0cc, 0x32c2f2f0, 0x     50         0x10001010, 0x0cccc0cc, 0x32c2f2f0, 0x19c9d1d8,
 51         0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x     51         0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x03838380,
 52         0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x     52         0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x09c9c1c8,
 53         0x20406060, 0x10405050, 0x2383a3a0, 0x     53         0x20406060, 0x10405050, 0x2383a3a0, 0x2bcbe3e8,
 54         0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x     54         0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x0f4f434c,
 55         0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x     55         0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x38487078,
 56         0x2686a2a4, 0x12021210, 0x2f8fa3ac, 0x     56         0x2686a2a4, 0x12021210, 0x2f8fa3ac, 0x15c5d1d4,
 57         0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x     57         0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x01414140,
 58         0x12425250, 0x3d4d717c, 0x0d8d818c, 0x     58         0x12425250, 0x3d4d717c, 0x0d8d818c, 0x08080008,
 59         0x1f0f131c, 0x19899198, 0x00000000, 0x     59         0x1f0f131c, 0x19899198, 0x00000000, 0x19091118,
 60         0x04040004, 0x13435350, 0x37c7f3f4, 0x     60         0x04040004, 0x13435350, 0x37c7f3f4, 0x21c1e1e0,
 61         0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x     61         0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x27072324,
 62         0x3080b0b0, 0x0b8b8388, 0x0e0e020c, 0x     62         0x3080b0b0, 0x0b8b8388, 0x0e0e020c, 0x2b8ba3a8,
 63         0x2282a2a0, 0x2e4e626c, 0x13839390, 0x     63         0x2282a2a0, 0x2e4e626c, 0x13839390, 0x0d4d414c,
 64         0x29496168, 0x3c4c707c, 0x09090108, 0x     64         0x29496168, 0x3c4c707c, 0x09090108, 0x0a0a0208,
 65         0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0, 0x     65         0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0, 0x05c5c1c4,
 66         0x07878384, 0x14041014, 0x3ecef2fc, 0x     66         0x07878384, 0x14041014, 0x3ecef2fc, 0x24446064,
 67         0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x     67         0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x1a0a1218,
 68         0x06060204, 0x21012120, 0x2b4b6368, 0x     68         0x06060204, 0x21012120, 0x2b4b6368, 0x26466264,
 69         0x02020200, 0x35c5f1f4, 0x12829290, 0x     69         0x02020200, 0x35c5f1f4, 0x12829290, 0x0a8a8288,
 70         0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x     70         0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x10c0d0d0,
 71         0x3a4a7278, 0x07474344, 0x16869294, 0x     71         0x3a4a7278, 0x07474344, 0x16869294, 0x25c5e1e4,
 72         0x26062224, 0x00808080, 0x2d8da1ac, 0x     72         0x26062224, 0x00808080, 0x2d8da1ac, 0x1fcfd3dc,
 73         0x2181a1a0, 0x30003030, 0x37073334, 0x     73         0x2181a1a0, 0x30003030, 0x37073334, 0x2e8ea2ac,
 74         0x36063234, 0x15051114, 0x22022220, 0x     74         0x36063234, 0x15051114, 0x22022220, 0x38083038,
 75         0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x     75         0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x0c4c404c,
 76         0x01818180, 0x29c9e1e8, 0x04848084, 0x     76         0x01818180, 0x29c9e1e8, 0x04848084, 0x17879394,
 77         0x35053134, 0x0bcbc3c8, 0x0ecec2cc, 0x     77         0x35053134, 0x0bcbc3c8, 0x0ecec2cc, 0x3c0c303c,
 78         0x31417170, 0x11011110, 0x07c7c3c4, 0x     78         0x31417170, 0x11011110, 0x07c7c3c4, 0x09898188,
 79         0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x     79         0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x38c8f0f8,
 80         0x14849094, 0x19495158, 0x02828280, 0x     80         0x14849094, 0x19495158, 0x02828280, 0x04c4c0c4,
 81         0x3fcff3fc, 0x09494148, 0x39093138, 0x     81         0x3fcff3fc, 0x09494148, 0x39093138, 0x27476364,
 82         0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x     82         0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x3888b0b8,
 83         0x0f0f030c, 0x0e8e828c, 0x02424240, 0x     83         0x0f0f030c, 0x0e8e828c, 0x02424240, 0x23032320,
 84         0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x     84         0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x2484a0a4,
 85         0x34043034, 0x31c1f1f0, 0x08484048, 0x     85         0x34043034, 0x31c1f1f0, 0x08484048, 0x02c2c2c0,
 86         0x2f4f636c, 0x3d0d313c, 0x2d0d212c, 0x     86         0x2f4f636c, 0x3d0d313c, 0x2d0d212c, 0x00404040,
 87         0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x     87         0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x01c1c1c0,
 88         0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x     88         0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x15455154,
 89         0x3b0b3338, 0x1cccd0dc, 0x28486068, 0x     89         0x3b0b3338, 0x1cccd0dc, 0x28486068, 0x3f4f737c,
 90         0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x     90         0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x16465254,
 91         0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x     91         0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x06464244,
 92         0x3585b1b4, 0x2b0b2328, 0x25456164, 0x     92         0x3585b1b4, 0x2b0b2328, 0x25456164, 0x3acaf2f8,
 93         0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x     93         0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x1f8f939c,
 94         0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x     94         0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x3282b2b0,
 95         0x31013130, 0x2acae2e8, 0x2d4d616c, 0x     95         0x31013130, 0x2acae2e8, 0x2d4d616c, 0x1f4f535c,
 96         0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x     96         0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x08888088,
 97         0x16061214, 0x3a0a3238, 0x18485058, 0x     97         0x16061214, 0x3a0a3238, 0x18485058, 0x14c4d0d4,
 98         0x22426260, 0x29092128, 0x07070304, 0x     98         0x22426260, 0x29092128, 0x07070304, 0x33033330,
 99         0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x     99         0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x39497178,
100         0x10809090, 0x2a4a6268, 0x2a0a2228, 0x    100         0x10809090, 0x2a4a6268, 0x2a0a2228, 0x1a8a9298,
101 };                                                101 };
102                                                   102 
103 static const u32 SS1[256] = {                     103 static const u32 SS1[256] = {
104         0x38380830, 0xe828c8e0, 0x2c2d0d21, 0x    104         0x38380830, 0xe828c8e0, 0x2c2d0d21, 0xa42686a2,
105         0xcc0fcfc3, 0xdc1eced2, 0xb03383b3, 0x    105         0xcc0fcfc3, 0xdc1eced2, 0xb03383b3, 0xb83888b0,
106         0xac2f8fa3, 0x60204060, 0x54154551, 0x    106         0xac2f8fa3, 0x60204060, 0x54154551, 0xc407c7c3,
107         0x44044440, 0x6c2f4f63, 0x682b4b63, 0x    107         0x44044440, 0x6c2f4f63, 0x682b4b63, 0x581b4b53,
108         0xc003c3c3, 0x60224262, 0x30330333, 0x    108         0xc003c3c3, 0x60224262, 0x30330333, 0xb43585b1,
109         0x28290921, 0xa02080a0, 0xe022c2e2, 0x    109         0x28290921, 0xa02080a0, 0xe022c2e2, 0xa42787a3,
110         0xd013c3d3, 0x90118191, 0x10110111, 0x    110         0xd013c3d3, 0x90118191, 0x10110111, 0x04060602,
111         0x1c1c0c10, 0xbc3c8cb0, 0x34360632, 0x    111         0x1c1c0c10, 0xbc3c8cb0, 0x34360632, 0x480b4b43,
112         0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0x    112         0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0xa82888a0,
113         0x14170713, 0xc404c4c0, 0x14160612, 0x    113         0x14170713, 0xc404c4c0, 0x14160612, 0xf434c4f0,
114         0xc002c2c2, 0x44054541, 0xe021c1e1, 0x    114         0xc002c2c2, 0x44054541, 0xe021c1e1, 0xd416c6d2,
115         0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x    115         0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x98188890,
116         0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x    116         0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x3c3e0e32,
117         0xa42585a1, 0xf839c9f1, 0x0c0d0d01, 0x    117         0xa42585a1, 0xf839c9f1, 0x0c0d0d01, 0xdc1fcfd3,
118         0xd818c8d0, 0x282b0b23, 0x64264662, 0x    118         0xd818c8d0, 0x282b0b23, 0x64264662, 0x783a4a72,
119         0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x    119         0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x70324272,
120         0x40024242, 0xd414c4d0, 0x40014141, 0x    120         0x40024242, 0xd414c4d0, 0x40014141, 0xc000c0c0,
121         0x70334373, 0x64274763, 0xac2c8ca0, 0x    121         0x70334373, 0x64274763, 0xac2c8ca0, 0x880b8b83,
122         0xf437c7f3, 0xac2d8da1, 0x80008080, 0x    122         0xf437c7f3, 0xac2d8da1, 0x80008080, 0x1c1f0f13,
123         0xc80acac2, 0x2c2c0c20, 0xa82a8aa2, 0x    123         0xc80acac2, 0x2c2c0c20, 0xa82a8aa2, 0x34340430,
124         0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0x    124         0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0xe829c9e1,
125         0x5c1d4d51, 0x94148490, 0x18180810, 0x    125         0x5c1d4d51, 0x94148490, 0x18180810, 0xf838c8f0,
126         0x54174753, 0xac2e8ea2, 0x08080800, 0x    126         0x54174753, 0xac2e8ea2, 0x08080800, 0xc405c5c1,
127         0x10130313, 0xcc0dcdc1, 0x84068682, 0x    127         0x10130313, 0xcc0dcdc1, 0x84068682, 0xb83989b1,
128         0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x    128         0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x30310131,
129         0xf435c5f1, 0x880a8a82, 0x682a4a62, 0x    129         0xf435c5f1, 0x880a8a82, 0x682a4a62, 0xb03181b1,
130         0xd011c1d1, 0x20200020, 0xd417c7d3, 0x    130         0xd011c1d1, 0x20200020, 0xd417c7d3, 0x00020202,
131         0x20220222, 0x04040400, 0x68284860, 0x    131         0x20220222, 0x04040400, 0x68284860, 0x70314171,
132         0x04070703, 0xd81bcbd3, 0x9c1d8d91, 0x    132         0x04070703, 0xd81bcbd3, 0x9c1d8d91, 0x98198991,
133         0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x    133         0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x58194951,
134         0xdc1dcdd1, 0x50114151, 0x90108090, 0x    134         0xdc1dcdd1, 0x50114151, 0x90108090, 0xdc1cccd0,
135         0x981a8a92, 0xa02383a3, 0xa82b8ba3, 0x    135         0x981a8a92, 0xa02383a3, 0xa82b8ba3, 0xd010c0d0,
136         0x80018181, 0x0c0f0f03, 0x44074743, 0x    136         0x80018181, 0x0c0f0f03, 0x44074743, 0x181a0a12,
137         0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0x    137         0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0xbc3f8fb3,
138         0x94168692, 0x783b4b73, 0x5c1c4c50, 0x    138         0x94168692, 0x783b4b73, 0x5c1c4c50, 0xa02282a2,
139         0xa02181a1, 0x60234363, 0x20230323, 0x    139         0xa02181a1, 0x60234363, 0x20230323, 0x4c0d4d41,
140         0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x    140         0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x383a0a32,
141         0x0c0c0c00, 0x2c2e0e22, 0xb83a8ab2, 0x    141         0x0c0c0c00, 0x2c2e0e22, 0xb83a8ab2, 0x6c2e4e62,
142         0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x    142         0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x90128292,
143         0xf033c3f3, 0x48094941, 0x78384870, 0x    143         0xf033c3f3, 0x48094941, 0x78384870, 0xcc0cccc0,
144         0x14150511, 0xf83bcbf3, 0x70304070, 0x    144         0x14150511, 0xf83bcbf3, 0x70304070, 0x74354571,
145         0x7c3f4f73, 0x34350531, 0x10100010, 0x    145         0x7c3f4f73, 0x34350531, 0x10100010, 0x00030303,
146         0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x    146         0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x74344470,
147         0xd415c5d1, 0xb43484b0, 0xe82acae2, 0x    147         0xd415c5d1, 0xb43484b0, 0xe82acae2, 0x08090901,
148         0x74364672, 0x18190911, 0xfc3ecef2, 0x    148         0x74364672, 0x18190911, 0xfc3ecef2, 0x40004040,
149         0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x    149         0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x04050501,
150         0xf83acaf2, 0x00010101, 0xf030c0f0, 0x    150         0xf83acaf2, 0x00010101, 0xf030c0f0, 0x282a0a22,
151         0x5c1e4e52, 0xa82989a1, 0x54164652, 0x    151         0x5c1e4e52, 0xa82989a1, 0x54164652, 0x40034343,
152         0x84058581, 0x14140410, 0x88098981, 0x    152         0x84058581, 0x14140410, 0x88098981, 0x981b8b93,
153         0xb03080b0, 0xe425c5e1, 0x48084840, 0x    153         0xb03080b0, 0xe425c5e1, 0x48084840, 0x78394971,
154         0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x    154         0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x80028282,
155         0x20210121, 0x8c0c8c80, 0x181b0b13, 0x    155         0x20210121, 0x8c0c8c80, 0x181b0b13, 0x5c1f4f53,
156         0x74374773, 0x54144450, 0xb03282b2, 0x    156         0x74374773, 0x54144450, 0xb03282b2, 0x1c1d0d11,
157         0x24250521, 0x4c0f4f43, 0x00000000, 0x    157         0x24250521, 0x4c0f4f43, 0x00000000, 0x44064642,
158         0xec2dcde1, 0x58184850, 0x50124252, 0x    158         0xec2dcde1, 0x58184850, 0x50124252, 0xe82bcbe3,
159         0x7c3e4e72, 0xd81acad2, 0xc809c9c1, 0x    159         0x7c3e4e72, 0xd81acad2, 0xc809c9c1, 0xfc3dcdf1,
160         0x30300030, 0x94158591, 0x64254561, 0x    160         0x30300030, 0x94158591, 0x64254561, 0x3c3c0c30,
161         0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x    161         0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x7c3c4c70,
162         0x0c0e0e02, 0x50104050, 0x38390931, 0x    162         0x0c0e0e02, 0x50104050, 0x38390931, 0x24260622,
163         0x30320232, 0x84048480, 0x68294961, 0x    163         0x30320232, 0x84048480, 0x68294961, 0x90138393,
164         0x34370733, 0xe427c7e3, 0x24240420, 0x    164         0x34370733, 0xe427c7e3, 0x24240420, 0xa42484a0,
165         0xc80bcbc3, 0x50134353, 0x080a0a02, 0x    165         0xc80bcbc3, 0x50134353, 0x080a0a02, 0x84078783,
166         0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x    166         0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x8c0f8f83,
167         0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0x    167         0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0xb43787b3,
168 };                                                168 };
169                                                   169 
170 static const u32 SS2[256] = {                     170 static const u32 SS2[256] = {
171         0xa1a82989, 0x81840585, 0xd2d416c6, 0x    171         0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3,
172         0x50541444, 0x111c1d0d, 0xa0ac2c8c, 0x    172         0x50541444, 0x111c1d0d, 0xa0ac2c8c, 0x21242505,
173         0x515c1d4d, 0x43400343, 0x10181808, 0x    173         0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e,
174         0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x    174         0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x63602343,
175         0x20282808, 0x40440444, 0x20202000, 0x    175         0x20282808, 0x40440444, 0x20202000, 0x919c1d8d,
176         0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x    176         0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x13141707,
177         0xa1a42585, 0x838c0f8f, 0x03000303, 0x    177         0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b,
178         0xb3b83b8b, 0x13101303, 0xd2d012c2, 0x    178         0xb3b83b8b, 0x13101303, 0xd2d012c2, 0xe2ec2ece,
179         0x70703040, 0x808c0c8c, 0x333c3f0f, 0x    179         0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888,
180         0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x    180         0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x70743444,
181         0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x    181         0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747,
182         0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x    182         0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x01000101,
183         0x20242404, 0x101c1c0c, 0x73703343, 0x    183         0x20242404, 0x101c1c0c, 0x73703343, 0x90981888,
184         0x10101000, 0xc0cc0ccc, 0xf2f032c2, 0x    184         0x10101000, 0xc0cc0ccc, 0xf2f032c2, 0xd1d819c9,
185         0x202c2c0c, 0xe3e427c7, 0x72703242, 0x    185         0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383,
186         0x93981b8b, 0xd1d011c1, 0x82840686, 0x    186         0x93981b8b, 0xd1d011c1, 0x82840686, 0xc1c809c9,
187         0x60602040, 0x50501040, 0xa3a02383, 0x    187         0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb,
188         0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x    188         0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x434c0f4f,
189         0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x    189         0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848,
190         0xa2a42686, 0x12101202, 0xa3ac2f8f, 0x    190         0xa2a42686, 0x12101202, 0xa3ac2f8f, 0xd1d415c5,
191         0x61602141, 0xc3c003c3, 0xb0b43484, 0x    191         0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141,
192         0x52501242, 0x717c3d4d, 0x818c0d8d, 0x    192         0x52501242, 0x717c3d4d, 0x818c0d8d, 0x00080808,
193         0x131c1f0f, 0x91981989, 0x00000000, 0x    193         0x131c1f0f, 0x91981989, 0x00000000, 0x11181909,
194         0x00040404, 0x53501343, 0xf3f437c7, 0x    194         0x00040404, 0x53501343, 0xf3f437c7, 0xe1e021c1,
195         0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x    195         0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707,
196         0xb0b03080, 0x83880b8b, 0x020c0e0e, 0x    196         0xb0b03080, 0x83880b8b, 0x020c0e0e, 0xa3a82b8b,
197         0xa2a02282, 0x626c2e4e, 0x93901383, 0x    197         0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d,
198         0x61682949, 0x707c3c4c, 0x01080909, 0x    198         0x61682949, 0x707c3c4c, 0x01080909, 0x02080a0a,
199         0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0x    199         0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5,
200         0x83840787, 0x10141404, 0xf2fc3ece, 0x    200         0x83840787, 0x10141404, 0xf2fc3ece, 0x60642444,
201         0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x    201         0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a,
202         0x02040606, 0x21202101, 0x63682b4b, 0x    202         0x02040606, 0x21202101, 0x63682b4b, 0x62642646,
203         0x02000202, 0xf1f435c5, 0x92901282, 0x    203         0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a,
204         0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0x    204         0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0xd0d010c0,
205         0x72783a4a, 0x43440747, 0x92941686, 0x    205         0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5,
206         0x22242606, 0x80800080, 0xa1ac2d8d, 0x    206         0x22242606, 0x80800080, 0xa1ac2d8d, 0xd3dc1fcf,
207         0xa1a02181, 0x30303000, 0x33343707, 0x    207         0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e,
208         0x32343606, 0x11141505, 0x22202202, 0x    208         0x32343606, 0x11141505, 0x22202202, 0x30383808,
209         0xf0f434c4, 0xa3a42787, 0x41440545, 0x    209         0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c,
210         0x81800181, 0xe1e829c9, 0x80840484, 0x    210         0x81800181, 0xe1e829c9, 0x80840484, 0x93941787,
211         0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x    211         0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c,
212         0x71703141, 0x11101101, 0xc3c407c7, 0x    212         0x71703141, 0x11101101, 0xc3c407c7, 0x81880989,
213         0x71743545, 0xf3f83bcb, 0xd2d81aca, 0x    213         0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8,
214         0x90941484, 0x51581949, 0x82800282, 0x    214         0x90941484, 0x51581949, 0x82800282, 0xc0c404c4,
215         0xf3fc3fcf, 0x41480949, 0x31383909, 0x    215         0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747,
216         0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0x    216         0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0xb0b83888,
217         0x030c0f0f, 0x828c0e8e, 0x42400242, 0x    217         0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303,
218         0x91901181, 0x606c2c4c, 0xd3d81bcb, 0x    218         0x91901181, 0x606c2c4c, 0xd3d81bcb, 0xa0a42484,
219         0x30343404, 0xf1f031c1, 0x40480848, 0x    219         0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2,
220         0x636c2f4f, 0x313c3d0d, 0x212c2d0d, 0x    220         0x636c2f4f, 0x313c3d0d, 0x212c2d0d, 0x40400040,
221         0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0x    221         0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1,
222         0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x    222         0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x51541545,
223         0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x    223         0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f,
224         0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x    224         0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x52541646,
225         0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x    225         0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646,
226         0xb1b43585, 0x23282b0b, 0x61642545, 0x    226         0xb1b43585, 0x23282b0b, 0x61642545, 0xf2f83aca,
227         0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x    227         0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f,
228         0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0x    228         0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0xb2b03282,
229         0x31303101, 0xe2e82aca, 0x616c2d4d, 0x    229         0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f,
230         0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x    230         0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x80880888,
231         0x12141606, 0x32383a0a, 0x50581848, 0x    231         0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4,
232         0x62602242, 0x21282909, 0x03040707, 0x    232         0x62602242, 0x21282909, 0x03040707, 0x33303303,
233         0xe0e828c8, 0x13181b0b, 0x01040505, 0x    233         0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949,
234         0x90901080, 0x62682a4a, 0x22282a0a, 0x    234         0x90901080, 0x62682a4a, 0x22282a0a, 0x92981a8a,
235 };                                                235 };
236                                                   236 
237 static const u32 SS3[256] = {                     237 static const u32 SS3[256] = {
238         0x08303838, 0xc8e0e828, 0x0d212c2d, 0x    238         0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426,
239         0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x    239         0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838,
240         0x8fa3ac2f, 0x40606020, 0x45515415, 0x    240         0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407,
241         0x44404404, 0x4f636c2f, 0x4b63682b, 0x    241         0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b,
242         0xc3c3c003, 0x42626022, 0x03333033, 0x    242         0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435,
243         0x09212829, 0x80a0a020, 0xc2e2e022, 0x    243         0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427,
244         0xc3d3d013, 0x81919011, 0x01111011, 0x    244         0xc3d3d013, 0x81919011, 0x01111011, 0x06020406,
245         0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x    245         0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b,
246         0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x    246         0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828,
247         0x07131417, 0xc4c0c404, 0x06121416, 0x    247         0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434,
248         0xc2c2c002, 0x45414405, 0xc1e1e021, 0x    248         0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416,
249         0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x    249         0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818,
250         0x08202828, 0x4e424c0e, 0xc6f2f436, 0x    250         0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e,
251         0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0x    251         0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f,
252         0xc8d0d818, 0x0b23282b, 0x46626426, 0x    252         0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a,
253         0x07232427, 0x0f232c2f, 0xc1f1f031, 0x    253         0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032,
254         0x42424002, 0xc4d0d414, 0x41414001, 0x    254         0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000,
255         0x43737033, 0x47636427, 0x8ca0ac2c, 0x    255         0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b,
256         0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x    256         0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f,
257         0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x    257         0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434,
258         0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0x    258         0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829,
259         0x4d515c1d, 0x84909414, 0x08101818, 0x    259         0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838,
260         0x47535417, 0x8ea2ac2e, 0x08000808, 0x    260         0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405,
261         0x03131013, 0xcdc1cc0d, 0x86828406, 0x    261         0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839,
262         0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x    262         0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031,
263         0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x    263         0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031,
264         0xc1d1d011, 0x00202020, 0xc7d3d417, 0x    264         0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002,
265         0x02222022, 0x04000404, 0x48606828, 0x    265         0x02222022, 0x04000404, 0x48606828, 0x41717031,
266         0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x    266         0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819,
267         0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x    267         0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819,
268         0xcdd1dc1d, 0x41515011, 0x80909010, 0x    268         0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c,
269         0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0x    269         0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010,
270         0x81818001, 0x0f030c0f, 0x47434407, 0x    270         0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a,
271         0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x    271         0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f,
272         0x86929416, 0x4b73783b, 0x4c505c1c, 0x    272         0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022,
273         0x81a1a021, 0x43636023, 0x03232023, 0x    273         0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d,
274         0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x    274         0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a,
275         0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x    275         0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e,
276         0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x    276         0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012,
277         0xc3f3f033, 0x49414809, 0x48707838, 0x    277         0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c,
278         0x05111415, 0xcbf3f83b, 0x40707030, 0x    278         0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435,
279         0x4f737c3f, 0x05313435, 0x00101010, 0x    279         0x4f737c3f, 0x05313435, 0x00101010, 0x03030003,
280         0x44606424, 0x4d616c2d, 0xc6c2c406, 0x    280         0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434,
281         0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x    281         0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809,
282         0x46727436, 0x09111819, 0xcef2fc3e, 0x    282         0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000,
283         0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x    283         0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405,
284         0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x    284         0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a,
285         0x4e525c1e, 0x89a1a829, 0x46525416, 0x    285         0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003,
286         0x85818405, 0x04101414, 0x89818809, 0x    286         0x85818405, 0x04101414, 0x89818809, 0x8b93981b,
287         0x80b0b030, 0xc5e1e425, 0x48404808, 0x    287         0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839,
288         0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x    288         0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002,
289         0x01212021, 0x8c808c0c, 0x0b13181b, 0x    289         0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f,
290         0x47737437, 0x44505414, 0x82b2b032, 0x    290         0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d,
291         0x05212425, 0x4f434c0f, 0x00000000, 0x    291         0x05212425, 0x4f434c0f, 0x00000000, 0x46424406,
292         0xcde1ec2d, 0x48505818, 0x42525012, 0x    292         0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b,
293         0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0x    293         0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d,
294         0x00303030, 0x85919415, 0x45616425, 0x    294         0x00303030, 0x85919415, 0x45616425, 0x0c303c3c,
295         0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x    295         0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c,
296         0x0e020c0e, 0x40505010, 0x09313839, 0x    296         0x0e020c0e, 0x40505010, 0x09313839, 0x06222426,
297         0x02323032, 0x84808404, 0x49616829, 0x    297         0x02323032, 0x84808404, 0x49616829, 0x83939013,
298         0x07333437, 0xc7e3e427, 0x04202424, 0x    298         0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424,
299         0xcbc3c80b, 0x43535013, 0x0a02080a, 0x    299         0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407,
300         0xc9d1d819, 0x4c404c0c, 0x83838003, 0x    300         0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f,
301         0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x    301         0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437,
302 };                                                302 };
303                                                   303 
304 static const u32 KC[SEED_NUM_KCONSTANTS] = {      304 static const u32 KC[SEED_NUM_KCONSTANTS] = {
305         0x9e3779b9, 0x3c6ef373, 0x78dde6e6, 0x    305         0x9e3779b9, 0x3c6ef373, 0x78dde6e6, 0xf1bbcdcc,
306         0xe3779b99, 0xc6ef3733, 0x8dde6e67, 0x    306         0xe3779b99, 0xc6ef3733, 0x8dde6e67, 0x1bbcdccf,
307         0x3779b99e, 0x6ef3733c, 0xdde6e678, 0x    307         0x3779b99e, 0x6ef3733c, 0xdde6e678, 0xbbcdccf1,
308         0x779b99e3, 0xef3733c6, 0xde6e678d, 0x    308         0x779b99e3, 0xef3733c6, 0xde6e678d, 0xbcdccf1b,
309 };                                                309 };
310                                                   310 
311 #define OP(X1, X2, X3, X4, rbase)                 311 #define OP(X1, X2, X3, X4, rbase)                       \
312         t0 = X3 ^ ks[rbase];                      312         t0 = X3 ^ ks[rbase];                            \
313         t1 = X4 ^ ks[rbase+1];                    313         t1 = X4 ^ ks[rbase+1];                          \
314         t1 ^= t0;                                 314         t1 ^= t0;                                       \
315         t1 = SS0[byte(t1, 0)] ^ SS1[byte(t1, 1    315         t1 = SS0[byte(t1, 0)] ^ SS1[byte(t1, 1)] ^      \
316                 SS2[byte(t1, 2)] ^ SS3[byte(t1    316                 SS2[byte(t1, 2)] ^ SS3[byte(t1, 3)];    \
317         t0 += t1;                                 317         t0 += t1;                                       \
318         t0 = SS0[byte(t0, 0)] ^ SS1[byte(t0, 1    318         t0 = SS0[byte(t0, 0)] ^ SS1[byte(t0, 1)] ^      \
319                 SS2[byte(t0, 2)] ^ SS3[byte(t0    319                 SS2[byte(t0, 2)] ^ SS3[byte(t0, 3)];    \
320         t1 += t0;                                 320         t1 += t0;                                       \
321         t1 = SS0[byte(t1, 0)] ^ SS1[byte(t1, 1    321         t1 = SS0[byte(t1, 0)] ^ SS1[byte(t1, 1)] ^      \
322                 SS2[byte(t1, 2)] ^ SS3[byte(t1    322                 SS2[byte(t1, 2)] ^ SS3[byte(t1, 3)];    \
323         t0 += t1;                                 323         t0 += t1;                                       \
324         X1 ^= t0;                                 324         X1 ^= t0;                                       \
325         X2 ^= t1                                  325         X2 ^= t1
326                                                   326 
327 static int seed_set_key(struct crypto_tfm *tfm    327 static int seed_set_key(struct crypto_tfm *tfm, const u8 *in_key,
328                         unsigned int key_len)     328                         unsigned int key_len)
329 {                                                 329 {
330         struct seed_ctx *ctx = crypto_tfm_ctx(    330         struct seed_ctx *ctx = crypto_tfm_ctx(tfm);
331         u32 *keyout = ctx->keysched;              331         u32 *keyout = ctx->keysched;
332         const __be32 *key = (const __be32 *)in    332         const __be32 *key = (const __be32 *)in_key;
333         u32 i, t0, t1, x1, x2, x3, x4;            333         u32 i, t0, t1, x1, x2, x3, x4;
334                                                   334 
335         x1 = be32_to_cpu(key[0]);                 335         x1 = be32_to_cpu(key[0]);
336         x2 = be32_to_cpu(key[1]);                 336         x2 = be32_to_cpu(key[1]);
337         x3 = be32_to_cpu(key[2]);                 337         x3 = be32_to_cpu(key[2]);
338         x4 = be32_to_cpu(key[3]);                 338         x4 = be32_to_cpu(key[3]);
339                                                   339 
340         for (i = 0; i < SEED_NUM_KCONSTANTS; i    340         for (i = 0; i < SEED_NUM_KCONSTANTS; i++) {
341                 t0 = x1 + x3 - KC[i];             341                 t0 = x1 + x3 - KC[i];
342                 t1 = x2 + KC[i] - x4;             342                 t1 = x2 + KC[i] - x4;
343                 *(keyout++) = SS0[byte(t0, 0)]    343                 *(keyout++) = SS0[byte(t0, 0)] ^ SS1[byte(t0, 1)] ^
344                                 SS2[byte(t0, 2    344                                 SS2[byte(t0, 2)] ^ SS3[byte(t0, 3)];
345                 *(keyout++) = SS0[byte(t1, 0)]    345                 *(keyout++) = SS0[byte(t1, 0)] ^ SS1[byte(t1, 1)] ^
346                                 SS2[byte(t1, 2    346                                 SS2[byte(t1, 2)] ^ SS3[byte(t1, 3)];
347                                                   347 
348                 if (i % 2 == 0) {                 348                 if (i % 2 == 0) {
349                         t0 = x1;                  349                         t0 = x1;
350                         x1 = (x1 >> 8) ^ (x2 <    350                         x1 = (x1 >> 8) ^ (x2 << 24);
351                         x2 = (x2 >> 8) ^ (t0 <    351                         x2 = (x2 >> 8) ^ (t0 << 24);
352                 } else {                          352                 } else {
353                         t0 = x3;                  353                         t0 = x3;
354                         x3 = (x3 << 8) ^ (x4 >    354                         x3 = (x3 << 8) ^ (x4 >> 24);
355                         x4 = (x4 << 8) ^ (t0 >    355                         x4 = (x4 << 8) ^ (t0 >> 24);
356                 }                                 356                 }
357         }                                         357         }
358                                                   358 
359         return 0;                                 359         return 0;
360 }                                                 360 }
361                                                   361 
362 /* encrypt a block of text */                     362 /* encrypt a block of text */
363                                                   363 
364 static void seed_encrypt(struct crypto_tfm *tf    364 static void seed_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
365 {                                                 365 {
366         const struct seed_ctx *ctx = crypto_tf    366         const struct seed_ctx *ctx = crypto_tfm_ctx(tfm);
367         const __be32 *src = (const __be32 *)in    367         const __be32 *src = (const __be32 *)in;
368         __be32 *dst = (__be32 *)out;              368         __be32 *dst = (__be32 *)out;
369         u32 x1, x2, x3, x4, t0, t1;               369         u32 x1, x2, x3, x4, t0, t1;
370         const u32 *ks = ctx->keysched;            370         const u32 *ks = ctx->keysched;
371                                                   371 
372         x1 = be32_to_cpu(src[0]);                 372         x1 = be32_to_cpu(src[0]);
373         x2 = be32_to_cpu(src[1]);                 373         x2 = be32_to_cpu(src[1]);
374         x3 = be32_to_cpu(src[2]);                 374         x3 = be32_to_cpu(src[2]);
375         x4 = be32_to_cpu(src[3]);                 375         x4 = be32_to_cpu(src[3]);
376                                                   376 
377         OP(x1, x2, x3, x4, 0);                    377         OP(x1, x2, x3, x4, 0);
378         OP(x3, x4, x1, x2, 2);                    378         OP(x3, x4, x1, x2, 2);
379         OP(x1, x2, x3, x4, 4);                    379         OP(x1, x2, x3, x4, 4);
380         OP(x3, x4, x1, x2, 6);                    380         OP(x3, x4, x1, x2, 6);
381         OP(x1, x2, x3, x4, 8);                    381         OP(x1, x2, x3, x4, 8);
382         OP(x3, x4, x1, x2, 10);                   382         OP(x3, x4, x1, x2, 10);
383         OP(x1, x2, x3, x4, 12);                   383         OP(x1, x2, x3, x4, 12);
384         OP(x3, x4, x1, x2, 14);                   384         OP(x3, x4, x1, x2, 14);
385         OP(x1, x2, x3, x4, 16);                   385         OP(x1, x2, x3, x4, 16);
386         OP(x3, x4, x1, x2, 18);                   386         OP(x3, x4, x1, x2, 18);
387         OP(x1, x2, x3, x4, 20);                   387         OP(x1, x2, x3, x4, 20);
388         OP(x3, x4, x1, x2, 22);                   388         OP(x3, x4, x1, x2, 22);
389         OP(x1, x2, x3, x4, 24);                   389         OP(x1, x2, x3, x4, 24);
390         OP(x3, x4, x1, x2, 26);                   390         OP(x3, x4, x1, x2, 26);
391         OP(x1, x2, x3, x4, 28);                   391         OP(x1, x2, x3, x4, 28);
392         OP(x3, x4, x1, x2, 30);                   392         OP(x3, x4, x1, x2, 30);
393                                                   393 
394         dst[0] = cpu_to_be32(x3);                 394         dst[0] = cpu_to_be32(x3);
395         dst[1] = cpu_to_be32(x4);                 395         dst[1] = cpu_to_be32(x4);
396         dst[2] = cpu_to_be32(x1);                 396         dst[2] = cpu_to_be32(x1);
397         dst[3] = cpu_to_be32(x2);                 397         dst[3] = cpu_to_be32(x2);
398 }                                                 398 }
399                                                   399 
400 /* decrypt a block of text */                     400 /* decrypt a block of text */
401                                                   401 
402 static void seed_decrypt(struct crypto_tfm *tf    402 static void seed_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
403 {                                                 403 {
404         const struct seed_ctx *ctx = crypto_tf    404         const struct seed_ctx *ctx = crypto_tfm_ctx(tfm);
405         const __be32 *src = (const __be32 *)in    405         const __be32 *src = (const __be32 *)in;
406         __be32 *dst = (__be32 *)out;              406         __be32 *dst = (__be32 *)out;
407         u32 x1, x2, x3, x4, t0, t1;               407         u32 x1, x2, x3, x4, t0, t1;
408         const u32 *ks = ctx->keysched;            408         const u32 *ks = ctx->keysched;
409                                                   409 
410         x1 = be32_to_cpu(src[0]);                 410         x1 = be32_to_cpu(src[0]);
411         x2 = be32_to_cpu(src[1]);                 411         x2 = be32_to_cpu(src[1]);
412         x3 = be32_to_cpu(src[2]);                 412         x3 = be32_to_cpu(src[2]);
413         x4 = be32_to_cpu(src[3]);                 413         x4 = be32_to_cpu(src[3]);
414                                                   414 
415         OP(x1, x2, x3, x4, 30);                   415         OP(x1, x2, x3, x4, 30);
416         OP(x3, x4, x1, x2, 28);                   416         OP(x3, x4, x1, x2, 28);
417         OP(x1, x2, x3, x4, 26);                   417         OP(x1, x2, x3, x4, 26);
418         OP(x3, x4, x1, x2, 24);                   418         OP(x3, x4, x1, x2, 24);
419         OP(x1, x2, x3, x4, 22);                   419         OP(x1, x2, x3, x4, 22);
420         OP(x3, x4, x1, x2, 20);                   420         OP(x3, x4, x1, x2, 20);
421         OP(x1, x2, x3, x4, 18);                   421         OP(x1, x2, x3, x4, 18);
422         OP(x3, x4, x1, x2, 16);                   422         OP(x3, x4, x1, x2, 16);
423         OP(x1, x2, x3, x4, 14);                   423         OP(x1, x2, x3, x4, 14);
424         OP(x3, x4, x1, x2, 12);                   424         OP(x3, x4, x1, x2, 12);
425         OP(x1, x2, x3, x4, 10);                   425         OP(x1, x2, x3, x4, 10);
426         OP(x3, x4, x1, x2, 8);                    426         OP(x3, x4, x1, x2, 8);
427         OP(x1, x2, x3, x4, 6);                    427         OP(x1, x2, x3, x4, 6);
428         OP(x3, x4, x1, x2, 4);                    428         OP(x3, x4, x1, x2, 4);
429         OP(x1, x2, x3, x4, 2);                    429         OP(x1, x2, x3, x4, 2);
430         OP(x3, x4, x1, x2, 0);                    430         OP(x3, x4, x1, x2, 0);
431                                                   431 
432         dst[0] = cpu_to_be32(x3);                 432         dst[0] = cpu_to_be32(x3);
433         dst[1] = cpu_to_be32(x4);                 433         dst[1] = cpu_to_be32(x4);
434         dst[2] = cpu_to_be32(x1);                 434         dst[2] = cpu_to_be32(x1);
435         dst[3] = cpu_to_be32(x2);                 435         dst[3] = cpu_to_be32(x2);
436 }                                                 436 }
437                                                   437 
438                                                   438 
439 static struct crypto_alg seed_alg = {             439 static struct crypto_alg seed_alg = {
440         .cra_name               =       "seed"    440         .cra_name               =       "seed",
441         .cra_driver_name        =       "seed-    441         .cra_driver_name        =       "seed-generic",
442         .cra_priority           =       100,      442         .cra_priority           =       100,
443         .cra_flags              =       CRYPTO    443         .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
444         .cra_blocksize          =       SEED_B    444         .cra_blocksize          =       SEED_BLOCK_SIZE,
445         .cra_ctxsize            =       sizeof    445         .cra_ctxsize            =       sizeof(struct seed_ctx),
446         .cra_alignmask          =       3,        446         .cra_alignmask          =       3,
447         .cra_module             =       THIS_M    447         .cra_module             =       THIS_MODULE,
448         .cra_u                  =       {         448         .cra_u                  =       {
449                 .cipher = {                       449                 .cipher = {
450                         .cia_min_keysize          450                         .cia_min_keysize        =       SEED_KEY_SIZE,
451                         .cia_max_keysize          451                         .cia_max_keysize        =       SEED_KEY_SIZE,
452                         .cia_setkey               452                         .cia_setkey             =       seed_set_key,
453                         .cia_encrypt              453                         .cia_encrypt            =       seed_encrypt,
454                         .cia_decrypt              454                         .cia_decrypt            =       seed_decrypt
455                 }                                 455                 }
456         }                                         456         }
457 };                                                457 };
458                                                   458 
459 static int __init seed_init(void)                 459 static int __init seed_init(void)
460 {                                                 460 {
461         return crypto_register_alg(&seed_alg);    461         return crypto_register_alg(&seed_alg);
462 }                                                 462 }
463                                                   463 
464 static void __exit seed_fini(void)                464 static void __exit seed_fini(void)
465 {                                                 465 {
466         crypto_unregister_alg(&seed_alg);         466         crypto_unregister_alg(&seed_alg);
467 }                                                 467 }
468                                                   468 
469 subsys_initcall(seed_init);                       469 subsys_initcall(seed_init);
470 module_exit(seed_fini);                           470 module_exit(seed_fini);
471                                                   471 
472 MODULE_DESCRIPTION("SEED Cipher Algorithm");      472 MODULE_DESCRIPTION("SEED Cipher Algorithm");
473 MODULE_LICENSE("GPL");                            473 MODULE_LICENSE("GPL");
474 MODULE_AUTHOR("Hye-Shik Chang <perky@FreeBSD.o    474 MODULE_AUTHOR("Hye-Shik Chang <perky@FreeBSD.org>, Kim Hyun <hkim@kisa.or.kr>");
475 MODULE_ALIAS_CRYPTO("seed");                      475 MODULE_ALIAS_CRYPTO("seed");
476                                                   476 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php