From 50ca9fe46f457a773ab15f4569205c51bf9f96ea Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Sun, 5 Oct 2014 00:34:41 +0200 Subject: Optimization to reduce code size of derive_u_ripemd160. Useful for boatloader. --- src/Common/Pkcs5.c | 45 ++++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 25 deletions(-) (limited to 'src/Common/Pkcs5.c') diff --git a/src/Common/Pkcs5.c b/src/Common/Pkcs5.c index 8f21bb80..c1222a03 100644 --- a/src/Common/Pkcs5.c +++ b/src/Common/Pkcs5.c @@ -247,8 +247,20 @@ void derive_u_ripemd160 (BOOL bNotTest, char *pwd, int pwd_len, char *salt, int char j[RIPEMD160_DIGESTSIZE], k[RIPEMD160_DIGESTSIZE]; char init[128]; char counter[4]; - int c, i, l; - int EnhanceSecurityLoops = (bNotTest)? 20 : 1; + uint32 c; + int i; + + if (bNotTest) + { + if (iterations == 32767) + c = 655331; + else + c = 327661; + } + else + { + c = iterations; + } /* iteration 1 */ memset (counter, 0, 4); @@ -259,34 +271,17 @@ void derive_u_ripemd160 (BOOL bNotTest, char *pwd, int pwd_len, char *salt, int memcpy (u, j, RIPEMD160_DIGESTSIZE); /* remaining iterations */ - for (l = 0; l < EnhanceSecurityLoops; l++) + while ( c > 1) { - for (c = 1; c < iterations; c++) + hmac_ripemd160 (pwd, pwd_len, j, RIPEMD160_DIGESTSIZE, k); + for (i = 0; i < RIPEMD160_DIGESTSIZE; i++) { - hmac_ripemd160 (pwd, pwd_len, j, RIPEMD160_DIGESTSIZE, k); - for (i = 0; i < RIPEMD160_DIGESTSIZE; i++) - { - u[i] ^= k[i]; - j[i] = k[i]; - } + u[i] ^= k[i]; + j[i] = k[i]; } + c--; } - /* add extra 10 loops to ensure backward compatibilty with the previous count (327661 for boot, 655331 for normal) */ - if (iterations == 32767) - { - /* case of normal partition : add 10 iterations to have a total of 655331 = (32767 - 1)*20 + 1 + 10 */ - for (c = 0; c < 10; c++) - { - hmac_ripemd160 (pwd, pwd_len, j, RIPEMD160_DIGESTSIZE, k); - for (i = 0; i < RIPEMD160_DIGESTSIZE; i++) - { - u[i] ^= k[i]; - j[i] = k[i]; - } - } - } - /* Prevent possible leaks. */ burn (j, sizeof(j)); burn (k, sizeof(k)); -- cgit v1.2.3