This repository contains the software for the SPHINCS+C scheme.
It is based on the SPHINCS+ submission repository that contains the software that accompanies the SPHINCS+ submission to NIST's Post-Quantum Cryptography project.
Currently, only the reference implementation for shake is supported.
The SPHINCS+C scheme presents several novel methods for further compressing the signature size of SPHICS+ while requiring negligible added computational costs for the signer and faster verification time. Like SPHINCS+, we present named instances for specific hash functions and concrete parameters for the security level, tree dimensions, WOTS+C, and FORS+C. This reference implementation allows for more flexibility, as parameters can be specified in a params.h
file. The proposed parameter sets have been predefined in ref/params/params-*.h
, and the hash function can be varied by linking with the different implementations of hash.h
, i.e., hash_haraka.c
, hash_sha2.c
and hash_shake.c
, as well as different implementations of thash.h
, i.e., *_robust.c
and *_simple.c
. This is demonstrated in the Makefile
. Note that only variants based on the reference SHAKE implementation are currently supported. See the table below for a summary of the parameter sets. These parameters target the NIST security categories 1, 3, and 5; each category has a parameter set geared towards either small signatures or fast signature generation.
n | h | d | log(t) | k | w | log(t') | bit security | pk bytes | sk bytes | sig bytes | |
---|---|---|---|---|---|---|---|---|---|---|---|
SPHINCS+-128s | 16 | 66 | 11 | 13 | 9 | 128 | 18 | 128 | 32 | 64 | 6,304 |
SPHINCS+-128f | 16 | 63 | 21 | 9 | 19 | 16 | 8 | 128 | 32 | 64 | 14,904 |
SPHINCS+-192s | 24 | 66 | 11 | 15 | 13 | 128 | 12 | 192 | 48 | 96 | 13,776 |
SPHINCS+-192f | 24 | 66 | 22 | 9 | 25 | 16 | 13 | 192 | 48 | 96 | 33,044 |
SPHINCS+-256s | 32 | 66 | 11 | 14 | 19 | 64 | 19 | 256 | 64 | 128 | 26,096 |
SPHINCS+-256f | 32 | 64 | 16 | 10 | 33 | 16 | 10 | 256 | 64 | 128 | 46,884 |
Following the original code from the SPHINCS+ submission repository, all included code is available under the CC0 1.0 Universal Public Domain Dedication, with the exception of rng.c
, rng.h
and PQCgenKAT_sign.c
, which were provided by NIST.
We thank Ofek Bransky for his contribution to the implementation and benchmark of the code.