diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2020-09-30 22:22:04 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2020-09-30 22:22:04 +0200 |
commit | abefc3c276ac2450f756c5232745a145bd14dbdf (patch) | |
tree | 8d219423dc6480bfc7a28be9b83fc5a14712e1e6 | |
parent | bd202a5ec15b82ba9562cdd81157e703349d8459 (diff) | |
download | busybox-w32-abefc3c276ac2450f756c5232745a145bd14dbdf.tar.gz busybox-w32-abefc3c276ac2450f756c5232745a145bd14dbdf.tar.bz2 busybox-w32-abefc3c276ac2450f756c5232745a145bd14dbdf.zip |
libbb: fold common64_hash() into its only user
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | libbb/hash_md5_sha.c | 75 |
1 files changed, 28 insertions, 47 deletions
diff --git a/libbb/hash_md5_sha.c b/libbb/hash_md5_sha.c index 9db79ea8b..d8f210173 100644 --- a/libbb/hash_md5_sha.c +++ b/libbb/hash_md5_sha.c | |||
@@ -38,35 +38,6 @@ static ALWAYS_INLINE uint64_t rotl64(uint64_t x, unsigned n) | |||
38 | return (x << n) | (x >> (64 - n)); | 38 | return (x << n) | (x >> (64 - n)); |
39 | } | 39 | } |
40 | 40 | ||
41 | /* Feed data through a temporary buffer. | ||
42 | * The internal buffer remembers previous data until it has 64 | ||
43 | * bytes worth to pass on. | ||
44 | */ | ||
45 | static void FAST_FUNC common64_hash(md5_ctx_t *ctx, const void *buffer, size_t len) | ||
46 | { | ||
47 | unsigned bufpos = ctx->total64 & 63; | ||
48 | |||
49 | ctx->total64 += len; | ||
50 | |||
51 | while (1) { | ||
52 | unsigned remaining = 64 - bufpos; | ||
53 | if (remaining > len) | ||
54 | remaining = len; | ||
55 | /* Copy data into aligned buffer */ | ||
56 | memcpy(ctx->wbuffer + bufpos, buffer, remaining); | ||
57 | len -= remaining; | ||
58 | buffer = (const char *)buffer + remaining; | ||
59 | bufpos += remaining; | ||
60 | /* Clever way to do "if (bufpos != N) break; ... ; bufpos = 0;" */ | ||
61 | bufpos -= 64; | ||
62 | if (bufpos != 0) | ||
63 | break; | ||
64 | /* Buffer is filled up, process it */ | ||
65 | ctx->process_block(ctx); | ||
66 | /*bufpos = 0; - already is */ | ||
67 | } | ||
68 | } | ||
69 | |||
70 | /* Process the remaining bytes in the buffer */ | 41 | /* Process the remaining bytes in the buffer */ |
71 | static void FAST_FUNC common64_end(md5_ctx_t *ctx, int swap_needed) | 42 | static void FAST_FUNC common64_end(md5_ctx_t *ctx, int swap_needed) |
72 | { | 43 | { |
@@ -449,7 +420,29 @@ void FAST_FUNC md5_begin(md5_ctx_t *ctx) | |||
449 | /* Used also for sha1 and sha256 */ | 420 | /* Used also for sha1 and sha256 */ |
450 | void FAST_FUNC md5_hash(md5_ctx_t *ctx, const void *buffer, size_t len) | 421 | void FAST_FUNC md5_hash(md5_ctx_t *ctx, const void *buffer, size_t len) |
451 | { | 422 | { |
452 | common64_hash(ctx, buffer, len); | 423 | unsigned bufpos = ctx->total64 & 63; |
424 | |||
425 | ctx->total64 += len; | ||
426 | |||
427 | while (1) { | ||
428 | unsigned remaining = 64 - bufpos; | ||
429 | if (remaining > len) | ||
430 | remaining = len; | ||
431 | /* Copy data into aligned buffer */ | ||
432 | memcpy(ctx->wbuffer + bufpos, buffer, remaining); | ||
433 | len -= remaining; | ||
434 | buffer = (const char *)buffer + remaining; | ||
435 | bufpos += remaining; | ||
436 | |||
437 | /* Clever way to do "if (bufpos != N) break; ... ; bufpos = 0;" */ | ||
438 | bufpos -= 64; | ||
439 | if (bufpos != 0) | ||
440 | break; | ||
441 | |||
442 | /* Buffer is filled up, process it */ | ||
443 | ctx->process_block(ctx); | ||
444 | /*bufpos = 0; - already is */ | ||
445 | } | ||
453 | } | 446 | } |
454 | 447 | ||
455 | /* Process the remaining bytes in the buffer and put result from CTX | 448 | /* Process the remaining bytes in the buffer and put result from CTX |
@@ -816,7 +809,7 @@ void FAST_FUNC sha512_begin(sha512_ctx_t *ctx) | |||
816 | int i; | 809 | int i; |
817 | /* Two extra iterations zero out ctx->total64[2] */ | 810 | /* Two extra iterations zero out ctx->total64[2] */ |
818 | uint64_t *tp = ctx->total64; | 811 | uint64_t *tp = ctx->total64; |
819 | for (i = 0; i < 2+8; i++) | 812 | for (i = 0; i < 8 + 2; i++) |
820 | tp[i] = ((uint64_t)(init256[i]) << 32) + init512_lo[i]; | 813 | tp[i] = ((uint64_t)(init256[i]) << 32) + init512_lo[i]; |
821 | /*ctx->total64[0] = ctx->total64[1] = 0; - already done */ | 814 | /*ctx->total64[0] = ctx->total64[1] = 0; - already done */ |
822 | } | 815 | } |
@@ -832,22 +825,7 @@ void FAST_FUNC sha512_hash(sha512_ctx_t *ctx, const void *buffer, size_t len) | |||
832 | ctx->total64[0] += len; | 825 | ctx->total64[0] += len; |
833 | if (ctx->total64[0] < len) | 826 | if (ctx->total64[0] < len) |
834 | ctx->total64[1]++; | 827 | ctx->total64[1]++; |
835 | # if 0 | ||
836 | remaining = 128 - bufpos; | ||
837 | 828 | ||
838 | /* Hash whole blocks */ | ||
839 | while (len >= remaining) { | ||
840 | memcpy(ctx->wbuffer + bufpos, buffer, remaining); | ||
841 | buffer = (const char *)buffer + remaining; | ||
842 | len -= remaining; | ||
843 | remaining = 128; | ||
844 | bufpos = 0; | ||
845 | sha512_process_block128(ctx); | ||
846 | } | ||
847 | |||
848 | /* Save last, partial blosk */ | ||
849 | memcpy(ctx->wbuffer + bufpos, buffer, len); | ||
850 | # else | ||
851 | while (1) { | 829 | while (1) { |
852 | remaining = 128 - bufpos; | 830 | remaining = 128 - bufpos; |
853 | if (remaining > len) | 831 | if (remaining > len) |
@@ -857,15 +835,16 @@ void FAST_FUNC sha512_hash(sha512_ctx_t *ctx, const void *buffer, size_t len) | |||
857 | len -= remaining; | 835 | len -= remaining; |
858 | buffer = (const char *)buffer + remaining; | 836 | buffer = (const char *)buffer + remaining; |
859 | bufpos += remaining; | 837 | bufpos += remaining; |
838 | |||
860 | /* Clever way to do "if (bufpos != N) break; ... ; bufpos = 0;" */ | 839 | /* Clever way to do "if (bufpos != N) break; ... ; bufpos = 0;" */ |
861 | bufpos -= 128; | 840 | bufpos -= 128; |
862 | if (bufpos != 0) | 841 | if (bufpos != 0) |
863 | break; | 842 | break; |
843 | |||
864 | /* Buffer is filled up, process it */ | 844 | /* Buffer is filled up, process it */ |
865 | sha512_process_block128(ctx); | 845 | sha512_process_block128(ctx); |
866 | /*bufpos = 0; - already is */ | 846 | /*bufpos = 0; - already is */ |
867 | } | 847 | } |
868 | # endif | ||
869 | } | 848 | } |
870 | #endif /* NEED_SHA512 */ | 849 | #endif /* NEED_SHA512 */ |
871 | 850 | ||
@@ -1398,10 +1377,12 @@ void FAST_FUNC sha3_hash(sha3_ctx_t *ctx, const void *buffer, size_t len) | |||
1398 | bufpos++; | 1377 | bufpos++; |
1399 | remaining--; | 1378 | remaining--; |
1400 | } | 1379 | } |
1380 | |||
1401 | /* Clever way to do "if (bufpos != N) break; ... ; bufpos = 0;" */ | 1381 | /* Clever way to do "if (bufpos != N) break; ... ; bufpos = 0;" */ |
1402 | bufpos -= ctx->input_block_bytes; | 1382 | bufpos -= ctx->input_block_bytes; |
1403 | if (bufpos != 0) | 1383 | if (bufpos != 0) |
1404 | break; | 1384 | break; |
1385 | |||
1405 | /* Buffer is filled up, process it */ | 1386 | /* Buffer is filled up, process it */ |
1406 | sha3_process_block72(ctx->state); | 1387 | sha3_process_block72(ctx->state); |
1407 | /*bufpos = 0; - already is */ | 1388 | /*bufpos = 0; - already is */ |