ISARA Quantum Resistant Toolkit  Version 1.1
Quantum resistant cryptographic primitives and algorithms.
iqr_mceliece.h
Go to the documentation of this file.
1 
35 #ifndef IQR_MCELIECE_H
36 #define IQR_MCELIECE_H
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 #include <stdbool.h>
43 
44 #include "iqr_api.h"
45 #include "iqr_hash.h"
46 #include "iqr_retval.h"
47 #include "iqr_rng.h"
48 
49 // ---------------------------------------------------------------------------------------------------------------------------------
50 // Opaque data types.
51 // ---------------------------------------------------------------------------------------------------------------------------------
52 
54 typedef struct iqr_McElieceParams_struct iqr_McElieceParams;
55 
57 typedef struct iqr_McEliecePublicKey_struct iqr_McEliecePublicKey;
58 
60 typedef struct iqr_McEliecePrivateKey_struct iqr_McEliecePrivateKey;
61 
62 // ---------------------------------------------------------------------------------------------------------------------------------
63 // McEliece QC-MDPC specific enum.
64 // ---------------------------------------------------------------------------------------------------------------------------------
65 
72 typedef enum {
76 
80 
82  // Maintain a count of supported public key sizes. MUST BE LAST.
83  IQR_MDPC_PUBKEY_LAST
86 
87 // ---------------------------------------------------------------------------------------------------------------------------------
88 // McEliece parameter management functions.
89 // ---------------------------------------------------------------------------------------------------------------------------------
90 
116 IQR_API
117 iqr_retval iqr_McElieceCreateParams(const iqr_Context *ctx, iqr_HashAlgorithmType hash_algo, iqr_McElieceKeySize public_key_size,
118  iqr_McElieceParams **params);
119 
130 IQR_API_UNENFORCED_RETURN
132 
133 // ---------------------------------------------------------------------------------------------------------------------------------
134 // McEliece key management functions.
135 // ---------------------------------------------------------------------------------------------------------------------------------
136 
150 IQR_API
152  iqr_McEliecePrivateKey **priv_key);
153 
162 IQR_API
164 
173 IQR_API
175 
184 IQR_API
186 
195 IQR_API
197 
214 IQR_API
215 iqr_retval iqr_McElieceImportPublicKey(const iqr_McElieceParams *params, const uint8_t *data, size_t size,
216  iqr_McEliecePublicKey **pub_key);
217 
234 IQR_API
235 iqr_retval iqr_McElieceImportPrivateKey(const iqr_McElieceParams *params, const uint8_t *data, size_t size,
236  iqr_McEliecePrivateKey **priv_key);
237 
249 IQR_API
250 iqr_retval iqr_McElieceExportPublicKey(const iqr_McEliecePublicKey *pub_key, uint8_t *buf, size_t buf_size);
251 
263 IQR_API
264 iqr_retval iqr_McElieceExportPrivateKey(const iqr_McEliecePrivateKey *priv_key, uint8_t *buf, size_t buf_size);
265 
275 IQR_API_UNENFORCED_RETURN
277 
287 IQR_API_UNENFORCED_RETURN
289 
290 // ---------------------------------------------------------------------------------------------------------------------------------
291 // McEliece encryption / decryption functionality.
292 // ---------------------------------------------------------------------------------------------------------------------------------
293 
311 IQR_API
312 iqr_retval iqr_McElieceGetCiphertextSize(const iqr_McElieceParams *params, size_t plaintext_size, size_t *ciphertext_size);
313 
339 IQR_API
340 iqr_retval iqr_McElieceGetPlaintextSize(const iqr_McElieceParams *params, size_t ciphertext_size, size_t *plaintext_size);
341 
367 IQR_API
368 iqr_retval iqr_McElieceEncrypt(const iqr_McEliecePublicKey *pub_key, const iqr_RNG *rng, const uint8_t *plaintext,
369  size_t plaintext_size, uint8_t *ciphertext, size_t ciphertext_size);
370 
403 IQR_API
404 iqr_retval iqr_McElieceDecrypt(const iqr_McEliecePrivateKey *priv_key, const uint8_t *ciphertext, size_t ciphertext_size,
405  uint8_t *plaintext, size_t *plaintext_size);
406 
407 #ifdef __cplusplus
408 }
409 #endif
410 
411 #endif /* IQR_MCELIECE_H */
IQR_API_UNENFORCED_RETURN iqr_retval iqr_McElieceDestroyPrivateKey(iqr_McEliecePrivateKey **priv_key)
IQR_API iqr_retval iqr_McElieceExportPublicKey(const iqr_McEliecePublicKey *pub_key, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_McElieceDecrypt(const iqr_McEliecePrivateKey *priv_key, const uint8_t *ciphertext, size_t ciphertext_size, uint8_t *plaintext, size_t *plaintext_size)
IQR_API iqr_retval iqr_McElieceImportPrivateKey(const iqr_McElieceParams *params, const uint8_t *data, size_t size, iqr_McEliecePrivateKey **priv_key)
iqr_McElieceKeySize
Definition: iqr_mceliece.h:72
128 bits of security.
Definition: iqr_mceliece.h:73
IQR_API iqr_retval iqr_McElieceGetPrivateKeySize(const iqr_McEliecePrivateKey *priv_key, size_t *size)
IQR_API iqr_retval iqr_McElieceCreateParams(const iqr_Context *ctx, iqr_HashAlgorithmType hash_algo, iqr_McElieceKeySize public_key_size, iqr_McElieceParams **params)
256 bits of security.
Definition: iqr_mceliece.h:77
iqr_HashAlgorithmType
Definition: iqr_hash.h:50
256 bits of security.
Definition: iqr_mceliece.h:78
IQR_API iqr_retval iqr_McElieceImportPublicKey(const iqr_McElieceParams *params, const uint8_t *data, size_t size, iqr_McEliecePublicKey **pub_key)
IQR_API iqr_retval iqr_McElieceGetPublicKeySize(const iqr_McEliecePublicKey *pub_key, size_t *size)
IQR_API iqr_retval iqr_McElieceGetPublicKeyParams(const iqr_McEliecePublicKey *pub_key, iqr_McElieceParams **params)
struct iqr_McElieceParams_struct iqr_McElieceParams
Definition: iqr_mceliece.h:54
struct iqr_McEliecePrivateKey_struct iqr_McEliecePrivateKey
Definition: iqr_mceliece.h:60
struct iqr_RNG_struct iqr_RNG
Definition: iqr_rng.h:48
256 bits of security.
Definition: iqr_mceliece.h:79
IQR_API iqr_retval iqr_McElieceGetPrivateKeyParams(const iqr_McEliecePrivateKey *priv_key, iqr_McElieceParams **params)
struct iqr_Context_struct iqr_Context
Definition: iqr_context.h:33
IQR_API iqr_retval iqr_McElieceExportPrivateKey(const iqr_McEliecePrivateKey *priv_key, uint8_t *buf, size_t buf_size)
IQR_API iqr_retval iqr_McElieceEncrypt(const iqr_McEliecePublicKey *pub_key, const iqr_RNG *rng, const uint8_t *plaintext, size_t plaintext_size, uint8_t *ciphertext, size_t ciphertext_size)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_McElieceDestroyPublicKey(iqr_McEliecePublicKey **pub_key)
IQR_API_UNENFORCED_RETURN iqr_retval iqr_McElieceDestroyParams(iqr_McElieceParams **params)
IQR_API iqr_retval iqr_McElieceCreateKeyPair(const iqr_McElieceParams *params, const iqr_RNG *rng, iqr_McEliecePublicKey **pub_key, iqr_McEliecePrivateKey **priv_key)
struct iqr_McEliecePublicKey_struct iqr_McEliecePublicKey
Definition: iqr_mceliece.h:57
IQR_API iqr_retval iqr_McElieceGetPlaintextSize(const iqr_McElieceParams *params, size_t ciphertext_size, size_t *plaintext_size)
IQR_API iqr_retval iqr_McElieceGetCiphertextSize(const iqr_McElieceParams *params, size_t plaintext_size, size_t *ciphertext_size)
iqr_retval
Definition: iqr_retval.h:26
128 bits of security.
Definition: iqr_mceliece.h:75
128 bits of security.
Definition: iqr_mceliece.h:74