summaryrefslogtreecommitdiff
path: root/libbb/yescrypt/alg-yescrypt-common.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbb/yescrypt/alg-yescrypt-common.c')
-rw-r--r--libbb/yescrypt/alg-yescrypt-common.c61
1 files changed, 25 insertions, 36 deletions
diff --git a/libbb/yescrypt/alg-yescrypt-common.c b/libbb/yescrypt/alg-yescrypt-common.c
index 5bdf1893e..db6e098c7 100644
--- a/libbb/yescrypt/alg-yescrypt-common.c
+++ b/libbb/yescrypt/alg-yescrypt-common.c
@@ -144,7 +144,7 @@ char *yescrypt_r(
char *dst;
const uint8_t *src, *saltstr, *saltend;
size_t need, prefixlen, saltstrlen;
- uint32_t flavor, N_log2;
+ uint32_t u32;
memset(yctx, 0, sizeof(yctx));
yctx->param.p = 1;
@@ -152,43 +152,34 @@ char *yescrypt_r(
/* we assume setting starts with "$y$" (caller must ensure this) */
src = setting + 3;
- src = decode64_uint32(&flavor, src, 0);
+ src = decode64_uint32(&yctx->param.flags, src, 0);
/* "j9T" returns: 0x2f */
- dbg("yescrypt flavor=0x%x YESCRYPT_RW:%u", (unsigned)flavor, !!(flavor & YESCRYPT_RW));
//if (!src)
// goto fail;
- if (flavor < YESCRYPT_RW) {
- yctx->param.flags = flavor;
- } else if (flavor <= YESCRYPT_RW + (YESCRYPT_RW_FLAVOR_MASK >> 2)) {
+ if (yctx->param.flags < YESCRYPT_RW) {
+ dbg("yctx->param.flags=0x%x", (unsigned)yctx->param.flags);
+ goto fail; // bbox: we don't support scrypt - only yescrypt
+ } else if (yctx->param.flags <= YESCRYPT_RW + (YESCRYPT_RW_FLAVOR_MASK >> 2)) {
/* "j9T" sets flags to 0xb6 */
- yctx->param.flags = YESCRYPT_RW + ((flavor - YESCRYPT_RW) << 2);
+ yctx->param.flags = YESCRYPT_RW + ((yctx->param.flags - YESCRYPT_RW) << 2);
dbg("yctx->param.flags=0x%x", (unsigned)yctx->param.flags);
- dbg(" YESCRYPT_RW:%u" , !!(yctx->param.flags & YESCRYPT_RW ));
- dbg(" YESCRYPT_ROUNDS_6:%u" , !!(yctx->param.flags & YESCRYPT_ROUNDS_6 ));
- dbg(" YESCRYPT_GATHER_2:%u" , !!(yctx->param.flags & YESCRYPT_GATHER_2 ));
- dbg(" YESCRYPT_GATHER_4:%u" , !!(yctx->param.flags & YESCRYPT_GATHER_4 ));
- dbg(" YESCRYPT_GATHER_8:%u" , !!(yctx->param.flags & YESCRYPT_GATHER_8 ));
- dbg(" YESCRYPT_SIMPLE_2:%u" , !!(yctx->param.flags & YESCRYPT_SIMPLE_2 ));
- dbg(" YESCRYPT_SIMPLE_4:%u" , !!(yctx->param.flags & YESCRYPT_SIMPLE_4 ));
- dbg(" YESCRYPT_SIMPLE_8:%u" , !!(yctx->param.flags & YESCRYPT_SIMPLE_8 ));
- dbg(" YESCRYPT_SBOX_12K:%u" , !!(yctx->param.flags & YESCRYPT_SBOX_12K ));
- dbg(" YESCRYPT_SBOX_24K:%u" , !!(yctx->param.flags & YESCRYPT_SBOX_24K ));
- dbg(" YESCRYPT_SBOX_48K:%u" , !!(yctx->param.flags & YESCRYPT_SBOX_48K ));
- dbg(" YESCRYPT_SBOX_96K:%u" , !!(yctx->param.flags & YESCRYPT_SBOX_96K ));
- dbg(" YESCRYPT_SBOX_192K:%u", !!(yctx->param.flags & YESCRYPT_SBOX_192K));
- dbg(" YESCRYPT_SBOX_384K:%u", !!(yctx->param.flags & YESCRYPT_SBOX_384K));
- dbg(" YESCRYPT_SBOX_768K:%u", !!(yctx->param.flags & YESCRYPT_SBOX_768K));
+ dbg(" YESCRYPT_RW:%u", !!(yctx->param.flags & YESCRYPT_RW));
+ dbg((yctx->param.flags & YESCRYPT_RW_FLAVOR_MASK) ==
+ (YESCRYPT_ROUNDS_6 | YESCRYPT_GATHER_4 | YESCRYPT_SIMPLE_2 | YESCRYPT_SBOX_12K)
+ ? " YESCRYPT_ROUNDS_6 | YESCRYPT_GATHER_4 | YESCRYPT_SIMPLE_2 | YESCRYPT_SBOX_12K"
+ : " flags are not standard"
+ );
} else {
goto fail;
}
- src = decode64_uint32(&N_log2, src, 1);
- if (/*!src ||*/ N_log2 > 63)
+ src = decode64_uint32(&u32, src, 1);
+ if (/*!src ||*/ u32 > 63)
goto fail;
- yctx->param.N = (uint64_t)1 << N_log2;
+ yctx->param.N = (uint64_t)1 << u32;
/* "j9T" sets to 4096 (1<<12) */
- dbg("yctx->param.N=%llu (1<<%u)", (unsigned long long)yctx->param.N, (unsigned)N_log2);
+ dbg("yctx->param.N=%llu (1<<%u)", (unsigned long long)yctx->param.N, (unsigned)u32);
src = decode64_uint32(&yctx->param.r, src, 1);
/* "j9T" sets to 32 */
@@ -197,21 +188,19 @@ char *yescrypt_r(
if (!src)
goto fail;
if (*src != '$') {
- uint32_t have;
- src = decode64_uint32(&have, src, 1);
+ src = decode64_uint32(&u32, src, 1);
dbg("yescrypt has extended params:0x%x", (unsigned)have);
- if (have & 1)
+ if (u32 & 1)
src = decode64_uint32(&yctx->param.p, src, 2);
- if (have & 2)
+ if (u32 & 2)
src = decode64_uint32(&yctx->param.t, src, 1);
- if (have & 4)
+ if (u32 & 4)
src = decode64_uint32(&yctx->param.g, src, 1);
- if (have & 8) {
- uint32_t NROM_log2;
- src = decode64_uint32(&NROM_log2, src, 1);
- if (/*!src ||*/ NROM_log2 > 63)
+ if (u32 & 8) {
+ src = decode64_uint32(&u32, src, 1);
+ if (/*!src ||*/ u32 > 63)
goto fail;
- yctx->param.NROM = (uint64_t)1 << NROM_log2;
+ yctx->param.NROM = (uint64_t)1 << u32;
}
if (!src)
goto fail;