diff options
author | jerenkrantz <jerenkrantz@13f79535-47bb-0310-9956-ffa450edef68> | 2001-06-02 17:01:57 +0000 |
---|---|---|
committer | jerenkrantz <jerenkrantz@13f79535-47bb-0310-9956-ffa450edef68> | 2001-06-02 17:01:57 +0000 |
commit | e48c68e53768a91271e5fa76367f845917a3bb99 (patch) | |
tree | c67f66ed779f7c46fb1f27eab9e68bfde56c363f /passwd | |
parent | 97c05300f4e474db47d0ea754c1b05fa067dbd20 (diff) | |
download | libapr-e48c68e53768a91271e5fa76367f845917a3bb99.tar.gz |
Code reformat and APRization of types.
Submitted by: Sander Striker <striker@samba-tng.org>
Reviewed by: Justin Erenkrantz
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@61690 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'passwd')
-rw-r--r-- | passwd/apr_md5.c | 319 |
1 files changed, 163 insertions, 156 deletions
diff --git a/passwd/apr_md5.c b/passwd/apr_md5.c index a2aecb49f..b75626a96 100644 --- a/passwd/apr_md5.c +++ b/passwd/apr_md5.c @@ -132,11 +132,11 @@ #define S43 15 #define S44 21 -static void MD5Transform(UINT4 state[4], const unsigned char block[64]); -static void Encode(unsigned char *output, const UINT4 *input, - unsigned int len); -static void Decode(UINT4 *output, const unsigned char *input, - unsigned int len); +static void MD5Transform(apr_uint32_t state[4], const unsigned char block[64]); +static void Encode(unsigned char *output, const apr_uint32_t *input, + unsigned int len); +static void Decode(apr_uint32_t *output, const unsigned char *input, + unsigned int len); static unsigned char PADDING[64] = { @@ -161,25 +161,25 @@ static apr_xlate_t *xlate_ebcdic_to_ascii; /* used in apr_md5_encode() */ #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. - Rotation is separate from addition to prevent recomputation. + * Rotation is separate from addition to prevent recomputation. */ #define FF(a, b, c, d, x, s, ac) { \ - (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) += F ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define GG(a, b, c, d, x, s, ac) { \ - (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) += G ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define HH(a, b, c, d, x, s, ac) { \ - (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) += H ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define II(a, b, c, d, x, s, ac) { \ - (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) += I ((b), (c), (d)) + (x) + (apr_uint32_t)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } @@ -189,14 +189,17 @@ static apr_xlate_t *xlate_ebcdic_to_ascii; /* used in apr_md5_encode() */ APR_DECLARE(apr_status_t) apr_md5_init(apr_md5_ctx_t *context) { context->count[0] = context->count[1] = 0; + /* Load magic initialization constants. */ context->state[0] = 0x67452301; context->state[1] = 0xefcdab89; context->state[2] = 0x98badcfe; context->state[3] = 0x10325476; + #if APR_HAS_XLATE context->xlate = NULL; #endif + return APR_SUCCESS; } @@ -206,7 +209,7 @@ APR_DECLARE(apr_status_t) apr_md5_init(apr_md5_ctx_t *context) * digest. */ APR_DECLARE(apr_status_t) apr_md5_set_xlate(apr_md5_ctx_t *context, - apr_xlate_t *xlate) + apr_xlate_t *xlate) { apr_status_t rv; int is_sb; @@ -230,8 +233,8 @@ APR_DECLARE(apr_status_t) apr_md5_set_xlate(apr_md5_ctx_t *context, context. */ APR_DECLARE(apr_status_t) apr_md5_update(apr_md5_ctx_t *context, - const unsigned char *input, - apr_size_t inputLen) + const unsigned char *input, + apr_size_t inputLen) { unsigned int i, idx, partLen; #if APR_HAS_XLATE @@ -239,29 +242,29 @@ APR_DECLARE(apr_status_t) apr_md5_update(apr_md5_ctx_t *context, #endif /* Compute number of bytes mod 64 */ - idx = (unsigned int) ((context->count[0] >> 3) & 0x3F); + idx = (unsigned int)((context->count[0] >> 3) & 0x3F); /* Update number of bits */ - if ((context->count[0] += ((UINT4) inputLen << 3)) - < ((UINT4) inputLen << 3)) - context->count[1]++; - context->count[1] += (UINT4) inputLen >> 29; + if ((context->count[0] += ((apr_uint32_t)inputLen << 3)) + < ((apr_uint32_t)inputLen << 3)) + context->count[1]++; + context->count[1] += (apr_uint32_t)inputLen >> 29; partLen = 64 - idx; /* Transform as many times as possible. */ #if !APR_HAS_XLATE if (inputLen >= partLen) { - memcpy(&context->buffer[idx], input, partLen); - MD5Transform(context->state, context->buffer); + memcpy(&context->buffer[idx], input, partLen); + MD5Transform(context->state, context->buffer); - for (i = partLen; i + 63 < inputLen; i += 64) - MD5Transform(context->state, &input[i]); + for (i = partLen; i + 63 < inputLen; i += 64) + MD5Transform(context->state, &input[i]); - idx = 0; + idx = 0; } else - i = 0; + i = 0; /* Buffer remaining input */ memcpy(&context->buffer[idx], &input[i], inputLen - i); @@ -270,36 +273,36 @@ APR_DECLARE(apr_status_t) apr_md5_update(apr_md5_ctx_t *context, if (context->xlate) { inbytes_left = outbytes_left = partLen; apr_xlate_conv_buffer(context->xlate, input, &inbytes_left, - &context->buffer[idx],&outbytes_left); + &context->buffer[idx], &outbytes_left); } else { memcpy(&context->buffer[idx], input, partLen); } - MD5Transform(context->state, context->buffer); + MD5Transform(context->state, context->buffer); - for (i = partLen; i + 63 < inputLen; i += 64) { + for (i = partLen; i + 63 < inputLen; i += 64) { if (context->xlate) { unsigned char inp_tmp[64]; inbytes_left = outbytes_left = 64; apr_xlate_conv_buffer(context->xlate, &input[i], &inbytes_left, - inp_tmp, &outbytes_left); + inp_tmp, &outbytes_left); MD5Transform(context->state, inp_tmp); } else { MD5Transform(context->state, &input[i]); } - } + } - idx = 0; + idx = 0; } else - i = 0; + i = 0; /* Buffer remaining input */ if (context->xlate) { inbytes_left = outbytes_left = inputLen - i; apr_xlate_conv_buffer(context->xlate, &input[i], &inbytes_left, - &context->buffer[idx], &outbytes_left); + &context->buffer[idx], &outbytes_left); } else { memcpy(&context->buffer[idx], &input[i], inputLen - i); @@ -312,7 +315,7 @@ APR_DECLARE(apr_status_t) apr_md5_update(apr_md5_ctx_t *context, the message digest and zeroizing the context. */ APR_DECLARE(apr_status_t) apr_md5_final(unsigned char digest[MD5_DIGESTSIZE], - apr_md5_ctx_t *context) + apr_md5_ctx_t *context) { unsigned char bits[8]; unsigned int idx, padLen; @@ -326,7 +329,7 @@ APR_DECLARE(apr_status_t) apr_md5_final(unsigned char digest[MD5_DIGESTSIZE], #endif /*APR_HAS_XLATE*/ /* Pad out to 56 mod 64. */ - idx = (unsigned int) ((context->count[0] >> 3) & 0x3f); + idx = (unsigned int)((context->count[0] >> 3) & 0x3f); padLen = (idx < 56) ? (56 - idx) : (120 - idx); apr_md5_update(context, PADDING, padLen); @@ -345,82 +348,82 @@ APR_DECLARE(apr_status_t) apr_md5_final(unsigned char digest[MD5_DIGESTSIZE], /* MD5 basic transformation. Transforms state based on block. */ static void MD5Transform(UINT4 state[4], const unsigned char block[64]) { - UINT4 a = state[0], b = state[1], c = state[2], d = state[3], - x[MD5_DIGESTSIZE]; + apr_uint32_t a = state[0], b = state[1], c = state[2], d = state[3], + x[MD5_DIGESTSIZE]; Decode(x, block, 64); /* Round 1 */ - FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */ - FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */ - FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */ - FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */ - FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */ - FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */ - FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */ - FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */ - FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */ - FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */ - FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ - FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ - FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ - FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ - FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ - FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ + FF(a, b, c, d, x[0], S11, 0xd76aa478); /* 1 */ + FF(d, a, b, c, x[1], S12, 0xe8c7b756); /* 2 */ + FF(c, d, a, b, x[2], S13, 0x242070db); /* 3 */ + FF(b, c, d, a, x[3], S14, 0xc1bdceee); /* 4 */ + FF(a, b, c, d, x[4], S11, 0xf57c0faf); /* 5 */ + FF(d, a, b, c, x[5], S12, 0x4787c62a); /* 6 */ + FF(c, d, a, b, x[6], S13, 0xa8304613); /* 7 */ + FF(b, c, d, a, x[7], S14, 0xfd469501); /* 8 */ + FF(a, b, c, d, x[8], S11, 0x698098d8); /* 9 */ + FF(d, a, b, c, x[9], S12, 0x8b44f7af); /* 10 */ + FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ + FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ + FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ + FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ + FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ + FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ /* Round 2 */ - GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */ - GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */ - GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ - GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */ - GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */ - GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */ - GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ - GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */ - GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */ - GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ - GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */ - GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */ - GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ - GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */ - GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */ - GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ + GG(a, b, c, d, x[1], S21, 0xf61e2562); /* 17 */ + GG(d, a, b, c, x[6], S22, 0xc040b340); /* 18 */ + GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ + GG(b, c, d, a, x[0], S24, 0xe9b6c7aa); /* 20 */ + GG(a, b, c, d, x[5], S21, 0xd62f105d); /* 21 */ + GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */ + GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ + GG(b, c, d, a, x[4], S24, 0xe7d3fbc8); /* 24 */ + GG(a, b, c, d, x[9], S21, 0x21e1cde6); /* 25 */ + GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ + GG(c, d, a, b, x[3], S23, 0xf4d50d87); /* 27 */ + GG(b, c, d, a, x[8], S24, 0x455a14ed); /* 28 */ + GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ + GG(d, a, b, c, x[2], S22, 0xfcefa3f8); /* 30 */ + GG(c, d, a, b, x[7], S23, 0x676f02d9); /* 31 */ + GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ /* Round 3 */ - HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */ - HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */ - HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ - HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ - HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */ - HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */ - HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */ - HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ - HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ - HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */ - HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */ - HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */ - HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */ - HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ - HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ - HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */ + HH(a, b, c, d, x[5], S31, 0xfffa3942); /* 33 */ + HH(d, a, b, c, x[8], S32, 0x8771f681); /* 34 */ + HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ + HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ + HH(a, b, c, d, x[1], S31, 0xa4beea44); /* 37 */ + HH(d, a, b, c, x[4], S32, 0x4bdecfa9); /* 38 */ + HH(c, d, a, b, x[7], S33, 0xf6bb4b60); /* 39 */ + HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ + HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ + HH(d, a, b, c, x[0], S32, 0xeaa127fa); /* 42 */ + HH(c, d, a, b, x[3], S33, 0xd4ef3085); /* 43 */ + HH(b, c, d, a, x[6], S34, 0x4881d05); /* 44 */ + HH(a, b, c, d, x[9], S31, 0xd9d4d039); /* 45 */ + HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ + HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ + HH(b, c, d, a, x[2], S34, 0xc4ac5665); /* 48 */ /* Round 4 */ - II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */ - II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */ - II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ - II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */ - II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ - II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */ - II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ - II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */ - II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */ - II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ - II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */ - II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ - II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */ - II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ - II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */ - II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */ + II(a, b, c, d, x[0], S41, 0xf4292244); /* 49 */ + II(d, a, b, c, x[7], S42, 0x432aff97); /* 50 */ + II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ + II(b, c, d, a, x[5], S44, 0xfc93a039); /* 52 */ + II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ + II(d, a, b, c, x[3], S42, 0x8f0ccc92); /* 54 */ + II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ + II(b, c, d, a, x[1], S44, 0x85845dd1); /* 56 */ + II(a, b, c, d, x[8], S41, 0x6fa87e4f); /* 57 */ + II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ + II(c, d, a, b, x[6], S43, 0xa3014314); /* 59 */ + II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ + II(a, b, c, d, x[4], S41, 0xf7537e82); /* 61 */ + II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ + II(c, d, a, b, x[2], S43, 0x2ad7d2bb); /* 63 */ + II(b, c, d, a, x[9], S44, 0xeb86d391); /* 64 */ state[0] += a; state[1] += b; @@ -431,33 +434,37 @@ static void MD5Transform(UINT4 state[4], const unsigned char block[64]) memset(x, 0, sizeof(x)); } -/* Encodes input (UINT4) into output (unsigned char). Assumes len is - a multiple of 4. +/* Encodes input (apr_uint32_t) into output (unsigned char). Assumes len is + * a multiple of 4. */ -static void Encode(unsigned char *output, const UINT4 *input, unsigned int len) +static void Encode(unsigned char *output, const apr_uint32_t *input, + unsigned int len) { unsigned int i, j; - UINT4 k; + apr_uint32_t k; for (i = 0, j = 0; j < len; i++, j += 4) { - k = input[i]; - output[j] = (unsigned char) (k & 0xff); - output[j + 1] = (unsigned char) ((k >> 8) & 0xff); - output[j + 2] = (unsigned char) ((k >> 16) & 0xff); - output[j + 3] = (unsigned char) ((k >> 24) & 0xff); + k = input[i]; + output[j] = (unsigned char)(k & 0xff); + output[j + 1] = (unsigned char)((k >> 8) & 0xff); + output[j + 2] = (unsigned char)((k >> 16) & 0xff); + output[j + 3] = (unsigned char)((k >> 24) & 0xff); } } -/* Decodes input (unsigned char) into output (UINT4). Assumes len is +/* Decodes input (unsigned char) into output (apr_uint32_t). Assumes len is * a multiple of 4. */ -static void Decode(UINT4 *output, const unsigned char *input, unsigned int len) +static void Decode(apr_uint32_t *output, const unsigned char *input, + unsigned int len) { unsigned int i, j; for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((UINT4) input[j]) | (((UINT4) input[j + 1]) << 8) | - (((UINT4) input[j + 2]) << 16) | (((UINT4) input[j + 3]) << 24); + output[i] = ((apr_uint32_t)input[j]) | + (((apr_uint32_t)input[j + 1]) << 8) | + (((apr_uint32_t)input[j + 2]) << 16) | + (((apr_uint32_t)input[j + 3]) << 24); } #if APR_CHARSET_EBCDIC @@ -483,11 +490,11 @@ static const char *apr1_id = "$apr1$"; static void to64(char *s, unsigned long v, int n) { static unsigned char itoa64[] = /* 0 ... 63 => ASCII - 64 */ - "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; while (--n >= 0) { - *s++ = itoa64[v&0x3f]; - v >>= 6; + *s++ = itoa64[v&0x3f]; + v >>= 6; } } @@ -518,14 +525,14 @@ APR_DECLARE(apr_status_t) apr_md5_encode(const char *pw, const char *salt, * If it starts with the magic string, then skip that. */ if (!strncmp(sp, apr1_id, strlen(apr1_id))) { - sp += strlen(apr1_id); + sp += strlen(apr1_id); } /* * It stops at the first '$' or 8 chars, whichever comes first */ for (ep = sp; (*ep != '\0') && (*ep != '$') && (ep < (sp + 8)); ep++) { - continue; + continue; } /* @@ -578,12 +585,12 @@ APR_DECLARE(apr_status_t) apr_md5_encode(const char *pw, const char *salt, * Then something really weird... */ for (i = strlen(pw); i != 0; i >>= 1) { - if (i & 1) { - apr_md5_update(&ctx, final, 1); - } - else { - apr_md5_update(&ctx, (unsigned char *)pw, 1); - } + if (i & 1) { + apr_md5_update(&ctx, final, 1); + } + else { + apr_md5_update(&ctx, (unsigned char *)pw, 1); + } } /* @@ -602,28 +609,28 @@ APR_DECLARE(apr_status_t) apr_md5_encode(const char *pw, const char *salt, * need 30 seconds to build a 1000 entry dictionary... */ for (i = 0; i < 1000; i++) { - apr_md5_init(&ctx1); - if (i & 1) { - apr_md5_update(&ctx1, (unsigned char *)pw, strlen(pw)); - } - else { - apr_md5_update(&ctx1, final, MD5_DIGESTSIZE); - } - if (i % 3) { - apr_md5_update(&ctx1, (unsigned char *)sp, sl); - } - - if (i % 7) { - apr_md5_update(&ctx1, (unsigned char *)pw, strlen(pw)); - } - - if (i & 1) { - apr_md5_update(&ctx1, final, MD5_DIGESTSIZE); - } - else { - apr_md5_update(&ctx1, (unsigned char *)pw, strlen(pw)); - } - apr_md5_final(final,&ctx1); + apr_md5_init(&ctx1); + if (i & 1) { + apr_md5_update(&ctx1, (unsigned char *)pw, strlen(pw)); + } + else { + apr_md5_update(&ctx1, final, MD5_DIGESTSIZE); + } + if (i % 3) { + apr_md5_update(&ctx1, (unsigned char *)sp, sl); + } + + if (i % 7) { + apr_md5_update(&ctx1, (unsigned char *)pw, strlen(pw)); + } + + if (i & 1) { + apr_md5_update(&ctx1, final, MD5_DIGESTSIZE); + } + else { + apr_md5_update(&ctx1, (unsigned char *)pw, strlen(pw)); + } + apr_md5_final(final,&ctx1); } p = passwd + strlen(passwd); @@ -660,20 +667,20 @@ APR_DECLARE(apr_status_t) apr_password_validate(const char *passwd, char *crypt_pw; #endif if (!strncmp(hash, apr1_id, strlen(apr1_id))) { - /* - * The hash was created using our custom algorithm. - */ - apr_md5_encode(passwd, hash, sample, sizeof(sample)); + /* + * The hash was created using our custom algorithm. + */ + apr_md5_encode(passwd, hash, sample, sizeof(sample)); } else { - /* - * It's not our algorithm, so feed it to crypt() if possible. - */ + /* + * It's not our algorithm, so feed it to crypt() if possible. + */ #if defined(WIN32) || defined(BEOS) - apr_cpystrn(sample, passwd, sizeof(sample) - 1); + apr_cpystrn(sample, passwd, sizeof(sample) - 1); #else - crypt_pw = crypt(passwd, hash); - apr_cpystrn(sample, crypt_pw, sizeof(sample) - 1); + crypt_pw = crypt(passwd, hash); + apr_cpystrn(sample, crypt_pw, sizeof(sample) - 1); #endif } return (strcmp(sample, hash) == 0) ? APR_SUCCESS : APR_EMISMATCH; |