ISARA Radiate™ Quantum-safe Library Version 3.1

Quantum-safe cryptographic primitives and algorithms.

iqr_sphincs.h
Go to the documentation of this file.
1 
19 #ifndef IQR_SPHINCS_H
20 #define IQR_SPHINCS_H
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #include "iqr_api.h"
27 #include "iqr_hash.h"
28 #include "iqr_retval.h"
29 #include "iqr_rng.h"
30 
31 #include <stddef.h>
32 #include <stdint.h>
33 
34 // ---------------------------------------------------------------------------------------------------------------------------------
35 // Opaque data types.
36 // ---------------------------------------------------------------------------------------------------------------------------------
37 
39 typedef struct iqr_SPHINCSParams_struct iqr_SPHINCSParams;
40 
42 typedef struct iqr_SPHINCSPublicKey_struct iqr_SPHINCSPublicKey;
43 
45 typedef struct iqr_SPHINCSPrivateKey_struct iqr_SPHINCSPrivateKey;
46 
48 typedef struct iqr_SPHINCSVariant_struct iqr_SPHINCSVariant;
49 
50 // ---------------------------------------------------------------------------------------------------------------------------------
51 // SPHINCS+ variants.
52 // ---------------------------------------------------------------------------------------------------------------------------------
53 
55 IQR_EXTERN
57 
59 IQR_EXTERN
61 
63 IQR_EXTERN
65 
67 IQR_EXTERN
69 
71 IQR_EXTERN
73 
75 IQR_EXTERN
77 
79 IQR_EXTERN
81 
83 IQR_EXTERN
85 
87 IQR_EXTERN
89 
91 IQR_EXTERN
93 
95 IQR_EXTERN
97 
99 IQR_EXTERN
101 
102 // ---------------------------------------------------------------------------------------------------------------------------------
103 // Domain parameter functions.
104 // ---------------------------------------------------------------------------------------------------------------------------------
105 
125 IQR_API
127 
141 IQR_API_UNENFORCED_RETURN
143 
144 // ---------------------------------------------------------------------------------------------------------------------------------
145 // Key management functions.
146 // ---------------------------------------------------------------------------------------------------------------------------------
147 
164 IQR_API
166  iqr_SPHINCSPrivateKey **private_key);
167 
188 IQR_API
189 iqr_retval iqr_SPHINCSImportPrivateKey(const iqr_SPHINCSParams *params, const uint8_t *buf, size_t buf_size,
190  iqr_SPHINCSPrivateKey **private_key);
191 
205 IQR_API
206 iqr_retval iqr_SPHINCSExportPrivateKey(const iqr_SPHINCSPrivateKey *private_key, uint8_t *buf, size_t buf_size);
207 
224 IQR_API
225 iqr_retval iqr_SPHINCSImportPublicKey(const iqr_SPHINCSParams *params, const uint8_t *buf, size_t buf_size,
226  iqr_SPHINCSPublicKey **public_key);
227 
239 IQR_API
240 iqr_retval iqr_SPHINCSExportPublicKey(const iqr_SPHINCSPublicKey *public_key, uint8_t *buf, size_t buf_size);
241 
255 IQR_API_UNENFORCED_RETURN
257 
267 IQR_API_UNENFORCED_RETURN
269 
270 // ---------------------------------------------------------------------------------------------------------------------------------
271 // Key data retrieval functions.
272 // ---------------------------------------------------------------------------------------------------------------------------------
273 
282 IQR_API
283 iqr_retval iqr_SPHINCSGetPrivateKeySize(const iqr_SPHINCSParams *params, size_t *private_key_size);
284 
293 IQR_API
294 iqr_retval iqr_SPHINCSGetPublicKeySize(const iqr_SPHINCSParams *params, size_t *public_key_size);
295 
296 // ---------------------------------------------------------------------------------------------------------------------------------
297 // Signature functionality.
298 // ---------------------------------------------------------------------------------------------------------------------------------
299 
309 IQR_API
310 iqr_retval iqr_SPHINCSGetSignatureSize(const iqr_SPHINCSParams *params, size_t *sig_size);
311 
332 IQR_API
333 iqr_retval iqr_SPHINCSSign(const iqr_SPHINCSPrivateKey *private_key, const iqr_RNG *rng, const uint8_t *message,
334  size_t message_size, uint8_t *sig, size_t sig_size);
335 
352 IQR_API
353 iqr_retval iqr_SPHINCSVerify(const iqr_SPHINCSPublicKey *public_key, const uint8_t *message, size_t message_size,
354  const uint8_t *sig, size_t sig_size);
355 
356 #ifdef __cplusplus
357 }
358 #endif
359 
360 #endif /* IQR_SPHINCS_H */
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHA2_256_128S
SPHINCS+ using SHA-256, small variant with 128-bit security.
Definition: iqr_sphincs.h:60
struct iqr_SPHINCSParams_struct iqr_SPHINCSParams
Definition: iqr_sphincs.h:39
IQR_API_UNENFORCED_RETURN iqr_retval iqr_SPHINCSDestroyParams(iqr_SPHINCSParams **params)
IQR_API iqr_retval iqr_SPHINCSGetPrivateKeySize(const iqr_SPHINCSParams *params, size_t *private_key_size)
IQR_API iqr_retval iqr_SPHINCSImportPublicKey(const iqr_SPHINCSParams *params, const uint8_t *buf, size_t buf_size, iqr_SPHINCSPublicKey **public_key)
ISARA Radiate Quantum-Safe Library's Random Number Generator object APIs.
IQR_API iqr_retval iqr_SPHINCSVerify(const iqr_SPHINCSPublicKey *public_key, const uint8_t *message, size_t message_size, const uint8_t *sig, size_t sig_size)
IQR_API iqr_retval iqr_SPHINCSSign(const iqr_SPHINCSPrivateKey *private_key, const iqr_RNG *rng, const uint8_t *message, size_t message_size, uint8_t *sig, size_t sig_size)
struct iqr_SPHINCSPrivateKey_struct iqr_SPHINCSPrivateKey
Definition: iqr_sphincs.h:45
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHA2_256_192F
SPHINCS+ using SHA-256, fast variant with 192-bit security.
Definition: iqr_sphincs.h:72
IQR_API iqr_retval iqr_SPHINCSCreateParams(const iqr_Context *ctx, const iqr_SPHINCSVariant *variant, iqr_SPHINCSParams **params)
IQR_API iqr_retval iqr_SPHINCSExportPublicKey(const iqr_SPHINCSPublicKey *public_key, uint8_t *buf, size_t buf_size)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_SPHINCSDestroyPublicKey(iqr_SPHINCSPublicKey **public_key)
IQR_API iqr_retval iqr_SPHINCSExportPrivateKey(const iqr_SPHINCSPrivateKey *private_key, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_SPHINCSCreateKeyPair(const iqr_SPHINCSParams *params, const iqr_RNG *rng, iqr_SPHINCSPublicKey **public_key, iqr_SPHINCSPrivateKey **private_key)
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHA2_256_192S
SPHINCS+ using SHA-256, small variant with 192-bit security.
Definition: iqr_sphincs.h:76
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHA2_256_256F
SPHINCS+ using SHA-256, fast variant with 256-bit security.
Definition: iqr_sphincs.h:88
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:41
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:35
IQR_API iqr_retval iqr_SPHINCSGetSignatureSize(const iqr_SPHINCSParams *params, size_t *sig_size)
ISARA Radiate Quantum-Safe Library's return values.
iqr_retval
Definition: iqr_retval.h:28
ISARA Radiate Quantum-Safe Library's API declarations.
IQR_API iqr_retval iqr_SPHINCSImportPrivateKey(const iqr_SPHINCSParams *params, const uint8_t *buf, size_t buf_size, iqr_SPHINCSPrivateKey **private_key)
struct iqr_SPHINCSPublicKey_struct iqr_SPHINCSPublicKey
Definition: iqr_sphincs.h:42
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHAKE_256_192F
SPHINCS+ using SHAKE-256, fast variant with 192-bit security.
Definition: iqr_sphincs.h:80
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHAKE_256_256F
SPHINCS+ using SHAKE-256, fast variant with 256-bit security.
Definition: iqr_sphincs.h:96
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHAKE_256_128F
SPHINCS+ using SHAKE-256, fast variant with 128-bit security.
Definition: iqr_sphincs.h:64
ISARA Radiate Quantum-Safe Library's Hash object API.
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHAKE_256_256S
SPHINCS+ using SHAKE-256, small variant with 256-bit security.
Definition: iqr_sphincs.h:100
struct iqr_SPHINCSVariant_struct iqr_SPHINCSVariant
Definition: iqr_sphincs.h:48
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHA2_256_256S
SPHINCS+ using SHA-256, small variant with 256-bit security.
Definition: iqr_sphincs.h:92
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHA2_256_128F
SPHINCS+ using SHA-256, fast variant with 128-bit security.
Definition: iqr_sphincs.h:56
IQR_API iqr_retval iqr_SPHINCSGetPublicKeySize(const iqr_SPHINCSParams *params, size_t *public_key_size)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_SPHINCSDestroyPrivateKey(iqr_SPHINCSPrivateKey **private_key)
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHAKE_256_128S
SPHINCS+ using SHAKE-256, small variant with 128-bit security.
Definition: iqr_sphincs.h:68
const IQR_EXTERN iqr_SPHINCSVariant IQR_SPHINCS_SHAKE_256_192S
SPHINCS+ using SHAKE-256, small variant with 192-bit security.
Definition: iqr_sphincs.h:84