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