00001 00003 /* 00004 Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved. 00005 00006 This software is provided 'as-is', without any express or implied 00007 warranty. In no event will the authors be held liable for any damages 00008 arising from the use of this software. 00009 00010 Permission is granted to anyone to use this software for any purpose, 00011 including commercial applications, and to alter it and redistribute it 00012 freely, subject to the following restrictions: 00013 00014 1. The origin of this software must not be misrepresented; you must not 00015 claim that you wrote the original software. If you use this software 00016 in a product, an acknowledgment in the product documentation would be 00017 appreciated but is not required. 00018 2. Altered source versions must be plainly marked as such, and must not be 00019 misrepresented as being the original software. 00020 3. This notice may not be removed or altered from any source distribution. 00021 00022 L. Peter Deutsch 00023 ghost@aladdin.com 00024 00025 */ 00026 /* $Id: md5.h,v 1.4 2002/04/13 19:20:28 lpd Exp $ */ 00027 /* 00028 Independent implementation of MD5 (RFC 1321). 00029 00030 This code implements the MD5 Algorithm defined in RFC 1321, whose 00031 text is available at 00032 http://www.ietf.org/rfc/rfc1321.txt 00033 The code is derived from the text of the RFC, including the test suite 00034 (section A.5) but excluding the rest of Appendix A. It does not include 00035 any code or documentation that is identified in the RFC as being 00036 copyrighted. 00037 00038 The original and principal author of md5.h is L. Peter Deutsch 00039 <ghost@aladdin.com>. Other authors are noted in the change history 00040 that follows (in reverse chronological order): 00041 00042 2002-04-13 lpd Removed support for non-ANSI compilers; removed 00043 references to Ghostscript; clarified derivation from RFC 1321; 00044 now handles byte order either statically or dynamically. 00045 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. 00046 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); 00047 added conditionalization for C++ compilation from Martin 00048 Purschke <purschke@bnl.gov>. 00049 1999-05-03 lpd Original version. 00050 */ 00051 00052 #ifndef md5_INCLUDED 00053 # define md5_INCLUDED 00054 00055 /* 00056 * This package supports both compile-time and run-time determination of CPU 00057 * byte order. If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be 00058 * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is 00059 * defined as non-zero, the code will be compiled to run only on big-endian 00060 * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to 00061 * run on either big- or little-endian CPUs, but will run slightly less 00062 * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined. 00063 */ 00064 00065 typedef unsigned char mongo_md5_byte_t; /* 8-bit byte */ 00066 typedef unsigned int mongo_md5_word_t; /* 32-bit word */ 00067 00068 /* Define the state of the MD5 Algorithm. */ 00069 typedef struct mongo_md5_state_s { 00070 mongo_md5_word_t count[2]; /* message length in bits, lsw first */ 00071 mongo_md5_word_t abcd[4]; /* digest buffer */ 00072 mongo_md5_byte_t buf[64]; /* accumulate block */ 00073 } mongo_md5_state_t; 00074 00075 #ifdef __cplusplus 00076 extern "C" 00077 { 00078 #endif 00079 00080 /* Initialize the algorithm. */ 00081 void mongo_md5_init(mongo_md5_state_t *pms); 00082 00083 /* Append a string to the message. */ 00084 void mongo_md5_append(mongo_md5_state_t *pms, const mongo_md5_byte_t *data, int nbytes); 00085 00086 /* Finish the message and return the digest. */ 00087 void mongo_md5_finish(mongo_md5_state_t *pms, mongo_md5_byte_t digest[16]); 00088 00089 #ifdef __cplusplus 00090 } /* end extern "C" */ 00091 #endif 00092 00093 #endif /* md5_INCLUDED */
1.7.1