srecord MD5(long a, long b) { *(byte[] data) { loadDigest(md5AsByteArray(data)); } *(File f) { loadDigest(md5OfFileAsByteArray(f)); } // md5 is the digest, not the data being checksummed static MD5 ofDigest(byte[] digest) { ret new MD5().loadDigest(digest); } selfType loadDigest(byte[] digest) { assertEquals("MD5 digest", 16, l(digest)); a = longFromBytes_bigEndian(digest, 0); b = longFromBytes_bigEndian(digest, 8); this; } *(S md5) { this(parseHexBytes(md5)); } toString { ret "MD5=" + longToHex(a) + longToHex(b); } }