]> granicus.if.org Git - apache/blobdiff - server/util_md5.c
Update the copyright year in all .c, .h and .xml files
[apache] / server / util_md5.c
index 1f06ba6f68cac15ee28d3c6548ed84666298b5fa..31eefd3a8abb21869bac8ec0e0cc217f02c971ff 100644 (file)
@@ -1,59 +1,17 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
+/* Copyright 1999-2006 The Apache Software Foundation or its licensors, as
+ * applicable.
  *
- * Copyright (c) 2000 The Apache Software Foundation.  All rights
- * reserved.
+ * Licensed 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
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
- * 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.
+ * 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.
  */
 
 /************************************************************************
@@ -73,7 +31,7 @@
  *  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 "ap_config.h"
 #include "apr_portable.h"
+#include "apr_strings.h"
 #include "httpd.h"
 #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));
 }
@@ -163,30 +122,30 @@ API_EXPORT(char *) ap_md5(ap_pool_t *p, const unsigned 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-- = '=';
@@ -194,46 +153,20 @@ API_EXPORT(char *) ap_md5contextTo64(ap_pool_t *a, ap_md5_ctx_t *context)
     return encodedDigest;
 }
 
-#ifdef APACHE_XLATE
-
-API_EXPORT(char *) ap_md5digest(ap_pool_t *p, ap_file_t *infile,
-                                ap_xlate_t *xlate)
+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;
-    int nbytes;
-
-    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, 0L, APR_SET);
-    return ap_md5contextTo64(p, &context);
-}
+    apr_md5_ctx_t context;
+    unsigned char buf[4096]; /* keep this a multiple of 64 */
+    apr_size_t nbytes;
+    apr_off_t offset = 0L;
 
-#else
-
-API_EXPORT(char *) ap_md5digest(ap_pool_t *p, ap_file_t *infile)
-{
-    ap_md5_ctx_t context;
-    unsigned char buf[1000];
-    long length = 0;
-    ap_ssize_t nbytes;
-
-    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, 0L, APR_SET);
+    apr_file_seek(infile, APR_SET, &offset);
     return ap_md5contextTo64(p, &context);
 }
 
-#endif