Mercurial > dropbear
comparison md5.c @ 15:6362d3854bb4 libtomcrypt-orig
0.96 release of LibTomCrypt
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Tue, 15 Jun 2004 14:07:21 +0000 |
parents | 7faae8f46238 |
children | 5d99163f7e32 |
comparison
equal
deleted
inserted
replaced
3:7faae8f46238 | 15:6362d3854bb4 |
---|---|
19 { | 19 { |
20 "md5", | 20 "md5", |
21 3, | 21 3, |
22 16, | 22 16, |
23 64, | 23 64, |
24 | |
25 /* DER identifier */ | |
26 { 0x30, 0x20, 0x30, 0x0C, 0x06, 0x08, 0x2A, 0x86, | |
27 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05, 0x05, 0x00, | |
28 0x04, 0x10 }, | |
29 18, | |
30 | |
24 &md5_init, | 31 &md5_init, |
25 &md5_process, | 32 &md5_process, |
26 &md5_done, | 33 &md5_done, |
27 &md5_test | 34 &md5_test |
28 }; | 35 }; |
42 a = (a + H(b,c,d) + M + t); a = ROL(a, s) + b; | 49 a = (a + H(b,c,d) + M + t); a = ROL(a, s) + b; |
43 | 50 |
44 #define II(a,b,c,d,M,s,t) \ | 51 #define II(a,b,c,d,M,s,t) \ |
45 a = (a + I(b,c,d) + M + t); a = ROL(a, s) + b; | 52 a = (a + I(b,c,d) + M + t); a = ROL(a, s) + b; |
46 | 53 |
54 #ifdef SMALL_CODE | |
55 | |
56 static const unsigned char Worder[64] = { | |
57 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, | |
58 1,6,11,0,5,10,15,4,9,14,3,8,13,2,7,12, | |
59 5,8,11,14,1,4,7,10,13,0,3,6,9,12,15,2, | |
60 0,7,14,5,12,3,10,1,8,15,6,13,4,11,2,9 | |
61 }; | |
62 | |
63 static const unsigned char Rorder[64] = { | |
64 7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22, | |
65 5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20, | |
66 4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23, | |
67 6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21 | |
68 }; | |
69 | |
70 static const ulong32 Korder[64] = { | |
71 0xd76aa478UL, 0xe8c7b756UL, 0x242070dbUL, 0xc1bdceeeUL, 0xf57c0fafUL, 0x4787c62aUL, 0xa8304613UL, 0xfd469501UL, | |
72 0x698098d8UL, 0x8b44f7afUL, 0xffff5bb1UL, 0x895cd7beUL, 0x6b901122UL, 0xfd987193UL, 0xa679438eUL, 0x49b40821UL, | |
73 0xf61e2562UL, 0xc040b340UL, 0x265e5a51UL, 0xe9b6c7aaUL, 0xd62f105dUL, 0x02441453UL, 0xd8a1e681UL, 0xe7d3fbc8UL, | |
74 0x21e1cde6UL, 0xc33707d6UL, 0xf4d50d87UL, 0x455a14edUL, 0xa9e3e905UL, 0xfcefa3f8UL, 0x676f02d9UL, 0x8d2a4c8aUL, | |
75 0xfffa3942UL, 0x8771f681UL, 0x6d9d6122UL, 0xfde5380cUL, 0xa4beea44UL, 0x4bdecfa9UL, 0xf6bb4b60UL, 0xbebfbc70UL, | |
76 0x289b7ec6UL, 0xeaa127faUL, 0xd4ef3085UL, 0x04881d05UL, 0xd9d4d039UL, 0xe6db99e5UL, 0x1fa27cf8UL, 0xc4ac5665UL, | |
77 0xf4292244UL, 0x432aff97UL, 0xab9423a7UL, 0xfc93a039UL, 0x655b59c3UL, 0x8f0ccc92UL, 0xffeff47dUL, 0x85845dd1UL, | |
78 0x6fa87e4fUL, 0xfe2ce6e0UL, 0xa3014314UL, 0x4e0811a1UL, 0xf7537e82UL, 0xbd3af235UL, 0x2ad7d2bbUL, 0xeb86d391UL | |
79 }; | |
80 | |
81 #endif | |
82 | |
47 #ifdef CLEAN_STACK | 83 #ifdef CLEAN_STACK |
48 static void _md5_compress(hash_state *md, unsigned char *buf) | 84 static void _md5_compress(hash_state *md, unsigned char *buf) |
49 #else | 85 #else |
50 static void md5_compress(hash_state *md, unsigned char *buf) | 86 static void md5_compress(hash_state *md, unsigned char *buf) |
51 #endif | 87 #endif |
52 { | 88 { |
53 ulong32 i, W[16], a, b, c, d; | 89 ulong32 i, W[16], a, b, c, d; |
90 #ifdef SMALL_CODE | |
91 ulong32 t; | |
92 #endif | |
54 | 93 |
55 /* copy the state into 512-bits into W[0..15] */ | 94 /* copy the state into 512-bits into W[0..15] */ |
56 for (i = 0; i < 16; i++) { | 95 for (i = 0; i < 16; i++) { |
57 LOAD32L(W[i], buf + (4*i)); | 96 LOAD32L(W[i], buf + (4*i)); |
58 } | 97 } |
61 a = md->md5.state[0]; | 100 a = md->md5.state[0]; |
62 b = md->md5.state[1]; | 101 b = md->md5.state[1]; |
63 c = md->md5.state[2]; | 102 c = md->md5.state[2]; |
64 d = md->md5.state[3]; | 103 d = md->md5.state[3]; |
65 | 104 |
105 #ifdef SMALL_CODE | |
106 for (i = 0; i < 16; ++i) { | |
107 FF(a,b,c,d,W[Worder[i]],Rorder[i],Korder[i]); | |
108 t = d; d = c; c = b; b = a; a = t; | |
109 } | |
110 | |
111 for (; i < 32; ++i) { | |
112 GG(a,b,c,d,W[Worder[i]],Rorder[i],Korder[i]); | |
113 t = d; d = c; c = b; b = a; a = t; | |
114 } | |
115 | |
116 for (; i < 48; ++i) { | |
117 HH(a,b,c,d,W[Worder[i]],Rorder[i],Korder[i]); | |
118 t = d; d = c; c = b; b = a; a = t; | |
119 } | |
120 | |
121 for (; i < 64; ++i) { | |
122 II(a,b,c,d,W[Worder[i]],Rorder[i],Korder[i]); | |
123 t = d; d = c; c = b; b = a; a = t; | |
124 } | |
125 | |
126 #else | |
66 FF(a,b,c,d,W[0],7,0xd76aa478UL) | 127 FF(a,b,c,d,W[0],7,0xd76aa478UL) |
67 FF(d,a,b,c,W[1],12,0xe8c7b756UL) | 128 FF(d,a,b,c,W[1],12,0xe8c7b756UL) |
68 FF(c,d,a,b,W[2],17,0x242070dbUL) | 129 FF(c,d,a,b,W[2],17,0x242070dbUL) |
69 FF(b,c,d,a,W[3],22,0xc1bdceeeUL) | 130 FF(b,c,d,a,W[3],22,0xc1bdceeeUL) |
70 FF(a,b,c,d,W[4],7,0xf57c0fafUL) | 131 FF(a,b,c,d,W[4],7,0xf57c0fafUL) |
125 II(b,c,d,a,W[13],21,0x4e0811a1UL) | 186 II(b,c,d,a,W[13],21,0x4e0811a1UL) |
126 II(a,b,c,d,W[4],6,0xf7537e82UL) | 187 II(a,b,c,d,W[4],6,0xf7537e82UL) |
127 II(d,a,b,c,W[11],10,0xbd3af235UL) | 188 II(d,a,b,c,W[11],10,0xbd3af235UL) |
128 II(c,d,a,b,W[2],15,0x2ad7d2bbUL) | 189 II(c,d,a,b,W[2],15,0x2ad7d2bbUL) |
129 II(b,c,d,a,W[9],21,0xeb86d391UL) | 190 II(b,c,d,a,W[9],21,0xeb86d391UL) |
191 #endif | |
130 | 192 |
131 md->md5.state[0] = md->md5.state[0] + a; | 193 md->md5.state[0] = md->md5.state[0] + a; |
132 md->md5.state[1] = md->md5.state[1] + b; | 194 md->md5.state[1] = md->md5.state[1] + b; |
133 md->md5.state[2] = md->md5.state[2] + c; | 195 md->md5.state[2] = md->md5.state[2] + c; |
134 md->md5.state[3] = md->md5.state[3] + d; | 196 md->md5.state[3] = md->md5.state[3] + d; |