Skip to content

Commit 0270ed9

Browse files
committed
Use tables and roll up some loops
Saves 108 bytes (measured as in previous commit).
1 parent 7f07195 commit 0270ed9

File tree

1 file changed

+14
-26
lines changed

1 file changed

+14
-26
lines changed

library/sha512.c

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ int mbedtls_internal_sha512_process( mbedtls_sha512_context *ctx,
228228
{
229229
int i;
230230
uint64_t temp1, temp2, W[80];
231-
uint64_t A, B, C, D, E, F, G, H;
231+
uint64_t A[8];
232232

233233
SHA512_VALIDATE_RET( ctx != NULL );
234234
SHA512_VALIDATE_RET( (const unsigned char *)data != NULL );
@@ -253,6 +253,9 @@ int mbedtls_internal_sha512_process( mbedtls_sha512_context *ctx,
253253
(d) += temp1; (h) = temp1 + temp2; \
254254
} while( 0 )
255255

256+
for( i = 0; i < 8; i++ )
257+
A[i] = ctx->state[i];
258+
256259
for( i = 0; i < 16; i++ )
257260
{
258261
GET_UINT64_BE( W[i], data, i << 3 );
@@ -264,37 +267,22 @@ int mbedtls_internal_sha512_process( mbedtls_sha512_context *ctx,
264267
S0(W[i - 15]) + W[i - 16];
265268
}
266269

267-
A = ctx->state[0];
268-
B = ctx->state[1];
269-
C = ctx->state[2];
270-
D = ctx->state[3];
271-
E = ctx->state[4];
272-
F = ctx->state[5];
273-
G = ctx->state[6];
274-
H = ctx->state[7];
275270
i = 0;
276-
277271
do
278272
{
279-
P( A, B, C, D, E, F, G, H, W[i], K[i] ); i++;
280-
P( H, A, B, C, D, E, F, G, W[i], K[i] ); i++;
281-
P( G, H, A, B, C, D, E, F, W[i], K[i] ); i++;
282-
P( F, G, H, A, B, C, D, E, W[i], K[i] ); i++;
283-
P( E, F, G, H, A, B, C, D, W[i], K[i] ); i++;
284-
P( D, E, F, G, H, A, B, C, W[i], K[i] ); i++;
285-
P( C, D, E, F, G, H, A, B, W[i], K[i] ); i++;
286-
P( B, C, D, E, F, G, H, A, W[i], K[i] ); i++;
273+
P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], W[i], K[i] ); i++;
274+
P( A[7], A[0], A[1], A[2], A[3], A[4], A[5], A[6], W[i], K[i] ); i++;
275+
P( A[6], A[7], A[0], A[1], A[2], A[3], A[4], A[5], W[i], K[i] ); i++;
276+
P( A[5], A[6], A[7], A[0], A[1], A[2], A[3], A[4], W[i], K[i] ); i++;
277+
P( A[4], A[5], A[6], A[7], A[0], A[1], A[2], A[3], W[i], K[i] ); i++;
278+
P( A[3], A[4], A[5], A[6], A[7], A[0], A[1], A[2], W[i], K[i] ); i++;
279+
P( A[2], A[3], A[4], A[5], A[6], A[7], A[0], A[1], W[i], K[i] ); i++;
280+
P( A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[0], W[i], K[i] ); i++;
287281
}
288282
while( i < 80 );
289283

290-
ctx->state[0] += A;
291-
ctx->state[1] += B;
292-
ctx->state[2] += C;
293-
ctx->state[3] += D;
294-
ctx->state[4] += E;
295-
ctx->state[5] += F;
296-
ctx->state[6] += G;
297-
ctx->state[7] += H;
284+
for( i = 0; i < 8; i++ )
285+
ctx->state[i] += A[i];
298286

299287
return( 0 );
300288
}

0 commit comments

Comments
 (0)