diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2016-03-11 18:09:22 +0000 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2016-07-04 10:47:09 +0100 |
commit | 0c16c056a4f9dec18fdd56feec82a5db9ff3c15e (patch) | |
tree | c670217045b5766136a86cb3612feda66fce64b1 /tests/test-crypto-hash.c | |
parent | 8cbfc94269e37a001d501cca3f4e4cb4ba6dbe0a (diff) | |
download | qemu-0c16c056a4f9dec18fdd56feec82a5db9ff3c15e.zip qemu-0c16c056a4f9dec18fdd56feec82a5db9ff3c15e.tar.gz qemu-0c16c056a4f9dec18fdd56feec82a5db9ff3c15e.tar.bz2 |
crypto: switch hash code to use nettle/gcrypt directly
Currently the internal hash code is using the gnutls hash APIs.
GNUTLS in turn is wrapping either nettle or gcrypt. Not only
were the GNUTLS hash APIs not added until GNUTLS 2.9.10, but
they don't expose support for all the algorithms QEMU needs
to use with LUKS.
Address this by directly wrapping nettle/gcrypt in QEMU and
avoiding GNUTLS's extra layer of indirection. This gives us
support for hash functions on a much wider range of platforms
and opens up ability to support more hash functions. It also
avoids a GNUTLS bug which would not correctly handle hashing
of large data blocks if int != size_t.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Diffstat (limited to 'tests/test-crypto-hash.c')
-rw-r--r-- | tests/test-crypto-hash.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/tests/test-crypto-hash.c b/tests/test-crypto-hash.c index 6e0e89f..8a55e74 100644 --- a/tests/test-crypto-hash.c +++ b/tests/test-crypto-hash.c @@ -68,6 +68,10 @@ static void test_hash_alloc(void) int ret; size_t j; + if (!qcrypto_hash_supports(i)) { + continue; + } + ret = qcrypto_hash_bytes(i, INPUT_TEXT, strlen(INPUT_TEXT), @@ -98,6 +102,10 @@ static void test_hash_prealloc(void) int ret; size_t j; + if (!qcrypto_hash_supports(i)) { + continue; + } + resultlen = expected_lens[i]; result = g_new0(uint8_t, resultlen); @@ -137,6 +145,10 @@ static void test_hash_iov(void) int ret; size_t j; + if (!qcrypto_hash_supports(i)) { + continue; + } + ret = qcrypto_hash_bytesv(i, iov, 3, &result, @@ -165,6 +177,10 @@ static void test_hash_digest(void) char *digest; size_t digestsize; + if (!qcrypto_hash_supports(i)) { + continue; + } + digestsize = qcrypto_hash_digest_len(i); g_assert_cmpint(digestsize * 2, ==, strlen(expected_outputs[i])); @@ -175,7 +191,7 @@ static void test_hash_digest(void) &digest, NULL); g_assert(ret == 0); - g_assert(g_str_equal(digest, expected_outputs[i])); + g_assert_cmpstr(digest, ==, expected_outputs[i]); g_free(digest); } } @@ -191,13 +207,17 @@ static void test_hash_base64(void) int ret; char *digest; + if (!qcrypto_hash_supports(i)) { + continue; + } + ret = qcrypto_hash_base64(i, INPUT_TEXT, strlen(INPUT_TEXT), &digest, NULL); g_assert(ret == 0); - g_assert(g_str_equal(digest, expected_outputs_b64[i])); + g_assert_cmpstr(digest, ==, expected_outputs_b64[i]); g_free(digest); } } |