aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2025-07-06 18:35:37 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2025-07-06 18:35:37 +0200
commitf5af8aefeae7fd73167403dd407e9a14aead5948 (patch)
tree9155eb58ca7aa2632fd2555894695fb541ef9b1b /libbb
parentb8f76001662ad4b3073945589a0cb270b627c994 (diff)
downloadbusybox-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.c28
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 */
79static void 79static void
80HMAC_SHA256_Final(HMAC_SHA256_CTX *ctx, uint8_t digest[32]) 80HMAC_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 */
95static void 95static void
96HMAC_SHA256_Buf(const void *K, size_t Klen, const void *in, size_t len, 96HMAC_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}