ISARA Radiate Security Solution Suite Toolkit Edition Version 1.5

Quantum-safe cryptographic primitives and algorithms.

iqr_xmss.h
Go to the documentation of this file.
1 
39 #ifndef IQR_XMSS_H
40 #define IQR_XMSS_H
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
46 #include "iqr_api.h"
47 #include "iqr_hash.h"
48 #include "iqr_retval.h"
49 #include "iqr_rng.h"
50 
51 #include <stddef.h>
52 #include <stdint.h>
53 
54 // ---------------------------------------------------------------------------------------------------------------------------------
55 // Opaque data types.
56 // ---------------------------------------------------------------------------------------------------------------------------------
57 
59 typedef struct iqr_XMSSPrivateKeyState_struct iqr_XMSSPrivateKeyState;
60 
62 typedef struct iqr_XMSSParams_struct iqr_XMSSParams;
63 
65 typedef struct iqr_XMSSPublicKey_struct iqr_XMSSPublicKey;
66 
68 typedef struct iqr_XMSSPrivateKey_struct iqr_XMSSPrivateKey;
69 
71 typedef struct iqr_XMSSTreeStrategy_struct iqr_XMSSTreeStrategy;
72 
73 // ---------------------------------------------------------------------------------------------------------------------------------
74 // XMSS tree strategies.
75 // ---------------------------------------------------------------------------------------------------------------------------------
76 
99 IQR_EXTERN
108 IQR_EXTERN
115 IQR_EXTERN
118 // ---------------------------------------------------------------------------------------------------------------------------------
119 // XMSS parameters.
120 // ---------------------------------------------------------------------------------------------------------------------------------
121 
128 typedef enum {
130  IQR_XMSS_HEIGHT_10 = 0,
133  IQR_XMSS_HEIGHT_16 = 1,
136  IQR_XMSS_HEIGHT_20 = 2,
139  IQR_XMSS_HEIGHT_LAST
143 
144 // ---------------------------------------------------------------------------------------------------------------------------------
145 // Domain parameter functions.
146 // ---------------------------------------------------------------------------------------------------------------------------------
147 
166 IQR_API
168  iqr_XMSSParams **params);
169 
183 IQR_API_UNENFORCED_RETURN
185 
186 // ---------------------------------------------------------------------------------------------------------------------------------
187 // Key management functions.
188 // ---------------------------------------------------------------------------------------------------------------------------------
189 
216 IQR_API
217 iqr_retval iqr_XMSSCreateKeyPair(const iqr_XMSSParams *params, const iqr_RNG *rng, iqr_XMSSPublicKey **public_key,
218  iqr_XMSSPrivateKey **private_key, iqr_XMSSPrivateKeyState **state);
219 
243 IQR_API
244 iqr_retval iqr_XMSSImportPrivateKey(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size,
245  iqr_XMSSPrivateKey **private_key);
246 
260 IQR_API
261 iqr_retval iqr_XMSSExportPrivateKey(const iqr_XMSSPrivateKey *private_key, uint8_t *buf, size_t buf_size);
262 
282 IQR_API
283 iqr_retval iqr_XMSSImportPublicKey(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size,
284  iqr_XMSSPublicKey **public_key);
285 
297 IQR_API
298 iqr_retval iqr_XMSSExportPublicKey(const iqr_XMSSPublicKey *public_key, uint8_t *buf, size_t buf_size);
299 
319 IQR_API
320 iqr_retval iqr_XMSSImportState(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size, iqr_XMSSPrivateKeyState **state);
321 
333 IQR_API
334 iqr_retval iqr_XMSSExportState(const iqr_XMSSPrivateKeyState *state, uint8_t *buf, size_t buf_size);
335 
348 IQR_API_UNENFORCED_RETURN
350 
360 IQR_API_UNENFORCED_RETURN
362 
372 IQR_API_UNENFORCED_RETURN
374 
375 // ---------------------------------------------------------------------------------------------------------------------------------
376 // State management functionality.
377 // ---------------------------------------------------------------------------------------------------------------------------------
378 
411 IQR_API
412 iqr_retval iqr_XMSSDetachState(const iqr_XMSSPrivateKey *private_key, iqr_XMSSPrivateKeyState *state, uint32_t num_sigs,
413  iqr_XMSSPrivateKeyState **detached_state);
414 
415 // ---------------------------------------------------------------------------------------------------------------------------------
416 // Key data retrieval functions.
417 // ---------------------------------------------------------------------------------------------------------------------------------
418 
427 IQR_API
428 iqr_retval iqr_XMSSGetPrivateKeySize(const iqr_XMSSPrivateKey *private_key, size_t *private_key_size);
429 
438 IQR_API
439 iqr_retval iqr_XMSSGetPublicKeySize(const iqr_XMSSPublicKey *public_key, size_t *public_key_size);
440 
449 IQR_API
450 iqr_retval iqr_XMSSGetStateSize(const iqr_XMSSPrivateKeyState *state, size_t *state_size);
451 
452 // ---------------------------------------------------------------------------------------------------------------------------------
453 // Signature functionality.
454 // ---------------------------------------------------------------------------------------------------------------------------------
455 
465 IQR_API
466 iqr_retval iqr_XMSSGetSignatureSize(const iqr_XMSSParams *params, size_t *sig_size);
467 
482 #ifndef IQR_IGNORE_1_5_DEPRECATED
483 IQR_DEPRECATED_MSG("This API will change in the next toolkit release.")
484 #endif
485 IQR_API
486 iqr_retval iqr_XMSSGetSignatureCount(const iqr_XMSSPrivateKeyState *state, uint32_t *max_sigs, uint32_t *remaining_sigs);
487 
537 IQR_API
538 iqr_retval iqr_XMSSSign(const iqr_XMSSPrivateKey *private_key, const iqr_RNG *rng, const uint8_t *message,
539  size_t message_size, iqr_XMSSPrivateKeyState *state, uint8_t *sig, size_t sig_size);
540 
563 IQR_API
564 iqr_retval iqr_XMSSVerify(const iqr_XMSSPublicKey *public_key, const uint8_t *message, size_t message_size, const uint8_t *sig,
565  size_t sig_size);
566 
567 #ifdef __cplusplus
568 }
569 #endif
570 
571 #endif /* IQR_XMSS_H */
IQR_API_UNENFORCED_RETURN iqr_retval iqr_XMSSDestroyPrivateKey(iqr_XMSSPrivateKey **private_key)
IQR_API iqr_retval iqr_XMSSCreateParams(const iqr_Context *ctx, const iqr_XMSSTreeStrategy *strategy, iqr_XMSSHeight h, iqr_XMSSParams **params)
IQR_API iqr_retval iqr_XMSSImportPrivateKey(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size, iqr_XMSSPrivateKey **private_key)
struct iqr_XMSSTreeStrategy_struct iqr_XMSSTreeStrategy
Definition: iqr_xmss.h:72
iqr_XMSSHeight
Definition: iqr_xmss.h:129
ISARA Radiate Security Solution Suite&#39;s Hash object API.
IQR_EXTERN const iqr_XMSSTreeStrategy IQR_XMSS_VERIFY_ONLY_STRATEGY
Definition: iqr_xmss.h:117
IQR_API iqr_retval iqr_XMSSGetStateSize(const iqr_XMSSPrivateKeyState *state, size_t *state_size)
IQR_API iqr_retval iqr_XMSSExportPrivateKey(const iqr_XMSSPrivateKey *private_key, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_XMSSGetPrivateKeySize(const iqr_XMSSPrivateKey *private_key, size_t *private_key_size)
ISARA Radiate Security Solution Suite&#39;s Random Number Generator object APIs.
IQR_API_UNENFORCED_RETURN iqr_retval iqr_XMSSDestroyState(iqr_XMSSPrivateKeyState **state)
IQR_API iqr_retval iqr_XMSSCreateKeyPair(const iqr_XMSSParams *params, const iqr_RNG *rng, iqr_XMSSPublicKey **public_key, iqr_XMSSPrivateKey **private_key, iqr_XMSSPrivateKeyState **state)
IQR_API iqr_retval iqr_XMSSSign(const iqr_XMSSPrivateKey *private_key, const iqr_RNG *rng, const uint8_t *message, size_t message_size, iqr_XMSSPrivateKeyState *state, uint8_t *sig, size_t sig_size)
IQR_API iqr_retval iqr_XMSSGetSignatureCount(const iqr_XMSSPrivateKeyState *state, uint32_t *max_sigs, uint32_t *remaining_sigs)
ISARA Radiate Security Solution Suite&#39;s return values.
IQR_API iqr_retval iqr_XMSSDetachState(const iqr_XMSSPrivateKey *private_key, iqr_XMSSPrivateKeyState *state, uint32_t num_sigs, iqr_XMSSPrivateKeyState **detached_state)
IQR_API iqr_retval iqr_XMSSExportState(const iqr_XMSSPrivateKeyState *state, uint8_t *buf, size_t buf_size)
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:51
IQR_EXTERN const iqr_XMSSTreeStrategy IQR_XMSS_FULL_STRATEGY
Definition: iqr_xmss.h:110
struct iqr_XMSSPrivateKeyState_struct iqr_XMSSPrivateKeyState
Definition: iqr_xmss.h:60
ISARA Radiate Security Solution Suite&#39;s API declarations.
Provide 1,048,576 (220) one-time signatures.
Definition: iqr_xmss.h:137
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:36
Provide 1024 (210) one-time signatures.
Definition: iqr_xmss.h:131
IQR_API iqr_retval iqr_XMSSImportState(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size, iqr_XMSSPrivateKeyState **state)
IQR_API iqr_retval iqr_XMSSImportPublicKey(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size, iqr_XMSSPublicKey **public_key)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_XMSSDestroyParams(iqr_XMSSParams **params)
IQR_EXTERN const iqr_XMSSTreeStrategy IQR_XMSS_BDS_STRATEGY
Definition: iqr_xmss.h:101
IQR_API iqr_retval iqr_XMSSGetPublicKeySize(const iqr_XMSSPublicKey *public_key, size_t *public_key_size)
IQR_API iqr_retval iqr_XMSSGetSignatureSize(const iqr_XMSSParams *params, size_t *sig_size)
IQR_API iqr_retval iqr_XMSSExportPublicKey(const iqr_XMSSPublicKey *public_key, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_XMSSVerify(const iqr_XMSSPublicKey *public_key, const uint8_t *message, size_t message_size, const uint8_t *sig, size_t sig_size)
iqr_retval
Definition: iqr_retval.h:29
struct iqr_XMSSPrivateKey_struct iqr_XMSSPrivateKey
Definition: iqr_xmss.h:69
Provide 65,536 (216) one-time signatures.
Definition: iqr_xmss.h:134
struct iqr_XMSSPublicKey_struct iqr_XMSSPublicKey
Definition: iqr_xmss.h:66
struct iqr_XMSSParams_struct iqr_XMSSParams
Definition: iqr_xmss.h:63
IQR_API_UNENFORCED_RETURN iqr_retval iqr_XMSSDestroyPublicKey(iqr_XMSSPublicKey **public_key)