seed.c

来自「OpenSSL 0.9.8k 最新版OpenSSL」· C语言 代码 · 共 287 行 · 第 1/2 页

C
287
字号
	0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a, 0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032,	0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000, 0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b,	0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f, 0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434,	0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829, 0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838,	0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405, 0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839,	0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031, 0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031,	0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002, 0x02222022, 0x04000404, 0x48606828, 0x41717031,	0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819, 0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819,	0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c, 0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010,	0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a, 0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f,	0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022, 0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d,	0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a, 0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e,	0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012, 0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c,	0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435, 0x4f737c3f, 0x05313435, 0x00101010, 0x03030003,	0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434, 0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809,	0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000, 0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405,	0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a, 0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003,	0x85818405, 0x04101414, 0x89818809, 0x8b93981b, 0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839,	0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002, 0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f,	0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d, 0x05212425, 0x4f434c0f, 0x00000000, 0x46424406,	0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b, 0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d,	0x00303030, 0x85919415, 0x45616425, 0x0c303c3c, 0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c,	0x0e020c0e, 0x40505010, 0x09313839, 0x06222426, 0x02323032, 0x84808404, 0x49616829, 0x83939013,	0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424, 0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407,	0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f, 0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437}	};/* key schedule constants - golden ratio */#define KC0     0x9e3779b9#define KC1     0x3c6ef373#define KC2     0x78dde6e6#define KC3     0xf1bbcdcc#define KC4     0xe3779b99#define KC5     0xc6ef3733#define KC6     0x8dde6e67#define KC7     0x1bbcdccf#define KC8     0x3779b99e#define KC9     0x6ef3733c#define KC10    0xdde6e678#define KC11    0xbbcdccf1#define KC12    0x779b99e3#define KC13    0xef3733c6#define KC14    0xde6e678d#define KC15    0xbcdccf1bvoid SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], SEED_KEY_SCHEDULE *ks){	seed_word x1, x2, x3, x4;	seed_word t0, t1;	char2word(rawkey   , x1);	char2word(rawkey+4 , x2);	char2word(rawkey+8 , x3);	char2word(rawkey+12, x4);	t0 = (x1 + x3 - KC0) & 0xffffffff;	t1 = (x2 - x4 + KC0) & 0xffffffff;                     KEYUPDATE_TEMP(t0, t1, &ks->data[0]);	KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC1);      KEYUPDATE_TEMP(t0, t1, &ks->data[2]);	KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC2);      KEYUPDATE_TEMP(t0, t1, &ks->data[4]);	KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC3);      KEYUPDATE_TEMP(t0, t1, &ks->data[6]);	KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC4);      KEYUPDATE_TEMP(t0, t1, &ks->data[8]);	KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC5);      KEYUPDATE_TEMP(t0, t1, &ks->data[10]);	KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC6);      KEYUPDATE_TEMP(t0, t1, &ks->data[12]);	KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC7);      KEYUPDATE_TEMP(t0, t1, &ks->data[14]);	KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC8);      KEYUPDATE_TEMP(t0, t1, &ks->data[16]);	KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC9);      KEYUPDATE_TEMP(t0, t1, &ks->data[18]);	KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC10);     KEYUPDATE_TEMP(t0, t1, &ks->data[20]);	KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC11);     KEYUPDATE_TEMP(t0, t1, &ks->data[22]);	KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC12);     KEYUPDATE_TEMP(t0, t1, &ks->data[24]);	KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC13);     KEYUPDATE_TEMP(t0, t1, &ks->data[26]);	KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC14);     KEYUPDATE_TEMP(t0, t1, &ks->data[28]);	KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC15);     KEYUPDATE_TEMP(t0, t1, &ks->data[30]);}void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks){	seed_word x1, x2, x3, x4;	seed_word t0, t1;	char2word(s,    x1);	char2word(s+4,  x2);	char2word(s+8,  x3);	char2word(s+12, x4);		E_SEED(t0, t1, x1, x2, x3, x4, 0);	E_SEED(t0, t1, x3, x4, x1, x2, 2);	E_SEED(t0, t1, x1, x2, x3, x4, 4);	E_SEED(t0, t1, x3, x4, x1, x2, 6);	E_SEED(t0, t1, x1, x2, x3, x4, 8);	E_SEED(t0, t1, x3, x4, x1, x2, 10);	E_SEED(t0, t1, x1, x2, x3, x4, 12);	E_SEED(t0, t1, x3, x4, x1, x2, 14);	E_SEED(t0, t1, x1, x2, x3, x4, 16);	E_SEED(t0, t1, x3, x4, x1, x2, 18);	E_SEED(t0, t1, x1, x2, x3, x4, 20);	E_SEED(t0, t1, x3, x4, x1, x2, 22);	E_SEED(t0, t1, x1, x2, x3, x4, 24);	E_SEED(t0, t1, x3, x4, x1, x2, 26);	E_SEED(t0, t1, x1, x2, x3, x4, 28);	E_SEED(t0, t1, x3, x4, x1, x2, 30);	word2char(x3, d);	word2char(x4, d+4);	word2char(x1, d+8);	word2char(x2, d+12);}void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], unsigned char d[SEED_BLOCK_SIZE], const SEED_KEY_SCHEDULE *ks){	seed_word x1, x2, x3, x4;	seed_word t0, t1;	char2word(s,    x1);	char2word(s+4,  x2);	char2word(s+8,  x3);	char2word(s+12, x4);		E_SEED(t0, t1, x1, x2, x3, x4, 30);	E_SEED(t0, t1, x3, x4, x1, x2, 28);	E_SEED(t0, t1, x1, x2, x3, x4, 26);	E_SEED(t0, t1, x3, x4, x1, x2, 24);	E_SEED(t0, t1, x1, x2, x3, x4, 22);	E_SEED(t0, t1, x3, x4, x1, x2, 20);	E_SEED(t0, t1, x1, x2, x3, x4, 18);	E_SEED(t0, t1, x3, x4, x1, x2, 16);	E_SEED(t0, t1, x1, x2, x3, x4, 14);	E_SEED(t0, t1, x3, x4, x1, x2, 12);	E_SEED(t0, t1, x1, x2, x3, x4, 10);	E_SEED(t0, t1, x3, x4, x1, x2, 8);	E_SEED(t0, t1, x1, x2, x3, x4, 6);	E_SEED(t0, t1, x3, x4, x1, x2, 4);	E_SEED(t0, t1, x1, x2, x3, x4, 2);	E_SEED(t0, t1, x3, x4, x1, x2, 0);	word2char(x3, d);	word2char(x4, d+4);	word2char(x1, d+8);	word2char(x2, d+12);}#endif /* OPENSSL_NO_SEED */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?