aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2025-07-19 17:20:35 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2025-07-19 17:20:35 +0200
commit51b45ce28a6a5bbc035b200f170d520f94b7e59f (patch)
treea28713a5e47f4f2c14249f87341653f78e04946d /libbb
parent94591a103038db3a336879c6d444162c1f467342 (diff)
downloadbusybox-w32-51b45ce28a6a5bbc035b200f170d520f94b7e59f.tar.gz
busybox-w32-51b45ce28a6a5bbc035b200f170d520f94b7e59f.tar.bz2
busybox-w32-51b45ce28a6a5bbc035b200f170d520f94b7e59f.zip
libbb/yescrypt: code shrink
function old new delta blockmix_xor_save 1169 708 -461 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
-rw-r--r--libbb/yescrypt/alg-yescrypt-kdf.c53
1 files changed, 25 insertions, 28 deletions
diff --git a/libbb/yescrypt/alg-yescrypt-kdf.c b/libbb/yescrypt/alg-yescrypt-kdf.c
index f75361d96..01503c6e0 100644
--- a/libbb/yescrypt/alg-yescrypt-kdf.c
+++ b/libbb/yescrypt/alg-yescrypt-kdf.c
@@ -368,10 +368,10 @@ typedef struct {
368 * be 128r bytes in length; the output Bout must also be the same size. 368 * be 128r bytes in length; the output Bout must also be the same size.
369 */ 369 */
370static void blockmix( 370static void blockmix(
371 const salsa20_blk_t *restrict Bin, 371 const salsa20_blk_t *restrict Bin,
372 salsa20_blk_t *restrict Bout, 372 salsa20_blk_t *restrict Bout,
373 size_t r, 373 size_t r,
374 pwxform_ctx_t *restrict ctx) 374 pwxform_ctx_t *restrict ctx)
375{ 375{
376 uint8_t *S0 = ctx->S0, *S1 = ctx->S1, *S2 = ctx->S2; 376 uint8_t *S0 = ctx->S0, *S1 = ctx->S1, *S2 = ctx->S2;
377 size_t w = ctx->w; 377 size_t w = ctx->w;
@@ -386,22 +386,25 @@ static void blockmix(
386 DECL_SMASK2REG; 386 DECL_SMASK2REG;
387 387
388 i = 0; 388 i = 0;
389 do { 389 for (;;) {
390 XOR_X(Bin[i]); 390 XOR_X(Bin[i]);
391 PWXFORM; 391 PWXFORM;
392 if (unlikely(i >= r)) 392 if (unlikely(i >= r))
393 break; 393 break;
394 WRITE_X(Bout[i]); 394 WRITE_X(Bout[i]);
395 i++; 395 i++;
396 } while (1); 396 }
397 397
398 ctx->S0 = S0; ctx->S1 = S1; ctx->S2 = S2; 398 ctx->S0 = S0;
399 ctx->S1 = S1;
400 ctx->S2 = S2;
399 ctx->w = w; 401 ctx->w = w;
400 402
401 SALSA20_2(Bout[i]); 403 SALSA20_2(Bout[i]);
402} 404}
403 405
404static uint32_t blockmix_xor(const salsa20_blk_t *Bin1, 406static uint32_t blockmix_xor(
407 const salsa20_blk_t *Bin1,
405 const salsa20_blk_t *restrict Bin2, 408 const salsa20_blk_t *restrict Bin2,
406 salsa20_blk_t *Bout, 409 salsa20_blk_t *Bout,
407 size_t r, 410 size_t r,
@@ -462,24 +465,18 @@ static uint32_t blockmix_xor_save(
462 465
463 i = 0; 466 i = 0;
464 r--; 467 r--;
465 do { 468 for (;;) {
466 XOR_X_WRITE_XOR_Y_2(Bin2[i], Bin1out[i]); 469 XOR_X_WRITE_XOR_Y_2(Bin2[i], Bin1out[i]);
467 PWXFORM; 470 PWXFORM;
468 WRITE_X(Bin1out[i]); 471 if (unlikely(i > r))
469
470 XOR_X_WRITE_XOR_Y_2(Bin2[i + 1], Bin1out[i + 1]);
471 PWXFORM;
472
473 if (unlikely(i >= r))
474 break; 472 break;
473 WRITE_X(Bin1out[i]);
474 i++;
475 }
475 476
476 WRITE_X(Bin1out[i + 1]); 477 ctx->S0 = S0;
477 478 ctx->S1 = S1;
478 i += 2; 479 ctx->S2 = S2;
479 } while (1);
480 i++;
481
482 ctx->S0 = S0; ctx->S1 = S1; ctx->S2 = S2;
483 ctx->w = w; 480 ctx->w = w;
484 481
485 SALSA20_2(Bin1out[i]); 482 SALSA20_2(Bin1out[i]);
@@ -801,7 +798,7 @@ static void smix(uint8_t *B, size_t r, uint32_t N, uint32_t p, uint32_t t,
801 if (flags___YESCRYPT_RW) { 798 if (flags___YESCRYPT_RW) {
802 uint8_t *Si = S + i * Salloc; 799 uint8_t *Si = S + i * Salloc;
803 smix1(Bp, 1, Sbytes / 128, 0 /* no flags */, 800 smix1(Bp, 1, Sbytes / 128, 0 /* no flags */,
804 (salsa20_blk_t *)Si, 0, NULL, XYp, NULL); 801 (salsa20_blk_t *)Si, 0, NULL, XYp, NULL);
805 ctx_i = (pwxform_ctx_t *)(Si + Sbytes); 802 ctx_i = (pwxform_ctx_t *)(Si + Sbytes);
806 ctx_i->S2 = Si; 803 ctx_i->S2 = Si;
807 ctx_i->S1 = Si + Sbytes / 3; 804 ctx_i->S1 = Si + Sbytes / 3;
@@ -809,7 +806,7 @@ static void smix(uint8_t *B, size_t r, uint32_t N, uint32_t p, uint32_t t,
809 ctx_i->w = 0; 806 ctx_i->w = 0;
810 if (i == 0) 807 if (i == 0)
811 hmac_block( 808 hmac_block(
812 /* key,len: */ Bp + (128 * r - 64), 64, 809 /* key,len: */ Bp + (128 * r - 64), 64,
813 /* hash fn: */ sha256_begin, 810 /* hash fn: */ sha256_begin,
814 /* in,len: */ passwd, 32, 811 /* in,len: */ passwd, 32,
815 /* outbuf: */ passwd 812 /* outbuf: */ passwd
@@ -817,7 +814,7 @@ static void smix(uint8_t *B, size_t r, uint32_t N, uint32_t p, uint32_t t,
817 } 814 }
818 smix1(Bp, r, Np, flags, Vp, NROM, VROM, XYp, ctx_i); 815 smix1(Bp, r, Np, flags, Vp, NROM, VROM, XYp, ctx_i);
819 smix2(Bp, r, p2floor(Np), Nloop_rw, flags, Vp, 816 smix2(Bp, r, p2floor(Np), Nloop_rw, flags, Vp,
820 NROM, VROM, XYp, ctx_i); 817 NROM, VROM, XYp, ctx_i);
821 } 818 }
822 819
823 if (Nloop_all > Nloop_rw) { 820 if (Nloop_all > Nloop_rw) {
@@ -830,8 +827,8 @@ static void smix(uint8_t *B, size_t r, uint32_t N, uint32_t p, uint32_t t,
830 ctx_i = (pwxform_ctx_t *)(Si + Sbytes); 827 ctx_i = (pwxform_ctx_t *)(Si + Sbytes);
831 } 828 }
832 smix2(Bp, r, N, Nloop_all - Nloop_rw, 829 smix2(Bp, r, N, Nloop_all - Nloop_rw,
833 flags & (uint32_t)~YESCRYPT_RW, 830 flags & (uint32_t)~YESCRYPT_RW,
834 V, NROM, VROM, XYp, ctx_i); 831 V, NROM, VROM, XYp, ctx_i);
835 } 832 }
836 } 833 }
837} 834}
@@ -1046,7 +1043,7 @@ static int yescrypt_kdf32_body(
1046 uint32_t i; 1043 uint32_t i;
1047 for (i = 0; i < p; i++) { 1044 for (i = 0; i < p; i++) {
1048 smix(&B[(size_t)128 * r * i], r, N, 1, t, flags, V, 1045 smix(&B[(size_t)128 * r * i], r, N, 1, t, flags, V,
1049 YCTX_param_NROM, VROM, XY, NULL, NULL); 1046 YCTX_param_NROM, VROM, XY, NULL, NULL);
1050 } 1047 }
1051 } 1048 }
1052 1049