QSC Post Quantum Cryptographic Library 1.0.0.6c (A6)
A post quantum secure library written in Ansi C
 
Loading...
Searching...
No Matches
sphincsplus.h File Reference

The FIPS 205 implementation of the Sphincs+ Asymmetric Signature Scheme. More...

#include "common.h"

Go to the source code of this file.

Macros

#define QSC_SPHINCSPLUS_SIGNATURE_SIZE   49856
 The byte size of the signature array.
 
#define QSC_SPHINCSPLUS_PRIVATEKEY_SIZE   128
 The byte size of the secret private-key array.
 
#define QSC_SPHINCSPLUS_PUBLICKEY_SIZE   64
 The byte size of the public-key array.
 
#define QSC_SPHINCSPLUS_ALGNAME   "SPHINCSPLUS"
 The formal algorithm name.
 

Functions

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.
 
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.
 
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.
 

Detailed Description

The FIPS 205 implementation of the Sphincs+ Asymmetric Signature Scheme.

This header defines the primary public API for the FIPS 205 Sphincs+ asymmetric signature scheme implementation. It provides functions for generating key pairs, signing messages, and verifying signatures. The implementation is based on the C reference branch of SPHINCS+ from the FIPS 205 implementation.

// Example usage:
#define MSGLEN 32
uint8_t msg[MSGLEN];
uint8_t smsg[QSC_SPHINCSPLUS_SIGNATURE_SIZE + MSGLEN];
uint8_t rmsg[MSGLEN];
uint32_t smsglen = 0;
uint32_t rmsglen = 0;
// Generate the key pair
qsc_sphincsplus_generate_keypair(pk, sk, rng_generate);
// Sign the message
qsc_sphincsplus_sign(smsg, &smsglen, msg, MSGLEN, sk, rng_generate);
// Verify the signature and recover the message
if (!qsc_sphincsplus_verify(rmsg, &rmsglen, smsg, smsglen, pk))
{
// Signature verification failed; handle error.
}
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
#define QSC_SPHINCSPLUS_SIGNATURE_SIZE
The byte size of the signature array.
Definition sphincsplus.h:170
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
#define QSC_SPHINCSPLUS_PUBLICKEY_SIZE
The byte size of the public-key array.
Definition sphincsplus.h:182
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
#define QSC_SPHINCSPLUS_PRIVATEKEY_SIZE
The byte size of the secret private-key array.
Definition sphincsplus.h:176

Reference Links:

NIST FIPS-205 SPHINCS+ Specification SPHINCS+ Website

Function Documentation

◆ qsc_sphincsplus_generate_keypair()

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.

Warning
Arrays must be sized to QSC_SPHINCSPLUS_PUBLICKEY_SIZE and QSC_SPHINCSPLUS_SECRETKEY_SIZE.
Parameters
publickey[uint8_t*] Pointer to the public verification-key array
privatekey[uint8_t*] Pointer to the private signature-key array
rng_generate[(uint8_t*, size_t)] Pointer to the random generator

◆ qsc_sphincsplus_sign()

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.

Warning
Signature array must be sized to the size of the message plus QSC_SPHINCSPLUS_SIGNATURE_SIZE.
Parameters
signedmsg[uint8_t*] Pointer to the signed-message array
smsglen[size_t*] Pointer to the signed message length
message[const uint8_t*] Pointer to the message array
msglen[size_t] The message length
privatekey[const uint8_t*] Pointer to the private signature-key array
rng_generate[(uint8_t*, size_t)] Pointer to the random generator

◆ qsc_sphincsplus_verify()

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.

Parameters
message[uint8_t*] Pointer to the message array to be signed
msglen[size_t*] Pointer to the message length
signedmsg[const uint8_t*] Pointer to the signed message array
smsglen[size_t] The signed message length
publickey[const uint8_t*] Pointer to the public verification-key array
Returns
[bool] Returns true for success