ISARA Radiate™ Quantum-safe Library Version 3.1

Quantum-safe cryptographic primitives and algorithms.

iqr_hss.h
Go to the documentation of this file.
1 
33 #ifndef IQR_HSS_H
34 #define IQR_HSS_H
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 #include "iqr_api.h"
41 #include "iqr_hash.h"
42 #include "iqr_retval.h"
43 #include "iqr_rng.h"
44 
45 #include <stddef.h>
46 #include <stdint.h>
47 
48 // ---------------------------------------------------------------------------------------------------------------------------------
49 // Constants.
50 // ---------------------------------------------------------------------------------------------------------------------------------
51 
53 #define IQR_HSS_PUBLIC_KEY_SIZE 60
54 
55 // ---------------------------------------------------------------------------------------------------------------------------------
56 // Opaque data types.
57 // ---------------------------------------------------------------------------------------------------------------------------------
58 
60 typedef struct iqr_HSSPrivateKeyState_struct iqr_HSSPrivateKeyState;
61 
63 typedef struct iqr_HSSParams_struct iqr_HSSParams;
64 
66 typedef struct iqr_HSSPublicKey_struct iqr_HSSPublicKey;
67 
69 typedef struct iqr_HSSPrivateKey_struct iqr_HSSPrivateKey;
70 
72 typedef struct iqr_HSSTreeStrategy_struct iqr_HSSTreeStrategy;
73 
75 typedef struct iqr_HSSVariant_struct iqr_HSSVariant;
76 
77 // ---------------------------------------------------------------------------------------------------------------------------------
78 // HSS tree strategies.
79 // ---------------------------------------------------------------------------------------------------------------------------------
80 
93 
97 IQR_EXTERN
99 
101 IQR_EXTERN
103 
105 IQR_EXTERN
107 
109 
110 // ---------------------------------------------------------------------------------------------------------------------------------
111 // HSS parameters.
112 // ---------------------------------------------------------------------------------------------------------------------------------
113 
129 
133 IQR_EXTERN
135 
137 IQR_EXTERN
139 
141 
142 // ---------------------------------------------------------------------------------------------------------------------------------
143 // Domain parameter functions.
144 // ---------------------------------------------------------------------------------------------------------------------------------
145 
166 IQR_API
167 iqr_retval iqr_HSSCreateParams(const iqr_Context *ctx, const iqr_HSSTreeStrategy *strategy, const iqr_HSSVariant *variant,
168  iqr_HSSParams **params);
169 
190 IQR_API
191 iqr_retval iqr_HSSCreateParamsFromSignature(const iqr_Context *ctx, const uint8_t *sig, size_t sig_size, iqr_HSSParams **params);
192 
206 IQR_API_UNENFORCED_RETURN
208 
209 // ---------------------------------------------------------------------------------------------------------------------------------
210 // Key management functions.
211 // ---------------------------------------------------------------------------------------------------------------------------------
212 
244 IQR_API
245 iqr_retval iqr_HSSCreateKeyPair(const iqr_HSSParams *params, const iqr_RNG *rng, iqr_HSSPublicKey **public_key,
246  iqr_HSSPrivateKey **private_key, iqr_HSSPrivateKeyState **state);
247 
271 IQR_API
272 iqr_retval iqr_HSSImportPrivateKey(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size,
273  iqr_HSSPrivateKey **private_key);
274 
288 IQR_API
289 iqr_retval iqr_HSSExportPrivateKey(const iqr_HSSPrivateKey *private_key, uint8_t *buf, size_t buf_size);
290 
310 IQR_API
311 iqr_retval iqr_HSSImportPublicKey(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPublicKey **public_key);
312 
324 IQR_API
325 iqr_retval iqr_HSSExportPublicKey(const iqr_HSSPublicKey *public_key, uint8_t *buf, size_t buf_size);
326 
346 IQR_API
347 iqr_retval iqr_HSSImportState(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPrivateKeyState **state);
348 
360 IQR_API
361 iqr_retval iqr_HSSExportState(const iqr_HSSPrivateKeyState *state, uint8_t *buf, size_t buf_size);
362 
376 IQR_API_UNENFORCED_RETURN
378 
388 IQR_API_UNENFORCED_RETURN
390 
401 IQR_API_UNENFORCED_RETURN
403 
404 // ---------------------------------------------------------------------------------------------------------------------------------
405 // State management functionality.
406 // ---------------------------------------------------------------------------------------------------------------------------------
407 
435 IQR_API
436 iqr_retval iqr_HSSDetachState(const iqr_HSSPrivateKey *private_key, iqr_HSSPrivateKeyState *state, uint32_t num_sigs,
437  iqr_HSSPrivateKeyState **detached_state);
438 
439 // ---------------------------------------------------------------------------------------------------------------------------------
440 // Key data retrieval functions.
441 // ---------------------------------------------------------------------------------------------------------------------------------
442 
451 IQR_API
452 iqr_retval iqr_HSSGetPrivateKeySize(const iqr_HSSParams *params, size_t *private_key_size);
453 
462 IQR_API
463 iqr_retval iqr_HSSGetPublicKeySize(const iqr_HSSParams *params, size_t *public_key_size);
464 
476 IQR_API
477 iqr_retval iqr_HSSGetStateSize(const iqr_HSSParams *params, size_t *state_size);
478 
479 // ---------------------------------------------------------------------------------------------------------------------------------
480 // Signature functionality.
481 // ---------------------------------------------------------------------------------------------------------------------------------
482 
492 IQR_API
493 iqr_retval iqr_HSSGetSignatureSize(const iqr_HSSParams *params, size_t *sig_size);
494 
506 IQR_API
507 iqr_retval iqr_HSSGetSignatureCount(const iqr_HSSPrivateKeyState *state, uint32_t *remaining_sigs);
508 
544 IQR_API
545 iqr_retval iqr_HSSSign(const iqr_HSSPrivateKey *private_key, const uint8_t *message, size_t message_size,
546  iqr_HSSPrivateKeyState *state, uint8_t *sig, size_t sig_size);
547 
567 IQR_API
568 iqr_retval iqr_HSSVerify(const iqr_HSSPublicKey *public_key, const uint8_t *message, size_t message_size, const uint8_t *sig,
569  size_t sig_size);
570 
571 #ifdef __cplusplus
572 }
573 #endif
574 
575 #endif /* IQR_HSS_H */
const IQR_EXTERN iqr_HSSTreeStrategy IQR_HSS_FULL_TREE_STRATEGY
Strategy for systems with unlimited memory.
Definition: iqr_hss.h:102
ISARA Radiate Quantum-Safe Library's Random Number Generator object APIs.
const IQR_EXTERN iqr_HSSVariant IQR_HSS_2E15_SMALL
Provide 215 (32,768) signatures in a single tree, Small variant.
Definition: iqr_hss.h:138
IQR_API iqr_retval iqr_HSSGetPublicKeySize(const iqr_HSSParams *params, size_t *public_key_size)
struct iqr_HSSPrivateKey_struct iqr_HSSPrivateKey
Definition: iqr_hss.h:69
IQR_API iqr_retval iqr_HSSImportState(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPrivateKeyState **state)
IQR_API iqr_retval iqr_HSSGetPrivateKeySize(const iqr_HSSParams *params, size_t *private_key_size)
IQR_API iqr_retval iqr_HSSExportPublicKey(const iqr_HSSPublicKey *public_key, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_HSSVerify(const iqr_HSSPublicKey *public_key, const uint8_t *message, size_t message_size, const uint8_t *sig, size_t sig_size)
IQR_API iqr_retval iqr_HSSCreateParams(const iqr_Context *ctx, const iqr_HSSTreeStrategy *strategy, const iqr_HSSVariant *variant, iqr_HSSParams **params)
IQR_API iqr_retval iqr_HSSGetStateSize(const iqr_HSSParams *params, size_t *state_size)
IQR_API iqr_retval iqr_HSSCreateParamsFromSignature(const iqr_Context *ctx, const uint8_t *sig, size_t sig_size, iqr_HSSParams **params)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyPrivateKey(iqr_HSSPrivateKey **private_key)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyState(iqr_HSSPrivateKeyState **state)
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:41
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:35
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyPublicKey(iqr_HSSPublicKey **public_key)
const IQR_EXTERN iqr_HSSVariant IQR_HSS_2E15_FAST
Provide 215 (32,768) signatures in a single tree, Fast variant.
Definition: iqr_hss.h:134
ISARA Radiate Quantum-Safe Library's return values.
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyParams(iqr_HSSParams **params)
iqr_retval
Definition: iqr_retval.h:28
ISARA Radiate Quantum-Safe Library's API declarations.
struct iqr_HSSParams_struct iqr_HSSParams
Definition: iqr_hss.h:63
IQR_API iqr_retval iqr_HSSCreateKeyPair(const iqr_HSSParams *params, const iqr_RNG *rng, iqr_HSSPublicKey **public_key, iqr_HSSPrivateKey **private_key, iqr_HSSPrivateKeyState **state)
const IQR_EXTERN iqr_HSSTreeStrategy IQR_HSS_MEMORY_CONSTRAINED_STRATEGY
Strategy for memory-constrained systems.
Definition: iqr_hss.h:98
IQR_API iqr_retval iqr_HSSExportPrivateKey(const iqr_HSSPrivateKey *private_key, uint8_t *buf, size_t buf_size)
ISARA Radiate Quantum-Safe Library's Hash object API.
IQR_API iqr_retval iqr_HSSExportState(const iqr_HSSPrivateKeyState *state, uint8_t *buf, size_t buf_size)
struct iqr_HSSTreeStrategy_struct iqr_HSSTreeStrategy
Definition: iqr_hss.h:72
const IQR_EXTERN iqr_HSSTreeStrategy IQR_HSS_VERIFY_ONLY_STRATEGY
Strategy for systems that only need to verify signatures.
Definition: iqr_hss.h:106
IQR_API iqr_retval iqr_HSSGetSignatureSize(const iqr_HSSParams *params, size_t *sig_size)
IQR_API iqr_retval iqr_HSSImportPrivateKey(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPrivateKey **private_key)
IQR_API iqr_retval iqr_HSSImportPublicKey(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPublicKey **public_key)
struct iqr_HSSVariant_struct iqr_HSSVariant
Definition: iqr_hss.h:75
IQR_API iqr_retval iqr_HSSSign(const iqr_HSSPrivateKey *private_key, const uint8_t *message, size_t message_size, iqr_HSSPrivateKeyState *state, uint8_t *sig, size_t sig_size)
IQR_API iqr_retval iqr_HSSDetachState(const iqr_HSSPrivateKey *private_key, iqr_HSSPrivateKeyState *state, uint32_t num_sigs, iqr_HSSPrivateKeyState **detached_state)
IQR_API iqr_retval iqr_HSSGetSignatureCount(const iqr_HSSPrivateKeyState *state, uint32_t *remaining_sigs)
struct iqr_HSSPublicKey_struct iqr_HSSPublicKey
Definition: iqr_hss.h:66
struct iqr_HSSPrivateKeyState_struct iqr_HSSPrivateKeyState
Definition: iqr_hss.h:60