1*c18ec02fSPetter Reinholdtsen /* 2*c18ec02fSPetter Reinholdtsen Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved. 3*c18ec02fSPetter Reinholdtsen 4*c18ec02fSPetter Reinholdtsen This software is provided 'as-is', without any express or implied 5*c18ec02fSPetter Reinholdtsen warranty. In no event will the authors be held liable for any damages 6*c18ec02fSPetter Reinholdtsen arising from the use of this software. 7*c18ec02fSPetter Reinholdtsen 8*c18ec02fSPetter Reinholdtsen Permission is granted to anyone to use this software for any purpose, 9*c18ec02fSPetter Reinholdtsen including commercial applications, and to alter it and redistribute it 10*c18ec02fSPetter Reinholdtsen freely, subject to the following restrictions: 11*c18ec02fSPetter Reinholdtsen 12*c18ec02fSPetter Reinholdtsen 1. The origin of this software must not be misrepresented; you must not 13*c18ec02fSPetter Reinholdtsen claim that you wrote the original software. If you use this software 14*c18ec02fSPetter Reinholdtsen in a product, an acknowledgment in the product documentation would be 15*c18ec02fSPetter Reinholdtsen appreciated but is not required. 16*c18ec02fSPetter Reinholdtsen 2. Altered source versions must be plainly marked as such, and must not be 17*c18ec02fSPetter Reinholdtsen misrepresented as being the original software. 18*c18ec02fSPetter Reinholdtsen 3. This notice may not be removed or altered from any source distribution. 19*c18ec02fSPetter Reinholdtsen 20*c18ec02fSPetter Reinholdtsen L. Peter Deutsch 21*c18ec02fSPetter Reinholdtsen ghost@aladdin.com 22*c18ec02fSPetter Reinholdtsen 23*c18ec02fSPetter Reinholdtsen */ 24*c18ec02fSPetter Reinholdtsen /* $Id: md5.h,v 1.1 2003/11/18 17:56:02 iceblink Exp $ */ 25*c18ec02fSPetter Reinholdtsen /* 26*c18ec02fSPetter Reinholdtsen Independent implementation of MD5 (RFC 1321). 27*c18ec02fSPetter Reinholdtsen 28*c18ec02fSPetter Reinholdtsen This code implements the MD5 Algorithm defined in RFC 1321, whose 29*c18ec02fSPetter Reinholdtsen text is available at 30*c18ec02fSPetter Reinholdtsen http://www.ietf.org/rfc/rfc1321.txt 31*c18ec02fSPetter Reinholdtsen The code is derived from the text of the RFC, including the test suite 32*c18ec02fSPetter Reinholdtsen (section A.5) but excluding the rest of Appendix A. It does not include 33*c18ec02fSPetter Reinholdtsen any code or documentation that is identified in the RFC as being 34*c18ec02fSPetter Reinholdtsen copyrighted. 35*c18ec02fSPetter Reinholdtsen 36*c18ec02fSPetter Reinholdtsen The original and principal author of md5.h is L. Peter Deutsch 37*c18ec02fSPetter Reinholdtsen <ghost@aladdin.com>. Other authors are noted in the change history 38*c18ec02fSPetter Reinholdtsen that follows (in reverse chronological order): 39*c18ec02fSPetter Reinholdtsen 40*c18ec02fSPetter Reinholdtsen 2002-04-13 lpd Removed support for non-ANSI compilers; removed 41*c18ec02fSPetter Reinholdtsen references to Ghostscript; clarified derivation from RFC 1321; 42*c18ec02fSPetter Reinholdtsen now handles byte order either statically or dynamically. 43*c18ec02fSPetter Reinholdtsen 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. 44*c18ec02fSPetter Reinholdtsen 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); 45*c18ec02fSPetter Reinholdtsen added conditionalization for C++ compilation from Martin 46*c18ec02fSPetter Reinholdtsen Purschke <purschke@bnl.gov>. 47*c18ec02fSPetter Reinholdtsen 1999-05-03 lpd Original version. 48*c18ec02fSPetter Reinholdtsen */ 49*c18ec02fSPetter Reinholdtsen 50*c18ec02fSPetter Reinholdtsen #ifndef md5_INCLUDED 51*c18ec02fSPetter Reinholdtsen # define md5_INCLUDED 52*c18ec02fSPetter Reinholdtsen 53*c18ec02fSPetter Reinholdtsen /* 54*c18ec02fSPetter Reinholdtsen * This package supports both compile-time and run-time determination of CPU 55*c18ec02fSPetter Reinholdtsen * byte order. If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be 56*c18ec02fSPetter Reinholdtsen * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is 57*c18ec02fSPetter Reinholdtsen * defined as non-zero, the code will be compiled to run only on big-endian 58*c18ec02fSPetter Reinholdtsen * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to 59*c18ec02fSPetter Reinholdtsen * run on either big- or little-endian CPUs, but will run slightly less 60*c18ec02fSPetter Reinholdtsen * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined. 61*c18ec02fSPetter Reinholdtsen */ 62*c18ec02fSPetter Reinholdtsen 63*c18ec02fSPetter Reinholdtsen typedef unsigned char md5_byte_t; /* 8-bit byte */ 64*c18ec02fSPetter Reinholdtsen typedef unsigned int md5_word_t; /* 32-bit word */ 65*c18ec02fSPetter Reinholdtsen 66*c18ec02fSPetter Reinholdtsen /* Define the state of the MD5 Algorithm. */ 67*c18ec02fSPetter Reinholdtsen typedef struct md5_state_s { 68*c18ec02fSPetter Reinholdtsen md5_word_t count[2]; /* message length in bits, lsw first */ 69*c18ec02fSPetter Reinholdtsen md5_word_t abcd[4]; /* digest buffer */ 70*c18ec02fSPetter Reinholdtsen md5_byte_t buf[64]; /* accumulate block */ 71*c18ec02fSPetter Reinholdtsen } md5_state_t; 72*c18ec02fSPetter Reinholdtsen 73*c18ec02fSPetter Reinholdtsen #ifdef __cplusplus 74*c18ec02fSPetter Reinholdtsen extern "C" 75*c18ec02fSPetter Reinholdtsen { 76*c18ec02fSPetter Reinholdtsen #endif 77*c18ec02fSPetter Reinholdtsen 78*c18ec02fSPetter Reinholdtsen /* Initialize the algorithm. */ 79*c18ec02fSPetter Reinholdtsen void md5_init(md5_state_t *pms); 80*c18ec02fSPetter Reinholdtsen 81*c18ec02fSPetter Reinholdtsen /* Append a string to the message. */ 82*c18ec02fSPetter Reinholdtsen void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes); 83*c18ec02fSPetter Reinholdtsen 84*c18ec02fSPetter Reinholdtsen /* Finish the message and return the digest. */ 85*c18ec02fSPetter Reinholdtsen void md5_finish(md5_state_t *pms, md5_byte_t digest[16]); 86*c18ec02fSPetter Reinholdtsen 87*c18ec02fSPetter Reinholdtsen #ifdef __cplusplus 88*c18ec02fSPetter Reinholdtsen } /* end extern "C" */ 89*c18ec02fSPetter Reinholdtsen #endif 90*c18ec02fSPetter Reinholdtsen 91*c18ec02fSPetter Reinholdtsen #endif /* md5_INCLUDED */ 92