* [PATCH v1 1/4] test/crypto: validate modex result from first nonzero value [not found] <20240616044223.2841-1-gmuthukrishn@marvell.com> @ 2024-06-16 4:42 ` Gowrishankar Muthukrishnan [not found] ` <20240621023832.1707-1-gmuthukrishn@marvell.com> 1 sibling, 0 replies; 3+ messages in thread From: Gowrishankar Muthukrishnan @ 2024-06-16 4:42 UTC (permalink / raw) To: dev, Akhil Goyal, Fan Zhang, Gowrishankar Muthukrishnan, Arkadiusz Kusztal, Ciara Power Cc: Anoob Joseph, stable 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(-) 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <20240621023832.1707-1-gmuthukrishn@marvell.com>]
* [PATCH v2 1/4] test/crypto: validate modex result from first nonzero value [not found] ` <20240621023832.1707-1-gmuthukrishn@marvell.com> @ 2024-06-21 2:38 ` Gowrishankar Muthukrishnan [not found] ` <20240626100345.1758-1-gmuthukrishn@marvell.com> 1 sibling, 0 replies; 3+ messages in thread From: Gowrishankar Muthukrishnan @ 2024-06-21 2:38 UTC (permalink / raw) To: dev, Akhil Goyal, Fan Zhang, Ciara Power, Gowrishankar Muthukrishnan, Arkadiusz Kusztal Cc: Anoob Joseph, stable 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(-) 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <20240626100345.1758-1-gmuthukrishn@marvell.com>]
* [PATCH v3 1/3] test/crypto: validate modex result from first nonzero value [not found] ` <20240626100345.1758-1-gmuthukrishn@marvell.com> @ 2024-06-26 10:03 ` Gowrishankar Muthukrishnan 0 siblings, 0 replies; 3+ messages in thread From: Gowrishankar Muthukrishnan @ 2024-06-26 10:03 UTC (permalink / raw) To: dev, Akhil Goyal, Fan Zhang, Arkadiusz Kusztal, Ciara Power, Gowrishankar Muthukrishnan Cc: Anoob Joseph, stable 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(-) 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 ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-06-26 10:10 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20240616044223.2841-1-gmuthukrishn@marvell.com> 2024-06-16 4:42 ` [PATCH v1 1/4] test/crypto: validate modex result from first nonzero value Gowrishankar Muthukrishnan [not found] ` <20240621023832.1707-1-gmuthukrishn@marvell.com> 2024-06-21 2:38 ` [PATCH v2 " Gowrishankar Muthukrishnan [not found] ` <20240626100345.1758-1-gmuthukrishn@marvell.com> 2024-06-26 10:03 ` [PATCH v3 1/3] " Gowrishankar Muthukrishnan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).