summaryrefslogtreecommitdiff
path: root/src/md5.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/md5.c')
-rw-r--r--src/md5.c102
1 files changed, 48 insertions, 54 deletions
diff --git a/src/md5.c b/src/md5.c
index 159933a..638e05a 100644
--- a/src/md5.c
+++ b/src/md5.c
@@ -17,7 +17,7 @@
/* #include "config.h" */
-#include <string.h> /* for memcpy() */
+#include <string.h> /* for memcpy() */
#include "md5.h"
static void byteReverse(unsigned char *buf, unsigned longs);
@@ -30,69 +30,66 @@ static void byteReverse(unsigned char *buf, unsigned longs);
b ^= a; \
a ^= b; \
} while(0)
-static void byteReverse(unsigned char *buf, unsigned longs)
-{
- /*uint32 t;*/
+static void byteReverse(unsigned char *buf, unsigned longs) {
+ /*uint32 t; */
do {
/*
- t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
- ((unsigned) buf[1] << 8 | buf[0]);
- *(uint32 *) buf = t;
- */
+ t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
+ ((unsigned) buf[1] << 8 | buf[0]);
+ *(uint32 *) buf = t;
+ */
byteSwap(buf[0], buf[3]);
byteSwap(buf[1], buf[2]);
buf += 4;
- } while (--longs);
+ } while(--longs);
}
/*
* Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
* initialization constants.
*/
-void MD5Init(struct MD5Context *ctx, int brokenEndian)
-{
+void MD5Init(struct MD5Context *ctx, int brokenEndian) {
ctx->buf[0] = 0x67452301;
ctx->buf[1] = 0xefcdab89;
ctx->buf[2] = 0x98badcfe;
ctx->buf[3] = 0x10325476;
-
+
ctx->bits[0] = 0;
ctx->bits[1] = 0;
-
- /*#ifdef WORDS_BIGENDIAN*/
+
+ /*#ifdef WORDS_BIGENDIAN */
if (brokenEndian) {
ctx->doByteReverse = 0;
} else {
ctx->doByteReverse = 1;
}
/*#else
- ctx->doByteReverse = 0;
- #endif
- */
+ ctx->doByteReverse = 0;
+ #endif
+ */
}
/*
* Update context to reflect the concatenation of another buffer full
* of bytes.
*/
-void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
-{
+void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len) {
uint32 t;
-
+
/* Update bitcount */
-
+
t = ctx->bits[0];
if ((ctx->bits[0] = t + ((uint32) len << 3)) < t)
- ctx->bits[1]++; /* Carry from low to high */
+ ctx->bits[1]++; /* Carry from low to high */
ctx->bits[1] += len >> 29;
-
- t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
-
+
+ t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
+
/* Handle any leading odd-sized chunks */
-
+
if (t) {
unsigned char *p = (unsigned char *) ctx->in + t;
-
+
t = 64 - t;
if (len < t) {
memcpy(p, buf, len);
@@ -106,8 +103,8 @@ void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
len -= t;
}
/* Process data in 64-byte chunks */
-
- while (len >= 64) {
+
+ while(len >= 64) {
memcpy(ctx->in, buf, 64);
if (ctx->doByteReverse)
byteReverse(ctx->in, 16);
@@ -115,9 +112,9 @@ void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
buf += 64;
len -= 64;
}
-
+
/* Handle any remaining bytes of data. */
-
+
memcpy(ctx->in, buf, len);
}
@@ -125,22 +122,21 @@ void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
* Final wrapup - pad to 64-byte boundary with the bit pattern
* 1 0* (64-bit count of bits processed, MSB-first)
*/
-void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
-{
+void MD5Final(unsigned char digest[16], struct MD5Context *ctx) {
unsigned count;
unsigned char *p;
-
+
/* Compute number of bytes mod 64 */
count = (ctx->bits[0] >> 3) & 0x3F;
-
+
/* Set the first char of padding to 0x80. This is safe since there is
- always at least one byte free */
+ always at least one byte free */
p = ctx->in + count;
*p++ = 0x80;
-
+
/* Bytes of padding needed to make 64 bytes */
count = 64 - 1 - count;
-
+
/* Pad out to 56 mod 64 */
if (count < 8) {
/* Two lots of padding: Pad the first block to 64 bytes */
@@ -148,7 +144,7 @@ void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
if (ctx->doByteReverse)
byteReverse(ctx->in, 16);
MD5Transform(ctx->buf, (uint32 *) ctx->in);
-
+
/* Now fill the next block with 56 bytes */
memset(ctx->in, 0, 56);
} else {
@@ -157,19 +153,19 @@ void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
}
if (ctx->doByteReverse)
byteReverse(ctx->in, 14);
-
+
/* Append length in bits and transform */
/* Note: see patch for PAM from Tomas Mraz */
- memcpy((uint32 *)ctx->in + 14, ctx->bits, 2*sizeof(uint32));
+ memcpy((uint32 *) ctx->in + 14, ctx->bits, 2 * sizeof(uint32));
/*((uint32 *) ctx->in)[14] = ctx->bits[0];
- ((uint32 *) ctx->in)[15] = ctx->bits[1];
- */
-
+ ((uint32 *) ctx->in)[15] = ctx->bits[1];
+ */
+
MD5Transform(ctx->buf, (uint32 *) ctx->in);
if (ctx->doByteReverse)
byteReverse((unsigned char *) ctx->buf, 4);
memcpy(digest, ctx->buf, 16);
- memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
+ memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
}
/* The four core functions - F1 is optimized somewhat */
@@ -189,15 +185,14 @@ void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
* reflect the addition of 16 longwords of new data. MD5Update blocks
* the data and converts bytes into longwords for this routine.
*/
-void MD5Transform(uint32 buf[4], uint32 const in[16])
-{
+void MD5Transform(uint32 buf[4], uint32 const in[16]) {
register uint32 a, b, c, d;
-
+
a = buf[0];
b = buf[1];
c = buf[2];
d = buf[3];
-
+
MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
@@ -214,7 +209,7 @@ void MD5Transform(uint32 buf[4], uint32 const in[16])
MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
-
+
MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
@@ -231,7 +226,7 @@ void MD5Transform(uint32 buf[4], uint32 const in[16])
MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-
+
MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
@@ -248,7 +243,7 @@ void MD5Transform(uint32 buf[4], uint32 const in[16])
MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-
+
MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
@@ -265,10 +260,9 @@ void MD5Transform(uint32 buf[4], uint32 const in[16])
MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-
+
buf[0] += a;
buf[1] += b;
buf[2] += c;
buf[3] += d;
}
-