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: sta...@dpdk.org

Signed-off-by: Gowrishankar Muthukrishnan <gmuthukri...@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 17daf734e8..c26be9b2bf 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

Reply via email to