ISARA Radiate Security Solution Suite Toolkit Edition Version 1.5

Quantum-safe cryptographic primitives and algorithms.

iqr_frodokem.h
Go to the documentation of this file.
1 
18 #ifndef IQR_FRODOKEM_H
19 #define IQR_FRODOKEM_H
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #include "iqr_api.h"
26 #include "iqr_retval.h"
27 #include "iqr_rng.h"
28 
29 #include <stddef.h>
30 #include <stdint.h>
31 
32 // ---------------------------------------------------------------------------------------------------------------------------------
33 // Constants.
34 // ---------------------------------------------------------------------------------------------------------------------------------
35 
37 #define IQR_FRODOKEM_PUBLIC_KEY_SIZE 15632
38 
40 #define IQR_FRODOKEM_PRIVATE_KEY_SIZE 31280
41 
43 #define IQR_FRODOKEM_CIPHERTEXT_SIZE 15768
44 
46 #define IQR_FRODOKEM_SHARED_KEY_SIZE 24
47 
48 // ---------------------------------------------------------------------------------------------------------------------------------
49 // Opaque data types.
50 // ---------------------------------------------------------------------------------------------------------------------------------
51 
53 typedef struct iqr_FrodoKEMParams_struct iqr_FrodoKEMParams;
54 
56 typedef struct iqr_FrodoKEMPublicKey_struct iqr_FrodoKEMPublicKey;
57 
59 typedef struct iqr_FrodoKEMPrivateKey_struct iqr_FrodoKEMPrivateKey;
60 
62 typedef struct iqr_FrodoKEMVariant_struct iqr_FrodoKEMVariant;
63 
64 // ---------------------------------------------------------------------------------------------------------------------------------
65 // FrodoKEM variants.
66 // ---------------------------------------------------------------------------------------------------------------------------------
67 
69 IQR_EXTERN
71 
73 IQR_EXTERN
75 
76 // ---------------------------------------------------------------------------------------------------------------------------------
77 // FrodoKEM parameter management functions.
78 // ---------------------------------------------------------------------------------------------------------------------------------
79 
92 IQR_API
94 
109 IQR_API_UNENFORCED_RETURN
111 
112 // ---------------------------------------------------------------------------------------------------------------------------------
113 // FrodoKEM key management functions.
114 // ---------------------------------------------------------------------------------------------------------------------------------
115 
132 IQR_API
134  iqr_FrodoKEMPrivateKey **private_key);
135 
150 IQR_API
151 iqr_retval iqr_FrodoKEMImportPublicKey(const iqr_FrodoKEMParams *params, const uint8_t *buf, size_t buf_size,
152  iqr_FrodoKEMPublicKey **public_key);
153 
173 IQR_API
174 iqr_retval iqr_FrodoKEMImportPrivateKey(const iqr_FrodoKEMParams *params, const uint8_t *buf, size_t buf_size,
175  iqr_FrodoKEMPrivateKey **private_key);
176 
187 IQR_API
188 iqr_retval iqr_FrodoKEMExportPublicKey(const iqr_FrodoKEMPublicKey *public_key, uint8_t *buf, size_t buf_size);
189 
202 IQR_API
203 iqr_retval iqr_FrodoKEMExportPrivateKey(const iqr_FrodoKEMPrivateKey *private_key, uint8_t *buf, size_t buf_size);
204 
214 IQR_API_UNENFORCED_RETURN
216 
229 IQR_API_UNENFORCED_RETURN
231 
232 // ---------------------------------------------------------------------------------------------------------------------------------
233 // FrodoKEM encapsulation/decapsulation functions.
234 // ---------------------------------------------------------------------------------------------------------------------------------
235 
262 IQR_API
263 iqr_retval iqr_FrodoKEMEncapsulate(const iqr_FrodoKEMPublicKey *public_key, const iqr_RNG *rng, uint8_t *ciphertext,
264  size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size);
265 
288 IQR_API
289 iqr_retval iqr_FrodoKEMDecapsulate(const iqr_FrodoKEMPrivateKey *private_key, const uint8_t *ciphertext, size_t ciphertext_size,
290  uint8_t *shared_key, size_t shared_key_size);
291 
292 #ifdef __cplusplus
293 }
294 #endif
295 
296 #endif /* IQR_FRODOKEM_H */
IQR_EXTERN const iqr_FrodoKEMVariant IQR_FRODOKEM_976_CSHAKE
Definition: iqr_frodokem.h:75
IQR_API iqr_retval iqr_FrodoKEMImportPublicKey(const iqr_FrodoKEMParams *params, const uint8_t *buf, size_t buf_size, iqr_FrodoKEMPublicKey **public_key)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_FrodoKEMDestroyParams(iqr_FrodoKEMParams **params)
IQR_API iqr_retval iqr_FrodoKEMEncapsulate(const iqr_FrodoKEMPublicKey *public_key, const iqr_RNG *rng, uint8_t *ciphertext, size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size)
struct iqr_FrodoKEMPrivateKey_struct iqr_FrodoKEMPrivateKey
Definition: iqr_frodokem.h:60
ISARA Radiate Security Solution Suite&#39;s Random Number Generator object APIs.
struct iqr_FrodoKEMPublicKey_struct iqr_FrodoKEMPublicKey
Definition: iqr_frodokem.h:57
ISARA Radiate Security Solution Suite&#39;s return values.
IQR_API iqr_retval iqr_FrodoKEMExportPrivateKey(const iqr_FrodoKEMPrivateKey *private_key, uint8_t *buf, size_t buf_size)
struct iqr_FrodoKEMVariant_struct iqr_FrodoKEMVariant
Definition: iqr_frodokem.h:63
IQR_API iqr_retval iqr_FrodoKEMDecapsulate(const iqr_FrodoKEMPrivateKey *private_key, const uint8_t *ciphertext, size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size)
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:51
ISARA Radiate Security Solution Suite&#39;s API declarations.
IQR_EXTERN const iqr_FrodoKEMVariant IQR_FRODOKEM_976_AES
Definition: iqr_frodokem.h:71
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:36
IQR_API iqr_retval iqr_FrodoKEMCreateKeyPair(const iqr_FrodoKEMParams *params, const iqr_RNG *rng, iqr_FrodoKEMPublicKey **public_key, iqr_FrodoKEMPrivateKey **private_key)
struct iqr_FrodoKEMParams_struct iqr_FrodoKEMParams
Definition: iqr_frodokem.h:54
IQR_API_UNENFORCED_RETURN iqr_retval iqr_FrodoKEMDestroyPublicKey(iqr_FrodoKEMPublicKey **public_key)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_FrodoKEMDestroyPrivateKey(iqr_FrodoKEMPrivateKey **private_key)
IQR_API iqr_retval iqr_FrodoKEMCreateParams(const iqr_Context *ctx, const iqr_FrodoKEMVariant *variant, iqr_FrodoKEMParams **params)
iqr_retval
Definition: iqr_retval.h:29
IQR_API iqr_retval iqr_FrodoKEMExportPublicKey(const iqr_FrodoKEMPublicKey *public_key, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_FrodoKEMImportPrivateKey(const iqr_FrodoKEMParams *params, const uint8_t *buf, size_t buf_size, iqr_FrodoKEMPrivateKey **private_key)