Commit Graph

17 Commits (4c06f23ff1365a28c4a1e99298c05f63cf97fb2a)

Author SHA1 Message Date
magical 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
magical 70a9bfa87d help the bounds checker in le64dec 2024-10-06 00:47:45 -07:00
magical b64eff8ecd add digest.clone method and use it in Sum 2024-10-05 20:17:20 -07:00
magical 0de798ef8f avoid an indirect call 2024-10-05 19:22:41 -07:00
magical 517ccd27fd Remove unnecessary label 2024-10-04 23:46:16 -07:00
magical 33dc508782 Gofmt. 2015-01-01 03:10:11 -08:00
magical f67abd3a9d Refactor: use [25]uint64 instead of [5][5]uint64. 2015-01-01 03:00:28 -08:00
magical 7b01515ff6 Gofmt. 2014-12-31 23:59:40 -08:00
magical dd21e91ec1 Add 512-bit hash. Use SHA-3 padding. 2014-12-31 23:19:05 -08:00
magical 58e2940852 Remove dead function. 2014-12-31 20:30:56 -08:00
magical 64c5855490 Optimize loads and stores a bit. 2014-12-31 16:52:34 -08:00
magical df6edcd0bb Generate a faster round function. 2014-12-31 16:43:36 -08:00
magical c9dcfb85a1 Gofmt 2014-12-31 15:19:23 -08:00
magical e40b3562fb Perform keccak-f in-place. 2014-12-31 15:17:55 -08:00
magical 5ee886a4b3 Swap x and y. 2014-12-31 15:15:49 -08:00
magical 0ed98686b8 Combine keccakf steps. 2014-12-31 15:11:40 -08:00
magical ed04711f60 Initial commit. 2014-12-31 14:59:00 -08:00