|
Odamex
Setting the Standard in Multiplayer Doom
|
00001 // Emacs style mode select -*- C++ -*- 00002 //----------------------------------------------------------------------------- 00003 // 00004 // $Id: md5.h 1084 2008-08-14 02:48:40Z russellrice $ 00005 // 00006 // Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved. 00007 // 00008 // This software is provided 'as-is', without any express or implied 00009 // warranty. In no event will the authors be held liable for any damages 00010 // arising from the use of this software. 00011 // 00012 // Permission is granted to anyone to use this software for any purpose, 00013 // including commercial applications, and to alter it and redistribute it 00014 // freely, subject to the following restrictions: 00015 // 00016 // 1. The origin of this software must not be misrepresented; you must not 00017 // claim that you wrote the original software. If you use this software 00018 // in a product, an acknowledgment in the product documentation would be 00019 // appreciated but is not required. 00020 // 2. Altered source versions must be plainly marked as such, and must not be 00021 // misrepresented as being the original software. 00022 // 3. This notice may not be removed or altered from any source distribution. 00023 // 00024 // L. Peter Deutsch 00025 // ghost@aladdin.com 00026 // 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 http://www.ietf.org/rfc/rfc1321.txt 00032 // 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 00053 00054 #ifndef md5_INCLUDED 00055 #define md5_INCLUDED 00056 00057 //----------------------------------------------------------------------------- 00058 // This package supports both compile-time and run-time determination of CPU 00059 // byte order. If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be 00060 // compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is 00061 // defined as non-zero, the code will be compiled to run only on big-endian 00062 // CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to 00063 // run on either big- or little-endian CPUs, but will run slightly less 00064 // efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined. 00065 //----------------------------------------------------------------------------- 00066 00067 00068 typedef unsigned char md5_byte_t; /* 8-bit byte */ 00069 typedef unsigned int md5_word_t; /* 32-bit word */ 00070 00071 /* Define the state of the MD5 Algorithm. */ 00072 typedef struct md5_state_s { 00073 md5_word_t count[2]; /* message length in bits, lsw first */ 00074 md5_word_t abcd[4]; /* digest buffer */ 00075 md5_byte_t buf[64]; /* accumulate block */ 00076 } md5_state_t; 00077 00078 #ifdef __cplusplus 00079 extern "C" 00080 { 00081 #endif 00082 00083 /* Initialize the algorithm. */ 00084 void md5_init(md5_state_t *pms); 00085 00086 /* Append a string to the message. */ 00087 void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes); 00088 00089 /* Finish the message and return the digest. */ 00090 void md5_finish(md5_state_t *pms, md5_byte_t digest[16]); 00091 00092 #ifdef __cplusplus 00093 } /* end extern "C" */ 00094 #endif 00095 00096 // denis lukianov 2006 00097 #include <string> 00098 00099 std::string MD5SUM(const void *in, size_t size); 00100 std::string MD5SUM(std::string in); 00101 00102 #endif /* md5_INCLUDED */