1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan * This is the header file for the MD5 message-digest algorithm. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan * The algorithm is due to Ron Rivest. This code was 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan * written by Colin Plumb in 1993, no copyright is claimed. 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan * This code is in the public domain; do with it what you wish. 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan * 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Equivalent code is available from RSA Data Security, Inc. 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan * This code has been tested against that, and is equivalent, 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan * except that you don't need to include two pages of legalese 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan * with every copy. 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan * 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan * To compute the message digest of a chunk of bytes, declare an 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan * MD5Context structure, pass it to MD5Init, call MD5Update as 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan * needed on buffers full of bytes, and then call MD5Final, which 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan * will fill a supplied 16-byte array with the digest. 16233d2500723e5594f3e7c70896ffeeef32b9c950ywan * 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Changed so as no longer to depend on Colin Plumb's `usual.h' 18233d2500723e5594f3e7c70896ffeeef32b9c950ywan * header definitions 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan * - Ian Jackson <ian@chiark.greenend.org.uk>. 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Still in the public domain. 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan */ 22233d2500723e5594f3e7c70896ffeeef32b9c950ywan 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifndef MD5_UTILS_H_ 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define MD5_UTILS_H_ 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus 27233d2500723e5594f3e7c70896ffeeef32b9c950ywanextern "C" { 28233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan 30233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define md5byte unsigned char 31233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define UWORD32 unsigned int 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan 33233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef struct MD5Context MD5Context; 34233d2500723e5594f3e7c70896ffeeef32b9c950ywanstruct MD5Context { 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan UWORD32 buf[4]; 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan UWORD32 bytes[2]; 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan UWORD32 in[16]; 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan}; 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan 40233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid MD5Init(struct MD5Context *context); 41233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid MD5Update(struct MD5Context *context, md5byte const *buf, unsigned len); 42233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid MD5Final(unsigned char digest[16], struct MD5Context *context); 43233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid MD5Transform(UWORD32 buf[4], UWORD32 const in[16]); 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan} // extern "C" 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 48233d2500723e5594f3e7c70896ffeeef32b9c950ywan 49233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif // MD5_UTILS_H_ 50