[git commit] libbb/yescrypt: code shrink in parameter decoding
Denys Vlasenko
vda.linux at googlemail.com
Sun Jul 6 01:40:06 UTC 2025
commit: https://git.busybox.net/busybox/commit/?id=1c977008e0b84f0d277367901b981c0d958dbdce
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
function old new delta
decode64_uint32 166 167 +1
yescrypt_r 1342 1311 -31
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 1/-31) Total: -30 bytes
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
libbb/yescrypt/alg-yescrypt-common.c | 48 +++++++++++++-----------------------
1 file changed, 17 insertions(+), 31 deletions(-)
diff --git a/libbb/yescrypt/alg-yescrypt-common.c b/libbb/yescrypt/alg-yescrypt-common.c
index 388bf1a12..65c92f22f 100644
--- a/libbb/yescrypt/alg-yescrypt-common.c
+++ b/libbb/yescrypt/alg-yescrypt-common.c
@@ -41,33 +41,36 @@ static NOINLINE uint32_t atoi64(uint8_t src)
static NOINLINE const uint8_t *decode64_uint32(
uint32_t *dst,
- const uint8_t *src, uint32_t min)
+ const uint8_t *src, uint32_t val)
{
uint32_t start = 0, end = 47, chars = 1, bits = 0;
uint32_t c;
+ if (!src) /* prevous decode failed already? */
+ goto fail;
+
c = atoi64(*src++);
if (c > 63)
goto fail;
- *dst = min;
while (c > end) {
- *dst += (end + 1 - start) << bits;
+ val += (end + 1 - start) << bits;
start = end + 1;
end = start + (62 - end) / 2;
chars++;
bits += 6;
}
- *dst += (c - start) << bits;
+ val += (c - start) << bits;
while (--chars) {
c = atoi64(*src++);
if (c > 63)
goto fail;
bits -= 6;
- *dst += c << bits;
+ val += c << bits;
}
+ *dst = val;
return src;
@@ -192,8 +195,8 @@ uint8_t *yescrypt_r(
src = setting + 3;
src = decode64_uint32(&flavor, src, 0);
- if (!src)
- return NULL;
+ //if (!src)
+ // return NULL;
if (flavor < YESCRYPT_RW) {
params.flags = flavor;
@@ -204,48 +207,32 @@ uint8_t *yescrypt_r(
}
src = decode64_uint32(&N_log2, src, 1);
- if (!src || N_log2 > 63)
+ if (/*!src ||*/ N_log2 > 63)
return NULL;
params.N = (uint64_t)1 << N_log2;
src = decode64_uint32(¶ms.r, src, 1);
if (!src)
return NULL;
-
if (*src != '$') {
uint32_t have;
-
src = decode64_uint32(&have, src, 1);
- if (!src)
- return NULL;
-
- if (have & 1) {
+ if (have & 1)
src = decode64_uint32(¶ms.p, src, 2);
- if (!src)
- return NULL;
- }
-
- if (have & 2) {
+ if (have & 2)
src = decode64_uint32(¶ms.t, src, 1);
- if (!src)
- return NULL;
- }
-
- if (have & 4) {
+ if (have & 4)
src = decode64_uint32(¶ms.g, src, 1);
- if (!src)
- return NULL;
- }
-
if (have & 8) {
uint32_t NROM_log2;
src = decode64_uint32(&NROM_log2, src, 1);
- if (!src || NROM_log2 > 63)
+ if (/*!src ||*/ NROM_log2 > 63)
return NULL;
params.NROM = (uint64_t)1 << NROM_log2;
}
}
-
+ if (!src)
+ return NULL;
if (*src++ != '$')
return NULL;
@@ -274,7 +261,6 @@ uint8_t *yescrypt_r(
dst = mempcpy(buf, setting, prefixlen + saltstrlen);
*dst++ = '$';
-
dst = encode64(dst, buflen - (dst - buf), hashbin, sizeof(hashbin));
explicit_bzero(hashbin, sizeof(hashbin));
if (!dst || dst >= buf + buflen)
More information about the busybox-cvs
mailing list