ISARA Radiate™ Quantum-safe Library Version 3.1

Quantum-safe cryptographic primitives and algorithms.

iqr_classicmceliece.h
Go to the documentation of this file.
1 
19 #ifndef IQR_CLASSICMCELIECE_H
20 #define IQR_CLASSICMCELIECE_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_CLASSICMCELIECE_SHARED_KEY_SIZE 32
39 
40 // ---------------------------------------------------------------------------------------------------------------------------------
41 // Opaque data types.
42 // ---------------------------------------------------------------------------------------------------------------------------------
43 
45 typedef struct iqr_ClassicMcElieceParams_struct iqr_ClassicMcElieceParams;
46 
48 typedef struct iqr_ClassicMcEliecePublicKey_struct iqr_ClassicMcEliecePublicKey;
49 
51 typedef struct iqr_ClassicMcEliecePrivateKey_struct iqr_ClassicMcEliecePrivateKey;
52 
54 typedef struct iqr_ClassicMcElieceVariant_struct iqr_ClassicMcElieceVariant;
55 
56 // ---------------------------------------------------------------------------------------------------------------------------------
57 // ClassicMcEliece variants.
58 // ---------------------------------------------------------------------------------------------------------------------------------
59 
61 IQR_EXTERN
63 
65 IQR_EXTERN
67 
68 // ---------------------------------------------------------------------------------------------------------------------------------
69 // ClassicMcEliece parameter management functions.
70 // ---------------------------------------------------------------------------------------------------------------------------------
71 
84 IQR_API
86  iqr_ClassicMcElieceParams **params);
87 
103 IQR_API_UNENFORCED_RETURN
105 
106 // ---------------------------------------------------------------------------------------------------------------------------------
107 // ClassicMcEliece key management functions.
108 // ---------------------------------------------------------------------------------------------------------------------------------
109 
128 IQR_API
130  iqr_ClassicMcEliecePublicKey **public_key, iqr_ClassicMcEliecePrivateKey **private_key);
131 
148 IQR_API
149 iqr_retval iqr_ClassicMcElieceImportPublicKey(const iqr_ClassicMcElieceParams *params, const uint8_t *buf, size_t buf_size,
150  iqr_ClassicMcEliecePublicKey **public_key);
151 
173 IQR_API
174 iqr_retval iqr_ClassicMcElieceImportPrivateKey(const iqr_ClassicMcElieceParams *params, const uint8_t *buf, size_t buf_size,
175  iqr_ClassicMcEliecePrivateKey **private_key);
176 
188 IQR_API
189 iqr_retval iqr_ClassicMcElieceExportPublicKey(const iqr_ClassicMcEliecePublicKey *public_key, uint8_t *buf, size_t buf_size);
190 
204 IQR_API
205 iqr_retval iqr_ClassicMcElieceExportPrivateKey(const iqr_ClassicMcEliecePrivateKey *private_key, uint8_t *buf, size_t buf_size);
206 
217 IQR_API_UNENFORCED_RETURN
219 
233 IQR_API_UNENFORCED_RETURN
235 
236 // ---------------------------------------------------------------------------------------------------------------------------------
237 // ClassicMcEliece size functions.
238 // ---------------------------------------------------------------------------------------------------------------------------------
239 
248 IQR_API
249 iqr_retval iqr_ClassicMcElieceGetPublicKeySize(const iqr_ClassicMcElieceParams *params, size_t *public_key_size);
250 
259 IQR_API
260 iqr_retval iqr_ClassicMcElieceGetPrivateKeySize(const iqr_ClassicMcElieceParams *params, size_t *private_key_size);
261 
270 IQR_API
271 iqr_retval iqr_ClassicMcElieceGetCiphertextSize(const iqr_ClassicMcElieceParams *params, size_t *ciphertext_size);
272 
281 IQR_API
282 iqr_retval iqr_ClassicMcElieceGetSharedKeySize(const iqr_ClassicMcElieceParams *params, size_t *shared_key_size);
283 
284 // ---------------------------------------------------------------------------------------------------------------------------------
285 // ClassicMcEliece encapsulation/decapsulation functions.
286 // ---------------------------------------------------------------------------------------------------------------------------------
287 
315 IQR_API
316 iqr_retval iqr_ClassicMcElieceEncapsulate(const iqr_ClassicMcEliecePublicKey *public_key, const iqr_RNG *rng, uint8_t *ciphertext,
317  size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size);
318 
342 IQR_API
343 iqr_retval iqr_ClassicMcElieceDecapsulate(const iqr_ClassicMcEliecePrivateKey *private_key, const uint8_t *ciphertext,
344  size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size);
345 
346 #ifdef __cplusplus
347 }
348 #endif
349 
350 #endif /* IQR_CLASSICMCELIECE_H */
ISARA Radiate Quantum-Safe Library's Random Number Generator object APIs.
const IQR_EXTERN iqr_ClassicMcElieceVariant IQR_CLASSICMCELIECE_6
Definition: iqr_classicmceliece.h:62
IQR_API_UNENFORCED_RETURN iqr_retval iqr_ClassicMcElieceDestroyPublicKey(iqr_ClassicMcEliecePublicKey **public_key)
IQR_API iqr_retval iqr_ClassicMcElieceGetPrivateKeySize(const iqr_ClassicMcElieceParams *params, size_t *private_key_size)
IQR_API iqr_retval iqr_ClassicMcElieceCreateParams(const iqr_Context *ctx, const iqr_ClassicMcElieceVariant *variant, iqr_ClassicMcElieceParams **params)
IQR_API iqr_retval iqr_ClassicMcElieceExportPrivateKey(const iqr_ClassicMcEliecePrivateKey *private_key, uint8_t *buf, size_t buf_size)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_ClassicMcElieceDestroyParams(iqr_ClassicMcElieceParams **params)
struct iqr_ClassicMcEliecePublicKey_struct iqr_ClassicMcEliecePublicKey
Definition: iqr_classicmceliece.h:48
IQR_API iqr_retval iqr_ClassicMcElieceGetSharedKeySize(const iqr_ClassicMcElieceParams *params, size_t *shared_key_size)
IQR_API iqr_retval iqr_ClassicMcElieceEncapsulate(const iqr_ClassicMcEliecePublicKey *public_key, const iqr_RNG *rng, 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:41
IQR_API_UNENFORCED_RETURN iqr_retval iqr_ClassicMcElieceDestroyPrivateKey(iqr_ClassicMcEliecePrivateKey **private_key)
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:35
struct iqr_ClassicMcElieceVariant_struct iqr_ClassicMcElieceVariant
Definition: iqr_classicmceliece.h:54
ISARA Radiate Quantum-Safe Library's return values.
IQR_API iqr_retval iqr_ClassicMcElieceImportPrivateKey(const iqr_ClassicMcElieceParams *params, const uint8_t *buf, size_t buf_size, iqr_ClassicMcEliecePrivateKey **private_key)
iqr_retval
Definition: iqr_retval.h:28
ISARA Radiate Quantum-Safe Library's API declarations.
IQR_API iqr_retval iqr_ClassicMcElieceDecapsulate(const iqr_ClassicMcEliecePrivateKey *private_key, const uint8_t *ciphertext, size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size)
IQR_API iqr_retval iqr_ClassicMcElieceGetCiphertextSize(const iqr_ClassicMcElieceParams *params, size_t *ciphertext_size)
IQR_API iqr_retval iqr_ClassicMcElieceCreateKeyPair(const iqr_ClassicMcElieceParams *params, const iqr_RNG *rng, iqr_ClassicMcEliecePublicKey **public_key, iqr_ClassicMcEliecePrivateKey **private_key)
IQR_API iqr_retval iqr_ClassicMcElieceImportPublicKey(const iqr_ClassicMcElieceParams *params, const uint8_t *buf, size_t buf_size, iqr_ClassicMcEliecePublicKey **public_key)
struct iqr_ClassicMcEliecePrivateKey_struct iqr_ClassicMcEliecePrivateKey
Definition: iqr_classicmceliece.h:51
struct iqr_ClassicMcElieceParams_struct iqr_ClassicMcElieceParams
Definition: iqr_classicmceliece.h:45
IQR_API iqr_retval iqr_ClassicMcElieceGetPublicKeySize(const iqr_ClassicMcElieceParams *params, size_t *public_key_size)
IQR_API iqr_retval iqr_ClassicMcElieceExportPublicKey(const iqr_ClassicMcEliecePublicKey *public_key, uint8_t *buf, size_t buf_size)
const IQR_EXTERN iqr_ClassicMcElieceVariant IQR_CLASSICMCELIECE_8
Definition: iqr_classicmceliece.h:66