ISARA Radiate Security Solution Suite Toolkit Edition Version 1.5

Quantum-safe cryptographic primitives and algorithms.

iqr_kyber.h
Go to the documentation of this file.
1 
19 #ifndef IQR_KYBER_H
20 #define IQR_KYBER_H
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #include "iqr_api.h"
27 #include "iqr_retval.h"
28 #include "iqr_rng.h"
29 
30 #include <stddef.h>
31 #include <stdint.h>
32 
33 // ---------------------------------------------------------------------------------------------------------------------------------
34 // Constants.
35 // ---------------------------------------------------------------------------------------------------------------------------------
36 
38 #define IQR_KYBER_SHARED_KEY_SIZE 32
39 
40 // ---------------------------------------------------------------------------------------------------------------------------------
41 // Opaque data types.
42 // ---------------------------------------------------------------------------------------------------------------------------------
43 
45 typedef struct iqr_KyberParams_struct iqr_KyberParams;
46 
48 typedef struct iqr_KyberPublicKey_struct iqr_KyberPublicKey;
49 
51 typedef struct iqr_KyberPrivateKey_struct iqr_KyberPrivateKey;
52 
54 typedef struct iqr_KyberVariant_struct iqr_KyberVariant;
55 
56 // ---------------------------------------------------------------------------------------------------------------------------------
57 // Kyber variants.
58 // ---------------------------------------------------------------------------------------------------------------------------------
59 
61 IQR_EXTERN
63 
65 IQR_EXTERN
67 
68 // ---------------------------------------------------------------------------------------------------------------------------------
69 // Kyber parameter management functions.
70 // ---------------------------------------------------------------------------------------------------------------------------------
71 
87 IQR_API
89 
104 IQR_API_UNENFORCED_RETURN
106 
107 // ---------------------------------------------------------------------------------------------------------------------------------
108 // Kyber key management functions.
109 // ---------------------------------------------------------------------------------------------------------------------------------
110 
127 IQR_API
128 iqr_retval iqr_KyberCreateKeyPair(const iqr_KyberParams *params, const iqr_RNG *rng, iqr_KyberPublicKey **public_key,
129  iqr_KyberPrivateKey **private_key);
130 
146 IQR_API
147 iqr_retval iqr_KyberImportPublicKey(const iqr_KyberParams *params, const uint8_t *buf, size_t buf_size,
148  iqr_KyberPublicKey **public_key);
149 
170 IQR_API
171 iqr_retval iqr_KyberImportPrivateKey(const iqr_KyberParams *params, const uint8_t *buf, size_t buf_size,
172  iqr_KyberPrivateKey **private_key);
173 
185 IQR_API
186 iqr_retval iqr_KyberExportPublicKey(const iqr_KyberPublicKey *public_key, uint8_t *buf, size_t buf_size);
187 
201 IQR_API
202 iqr_retval iqr_KyberExportPrivateKey(const iqr_KyberPrivateKey *private_key, uint8_t *buf, size_t buf_size);
203 
213 IQR_API_UNENFORCED_RETURN
215 
228 IQR_API_UNENFORCED_RETURN
230 
231 // ---------------------------------------------------------------------------------------------------------------------------------
232 // Kyber size functions.
233 // ---------------------------------------------------------------------------------------------------------------------------------
234 
243 IQR_API
244 iqr_retval iqr_KyberGetPublicKeySize(const iqr_KyberParams *params, size_t *public_key_size);
245 
254 IQR_API
255 iqr_retval iqr_KyberGetPrivateKeySize(const iqr_KyberParams *params, size_t *private_key_size);
256 
265 IQR_API
266 iqr_retval iqr_KyberGetCiphertextSize(const iqr_KyberParams *params, size_t *ciphertext_size);
267 
268 // ---------------------------------------------------------------------------------------------------------------------------------
269 // Kyber encapsulation/decapsulation functions.
270 // ---------------------------------------------------------------------------------------------------------------------------------
271 
299 IQR_API
300 iqr_retval iqr_KyberEncapsulate(const iqr_KyberPublicKey *public_key, const iqr_RNG *rng, uint8_t *ciphertext,
301  size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size);
302 
326 IQR_API
327 iqr_retval iqr_KyberDecapsulate(const iqr_KyberPrivateKey *private_key, const uint8_t *ciphertext, size_t ciphertext_size,
328  uint8_t *shared_key, size_t shared_key_size);
329 
330 #ifdef __cplusplus
331 }
332 #endif
333 
334 #endif /* IQR_KYBER_H */
IQR_API_UNENFORCED_RETURN iqr_retval iqr_KyberDestroyPublicKey(iqr_KyberPublicKey **public_key)
IQR_API iqr_retval iqr_KyberEncapsulate(const iqr_KyberPublicKey *public_key, const iqr_RNG *rng, uint8_t *ciphertext, size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size)
struct iqr_KyberPrivateKey_struct iqr_KyberPrivateKey
Definition: iqr_kyber.h:52
IQR_API iqr_retval iqr_KyberGetPublicKeySize(const iqr_KyberParams *params, size_t *public_key_size)
IQR_API iqr_retval iqr_KyberDecapsulate(const iqr_KyberPrivateKey *private_key, const uint8_t *ciphertext, size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size)
IQR_API iqr_retval iqr_KyberExportPublicKey(const iqr_KyberPublicKey *public_key, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_KyberExportPrivateKey(const iqr_KyberPrivateKey *private_key, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_KyberCreateParams(const iqr_Context *ctx, const iqr_KyberVariant *variant, iqr_KyberParams **params)
IQR_API iqr_retval iqr_KyberCreateKeyPair(const iqr_KyberParams *params, const iqr_RNG *rng, iqr_KyberPublicKey **public_key, iqr_KyberPrivateKey **private_key)
struct iqr_KyberVariant_struct iqr_KyberVariant
Definition: iqr_kyber.h:55
struct iqr_KyberPublicKey_struct iqr_KyberPublicKey
Definition: iqr_kyber.h:49
ISARA Radiate Security Solution Suite&#39;s Random Number Generator object APIs.
IQR_EXTERN const iqr_KyberVariant IQR_KYBER_1024
Definition: iqr_kyber.h:67
ISARA Radiate Security Solution Suite&#39;s return values.
IQR_API_UNENFORCED_RETURN iqr_retval iqr_KyberDestroyPrivateKey(iqr_KyberPrivateKey **private_key)
struct iqr_KyberParams_struct iqr_KyberParams
Definition: iqr_kyber.h:46
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:51
IQR_API iqr_retval iqr_KyberImportPrivateKey(const iqr_KyberParams *params, const uint8_t *buf, size_t buf_size, iqr_KyberPrivateKey **private_key)
IQR_API iqr_retval iqr_KyberImportPublicKey(const iqr_KyberParams *params, const uint8_t *buf, size_t buf_size, iqr_KyberPublicKey **public_key)
ISARA Radiate Security Solution Suite&#39;s API declarations.
IQR_API iqr_retval iqr_KyberGetPrivateKeySize(const iqr_KyberParams *params, size_t *private_key_size)
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:36
IQR_API_UNENFORCED_RETURN iqr_retval iqr_KyberDestroyParams(iqr_KyberParams **params)
IQR_EXTERN const iqr_KyberVariant IQR_KYBER_768
Definition: iqr_kyber.h:63
iqr_retval
Definition: iqr_retval.h:29
IQR_API iqr_retval iqr_KyberGetCiphertextSize(const iqr_KyberParams *params, size_t *ciphertext_size)