ReactOS 0.4.15-dev-8138-g1e75ea8
md5.c File Reference
#include <string.h>
#include "md5.h"
Include dependency graph for md5.c:

Go to the source code of this file.

Macros

#define F(x, y, z)   ((z) ^ ((x) & ((y) ^ (z))))
 
#define G(x, y, z)   ((y) ^ ((z) & ((x) ^ (y))))
 
#define H(x, y, z)   (((x) ^ (y)) ^ (z))
 
#define H2(x, y, z)   ((x) ^ ((y) ^ (z)))
 
#define I(x, y, z)   ((y) ^ ((x) | ~(z)))
 
#define STEP(f, a, b, c, d, x, t, s)
 
#define SET(n)
 
#define GET(n)    (ctx->block[(n)])
 
#define OUT(dst, src)
 

Functions

static const voidbody (MD5_CTX *ctx, const void *data, unsigned long size)
 
void MD5_Init (MD5_CTX *ctx)
 
void MD5_Update (MD5_CTX *ctx, const void *data, unsigned long size)
 
void MD5_Final (unsigned char *result, MD5_CTX *ctx)
 

Macro Definition Documentation

◆ F

#define F (   x,
  y,
  z 
)    ((z) ^ ((x) & ((y) ^ (z))))

Definition at line 51 of file md5.c.

◆ G

#define G (   x,
  y,
  z 
)    ((y) ^ ((z) & ((x) ^ (y))))

Definition at line 52 of file md5.c.

◆ GET

#define GET (   n)     (ctx->block[(n)])

Definition at line 92 of file md5.c.

◆ H

#define H (   x,
  y,
  z 
)    (((x) ^ (y)) ^ (z))

Definition at line 53 of file md5.c.

◆ H2

#define H2 (   x,
  y,
  z 
)    ((x) ^ ((y) ^ (z)))

Definition at line 54 of file md5.c.

◆ I

#define I (   x,
  y,
  z 
)    ((y) ^ ((x) | ~(z)))

Definition at line 55 of file md5.c.

◆ OUT

#define OUT (   dst,
  src 
)
Value:
(dst)[0] = (unsigned char)(src); \
(dst)[1] = (unsigned char)((src) >> 8); \
(dst)[2] = (unsigned char)((src) >> 16); \
(dst)[3] = (unsigned char)((src) >> 24);
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340

Definition at line 252 of file md5.c.

◆ SET

#define SET (   n)
Value:
(ctx->block[(n)] = \
(MD5_u32plus)ptr[(n) * 4] | \
((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \
((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \
((MD5_u32plus)ptr[(n) * 4 + 3] << 24))
GLdouble n
Definition: glext.h:7729
static PVOID ptr
Definition: dispmode.c:27
unsigned int MD5_u32plus
Definition: md5.h:32

Definition at line 86 of file md5.c.

◆ STEP

#define STEP (   f,
  a,
  b,
  c,
  d,
  x,
  t,
  s 
)
Value:
(a) += f((b), (c), (d)) + (x) + (t); \
(a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \
(a) += (b);
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLdouble s
Definition: gl.h:2039
GLdouble GLdouble t
Definition: gl.h:2047
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean GLboolean GLboolean a
Definition: glext.h:6204
#define d
Definition: ke_i.h:81
#define f
Definition: ke_i.h:83
#define a
Definition: ke_i.h:78
#define c
Definition: ke_i.h:80

Definition at line 60 of file md5.c.

Function Documentation

◆ body()

static const void * body ( MD5_CTX ctx,
const void data,
unsigned long  size 
)
static

Definition at line 100 of file md5.c.

101{
102 const unsigned char *ptr;
103 MD5_u32plus a, b, c, d;
104 MD5_u32plus saved_a, saved_b, saved_c, saved_d;
105
106 ptr = (const unsigned char *)data;
107
108 a = ctx->a;
109 b = ctx->b;
110 c = ctx->c;
111 d = ctx->d;
112
113 do {
114 saved_a = a;
115 saved_b = b;
116 saved_c = c;
117 saved_d = d;
118
119/* Round 1 */
120 STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7)
121 STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12)
122 STEP(F, c, d, a, b, SET(2), 0x242070db, 17)
123 STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22)
124 STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7)
125 STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12)
126 STEP(F, c, d, a, b, SET(6), 0xa8304613, 17)
127 STEP(F, b, c, d, a, SET(7), 0xfd469501, 22)
128 STEP(F, a, b, c, d, SET(8), 0x698098d8, 7)
129 STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12)
130 STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17)
131 STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22)
132 STEP(F, a, b, c, d, SET(12), 0x6b901122, 7)
133 STEP(F, d, a, b, c, SET(13), 0xfd987193, 12)
134 STEP(F, c, d, a, b, SET(14), 0xa679438e, 17)
135 STEP(F, b, c, d, a, SET(15), 0x49b40821, 22)
136
137/* Round 2 */
138 STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5)
139 STEP(G, d, a, b, c, GET(6), 0xc040b340, 9)
140 STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14)
141 STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20)
142 STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5)
143 STEP(G, d, a, b, c, GET(10), 0x02441453, 9)
144 STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14)
145 STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20)
146 STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5)
147 STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9)
148 STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14)
149 STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20)
150 STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5)
151 STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9)
152 STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14)
153 STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20)
154
155/* Round 3 */
156 STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4)
157 STEP(H2, d, a, b, c, GET(8), 0x8771f681, 11)
158 STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16)
159 STEP(H2, b, c, d, a, GET(14), 0xfde5380c, 23)
160 STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4)
161 STEP(H2, d, a, b, c, GET(4), 0x4bdecfa9, 11)
162 STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16)
163 STEP(H2, b, c, d, a, GET(10), 0xbebfbc70, 23)
164 STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4)
165 STEP(H2, d, a, b, c, GET(0), 0xeaa127fa, 11)
166 STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16)
167 STEP(H2, b, c, d, a, GET(6), 0x04881d05, 23)
168 STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4)
169 STEP(H2, d, a, b, c, GET(12), 0xe6db99e5, 11)
170 STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16)
171 STEP(H2, b, c, d, a, GET(2), 0xc4ac5665, 23)
172
173/* Round 4 */
174 STEP(I, a, b, c, d, GET(0), 0xf4292244, 6)
175 STEP(I, d, a, b, c, GET(7), 0x432aff97, 10)
176 STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15)
177 STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21)
178 STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6)
179 STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10)
180 STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15)
181 STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21)
182 STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6)
183 STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10)
184 STEP(I, c, d, a, b, GET(6), 0xa3014314, 15)
185 STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21)
186 STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6)
187 STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10)
188 STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15)
189 STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21)
190
191 a += saved_a;
192 b += saved_b;
193 c += saved_c;
194 d += saved_d;
195
196 ptr += 64;
197 } while (size -= 64);
198
199 ctx->a = a;
200 ctx->b = b;
201 ctx->c = c;
202 ctx->d = d;
203
204 return ptr;
205}
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
return
Definition: dirsup.c:529
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizeiptr size
Definition: glext.h:5919
const GLubyte * c
Definition: glext.h:8905
#define b
Definition: ke_i.h:79
#define GET(n)
Definition: md5.c:92
#define STEP(f, a, b, c, d, x, t, s)
Definition: md5.c:60
#define SET(n)
Definition: md5.c:86
#define F(x, y, z)
Definition: md5.c:51
#define I(x, y, z)
Definition: md5.c:55
#define G(x, y, z)
Definition: md5.c:52
#define H(x, y, z)
Definition: md5.c:53
#define H2(x, y, z)
Definition: md5.c:54

Referenced by _doc_get_body(), _SEH2Finally(), _set_body_scroll(), _test_body_scroll(), count_children(), create_sub_body(), empty_body_list(), find_body(), find_next(), find_prop(), get_body(), get_object_text(), init_content_encoding(), init_content_type(), load_doc(), MD5_Final(), MD5_Update(), MimeBody_set_offsets(), MimeMessage_BindToObject(), MimeMessage_CountBodies(), MimeMessage_FindNext(), MimeMessage_GetBody(), new_body_entry(), on_mime_message_available(), parse_headers(), read_prop(), run_test(), test_BindToObject(), test_body_funs(), test_BodyDeleteProp(), test_create_body_range(), test_create_elems(), test_CreateBody(), test_CreateMessage(), test_default_body(), test_defaults(), test_docfrag(), test_elem_names(), test_iframe_elem(), test_IWinHttpRequest(), test_MessageGetPropInfo(), test_MessageSetProp(), test_noscript(), test_onclick(), test_replacechild_elems(), test_server_xhr(), test_SetData(), test_submit(), test_txtrange(), UrlCanonicalizeW(), UnorderedTest::user_case(), UserDeleteObject(), winhttp_request_get_ResponseBody(), winhttp_request_get_ResponseStream(), winhttp_request_get_ResponseText(), winhttp_request_Send(), write_locals(), and write_trees().

◆ MD5_Final()

void MD5_Final ( unsigned char result,
MD5_CTX ctx 
)

Definition at line 258 of file md5.c.

259{
260 unsigned long used, available;
261
262 used = ctx->lo & 0x3f;
263
264 ctx->buffer[used++] = 0x80;
265
266 available = 64 - used;
267
268 if (available < 8) {
269 memset(&ctx->buffer[used], 0, available);
270 body(ctx, ctx->buffer, 64);
271 used = 0;
272 available = 64;
273 }
274
275 memset(&ctx->buffer[used], 0, available - 8);
276
277 ctx->lo <<= 3;
278 OUT(&ctx->buffer[56], ctx->lo)
279 OUT(&ctx->buffer[60], ctx->hi)
280
281 body(ctx, ctx->buffer, 64);
282
283 OUT(&result[0], ctx->a)
284 OUT(&result[4], ctx->b)
285 OUT(&result[8], ctx->c)
286 OUT(&result[12], ctx->d)
287
288 memset(ctx, 0, sizeof(*ctx));
289}
static int used
Definition: adh-main.c:39
static WCHAR available[MAX_STRING_RESOURCE_LEN]
Definition: object.c:2336
GLuint buffer
Definition: glext.h:5915
GLuint64EXT * result
Definition: glext.h:11304
static const void * body(MD5_CTX *ctx, const void *data, unsigned long size)
Definition: md5.c:100
#define OUT(dst, src)
Definition: md5.c:252
#define memset(x, y, z)
Definition: compat.h:39
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList

Referenced by FT_Render_Glyph_Internal(), generate_random(), sec_hash_16(), sec_hash_48(), sec_sign(), and sec_update().

◆ MD5_Init()

void MD5_Init ( MD5_CTX ctx)

Definition at line 207 of file md5.c.

208{
209 ctx->a = 0x67452301;
210 ctx->b = 0xefcdab89;
211 ctx->c = 0x98badcfe;
212 ctx->d = 0x10325476;
213
214 ctx->lo = 0;
215 ctx->hi = 0;
216}

Referenced by FT_Render_Glyph_Internal(), generate_random(), sec_hash_16(), sec_hash_48(), sec_sign(), and sec_update().

◆ MD5_Update()

void MD5_Update ( MD5_CTX ctx,
const void data,
unsigned long  size 
)

Definition at line 218 of file md5.c.

219{
220 MD5_u32plus saved_lo;
221 unsigned long used, available;
222
223 saved_lo = ctx->lo;
224 if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
225 ctx->hi++;
226 ctx->hi += size >> 29;
227
228 used = saved_lo & 0x3f;
229
230 if (used) {
231 available = 64 - used;
232
233 if (size < available) {
234 memcpy(&ctx->buffer[used], data, size);
235 return;
236 }
237
238 memcpy(&ctx->buffer[used], data, available);
239 data = (const unsigned char *)data + available;
240 size -= available;
241 body(ctx, ctx->buffer, 64);
242 }
243
244 if (size >= 64) {
245 data = body(ctx, data, size & ~(unsigned long)0x3f);
246 size &= 0x3f;
247 }
248
249 memcpy(ctx->buffer, data, size);
250}
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878

Referenced by FT_Render_Glyph_Internal(), generate_random(), sec_hash_16(), sec_hash_48(), sec_sign(), and sec_update().