mirror of
https://github.com/open-quantum-safe/liboqs.git
synced 2025-12-15 00:03:27 -05:00
* Consistent type in KEM decaps API (#1004) * uint8_t in non-PQClean KEM APIs * uint8_t in PQCleam KEM APIs * Additional uint8_t tweaks in PQClean KEM APIs Co-authored-by: Sebastian <sebastianv89@users.noreply.github.com>
92 lines
3.4 KiB
C
92 lines
3.4 KiB
C
// SPDX-License-Identifier: MIT
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <oqs/kem_kyber.h>
|
|
|
|
#if defined(OQS_ENABLE_KEM_kyber_1024)
|
|
|
|
OQS_KEM *OQS_KEM_kyber_1024_new() {
|
|
|
|
OQS_KEM *kem = malloc(sizeof(OQS_KEM));
|
|
if (kem == NULL) {
|
|
return NULL;
|
|
}
|
|
kem->method_name = OQS_KEM_alg_kyber_1024;
|
|
kem->alg_version = "https://github.com/pq-crystals/kyber/commit/28413dfbf523fdde181246451c2bd77199c0f7ff";
|
|
|
|
kem->claimed_nist_level = 5;
|
|
kem->ind_cca = true;
|
|
|
|
kem->length_public_key = OQS_KEM_kyber_1024_length_public_key;
|
|
kem->length_secret_key = OQS_KEM_kyber_1024_length_secret_key;
|
|
kem->length_ciphertext = OQS_KEM_kyber_1024_length_ciphertext;
|
|
kem->length_shared_secret = OQS_KEM_kyber_1024_length_shared_secret;
|
|
|
|
kem->keypair = OQS_KEM_kyber_1024_keypair;
|
|
kem->encaps = OQS_KEM_kyber_1024_encaps;
|
|
kem->decaps = OQS_KEM_kyber_1024_decaps;
|
|
|
|
return kem;
|
|
}
|
|
|
|
extern int pqcrystals_kyber1024_ref_keypair(uint8_t *pk, uint8_t *sk);
|
|
extern int pqcrystals_kyber1024_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
|
extern int pqcrystals_kyber1024_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
|
|
|
#if defined(OQS_ENABLE_KEM_kyber_1024_avx2)
|
|
extern int pqcrystals_kyber1024_avx2_keypair(uint8_t *pk, uint8_t *sk);
|
|
extern int pqcrystals_kyber1024_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
|
extern int pqcrystals_kyber1024_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
|
#endif
|
|
|
|
OQS_API OQS_STATUS OQS_KEM_kyber_1024_keypair(uint8_t *public_key, uint8_t *secret_key) {
|
|
#if defined(OQS_ENABLE_KEM_kyber_1024_avx2)
|
|
#if defined(OQS_DIST_BUILD)
|
|
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
|
#endif /* OQS_DIST_BUILD */
|
|
return (OQS_STATUS) pqcrystals_kyber1024_avx2_keypair(public_key, secret_key);
|
|
#if defined(OQS_DIST_BUILD)
|
|
} else {
|
|
return (OQS_STATUS) pqcrystals_kyber1024_ref_keypair(public_key, secret_key);
|
|
}
|
|
#endif /* OQS_DIST_BUILD */
|
|
#else
|
|
return (OQS_STATUS) pqcrystals_kyber1024_ref_keypair(public_key, secret_key);
|
|
#endif
|
|
}
|
|
|
|
OQS_API OQS_STATUS OQS_KEM_kyber_1024_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
|
|
#if defined(OQS_ENABLE_KEM_kyber_1024_avx2)
|
|
#if defined(OQS_DIST_BUILD)
|
|
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
|
#endif /* OQS_DIST_BUILD */
|
|
return (OQS_STATUS) pqcrystals_kyber1024_avx2_enc(ciphertext, shared_secret, public_key);
|
|
#if defined(OQS_DIST_BUILD)
|
|
} else {
|
|
return (OQS_STATUS) pqcrystals_kyber1024_ref_enc(ciphertext, shared_secret, public_key);
|
|
}
|
|
#endif /* OQS_DIST_BUILD */
|
|
#else
|
|
return (OQS_STATUS) pqcrystals_kyber1024_ref_enc(ciphertext, shared_secret, public_key);
|
|
#endif
|
|
}
|
|
|
|
OQS_API OQS_STATUS OQS_KEM_kyber_1024_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
|
|
#if defined(OQS_ENABLE_KEM_kyber_1024_avx2)
|
|
#if defined(OQS_DIST_BUILD)
|
|
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
|
#endif /* OQS_DIST_BUILD */
|
|
return (OQS_STATUS) pqcrystals_kyber1024_avx2_dec(shared_secret, ciphertext, secret_key);
|
|
#if defined(OQS_DIST_BUILD)
|
|
} else {
|
|
return (OQS_STATUS) pqcrystals_kyber1024_ref_dec(shared_secret, ciphertext, secret_key);
|
|
}
|
|
#endif /* OQS_DIST_BUILD */
|
|
#else
|
|
return (OQS_STATUS) pqcrystals_kyber1024_ref_dec(shared_secret, ciphertext, secret_key);
|
|
#endif
|
|
}
|
|
|
|
#endif
|