40#ifndef QSC_SPHINCSPLUS_H
41#define QSC_SPHINCSPLUS_H
45QSC_CPLUSPLUS_ENABLED_START
85#if defined(QSC_SPHINCSPLUS_S1S128SHAKERF)
91# define QSC_SPHINCSPLUS_SIGNATURE_SIZE 17088
97# define QSC_SPHINCSPLUS_PRIVATEKEY_SIZE 64
103# define QSC_SPHINCSPLUS_PUBLICKEY_SIZE 32
105#elif defined(QSC_SPHINCSPLUS_S1S128SHAKERS)
111# define QSC_SPHINCSPLUS_SIGNATURE_SIZE 7856
117# define QSC_SPHINCSPLUS_PRIVATEKEY_SIZE 64
123# define QSC_SPHINCSPLUS_PUBLICKEY_SIZE 32
125#elif defined(QSC_SPHINCSPLUS_S3S192SHAKERF)
131# define QSC_SPHINCSPLUS_SIGNATURE_SIZE 35664
137# define QSC_SPHINCSPLUS_PRIVATEKEY_SIZE 96
143# define QSC_SPHINCSPLUS_PUBLICKEY_SIZE 48
144#elif defined(QSC_SPHINCSPLUS_S3S192SHAKERS)
150# define QSC_SPHINCSPLUS_SIGNATURE_SIZE 16224
156# define QSC_SPHINCSPLUS_PRIVATEKEY_SIZE 96
162# define QSC_SPHINCSPLUS_PUBLICKEY_SIZE 48
164#elif defined(QSC_SPHINCSPLUS_S5S256SHAKERF)
170# define QSC_SPHINCSPLUS_SIGNATURE_SIZE 49856
176# define QSC_SPHINCSPLUS_PRIVATEKEY_SIZE 128
182# define QSC_SPHINCSPLUS_PUBLICKEY_SIZE 64
184#elif defined(QSC_SPHINCSPLUS_S5S256SHAKERS)
190# define QSC_SPHINCSPLUS_SIGNATURE_SIZE 29792
196# define QSC_SPHINCSPLUS_PRIVATEKEY_SIZE 128
202# define QSC_SPHINCSPLUS_PUBLICKEY_SIZE 64
204#elif defined(QSC_SPHINCSPLUS_S6S512SHAKERF)
207# define QSC_SPHINCSPLUS_EXTENDED
213# define QSC_SPHINCSPLUS_SIGNATURE_SIZE 165056
219# define QSC_SPHINCSPLUS_PRIVATEKEY_SIZE 256
225# define QSC_SPHINCSPLUS_PUBLICKEY_SIZE 128
227#elif defined(QSC_SPHINCSPLUS_S6S512SHAKERS)
230# define QSC_SPHINCSPLUS_EXTENDED
236# define QSC_SPHINCSPLUS_SIGNATURE_SIZE 113344
242# define QSC_SPHINCSPLUS_PRIVATEKEY_SIZE 256
248# define QSC_SPHINCSPLUS_PUBLICKEY_SIZE 128
251# error "The SPHINCS+ parameter set is invalid!"
258#define QSC_SPHINCSPLUS_ALGNAME "SPHINCSPLUS"
283QSC_EXPORT_API void qsc_sphincsplus_sign(uint8_t* signedmsg,
size_t* smsglen,
const uint8_t* message,
size_t msglen,
const uint8_t* privatekey,
bool (*rng_generate)(uint8_t*,
size_t));
297QSC_CPLUSPLUS_ENABLED_END
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.
#define QSC_EXPORT_API
API export macro for Microsoft compilers when importing from a DLL.
Definition common.h:520
QSC_EXPORT_API void qsc_sphincsplus_sign(uint8_t *signedmsg, size_t *smsglen, const uint8_t *message, size_t msglen, const uint8_t *privatekey, bool(*rng_generate)(uint8_t *, size_t))
Takes the message as input and returns an array containing the signature followed by the message.
Definition sphincsplus.c:16
QSC_EXPORT_API void qsc_sphincsplus_generate_keypair(uint8_t *publickey, uint8_t *privatekey, bool(*rng_generate)(uint8_t *, size_t))
Generates a Sphincs+ public/private key-pair.
Definition sphincsplus.c:4
QSC_EXPORT_API bool qsc_sphincsplus_verify(uint8_t *message, size_t *msglen, const uint8_t *signedmsg, size_t smsglen, const uint8_t *publickey)
Verifies a signature-message pair with the public key.
Definition sphincsplus.c:30