1 #ifndef PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_API_H
2 #define PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_API_H
3 
4 #include <stddef.h>
5 #include <stdint.h>
6 
7 
8 
9 #define PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_CRYPTO_ALGNAME "SPHINCS+"
10 
11 #define PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_CRYPTO_SECRETKEYBYTES 96
12 #define PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_CRYPTO_PUBLICKEYBYTES 48
13 #define PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_CRYPTO_BYTES 16224
14 #define PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_CRYPTO_SEEDBYTES 72
15 
16 
17 /*
18  * Returns the length of a secret key, in bytes
19  */
20 size_t PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_crypto_sign_secretkeybytes(void);
21 
22 /*
23  * Returns the length of a public key, in bytes
24  */
25 size_t PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_crypto_sign_publickeybytes(void);
26 
27 /*
28  * Returns the length of a signature, in bytes
29  */
30 size_t PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_crypto_sign_bytes(void);
31 
32 /*
33  * Returns the length of the seed required to generate a key pair, in bytes
34  */
35 size_t PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_crypto_sign_seedbytes(void);
36 
37 /*
38  * Generates a SPHINCS+ key pair given a seed.
39  * Format sk: [SK_SEED || SK_PRF || PUB_SEED || root]
40  * Format pk: [root || PUB_SEED]
41  */
42 int PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_crypto_sign_seed_keypair(
43     uint8_t *pk, uint8_t *sk, const uint8_t *seed);
44 
45 /*
46  * Generates a SPHINCS+ key pair.
47  * Format sk: [SK_SEED || SK_PRF || PUB_SEED || root]
48  * Format pk: [root || PUB_SEED]
49  */
50 int PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_crypto_sign_keypair(
51     uint8_t *pk, uint8_t *sk);
52 
53 /**
54  * Returns an array containing a detached signature.
55  */
56 int PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_crypto_sign_signature(
57     uint8_t *sig, size_t *siglen,
58     const uint8_t *m, size_t mlen, const uint8_t *sk);
59 
60 /**
61  * Verifies a detached signature and message under a given public key.
62  */
63 int PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_crypto_sign_verify(
64     const uint8_t *sig, size_t siglen,
65     const uint8_t *m, size_t mlen, const uint8_t *pk);
66 
67 /**
68  * Returns an array containing the signature followed by the message.
69  */
70 int PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_crypto_sign(
71     uint8_t *sm, size_t *smlen,
72     const uint8_t *m, size_t mlen, const uint8_t *sk);
73 
74 /**
75  * Verifies a given signature-message pair under a given public key.
76  */
77 int PQCLEAN_SPHINCSSHA256192SROBUST_CLEAN_crypto_sign_open(
78     uint8_t *m, size_t *mlen,
79     const uint8_t *sm, size_t smlen, const uint8_t *pk);
80 
81 #endif
82