[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 08/15] tests/unit/test-crypto-hash: accumulative hashing
From: |
Alejandro Zeise |
Subject: |
[PATCH v4 08/15] tests/unit/test-crypto-hash: accumulative hashing |
Date: |
Wed, 7 Aug 2024 19:51:15 +0000 |
Added an accumulative hashing test. Checks for functionality of
the new hash create, update, finalize and free functions.
Signed-off-by: Alejandro Zeise <alejandro.zeise@seagate.com>
---
tests/unit/test-crypto-hash.c | 48 +++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/tests/unit/test-crypto-hash.c b/tests/unit/test-crypto-hash.c
index 1f4abb822b..2bf9bcb6a0 100644
--- a/tests/unit/test-crypto-hash.c
+++ b/tests/unit/test-crypto-hash.c
@@ -1,6 +1,7 @@
/*
* QEMU Crypto hash algorithms
*
+ * Copyright (c) 2024 Seagate Technology LLC and/or its Affiliates
* Copyright (c) 2015 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
@@ -241,6 +242,52 @@ static void test_hash_base64(void)
}
}
+static void test_hash_accumulate(void)
+{
+ QCryptoHash *hash;
+ size_t i;
+
+ for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
+ struct iovec iov[3] = {
+ { .iov_base = (char *)INPUT_TEXT1, .iov_len = strlen(INPUT_TEXT1)
},
+ { .iov_base = (char *)INPUT_TEXT2, .iov_len = strlen(INPUT_TEXT2)
},
+ { .iov_base = (char *)INPUT_TEXT3, .iov_len = strlen(INPUT_TEXT3)
},
+ };
+ uint8_t *result = NULL;
+ size_t resultlen = 0;
+ int ret;
+ size_t j;
+
+ if (!qcrypto_hash_supports(i)) {
+ continue;
+ }
+
+ hash = qcrypto_hash_new(i, &error_fatal);
+ g_assert(hash != NULL);
+
+ /* Add each iovec to the hash context separately */
+ for (j = 0; j < 3; j++) {
+ ret = qcrypto_hash_updatev(hash,
+ &iov[j], 1,
+ &error_fatal);
+
+ g_assert(ret == 0);
+ }
+
+ ret = qcrypto_hash_finalize_bytes(hash, &result, &resultlen,
+ &error_fatal);
+
+ g_assert(ret == 0);
+ g_assert(resultlen == expected_lens[i]);
+ for (j = 0; j < resultlen; j++) {
+ g_assert(expected_outputs[i][j * 2] == hex[(result[j] >> 4) &
0xf]);
+ g_assert(expected_outputs[i][j * 2 + 1] == hex[result[j] & 0xf]);
+ }
+ g_free(result);
+ qcrypto_hash_free(hash);
+ }
+}
+
int main(int argc, char **argv)
{
int ret = qcrypto_init(&error_fatal);
@@ -252,5 +299,6 @@ int main(int argc, char **argv)
g_test_add_func("/crypto/hash/prealloc", test_hash_prealloc);
g_test_add_func("/crypto/hash/digest", test_hash_digest);
g_test_add_func("/crypto/hash/base64", test_hash_base64);
+ g_test_add_func("/crypto/hash/accumulate", test_hash_accumulate);
return g_test_run();
}
--
2.34.1
- Re: [PATCH v4 03/15] crypto/hash-gcrypt: Implement new hash API, (continued)
- [PATCH v4 04/15] crypto/hash-gnutls: Implement new hash API, Alejandro Zeise, 2024/08/07
- [PATCH v4 05/15] crypto/hash-nettle: Implement new hash API, Alejandro Zeise, 2024/08/07
- [PATCH v4 06/15] crypto/hash-afalg: Implement new hash API, Alejandro Zeise, 2024/08/07
- [PATCH v4 09/15] crypto/hash-glib: Remove old hash API functions, Alejandro Zeise, 2024/08/07
- [PATCH v4 07/15] crypto/hash: Implement and use new hash API, Alejandro Zeise, 2024/08/07
- [PATCH v4 08/15] tests/unit/test-crypto-hash: accumulative hashing,
Alejandro Zeise <=
- [PATCH v4 10/15] crypto/hash-gcrypt: Remove old hash API functions, Alejandro Zeise, 2024/08/07
- [PATCH v4 12/15] crypto/hash-nettle: Remove old hash API functions, Alejandro Zeise, 2024/08/07
- [PATCH v4 13/15] crypto/hash-afalg: Remove old hash API functions, Alejandro Zeise, 2024/08/07
- [PATCH v4 11/15] crypto/hash-gnutls: Remove old hash API functions, Alejandro Zeise, 2024/08/07
- [PATCH v4 14/15] crypto/hashpriv: Remove old hash API function, Alejandro Zeise, 2024/08/07