[PATCH v3 1/3] test/crypto: validate modex result from first nonzero value
Gowrishankar Muthukrishnan
gmuthukrishn at marvell.com
Wed Jun 26 12:03:40 CEST 2024
At present, there is no specification of whether modex op output
can carry leading zeroes without changing the value. OpenSSL strips
leading zeroes, but other hardware need not be. Hence, when output
is compared against expected result, validation could start from
first non-zero.
Fixes: 1ffefe00f1 ("test/crypto: add modexp and modinv functions")
Cc: stable at dpdk.org
Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn at marvell.com>
---
app/test/test_cryptodev_asym.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asym.c
index 2c745a7f7c..fec53f87db 100644
--- a/app/test/test_cryptodev_asym.c
+++ b/app/test/test_cryptodev_asym.c
@@ -3200,6 +3200,27 @@ static int send_one(void)
return TEST_SUCCESS;
}
+static int
+modular_cmpeq(const uint8_t *a, const uint8_t *b, size_t len)
+{
+ const uint8_t *new_a = a, *new_b = b;
+ size_t i, j;
+
+ /* Strip leading NUL bytes */
+ for (i = 0; i < len; i++)
+ if (a[i] != 0)
+ new_a = &a[i];
+
+ for (j = 0; j < len; j++)
+ if (b[j] != 0)
+ new_b = &b[i];
+
+ if (i != j || memcmp(new_a, new_b, len - i))
+ return 1;
+
+ return 0;
+}
+
static int
modular_exponentiation(const void *test_data)
{
@@ -3234,9 +3255,9 @@ modular_exponentiation(const void *test_data)
TEST_ASSERT_SUCCESS(send_one(),
"Failed to process crypto op");
- TEST_ASSERT_BUFFERS_ARE_EQUAL(vector->reminder.data,
+ TEST_ASSERT_SUCCESS(modular_cmpeq(vector->reminder.data,
self->result_op->asym->modex.result.data,
- self->result_op->asym->modex.result.length,
+ self->result_op->asym->modex.result.length),
"operation verification failed\n");
return TEST_SUCCESS;
--
2.25.1
More information about the dev
mailing list