libbb/yescrypt: code shrink in salt decoding

function                                             old     new   delta
yescrypt_r                                          1311    1288     -23

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2025-07-06 03:59:59 +02:00
parent 1c977008e0
commit 85d3c48217

View file

@ -233,33 +233,29 @@ uint8_t *yescrypt_r(
}
if (!src)
return NULL;
if (*src++ != '$')
if (*src != '$')
return NULL;
prefixlen = src - setting;
saltstr = src;
src = (uint8_t *)strrchr((char *)saltstr, '$');
if (src)
saltstrlen = src - saltstr;
else
saltstrlen = strlen((char *)saltstr);
saltstr = src + 1;
src = (uint8_t *)strchrnul((char *)saltstr, '$');
prefixlen = src - setting; /* len("$y$<params>$<salt>") */
saltstrlen = src - saltstr; /* len("<salt>") */
/* src points to end of salt ('$' or NUL byte), won't be used past this point */
saltlen = sizeof(saltbin);
saltend = decode64(saltbin, &saltlen, saltstr, saltstrlen);
if (saltend != saltstr + saltstrlen)
goto fail; /* saltbin[] is too small, or bad char during decode */
if (!saltend || (size_t)(saltend - saltstr) != saltstrlen)
goto fail;
need = prefixlen + saltstrlen + 1 + HASH_LEN + 1;
if (need > buflen || need < saltstrlen)
need = prefixlen + 1 + HASH_LEN + 1;
if (need > buflen || need < prefixlen)
goto fail;
if (yescrypt_kdf(local, passwd, passwdlen, saltbin, saltlen,
&params, hashbin, sizeof(hashbin)))
goto fail;
dst = mempcpy(buf, setting, prefixlen + saltstrlen);
dst = mempcpy(buf, setting, prefixlen);
*dst++ = '$';
dst = encode64(dst, buflen - (dst - buf), hashbin, sizeof(hashbin));
explicit_bzero(hashbin, sizeof(hashbin));