61 MD5_u32plus a, b, c,
d;
62 unsigned char buffer[64];
63 MD5_u32plus block[16];
74 #define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) 75 #define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y)))) 76 #define H(x, y, z) ((x) ^ (y) ^ (z)) 77 #define I(x, y, z) ((y) ^ ((x) | ~(z))) 82 #define STEP(f, a, b, c, d, x, t, s) \ 83 (a) += f((b), (c), (d)) + (x) + (t); \ 84 (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \ 95 #if defined(__i386__) || defined(__x86_64__) || defined(__vax__) 97 (*(MD5_u32plus *)&ptr[(n) * 4]) 103 (MD5_u32plus)ptr[(n) * 4] | \ 104 ((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \ 105 ((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \ 106 ((MD5_u32plus)ptr[(n) * 4 + 3] << 24)) 115 static const void *
body(
MD5_CTX *ctx,
const void *data,
unsigned long size)
117 const unsigned char *ptr;
118 MD5_u32plus a, b, c, d;
119 MD5_u32plus saved_a, saved_b, saved_c, saved_d;
121 ptr = (
const unsigned char *) data;
135 STEP(
F, a, b, c, d,
SET(0), 0xd76aa478, 7)
136 STEP(
F, d, a, b, c,
SET(1), 0xe8c7b756, 12)
137 STEP(
F, c, d, a, b,
SET(2), 0x242070db, 17)
138 STEP(
F, b, c, d, a,
SET(3), 0xc1bdceee, 22)
139 STEP(
F, a, b, c, d,
SET(4), 0xf57c0faf, 7)
140 STEP(
F, d, a, b, c,
SET(5), 0x4787c62a, 12)
141 STEP(
F, c, d, a, b,
SET(6), 0xa8304613, 17)
142 STEP(
F, b, c, d, a,
SET(7), 0xfd469501, 22)
143 STEP(
F, a, b, c, d,
SET(8), 0x698098d8, 7)
144 STEP(
F, d, a, b, c,
SET(9), 0x8b44f7af, 12)
145 STEP(
F, c, d, a, b,
SET(10), 0xffff5bb1, 17)
146 STEP(
F, b, c, d, a,
SET(11), 0x895cd7be, 22)
147 STEP(
F, a, b, c, d,
SET(12), 0x6b901122, 7)
148 STEP(
F, d, a, b, c,
SET(13), 0xfd987193, 12)
149 STEP(
F, c, d, a, b,
SET(14), 0xa679438e, 17)
150 STEP(
F, b, c, d, a,
SET(15), 0x49b40821, 22)
153 STEP(
G, a, b, c, d,
GET(1), 0xf61e2562, 5)
154 STEP(
G, d, a, b, c,
GET(6), 0xc040b340, 9)
155 STEP(
G, c, d, a, b,
GET(11), 0x265e5a51, 14)
156 STEP(
G, b, c, d, a,
GET(0), 0xe9b6c7aa, 20)
157 STEP(
G, a, b, c, d,
GET(5), 0xd62f105d, 5)
158 STEP(
G, d, a, b, c,
GET(10), 0x02441453, 9)
159 STEP(
G, c, d, a, b,
GET(15), 0xd8a1e681, 14)
160 STEP(
G, b, c, d, a,
GET(4), 0xe7d3fbc8, 20)
161 STEP(
G, a, b, c, d,
GET(9), 0x21e1cde6, 5)
162 STEP(
G, d, a, b, c,
GET(14), 0xc33707d6, 9)
163 STEP(
G, c, d, a, b,
GET(3), 0xf4d50d87, 14)
164 STEP(
G, b, c, d, a,
GET(8), 0x455a14ed, 20)
165 STEP(
G, a, b, c, d,
GET(13), 0xa9e3e905, 5)
166 STEP(
G, d, a, b, c,
GET(2), 0xfcefa3f8, 9)
167 STEP(
G, c, d, a, b,
GET(7), 0x676f02d9, 14)
168 STEP(
G, b, c, d, a,
GET(12), 0x8d2a4c8a, 20)
171 STEP(
H, a, b, c, d,
GET(5), 0xfffa3942, 4)
172 STEP(
H, d, a, b, c,
GET(8), 0x8771f681, 11)
173 STEP(
H, c, d, a, b,
GET(11), 0x6d9d6122, 16)
174 STEP(
H, b, c, d, a,
GET(14), 0xfde5380c, 23)
175 STEP(
H, a, b, c, d,
GET(1), 0xa4beea44, 4)
176 STEP(
H, d, a, b, c,
GET(4), 0x4bdecfa9, 11)
177 STEP(
H, c, d, a, b,
GET(7), 0xf6bb4b60, 16)
178 STEP(
H, b, c, d, a,
GET(10), 0xbebfbc70, 23)
179 STEP(
H, a, b, c, d,
GET(13), 0x289b7ec6, 4)
180 STEP(
H, d, a, b, c,
GET(0), 0xeaa127fa, 11)
181 STEP(
H, c, d, a, b,
GET(3), 0xd4ef3085, 16)
182 STEP(
H, b, c, d, a,
GET(6), 0x04881d05, 23)
183 STEP(
H, a, b, c, d,
GET(9), 0xd9d4d039, 4)
184 STEP(
H, d, a, b, c,
GET(12), 0xe6db99e5, 11)
185 STEP(
H, c, d, a, b,
GET(15), 0x1fa27cf8, 16)
186 STEP(
H, b, c, d, a,
GET(2), 0xc4ac5665, 23)
189 STEP(
I, a, b, c, d,
GET(0), 0xf4292244, 6)
190 STEP(
I, d, a, b, c,
GET(7), 0x432aff97, 10)
191 STEP(
I, c, d, a, b,
GET(14), 0xab9423a7, 15)
192 STEP(
I, b, c, d, a,
GET(5), 0xfc93a039, 21)
193 STEP(
I, a, b, c, d,
GET(12), 0x655b59c3, 6)
194 STEP(
I, d, a, b, c,
GET(3), 0x8f0ccc92, 10)
195 STEP(
I, c, d, a, b,
GET(10), 0xffeff47d, 15)
196 STEP(
I, b, c, d, a,
GET(1), 0x85845dd1, 21)
197 STEP(
I, a, b, c, d,
GET(8), 0x6fa87e4f, 6)
198 STEP(
I, d, a, b, c,
GET(15), 0xfe2ce6e0, 10)
199 STEP(
I, c, d, a, b,
GET(6), 0xa3014314, 15)
200 STEP(
I, b, c, d, a,
GET(13), 0x4e0811a1, 21)
201 STEP(
I, a, b, c, d,
GET(4), 0xf7537e82, 6)
202 STEP(
I, d, a, b, c,
GET(11), 0xbd3af235, 10)
203 STEP(
I, c, d, a, b,
GET(2), 0x2ad7d2bb, 15)
204 STEP(
I, b, c, d, a,
GET(9), 0xeb86d391, 21)
212 }
while (size -= 64);
235 MD5_u32plus saved_lo;
239 if ((ctx->
lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
241 ctx->
hi += size >> 29;
243 used = saved_lo & 0x3f;
246 unsigned long free = 64 - used;
254 data = (
unsigned char *)data + free;
260 data =
body(ctx, data, size & ~(
unsigned long)0x3f);
269 unsigned long used,
free;
271 used = ctx->
lo & 0x3f;
273 ctx->
buffer[used++] = 0x80;
299 result[1] = ctx->
a >> 8;
300 result[2] = ctx->
a >> 16;
301 result[3] = ctx->
a >> 24;
303 result[5] = ctx->
b >> 8;
304 result[6] = ctx->
b >> 16;
305 result[7] = ctx->
b >> 24;
307 result[9] = ctx->
c >> 8;
308 result[10] = ctx->
c >> 16;
309 result[11] = ctx->
c >> 24;
311 result[13] = ctx->
d >> 8;
312 result[14] = ctx->
d >> 16;
313 result[15] = ctx->
d >> 24;
315 memset(ctx, 0,
sizeof(*ctx));
327 MD5_Update(&ctx, input, static_cast<unsigned long>(size));
void MD5_Final(unsigned char *result, MD5_CTX *ctx)
void MD5Hash(MD5Result &result, const void *input, size_t size)
void * memcpy(void *t, const void *s, size_t len)
static const void * body(MD5_CTX *ctx, const void *data, unsigned long size)
unsigned char MD5Result[16]
#define STEP(f, a, b, c, d, x, t, s)
void MD5_Init(MD5_CTX *ctx)
void * memset(void *s, int c, size_t len)
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size)
The Internal API and Implementation of OpenDDS.