#include "testutils.h"
#include "md5-compat.h"

int
test_main(void)
{
  MD5_CTX ctx;
  unsigned char digest[MD5_DIGEST_SIZE];

  MD5Init(&ctx);
  MD5Final(digest, &ctx);
  if (!MEMEQ(MD5_DIGEST_SIZE, digest, H("D41D8CD98F00B204 E9800998ECF8427E")))
    FAIL();

  MD5Init(&ctx);
  MD5Update(&ctx, "a", 1);
  MD5Final(digest, &ctx);

  if (!MEMEQ(MD5_DIGEST_SIZE, digest, H("0CC175B9C0F1B6A8 31C399E269772661")))
    FAIL();

  MD5Init(&ctx);
  MD5Update(&ctx, "abc", 3);
  MD5Final(digest, &ctx);

  if (!MEMEQ(MD5_DIGEST_SIZE, digest, H("900150983cd24fb0 D6963F7D28E17F72")))
    FAIL();

  MD5Init(&ctx);
  MD5Update(&ctx, "message digest", 14);
  MD5Final(digest, &ctx);

  if (!MEMEQ(MD5_DIGEST_SIZE, digest, H("F96B697D7CB7938D 525A2F31AAF161D0")))
    FAIL();

  MD5Init(&ctx);
  MD5Update(&ctx, "abcdefghijklmnopqrstuvwxyz", 26);
  MD5Final(digest, &ctx);

  if (!MEMEQ(MD5_DIGEST_SIZE, digest, H("C3FCD3D76192E400 7DFB496CCA67E13B")))
    FAIL();

  MD5Init(&ctx);
  MD5Update(&ctx, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 62);
  MD5Final(digest, &ctx);

  if (!MEMEQ(MD5_DIGEST_SIZE, digest, H("D174AB98D277D9F5 A5611C2C9F419D9F")))
    FAIL();

  MD5Init(&ctx);
  MD5Update(&ctx, "1234567890123456789012345678901234567890"
	    "1234567890123456789012345678901234567890",
	    80);
  MD5Final(digest, &ctx);

  if (!MEMEQ(MD5_DIGEST_SIZE, digest, H("57EDF4A22BE3C955 AC49DA2E2107B67A")))
    FAIL();

  SUCCESS();
}
