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;