shrink sha hashing a bit more (remove wbuflen field from ctx),

remove the requirement for aligned buffer

function                                             old     new   delta
sha512_hash                                          262     297     +35
sha1_end                                             136     143      +7
passwd_main                                         1019    1023      +4
sha256_end                                           135     137      +2
count_lines                                           72      74      +2
sha256_hash                                          259     260      +1
popstring                                            164     158      -6
sha512_begin                                          88      81      -7
sha256_begin                                          44      37      -7
parse_expr                                           832     824      -8
bbunpack                                             446     438      -8
sha256_process_block64                               529     520      -9
md5_end                                              166     151     -15
evaltreenr                                           817     802     -15
evaltree                                             817     802     -15
sha512_end                                           204     182     -22
sha512_process_block128                             1444    1405     -39
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 6/11 up/down: 51/-151)         Total: -100 bytes
This commit is contained in:
Denis Vlasenko
2009-03-12 15:40:27 +00:00
parent 6a5d9faa29
commit cd2cd312b7
3 changed files with 113 additions and 136 deletions

View File

@@ -416,15 +416,14 @@ void FAST_FUNC md5_end(void *resbuf, md5_ctx_t *ctx)
md5_hash_block(ctx->buffer, ctx);
md5_hash_block(buf, ctx);
/* Put result from CTX in first 16 bytes following RESBUF. The result is
* always in little endian byte order, so that a byte-wise output yields
* to the wanted ASCII representation of the message digest.
*
* IMPORTANT: On some systems it is required that RESBUF is correctly
* aligned for a 32 bits value.
/* The MD5 result is in little endian byte order.
* We (ab)use the fact that A-D are consecutive in memory.
*/
((uint32_t *) resbuf)[0] = SWAP_LE32(ctx->A);
((uint32_t *) resbuf)[1] = SWAP_LE32(ctx->B);
((uint32_t *) resbuf)[2] = SWAP_LE32(ctx->C);
((uint32_t *) resbuf)[3] = SWAP_LE32(ctx->D);
#if BB_BIG_ENDIAN
ctx->A = SWAP_LE32(ctx->A);
ctx->B = SWAP_LE32(ctx->B);
ctx->C = SWAP_LE32(ctx->C);
ctx->D = SWAP_LE32(ctx->D);
#endif
memcpy(resbuf, &ctx->A, sizeof(ctx->A) * 4);
}