1f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch/*
2f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * This is the header file for the MD5 message-digest algorithm.
3f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * The algorithm is due to Ron Rivest.  This code was
4f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * written by Colin Plumb in 1993, no copyright is claimed.
5f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * This code is in the public domain; do with it what you wish.
6f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch *
7f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * Equivalent code is available from RSA Data Security, Inc.
8f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * This code has been tested against that, and is equivalent,
9f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * except that you don't need to include two pages of legalese
10f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * with every copy.
11f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * To compute the message digest of a chunk of bytes, declare an
12f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * MD5Context structure, pass it to MD5Init, call MD5Update as
13f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * needed on buffers full of bytes, and then call MD5Final, which
14f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch * will fill a supplied 16-byte array with the digest.
15f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch *
16f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch */
17f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch
18f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifndef TALK_BASE_MD5_H__
19f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#define TALK_BASE_MD5_H__
20f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch
21f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef __cplusplus
22f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochextern "C" {
23f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif
24f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch
25f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochtypedef long unsigned int uint32;
26f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochtypedef struct MD5Context MD5_CTX;
27f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch
28f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#define md5byte unsigned char
29f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch
30f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochstruct MD5Context {
31f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch  uint32 buf[4];
32f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch  uint32 bits[2];
33f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch  uint32 in[16];
34f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch};
35f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch
36f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochvoid MD5Init(struct MD5Context *context);
37f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochvoid MD5Update(struct MD5Context *context, md5byte const *buf, unsigned len);
38f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochvoid MD5Final(unsigned char digest[16], struct MD5Context *context);
39f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdochvoid MD5Transform(uint32 buf[4], uint32 const in[16]);
40f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch
41f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#ifdef __cplusplus
42f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch};
43f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif
44f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch
45f74420b3285b9fe04a7e00aa3b8c0ab07ea344bcBen Murdoch#endif // TALK_BASE_MD5_H__
46