ISARA Radiate™ Quantum-safe Library Version 3.1

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 
69 IQR_EXTERN
71 
72 // ---------------------------------------------------------------------------------------------------------------------------------
73 // Kyber parameter management functions.
74 // ---------------------------------------------------------------------------------------------------------------------------------
75 
91 IQR_API
93 
108 IQR_API_UNENFORCED_RETURN
110 
111 // ---------------------------------------------------------------------------------------------------------------------------------
112 // Kyber key management functions.
113 // ---------------------------------------------------------------------------------------------------------------------------------
114 
131 IQR_API
132 iqr_retval iqr_KyberCreateKeyPair(const iqr_KyberParams *params, const iqr_RNG *rng, iqr_KyberPublicKey **public_key,
133  iqr_KyberPrivateKey **private_key);
134 
150 IQR_API
151 iqr_retval iqr_KyberImportPublicKey(const iqr_KyberParams *params, const uint8_t *buf, size_t buf_size,
152  iqr_KyberPublicKey **public_key);
153 
174 IQR_API
175 iqr_retval iqr_KyberImportPrivateKey(const iqr_KyberParams *params, const uint8_t *buf, size_t buf_size,
176  iqr_KyberPrivateKey **private_key);
177 
189 IQR_API
190 iqr_retval iqr_KyberExportPublicKey(const iqr_KyberPublicKey *public_key, uint8_t *buf, size_t buf_size);
191 
205 IQR_API
206 iqr_retval iqr_KyberExportPrivateKey(const iqr_KyberPrivateKey *private_key, uint8_t *buf, size_t buf_size);
207 
217 IQR_API_UNENFORCED_RETURN
219 
232 IQR_API_UNENFORCED_RETURN
234 
235 // ---------------------------------------------------------------------------------------------------------------------------------
236 // Kyber size functions.
237 // ---------------------------------------------------------------------------------------------------------------------------------
238 
247 IQR_API
248 iqr_retval iqr_KyberGetPublicKeySize(const iqr_KyberParams *params, size_t *public_key_size);
249 
258 IQR_API
259 iqr_retval iqr_KyberGetPrivateKeySize(const iqr_KyberParams *params, size_t *private_key_size);
260 
269 IQR_API
270 iqr_retval iqr_KyberGetCiphertextSize(const iqr_KyberParams *params, size_t *ciphertext_size);
271 
280 IQR_API
281 iqr_retval iqr_KyberGetSharedKeySize(const iqr_KyberParams *params, size_t *shared_key_size);
282 
283 // ---------------------------------------------------------------------------------------------------------------------------------
284 // Kyber encapsulation/decapsulation functions.
285 // ---------------------------------------------------------------------------------------------------------------------------------
286 
314 IQR_API
315 iqr_retval iqr_KyberEncapsulate(const iqr_KyberPublicKey *public_key, const iqr_RNG *rng, uint8_t *ciphertext,
316  size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size);
317 
341 IQR_API
342 iqr_retval iqr_KyberDecapsulate(const iqr_KyberPrivateKey *private_key, const uint8_t *ciphertext, size_t ciphertext_size,
343  uint8_t *shared_key, size_t shared_key_size);
344 
345 #ifdef __cplusplus
346 }
347 #endif
348 
349 #endif /* IQR_KYBER_H */
IQR_API iqr_retval iqr_KyberGetSharedKeySize(const iqr_KyberParams *params, size_t *shared_key_size)
IQR_API iqr_retval iqr_KyberGetPrivateKeySize(const iqr_KyberParams *params, size_t *private_key_size)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_KyberDestroyPrivateKey(iqr_KyberPrivateKey **private_key)
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)
ISARA Radiate Quantum-Safe Library's Random Number Generator object APIs.
IQR_API iqr_retval iqr_KyberExportPublicKey(const iqr_KyberPublicKey *public_key, uint8_t *buf, size_t buf_size)
const IQR_EXTERN iqr_KyberVariant IQR_KYBER_512
Definition: iqr_kyber.h:62
struct iqr_KyberPrivateKey_struct iqr_KyberPrivateKey
Definition: iqr_kyber.h:51
IQR_API iqr_retval iqr_KyberGetPublicKeySize(const iqr_KyberParams *params, size_t *public_key_size)
const IQR_EXTERN iqr_KyberVariant IQR_KYBER_1024
Definition: iqr_kyber.h:70
IQR_API_UNENFORCED_RETURN iqr_retval iqr_KyberDestroyParams(iqr_KyberParams **params)
struct iqr_KyberVariant_struct iqr_KyberVariant
Definition: iqr_kyber.h:54
struct iqr_KyberPublicKey_struct iqr_KyberPublicKey
Definition: iqr_kyber.h:48
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:41
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:35
IQR_API iqr_retval iqr_KyberImportPrivateKey(const iqr_KyberParams *params, const uint8_t *buf, size_t buf_size, iqr_KyberPrivateKey **private_key)
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_KyberCreateKeyPair(const iqr_KyberParams *params, const iqr_RNG *rng, iqr_KyberPublicKey **public_key, iqr_KyberPrivateKey **private_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_KyberParams_struct iqr_KyberParams
Definition: iqr_kyber.h:45
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_UNENFORCED_RETURN iqr_retval iqr_KyberDestroyPublicKey(iqr_KyberPublicKey **public_key)
const IQR_EXTERN iqr_KyberVariant IQR_KYBER_768
Definition: iqr_kyber.h:66
IQR_API iqr_retval iqr_KyberImportPublicKey(const iqr_KyberParams *params, const uint8_t *buf, size_t buf_size, iqr_KyberPublicKey **public_key)
IQR_API iqr_retval iqr_KyberGetCiphertextSize(const iqr_KyberParams *params, size_t *ciphertext_size)