summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorNicolas Boichat <drinkcat@chromium.org>2018-05-24 14:33:06 +0800
committerchrome-bot <chrome-bot@chromium.org>2018-05-29 06:02:19 -0700
commitecd0d1b5767c829f4c73a79a9eb6abae343284fb (patch)
tree72be322444b05435927078bf9ac16f810c35d06e /test
parentcc7889bfaec9243ff35b6a366f6f2c7c65c33a13 (diff)
downloadchrome-ec-ecd0d1b5767c829f4c73a79a9eb6abae343284fb.tar.gz
rsa: Further optimization of multiplications for Cortex-M0
In RSA, we often need to actually compute (a*b)+c+d: provide some assembly optimized functions for that. With -O3, 3072-bit exponent, lower verification time from 104 ms to 88 ms on STM32F072 @48Mhz. BRANCH=poppy BUG=b:35647963 BUG=b:77608104 TEST=On staff, flash, verification successful TEST=make test-rsa, make test-rsa3 TEST=make BOARD=hammer test-utils test-rsa3, test on board Change-Id: I80e8a7258d091e4f6adea11797729ac657dfd85d Signed-off-by: Nicolas Boichat <drinkcat@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1071411 Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'test')
-rw-r--r--test/utils.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/test/utils.c b/test/utils.c
index 7acf238c14..08a3511d77 100644
--- a/test/utils.c
+++ b/test/utils.c
@@ -360,6 +360,7 @@ static int test_cond_t(void)
static int test_mula32(void)
{
uint64_t r = 0x0;
+ uint64_t r2 = 0x0;
uint32_t b = 0x1;
uint32_t c = 0x1;
uint32_t i;
@@ -368,15 +369,18 @@ static int test_mula32(void)
t0 = get_time();
for (i = 0; i < 5000000; i++) {
r = mula32(b, c, r + (r >> 32));
+ r2 = mulaa32(b, c, r2 >> 32, r2);
b = (b << 13) ^ (b >> 2) ^ i;
c = (c << 16) ^ (c >> 7) ^ i;
watchdog_reload();
}
t1 = get_time();
- ccprintf("After %d iterations, r=%08x%08x (time: %d)\n", i,
- (uint32_t)(r >> 32), (uint32_t)r, t1.le.lo-t0.le.lo);
- TEST_ASSERT(r == 0x9df59b9fb0ab9d96L);
+ ccprintf("After %d iterations, r=%08x%08x, r2=%08x%08x (time: %d)\n",
+ i, (uint32_t)(r >> 32), (uint32_t)r,
+ (uint32_t)(r2 >> 32), (uint32_t)r2, t1.le.lo-t0.le.lo);
+ TEST_ASSERT(r == 0x9df59b9fb0ab9d96L);
+ TEST_ASSERT(r2 == 0x9df59b9fb0beabd6L);
/* well okay then */
return EC_SUCCESS;