diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2025-07-06 18:35:37 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2025-07-06 18:35:37 +0200 |
| commit | f5af8aefeae7fd73167403dd407e9a14aead5948 (patch) | |
| tree | 9155eb58ca7aa2632fd2555894695fb541ef9b1b /libbb | |
| parent | b8f76001662ad4b3073945589a0cb270b627c994 (diff) | |
| download | busybox-w32-f5af8aefeae7fd73167403dd407e9a14aead5948.tar.gz busybox-w32-f5af8aefeae7fd73167403dd407e9a14aead5948.tar.bz2 busybox-w32-f5af8aefeae7fd73167403dd407e9a14aead5948.zip | |
libbb/yescrypt: shrink PBKDF2
function old new delta
static.PBKDF2_SHA256 189 176 -13
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
| -rw-r--r-- | libbb/yescrypt/alg-sha256.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/libbb/yescrypt/alg-sha256.c b/libbb/yescrypt/alg-sha256.c index 28d8c5296..f56b905ad 100644 --- a/libbb/yescrypt/alg-sha256.c +++ b/libbb/yescrypt/alg-sha256.c | |||
| @@ -77,7 +77,7 @@ HMAC_SHA256_Update(HMAC_SHA256_CTX *ctx, const void *in, size_t len) | |||
| 77 | * buffer ${digest}. | 77 | * buffer ${digest}. |
| 78 | */ | 78 | */ |
| 79 | static void | 79 | static void |
| 80 | HMAC_SHA256_Final(HMAC_SHA256_CTX *ctx, uint8_t digest[32]) | 80 | HMAC_SHA256_Final(HMAC_SHA256_CTX *ctx, void *digest) |
| 81 | { | 81 | { |
| 82 | /* Finish the inner SHA256 operation. */ | 82 | /* Finish the inner SHA256 operation. */ |
| 83 | sha256_end(&ctx->ictx, digest); /* using digest[] as scratch space */ | 83 | sha256_end(&ctx->ictx, digest); /* using digest[] as scratch space */ |
| @@ -93,8 +93,7 @@ HMAC_SHA256_Final(HMAC_SHA256_CTX *ctx, uint8_t digest[32]) | |||
| 93 | * length ${Klen}, and write the result to ${digest}. | 93 | * length ${Klen}, and write the result to ${digest}. |
| 94 | */ | 94 | */ |
| 95 | static void | 95 | static void |
| 96 | HMAC_SHA256_Buf(const void *K, size_t Klen, const void *in, size_t len, | 96 | HMAC_SHA256_Buf(const void *K, size_t Klen, const void *in, size_t len, void *digest) |
| 97 | uint8_t digest[32]) | ||
| 98 | { | 97 | { |
| 99 | HMAC_SHA256_CTX ctx; | 98 | HMAC_SHA256_CTX ctx; |
| 100 | HMAC_SHA256_Init(&ctx, K, Klen); | 99 | HMAC_SHA256_Init(&ctx, K, Klen); |
| @@ -114,11 +113,6 @@ PBKDF2_SHA256(const uint8_t *passwd, size_t passwdlen, | |||
| 114 | { | 113 | { |
| 115 | HMAC_SHA256_CTX Phctx, PShctx, hctx; | 114 | HMAC_SHA256_CTX Phctx, PShctx, hctx; |
| 116 | size_t i; | 115 | size_t i; |
| 117 | uint8_t U[32]; | ||
| 118 | uint8_t T[32]; | ||
| 119 | uint64_t j; | ||
| 120 | int k; | ||
| 121 | size_t clen; | ||
| 122 | 116 | ||
| 123 | /* Compute HMAC state after processing P. */ | 117 | /* Compute HMAC state after processing P. */ |
| 124 | HMAC_SHA256_Init(&Phctx, passwd, passwdlen); | 118 | HMAC_SHA256_Init(&Phctx, passwd, passwdlen); |
| @@ -128,14 +122,19 @@ PBKDF2_SHA256(const uint8_t *passwd, size_t passwdlen, | |||
| 128 | HMAC_SHA256_Update(&PShctx, salt, saltlen); | 122 | HMAC_SHA256_Update(&PShctx, salt, saltlen); |
| 129 | 123 | ||
| 130 | /* Iterate through the blocks. */ | 124 | /* Iterate through the blocks. */ |
| 131 | for (i = 0; i * 32 < dkLen; i++) { | 125 | for (i = 0; dkLen != 0; i++) { |
| 126 | uint64_t U[32 / 8]; | ||
| 127 | uint64_t T[32 / 8]; | ||
| 128 | uint64_t j; | ||
| 132 | uint32_t ivec; | 129 | uint32_t ivec; |
| 130 | size_t clen; | ||
| 131 | int k; | ||
| 133 | 132 | ||
| 134 | /* Generate INT(i + 1). */ | 133 | /* Generate INT(i + 1). */ |
| 135 | ivec = SWAP_BE32((uint32_t)(i + 1)); | 134 | ivec = SWAP_BE32((uint32_t)(i + 1)); |
| 136 | 135 | ||
| 137 | /* Compute U_1 = PRF(P, S || INT(i)). */ | 136 | /* Compute U_1 = PRF(P, S || INT(i)). */ |
| 138 | memcpy(&hctx, &PShctx, sizeof(HMAC_SHA256_CTX)); | 137 | hctx = PShctx; |
| 139 | HMAC_SHA256_Update(&hctx, &ivec, 4); | 138 | HMAC_SHA256_Update(&hctx, &ivec, 4); |
| 140 | HMAC_SHA256_Final(&hctx, T); | 139 | HMAC_SHA256_Final(&hctx, T); |
| 141 | 140 | ||
| @@ -144,19 +143,20 @@ PBKDF2_SHA256(const uint8_t *passwd, size_t passwdlen, | |||
| 144 | memcpy(U, T, 32); | 143 | memcpy(U, T, 32); |
| 145 | for (j = 2; j <= c; j++) { | 144 | for (j = 2; j <= c; j++) { |
| 146 | /* Compute U_j. */ | 145 | /* Compute U_j. */ |
| 147 | memcpy(&hctx, &Phctx, sizeof(HMAC_SHA256_CTX)); | 146 | hctx = Phctx; |
| 148 | HMAC_SHA256_Update(&hctx, U, 32); | 147 | HMAC_SHA256_Update(&hctx, U, 32); |
| 149 | HMAC_SHA256_Final(&hctx, U); | 148 | HMAC_SHA256_Final(&hctx, U); |
| 150 | /* ... xor U_j ... */ | 149 | /* ... xor U_j ... */ |
| 151 | for (k = 0; k < 32; k++) | 150 | for (k = 0; k < 32 / 8; k++) |
| 152 | T[k] ^= U[k]; | 151 | T[k] ^= U[k]; |
| 153 | } | 152 | } |
| 154 | } | 153 | } |
| 155 | 154 | ||
| 156 | /* Copy as many bytes as necessary into buf. */ | 155 | /* Copy as many bytes as necessary into buf. */ |
| 157 | clen = dkLen - i * 32; | 156 | clen = dkLen; |
| 158 | if (clen > 32) | 157 | if (clen > 32) |
| 159 | clen = 32; | 158 | clen = 32; |
| 160 | memcpy(&buf[i * 32], T, clen); | 159 | buf = mempcpy(buf, T, clen); |
| 160 | dkLen -= clen; | ||
| 161 | } | 161 | } |
| 162 | } | 162 | } |
