diff -Nru apr/include/apr_md4.h apr-md4/include/apr_md4.h
--- apr/include/apr_md4.h	Thu Jan  1 01:00:00 1970
+++ apr-md4/include/apr_md4.h	Mon May 28 10:41:49 2001
@@ -0,0 +1,164 @@
+/*
+ * This is work is derived from material Copyright RSA Data Security, Inc.
+ *
+ * The RSA copyright statement and Licence for that original material is
+ * included below. This is followed by the Apache copyright statement and
+ * licence for the modifications made to that material.
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+   rights reserved.
+
+   License to copy and use this software is granted provided that it
+   is identified as the "RSA Data Security, Inc. MD4 Message-Digest
+   Algorithm" in all material mentioning or referencing this software
+   or this function.
+
+   License is also granted to make and use derivative works provided
+   that such works are identified as "derived from the RSA Data
+   Security, Inc. MD4 Message-Digest Algorithm" in all material
+   mentioning or referencing the derived work.
+
+   RSA Data Security, Inc. makes no representations concerning either
+   the merchantability of this software or the suitability of this
+   software for any particular purpose. It is provided "as is"
+   without express or implied warranty of any kind.
+
+   These notices must be retained in any copies of any part of this
+   documentation and/or software.
+ */
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+#ifndef APR_MD4_H
+#define APR_MD4_H
+
+#include "apr.h"
+#include "apr_xlate.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @package APR MD4 Library
+ */
+
+#define MD4_DIGESTSIZE 16
+
+typedef struct apr_md4_ctx_t apr_md4_ctx_t;
+
+/** MD4 context. */
+struct apr_md4_ctx_t {
+    /** state (ABCD) */
+    apr_uint32_t state[4];
+    /** number of bits, modulo 2^64 (lsb first) */
+    apr_uint32_t count[2];
+    /** input buffer */
+    unsigned char buffer[64];
+#if APR_HAS_XLATE
+    /** translation handle */
+    apr_xlate_t *xlate;
+#endif
+};
+
+/**
+ * MD4 Initialize.  Begins an MD4 operation, writing a new context.
+ * @param context The MD4 context to initialize.
+ * @deffunc apr_status_t apr_md4_init(apr_md4_ctx_t *context)
+ */
+APR_DECLARE(apr_status_t) apr_md4_init(apr_md4_ctx_t *context);
+
+/**
+ * MDr4 translation setup.  Provides the APR translation handle to be used 
+ * for translating the content before calculating the digest.
+ * @param context The MD4 content to set the translation for.
+ * @param xlate The translation handle to use for this MD4 context 
+ * @deffunc apr_status_t apr_md4_set_xlate(apr_md4_ctx_t *context, apr_xlate_t *xlate)
+ */
+#if APR_HAS_XLATE
+APR_DECLARE(apr_status_t) apr_md4_set_xlate(apr_md4_ctx_t *context,
+                                            apr_xlate_t *xlate);
+#else
+#define apr_md4_set_xlate(context, xlate) APR_ENOTIMPL
+#endif
+
+/**
+ * MD4 block update operation.  Continue an MD4 message-digest operation, 
+ * processing another message block, and updating the context.
+ * @param context The MD4 content to update.
+ * @param input next message block to update
+ * @param inputLen The length of the next message block
+ * @deffunc apr_status_t apr_md4_update(apr_md4_ctx_t *context, apr_size_t char *input, unsigned int inputLen)
+ */
+APR_DECLARE(apr_status_t) apr_md4_update(apr_md4_ctx_t *context,
+                                         const unsigned char *input,
+                                         apr_size_t inputLen);
+
+/**
+ * MD4 finalization.  Ends an MD4 message-digest operation, writing the 
+ * message digest and zeroing the context
+ * @param digest The final MD4 digest
+ * @param context The MD4 content we are finalizing.
+ * @deffunc apr_status_t apr_md4_final(unsigned char digest[MD4_DIGESTSIZE], apr_md4_ctx_t *context)
+ */
+APR_DECLARE(apr_status_t) apr_md4_final(unsigned char digest[MD4_DIGESTSIZE],
+                                        apr_md4_ctx_t *context);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !APR_MD4_H */
diff -Nru apr/include/apr_md5.h apr-md4/include/apr_md5.h
--- apr/include/apr_md5.h	Sun May 20 05:21:56 2001
+++ apr-md4/include/apr_md5.h	Mon May 28 10:42:01 2001
@@ -98,16 +98,14 @@
 
 #define MD5_DIGESTSIZE 16
 
-/* UINT4 defines a four byte word */
-typedef unsigned int UINT4;
 typedef struct apr_md5_ctx_t apr_md5_ctx_t;
 
 /** MD5 context. */
 struct apr_md5_ctx_t {
     /** state (ABCD) */
-    UINT4 state[4];
+    apr_uint32_t state[4];
     /** number of bits, modulo 2^64 (lsb first) */
-    UINT4 count[2];
+    apr_uint32_t count[2];
     /** input buffer */
     unsigned char buffer[64];
 #if APR_HAS_XLATE
@@ -132,7 +130,7 @@
  */
 #if APR_HAS_XLATE
 APR_DECLARE(apr_status_t) apr_md5_set_xlate(apr_md5_ctx_t *context,
-                                          apr_xlate_t *xlate);
+                                            apr_xlate_t *xlate);
 #else
 #define apr_md5_set_xlate(context, xlate) APR_ENOTIMPL
 #endif
@@ -146,8 +144,8 @@
  * @deffunc apr_status_t apr_md5_update(apr_md5_ctx_t *context, apr_size_t char *input, unsigned int inputLen)
  */
 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);
 
 /**
  * MD5 finalization.  Ends an MD5 message-digest operation, writing the 
@@ -157,7 +155,7 @@
  * @deffunc apr_status_t apr_md5_final(unsigned char digest[MD5_DIGESTSIZE], apr_md5_ctx_t *context)
  */
 APR_DECLARE(apr_status_t) apr_md5_final(unsigned char digest[MD5_DIGESTSIZE],
-                                       apr_md5_ctx_t *context);
+                                        apr_md5_ctx_t *context);
 
 /**
  * Encode a password using an MD5 algorithm
@@ -168,10 +166,10 @@
  * @deffunc apr_status_t apr_md5_encode(const char *password, const char *salt, char *result, size_t nbytes)
  */
 APR_DECLARE(apr_status_t) apr_md5_encode(const char *password, const char *salt,
-                                        char *result, size_t nbytes);
+                                         char *result, size_t nbytes);
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif	/* !APR_MD5_H */
+#endif /* !APR_MD5_H */
diff -Nru apr/passwd/apr_md4.c apr-md4/passwd/apr_md4.c
--- apr/passwd/apr_md4.c	Thu Jan  1 01:00:00 1970
+++ apr-md4/passwd/apr_md4.c	Mon May 28 10:33:56 2001
@@ -0,0 +1,432 @@
+/*
+ * This is work is derived from material Copyright RSA Data Security, Inc.
+ *
+ * The RSA copyright statement and Licence for that original material is
+ * included below. This is followed by the Apache copyright statement and
+ * licence for the modifications made to that material.
+ */
+
+/* MD4C.C - RSA Data Security, Inc., MD4 message-digest algorithm
+ */
+
+/* Copyright (C) 1990-2, RSA Data Security, Inc. All rights reserved.
+
+   License to copy and use this software is granted provided that it
+   is identified as the "RSA Data Security, Inc. MD4 Message-Digest
+   Algorithm" in all material mentioning or referencing this software
+   or this function.
+
+   License is also granted to make and use derivative works provided
+   that such works are identified as "derived from the RSA Data
+   Security, Inc. MD4 Message-Digest Algorithm" in all material
+   mentioning or referencing the derived work.
+
+   RSA Data Security, Inc. makes no representations concerning either
+   the merchantability of this software or the suitability of this
+   software for any particular purpose. It is provided "as is"
+   without express or implied warranty of any kind.
+
+   These notices must be retained in any copies of any part of this
+   documentation and/or software.
+  */
+
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Apache Software Foundation (http://www.apache.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" must
+ *    not be used to endorse or promote products derived from this
+ *    software without prior written permission. For written
+ *    permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ *    nor may "Apache" appear in their name, without prior written
+ *    permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+#ifndef WIN32
+#include "apr_private.h"
+#endif
+#include "apr_strings.h"
+#include "apr_md4.h"
+#include "apr_lib.h"
+
+#if APR_HAVE_STRING_H
+#include <string.h>
+#endif
+#if APR_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+/* Constants for MD4Transform routine.
+ */
+ 
+#define S11 3
+#define S12 7
+#define S13 11
+#define S14 19
+#define S21 3
+#define S22 5
+#define S23 9
+#define S24 13
+#define S31 3
+#define S32 9
+#define S33 11
+#define S34 15
+ 
+static void MD4Transform(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 *output, const unsigned char *input,
+                   unsigned int len);
+
+static unsigned char PADDING[64] =
+{
+    0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+#if APR_CHARSET_EBCDIC
+static apr_xlate_t *xlate_ebcdic_to_ascii; /* used in apr_md4_encode() */
+#endif
+
+/* F, G and I are basic MD4 functions.
+ */
+#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
+#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z)))
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+
+/* ROTATE_LEFT rotates x left n bits.
+ */
+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
+
+/* FF, GG and HH are transformations for rounds 1, 2 and 3 */
+/* Rotation is separate from addition to prevent recomputation */
+
+#define FF(a, b, c, d, x, s) { \
+  (a) += F ((b), (c), (d)) + (x); \
+  (a) = ROTATE_LEFT ((a), (s)); \
+  }
+#define GG(a, b, c, d, x, s) { \
+  (a) += G ((b), (c), (d)) + (x) + (UINT4)0x5a827999; \
+  (a) = ROTATE_LEFT ((a), (s)); \
+  }
+#define HH(a, b, c, d, x, s) { \
+  (a) += H ((b), (c), (d)) + (x) + (UINT4)0x6ed9eba1; \
+  (a) = ROTATE_LEFT ((a), (s)); \
+  }
+
+/* MD4 initialization. Begins an MD4 operation, writing a new context.
+ */
+APR_DECLARE(apr_status_t) apr_md4_init(apr_md4_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;
+}
+
+#if APR_HAS_XLATE
+/* MD4 translation setup.  Provides the APR translation handle
+ * to be used for translating the content before calculating the
+ * digest.
+ */
+APR_DECLARE(apr_status_t) apr_md4_set_xlate(apr_md4_ctx_t *context, 
+                                            apr_xlate_t *xlate)
+{
+    apr_status_t rv;
+    int is_sb;
+
+    /* TODO: remove the single-byte-only restriction from this code
+     */
+    rv = apr_xlate_get_sb(xlate, &is_sb);
+    if (rv != APR_SUCCESS) {
+        return rv;
+    }
+    if (!is_sb) {
+        return APR_EINVAL;
+    }
+    context->xlate = xlate;
+    return APR_SUCCESS;
+}
+#endif /* APR_HAS_XLATE */
+
+/* MD4 block update operation. Continues an MD4 message-digest
+   operation, processing another message block, and updating the
+   context.
+ */
+APR_DECLARE(apr_status_t) apr_md4_update(apr_md4_ctx_t *context,
+                                         const unsigned char *input,
+                                         apr_size_t inputLen)
+{
+    unsigned int i, idx, partLen;
+#if APR_HAS_XLATE
+    apr_size_t inbytes_left, outbytes_left;
+#endif
+
+    /* Compute number of bytes mod 64 */
+    idx = (unsigned int)((context->count[0] >> 3) & 0x3F);
+
+    /* Update number of bits */
+    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);
+        MD4Transform(context->state, context->buffer);
+
+        for (i = partLen; i + 63 < inputLen; i += 64)
+            MD4Transform(context->state, &input[i]);
+
+        idx = 0;
+    }
+    else
+        i = 0;
+
+    /* Buffer remaining input */
+    memcpy(&context->buffer[idx], &input[i], inputLen - i);
+#else /*APR_HAS_XLATE*/
+    if (inputLen >= partLen) {
+        if (context->xlate) {
+            inbytes_left = outbytes_left = partLen;
+            apr_xlate_conv_buffer(context->xlate, input, &inbytes_left,
+                                  &context->buffer[idx], &outbytes_left);
+        }
+        else {
+            memcpy(&context->buffer[idx], input, partLen);
+        }
+        MD4Transform(context->state, context->buffer);
+
+        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);
+                MD4Transform(context->state, inp_tmp);
+            }
+            else {
+                MD4Transform(context->state, &input[i]);
+            }
+        }
+
+        idx = 0;
+    }
+    else
+        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);
+    }
+    else {
+        memcpy(&context->buffer[idx], &input[i], inputLen - i);
+    }
+#endif /*APR_HAS_XLATE*/
+    return APR_SUCCESS;
+}
+
+/* MD4 finalization. Ends an MD4 message-digest operation, writing the
+   the message digest and zeroizing the context.
+ */
+APR_DECLARE(apr_status_t) apr_md4_final(unsigned char digest[MD4_DIGESTSIZE],
+                                        apr_md4_ctx_t *context)
+{
+    unsigned char bits[8];
+    unsigned int idx, padLen;
+
+    /* Save number of bits */
+    Encode(bits, context->count, 8);
+
+#if APR_HAS_XLATE
+    /* apr_md4_update() should not translate for this final round. */
+    context->xlate = NULL;
+#endif /*APR_HAS_XLATE*/
+
+    /* Pad out to 56 mod 64. */
+    idx = (unsigned int) ((context->count[0] >> 3) & 0x3f);
+    padLen = (idx < 56) ? (56 - idx) : (120 - idx);
+    apr_md4_update(context, PADDING, padLen);
+
+    /* Append length (before padding) */
+    apr_md4_update(context, bits, 8);
+
+    /* Store state in digest */
+    Encode(digest, context->state, MD4_DIGESTSIZE);
+
+    /* Zeroize sensitive information. */
+    memset(context, 0, sizeof(*context));
+    
+    return APR_SUCCESS;
+}
+
+/* MD4 basic transformation. Transforms state based on block. */
+static void MD4Transform(apr_uint32_t state[4], const unsigned char block[64])
+{
+    apr_uint32_t a = state[0], b = state[1], c = state[2], d = state[3],
+                 x[MD4_DIGESTSIZE];
+
+    Decode(x, block, 64);
+
+    /* Round 1 */
+    FF (a, b, c, d, x[ 0], S11); /* 1 */
+    FF (d, a, b, c, x[ 1], S12); /* 2 */
+    FF (c, d, a, b, x[ 2], S13); /* 3 */
+    FF (b, c, d, a, x[ 3], S14); /* 4 */
+    FF (a, b, c, d, x[ 4], S11); /* 5 */
+    FF (d, a, b, c, x[ 5], S12); /* 6 */
+    FF (c, d, a, b, x[ 6], S13); /* 7 */
+    FF (b, c, d, a, x[ 7], S14); /* 8 */
+    FF (a, b, c, d, x[ 8], S11); /* 9 */
+    FF (d, a, b, c, x[ 9], S12); /* 10 */
+    FF (c, d, a, b, x[10], S13); /* 11 */
+    FF (b, c, d, a, x[11], S14); /* 12 */
+    FF (a, b, c, d, x[12], S11); /* 13 */
+    FF (d, a, b, c, x[13], S12); /* 14 */
+    FF (c, d, a, b, x[14], S13); /* 15 */
+    FF (b, c, d, a, x[15], S14); /* 16 */
+
+    /* Round 2 */
+    GG (a, b, c, d, x[ 0], S21); /* 17 */
+    GG (d, a, b, c, x[ 4], S22); /* 18 */
+    GG (c, d, a, b, x[ 8], S23); /* 19 */
+    GG (b, c, d, a, x[12], S24); /* 20 */
+    GG (a, b, c, d, x[ 1], S21); /* 21 */
+    GG (d, a, b, c, x[ 5], S22); /* 22 */
+    GG (c, d, a, b, x[ 9], S23); /* 23 */
+    GG (b, c, d, a, x[13], S24); /* 24 */
+    GG (a, b, c, d, x[ 2], S21); /* 25 */
+    GG (d, a, b, c, x[ 6], S22); /* 26 */
+    GG (c, d, a, b, x[10], S23); /* 27 */
+    GG (b, c, d, a, x[14], S24); /* 28 */
+    GG (a, b, c, d, x[ 3], S21); /* 29 */
+    GG (d, a, b, c, x[ 7], S22); /* 30 */
+    GG (c, d, a, b, x[11], S23); /* 31 */
+    GG (b, c, d, a, x[15], S24); /* 32 */
+
+    /* Round 3 */
+    HH (a, b, c, d, x[ 0], S31); /* 33 */
+    HH (d, a, b, c, x[ 8], S32); /* 34 */
+    HH (c, d, a, b, x[ 4], S33); /* 35 */
+    HH (b, c, d, a, x[12], S34); /* 36 */
+    HH (a, b, c, d, x[ 2], S31); /* 37 */
+    HH (d, a, b, c, x[10], S32); /* 38 */
+    HH (c, d, a, b, x[ 6], S33); /* 39 */
+    HH (b, c, d, a, x[14], S34); /* 40 */
+    HH (a, b, c, d, x[ 1], S31); /* 41 */
+    HH (d, a, b, c, x[ 9], S32); /* 42 */
+    HH (c, d, a, b, x[ 5], S33); /* 43 */
+    HH (b, c, d, a, x[13], S34); /* 44 */
+    HH (a, b, c, d, x[ 3], S31); /* 45 */
+    HH (d, a, b, c, x[11], S32); /* 46 */
+    HH (c, d, a, b, x[ 7], S33); /* 47 */
+    HH (b, c, d, a, x[15], S34); /* 48 */
+
+    state[0] += a;
+    state[1] += b;
+    state[2] += c;
+    state[3] += d;
+    
+    /* Zeroize sensitive information. */
+    memset(x, 0, sizeof(x));
+}
+
+/* Encodes input (apr_uint32_t) into output (unsigned char). Assumes len is
+ * a multiple of 4.
+ */
+static void Encode(unsigned char *output, const apr_uint32_t *input,
+                   unsigned int len)
+{
+    unsigned int i, j;
+    apr_uint32t 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);
+    }
+}
+
+/* Decodes input (unsigned char) into output (apr_uint32_t). Assumes len is
+ * a multiple of 4.
+ */
+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] = ((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
+APR_DECLARE(apr_status_t) apr_MD4InitEBCDIC(apr_xlate_t *xlate)
+{
+    xlate_ebcdic_to_ascii = xlate;
+    return APR_SUCCESS;
+}
+#endif
+
diff -Nru apr/passwd/apr_md5.c apr-md4/passwd/apr_md5.c
--- apr/passwd/apr_md5.c	Sun May 20 05:21:56 2001
+++ apr-md4/passwd/apr_md5.c	Mon May 28 10:41:17 2001
@@ -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 @@
 #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 @@
 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 @@
  * 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 @@
    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 @@
 #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 @@
         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 @@
    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 @@
 #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 @@
 /* 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 @@
     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 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 @@
      * 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 @@
      * 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 @@
      * 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 @@
     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;
