diff --git a/testsuite/hmac-test.c b/testsuite/hmac-test.c
index 84735dd51b2b5a091e2bd05ee35c4bcc7cc8bdde..637f140e874d70ac02e2fde43142a7d4b0c8a0d5 100644
--- a/testsuite/hmac-test.c
+++ b/testsuite/hmac-test.c
@@ -1,6 +1,14 @@
 #include "testutils.h"
 #include "hmac.h"
 
+/* KEY and MSG are supposed to expand to length, data */ 
+#define HMAC_TEST(alg, length, key, msg, mac) do {	\
+  hmac_##alg##_set_key(&alg, key);			\
+  hmac_##alg##_update(&alg, msg);			\
+  hmac_##alg##_digest(&alg, length, digest);		\
+  ASSERT(MEMEQ (length, digest, mac));			\
+} while (0)
+
 int
 test_main(void)
 {
@@ -17,172 +25,209 @@ test_main(void)
   /* Test vectors for md5, from RFC-2202 */
 
   /* md5 - 1 */
-  hmac_md5_set_key(&md5, HL("0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b"));
-  hmac_md5_update(&md5, LDATA("Hi There"));
-  hmac_md5_digest(&md5, MD5_DIGEST_SIZE, digest);
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    HL("0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b"),
+	    LDATA("Hi There"),
+	    H("9294727a3638bb1c 13f48ef8158bfc9d"));
 
-  if (!MEMEQ(MD5_DIGEST_SIZE, digest,
-	     H("9294727a3638bb1c 13f48ef8158bfc9d")))
-    FAIL();
 
   /* md5 - 2 */
-  hmac_md5_set_key(&md5, LDATA("Jefe"));
-  hmac_md5_update(&md5, LDATA("what do ya want for nothing?"));
-  hmac_md5_digest(&md5, MD5_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(MD5_DIGEST_SIZE, digest,
-	     H("750c783e6ab0b503 eaa86e310a5db738")))
-    FAIL();
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("Jefe"),
+	    LDATA("what do ya want for nothing?"),
+	    H("750c783e6ab0b503 eaa86e310a5db738"));	    
 
   /* md5 - 3 */
-  hmac_md5_set_key(&md5, HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"));
-  hmac_md5_update(&md5, HL("dddddddddddddddd dddddddddddddddd"
-			   "dddddddddddddddd dddddddddddddddd"
-			   "dddddddddddddddd dddddddddddddddd"
-			   "dddd"));
-  hmac_md5_digest(&md5, MD5_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(MD5_DIGEST_SIZE, digest,
-	     H("56be34521d144c88 dbb8c733f0e8b3f6")))
-    FAIL();
-
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
+	    HL("dddddddddddddddd dddddddddddddddd"
+	       "dddddddddddddddd dddddddddddddddd"
+	       "dddddddddddddddd dddddddddddddddd"
+	       "dddd"),
+	    H("56be34521d144c88 dbb8c733f0e8b3f6"));
+  
   /* md5 - 4 */
-  hmac_md5_set_key(&md5, HL("0102030405060708 090a0b0c0d0e0f10" 
-			    "1112131415161718 19"));
-  hmac_md5_update(&md5, HL("cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
-			   "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
-			   "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
-			   "cdcd"));
-  hmac_md5_digest(&md5, MD5_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(MD5_DIGEST_SIZE, digest,
-	     H("697eaf0aca3a3aea 3a75164746ffaa79")))
-    FAIL();
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    HL("0102030405060708 090a0b0c0d0e0f10" 
+	       "1112131415161718 19"),
+	    HL("cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
+	       "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
+	       "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
+	       "cdcd"),
+	    H("697eaf0aca3a3aea 3a75164746ffaa79"));
 
   /* md5 - 5 */
   memset(digest, 0, MD5_DIGEST_SIZE);
   hmac_md5_set_key(&md5, HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c" ));
   hmac_md5_update(&md5, LDATA("Test With Truncation"));
   hmac_md5_digest(&md5, 12, digest);
-
-  if (!MEMEQ(MD5_DIGEST_SIZE, digest,
-	     H("56461ef2342edc00 f9bab99500000000")))
-    FAIL();
+  ASSERT(MEMEQ(MD5_DIGEST_SIZE, digest,
+	       H("56461ef2342edc00 f9bab99500000000")));
 
   /* md5 - 6 */
-  hmac_md5_set_key(&md5, HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			    "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			    "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			    "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			    "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"));
-  hmac_md5_update(&md5,
-		  LDATA("Test Using Larger Than Block-Size Key - Hash Key First"));
-  hmac_md5_digest(&md5, MD5_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(MD5_DIGEST_SIZE, digest,
-	     H("6b1ab7fe4bd7bf8f 0b62e6ce61b9d0cd")))
-    FAIL();
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
+	    LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
+	    H("6b1ab7fe4bd7bf8f 0b62e6ce61b9d0cd"));
 
   /* md5 - 7 */
-  hmac_md5_set_key(&md5, HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			    "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			    "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			    "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			    "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"));
-  hmac_md5_update(&md5,
-		  LDATA("Test Using Larger Than Block-Size Key and Larger "
-			"Than One Block-Size Data"));
-  hmac_md5_digest(&md5, MD5_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(MD5_DIGEST_SIZE, digest,
-	     H("6f630fad67cda0ee 1fb1f562db3aa53e")))
-    FAIL();
-
-
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
+	    LDATA("Test Using Larger Than Block-Size Key and Larger "
+		  "Than One Block-Size Data"),
+	    H("6f630fad67cda0ee 1fb1f562db3aa53e"));
+
+  /* Additional test vectors, from Daniel Kahn Gillmor */
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA(""),
+	    H("e84db42a188813f30a15e611d64c7869"));
+  
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("a"),
+	    H("123662062e67c2aab371cc49db0df134"));
+  
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("38"),
+	    H("0a46cc10a49d4b7025c040c597bf5d76"));
+  
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("abc"),
+	    H("d1f4d89f0e8b2b6ed0623c99ec298310"));
+  
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("message digest"),
+	    H("1627207b9bed5009a4f6e9ca8d2ca01e"));
+  
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("abcdefghijklmnopqrstuvwxyz"),
+	    H("922aae6ab3b3a29202e21ce5f916ae9a"));
+
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),
+	    H("ede9cb83679ba82d88fbeae865b3f8fc"));
+
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),
+	    H("939dd45512ee3a594b6654f6b8de27f7"));
+  
   /* Test vectors for sha1, from RFC-2202 */
 
   /* sha1 - 1 */
-  hmac_sha1_set_key(&sha1, HL("0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b 0b0b0b0b"));
-  hmac_sha1_update(&sha1, LDATA("Hi There"));
-  hmac_sha1_digest(&sha1, SHA1_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA1_DIGEST_SIZE, digest,
-	     H("b617318655057264 e28bc0b6fb378c8e f146be00")))
-    FAIL();
+  HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
+	    HL("0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b 0b0b0b0b"),
+	    LDATA("Hi There"),
+	    H("b617318655057264 e28bc0b6fb378c8e f146be00"));
 
   /* sha1 - 2 */
-  hmac_sha1_set_key(&sha1, LDATA("Jefe"));
-  hmac_sha1_update(&sha1, LDATA("what do ya want for nothing?"));
-  hmac_sha1_digest(&sha1, SHA1_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA1_DIGEST_SIZE, digest,
-	     H("effcdf6ae5eb2fa2 d27416d5f184df9c 259a7c79")))
-    FAIL();
+  HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
+	    LDATA("Jefe"),
+	    LDATA("what do ya want for nothing?"),
+	    H("effcdf6ae5eb2fa2 d27416d5f184df9c 259a7c79"));
 
   /* sha1 - 3 */
-  hmac_sha1_set_key(&sha1, HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaa"));
-  hmac_sha1_update(&sha1, HL("dddddddddddddddd dddddddddddddddd"
-			     "dddddddddddddddd dddddddddddddddd"
-			     "dddddddddddddddd dddddddddddddddd"
-			     "dddd"));
-  hmac_sha1_digest(&sha1, SHA1_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA1_DIGEST_SIZE, digest,
-	     H("125d7342b9ac11cd 91a39af48aa17b4f 63f175d3")))
-    FAIL();
+  HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
+	    HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaa"),
+	    HL("dddddddddddddddd dddddddddddddddd"
+	       "dddddddddddddddd dddddddddddddddd"
+	       "dddddddddddddddd dddddddddddddddd"
+	       "dddd"),
+	    H("125d7342b9ac11cd 91a39af48aa17b4f 63f175d3"));
 
   /* sha1 - 4 */
-  hmac_sha1_set_key(&sha1, HL("0102030405060708 090a0b0c0d0e0f10" 
-			      "1112131415161718 19"));
-  hmac_sha1_update(&sha1, HL("cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
-			     "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
-			     "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
-			     "cdcd"));
-  hmac_sha1_digest(&sha1, SHA1_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA1_DIGEST_SIZE, digest,
-	     H("4c9007f4026250c6 bc8414f9bf50c86c 2d7235da")))
-    FAIL();
+  HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
+	    HL("0102030405060708 090a0b0c0d0e0f10" 
+	       "1112131415161718 19"),
+	    HL("cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
+	       "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
+	       "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
+	       "cdcd"),
+	    H("4c9007f4026250c6 bc8414f9bf50c86c 2d7235da"));
 
   /* sha1 - 5 */
   memset(digest, 0, SHA1_DIGEST_SIZE);
   hmac_sha1_set_key(&sha1, HL("0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c 0c0c0c0c"));
   hmac_sha1_update(&sha1, LDATA("Test With Truncation"));
   hmac_sha1_digest(&sha1, 12, digest);
-
-  if (!MEMEQ(SHA1_DIGEST_SIZE, digest,
-	     H("4c1a03424b55e07f e7f27be100000000 00000000")))
-    FAIL();
+  ASSERT(MEMEQ(SHA1_DIGEST_SIZE, digest,
+	       H("4c1a03424b55e07f e7f27be100000000 00000000")));
 
   /* sha1 - 6 */
-  hmac_sha1_set_key(&sha1, HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			      "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			      "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			      "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			      "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"));
-  hmac_sha1_update(&sha1,
-		   LDATA("Test Using Larger Than Block-Size Key - Hash Key First"));
-  hmac_sha1_digest(&sha1, SHA1_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA1_DIGEST_SIZE, digest,
-	     H("aa4ae5e15272d00e 95705637ce8a3b55 ed402112")))
-    FAIL();
+  HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
+	    HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
+	    LDATA("Test Using Larger Than Block-Size Key - Hash Key First"),
+	    H("aa4ae5e15272d00e 95705637ce8a3b55 ed402112"));
 
   /* sha1 - 7 */
-  hmac_sha1_set_key(&sha1, HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			      "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			      "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			      "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
-			      "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"));
-  hmac_sha1_update(&sha1,
-		  LDATA("Test Using Larger Than Block-Size Key and Larger "
-			"Than One Block-Size Data"));
-  hmac_sha1_digest(&sha1, SHA1_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA1_DIGEST_SIZE, digest,
-	     H("e8e99d0f45237d78 6d6bbaa7965c7808 bbff1a91")))
-    FAIL();
-
+  HMAC_TEST(sha1, SHA1_DIGEST_SIZE,
+	    HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
+	       "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"),
+	    LDATA("Test Using Larger Than Block-Size Key and Larger "
+		  "Than One Block-Size Data"),
+	    H("e8e99d0f45237d78 6d6bbaa7965c7808 bbff1a91"));
+
+  /* Additional test vectors, from Daniel Kahn Gillmor */
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA(""),
+	    H("e84db42a188813f30a15e611d64c7869"));
+  
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("a"),
+	    H("123662062e67c2aab371cc49db0df134"));
+  
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("38"),
+	    H("0a46cc10a49d4b7025c040c597bf5d76"));
+  
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("abc"),
+	    H("d1f4d89f0e8b2b6ed0623c99ec298310"));
+  
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("message digest"),
+	    H("1627207b9bed5009a4f6e9ca8d2ca01e"));
+  
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("abcdefghijklmnopqrstuvwxyz"),
+	    H("922aae6ab3b3a29202e21ce5f916ae9a"));
+
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"),
+	    H("ede9cb83679ba82d88fbeae865b3f8fc"));
+
+  HMAC_TEST(md5, MD5_DIGEST_SIZE,
+	    LDATA("monkey monkey monkey monkey"),
+	    LDATA("12345678901234567890123456789012345678901234567890123456789012345678901234567890"),
+	    H("939dd45512ee3a594b6654f6b8de27f7"));
 
   /* Test vectors for sha256, from draft-ietf-ipsec-ciph-sha-256-01.txt */
 
@@ -191,11 +236,9 @@ test_main(void)
 				  "1112131415161718 191a1b1c1d1e1f20"));
   hmac_sha256_update(&sha256, LDATA("abc"));
   hmac_sha256_digest(&sha256, SHA256_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA256_DIGEST_SIZE, digest,
-	     H("a21b1f5d4cf4f73a 4dd939750f7a066a"
-	       "7f98cc131cb16a66 92759021cfab8181")))
-    FAIL();
+  ASSERT(MEMEQ(SHA256_DIGEST_SIZE, digest,
+	       H("a21b1f5d4cf4f73a 4dd939750f7a066a"
+		 "7f98cc131cb16a66 92759021cfab8181")));
 
   /* Test Case #2: HMAC-SHA-256 with 56-byte input and 32-byte key */
   hmac_sha256_set_key(&sha256, HL("0102030405060708 090a0b0c0d0e0f10"
@@ -203,11 +246,9 @@ test_main(void)
   hmac_sha256_update(&sha256, LDATA("abcdbcdecdefdefgefghfghighijhijk"
 				    "ijkljklmklmnlmnomnopnopq"));
   hmac_sha256_digest(&sha256, SHA256_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA256_DIGEST_SIZE, digest,
-	     H("104fdc1257328f08 184ba73131c53cae"
-	       "e698e36119421149 ea8c712456697d30")))
-    FAIL();
+  ASSERT(MEMEQ(SHA256_DIGEST_SIZE, digest,
+	       H("104fdc1257328f08 184ba73131c53cae"
+		 "e698e36119421149 ea8c712456697d30")));
 
   /* Test Case #3: HMAC-SHA-256 with 112-byte (multi-block) input
      and 32-byte key */
@@ -218,32 +259,26 @@ test_main(void)
 				    "cdefdefgefghfghighijhijkijkljklm"
 				    "klmnlmnomnopnopq"));
   hmac_sha256_digest(&sha256, SHA256_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA256_DIGEST_SIZE, digest,
-	     H("470305fc7e40fe34 d3eeb3e773d95aab"
-	       "73acf0fd060447a5 eb4595bf33a9d1a3")))
-    FAIL();
+  ASSERT(MEMEQ(SHA256_DIGEST_SIZE, digest,
+	       H("470305fc7e40fe34 d3eeb3e773d95aab"
+		 "73acf0fd060447a5 eb4595bf33a9d1a3")));
 
   /* Test Case #4:  HMAC-SHA-256 with 8-byte input and 32-byte key */
   hmac_sha256_set_key(&sha256, HL("0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b"
 				  "0b0b0b0b0b0b0b0b 0b0b0b0b0b0b0b0b"));
   hmac_sha256_update(&sha256, LDATA("Hi There"));
   hmac_sha256_digest(&sha256, SHA256_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA256_DIGEST_SIZE, digest,
-	     H("198a607eb44bfbc6 9903a0f1cf2bbdc5"
-	       "ba0aa3f3d9ae3c1c 7a3b1696a0b68cf7")))
-    FAIL();
+  ASSERT(MEMEQ(SHA256_DIGEST_SIZE, digest,
+	       H("198a607eb44bfbc6 9903a0f1cf2bbdc5"
+		 "ba0aa3f3d9ae3c1c 7a3b1696a0b68cf7")));
 
   /* Test Case #5:  HMAC-SHA-256 with 28-byte input and 4-byte key */
   hmac_sha256_set_key(&sha256, LDATA("Jefe"));
   hmac_sha256_update(&sha256, LDATA("what do ya want for nothing?"));
   hmac_sha256_digest(&sha256, SHA256_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA256_DIGEST_SIZE, digest,
-	     H("5bdcc146bf60754e 6a042426089575c7"
-	       "5a003f089d273983 9dec58b964ec3843")))
-    FAIL();
+  ASSERT(MEMEQ(SHA256_DIGEST_SIZE, digest,
+	       H("5bdcc146bf60754e 6a042426089575c7"
+		 "5a003f089d273983 9dec58b964ec3843")));
 
   /* Test Case #6: HMAC-SHA-256 with 50-byte input and 32-byte key */
   hmac_sha256_set_key(&sha256, HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
@@ -253,11 +288,9 @@ test_main(void)
 				 "dddddddddddddddd dddddddddddddddd"
 				 "dddd"));
   hmac_sha256_digest(&sha256, SHA256_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA256_DIGEST_SIZE, digest,
-	     H("cdcb1220d1ecccea 91e53aba3092f962"
-	       "e549fe6ce9ed7fdc 43191fbde45c30b0")))
-    FAIL();
+  ASSERT(MEMEQ(SHA256_DIGEST_SIZE, digest,
+	       H("cdcb1220d1ecccea 91e53aba3092f962"
+		 "e549fe6ce9ed7fdc 43191fbde45c30b0")));
 
   /* Test Case #7: HMAC-SHA-256 with 50-byte input and 37-byte key */
   hmac_sha256_set_key(&sha256, HL("0102030405060708 090a0b0c0d0e0f10"
@@ -268,11 +301,9 @@ test_main(void)
 				 "cdcdcdcdcdcdcdcd cdcdcdcdcdcdcdcd"
 				 "cdcd"));
   hmac_sha256_digest(&sha256, SHA256_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA256_DIGEST_SIZE, digest,
-	     H("d4633c17f6fb8d74 4c66dee0f8f07455"
-	       "6ec4af55ef079985 41468eb49bd2e917")))
-    FAIL();
+  ASSERT(MEMEQ(SHA256_DIGEST_SIZE, digest,
+	       H("d4633c17f6fb8d74 4c66dee0f8f07455"
+		 "6ec4af55ef079985 41468eb49bd2e917")));
 
   /* Test Case #8: HMAC-SHA-256 with 20-byte input and 32-byte key */
   memset(digest, 0, SHA256_DIGEST_SIZE);
@@ -280,11 +311,9 @@ test_main(void)
 				  "0c0c0c0c0c0c0c0c 0c0c0c0c0c0c0c0c"));
   hmac_sha256_update(&sha256, LDATA("Test With Truncation"));
   hmac_sha256_digest(&sha256, 16, digest);
-
-  if (!MEMEQ(SHA256_DIGEST_SIZE, digest,
-	     H("7546af01841fc09b 1ab9c3749a5f1c17"
-	       "0000000000000000 0000000000000000")))
-    FAIL();
+  ASSERT(MEMEQ(SHA256_DIGEST_SIZE, digest,
+	       H("7546af01841fc09b 1ab9c3749a5f1c17"
+		 "0000000000000000 0000000000000000")));
 
   /* Test Case #9: HMAC-SHA-256 with 54-byte input and 80-byte key */
   hmac_sha256_set_key(&sha256, HL("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
@@ -293,13 +322,11 @@ test_main(void)
 				  "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
 				  "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"));
   hmac_sha256_update(&sha256, LDATA(
-    "Test Using Larger Than Block-Size Key - Hash Key First"));
+				    "Test Using Larger Than Block-Size Key - Hash Key First"));
   hmac_sha256_digest(&sha256, SHA256_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA256_DIGEST_SIZE, digest,
-	     H("6953025ed96f0c09 f80a96f78e6538db"
-	       "e2e7b820e3dd970e 7ddd39091b32352f")))
-    FAIL();
+  ASSERT(MEMEQ(SHA256_DIGEST_SIZE, digest,
+	       H("6953025ed96f0c09 f80a96f78e6538db"
+		 "e2e7b820e3dd970e 7ddd39091b32352f")));
 
   /* Test Case #10: HMAC-SHA-256 with 73-byte (multi-block) input
      and 80-byte key */
@@ -309,13 +336,11 @@ test_main(void)
 				  "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"
 				  "aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa"));
   hmac_sha256_update(&sha256, LDATA(
-    "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"));
+				    "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"));
   hmac_sha256_digest(&sha256, SHA256_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA256_DIGEST_SIZE, digest,
-	     H("6355ac22e890d0a3 c8481a5ca4825bc8"
-	       "84d3e7a1ff98a2fc 2ac7d8e064c3b2e6")))
-    FAIL();
+  ASSERT(MEMEQ(SHA256_DIGEST_SIZE, digest,
+	       H("6355ac22e890d0a3 c8481a5ca4825bc8"
+		 "84d3e7a1ff98a2fc 2ac7d8e064c3b2e6")));
 
   /* Test vectors for sha512, from draft-kelly-ipsec-ciph-sha2-01.txt */
 
@@ -326,13 +351,11 @@ test_main(void)
 				  "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"));
   hmac_sha512_update(&sha512, LDATA("Hi There"));
   hmac_sha512_digest(&sha512, SHA512_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA512_DIGEST_SIZE, digest,
-	     H("637edc6e01dce7e6742a99451aae82df"
-	       "23da3e92439e590e43e761b33e910fb8"
-	       "ac2878ebd5803f6f0b61dbce5e251ff8"
-	       "789a4722c1be65aea45fd464e89f8f5b")))
-    FAIL();
+  ASSERT(MEMEQ(SHA512_DIGEST_SIZE, digest,
+	       H("637edc6e01dce7e6742a99451aae82df"
+		 "23da3e92439e590e43e761b33e910fb8"
+		 "ac2878ebd5803f6f0b61dbce5e251ff8"
+		 "789a4722c1be65aea45fd464e89f8f5b")));
 
   /* Test case AUTH512-2: */
   hmac_sha512_set_key(&sha512, LDATA("JefeJefeJefeJefe"
@@ -341,13 +364,11 @@ test_main(void)
 				     "JefeJefeJefeJefe"));
   hmac_sha512_update(&sha512, LDATA("what do ya want for nothing?"));
   hmac_sha512_digest(&sha512, SHA512_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA512_DIGEST_SIZE, digest,
-	     H("cb370917ae8a7ce28cfd1d8f4705d614"
-	       "1c173b2a9362c15df235dfb251b15454"
-	       "6aa334ae9fb9afc2184932d8695e397b"
-	       "fa0ffb93466cfcceaae38c833b7dba38")))
-    FAIL();
+  ASSERT(MEMEQ(SHA512_DIGEST_SIZE, digest,
+	       H("cb370917ae8a7ce28cfd1d8f4705d614"
+		 "1c173b2a9362c15df235dfb251b15454"
+		 "6aa334ae9fb9afc2184932d8695e397b"
+		 "fa0ffb93466cfcceaae38c833b7dba38")));
 
   /* Test case AUTH512-3: */
   hmac_sha512_set_key(&sha512, HL("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
@@ -359,15 +380,13 @@ test_main(void)
 				 "dddddddddddddddddddddddddddddddd"
 				 "dddd"));
   hmac_sha512_digest(&sha512, SHA512_DIGEST_SIZE, digest);
-
-  if (!MEMEQ(SHA512_DIGEST_SIZE, digest,
-	     H("2ee7acd783624ca9398710f3ee05ae41"
-	       "b9f9b0510c87e49e586cc9bf961733d8"
-	       "623c7b55cebefccf02d5581acc1c9d5f"
-	       "b1ff68a1de45509fbe4da9a433922655")))
-    FAIL();
+  ASSERT(MEMEQ(SHA512_DIGEST_SIZE, digest,
+	       H("2ee7acd783624ca9398710f3ee05ae41"
+		 "b9f9b0510c87e49e586cc9bf961733d8"
+		 "623c7b55cebefccf02d5581acc1c9d5f"
+		 "b1ff68a1de45509fbe4da9a433922655")));
 
   /* Test case AUTH512-3 from same document seems broken. */
-
+  
   SUCCESS();
 }