#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <sys/time.h>
#include <assert.h>

#include <md5.h>

#define RND_BUF_SZ 1<<20

void
md_print(char *digest)
{
	int i;
	for(i=0;i<16;i++) { printf("%02x%c", *(digest+i) & 0xff, i == 15 ? '\n' : ' '); }
}

int 
main(int argc, char *argv[])
{
	MD5_CTX m;
	char *buf;
	char first_digest[16];
	char later_digest[16];
	int i;
	unsigned int u;

	buf = malloc(RND_BUF_SZ);
	i = read(open("/dev/urandom", 0), buf, RND_BUF_SZ);
	fprintf(stderr, "read %d random bytes\n", i);
	MD5Init(&m);
	MD5Update(&m, buf, RND_BUF_SZ);
	MD5Final(first_digest, &m);
	md_print(first_digest);

	for (u=0;u<1000000;u++) {
		MD5Init(&m);
		MD5Update(&m, buf, RND_BUF_SZ);
		MD5Final(later_digest, &m);
		/* md_print(later_digest); */
		if (memcmp(first_digest, later_digest, 16)) {
			fprintf(stderr, "Digests differ after %d iterations!\n", u);
		}
	}
	return 0;
}

