#ifndef   _MD5_H
#define  _MD5_H

/* Use
    checksum::md5_context ctx;
    checksum::md5_starts(&ctx);
    unsigned char ch[]="To be or not to be.\n";
    checksum::md5_update(&ctx,  ch, strlen((const char *)ch));
    unsigned char diggest[16];
    checksum::md5_finish(&ctx,diggest);
    for(int i=0; i<16; i++)
    {
        if (diggest[i]<16) printf("0");
        printf("%X", diggest[i]);
    }
    printf("\n");

 */
#include "base.h"
namespace checksum
{

  typedef struct
   {
    uint32 total[ 2 ];
    uint32 state[ 4 ];
    uint8 buffer[ 64 ];
  }
  md5_context;

  void  md5_starts( md5_context *ctx );
  void  md5_update( md5_context *ctx, uint8 *input, uint32 length );
  void md5_finish( md5_context *ctx, uint8 digest[16 ] );
}

#endif  /* md5.h */
