ISARA Radiate Security Solution Suite Toolkit Edition Version 1.5

Quantum-safe cryptographic primitives and algorithms.

iqr_mceliece.h
Go to the documentation of this file.
1 
26 #ifndef IQR_MCELIECE_H
27 #define IQR_MCELIECE_H
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 #include "iqr_api.h"
34 #include "iqr_hash.h"
35 #include "iqr_retval.h"
36 #include "iqr_rng.h"
37 
38 #include <stddef.h>
39 #include <stdint.h>
40 
41 // ---------------------------------------------------------------------------------------------------------------------------------
42 // Constants.
43 // ---------------------------------------------------------------------------------------------------------------------------------
44 
46 #define IQR_MCELIECE_SHARED_KEY_SIZE 32
47 
49 #define IQR_MCELIECE_CIPHERTEXT_SIZE 8225
50 
52 #define IQR_MCELIECE_PUBLIC_KEY_SIZE 4097
53 
55 #define IQR_MCELIECE_PRIVATE_KEY_SIZE 548
56 
57 // ---------------------------------------------------------------------------------------------------------------------------------
58 // Opaque data types.
59 // ---------------------------------------------------------------------------------------------------------------------------------
60 
62 typedef struct iqr_McElieceParams_struct iqr_McElieceParams;
63 
65 typedef struct iqr_McEliecePublicKey_struct iqr_McEliecePublicKey;
66 
68 typedef struct iqr_McEliecePrivateKey_struct iqr_McEliecePrivateKey;
69 
70 // ---------------------------------------------------------------------------------------------------------------------------------
71 // McEliece parameter management functions.
72 // ---------------------------------------------------------------------------------------------------------------------------------
73 
98 IQR_API
100 
115 IQR_API_UNENFORCED_RETURN
117 
118 // ---------------------------------------------------------------------------------------------------------------------------------
119 // McEliece key management functions.
120 // ---------------------------------------------------------------------------------------------------------------------------------
121 
142 IQR_API
144  iqr_McEliecePrivateKey **private_key);
145 
166 IQR_API
167 iqr_retval iqr_McElieceImportPublicKey(const iqr_McElieceParams *params, const uint8_t *buf, size_t buf_size,
168  iqr_McEliecePublicKey **public_key);
169 
194 IQR_API
195 iqr_retval iqr_McElieceImportPrivateKey(const iqr_McElieceParams *params, const uint8_t *buf, size_t buf_size,
196  iqr_McEliecePrivateKey **private_key);
197 
208 IQR_API
209 iqr_retval iqr_McElieceExportPublicKey(const iqr_McEliecePublicKey *public_key, uint8_t *buf, size_t buf_size);
210 
226 IQR_API
227 iqr_retval iqr_McElieceExportPrivateKey(const iqr_McEliecePrivateKey *private_key, uint8_t *buf, size_t buf_size);
228 
238 IQR_API_UNENFORCED_RETURN
240 
253 IQR_API_UNENFORCED_RETURN
255 
256 // ---------------------------------------------------------------------------------------------------------------------------------
257 // McEliece KEM encapsulation/decapsulation functions.
258 // ---------------------------------------------------------------------------------------------------------------------------------
259 
287 IQR_API
288 iqr_retval iqr_McElieceEncapsulate(const iqr_McEliecePublicKey *public_key, const iqr_RNG *rng, uint8_t *ciphertext,
289  size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size);
290 
317 IQR_API
318 iqr_retval iqr_McElieceDecapsulate(const iqr_McEliecePrivateKey *private_key, const uint8_t *ciphertext, size_t ciphertext_size,
319  uint8_t *shared_key, size_t shared_key_size);
320 
321 #ifdef __cplusplus
322 }
323 #endif
324 
325 #endif /* IQR_MCELIECE_H */
IQR_API_UNENFORCED_RETURN iqr_retval iqr_McElieceDestroyPublicKey(iqr_McEliecePublicKey **public_key)
IQR_API iqr_retval iqr_McElieceCreateKeyPair(const iqr_McElieceParams *params, const iqr_RNG *rng, iqr_McEliecePublicKey **public_key, iqr_McEliecePrivateKey **private_key)
IQR_API iqr_retval iqr_McElieceEncapsulate(const iqr_McEliecePublicKey *public_key, const iqr_RNG *rng, uint8_t *ciphertext, size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size)
ISARA Radiate Security Solution Suite&#39;s Hash object API.
IQR_API iqr_retval iqr_McElieceImportPublicKey(const iqr_McElieceParams *params, const uint8_t *buf, size_t buf_size, iqr_McEliecePublicKey **public_key)
iqr_HashAlgorithmType
Definition: iqr_hash.h:53
ISARA Radiate Security Solution Suite&#39;s Random Number Generator object APIs.
ISARA Radiate Security Solution Suite&#39;s return values.
struct iqr_McElieceParams_struct iqr_McElieceParams
Definition: iqr_mceliece.h:63
struct iqr_McEliecePrivateKey_struct iqr_McEliecePrivateKey
Definition: iqr_mceliece.h:69
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:51
IQR_API iqr_retval iqr_McElieceDecapsulate(const iqr_McEliecePrivateKey *private_key, const uint8_t *ciphertext, size_t ciphertext_size, uint8_t *shared_key, size_t shared_key_size)
ISARA Radiate Security Solution Suite&#39;s API declarations.
IQR_API iqr_retval iqr_McElieceExportPublicKey(const iqr_McEliecePublicKey *public_key, uint8_t *buf, size_t buf_size)
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:36
IQR_API iqr_retval iqr_McElieceExportPrivateKey(const iqr_McEliecePrivateKey *private_key, uint8_t *buf, size_t buf_size)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_McElieceDestroyPrivateKey(iqr_McEliecePrivateKey **private_key)
IQR_API iqr_retval iqr_McElieceCreateParams(const iqr_Context *ctx, iqr_HashAlgorithmType hash_algo, iqr_McElieceParams **params)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_McElieceDestroyParams(iqr_McElieceParams **params)
IQR_API iqr_retval iqr_McElieceImportPrivateKey(const iqr_McElieceParams *params, const uint8_t *buf, size_t buf_size, iqr_McEliecePrivateKey **private_key)
struct iqr_McEliecePublicKey_struct iqr_McEliecePublicKey
Definition: iqr_mceliece.h:66
iqr_retval
Definition: iqr_retval.h:29