17 Commits

Author SHA1 Message Date
73654f751c reduce buffer size to 8 bytes
instead of buffering an entire block, buffer only when the input is not
aligned to 8 bytes, and otherwise xor uint64-sized chunks directly into
the state.

the code is a little more complicated but i think it's worth it.
we could eliminate the buffer entirely but that requires either
shenanigans with unsafe, or fiddly code to xor partial uint64s

a caveat is that the implementation now only supports sponge capacities
that are a multiple of 8. that's fine for the standard instantiations
but may restrict unusual applications.

not only does this let us reduce the buffer from 200 bytes to 8,
it also provides a nice speedup

name      old time/op    new time/op    delta
256_8-2     1.45µs ± 0%    1.28µs ± 1%  -11.58%  (p=0.000 n=10+10)
256_1k-2    10.1µs ± 0%     9.3µs ± 0%   -7.67%  (p=0.000 n=10+10)
256_8k-2    75.6µs ± 0%    70.2µs ± 1%   -7.09%  (p=0.000 n=10+10)
512_8-2     1.39µs ± 1%    1.29µs ± 1%   -6.85%  (p=0.000 n=10+10)
512_1k-2    18.7µs ± 0%    17.0µs ± 0%   -8.70%   (p=0.000 n=9+10)
512_8k-2     146µs ± 1%     129µs ± 0%  -11.70%   (p=0.000 n=10+9)

name      old speed      new speed      delta
256_8-2   5.53MB/s ± 0%  6.25MB/s ± 0%  +13.06%  (p=0.000 n=10+10)
256_1k-2   102MB/s ± 0%   110MB/s ± 0%   +8.30%  (p=0.000 n=10+10)
256_8k-2   108MB/s ± 0%   117MB/s ± 1%   +7.64%  (p=0.000 n=10+10)
512_8-2   5.78MB/s ± 1%  6.20MB/s ± 1%   +7.32%  (p=0.000 n=10+10)
512_1k-2  54.9MB/s ± 0%  60.1MB/s ± 0%   +9.53%   (p=0.000 n=9+10)
512_8k-2  56.1MB/s ± 1%  63.5MB/s ± 0%  +13.26%   (p=0.000 n=10+9)
2024-10-06 18:07:16 -07:00
70a9bfa87d help the bounds checker in le64dec 2024-10-06 00:47:45 -07:00
b64eff8ecd add digest.clone method and use it in Sum 2024-10-05 20:17:20 -07:00
0de798ef8f avoid an indirect call 2024-10-05 19:22:41 -07:00
517ccd27fd Remove unnecessary label 2024-10-04 23:46:16 -07:00
33dc508782 Gofmt. 2015-01-01 03:10:11 -08:00
f67abd3a9d Refactor: use [25]uint64 instead of [5][5]uint64. 2015-01-01 03:00:28 -08:00
7b01515ff6 Gofmt. 2014-12-31 23:59:40 -08:00
dd21e91ec1 Add 512-bit hash. Use SHA-3 padding. 2014-12-31 23:19:05 -08:00
58e2940852 Remove dead function. 2014-12-31 20:30:56 -08:00
64c5855490 Optimize loads and stores a bit. 2014-12-31 16:52:34 -08:00
df6edcd0bb Generate a faster round function. 2014-12-31 16:43:36 -08:00
c9dcfb85a1 Gofmt 2014-12-31 15:19:23 -08:00
e40b3562fb Perform keccak-f in-place. 2014-12-31 15:17:55 -08:00
5ee886a4b3 Swap x and y. 2014-12-31 15:15:49 -08:00
0ed98686b8 Combine keccakf steps. 2014-12-31 15:11:40 -08:00
ed04711f60 Initial commit. 2014-12-31 14:59:00 -08:00