/src/liboqs/src/kem/ntru/kem_ntru_hps2048509.c
Line | Count | Source |
1 | | // SPDX-License-Identifier: MIT |
2 | | |
3 | | #include <stdlib.h> |
4 | | |
5 | | #include <oqs/kem_ntru.h> |
6 | | |
7 | | #if defined(OQS_ENABLE_KEM_ntru_hps2048509) |
8 | | |
9 | 178 | OQS_KEM *OQS_KEM_ntru_hps2048509_new(void) { |
10 | | |
11 | 178 | OQS_KEM *kem = OQS_MEM_malloc(sizeof(OQS_KEM)); |
12 | 178 | if (kem == NULL) { |
13 | 0 | return NULL; |
14 | 0 | } |
15 | 178 | kem->method_name = OQS_KEM_alg_ntru_hps2048509; |
16 | 178 | kem->alg_version = "https://github.com/jschanck/ntru/tree/6d96ed37 reference implementation"; |
17 | | |
18 | 178 | kem->claimed_nist_level = 1; |
19 | 178 | kem->ind_cca = true; |
20 | | |
21 | 178 | kem->length_public_key = OQS_KEM_ntru_hps2048509_length_public_key; |
22 | 178 | kem->length_secret_key = OQS_KEM_ntru_hps2048509_length_secret_key; |
23 | 178 | kem->length_ciphertext = OQS_KEM_ntru_hps2048509_length_ciphertext; |
24 | 178 | kem->length_shared_secret = OQS_KEM_ntru_hps2048509_length_shared_secret; |
25 | 178 | kem->length_keypair_seed = OQS_KEM_ntru_hps2048509_length_keypair_seed; |
26 | 178 | kem->length_encaps_seed = OQS_KEM_ntru_hps2048509_length_encaps_seed; |
27 | | |
28 | 178 | kem->keypair = OQS_KEM_ntru_hps2048509_keypair; |
29 | 178 | kem->keypair_derand = OQS_KEM_ntru_hps2048509_keypair_derand; |
30 | 178 | kem->encaps = OQS_KEM_ntru_hps2048509_encaps; |
31 | 178 | kem->decaps = OQS_KEM_ntru_hps2048509_decaps; |
32 | | |
33 | 178 | return kem; |
34 | 178 | } |
35 | | |
36 | | extern int PQCLEAN_NTRUHPS2048509_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); |
37 | | extern int PQCLEAN_NTRUHPS2048509_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); |
38 | | extern int PQCLEAN_NTRUHPS2048509_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); |
39 | | |
40 | | #if defined(OQS_ENABLE_KEM_ntru_hps2048509_avx2) |
41 | | extern int PQCLEAN_NTRUHPS2048509_AVX2_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); |
42 | | extern int PQCLEAN_NTRUHPS2048509_AVX2_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); |
43 | | extern int PQCLEAN_NTRUHPS2048509_AVX2_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); |
44 | | #endif |
45 | | |
46 | 178 | OQS_API OQS_STATUS OQS_KEM_ntru_hps2048509_keypair(uint8_t *public_key, uint8_t *secret_key) { |
47 | 178 | #if defined(OQS_ENABLE_KEM_ntru_hps2048509_avx2) |
48 | 178 | #if defined(OQS_DIST_BUILD) |
49 | 178 | if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2)) { |
50 | 178 | #endif /* OQS_DIST_BUILD */ |
51 | 178 | return (OQS_STATUS) PQCLEAN_NTRUHPS2048509_AVX2_crypto_kem_keypair(public_key, secret_key); |
52 | 178 | #if defined(OQS_DIST_BUILD) |
53 | 178 | } else { |
54 | 0 | return (OQS_STATUS) PQCLEAN_NTRUHPS2048509_CLEAN_crypto_kem_keypair(public_key, secret_key); |
55 | 0 | } |
56 | 178 | #endif /* OQS_DIST_BUILD */ |
57 | | #else |
58 | | return (OQS_STATUS) PQCLEAN_NTRUHPS2048509_CLEAN_crypto_kem_keypair(public_key, secret_key); |
59 | | #endif |
60 | 178 | } |
61 | | |
62 | 0 | OQS_API OQS_STATUS OQS_KEM_ntru_hps2048509_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed) { |
63 | 0 | (void)public_key; |
64 | 0 | (void)secret_key; |
65 | 0 | (void)seed; |
66 | 0 | return OQS_ERROR; |
67 | 0 | } |
68 | | |
69 | 178 | OQS_API OQS_STATUS OQS_KEM_ntru_hps2048509_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) { |
70 | 178 | #if defined(OQS_ENABLE_KEM_ntru_hps2048509_avx2) |
71 | 178 | #if defined(OQS_DIST_BUILD) |
72 | 178 | if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2)) { |
73 | 178 | #endif /* OQS_DIST_BUILD */ |
74 | 178 | return (OQS_STATUS) PQCLEAN_NTRUHPS2048509_AVX2_crypto_kem_enc(ciphertext, shared_secret, public_key); |
75 | 178 | #if defined(OQS_DIST_BUILD) |
76 | 178 | } else { |
77 | 0 | return (OQS_STATUS) PQCLEAN_NTRUHPS2048509_CLEAN_crypto_kem_enc(ciphertext, shared_secret, public_key); |
78 | 0 | } |
79 | 178 | #endif /* OQS_DIST_BUILD */ |
80 | | #else |
81 | | return (OQS_STATUS) PQCLEAN_NTRUHPS2048509_CLEAN_crypto_kem_enc(ciphertext, shared_secret, public_key); |
82 | | #endif |
83 | 178 | } |
84 | | |
85 | 178 | OQS_API OQS_STATUS OQS_KEM_ntru_hps2048509_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) { |
86 | 178 | #if defined(OQS_ENABLE_KEM_ntru_hps2048509_avx2) |
87 | 178 | #if defined(OQS_DIST_BUILD) |
88 | 178 | if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2)) { |
89 | 178 | #endif /* OQS_DIST_BUILD */ |
90 | 178 | return (OQS_STATUS) PQCLEAN_NTRUHPS2048509_AVX2_crypto_kem_dec(shared_secret, ciphertext, secret_key); |
91 | 178 | #if defined(OQS_DIST_BUILD) |
92 | 178 | } else { |
93 | 0 | return (OQS_STATUS) PQCLEAN_NTRUHPS2048509_CLEAN_crypto_kem_dec(shared_secret, ciphertext, secret_key); |
94 | 0 | } |
95 | 178 | #endif /* OQS_DIST_BUILD */ |
96 | | #else |
97 | | return (OQS_STATUS) PQCLEAN_NTRUHPS2048509_CLEAN_crypto_kem_dec(shared_secret, ciphertext, secret_key); |
98 | | #endif |
99 | 178 | } |
100 | | |
101 | | #endif |