34
34
that follows (in reverse chronological order):
35
35
36
36
2000-07-03 lpd Patched to eliminate warnings about "constant is
37
- unsigned in ANSI C, signed in traditional";
38
- made test program self-checking.
37
+ unsigned in ANSI C, signed in traditional";
38
+ made test program self-checking.
39
39
1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
40
40
1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
41
41
1999-05-03 lpd Original version.
64
64
main (void )
65
65
{
66
66
static const char * const test [7 * 2 ] = {
67
- "" , "d41d8cd98f00b204e9800998ecf8427e" ,
68
- "a" , "0cc175b9c0f1b6a831c399e269772661" ,
69
- "abc" , "900150983cd24fb0d6963f7d28e17f72" ,
70
- "message digest" , "f96b697d7cb7938d525a2f31aaf161d0" ,
71
- "abcdefghijklmnopqrstuvwxyz" , "c3fcd3d76192e4007dfb496cca67e13b" ,
72
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" ,
73
- "d174ab98d277d9f5a5611c2c9f419d9f" ,
74
- "12345678901234567890123456789012345678901234567890123456789012345678901234567890" , "57edf4a22be3c955ac49da2e2107b67a"
67
+ "" , "d41d8cd98f00b204e9800998ecf8427e" ,
68
+ "a" , "0cc175b9c0f1b6a831c399e269772661" ,
69
+ "abc" , "900150983cd24fb0d6963f7d28e17f72" ,
70
+ "message digest" , "f96b697d7cb7938d525a2f31aaf161d0" ,
71
+ "abcdefghijklmnopqrstuvwxyz" , "c3fcd3d76192e4007dfb496cca67e13b" ,
72
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" ,
73
+ "d174ab98d277d9f5a5611c2c9f419d9f" ,
74
+ "12345678901234567890123456789012345678901234567890123456789012345678901234567890" , "57edf4a22be3c955ac49da2e2107b67a"
75
75
};
76
76
int i ;
77
77
78
78
for (i = 0 ; i < 7 * 2 ; i += 2 ) {
79
- MD5_CTX state ;
80
- uint8_t digest [16 ];
81
- char hex_output [16 * 2 + 1 ];
82
- int di ;
83
-
84
- MD5_Init (& state );
85
- MD5_Update (& state , (const uint8_t * )test [i ], strlen (test [i ]));
86
- MD5_Final (digest , & state );
87
- printf ("MD5 (\"%s\") = " , test [i ]);
88
- for (di = 0 ; di < 16 ; ++ di )
89
- sprintf (hex_output + di * 2 , "%02x" , digest [di ]);
90
- puts (hex_output );
91
- if (strcmp (hex_output , test [i + 1 ]))
92
- printf ("**** ERROR, should be: %s\n" , test [i + 1 ]);
79
+ MD5_CTX state ;
80
+ uint8_t digest [16 ];
81
+ char hex_output [16 * 2 + 1 ];
82
+ int di ;
83
+
84
+ MD5_Init (& state );
85
+ MD5_Update (& state , (const uint8_t * )test [i ], strlen (test [i ]));
86
+ MD5_Final (digest , & state );
87
+ printf ("MD5 (\"%s\") = " , test [i ]);
88
+ for (di = 0 ; di < 16 ; ++ di )
89
+ sprintf (hex_output + di * 2 , "%02x" , digest [di ]);
90
+ puts (hex_output );
91
+ if (strcmp (hex_output , test [i + 1 ]))
92
+ printf ("**** ERROR, should be: %s\n" , test [i + 1 ]);
93
93
}
94
94
return 0 ;
95
95
}
@@ -106,18 +106,18 @@ main(void)
106
106
{
107
107
int i ;
108
108
for (i = 1 ; i <= 64 ; ++ i ) {
109
- unsigned long v = (unsigned long )(4294967296.0 * fabs (sin ((double )i )));
110
-
111
- /*
112
- * The following nonsense is only to avoid compiler warnings about
113
- * "integer constant is unsigned in ANSI C, signed with -traditional".
114
- */
115
- if (v >> 31 ) {
116
- printf ("#define T%d /* 0x%08lx */ (T_MASK ^ 0x%08lx)\n" , i ,
117
- v , (unsigned long )(unsigned int )(~v ));
118
- } else {
119
- printf ("#define T%d 0x%08lx\n" , i , v );
120
- }
109
+ unsigned long v = (unsigned long )(4294967296.0 * fabs (sin ((double )i )));
110
+
111
+ /*
112
+ * The following nonsense is only to avoid compiler warnings about
113
+ * "integer constant is unsigned in ANSI C, signed with -traditional".
114
+ */
115
+ if (v >> 31 ) {
116
+ printf ("#define T%d /* 0x%08lx */ (T_MASK ^ 0x%08lx)\n" , i ,
117
+ v , (unsigned long )(unsigned int )(~v ));
118
+ } else {
119
+ printf ("#define T%d 0x%08lx\n" , i , v );
120
+ }
121
121
}
122
122
return 0 ;
123
123
}
@@ -199,8 +199,8 @@ static void
199
199
md5_process (MD5_CTX * pms , const uint8_t * data /*[64]*/ )
200
200
{
201
201
uint32_t
202
- a = pms -> state [0 ], b = pms -> state [1 ],
203
- c = pms -> state [2 ], d = pms -> state [3 ];
202
+ a = pms -> state [0 ], b = pms -> state [1 ],
203
+ c = pms -> state [2 ], d = pms -> state [3 ];
204
204
uint32_t t ;
205
205
206
206
#ifdef WORDS_BIGENDIAN
@@ -214,7 +214,7 @@ md5_process(MD5_CTX *pms, const uint8_t *data /*[64]*/)
214
214
int i ;
215
215
216
216
for (i = 0 ; i < 16 ; ++ i , xp += 4 )
217
- X [i ] = xp [0 ] + (xp [1 ] << 8 ) + (xp [2 ] << 16 ) + (xp [3 ] << 24 );
217
+ X [i ] = xp [0 ] + (xp [1 ] << 8 ) + (xp [2 ] << 16 ) + (xp [3 ] << 24 );
218
218
219
219
#else
220
220
@@ -226,12 +226,12 @@ md5_process(MD5_CTX *pms, const uint8_t *data /*[64]*/)
226
226
const uint32_t * X ;
227
227
228
228
if (!(((uintptr_t )data ) & 3 )) {
229
- /* data are properly aligned */
230
- X = (const uint32_t * )data ;
229
+ /* data are properly aligned */
230
+ X = (const uint32_t * )data ;
231
231
} else {
232
- /* not aligned */
233
- memcpy (xbuf , data , 64 );
234
- X = xbuf ;
232
+ /* not aligned */
233
+ memcpy (xbuf , data , 64 );
234
+ X = xbuf ;
235
235
}
236
236
#endif
237
237
@@ -370,55 +370,55 @@ MD5_Update(MD5_CTX *pms, const uint8_t *data, size_t nbytes)
370
370
uint32_t nbits = (uint32_t )(nbytes << 3 );
371
371
372
372
if (nbytes == 0 )
373
- return ;
373
+ return ;
374
374
375
375
/* Update the message length. */
376
376
pms -> count [1 ] += nbytes >> 29 ;
377
377
pms -> count [0 ] += nbits ;
378
378
if (pms -> count [0 ] < nbits )
379
- pms -> count [1 ]++ ;
379
+ pms -> count [1 ]++ ;
380
380
381
381
/* Process an initial partial block. */
382
382
if (offset ) {
383
- size_t copy = (offset + nbytes > 64 ? 64 - offset : nbytes );
384
-
385
- memcpy (pms -> buffer + offset , p , copy );
386
- if (offset + copy < 64 )
387
- return ;
388
- p += copy ;
389
- left -= copy ;
390
- md5_process (pms , pms -> buffer );
383
+ size_t copy = (offset + nbytes > 64 ? 64 - offset : nbytes );
384
+
385
+ memcpy (pms -> buffer + offset , p , copy );
386
+ if (offset + copy < 64 )
387
+ return ;
388
+ p += copy ;
389
+ left -= copy ;
390
+ md5_process (pms , pms -> buffer );
391
391
}
392
392
393
393
/* Process full blocks. */
394
394
for (; left >= 64 ; p += 64 , left -= 64 )
395
- md5_process (pms , p );
395
+ md5_process (pms , p );
396
396
397
397
/* Process a final partial block. */
398
398
if (left )
399
- memcpy (pms -> buffer , p , left );
399
+ memcpy (pms -> buffer , p , left );
400
400
}
401
401
402
402
int
403
403
MD5_Finish (MD5_CTX * pms , uint8_t * digest )
404
404
{
405
405
static const uint8_t pad [64 ] = {
406
- 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
407
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
408
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
409
- 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
406
+ 0x80 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
407
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
408
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
409
+ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
410
410
};
411
411
uint8_t data [8 ];
412
412
size_t i ;
413
413
414
414
/* Save the length before padding. */
415
415
for (i = 0 ; i < 8 ; ++ i )
416
- data [i ] = (uint8_t )(pms -> count [i >> 2 ] >> ((i & 3 ) << 3 ));
416
+ data [i ] = (uint8_t )(pms -> count [i >> 2 ] >> ((i & 3 ) << 3 ));
417
417
/* Pad to 56 bytes mod 64. */
418
418
MD5_Update (pms , pad , ((55 - (pms -> count [0 ] >> 3 )) & 63 ) + 1 );
419
419
/* Append the length. */
420
420
MD5_Update (pms , data , 8 );
421
421
for (i = 0 ; i < 16 ; ++ i )
422
- digest [i ] = (uint8_t )(pms -> state [i >> 2 ] >> ((i & 3 ) << 3 ));
422
+ digest [i ] = (uint8_t )(pms -> state [i >> 2 ] >> ((i & 3 ) << 3 ));
423
423
return 1 ;
424
424
}
0 commit comments