ISARA Radiate Security Solution Suite Toolkit Edition Version 1.5

Quantum-safe cryptographic primitives and algorithms.

iqr_hss.h
Go to the documentation of this file.
1 
38 #ifndef IQR_HSS_H
39 #define IQR_HSS_H
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 #include "iqr_api.h"
46 #include "iqr_hash.h"
47 #include "iqr_retval.h"
48 #include "iqr_rng.h"
49 
50 #include <stddef.h>
51 #include <stdint.h>
52 
53 // ---------------------------------------------------------------------------------------------------------------------------------
54 // Opaque data types.
55 // ---------------------------------------------------------------------------------------------------------------------------------
56 
58 typedef struct iqr_HSSPrivateKeyState_struct iqr_HSSPrivateKeyState;
59 
61 typedef struct iqr_HSSParams_struct iqr_HSSParams;
62 
64 typedef struct iqr_HSSPublicKey_struct iqr_HSSPublicKey;
65 
67 typedef struct iqr_HSSPrivateKey_struct iqr_HSSPrivateKey;
68 
70 typedef struct iqr_HSSTreeStrategy_struct iqr_HSSTreeStrategy;
71 
72 // ---------------------------------------------------------------------------------------------------------------------------------
73 // HSS tree strategies.
74 // ---------------------------------------------------------------------------------------------------------------------------------
75 
98 IQR_EXTERN
107 IQR_EXTERN
114 IQR_EXTERN
117 // ---------------------------------------------------------------------------------------------------------------------------------
118 // HSS parameters.
119 // ---------------------------------------------------------------------------------------------------------------------------------
120 
137 typedef enum {
144  IQR_HSS_WINTERNITZ_LAST
148 
155 typedef enum {
157  IQR_HSS_HEIGHT_5 = 0,
160  IQR_HSS_HEIGHT_10 = 1,
163  IQR_HSS_HEIGHT_15 = 2,
166  IQR_HSS_HEIGHT_20 = 3,
169  IQR_HSS_HEIGHT_25 = 4,
172  IQR_HSS_HEIGHT_LAST
175 } iqr_HSSHeight;
176 
183 typedef enum {
185  IQR_HSS_LEVEL_1 = 0,
190 
192  IQR_HSS_LEVEL_MAX
195 } iqr_HSSLevels;
196 
197 // ---------------------------------------------------------------------------------------------------------------------------------
198 // Domain parameter functions.
199 // ---------------------------------------------------------------------------------------------------------------------------------
200 
222 IQR_API
224  iqr_HSSLevels l, iqr_HSSParams **params);
225 
239 IQR_API_UNENFORCED_RETURN
241 
242 // ---------------------------------------------------------------------------------------------------------------------------------
243 // Key management functions.
244 // ---------------------------------------------------------------------------------------------------------------------------------
245 
273 IQR_API
274 iqr_retval iqr_HSSCreateKeyPair(const iqr_HSSParams *params, const iqr_RNG *rng, iqr_HSSPublicKey **public_key,
275  iqr_HSSPrivateKey **private_key, iqr_HSSPrivateKeyState **state);
276 
300 IQR_API
301 iqr_retval iqr_HSSImportPrivateKey(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size,
302  iqr_HSSPrivateKey **private_key);
303 
317 IQR_API
318 iqr_retval iqr_HSSExportPrivateKey(const iqr_HSSPrivateKey *private_key, uint8_t *buf, size_t buf_size);
319 
339 IQR_API
340 iqr_retval iqr_HSSImportPublicKey(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size,
341  iqr_HSSPublicKey **public_key);
342 
354 IQR_API
355 iqr_retval iqr_HSSExportPublicKey(const iqr_HSSPublicKey *public_key, uint8_t *buf, size_t buf_size);
356 
375 IQR_API
376 iqr_retval iqr_HSSImportState(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPrivateKeyState **state);
377 
389 IQR_API
390 iqr_retval iqr_HSSExportState(const iqr_HSSPrivateKeyState *state, uint8_t *buf, size_t buf_size);
391 
404 IQR_API_UNENFORCED_RETURN
406 
416 IQR_API_UNENFORCED_RETURN
418 
428 IQR_API_UNENFORCED_RETURN
430 
431 // ---------------------------------------------------------------------------------------------------------------------------------
432 // State management functionality.
433 // ---------------------------------------------------------------------------------------------------------------------------------
434 
467 IQR_API
468 iqr_retval iqr_HSSDetachState(const iqr_HSSPrivateKey *private_key, iqr_HSSPrivateKeyState *state, uint32_t num_sigs,
469  iqr_HSSPrivateKeyState **detached_state);
470 
471 // ---------------------------------------------------------------------------------------------------------------------------------
472 // Key data retrieval functions.
473 // ---------------------------------------------------------------------------------------------------------------------------------
474 
483 IQR_API
484 iqr_retval iqr_HSSGetPrivateKeySize(const iqr_HSSPrivateKey *private_key, size_t *private_key_size);
485 
494 IQR_API
495 iqr_retval iqr_HSSGetPublicKeySize(const iqr_HSSPublicKey *public_key, size_t *public_key_size);
496 
505 IQR_API
506 iqr_retval iqr_HSSGetStateSize(const iqr_HSSPrivateKeyState *state, size_t *state_size);
507 
508 // ---------------------------------------------------------------------------------------------------------------------------------
509 // Signature functionality.
510 // ---------------------------------------------------------------------------------------------------------------------------------
511 
521 IQR_API
522 iqr_retval iqr_HSSGetSignatureSize(const iqr_HSSParams *params, size_t *sig_size);
523 
538 #ifndef IQR_IGNORE_1_5_DEPRECATED
539 IQR_DEPRECATED_MSG("This API will change in the next toolkit release.")
540 #endif
541 IQR_API
542 iqr_retval iqr_HSSGetSignatureCount(const iqr_HSSPrivateKeyState *state, uint32_t *max_sigs, uint32_t *remaining_sigs);
543 
593 IQR_API
594 iqr_retval iqr_HSSSign(const iqr_HSSPrivateKey *private_key, const iqr_RNG *rng, const uint8_t *message, size_t message_size,
595  iqr_HSSPrivateKeyState *state, uint8_t *sig, size_t sig_size);
596 
619 IQR_API
620 iqr_retval iqr_HSSVerify(const iqr_HSSPublicKey *public_key, const uint8_t *message, size_t message_size, const uint8_t *sig,
621  size_t sig_size);
622 
623 #ifdef __cplusplus
624 }
625 #endif
626 
627 #endif /* IQR_HSS_H */
IQR_API iqr_retval iqr_HSSImportPrivateKey(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPrivateKey **private_key)
struct iqr_HSSParams_struct iqr_HSSParams
Definition: iqr_hss.h:62
IQR_API iqr_retval iqr_HSSImportPublicKey(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPublicKey **public_key)
ISARA Radiate Security Solution Suite&#39;s Hash object API.
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_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyState(iqr_HSSPrivateKeyState **state)
IQR_API iqr_retval iqr_HSSDetachState(const iqr_HSSPrivateKey *private_key, iqr_HSSPrivateKeyState *state, uint32_t num_sigs, iqr_HSSPrivateKeyState **detached_state)
IQR_EXTERN const iqr_HSSTreeStrategy IQR_HSS_BDS_STRATEGY
Definition: iqr_hss.h:100
iqr_HSSLevels
Definition: iqr_hss.h:184
Provide 1,048,576 (220) one-time signatures.
Definition: iqr_hss.h:167
struct iqr_HSSTreeStrategy_struct iqr_HSSTreeStrategy
Definition: iqr_hss.h:71
Provide 1024 (210) one-time signatures.
Definition: iqr_hss.h:161
ISARA Radiate Security Solution Suite&#39;s Random Number Generator object APIs.
struct iqr_HSSPublicKey_struct iqr_HSSPublicKey
Definition: iqr_hss.h:65
IQR_API iqr_retval iqr_HSSExportPrivateKey(const iqr_HSSPrivateKey *private_key, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_HSSImportState(const iqr_HSSParams *params, const uint8_t *buf, size_t buf_size, iqr_HSSPrivateKeyState **state)
struct iqr_HSSPrivateKey_struct iqr_HSSPrivateKey
Definition: iqr_hss.h:68
ISARA Radiate Security Solution Suite&#39;s return values.
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyPublicKey(iqr_HSSPublicKey **public_key)
Definition: iqr_hss.h:139
IQR_API iqr_retval iqr_HSSExportState(const iqr_HSSPrivateKeyState *state, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_HSSGetPrivateKeySize(const iqr_HSSPrivateKey *private_key, size_t *private_key_size)
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:51
IQR_API iqr_retval iqr_HSSGetPublicKeySize(const iqr_HSSPublicKey *public_key, size_t *public_key_size)
IQR_API iqr_retval iqr_HSSGetSignatureCount(const iqr_HSSPrivateKeyState *state, uint32_t *max_sigs, uint32_t *remaining_sigs)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyPrivateKey(iqr_HSSPrivateKey **private_key)
ISARA Radiate Security Solution Suite&#39;s API declarations.
Provide 33,554,432 (225) one-time signatures.
Definition: iqr_hss.h:170
iqr_HSSHeight
Definition: iqr_hss.h:156
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:36
Provides a hyper-tree consisting of a single Merkle tree.
Definition: iqr_hss.h:186
Definition: iqr_hss.h:141
iqr_HSSWinternitz
Definition: iqr_hss.h:138
IQR_API iqr_retval iqr_HSSCreateParams(const iqr_Context *ctx, const iqr_HSSTreeStrategy *strategy, iqr_HSSWinternitz w, iqr_HSSHeight h, iqr_HSSLevels l, iqr_HSSParams **params)
Provide 32,768 (215) one-time signatures.
Definition: iqr_hss.h:164
IQR_API iqr_retval iqr_HSSExportPublicKey(const iqr_HSSPublicKey *public_key, uint8_t *buf, size_t buf_size)
Definition: iqr_hss.h:140
IQR_API_UNENFORCED_RETURN iqr_retval iqr_HSSDestroyParams(iqr_HSSParams **params)
Definition: iqr_hss.h:142
IQR_API iqr_retval iqr_HSSGetStateSize(const iqr_HSSPrivateKeyState *state, size_t *state_size)
struct iqr_HSSPrivateKeyState_struct iqr_HSSPrivateKeyState
Definition: iqr_hss.h:59
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)
IQR_API iqr_retval iqr_HSSSign(const iqr_HSSPrivateKey *private_key, const iqr_RNG *rng, const uint8_t *message, size_t message_size, iqr_HSSPrivateKeyState *state, uint8_t *sig, size_t sig_size)
iqr_retval
Definition: iqr_retval.h:29
IQR_API iqr_retval iqr_HSSGetSignatureSize(const iqr_HSSParams *params, size_t *sig_size)
Provide 32 (25) one-time signatures.
Definition: iqr_hss.h:158
IQR_EXTERN const iqr_HSSTreeStrategy IQR_HSS_FULL_STRATEGY
Definition: iqr_hss.h:109
IQR_EXTERN const iqr_HSSTreeStrategy IQR_HSS_VERIFY_ONLY_STRATEGY
Definition: iqr_hss.h:116