sphincs / sphincsplus

The SPHINCS+ reference code, accompanying the submission to NIST's Post-Quantum Cryptography project
https://sphincs.org
Other
131 stars 44 forks source link

Simplify SHA256x8 for the compiler #18

Closed bwesterb closed 3 years ago

bwesterb commented 3 years ago

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
kste commented 3 years ago

This looks good to me :-). Thanks Bas!