This is an automated email from the ASF dual-hosted git repository.
xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git
The following commit(s) were added to refs/heads/master by this push:
new 499352fb0 testing/drivers/hash: Add unaligned buffer size test
499352fb0 is described below
commit 499352fb0c2de46113001ab8abd1194531969c30
Author: Peter Barada <[email protected]>
AuthorDate: Tue Jun 2 19:42:55 2026 -0400
testing/drivers/hash: Add unaligned buffer size test
Add hash testing of unaligned buffer sizes via multiple call to
ioctl(CIOCCRYPT) in a single session with buffer sizes incrementally
increasing from zero size to 255 (with monotoncially increasing
byte value data) to force all sizes to be handled by cryptodev
implementations.
Signed-off-by: Peter Barada <[email protected]>
---
testing/drivers/crypto/Kconfig | 29 ++++++
testing/drivers/crypto/hash.c | 207 +++++++++++++++++++++++++++++++++++++++--
2 files changed, 230 insertions(+), 6 deletions(-)
diff --git a/testing/drivers/crypto/Kconfig b/testing/drivers/crypto/Kconfig
index 83d10889b..4ceea2738 100644
--- a/testing/drivers/crypto/Kconfig
+++ b/testing/drivers/crypto/Kconfig
@@ -36,6 +36,10 @@ config TESTING_CRYPTO_HASH_HUGE_BLOCK
bool "hash huge block crypto test"
default y
+config TESTING_CRYPTO_HASH_UNALIGNED_BUFFER_SIZE
+ bool "hash unaligned buffer size test"
+ default y
+
config TESTING_CRYPTO_HASH_DISABLE_MD5
bool "disable md5 tests"
default n
@@ -56,6 +60,31 @@ config TESTING_CRYPTO_HASH_DISABLE_SHA512
bool "disable sha512 tests"
default n
+config TESTING_CRYPTO_HASH_DISABLE_UNALIGNED_MD5
+ bool "disable unaligned md5 tests"
+ depends on !TESTING_CRYPTO_HASH_DISABLE_MD5
+ default n
+
+config TESTING_CRYPTO_HASH_DISABLE_UNALIGNED_SHA1
+ bool "disable unaligned sha1 tests"
+ depends on !TESTING_CRYPTO_HASH_DISABLE_SHA1
+ default n
+
+config TESTING_CRYPTO_HASH_DISABLE_UNALIGNED_SHA224
+ bool "disable unaligned sha224 tests"
+ depends on !TESTING_CRYPTO_HASH_DISABLE_SHA224
+ default n
+
+config TESTING_CRYPTO_HASH_DISABLE_UNALIGNED_SHA256
+ bool "disable unaligned sha256 tests"
+ depends on !TESTING_CRYPTO_HASH_DISABLE_SHA256
+ default n
+
+config TESTING_CRYPTO_HASH_DISABLE_UNALIGNED_SHA512
+ bool "disable unaligned sha512 tests"
+ depends on !TESTING_CRYPTO_HASH_DISABLE_SHA512
+ default n
+
endif
config TESTING_CRYPTO_CRC32
diff --git a/testing/drivers/crypto/hash.c b/testing/drivers/crypto/hash.c
index 1638bed70..afa7e94fe 100644
--- a/testing/drivers/crypto/hash.c
+++ b/testing/drivers/crypto/hash.c
@@ -295,6 +295,69 @@ static const unsigned char sha512_huge_block_result[64] =
# endif
#endif
+#ifdef CONFIG_TESTING_CRYPTO_HASH_UNALIGNED_BUFFER_SIZE
+# ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_MD5
+static const unsigned char md5_unaligned_block_result[16] =
+{
+ /* md5sum of 32640 monotonically increasing bytes from 0x00 */
+
+ 0x18, 0x8a, 0x1f, 0x86, 0x80, 0x37, 0x39, 0x2a,
+ 0x36, 0xf7, 0x25, 0xb1, 0x98, 0x5b, 0xda, 0xcc
+};
+# endif
+
+# ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA1
+static const unsigned char sha1_unaligned_block_result[20] =
+{
+ /* sha1sum 32640 monotonically increasing bytes from 0x00 */
+
+ 0x5b, 0xec, 0x9f, 0x44, 0xe4, 0x21, 0xe4, 0xf2,
+ 0x41, 0x86, 0xd0, 0x89, 0x45, 0xf1, 0xa8, 0x11,
+ 0x1d, 0xaa, 0x93, 0x51,
+};
+# endif
+
+# ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA224
+static const unsigned char sha224_unaligned_block_result[28] =
+{
+ /* sha224sum of 32640 monotonically increasing bytes from 0x00 */
+
+ 0x90, 0xad, 0x7d, 0x0e, 0x75, 0x60, 0xec, 0xcd,
+ 0xcc, 0x90, 0x02, 0xfb, 0x74, 0xa3, 0xfb, 0x54,
+ 0xbf, 0xcc, 0xca, 0x48, 0x23, 0x1c, 0x9f, 0xcc,
+ 0x25, 0x29, 0xff, 0xd6
+};
+# endif
+
+# ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA256
+static const unsigned char sha256_unaligned_block_result[32] =
+{
+ /* sha256sum of 32640 monotonically increasing bytes from 0x00 */
+
+ 0x6b, 0x5e, 0x17, 0xc4, 0x05, 0x5d, 0xac, 0xdf,
+ 0xc2, 0xff, 0x9e, 0x54, 0xdc, 0x21, 0xee, 0x75,
+ 0x16, 0x97, 0xb2, 0x78, 0xc7, 0xdd, 0x64, 0x26,
+ 0x70, 0xf6, 0xa2, 0xf2, 0xcb, 0x3b, 0x8e, 0x12
+};
+# endif
+
+# ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA512
+static const unsigned char sha512_unaligned_block_result[64] =
+{
+ /* sha512sum of 32640 monotonically increasing bytes from 0x00 */
+
+ 0xfb, 0x03, 0xde, 0x53, 0x92, 0xc6, 0xc5, 0x17,
+ 0x09, 0x10, 0x6c, 0x12, 0x9c, 0xc4, 0x6e, 0x79,
+ 0x37, 0xdd, 0x53, 0x4e, 0x49, 0xa1, 0x8e, 0x27,
+ 0x6d, 0xfd, 0xfb, 0x9c, 0xfa, 0xf7, 0xf4, 0x22,
+ 0x98, 0xfe, 0xd5, 0x9e, 0x5c, 0x89, 0x4e, 0xf9,
+ 0x1a, 0xf7, 0x40, 0x04, 0x0a, 0x49, 0x9e, 0x2a,
+ 0x4e, 0x4d, 0xe6, 0xac, 0x1a, 0xa4, 0x5b, 0xb9,
+ 0x15, 0x10, 0x0d, 0x37, 0x40, 0x8e, 0x8c, 0x29
+};
+# endif
+#endif
+
static void syshash_free(FAR crypto_context *ctx)
{
if (ctx->crypto_fd != 0)
@@ -382,7 +445,7 @@ static int syshash_finish(FAR crypto_context *ctx, FAR
unsigned char *out)
static int match(const unsigned char *a, const unsigned char *b, size_t len)
{
- int i;
+ unsigned int i;
if (memcmp(a, b, len) == 0)
{
@@ -469,6 +532,69 @@ static void report_huge_block_success(const char
*hash_type,
}
#endif
+#ifdef CONFIG_TESTING_CRYPTO_HASH_UNALIGNED_BUFFER_SIZE
+/* Test unaligned buffer sizes.
+ * Starting with hashing a zero-length buffer, increase buffer
+ * size by one byte and hash increasingly larger buffers until
+ * size reaches 255 bytes (for a total of 32640 bytes).
+ * At same time buffer data starts from 0x00 and monotonically
+ * increases (across buffer boundaries) so that the hash is
+ * performed over 32640 monotonically increasing bytes
+ * starting with 0x00.
+ */
+
+static int testing_hash_unaligned_buffer_size(const char *test,
+ crypto_context *ctx, int op,
+ FAR const unsigned char *result, size_t reslen)
+{
+ unsigned char block[256];
+ unsigned char output[64];
+ unsigned char byte = 0;
+ unsigned int block_size;
+ unsigned int idx;
+ int ret;
+
+ ret = syshash_start(ctx, op);
+ if (ret != 0)
+ {
+ return ret;
+ }
+
+ for (block_size = 0; block_size < 256 ; ++block_size)
+ {
+ for (idx = 0; idx < block_size; ++idx)
+ {
+ block[idx] = byte++;
+ }
+
+ ret = syshash_update(ctx, (char *)block, block_size);
+ if (ret < 0)
+ {
+ return ret;
+ }
+ }
+
+ ret = syshash_finish(ctx, output);
+ if (ret != 0)
+ {
+ return ret;
+ }
+
+ ret = match(result, output, reslen);
+ if (ret)
+ {
+ printf("%s unaligned buffer size match failed\n", test);
+ }
+ else
+ {
+ printf("%s unaligned buffer size match success\n", test);
+ }
+
+ return ret;
+}
+
+#endif
+
/****************************************************************************
* Public Functions
****************************************************************************/
@@ -489,12 +615,21 @@ int main(void)
#endif
#ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA512
crypto_context sha2_512_ctx;
+#endif
+#ifdef CONFIG_TESTING_CRYPTO_HASH_HUGE_BLOCK
+ unsigned char *huge_block = NULL;
+ uint32_t huge_block_size = HASH_HUGE_BLOCK_SIZE;
#endif
unsigned char output[64];
- unsigned char buf[1024];
int ret = 0;
- int i;
+ unsigned int i;
+#if !defined(CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA1) \
+ || !defined(CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA224) \
+ || !defined(CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA256) \
+ || !defined(CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA512)
+ unsigned char buf[1024];
int j;
+#endif
#ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_MD5
ret += syshash_init(&md5_ctx);
@@ -779,8 +914,6 @@ int main(void)
#endif
#ifdef CONFIG_TESTING_CRYPTO_HASH_HUGE_BLOCK
- unsigned char *huge_block;
- uint32_t huge_block_size = HASH_HUGE_BLOCK_SIZE;
/* Loop trying to allocate a huge block, cutting requested
* size in half until success.
*/
@@ -807,6 +940,7 @@ int main(void)
if (ret != 0)
{
printf("md5 huge block test failed\n");
+ goto err;
}
else
{
@@ -824,6 +958,7 @@ int main(void)
if (ret != 0)
{
printf("sha1 huge block test failed\n");
+ goto err;
}
else
{
@@ -841,6 +976,7 @@ int main(void)
if (ret != 0)
{
printf("sha224 huge block test failed\n");
+ goto err;
}
else
{
@@ -858,6 +994,7 @@ int main(void)
if (ret != 0)
{
printf("sha256 huge block test failed\n");
+ goto err;
}
else
{
@@ -875,6 +1012,7 @@ int main(void)
if (ret != 0)
{
printf("sha512 huge block test failed\n");
+ goto err;
}
else
{
@@ -883,10 +1021,67 @@ int main(void)
}
# endif
- free(huge_block);
+#endif
+
+#ifdef CONFIG_TESTING_CRYPTO_HASH_UNALIGNED_BUFFER_SIZE
+# ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_MD5
+ ret = testing_hash_unaligned_buffer_size("md5", &md5_ctx, CRYPTO_MD5,
+ md5_unaligned_block_result,
+ MD5_DIGEST_LENGTH);
+ if (ret < 0)
+ {
+ goto err;
+ }
+# endif
+
+# ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA1
+ ret = testing_hash_unaligned_buffer_size("sha1", &sha1_ctx, CRYPTO_SHA1,
+ sha1_unaligned_block_result,
+ SHA1_DIGEST_LENGTH);
+ if (ret < 0)
+ {
+ goto err;
+ }
+# endif
+
+# ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA224
+ ret = testing_hash_unaligned_buffer_size("sha244", &sha2_224_ctx,
+ CRYPTO_SHA2_224,
+ sha224_unaligned_block_result,
+ SHA224_DIGEST_LENGTH);
+ if (ret < 0)
+ {
+ goto err;
+ }
+# endif
+
+# ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA256
+ ret = testing_hash_unaligned_buffer_size("sha256", &sha2_256_ctx,
+ CRYPTO_SHA2_256,
+ sha256_unaligned_block_result,
+ SHA256_DIGEST_LENGTH);
+ if (ret < 0)
+ {
+ goto err;
+ }
+# endif
+
+# ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_SHA512
+ ret = testing_hash_unaligned_buffer_size("sha512", &sha2_512_ctx,
+ CRYPTO_SHA2_512,
+ sha512_unaligned_block_result,
+ SHA512_DIGEST_LENGTH);
+ if (ret < 0)
+ {
+ goto err;
+ }
+# endif
#endif
err:
+#ifdef CONFIG_TESTING_CRYPTO_HASH_HUGE_BLOCK
+ free(huge_block);
+#endif
#ifndef CONFIG_TESTING_CRYPTO_HASH_DISABLE_MD5
syshash_free(&md5_ctx);
#endif