diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2025-07-19 17:20:35 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2025-07-19 17:20:35 +0200 |
| commit | 51b45ce28a6a5bbc035b200f170d520f94b7e59f (patch) | |
| tree | a28713a5e47f4f2c14249f87341653f78e04946d /libbb | |
| parent | 94591a103038db3a336879c6d444162c1f467342 (diff) | |
| download | busybox-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.c | 53 |
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 | */ |
| 370 | static void blockmix( | 370 | static 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 | ||
| 404 | static uint32_t blockmix_xor(const salsa20_blk_t *Bin1, | 406 | static 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 | ||
