[v1,1/4] test/crypto: validate modex result from first nonzero value
Checks
Commit Message
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@dpdk.org
Signed-off-by: Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>
---
app/test/test_cryptodev_asym.c | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
@@ -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;