ISARA Radiate™ Quantum-safe Library Version 3.1

Quantum-safe cryptographic primitives and algorithms.

iqr_xmss.h
Go to the documentation of this file.
1 
34 #ifndef IQR_XMSS_H
35 #define IQR_XMSS_H
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 #include "iqr_api.h"
42 #include "iqr_hash.h"
43 #include "iqr_retval.h"
44 #include "iqr_rng.h"
45 
46 #include <stddef.h>
47 #include <stdint.h>
48 
49 // ---------------------------------------------------------------------------------------------------------------------------------
50 // Constants.
51 // ---------------------------------------------------------------------------------------------------------------------------------
52 
54 #define IQR_XMSS_PUBLIC_KEY_SIZE 68
55 
56 // ---------------------------------------------------------------------------------------------------------------------------------
57 // Opaque data types.
58 // ---------------------------------------------------------------------------------------------------------------------------------
59 
61 typedef struct iqr_XMSSPrivateKeyState_struct iqr_XMSSPrivateKeyState;
62 
64 typedef struct iqr_XMSSParams_struct iqr_XMSSParams;
65 
67 typedef struct iqr_XMSSPublicKey_struct iqr_XMSSPublicKey;
68 
70 typedef struct iqr_XMSSPrivateKey_struct iqr_XMSSPrivateKey;
71 
73 typedef struct iqr_XMSSTreeStrategy_struct iqr_XMSSTreeStrategy;
74 
76 typedef struct iqr_XMSSVariant_struct iqr_XMSSVariant;
77 
78 // ---------------------------------------------------------------------------------------------------------------------------------
79 // XMSS tree strategies.
80 // ---------------------------------------------------------------------------------------------------------------------------------
81 
94 
98 IQR_EXTERN
100 
102 IQR_EXTERN
104 
106 IQR_EXTERN
108 
110 
111 // ---------------------------------------------------------------------------------------------------------------------------------
112 // XMSS parameters.
113 // ---------------------------------------------------------------------------------------------------------------------------------
114 
124 
128 IQR_EXTERN
130 
132 IQR_EXTERN
134 
136 
137 // ---------------------------------------------------------------------------------------------------------------------------------
138 // Domain parameter functions.
139 // ---------------------------------------------------------------------------------------------------------------------------------
140 
159 IQR_API
160 iqr_retval iqr_XMSSCreateParams(const iqr_Context *ctx, const iqr_XMSSTreeStrategy *strategy, const iqr_XMSSVariant *variant,
161  iqr_XMSSParams **params);
162 
181 IQR_API
182 iqr_retval iqr_XMSSCreateParamsFromPublicKeyBuffer(const iqr_Context *ctx, const uint8_t *buf, size_t buf_size,
183  iqr_XMSSParams **params);
184 
198 IQR_API_UNENFORCED_RETURN
200 
201 // ---------------------------------------------------------------------------------------------------------------------------------
202 // Key management functions.
203 // ---------------------------------------------------------------------------------------------------------------------------------
204 
233 IQR_API
234 iqr_retval iqr_XMSSCreateKeyPair(const iqr_XMSSParams *params, const iqr_RNG *rng, iqr_XMSSPublicKey **public_key,
235  iqr_XMSSPrivateKey **private_key, iqr_XMSSPrivateKeyState **state);
236 
261 IQR_API
262 iqr_retval iqr_XMSSImportPrivateKey(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size,
263  iqr_XMSSPrivateKey **private_key);
264 
278 IQR_API
279 iqr_retval iqr_XMSSExportPrivateKey(const iqr_XMSSPrivateKey *private_key, uint8_t *buf, size_t buf_size);
280 
300 IQR_API
301 iqr_retval iqr_XMSSImportPublicKey(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size,
302  iqr_XMSSPublicKey **public_key);
303 
315 IQR_API
316 iqr_retval iqr_XMSSExportPublicKey(const iqr_XMSSPublicKey *public_key, uint8_t *buf, size_t buf_size);
317 
341 IQR_API
342 iqr_retval iqr_XMSSImportState(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size, iqr_XMSSPrivateKeyState **state);
343 
355 IQR_API
356 iqr_retval iqr_XMSSExportState(const iqr_XMSSPrivateKeyState *state, uint8_t *buf, size_t buf_size);
357 
371 IQR_API_UNENFORCED_RETURN
373 
384 IQR_API_UNENFORCED_RETURN
386 
397 IQR_API_UNENFORCED_RETURN
399 
400 // ---------------------------------------------------------------------------------------------------------------------------------
401 // State management functionality.
402 // ---------------------------------------------------------------------------------------------------------------------------------
403 
431 IQR_API
432 iqr_retval iqr_XMSSDetachState(const iqr_XMSSPrivateKey *private_key, iqr_XMSSPrivateKeyState *state, uint32_t num_sigs,
433  iqr_XMSSPrivateKeyState **detached_state);
434 
435 // ---------------------------------------------------------------------------------------------------------------------------------
436 // Key data retrieval functions.
437 // ---------------------------------------------------------------------------------------------------------------------------------
438 
447 IQR_API
448 iqr_retval iqr_XMSSGetPrivateKeySize(const iqr_XMSSParams *params, size_t *private_key_size);
449 
458 IQR_API
459 iqr_retval iqr_XMSSGetPublicKeySize(const iqr_XMSSParams *params, size_t *public_key_size);
460 
472 IQR_API
473 iqr_retval iqr_XMSSGetStateSize(const iqr_XMSSParams *params, size_t *state_size);
474 
475 // ---------------------------------------------------------------------------------------------------------------------------------
476 // Signature functionality.
477 // ---------------------------------------------------------------------------------------------------------------------------------
478 
488 IQR_API
489 iqr_retval iqr_XMSSGetSignatureSize(const iqr_XMSSParams *params, size_t *sig_size);
490 
504 IQR_API
505 iqr_retval iqr_XMSSGetSignatureCount(const iqr_XMSSPrivateKeyState *state, uint32_t *remaining_sigs);
506 
542 IQR_API
543 iqr_retval iqr_XMSSSign(const iqr_XMSSPrivateKey *private_key, const uint8_t *message, size_t message_size,
544  iqr_XMSSPrivateKeyState *state, uint8_t *sig, size_t sig_size);
545 
565 IQR_API
566 iqr_retval iqr_XMSSVerify(const iqr_XMSSPublicKey *public_key, const uint8_t *message, size_t message_size, const uint8_t *sig,
567  size_t sig_size);
568 
569 #ifdef __cplusplus
570 }
571 #endif
572 
573 #endif /* IQR_XMSS_H */
IQR_API iqr_retval iqr_XMSSImportState(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size, iqr_XMSSPrivateKeyState **state)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_XMSSDestroyState(iqr_XMSSPrivateKeyState **state)
const IQR_EXTERN iqr_XMSSVariant IQR_XMSS_2E16
Provide 216 (65,536) one-time signatures in a single tree.
Definition: iqr_xmss.h:133
ISARA Radiate Quantum-Safe Library's Random Number Generator object APIs.
IQR_API_UNENFORCED_RETURN iqr_retval iqr_XMSSDestroyPrivateKey(iqr_XMSSPrivateKey **private_key)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_XMSSDestroyParams(iqr_XMSSParams **params)
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_API iqr_retval iqr_XMSSImportPublicKey(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size, iqr_XMSSPublicKey **public_key)
struct iqr_XMSSTreeStrategy_struct iqr_XMSSTreeStrategy
Definition: iqr_xmss.h:73
const IQR_EXTERN iqr_XMSSVariant IQR_XMSS_2E10
Provide 210 (1,024) one-time signatures in a single tree.
Definition: iqr_xmss.h:129
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)
const IQR_EXTERN iqr_XMSSTreeStrategy IQR_XMSS_FULL_TREE_STRATEGY
Strategy for systems with unlimited memory.
Definition: iqr_xmss.h:103
struct iqr_XMSSParams_struct iqr_XMSSParams
Definition: iqr_xmss.h:64
IQR_API iqr_retval iqr_XMSSCreateParamsFromPublicKeyBuffer(const iqr_Context *ctx, const uint8_t *buf, size_t buf_size, iqr_XMSSParams **params)
IQR_API iqr_retval iqr_XMSSGetStateSize(const iqr_XMSSParams *params, 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_XMSSCreateParams(const iqr_Context *ctx, const iqr_XMSSTreeStrategy *strategy, const iqr_XMSSVariant *variant, iqr_XMSSParams **params)
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:41
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:35
struct iqr_XMSSVariant_struct iqr_XMSSVariant
Definition: iqr_xmss.h:76
IQR_API iqr_retval iqr_XMSSExportPublicKey(const iqr_XMSSPublicKey *public_key, uint8_t *buf, size_t buf_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_XMSSSign(const iqr_XMSSPrivateKey *private_key, 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 *remaining_sigs)
const IQR_EXTERN iqr_XMSSTreeStrategy IQR_XMSS_MEMORY_CONSTRAINED_STRATEGY
Strategy for memory-constrained systems.
Definition: iqr_xmss.h:99
IQR_API iqr_retval iqr_XMSSGetPublicKeySize(const iqr_XMSSParams *params, size_t *public_key_size)
IQR_API iqr_retval iqr_XMSSImportPrivateKey(const iqr_XMSSParams *params, const uint8_t *buf, size_t buf_size, iqr_XMSSPrivateKey **private_key)
ISARA Radiate Quantum-Safe Library's Hash object API.
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)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_XMSSDestroyPublicKey(iqr_XMSSPublicKey **public_key)
IQR_API iqr_retval iqr_XMSSGetPrivateKeySize(const iqr_XMSSParams *params, size_t *private_key_size)
struct iqr_XMSSPublicKey_struct iqr_XMSSPublicKey
Definition: iqr_xmss.h:67
IQR_API iqr_retval iqr_XMSSGetSignatureSize(const iqr_XMSSParams *params, size_t *sig_size)
struct iqr_XMSSPrivateKeyState_struct iqr_XMSSPrivateKeyState
Definition: iqr_xmss.h:61
struct iqr_XMSSPrivateKey_struct iqr_XMSSPrivateKey
Definition: iqr_xmss.h:70
const IQR_EXTERN iqr_XMSSTreeStrategy IQR_XMSS_VERIFY_ONLY_STRATEGY
Strategy for systems that only need to verify signatures.
Definition: iqr_xmss.h:107