summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/basic.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/tests/basic.c b/tests/basic.c
index f3105de4..8400f9ed 100644
--- a/tests/basic.c
+++ b/tests/basic.c
@@ -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);