1 // SPDX-License-Identifier: MIT
2
3 #include <stdlib.h>
4
5 #include <oqs/kem_classic_mceliece.h>
6
7 #if defined(OQS_ENABLE_KEM_classic_mceliece_6960119f)
8
9 OQS_KEM *OQS_KEM_classic_mceliece_6960119f_new() {
10
11 OQS_KEM *kem = malloc(sizeof(OQS_KEM));
12 if (kem == NULL) {
13 return NULL;
14 }
15 kem->method_name = OQS_KEM_alg_classic_mceliece_6960119f;
16 kem->alg_version = "SUPERCOP-20191221";
17
18 kem->claimed_nist_level = 5;
19 kem->ind_cca = true;
20
21 kem->length_public_key = OQS_KEM_classic_mceliece_6960119f_length_public_key;
22 kem->length_secret_key = OQS_KEM_classic_mceliece_6960119f_length_secret_key;
23 kem->length_ciphertext = OQS_KEM_classic_mceliece_6960119f_length_ciphertext;
24 kem->length_shared_secret = OQS_KEM_classic_mceliece_6960119f_length_shared_secret;
25
26 kem->keypair = OQS_KEM_classic_mceliece_6960119f_keypair;
27 kem->encaps = OQS_KEM_classic_mceliece_6960119f_encaps;
28 kem->decaps = OQS_KEM_classic_mceliece_6960119f_decaps;
29
30 return kem;
31 }
32
33 extern int PQCLEAN_MCELIECE6960119F_VEC_crypto_kem_keypair(uint8_t *pk, uint8_t *sk);
34 extern int PQCLEAN_MCELIECE6960119F_VEC_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
tag()35 extern int PQCLEAN_MCELIECE6960119F_VEC_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
36
37 #if defined(OQS_ENABLE_KEM_classic_mceliece_6960119f_avx)
38 extern int PQCLEAN_MCELIECE6960119F_AVX_crypto_kem_keypair(uint8_t *pk, uint8_t *sk);
39 extern int PQCLEAN_MCELIECE6960119F_AVX_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
40 extern int PQCLEAN_MCELIECE6960119F_AVX_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
41 #endif
42
43 OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119f_keypair(uint8_t *public_key, uint8_t *secret_key) {
44 #if defined(OQS_ENABLE_KEM_classic_mceliece_6960119f_avx)
45 #if defined(OQS_DIST_BUILD)
46 if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI1) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
47 #endif /* OQS_DIST_BUILD */
48 return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_AVX_crypto_kem_keypair(public_key, secret_key);
49 #if defined(OQS_DIST_BUILD)
50 } else {
51 return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_VEC_crypto_kem_keypair(public_key, secret_key);
52 }
53 #endif /* OQS_DIST_BUILD */
54 #else
55 return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_VEC_crypto_kem_keypair(public_key, secret_key);
56 #endif
57 }
58
59 OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119f_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
60 #if defined(OQS_ENABLE_KEM_classic_mceliece_6960119f_avx)
61 #if defined(OQS_DIST_BUILD)
62 if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI1) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
63 #endif /* OQS_DIST_BUILD */
64 return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_AVX_crypto_kem_enc(ciphertext, shared_secret, public_key);
65 #if defined(OQS_DIST_BUILD)
66 } else {
67 return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_VEC_crypto_kem_enc(ciphertext, shared_secret, public_key);
68 }
69 #endif /* OQS_DIST_BUILD */
70 #else
71 return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_VEC_crypto_kem_enc(ciphertext, shared_secret, public_key);
72 #endif
73 }
74
75 OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119f_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
76 #if defined(OQS_ENABLE_KEM_classic_mceliece_6960119f_avx)
77 #if defined(OQS_DIST_BUILD)
78 if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI1) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
79 #endif /* OQS_DIST_BUILD */
80 return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_AVX_crypto_kem_dec(shared_secret, ciphertext, secret_key);
81 #if defined(OQS_DIST_BUILD)
82 } else {
83 return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_VEC_crypto_kem_dec(shared_secret, ciphertext, secret_key);
84 }
85 #endif /* OQS_DIST_BUILD */
86 #else
87 return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_VEC_crypto_kem_dec(shared_secret, ciphertext, secret_key);
88 #endif
89 }
90
91 #endif
92