ISARA Radiate Key State Manager  Version 1.2
A framework for safe storage of LMS private key state.
ikm_lms.h
Go to the documentation of this file.
1 
36 #ifndef IKS_LMS_H
37 #define IKS_LMS_H
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 #include <stddef.h>
44 #include <stdint.h>
45 
46 #include "iqr_api.h"
47 #include "iqr_rng.h"
48 #include "iqr_lms.h"
49 
50 #include "ikm_retval.h"
51 #include "ikm_io.h"
52 
53 // ---------------------------------------------------------------------------------------------------------------------------------
54 // Opaque data type.
55 // ---------------------------------------------------------------------------------------------------------------------------------
56 
58 typedef struct ikm_LMSPrivateKey_struct ikm_LMSPrivateKey;
59 
60 // ---------------------------------------------------------------------------------------------------------------------------------
61 // Key creation functions.
62 // ---------------------------------------------------------------------------------------------------------------------------------
63 
80 IQR_API
81 ikm_retval ikm_LMSCreateKeyPair(const iqr_LMSParams *params, const iqr_RNG *rng, iqr_LMSPublicKey **pub_key,
82  ikm_LMSPrivateKey **priv_key);
83 
110 IQR_API
111 ikm_retval ikm_LMSCreateSplitKeyPair(const iqr_LMSParams *params, const iqr_RNG *rng, iqr_LMSPublicKey **pub_key,
112  ikm_LMSPrivateKey *priv_keys[], size_t num_priv_keys);
113 
128 IQR_API
129 ikm_retval ikm_LMSLoadPrivateKey(const iqr_Context *ctx, const ikm_IO *io, uint32_t key_id, ikm_LMSPrivateKey **priv_key);
130 
150 IQR_API
151 ikm_retval ikm_LMSStorePrivateKey(ikm_LMSPrivateKey **priv_key, const ikm_IO *io, uint32_t key_id);
152 
166 IQR_API_UNENFORCED_RETURN
168 
169 // ---------------------------------------------------------------------------------------------------------------------------------
170 // Key data retrieval functions.
171 // ---------------------------------------------------------------------------------------------------------------------------------
172 
187 IQR_API
188 ikm_retval ikm_LMSGetPrivateKeyParams(const ikm_LMSPrivateKey *priv_key, iqr_LMSParams **params);
189 
190 // ---------------------------------------------------------------------------------------------------------------------------------
191 // Signature functionality.
192 // ---------------------------------------------------------------------------------------------------------------------------------
193 
219 IQR_API
220 ikm_retval ikm_LMSSign(ikm_LMSPrivateKey *priv_key, const iqr_RNG *rng, const uint8_t *digest, size_t digest_size,
221  uint8_t *sig, size_t sig_size);
222 
231 IQR_API
232 ikm_retval ikm_LMSGetRemainingSignatureCount(const ikm_LMSPrivateKey *priv_key, uint32_t *remaining);
233 
234 #ifdef __cplusplus
235 }
236 #endif
237 
238 #endif /* IKS_LMS_H */
struct ikm_IO_struct ikm_IO
Definition: ikm_io.h:34
IQR_API ikm_retval ikm_LMSCreateSplitKeyPair(const iqr_LMSParams *params, const iqr_RNG *rng, iqr_LMSPublicKey **pub_key, ikm_LMSPrivateKey *priv_keys[], size_t num_priv_keys)
IQR_API ikm_retval ikm_LMSGetRemainingSignatureCount(const ikm_LMSPrivateKey *priv_key, uint32_t *remaining)
IQR_API ikm_retval ikm_LMSStorePrivateKey(ikm_LMSPrivateKey **priv_key, const ikm_IO *io, uint32_t key_id)
struct ikm_LMSPrivateKey_struct ikm_LMSPrivateKey
Definition: ikm_lms.h:58
ikm_retval
Definition: ikm_retval.h:22
IQR_API ikm_retval ikm_LMSGetPrivateKeyParams(const ikm_LMSPrivateKey *priv_key, iqr_LMSParams **params)
IQR_API ikm_retval ikm_LMSSign(ikm_LMSPrivateKey *priv_key, const iqr_RNG *rng, const uint8_t *digest, size_t digest_size, uint8_t *sig, size_t sig_size)
IQR_API ikm_retval ikm_LMSLoadPrivateKey(const iqr_Context *ctx, const ikm_IO *io, uint32_t key_id, ikm_LMSPrivateKey **priv_key)
IQR_API_UNENFORCED_RETURN ikm_retval ikm_LMSDestroyPrivateKey(ikm_LMSPrivateKey **priv_key)
IQR_API ikm_retval ikm_LMSCreateKeyPair(const iqr_LMSParams *params, const iqr_RNG *rng, iqr_LMSPublicKey **pub_key, ikm_LMSPrivateKey **priv_key)