/* md5.h - Exports and Data Strutures for md5.c */

#define _ARISA_MD5_H

#ifndef U32
#define U32 uint32_t
#endif/*U32*/

#ifndef U16 
#define U16 uint16_t
#endif/*U16*/

#ifndef U8
#define U8 uint8_t
#endif/*U8*/

typedef struct {
  U32 signature;   /* safer cast in get_md5_ctx() */
  U32 A, B, C, D;  /* current digest */
  U32 bytes_low;   /* counts bytes in message */
  U32 bytes_high;  /* turn it into a 64-bit counter */
  U8 buffer[128];  /* collect complete 64 byte blocks */
} MD5_CTX;

void MD5Init(MD5_CTX *ctx);
void MD5Transform(MD5_CTX* ctx, const U8* buf, size_t blocks);
void MD5Update(MD5_CTX* ctx, const U8* buf, size_t len);
void MD5Final(U8* digest, MD5_CTX *ctx);
