Coverage Report

Created: 2026-04-12 06:48

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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