summaryrefslogtreecommitdiff
path: root/tests/basic.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2013-09-07 10:06:46 +0200
committerWerner Koch <wk@gnupg.org>2013-09-10 22:09:15 +0200
commitf3bca0c77c4979504f95fdbc618f7458e61e3e45 (patch)
tree9001cc1a8709dbe0f80ab3747ab062ac15e67246 /tests/basic.c
parent0a28b2d2c9181a536fc894e24626714832619923 (diff)
downloadlibgcrypt-f3bca0c77c4979504f95fdbc618f7458e61e3e45.tar.gz
md: Add function gcry_md_hash_buffers.
* src/gcrypt.h.in (gcry_buffer_t): new. (gcry_md_hash_buffers): New. * src/visibility.c, src/visibility.h: Add wrapper for new function. * src/libgcrypt.def, src/libgcrypt.vers: Export new function. * cipher/md.c (gcry_md_hash_buffers): New. * cipher/sha1.c (_gcry_sha1_hash_buffers): New. * tests/basic.c (check_one_md_multi): New. (check_digests): Run that test. * tests/hmac.c (check_hmac_multi): New. (main): Run that test. Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'tests/basic.c')
-rw-r--r--tests/basic.c78
1 files changed, 73 insertions, 5 deletions
diff --git a/tests/basic.c b/tests/basic.c
index 4fbca43b..26c85caf 100644
--- a/tests/basic.c
+++ b/tests/basic.c
@@ -2522,6 +2522,72 @@ check_one_md (int algo, const char *data, int len, const char *expect)
static void
+check_one_md_multi (int algo, const char *data, int len, const char *expect)
+{
+ gpg_error_t err;
+ gcry_buffer_t iov[3];
+ int iovcnt;
+ char digest[64];
+ int mdlen;
+ int i;
+
+ mdlen = gcry_md_get_algo_dlen (algo);
+ if (mdlen < 1 || mdlen > 64)
+ {
+ fail ("check_one_md_multi: algo %d, gcry_md_get_algo_dlen failed: %d\n",
+ algo, mdlen);
+ return;
+ }
+
+ if (*data == '!' && !data[1])
+ return; /* We can't do that here. */
+
+ memset (iov, 0, sizeof iov);
+
+ iov[0].data = (void*)data;
+ if (len)
+ {
+ iov[0].len = 1;
+ len--;
+ data++;
+ }
+ iovcnt = 1;
+ if (len >= 4)
+ {
+ iov[iovcnt].data = (void*)data;
+ iov[iovcnt].len = 4;
+ iovcnt++;
+ data += 4;
+ len -= 4;
+ }
+ iov[iovcnt].data = (void*)data;
+ iov[iovcnt].len = len;
+ iovcnt++;
+ assert (iovcnt <= DIM (iov));
+
+ err = gcry_md_hash_buffers (algo, 0, digest, iov, iovcnt);
+ if (err)
+ {
+ fail ("check_one_md_multi: algo %d, gcry_hash_buffers failed: %s\n",
+ algo, gpg_strerror (err));
+ return;
+ }
+ if (memcmp (digest, expect, mdlen))
+ {
+ printf ("computed: ");
+ for (i = 0; i < mdlen; i++)
+ printf ("%02x ", digest[i] & 0xFF);
+ printf ("\nexpected: ");
+ for (i = 0; i < mdlen; i++)
+ printf ("%02x ", expect[i] & 0xFF);
+ printf ("\n");
+
+ fail ("check_one_md_multi: algo %d, digest mismatch\n", algo);
+ }
+}
+
+
+static void
check_digests (void)
{
static struct algos
@@ -2742,11 +2808,11 @@ check_digests (void)
"\x08\xEB\xA2\x66\x29\x12\x9D\x8F\xB7\xCB\x57\x21\x1B\x92\x81\xA6"
"\x55\x17\xCC\x87\x9D\x7B\x96\x21\x42\xC6\x5F\x5A\x7A\xF0\x14\x67" },
{ GCRY_MD_WHIRLPOOL,
- "!",
- "\x0C\x99\x00\x5B\xEB\x57\xEF\xF5\x0A\x7C\xF0\x05\x56\x0D\xDF\x5D"
- "\x29\x05\x7F\xD8\x6B\x20\xBF\xD6\x2D\xEC\xA0\xF1\xCC\xEA\x4A\xF5"
- "\x1F\xC1\x54\x90\xED\xDC\x47\xAF\x32\xBB\x2B\x66\xC3\x4F\xF9\xAD"
- "\x8C\x60\x08\xAD\x67\x7F\x77\x12\x69\x53\xB2\x26\xE4\xED\x8B\x01" },
+ "!",
+ "\x0C\x99\x00\x5B\xEB\x57\xEF\xF5\x0A\x7C\xF0\x05\x56\x0D\xDF\x5D"
+ "\x29\x05\x7F\xD8\x6B\x20\xBF\xD6\x2D\xEC\xA0\xF1\xCC\xEA\x4A\xF5"
+ "\x1F\xC1\x54\x90\xED\xDC\x47\xAF\x32\xBB\x2B\x66\xC3\x4F\xF9\xAD"
+ "\x8C\x60\x08\xAD\x67\x7F\x77\x12\x69\x53\xB2\x26\xE4\xED\x8B\x01" },
{ 0 },
};
int i;
@@ -2773,6 +2839,8 @@ check_digests (void)
check_one_md (algos[i].md, algos[i].data, strlen (algos[i].data),
algos[i].expect);
+ check_one_md_multi (algos[i].md, algos[i].data, strlen (algos[i].data),
+ algos[i].expect);
}
if (verbose)