I noticed a bug in sha256_update8x (which isn't hit.) Instead of fixing it, I think it's better not to use a streaming API at all. So I simplified to just sha256x8 and sha256x8_seeded. This also allows to remove some memcpy's. (Cf. #1 )
Yields a ~7% speed-up.
Old:
Parameters: n = 32, h = 64, d = 8, b = 14, k = 22, w = 16
Running 10 iterations.
Generating keypair.. avg. 72649.16 us (0.07 sec); median 260,082,580 cycles, 1x: 260,082,580 cycles
- WOTS pk gen 8x.. avg. 2271.23 us (0.00 sec); median 8,151,283 cycles, 32x: 260,841,056 cycles
Signing.. avg. 852742.20 us (0.85 sec); median 3,061,426,054 cycles, 1x: 3,061,426,054 cycles
- FORS signing.. avg. 271187.83 us (0.27 sec); median 972,758,629 cycles, 1x: 972,758,629 cycles
- WOTS pk gen x8.. avg. 2298.82 us (0.00 sec); median 8,272,768 cycles, 256x: 2,117,828,608 cycles
Verifying.. avg. 2028.46 us (0.00 sec); median 7,285,438 cycles, 1x: 7,285,438 cycles
New:
Parameters: n = 32, h = 64, d = 8, b = 14, k = 22, w = 16
Running 10 iterations.
Generating keypair.. avg. 68601.78 us (0.07 sec); median 245,590,489 cycles, 1x: 245,590,489 cycles
- WOTS pk gen 8x.. avg. 2123.27 us (0.00 sec); median 7,619,943 cycles, 32x: 243,838,176 cycles
Signing.. avg. 800610.23 us (0.80 sec); median 2,875,063,056 cycles, 1x: 2,875,063,056 cycles
- FORS signing.. avg. 254682.78 us (0.25 sec); median 914,055,381 cycles, 1x: 914,055,381 cycles
- WOTS pk gen x8.. avg. 2117.12 us (0.00 sec); median 7,576,519 cycles, 256x: 1,939,588,864 cycles
Verifying.. avg. 1940.87 us (0.00 sec); median 6,923,338 cycles, 1x: 6,923,338 cycles
I noticed a bug in
sha256_update8x
(which isn't hit.) Instead of fixing it, I think it's better not to use a streaming API at all. So I simplified to justsha256x8
andsha256x8_seeded
. This also allows to remove some memcpy's. (Cf. #1 )Yields a ~7% speed-up.
Old:
New: