Use more odd chuck sizes for check_one_md
authorJussi Kivilinna <jussi.kivilinna@iki.fi>
Fri, 1 May 2015 11:55:58 +0000 (14:55 +0300)
committerJussi Kivilinna <jussi.kivilinna@iki.fi>
Fri, 1 May 2015 12:06:57 +0000 (15:06 +0300)
* tests/basic.c (check_one_md): Make chuck size vary oddly, instead
of using fixed length of 1000 bytes.
--

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
tests/basic.c

index f3105de..8400f9e 100644 (file)
@@ -5231,11 +5231,29 @@ check_one_md (int algo, const char *data, int len, const char *expect)
   if (*data == '!' && !data[1])
     {                          /* hash one million times a "a" */
       char aaa[1000];
+      size_t left = 1000 * 1000;
+      size_t startlen = 1;
+      size_t piecelen = startlen;
 
-      /* Write in odd size chunks so that we test the buffering.  */
       memset (aaa, 'a', 1000);
-      for (i = 0; i < 1000; i++)
-        gcry_md_write (hd, aaa, 1000);
+
+      /* Write in odd size chunks so that we test the buffering.  */
+      while (left > 0)
+        {
+          if (piecelen > sizeof(aaa))
+            piecelen = sizeof(aaa);
+          if (piecelen > left)
+            piecelen = left;
+
+          gcry_md_write (hd, aaa, piecelen);
+
+          left -= piecelen;
+
+          if (piecelen == sizeof(aaa))
+            piecelen = ++startlen;
+          else
+            piecelen = piecelen * 2 - ((piecelen != startlen) ? startlen : 0);
+        }
     }
   else
     gcry_md_write (hd, data, len);