1 #ifndef PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CLEAN_API_H 2 #define PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CLEAN_API_H 3 4 #include <stddef.h> 5 #include <stdint.h> 6 7 8 9 #define PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CLEAN_CRYPTO_ALGNAME "SPHINCS+" 10 11 #define PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CLEAN_CRYPTO_SECRETKEYBYTES 64 12 #define PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CLEAN_CRYPTO_PUBLICKEYBYTES 32 13 #define PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CLEAN_CRYPTO_BYTES 17088 14 #define PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CLEAN_CRYPTO_SEEDBYTES 48 15 16 17 /* 18 * Returns the length of a secret key, in bytes 19 */ 20 size_t PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CLEAN_crypto_sign_secretkeybytes(void); 21 22 /* 23 * Returns the length of a public key, in bytes 24 */ 25 size_t PQCLEAN_SPHINCSSHAKE256128FSIMPLE_CLEAN_crypto_sign_publickeybytes(void); 26 27 /* 28 * Returns the length of a signature, in bytes 29 */ 30 size_t PQCLEAN_SPHINCSSHAKE256128FSIMPLE_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_SPHINCSSHAKE256128FSIMPLE_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_SPHINCSSHAKE256128FSIMPLE_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_SPHINCSSHAKE256128FSIMPLE_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_SPHINCSSHAKE256128FSIMPLE_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_SPHINCSSHAKE256128FSIMPLE_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_SPHINCSSHAKE256128FSIMPLE_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_SPHINCSSHAKE256128FSIMPLE_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