home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 November / CMCD1104.ISO / Software / Complet / Apache / apache_2.0.52-win32-x86-no_ssl.msi / Data.Cab / F277229_apr_sha1.h < prev    next >
C/C++ Source or Header  |  2004-02-13  |  4KB  |  121 lines

  1. /* Copyright 2001-2004 The Apache Software Foundation
  2.  *
  3.  * Licensed under the Apache License, Version 2.0 (the "License");
  4.  * you may not use this file except in compliance with the License.
  5.  * You may obtain a copy of the License at
  6.  *
  7.  *     http://www.apache.org/licenses/LICENSE-2.0
  8.  *
  9.  * Unless required by applicable law or agreed to in writing, software
  10.  * distributed under the License is distributed on an "AS IS" BASIS,
  11.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12.  * See the License for the specific language governing permissions and
  13.  * limitations under the License.
  14.  */
  15. /* NIST Secure Hash Algorithm
  16.  *     heavily modified by Uwe Hollerbach uh@alumni.caltech edu
  17.  *     from Peter C. Gutmann's implementation as found in
  18.  *     Applied Cryptography by Bruce Schneier
  19.  *     This code is hereby placed in the public domain
  20.  */
  21.  
  22. #ifndef APR_SHA1_H
  23. #define APR_SHA1_H
  24.  
  25. #include "apu.h"
  26. #include "apr_general.h"
  27.  
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif
  31.  
  32. /**
  33.  * @file apr_sha1.h
  34.  * @brief APR-UTIL SHA1 library
  35.  */
  36.  
  37. /** size of the SHA1 DIGEST */
  38. #define APR_SHA1_DIGESTSIZE 20
  39.  
  40. /**
  41.  * Define the Magic String prefix that identifies a password as being
  42.  * hashed using our algorithm.
  43.  */
  44. #define APR_SHA1PW_ID "{SHA}"
  45.  
  46. /** length of the SHA Password */
  47. #define APR_SHA1PW_IDLEN 5
  48.  
  49. /** @see apr_sha1_ctx_t */
  50. typedef struct apr_sha1_ctx_t apr_sha1_ctx_t;
  51.  
  52. /** 
  53.  * SHA1 context structure
  54.  */
  55. struct apr_sha1_ctx_t {
  56.     /** message digest */
  57.     apr_uint32_t digest[5];
  58.     /** 64-bit bit counts */
  59.     apr_uint32_t count_lo, count_hi;
  60.     /** SHA data buffer */
  61.     apr_uint32_t data[16];
  62.     /** unprocessed amount in data */
  63.     int local;
  64. };
  65.  
  66. /**
  67.  * Provide a means to SHA1 crypt/encode a plaintext password in a way which
  68.  * makes password file compatible with those commonly use in netscape web
  69.  * and ldap installations.
  70.  * @param clear The plaintext password
  71.  * @param len The length of the plaintext password
  72.  * @param out The encrypted/encoded password
  73.  * @note SHA1 support is useful for migration purposes, but is less
  74.  *     secure than Apache's password format, since Apache's (MD5)
  75.  *     password format uses a random eight character salt to generate
  76.  *     one of many possible hashes for the same password.  Netscape
  77.  *     uses plain SHA1 without a salt, so the same password
  78.  *     will always generate the same hash, making it easier
  79.  *     to break since the search space is smaller.
  80.  */
  81. APU_DECLARE(void) apr_sha1_base64(const char *clear, int len, char *out);
  82.  
  83. /**
  84.  * Initialize the SHA digest
  85.  * @param context The SHA context to initialize
  86.  */
  87. APU_DECLARE(void) apr_sha1_init(apr_sha1_ctx_t *context);
  88.  
  89. /**
  90.  * Update the SHA digest
  91.  * @param context The SHA1 context to update
  92.  * @param input The buffer to add to the SHA digest
  93.  * @param inputLen The length of the input buffer
  94.  */
  95. APU_DECLARE(void) apr_sha1_update(apr_sha1_ctx_t *context, const char *input,
  96.                                 unsigned int inputLen);
  97.  
  98. /**
  99.  * Update the SHA digest with binary data
  100.  * @param context The SHA1 context to update
  101.  * @param input The buffer to add to the SHA digest
  102.  * @param inputLen The length of the input buffer
  103.  */
  104. APU_DECLARE(void) apr_sha1_update_binary(apr_sha1_ctx_t *context,
  105.                                        const unsigned char *input,
  106.                                        unsigned int inputLen);
  107.  
  108. /**
  109.  * Finish computing the SHA digest
  110.  * @param digest the output buffer in which to store the digest
  111.  * @param context The context to finalize
  112.  */
  113. APU_DECLARE(void) apr_sha1_final(unsigned char digest[APR_SHA1_DIGESTSIZE],
  114.                                apr_sha1_ctx_t *context);
  115.  
  116. #ifdef __cplusplus
  117. }
  118. #endif
  119.  
  120. #endif    /* APR_SHA1_H */
  121.