-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2000 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/>.
- *
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
/************************************************************************
* Original Code Copyright (C) 1994, Jeff Hostetler, Spyglass, Inc.
* Portions of Content-MD5 code Copyright (C) 1993, 1994 by Carnegie Mellon
* University (see Copyright below).
- * Portions of Content-MD5 code Copyright (C) 1991 Bell Communications
+ * Portions of Content-MD5 code Copyright (C) 1991 Bell Communications
* Research, Inc. (Bellcore) (see Copyright below).
* Portions extracted from mpack, John G. Myers - jgm+@cmu.edu
* Content-MD5 Code contributed by Martin Hamilton (martin@net.lut.ac.uk)
#include "util_md5.h"
#include "util_ebcdic.h"
-API_EXPORT(char *) ap_md5_binary(ap_pool_t *p, const unsigned char *buf, int length)
+AP_DECLARE(char *) ap_md5_binary(apr_pool_t *p, const unsigned char *buf, int length)
{
const char *hex = "0123456789abcdef";
- ap_md5_ctx_t my_md5;
- unsigned char hash[MD5_DIGESTSIZE];
- char *r, result[33];
+ apr_md5_ctx_t my_md5;
+ unsigned char hash[APR_MD5_DIGESTSIZE];
+ char *r, result[33]; /* (MD5_DIGESTSIZE * 2) + 1 */
int i;
/*
* Take the MD5 hash of the string argument.
*/
- ap_MD5Init(&my_md5);
-#ifdef CHARSET_EBCDIC
- ap_MD5SetXlate(&my_md5, ap_hdrs_to_ascii);
+ apr_md5_init(&my_md5);
+#if APR_CHARSET_EBCDIC
+ apr_md5_set_xlate(&my_md5, ap_hdrs_to_ascii);
#endif
- ap_MD5Update(&my_md5, buf, (unsigned int)length);
- ap_MD5Final(hash, &my_md5);
+ apr_md5_update(&my_md5, buf, (unsigned int)length);
+ apr_md5_final(hash, &my_md5);
- for (i = 0, r = result; i < MD5_DIGESTSIZE; i++) {
- *r++ = hex[hash[i] >> 4];
- *r++ = hex[hash[i] & 0xF];
+ for (i = 0, r = result; i < APR_MD5_DIGESTSIZE; i++) {
+ *r++ = hex[hash[i] >> 4];
+ *r++ = hex[hash[i] & 0xF];
}
*r = '\0';
- return ap_pstrdup(p, result);
+ return apr_pstrndup(p, result, APR_MD5_DIGESTSIZE*2);
}
-API_EXPORT(char *) ap_md5(ap_pool_t *p, const unsigned char *string)
+AP_DECLARE(char *) ap_md5(apr_pool_t *p, const unsigned char *string)
{
return ap_md5_binary(p, string, (int) strlen((char *)string));
}
* of an authorized representative of Bellcore. BELLCORE
* MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY
* OF THIS MATERIAL FOR ANY PURPOSE. IT IS PROVIDED "AS IS",
- * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
+ * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
*/
static char basis_64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-API_EXPORT(char *) ap_md5contextTo64(ap_pool_t *a, ap_md5_ctx_t *context)
+AP_DECLARE(char *) ap_md5contextTo64(apr_pool_t *a, apr_md5_ctx_t *context)
{
unsigned char digest[18];
char *encodedDigest;
int i;
char *p;
- encodedDigest = (char *) ap_pcalloc(a, 25 * sizeof(char));
+ encodedDigest = (char *) apr_pcalloc(a, 25 * sizeof(char));
- ap_MD5Final(digest, context);
+ apr_md5_final(digest, context);
digest[sizeof(digest) - 1] = digest[sizeof(digest) - 2] = 0;
p = encodedDigest;
for (i = 0; i < sizeof(digest); i += 3) {
- *p++ = basis_64[digest[i] >> 2];
- *p++ = basis_64[((digest[i] & 0x3) << 4) | ((int) (digest[i + 1] & 0xF0) >> 4)];
- *p++ = basis_64[((digest[i + 1] & 0xF) << 2) | ((int) (digest[i + 2] & 0xC0) >> 6)];
- *p++ = basis_64[digest[i + 2] & 0x3F];
+ *p++ = basis_64[digest[i] >> 2];
+ *p++ = basis_64[((digest[i] & 0x3) << 4) | ((int) (digest[i + 1] & 0xF0) >> 4)];
+ *p++ = basis_64[((digest[i + 1] & 0xF) << 2) | ((int) (digest[i + 2] & 0xC0) >> 6)];
+ *p++ = basis_64[digest[i + 2] & 0x3F];
}
*p-- = '\0';
*p-- = '=';
return encodedDigest;
}
-#ifdef APACHE_XLATE
-
-API_EXPORT(char *) ap_md5digest(ap_pool_t *p, ap_file_t *infile,
- ap_xlate_t *xlate)
-{
- ap_md5_ctx_t context;
- unsigned char buf[1000];
- long length = 0;
- int nbytes;
- ap_off_t offset = 0L;
-
- ap_MD5Init(&context);
- if (xlate) {
- ap_MD5SetXlate(&context, xlate);
- }
- nbytes = sizeof(buf);
- while (ap_read(infile, buf, &nbytes) == APR_SUCCESS) {
- length += nbytes;
- ap_MD5Update(&context, buf, nbytes);
- }
- ap_seek(infile, APR_SET, &offset);
- return ap_md5contextTo64(p, &context);
-}
-
-#else
-
-API_EXPORT(char *) ap_md5digest(ap_pool_t *p, ap_file_t *infile)
+AP_DECLARE(char *) ap_md5digest(apr_pool_t *p, apr_file_t *infile)
{
- ap_md5_ctx_t context;
- unsigned char buf[1000];
- long length = 0;
- ap_ssize_t nbytes;
- ap_off_t offset = 0L;
+ apr_md5_ctx_t context;
+ unsigned char buf[4096]; /* keep this a multiple of 64 */
+ apr_size_t nbytes;
+ apr_off_t offset = 0L;
- ap_MD5Init(&context);
+ apr_md5_init(&context);
nbytes = sizeof(buf);
- while (ap_read(infile, buf, &nbytes) == APR_SUCCESS) {
- length += nbytes;
- ap_MD5Update(&context, buf, nbytes);
+ while (apr_file_read(infile, buf, &nbytes) == APR_SUCCESS) {
+ apr_md5_update(&context, buf, nbytes);
+ nbytes = sizeof(buf);
}
- ap_seek(infile, APR_SET, &offset);
+ apr_file_seek(infile, APR_SET, &offset);
return ap_md5contextTo64(p, &context);
}
-#endif