ISARA Quantum Resistant Toolkit  Version 1.1
Quantum resistant cryptographic primitives and algorithms.
iqr_lms.h
Go to the documentation of this file.
1 
35 #ifndef IQR_LMS_H
36 #define IQR_LMS_H
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 #include "iqr_api.h"
43 #include "iqr_hash.h"
44 #include "iqr_retval.h"
45 #include "iqr_rng.h"
46 
47 // ---------------------------------------------------------------------------------------------------------------------------------
48 // Constants.
49 // ---------------------------------------------------------------------------------------------------------------------------------
50 
54 IQR_DEPRECATED_MSG("Deprecated due to recent changes in draft-mcgrew-hash-sigs-05.")
55 #define IQR_LMS_PRIVATE_KEY_IDENTIFIER_SIZE 31
56 
57 // ---------------------------------------------------------------------------------------------------------------------------------
58 // Opaque data types.
59 // ---------------------------------------------------------------------------------------------------------------------------------
60 
62 typedef struct iqr_LMSParams_struct iqr_LMSParams;
63 
65 typedef struct iqr_LMSPublicKey_struct iqr_LMSPublicKey;
66 
68 typedef struct iqr_LMSPrivateKey_struct iqr_LMSPrivateKey;
69 
70 // ---------------------------------------------------------------------------------------------------------------------------------
71 // LMS domain parameters.
72 // ---------------------------------------------------------------------------------------------------------------------------------
73 
82 IQR_DEPRECATED_MSG("Deprecated due to recent changes in draft-mcgrew-hash-sigs-05.")
83 typedef enum {
88 
90  // Used to maintain a number of values. MUST BE LAST.
91  IQR_LMS_WINTERNITZ_LAST
94 
101 IQR_DEPRECATED_MSG("Deprecated due to recent changes in draft-mcgrew-hash-sigs-05.")
102 typedef enum {
105 
108 
111 
113  // Maintain a count of supported tree heights. MUST BE LAST.
114  IQR_LMS_HEIGHT_LAST
116 } iqr_LMSHeight;
117 
118 // ---------------------------------------------------------------------------------------------------------------------------------
119 // Domain parameter functions.
120 // ---------------------------------------------------------------------------------------------------------------------------------
121 
152 IQR_API
153 IQR_DEPRECATED_MSG("Deprecated due to recent changes in draft-mcgrew-hash-sigs-05.")
154 iqr_retval iqr_LMSCreateParams(const iqr_Context *ctx, iqr_LMSWinternitz w, iqr_LMSHeight h, const uint8_t *I, size_t I_size,
155  iqr_LMSParams **params);
156 
166 IQR_API_UNENFORCED_RETURN
168 
178 IQR_API
179 IQR_DEPRECATED_MSG("Deprecated due to recent changes in draft-mcgrew-hash-sigs-05.")
180 iqr_retval iqr_LMSGetWinternitz(const iqr_LMSParams *params, iqr_LMSWinternitz *w);
181 
191 IQR_API
192 IQR_DEPRECATED_MSG("Deprecated due to recent changes in draft-mcgrew-hash-sigs-05.")
193 iqr_retval iqr_LMSGetHeight(const iqr_LMSParams *params, iqr_LMSHeight *h);
194 
205 IQR_API
206 iqr_retval iqr_LMSGetPrivateKeyIdentifier(const iqr_LMSParams *params, uint8_t *I, size_t I_size);
207 
208 // ---------------------------------------------------------------------------------------------------------------------------------
209 // Key management functions.
210 // ---------------------------------------------------------------------------------------------------------------------------------
211 
228 IQR_API
229 IQR_DEPRECATED_MSG("Deprecated due to recent changes in draft-mcgrew-hash-sigs-05.")
230 iqr_retval iqr_LMSCreateKeyPair(const iqr_LMSParams *params, const iqr_RNG *rng, iqr_LMSPublicKey **pub_key,
231  iqr_LMSPrivateKey **priv_key);
232 
250 IQR_API
251 iqr_retval iqr_LMSImportPrivateKey(const iqr_LMSParams *params, const uint8_t *data, size_t size, iqr_LMSPrivateKey **priv_key);
252 
263 IQR_API
264 iqr_retval iqr_LMSExportPrivateKey(const iqr_LMSPrivateKey *priv_key, uint8_t *buf, size_t buf_size);
265 
280 IQR_API
281 iqr_retval iqr_LMSImportPublicKey(const iqr_LMSParams *params, const uint8_t *data, size_t size, iqr_LMSPublicKey **pub_key);
282 
293 IQR_API
294 iqr_retval iqr_LMSExportPublicKey(const iqr_LMSPublicKey *pub_key, uint8_t *buf, size_t buf_size);
295 
305 IQR_API_UNENFORCED_RETURN
307 
317 IQR_API_UNENFORCED_RETURN
319 
320 // ---------------------------------------------------------------------------------------------------------------------------------
321 // Key data retrieval functions.
322 // ---------------------------------------------------------------------------------------------------------------------------------
323 
332 IQR_API
334 
343 IQR_API
345 
354 IQR_API
355 iqr_retval iqr_LMSGetPrivateKeySize(const iqr_LMSPrivateKey *priv_key, size_t *size);
356 
365 IQR_API
366 iqr_retval iqr_LMSGetPublicKeySize(const iqr_LMSPublicKey *pub_key, size_t *size);
367 
368 // ---------------------------------------------------------------------------------------------------------------------------------
369 // Signature functionality.
370 // ---------------------------------------------------------------------------------------------------------------------------------
371 
387 IQR_API
388 IQR_DEPRECATED_MSG("Deprecated due to recent changes in draft-mcgrew-hash-sigs-05.")
389 iqr_retval iqr_LMSGetSignatureComponentSizes(const iqr_LMSParams *params, size_t *randomizer_size, size_t *ots_sig_size,
390  size_t *sig_path_size);
391 
403 IQR_API
404 iqr_retval iqr_LMSGetMaximumSignatureCount(const iqr_LMSParams *params, uint32_t *max_sigs);
405 
419 IQR_API
420 iqr_retval iqr_LMSGetRemainingSignatureCount(const iqr_LMSParams *params, uint32_t index, uint32_t *remaining);
421 
462 IQR_API
463 IQR_DEPRECATED_MSG("Deprecated due to recent changes in draft-mcgrew-hash-sigs-05.")
464 iqr_retval iqr_LMSSign(const iqr_LMSPrivateKey *priv_key, const iqr_RNG *rng, uint32_t index, const uint8_t *digest,
465  size_t digest_size, uint8_t *randomizer, size_t randomizer_size, uint8_t *ots_sig, size_t ots_sig_size, uint8_t *sig_path,
466  size_t sig_path_size);
467 
488 IQR_API
489 IQR_DEPRECATED_MSG("Deprecated due to recent changes in draft-mcgrew-hash-sigs-05.")
490 iqr_retval iqr_LMSVerify(const iqr_LMSPublicKey *pub_key, uint32_t index, const uint8_t *digest, size_t digest_size,
491  const uint8_t *randomizer, size_t randomizer_size, const uint8_t *ots_sig, size_t ots_sig_size, const uint8_t *sig_path,
492  size_t sig_path_size);
493 
494 #ifdef __cplusplus
495 }
496 #endif
497 
498 #endif /* IQR_LMS_H */
Provide 1024 (210) one-time signatures.
Definition: iqr_lms.h:107
IQR_API iqr_retval iqr_LMSExportPrivateKey(const iqr_LMSPrivateKey *priv_key, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_LMSImportPublicKey(const iqr_LMSParams *params, const uint8_t *data, size_t size, iqr_LMSPublicKey **pub_key)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_LMSDestroyPrivateKey(iqr_LMSPrivateKey **priv_key)
IQR_API iqr_retval iqr_LMSGetWinternitz(const iqr_LMSParams *params, iqr_LMSWinternitz *w)
IQR_API iqr_retval iqr_LMSGetPrivateKeySize(const iqr_LMSPrivateKey *priv_key, size_t *size)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_LMSDestroyPublicKey(iqr_LMSPublicKey **pub_key)
IQR_API iqr_retval iqr_LMSCreateParams(const iqr_Context *ctx, iqr_LMSWinternitz w, iqr_LMSHeight h, const uint8_t *I, size_t I_size, iqr_LMSParams **params)
IQR_API iqr_retval iqr_LMSGetRemainingSignatureCount(const iqr_LMSParams *params, uint32_t index, uint32_t *remaining)
IQR_API iqr_retval iqr_LMSGetPublicKeySize(const iqr_LMSPublicKey *pub_key, size_t *size)
Definition: iqr_lms.h:87
Provide 1,048,576 (220) one-time signatures.
Definition: iqr_lms.h:104
struct iqr_LMSPrivateKey_struct iqr_LMSPrivateKey
Definition: iqr_lms.h:68
IQR_API iqr_retval iqr_LMSGetMaximumSignatureCount(const iqr_LMSParams *params, uint32_t *max_sigs)
IQR_API iqr_retval iqr_LMSGetHeight(const iqr_LMSParams *params, iqr_LMSHeight *h)
IQR_API iqr_retval iqr_LMSVerify(const iqr_LMSPublicKey *pub_key, uint32_t index, const uint8_t *digest, size_t digest_size, const uint8_t *randomizer, size_t randomizer_size, const uint8_t *ots_sig, size_t ots_sig_size, const uint8_t *sig_path, size_t sig_path_size)
struct iqr_LMSParams_struct iqr_LMSParams
Definition: iqr_lms.h:62
iqr_LMSWinternitz
Definition: iqr_lms.h:83
IQR_API iqr_retval iqr_LMSGetSignatureComponentSizes(const iqr_LMSParams *params, size_t *randomizer_size, size_t *ots_sig_size, size_t *sig_path_size)
iqr_LMSHeight
Definition: iqr_lms.h:102
IQR_API iqr_retval iqr_LMSImportPrivateKey(const iqr_LMSParams *params, const uint8_t *data, size_t size, iqr_LMSPrivateKey **priv_key)
Definition: iqr_lms.h:85
IQR_API iqr_retval iqr_LMSGetPrivateKeyParams(const iqr_LMSPrivateKey *priv_key, iqr_LMSParams **params)
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:48
struct iqr_LMSPublicKey_struct iqr_LMSPublicKey
Definition: iqr_lms.h:65
IQR_API iqr_retval iqr_LMSExportPublicKey(const iqr_LMSPublicKey *pub_key, uint8_t *buf, size_t buf_size)
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:33
IQR_API iqr_retval iqr_LMSCreateKeyPair(const iqr_LMSParams *params, const iqr_RNG *rng, iqr_LMSPublicKey **pub_key, iqr_LMSPrivateKey **priv_key)
IQR_API iqr_retval iqr_LMSSign(const iqr_LMSPrivateKey *priv_key, const iqr_RNG *rng, uint32_t index, const uint8_t *digest, size_t digest_size, uint8_t *randomizer, size_t randomizer_size, uint8_t *ots_sig, size_t ots_sig_size, uint8_t *sig_path, size_t sig_path_size)
IQR_API iqr_retval iqr_LMSGetPrivateKeyIdentifier(const iqr_LMSParams *params, uint8_t *I, size_t I_size)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_LMSDestroyParams(iqr_LMSParams **params)
Provide 32 (25) one-time signatures.
Definition: iqr_lms.h:110
IQR_API iqr_retval iqr_LMSGetPublicKeyParams(const iqr_LMSPublicKey *pub_key, iqr_LMSParams **params)
Definition: iqr_lms.h:86
Definition: iqr_lms.h:84
iqr_retval
Definition: iqr_retval.h:26