|
@@ -14,7 +14,7 @@
|
|
|
|
|
|
This code implements the MD5 Algorithm defined in RFC 1321, whose
|
|
|
text is available at
|
|
|
- http://www.ietf.org/rfc/rfc1321.txt
|
|
|
+ http://www.ietf.org/rfc/rfc1321.txt
|
|
|
The code is derived from the text of the RFC, including the test suite
|
|
|
(section A.5) but excluding the rest of Appendix A. It does not include
|
|
|
any code or documentation that is identified in the RFC as being
|
|
@@ -25,12 +25,12 @@
|
|
|
that follows (in reverse chronological order):
|
|
|
|
|
|
2002-04-13 lpd Removed support for non-ANSI compilers; removed
|
|
|
- references to Ghostscript; clarified derivation from RFC 1321;
|
|
|
- now handles byte order either statically or dynamically.
|
|
|
+ references to Ghostscript; clarified derivation from RFC 1321;
|
|
|
+ now handles byte order either statically or dynamically.
|
|
|
1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
|
|
|
1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
|
|
|
- added conditionalization for C++ compilation from Martin
|
|
|
- Purschke <purschke@bnl.gov>.
|
|
|
+ added conditionalization for C++ compilation from Martin
|
|
|
+ Purschke <purschke@bnl.gov>.
|
|
|
1999-05-03 lpd Original version.
|
|
|
*/
|
|
|
|
|
@@ -52,9 +52,9 @@ typedef unsigned int md5_word_t; /* 32-bit word */
|
|
|
|
|
|
/* Define the state of the MD5 Algorithm. */
|
|
|
typedef struct md5_state_s {
|
|
|
- md5_word_t count[2]; /* message length in bits, lsw first */
|
|
|
- md5_word_t abcd[4]; /* digest buffer */
|
|
|
- md5_byte_t buf[64]; /* accumulate block */
|
|
|
+ md5_word_t count[2]; /* message length in bits, lsw first */
|
|
|
+ md5_word_t abcd[4]; /* digest buffer */
|
|
|
+ md5_byte_t buf[64]; /* accumulate block */
|
|
|
} md5_state_t;
|
|
|
|
|
|
#ifdef __cplusplus
|
|
@@ -106,7 +106,7 @@ MD5_STATIC void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
|
|
|
|
|
|
This code implements the MD5 Algorithm defined in RFC 1321, whose
|
|
|
text is available at
|
|
|
- http://www.ietf.org/rfc/rfc1321.txt
|
|
|
+ http://www.ietf.org/rfc/rfc1321.txt
|
|
|
The code is derived from the text of the RFC, including the test suite
|
|
|
(section A.5) but excluding the rest of Appendix A. It does not include
|
|
|
any code or documentation that is identified in the RFC as being
|
|
@@ -117,14 +117,14 @@ MD5_STATIC void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
|
|
|
that follows (in reverse chronological order):
|
|
|
|
|
|
2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order
|
|
|
- either statically or dynamically; added missing #include <string.h>
|
|
|
- in library.
|
|
|
+ either statically or dynamically; added missing #include <string.h>
|
|
|
+ in library.
|
|
|
2002-03-11 lpd Corrected argument list for main(), and added int return
|
|
|
- type, in test program and T value program.
|
|
|
+ type, in test program and T value program.
|
|
|
2002-02-21 lpd Added missing #include <stdio.h> in test program.
|
|
|
2000-07-03 lpd Patched to eliminate warnings about "constant is
|
|
|
- unsigned in ANSI C, signed in traditional"; made test program
|
|
|
- self-checking.
|
|
|
+ unsigned in ANSI C, signed in traditional"; made test program
|
|
|
+ self-checking.
|
|
|
1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
|
|
|
1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
|
|
|
1999-05-03 lpd Original version.
|
|
@@ -134,7 +134,7 @@ MD5_STATIC void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
|
|
|
#include <string.h>
|
|
|
#endif
|
|
|
|
|
|
-#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */
|
|
|
+#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */
|
|
|
#ifdef ARCH_IS_BIG_ENDIAN
|
|
|
# define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)
|
|
|
#else
|
|
@@ -235,15 +235,17 @@ md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
|
|
|
|
|
|
if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
|
|
|
#endif
|
|
|
-#if BYTE_ORDER <= 0 /* little-endian */
|
|
|
+#if BYTE_ORDER <= 0 /* little-endian */
|
|
|
{
|
|
|
/*
|
|
|
* On little-endian machines, we can process properly aligned
|
|
|
* data without copying it.
|
|
|
*/
|
|
|
if (!((data - (const md5_byte_t *)0) & 3)) {
|
|
|
- /* data are properly aligned */
|
|
|
- X = (const md5_word_t *)data;
|
|
|
+ /* data are properly aligned, a direct assignment is possible */
|
|
|
+ /* cast through a (void *) should avoid a compiler warning,
|
|
|
+ see https://github.com/bel2125/civetweb/issues/94#issuecomment-98112861 */
|
|
|
+ X = (const md5_word_t *)(void *)data;
|
|
|
} else {
|
|
|
/* not aligned */
|
|
|
memcpy(xbuf, data, 64);
|
|
@@ -252,9 +254,9 @@ md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
|
|
|
}
|
|
|
#endif
|
|
|
#if BYTE_ORDER == 0
|
|
|
- else /* dynamic big-endian */
|
|
|
+ else /* dynamic big-endian */
|
|
|
#endif
|
|
|
-#if BYTE_ORDER >= 0 /* big-endian */
|
|
|
+#if BYTE_ORDER >= 0 /* big-endian */
|
|
|
{
|
|
|
/*
|
|
|
* On big-endian machines, we must arrange the bytes in the
|
|
@@ -264,9 +266,9 @@ md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
|
|
|
int i;
|
|
|
|
|
|
# if BYTE_ORDER == 0
|
|
|
- X = xbuf; /* (dynamic only) */
|
|
|
+ X = xbuf; /* (dynamic only) */
|
|
|
# else
|
|
|
-# define xbuf X /* (static only) */
|
|
|
+# define xbuf X /* (static only) */
|
|
|
# endif
|
|
|
for (i = 0; i < 16; ++i, xp += 4)
|
|
|
xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
|