annotate dmd/md5.c @ 351:f273f5c58a9a trunk

[svn r372] Fixed extern(C++) handling now same as DMD, which is to treat it like extern(C). Fixed a problem in resolving struct types where the size of elements might not yet be known. Switched to using DMD size() instead of LLVM ABI size (TargetData).
author lindquist
date Mon, 14 Jul 2008 03:23:43 +0200
parents d03d748a9b5f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
337
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
1 /*
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
2 **********************************************************************
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
3 ** md5.c **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
4 ** RSA Data Security, Inc. MD5 Message Digest Algorithm **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
5 ** Created: 2/17/90 RLR **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
6 ** Revised: 1/91 SRD,AJ,BSK,JT Reference C Version **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
7 **********************************************************************
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
8 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
9
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
10 /*
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
11 **********************************************************************
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
12 ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
13 ** **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
14 ** License to copy and use this software is granted provided that **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
15 ** it is identified as the "RSA Data Security, Inc. MD5 Message **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
16 ** Digest Algorithm" in all material mentioning or referencing this **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
17 ** software or this function. **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
18 ** **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
19 ** License is also granted to make and use derivative works **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
20 ** provided that such works are identified as "derived from the RSA **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
21 ** Data Security, Inc. MD5 Message Digest Algorithm" in all **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
22 ** material mentioning or referencing the derived work. **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
23 ** **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
24 ** RSA Data Security, Inc. makes no representations concerning **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
25 ** either the merchantability of this software or the suitability **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
26 ** of this software for any particular purpose. It is provided "as **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
27 ** is" without express or implied warranty of any kind. **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
28 ** **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
29 ** These notices must be retained in any copies of any part of this **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
30 ** documentation and/or software. **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
31 **********************************************************************
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
32 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
33
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
34 /* -- include the following line if the md5.h header file is separate -- */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
35 #include "md5.h"
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
36
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
37 /* forward declaration */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
38 static void Transform (UINT4 *buf, UINT4 *in);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
39
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
40 static unsigned char PADDING[64] = {
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
41 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
42 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
45 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
46 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
47 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
49 };
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
50
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
51 /* F, G and H are basic MD5 functions: selection, majority, parity */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
52 #define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
53 #define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
54 #define H(x, y, z) ((x) ^ (y) ^ (z))
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
55 #define I(x, y, z) ((y) ^ ((x) | (~z)))
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
56
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
57 /* ROTATE_LEFT rotates x left n bits */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
58 #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
59
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
60 /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
61 /* Rotation is separate from addition to prevent recomputation */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
62 #define FF(a, b, c, d, x, s, ac) \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
63 {(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
64 (a) = ROTATE_LEFT ((a), (s)); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
65 (a) += (b); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
66 }
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
67 #define GG(a, b, c, d, x, s, ac) \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
68 {(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
69 (a) = ROTATE_LEFT ((a), (s)); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
70 (a) += (b); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
71 }
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
72 #define HH(a, b, c, d, x, s, ac) \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
73 {(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
74 (a) = ROTATE_LEFT ((a), (s)); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
75 (a) += (b); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
76 }
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
77 #define II(a, b, c, d, x, s, ac) \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
78 {(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
79 (a) = ROTATE_LEFT ((a), (s)); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
80 (a) += (b); \
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
81 }
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
82
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
83 void MD5Init (mdContext)
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
84 MD5_CTX *mdContext;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
85 {
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
86 mdContext->i[0] = mdContext->i[1] = (UINT4)0;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
87
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
88 /* Load magic initialization constants.
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
89 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
90 mdContext->buf[0] = (UINT4)0x67452301;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
91 mdContext->buf[1] = (UINT4)0xefcdab89;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
92 mdContext->buf[2] = (UINT4)0x98badcfe;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
93 mdContext->buf[3] = (UINT4)0x10325476;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
94 }
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
95
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
96 void MD5Update (mdContext, inBuf, inLen)
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
97 MD5_CTX *mdContext;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
98 unsigned char *inBuf;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
99 unsigned int inLen;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
100 {
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
101 UINT4 in[16];
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
102 int mdi;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
103 unsigned int i, ii;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
104
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
105 /* compute number of bytes mod 64 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
106 mdi = (int)((mdContext->i[0] >> 3) & 0x3F);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
107
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
108 /* update number of bits */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
109 if ((mdContext->i[0] + ((UINT4)inLen << 3)) < mdContext->i[0])
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
110 mdContext->i[1]++;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
111 mdContext->i[0] += ((UINT4)inLen << 3);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
112 mdContext->i[1] += ((UINT4)inLen >> 29);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
113
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
114 while (inLen--) {
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
115 /* add new character to buffer, increment mdi */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
116 mdContext->in[mdi++] = *inBuf++;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
117
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
118 /* transform if necessary */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
119 if (mdi == 0x40) {
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
120 for (i = 0, ii = 0; i < 16; i++, ii += 4)
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
121 in[i] = (((UINT4)mdContext->in[ii+3]) << 24) |
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
122 (((UINT4)mdContext->in[ii+2]) << 16) |
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
123 (((UINT4)mdContext->in[ii+1]) << 8) |
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
124 ((UINT4)mdContext->in[ii]);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
125 Transform (mdContext->buf, in);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
126 mdi = 0;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
127 }
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
128 }
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
129 }
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
130
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
131 void MD5Final (mdContext)
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
132 MD5_CTX *mdContext;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
133 {
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
134 UINT4 in[16];
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
135 int mdi;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
136 unsigned int i, ii;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
137 unsigned int padLen;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
138
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
139 /* save number of bits */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
140 in[14] = mdContext->i[0];
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
141 in[15] = mdContext->i[1];
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
142
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
143 /* compute number of bytes mod 64 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
144 mdi = (int)((mdContext->i[0] >> 3) & 0x3F);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
145
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
146 /* pad out to 56 mod 64 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
147 padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
148 MD5Update (mdContext, PADDING, padLen);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
149
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
150 /* append length in bits and transform */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
151 for (i = 0, ii = 0; i < 14; i++, ii += 4)
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
152 in[i] = (((UINT4)mdContext->in[ii+3]) << 24) |
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
153 (((UINT4)mdContext->in[ii+2]) << 16) |
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
154 (((UINT4)mdContext->in[ii+1]) << 8) |
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
155 ((UINT4)mdContext->in[ii]);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
156 Transform (mdContext->buf, in);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
157
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
158 /* store buffer in digest */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
159 for (i = 0, ii = 0; i < 4; i++, ii += 4) {
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
160 mdContext->digest[ii] = (unsigned char)(mdContext->buf[i] & 0xFF);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
161 mdContext->digest[ii+1] =
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
162 (unsigned char)((mdContext->buf[i] >> 8) & 0xFF);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
163 mdContext->digest[ii+2] =
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
164 (unsigned char)((mdContext->buf[i] >> 16) & 0xFF);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
165 mdContext->digest[ii+3] =
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
166 (unsigned char)((mdContext->buf[i] >> 24) & 0xFF);
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
167 }
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
168 }
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
169
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
170 /* Basic MD5 step. Transform buf based on in.
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
171 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
172 static void Transform (buf, in)
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
173 UINT4 *buf;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
174 UINT4 *in;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
175 {
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
176 UINT4 a = buf[0], b = buf[1], c = buf[2], d = buf[3];
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
177
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
178 /* Round 1 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
179 #define S11 7
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
180 #define S12 12
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
181 #define S13 17
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
182 #define S14 22
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
183 FF ( a, b, c, d, in[ 0], S11, 3614090360); /* 1 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
184 FF ( d, a, b, c, in[ 1], S12, 3905402710); /* 2 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
185 FF ( c, d, a, b, in[ 2], S13, 606105819); /* 3 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
186 FF ( b, c, d, a, in[ 3], S14, 3250441966); /* 4 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
187 FF ( a, b, c, d, in[ 4], S11, 4118548399); /* 5 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
188 FF ( d, a, b, c, in[ 5], S12, 1200080426); /* 6 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
189 FF ( c, d, a, b, in[ 6], S13, 2821735955); /* 7 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
190 FF ( b, c, d, a, in[ 7], S14, 4249261313); /* 8 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
191 FF ( a, b, c, d, in[ 8], S11, 1770035416); /* 9 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
192 FF ( d, a, b, c, in[ 9], S12, 2336552879); /* 10 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
193 FF ( c, d, a, b, in[10], S13, 4294925233); /* 11 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
194 FF ( b, c, d, a, in[11], S14, 2304563134); /* 12 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
195 FF ( a, b, c, d, in[12], S11, 1804603682); /* 13 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
196 FF ( d, a, b, c, in[13], S12, 4254626195); /* 14 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
197 FF ( c, d, a, b, in[14], S13, 2792965006); /* 15 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
198 FF ( b, c, d, a, in[15], S14, 1236535329); /* 16 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
199
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
200 /* Round 2 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
201 #define S21 5
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
202 #define S22 9
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
203 #define S23 14
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
204 #define S24 20
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
205 GG ( a, b, c, d, in[ 1], S21, 4129170786); /* 17 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
206 GG ( d, a, b, c, in[ 6], S22, 3225465664); /* 18 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
207 GG ( c, d, a, b, in[11], S23, 643717713); /* 19 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
208 GG ( b, c, d, a, in[ 0], S24, 3921069994); /* 20 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
209 GG ( a, b, c, d, in[ 5], S21, 3593408605); /* 21 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
210 GG ( d, a, b, c, in[10], S22, 38016083); /* 22 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
211 GG ( c, d, a, b, in[15], S23, 3634488961); /* 23 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
212 GG ( b, c, d, a, in[ 4], S24, 3889429448); /* 24 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
213 GG ( a, b, c, d, in[ 9], S21, 568446438); /* 25 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
214 GG ( d, a, b, c, in[14], S22, 3275163606); /* 26 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
215 GG ( c, d, a, b, in[ 3], S23, 4107603335); /* 27 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
216 GG ( b, c, d, a, in[ 8], S24, 1163531501); /* 28 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
217 GG ( a, b, c, d, in[13], S21, 2850285829); /* 29 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
218 GG ( d, a, b, c, in[ 2], S22, 4243563512); /* 30 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
219 GG ( c, d, a, b, in[ 7], S23, 1735328473); /* 31 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
220 GG ( b, c, d, a, in[12], S24, 2368359562); /* 32 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
221
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
222 /* Round 3 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
223 #define S31 4
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
224 #define S32 11
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
225 #define S33 16
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
226 #define S34 23
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
227 HH ( a, b, c, d, in[ 5], S31, 4294588738); /* 33 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
228 HH ( d, a, b, c, in[ 8], S32, 2272392833); /* 34 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
229 HH ( c, d, a, b, in[11], S33, 1839030562); /* 35 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
230 HH ( b, c, d, a, in[14], S34, 4259657740); /* 36 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
231 HH ( a, b, c, d, in[ 1], S31, 2763975236); /* 37 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
232 HH ( d, a, b, c, in[ 4], S32, 1272893353); /* 38 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
233 HH ( c, d, a, b, in[ 7], S33, 4139469664); /* 39 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
234 HH ( b, c, d, a, in[10], S34, 3200236656); /* 40 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
235 HH ( a, b, c, d, in[13], S31, 681279174); /* 41 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
236 HH ( d, a, b, c, in[ 0], S32, 3936430074); /* 42 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
237 HH ( c, d, a, b, in[ 3], S33, 3572445317); /* 43 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
238 HH ( b, c, d, a, in[ 6], S34, 76029189); /* 44 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
239 HH ( a, b, c, d, in[ 9], S31, 3654602809); /* 45 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
240 HH ( d, a, b, c, in[12], S32, 3873151461); /* 46 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
241 HH ( c, d, a, b, in[15], S33, 530742520); /* 47 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
242 HH ( b, c, d, a, in[ 2], S34, 3299628645); /* 48 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
243
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
244 /* Round 4 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
245 #define S41 6
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
246 #define S42 10
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
247 #define S43 15
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
248 #define S44 21
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
249 II ( a, b, c, d, in[ 0], S41, 4096336452); /* 49 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
250 II ( d, a, b, c, in[ 7], S42, 1126891415); /* 50 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
251 II ( c, d, a, b, in[14], S43, 2878612391); /* 51 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
252 II ( b, c, d, a, in[ 5], S44, 4237533241); /* 52 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
253 II ( a, b, c, d, in[12], S41, 1700485571); /* 53 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
254 II ( d, a, b, c, in[ 3], S42, 2399980690); /* 54 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
255 II ( c, d, a, b, in[10], S43, 4293915773); /* 55 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
256 II ( b, c, d, a, in[ 1], S44, 2240044497); /* 56 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
257 II ( a, b, c, d, in[ 8], S41, 1873313359); /* 57 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
258 II ( d, a, b, c, in[15], S42, 4264355552); /* 58 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
259 II ( c, d, a, b, in[ 6], S43, 2734768916); /* 59 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
260 II ( b, c, d, a, in[13], S44, 1309151649); /* 60 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
261 II ( a, b, c, d, in[ 4], S41, 4149444226); /* 61 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
262 II ( d, a, b, c, in[11], S42, 3174756917); /* 62 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
263 II ( c, d, a, b, in[ 2], S43, 718787259); /* 63 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
264 II ( b, c, d, a, in[ 9], S44, 3951481745); /* 64 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
265
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
266 buf[0] += a;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
267 buf[1] += b;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
268 buf[2] += c;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
269 buf[3] += d;
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
270 }
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
271
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
272 /*
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
273 **********************************************************************
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
274 ** End of md5.c **
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
275 ******************************* (cut) ********************************
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
276 */
d03d748a9b5f [svn r358] Forgot to add new files from DMD 1.033
lindquist
parents:
diff changeset
277