diff --git a/src/kem/classic_mceliece/kem_classic_mceliece.h b/src/kem/classic_mceliece/kem_classic_mceliece.h index 13613e7817..a8ee7df876 100644 --- a/src/kem/classic_mceliece/kem_classic_mceliece.h +++ b/src/kem/classic_mceliece/kem_classic_mceliece.h @@ -10,8 +10,8 @@ #define OQS_KEM_classic_mceliece_348864_length_secret_key 6492 #define OQS_KEM_classic_mceliece_348864_length_ciphertext 96 #define OQS_KEM_classic_mceliece_348864_length_shared_secret 32 -#define OQS_KEM_classic_mceliece_348864_length_keypair_seed 0 -#define OQS_KEM_classic_mceliece_348864_length_encaps_seed 0 +#define OQS_KEM_classic_mceliece_348864_length_keypair_seed 32 +#define OQS_KEM_classic_mceliece_348864_length_encaps_seed 32 OQS_KEM *OQS_KEM_classic_mceliece_348864_new(void); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_348864_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_348864_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed); @@ -25,8 +25,8 @@ OQS_API OQS_STATUS OQS_KEM_classic_mceliece_348864_decaps(uint8_t *shared_secret #define OQS_KEM_classic_mceliece_348864f_length_secret_key 6492 #define OQS_KEM_classic_mceliece_348864f_length_ciphertext 96 #define OQS_KEM_classic_mceliece_348864f_length_shared_secret 32 -#define OQS_KEM_classic_mceliece_348864f_length_keypair_seed 0 -#define OQS_KEM_classic_mceliece_348864f_length_encaps_seed 0 +#define OQS_KEM_classic_mceliece_348864f_length_keypair_seed 32 +#define OQS_KEM_classic_mceliece_348864f_length_encaps_seed 32 OQS_KEM *OQS_KEM_classic_mceliece_348864f_new(void); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_348864f_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_348864f_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed); @@ -40,8 +40,8 @@ OQS_API OQS_STATUS OQS_KEM_classic_mceliece_348864f_decaps(uint8_t *shared_secre #define OQS_KEM_classic_mceliece_460896_length_secret_key 13608 #define OQS_KEM_classic_mceliece_460896_length_ciphertext 156 #define OQS_KEM_classic_mceliece_460896_length_shared_secret 32 -#define OQS_KEM_classic_mceliece_460896_length_keypair_seed 0 -#define OQS_KEM_classic_mceliece_460896_length_encaps_seed 0 +#define OQS_KEM_classic_mceliece_460896_length_keypair_seed 32 +#define OQS_KEM_classic_mceliece_460896_length_encaps_seed 32 OQS_KEM *OQS_KEM_classic_mceliece_460896_new(void); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_460896_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_460896_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed); @@ -55,8 +55,8 @@ OQS_API OQS_STATUS OQS_KEM_classic_mceliece_460896_decaps(uint8_t *shared_secret #define OQS_KEM_classic_mceliece_460896f_length_secret_key 13608 #define OQS_KEM_classic_mceliece_460896f_length_ciphertext 156 #define OQS_KEM_classic_mceliece_460896f_length_shared_secret 32 -#define OQS_KEM_classic_mceliece_460896f_length_keypair_seed 0 -#define OQS_KEM_classic_mceliece_460896f_length_encaps_seed 0 +#define OQS_KEM_classic_mceliece_460896f_length_keypair_seed 32 +#define OQS_KEM_classic_mceliece_460896f_length_encaps_seed 32 OQS_KEM *OQS_KEM_classic_mceliece_460896f_new(void); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_460896f_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_460896f_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed); @@ -70,8 +70,8 @@ OQS_API OQS_STATUS OQS_KEM_classic_mceliece_460896f_decaps(uint8_t *shared_secre #define OQS_KEM_classic_mceliece_6688128_length_secret_key 13932 #define OQS_KEM_classic_mceliece_6688128_length_ciphertext 208 #define OQS_KEM_classic_mceliece_6688128_length_shared_secret 32 -#define OQS_KEM_classic_mceliece_6688128_length_keypair_seed 0 -#define OQS_KEM_classic_mceliece_6688128_length_encaps_seed 0 +#define OQS_KEM_classic_mceliece_6688128_length_keypair_seed 32 +#define OQS_KEM_classic_mceliece_6688128_length_encaps_seed 32 OQS_KEM *OQS_KEM_classic_mceliece_6688128_new(void); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6688128_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6688128_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed); @@ -85,8 +85,8 @@ OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6688128_decaps(uint8_t *shared_secre #define OQS_KEM_classic_mceliece_6688128f_length_secret_key 13932 #define OQS_KEM_classic_mceliece_6688128f_length_ciphertext 208 #define OQS_KEM_classic_mceliece_6688128f_length_shared_secret 32 -#define OQS_KEM_classic_mceliece_6688128f_length_keypair_seed 0 -#define OQS_KEM_classic_mceliece_6688128f_length_encaps_seed 0 +#define OQS_KEM_classic_mceliece_6688128f_length_keypair_seed 32 +#define OQS_KEM_classic_mceliece_6688128f_length_encaps_seed 32 OQS_KEM *OQS_KEM_classic_mceliece_6688128f_new(void); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6688128f_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6688128f_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed); @@ -100,8 +100,8 @@ OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6688128f_decaps(uint8_t *shared_secr #define OQS_KEM_classic_mceliece_6960119_length_secret_key 13948 #define OQS_KEM_classic_mceliece_6960119_length_ciphertext 194 #define OQS_KEM_classic_mceliece_6960119_length_shared_secret 32 -#define OQS_KEM_classic_mceliece_6960119_length_keypair_seed 0 -#define OQS_KEM_classic_mceliece_6960119_length_encaps_seed 0 +#define OQS_KEM_classic_mceliece_6960119_length_keypair_seed 32 +#define OQS_KEM_classic_mceliece_6960119_length_encaps_seed 32 OQS_KEM *OQS_KEM_classic_mceliece_6960119_new(void); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed); @@ -115,8 +115,8 @@ OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119_decaps(uint8_t *shared_secre #define OQS_KEM_classic_mceliece_6960119f_length_secret_key 13948 #define OQS_KEM_classic_mceliece_6960119f_length_ciphertext 194 #define OQS_KEM_classic_mceliece_6960119f_length_shared_secret 32 -#define OQS_KEM_classic_mceliece_6960119f_length_keypair_seed 0 -#define OQS_KEM_classic_mceliece_6960119f_length_encaps_seed 0 +#define OQS_KEM_classic_mceliece_6960119f_length_keypair_seed 32 +#define OQS_KEM_classic_mceliece_6960119f_length_encaps_seed 32 OQS_KEM *OQS_KEM_classic_mceliece_6960119f_new(void); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119f_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119f_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed); @@ -130,8 +130,8 @@ OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119f_decaps(uint8_t *shared_secr #define OQS_KEM_classic_mceliece_8192128_length_secret_key 14120 #define OQS_KEM_classic_mceliece_8192128_length_ciphertext 208 #define OQS_KEM_classic_mceliece_8192128_length_shared_secret 32 -#define OQS_KEM_classic_mceliece_8192128_length_keypair_seed 0 -#define OQS_KEM_classic_mceliece_8192128_length_encaps_seed 0 +#define OQS_KEM_classic_mceliece_8192128_length_keypair_seed 32 +#define OQS_KEM_classic_mceliece_8192128_length_encaps_seed 32 OQS_KEM *OQS_KEM_classic_mceliece_8192128_new(void); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_8192128_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_8192128_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed); @@ -145,8 +145,8 @@ OQS_API OQS_STATUS OQS_KEM_classic_mceliece_8192128_decaps(uint8_t *shared_secre #define OQS_KEM_classic_mceliece_8192128f_length_secret_key 14120 #define OQS_KEM_classic_mceliece_8192128f_length_ciphertext 208 #define OQS_KEM_classic_mceliece_8192128f_length_shared_secret 32 -#define OQS_KEM_classic_mceliece_8192128f_length_keypair_seed 0 -#define OQS_KEM_classic_mceliece_8192128f_length_encaps_seed 0 +#define OQS_KEM_classic_mceliece_8192128f_length_keypair_seed 32 +#define OQS_KEM_classic_mceliece_8192128f_length_encaps_seed 32 OQS_KEM *OQS_KEM_classic_mceliece_8192128f_new(void); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_8192128f_keypair(uint8_t *public_key, uint8_t *secret_key); OQS_API OQS_STATUS OQS_KEM_classic_mceliece_8192128f_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed); diff --git a/src/kem/classic_mceliece/kem_classic_mceliece_348864.c b/src/kem/classic_mceliece/kem_classic_mceliece_348864.c index 75206097a7..85706fce2f 100644 --- a/src/kem/classic_mceliece/kem_classic_mceliece_348864.c +++ b/src/kem/classic_mceliece/kem_classic_mceliece_348864.c @@ -35,20 +35,31 @@ OQS_KEM *OQS_KEM_classic_mceliece_348864_new(void) { } extern int PQCLEAN_MCELIECE348864_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE348864_CLEAN_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE348864_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE348864_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #if defined(OQS_ENABLE_KEM_classic_mceliece_348864_avx2) extern int PQCLEAN_MCELIECE348864_AVX2_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE348864_AVX2_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE348864_AVX2_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE348864_AVX2_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #endif OQS_API OQS_STATUS OQS_KEM_classic_mceliece_348864_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed) { - (void)public_key; - (void)secret_key; - (void)seed; - return OQS_ERROR; +#if defined(OQS_ENABLE_KEM_classic_mceliece_348864_avx2) +#if defined(OQS_DIST_BUILD) + if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) { +#endif /* OQS_DIST_BUILD */ + return (OQS_STATUS) PQCLEAN_MCELIECE348864_AVX2_crypto_kem_keypair_derand(public_key, secret_key, seed); +#if defined(OQS_DIST_BUILD) + } else { + return (OQS_STATUS) PQCLEAN_MCELIECE348864_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); + } +#endif /* OQS_DIST_BUILD */ +#else + return (OQS_STATUS) PQCLEAN_MCELIECE348864_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); +#endif } OQS_API OQS_STATUS OQS_KEM_classic_mceliece_348864_keypair(uint8_t *public_key, uint8_t *secret_key) { diff --git a/src/kem/classic_mceliece/kem_classic_mceliece_348864f.c b/src/kem/classic_mceliece/kem_classic_mceliece_348864f.c index 139510b659..8df61dc9b0 100644 --- a/src/kem/classic_mceliece/kem_classic_mceliece_348864f.c +++ b/src/kem/classic_mceliece/kem_classic_mceliece_348864f.c @@ -35,20 +35,31 @@ OQS_KEM *OQS_KEM_classic_mceliece_348864f_new(void) { } extern int PQCLEAN_MCELIECE348864F_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE348864F_CLEAN_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE348864F_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE348864F_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #if defined(OQS_ENABLE_KEM_classic_mceliece_348864f_avx2) extern int PQCLEAN_MCELIECE348864F_AVX2_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE348864F_AVX2_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE348864F_AVX2_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE348864F_AVX2_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #endif OQS_API OQS_STATUS OQS_KEM_classic_mceliece_348864f_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed) { - (void)public_key; - (void)secret_key; - (void)seed; - return OQS_ERROR; +#if defined(OQS_ENABLE_KEM_classic_mceliece_348864f_avx2) +#if defined(OQS_DIST_BUILD) + if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI1)) { +#endif /* OQS_DIST_BUILD */ + return (OQS_STATUS) PQCLEAN_MCELIECE348864F_AVX2_crypto_kem_keypair_derand(public_key, secret_key, seed); +#if defined(OQS_DIST_BUILD) + } else { + return (OQS_STATUS) PQCLEAN_MCELIECE348864F_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); + } +#endif /* OQS_DIST_BUILD */ +#else + return (OQS_STATUS) PQCLEAN_MCELIECE348864F_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); +#endif } OQS_API OQS_STATUS OQS_KEM_classic_mceliece_348864f_keypair(uint8_t *public_key, uint8_t *secret_key) { diff --git a/src/kem/classic_mceliece/kem_classic_mceliece_460896.c b/src/kem/classic_mceliece/kem_classic_mceliece_460896.c index 76a6a5ad5c..dc25ab44e5 100644 --- a/src/kem/classic_mceliece/kem_classic_mceliece_460896.c +++ b/src/kem/classic_mceliece/kem_classic_mceliece_460896.c @@ -35,20 +35,31 @@ OQS_KEM *OQS_KEM_classic_mceliece_460896_new(void) { } extern int PQCLEAN_MCELIECE460896_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE460896_CLEAN_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE460896_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE460896_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #if defined(OQS_ENABLE_KEM_classic_mceliece_460896_avx2) extern int PQCLEAN_MCELIECE460896_AVX2_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE460896_AVX2_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE460896_AVX2_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE460896_AVX2_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #endif OQS_API OQS_STATUS OQS_KEM_classic_mceliece_460896_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed) { - (void)public_key; - (void)secret_key; - (void)seed; - return OQS_ERROR; +#if defined(OQS_ENABLE_KEM_classic_mceliece_460896_avx2) +#if defined(OQS_DIST_BUILD) + if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) { +#endif /* OQS_DIST_BUILD */ + return (OQS_STATUS) PQCLEAN_MCELIECE460896_AVX2_crypto_kem_keypair_derand(public_key, secret_key, seed); +#if defined(OQS_DIST_BUILD) + } else { + return (OQS_STATUS) PQCLEAN_MCELIECE460896_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); + } +#endif /* OQS_DIST_BUILD */ +#else + return (OQS_STATUS) PQCLEAN_MCELIECE460896_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); +#endif } OQS_API OQS_STATUS OQS_KEM_classic_mceliece_460896_keypair(uint8_t *public_key, uint8_t *secret_key) { diff --git a/src/kem/classic_mceliece/kem_classic_mceliece_460896f.c b/src/kem/classic_mceliece/kem_classic_mceliece_460896f.c index ac67c54b0b..dac5d9280c 100644 --- a/src/kem/classic_mceliece/kem_classic_mceliece_460896f.c +++ b/src/kem/classic_mceliece/kem_classic_mceliece_460896f.c @@ -35,20 +35,31 @@ OQS_KEM *OQS_KEM_classic_mceliece_460896f_new(void) { } extern int PQCLEAN_MCELIECE460896F_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE460896F_CLEAN_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE460896F_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE460896F_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #if defined(OQS_ENABLE_KEM_classic_mceliece_460896f_avx2) extern int PQCLEAN_MCELIECE460896F_AVX2_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE460896F_AVX2_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE460896F_AVX2_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE460896F_AVX2_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #endif OQS_API OQS_STATUS OQS_KEM_classic_mceliece_460896f_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed) { - (void)public_key; - (void)secret_key; - (void)seed; - return OQS_ERROR; +#if defined(OQS_ENABLE_KEM_classic_mceliece_460896f_avx2) +#if defined(OQS_DIST_BUILD) + if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI1)) { +#endif /* OQS_DIST_BUILD */ + return (OQS_STATUS) PQCLEAN_MCELIECE460896F_AVX2_crypto_kem_keypair_derand(public_key, secret_key, seed); +#if defined(OQS_DIST_BUILD) + } else { + return (OQS_STATUS) PQCLEAN_MCELIECE460896F_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); + } +#endif /* OQS_DIST_BUILD */ +#else + return (OQS_STATUS) PQCLEAN_MCELIECE460896F_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); +#endif } OQS_API OQS_STATUS OQS_KEM_classic_mceliece_460896f_keypair(uint8_t *public_key, uint8_t *secret_key) { diff --git a/src/kem/classic_mceliece/kem_classic_mceliece_6688128.c b/src/kem/classic_mceliece/kem_classic_mceliece_6688128.c index 77345fa0b0..b46201e544 100644 --- a/src/kem/classic_mceliece/kem_classic_mceliece_6688128.c +++ b/src/kem/classic_mceliece/kem_classic_mceliece_6688128.c @@ -35,20 +35,31 @@ OQS_KEM *OQS_KEM_classic_mceliece_6688128_new(void) { } extern int PQCLEAN_MCELIECE6688128_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE6688128_CLEAN_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE6688128_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE6688128_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #if defined(OQS_ENABLE_KEM_classic_mceliece_6688128_avx2) extern int PQCLEAN_MCELIECE6688128_AVX2_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE6688128_AVX2_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE6688128_AVX2_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE6688128_AVX2_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #endif OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6688128_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed) { - (void)public_key; - (void)secret_key; - (void)seed; - return OQS_ERROR; +#if defined(OQS_ENABLE_KEM_classic_mceliece_6688128_avx2) +#if defined(OQS_DIST_BUILD) + if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) { +#endif /* OQS_DIST_BUILD */ + return (OQS_STATUS) PQCLEAN_MCELIECE6688128_AVX2_crypto_kem_keypair_derand(public_key, secret_key, seed); +#if defined(OQS_DIST_BUILD) + } else { + return (OQS_STATUS) PQCLEAN_MCELIECE6688128_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); + } +#endif /* OQS_DIST_BUILD */ +#else + return (OQS_STATUS) PQCLEAN_MCELIECE6688128_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); +#endif } OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6688128_keypair(uint8_t *public_key, uint8_t *secret_key) { diff --git a/src/kem/classic_mceliece/kem_classic_mceliece_6688128f.c b/src/kem/classic_mceliece/kem_classic_mceliece_6688128f.c index f7730bee55..f40cfdd556 100644 --- a/src/kem/classic_mceliece/kem_classic_mceliece_6688128f.c +++ b/src/kem/classic_mceliece/kem_classic_mceliece_6688128f.c @@ -35,20 +35,31 @@ OQS_KEM *OQS_KEM_classic_mceliece_6688128f_new(void) { } extern int PQCLEAN_MCELIECE6688128F_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE6688128F_CLEAN_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE6688128F_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE6688128F_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #if defined(OQS_ENABLE_KEM_classic_mceliece_6688128f_avx2) extern int PQCLEAN_MCELIECE6688128F_AVX2_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE6688128F_AVX2_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE6688128F_AVX2_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE6688128F_AVX2_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #endif OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6688128f_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed) { - (void)public_key; - (void)secret_key; - (void)seed; - return OQS_ERROR; +#if defined(OQS_ENABLE_KEM_classic_mceliece_6688128f_avx2) +#if defined(OQS_DIST_BUILD) + if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI1)) { +#endif /* OQS_DIST_BUILD */ + return (OQS_STATUS) PQCLEAN_MCELIECE6688128F_AVX2_crypto_kem_keypair_derand(public_key, secret_key, seed); +#if defined(OQS_DIST_BUILD) + } else { + return (OQS_STATUS) PQCLEAN_MCELIECE6688128F_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); + } +#endif /* OQS_DIST_BUILD */ +#else + return (OQS_STATUS) PQCLEAN_MCELIECE6688128F_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); +#endif } OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6688128f_keypair(uint8_t *public_key, uint8_t *secret_key) { diff --git a/src/kem/classic_mceliece/kem_classic_mceliece_6960119.c b/src/kem/classic_mceliece/kem_classic_mceliece_6960119.c index a815e39050..a6b6a7ec30 100644 --- a/src/kem/classic_mceliece/kem_classic_mceliece_6960119.c +++ b/src/kem/classic_mceliece/kem_classic_mceliece_6960119.c @@ -35,20 +35,31 @@ OQS_KEM *OQS_KEM_classic_mceliece_6960119_new(void) { } extern int PQCLEAN_MCELIECE6960119_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE6960119_CLEAN_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE6960119_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE6960119_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #if defined(OQS_ENABLE_KEM_classic_mceliece_6960119_avx2) extern int PQCLEAN_MCELIECE6960119_AVX2_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE6960119_AVX2_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE6960119_AVX2_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE6960119_AVX2_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #endif OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed) { - (void)public_key; - (void)secret_key; - (void)seed; - return OQS_ERROR; +#if defined(OQS_ENABLE_KEM_classic_mceliece_6960119_avx2) +#if defined(OQS_DIST_BUILD) + if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) { +#endif /* OQS_DIST_BUILD */ + return (OQS_STATUS) PQCLEAN_MCELIECE6960119_AVX2_crypto_kem_keypair_derand(public_key, secret_key, seed); +#if defined(OQS_DIST_BUILD) + } else { + return (OQS_STATUS) PQCLEAN_MCELIECE6960119_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); + } +#endif /* OQS_DIST_BUILD */ +#else + return (OQS_STATUS) PQCLEAN_MCELIECE6960119_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); +#endif } OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119_keypair(uint8_t *public_key, uint8_t *secret_key) { diff --git a/src/kem/classic_mceliece/kem_classic_mceliece_6960119f.c b/src/kem/classic_mceliece/kem_classic_mceliece_6960119f.c index 779592b490..eaf0416fe4 100644 --- a/src/kem/classic_mceliece/kem_classic_mceliece_6960119f.c +++ b/src/kem/classic_mceliece/kem_classic_mceliece_6960119f.c @@ -35,20 +35,31 @@ OQS_KEM *OQS_KEM_classic_mceliece_6960119f_new(void) { } extern int PQCLEAN_MCELIECE6960119F_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE6960119F_CLEAN_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE6960119F_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE6960119F_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #if defined(OQS_ENABLE_KEM_classic_mceliece_6960119f_avx2) extern int PQCLEAN_MCELIECE6960119F_AVX2_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE6960119F_AVX2_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE6960119F_AVX2_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE6960119F_AVX2_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #endif OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119f_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed) { - (void)public_key; - (void)secret_key; - (void)seed; - return OQS_ERROR; +#if defined(OQS_ENABLE_KEM_classic_mceliece_6960119f_avx2) +#if defined(OQS_DIST_BUILD) + if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI1)) { +#endif /* OQS_DIST_BUILD */ + return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_AVX2_crypto_kem_keypair_derand(public_key, secret_key, seed); +#if defined(OQS_DIST_BUILD) + } else { + return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); + } +#endif /* OQS_DIST_BUILD */ +#else + return (OQS_STATUS) PQCLEAN_MCELIECE6960119F_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); +#endif } OQS_API OQS_STATUS OQS_KEM_classic_mceliece_6960119f_keypair(uint8_t *public_key, uint8_t *secret_key) { diff --git a/src/kem/classic_mceliece/kem_classic_mceliece_8192128.c b/src/kem/classic_mceliece/kem_classic_mceliece_8192128.c index 35ce70d700..ff3580d1ea 100644 --- a/src/kem/classic_mceliece/kem_classic_mceliece_8192128.c +++ b/src/kem/classic_mceliece/kem_classic_mceliece_8192128.c @@ -35,20 +35,31 @@ OQS_KEM *OQS_KEM_classic_mceliece_8192128_new(void) { } extern int PQCLEAN_MCELIECE8192128_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE8192128_CLEAN_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE8192128_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE8192128_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #if defined(OQS_ENABLE_KEM_classic_mceliece_8192128_avx2) extern int PQCLEAN_MCELIECE8192128_AVX2_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE8192128_AVX2_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE8192128_AVX2_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE8192128_AVX2_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #endif OQS_API OQS_STATUS OQS_KEM_classic_mceliece_8192128_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed) { - (void)public_key; - (void)secret_key; - (void)seed; - return OQS_ERROR; +#if defined(OQS_ENABLE_KEM_classic_mceliece_8192128_avx2) +#if defined(OQS_DIST_BUILD) + if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) { +#endif /* OQS_DIST_BUILD */ + return (OQS_STATUS) PQCLEAN_MCELIECE8192128_AVX2_crypto_kem_keypair_derand(public_key, secret_key, seed); +#if defined(OQS_DIST_BUILD) + } else { + return (OQS_STATUS) PQCLEAN_MCELIECE8192128_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); + } +#endif /* OQS_DIST_BUILD */ +#else + return (OQS_STATUS) PQCLEAN_MCELIECE8192128_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); +#endif } OQS_API OQS_STATUS OQS_KEM_classic_mceliece_8192128_keypair(uint8_t *public_key, uint8_t *secret_key) { diff --git a/src/kem/classic_mceliece/kem_classic_mceliece_8192128f.c b/src/kem/classic_mceliece/kem_classic_mceliece_8192128f.c index 3166a9c457..a1c2e27feb 100644 --- a/src/kem/classic_mceliece/kem_classic_mceliece_8192128f.c +++ b/src/kem/classic_mceliece/kem_classic_mceliece_8192128f.c @@ -35,20 +35,31 @@ OQS_KEM *OQS_KEM_classic_mceliece_8192128f_new(void) { } extern int PQCLEAN_MCELIECE8192128F_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE8192128F_CLEAN_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE8192128F_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE8192128F_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #if defined(OQS_ENABLE_KEM_classic_mceliece_8192128f_avx2) extern int PQCLEAN_MCELIECE8192128F_AVX2_crypto_kem_keypair(uint8_t *pk, uint8_t *sk); +extern int PQCLEAN_MCELIECE8192128F_AVX2_crypto_kem_keypair_derand(uint8_t *pk, uint8_t *sk, const uint8_t seed[32]); extern int PQCLEAN_MCELIECE8192128F_AVX2_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk); extern int PQCLEAN_MCELIECE8192128F_AVX2_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); #endif OQS_API OQS_STATUS OQS_KEM_classic_mceliece_8192128f_keypair_derand(uint8_t *public_key, uint8_t *secret_key, const uint8_t *seed) { - (void)public_key; - (void)secret_key; - (void)seed; - return OQS_ERROR; +#if defined(OQS_ENABLE_KEM_classic_mceliece_8192128f_avx2) +#if defined(OQS_DIST_BUILD) + if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI1)) { +#endif /* OQS_DIST_BUILD */ + return (OQS_STATUS) PQCLEAN_MCELIECE8192128F_AVX2_crypto_kem_keypair_derand(public_key, secret_key, seed); +#if defined(OQS_DIST_BUILD) + } else { + return (OQS_STATUS) PQCLEAN_MCELIECE8192128F_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); + } +#endif /* OQS_DIST_BUILD */ +#else + return (OQS_STATUS) PQCLEAN_MCELIECE8192128F_CLEAN_crypto_kem_keypair_derand(public_key, secret_key, seed); +#endif } OQS_API OQS_STATUS OQS_KEM_classic_mceliece_8192128f_keypair(uint8_t *public_key, uint8_t *secret_key) { diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/crypto_kem.h index 65a467af2a..d8a7e2c5df 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE348864_AVX2_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/operations.c b/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/operations.c index 23479c8de8..14e6e826fe 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -88,7 +100,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/operations.h b/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece348864_avx2/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864_clean/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece348864_clean/crypto_kem.h index 5035f48418..b8a34be50d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864_clean/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece348864_clean/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE348864_CLEAN_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864_clean/operations.c b/src/kem/classic_mceliece/pqclean_mceliece348864_clean/operations.c index 23479c8de8..14e6e826fe 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864_clean/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece348864_clean/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -88,7 +100,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864_clean/operations.h b/src/kem/classic_mceliece/pqclean_mceliece348864_clean/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864_clean/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece348864_clean/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/crypto_kem.h index 2e19227c8a..8550ac14b5 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE348864F_AVX2_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/operations.c b/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/operations.c index 90e8082d9b..8553693e49 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -89,7 +101,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/operations.h b/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece348864f_avx2/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/crypto_kem.h index eea78ae12b..7a68782ee1 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE348864F_CLEAN_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/operations.c b/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/operations.c index 90e8082d9b..8553693e49 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -89,7 +101,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/operations.h b/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece348864f_clean/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/crypto_kem.h index c9157864e8..99c832a43c 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE460896_AVX2_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/operations.c b/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/operations.c index 23479c8de8..14e6e826fe 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -88,7 +100,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/operations.h b/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece460896_avx2/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896_clean/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece460896_clean/crypto_kem.h index cac52c93f0..68436c4f98 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896_clean/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece460896_clean/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE460896_CLEAN_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896_clean/operations.c b/src/kem/classic_mceliece/pqclean_mceliece460896_clean/operations.c index 23479c8de8..14e6e826fe 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896_clean/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece460896_clean/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -88,7 +100,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896_clean/operations.h b/src/kem/classic_mceliece/pqclean_mceliece460896_clean/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896_clean/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece460896_clean/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/crypto_kem.h index 38c49f5d28..8982baebae 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE460896F_AVX2_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/operations.c b/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/operations.c index 90e8082d9b..8553693e49 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -89,7 +101,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/operations.h b/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece460896f_avx2/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/crypto_kem.h index 58c52149f9..bcb74e51af 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE460896F_CLEAN_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/operations.c b/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/operations.c index 90e8082d9b..8553693e49 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -89,7 +101,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/operations.h b/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece460896f_clean/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/crypto_kem.h index 2d863af3dc..da22cbbd46 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE6688128_AVX2_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/operations.c b/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/operations.c index 23479c8de8..14e6e826fe 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -88,7 +100,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/operations.h b/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128_avx2/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/crypto_kem.h index 91a1738006..bad4a4f338 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE6688128_CLEAN_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/operations.c b/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/operations.c index 23479c8de8..14e6e826fe 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -88,7 +100,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/operations.h b/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128_clean/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/crypto_kem.h index 814ac4f6f4..208f1428d2 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE6688128F_AVX2_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/operations.c b/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/operations.c index 90e8082d9b..8553693e49 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -89,7 +101,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/operations.h b/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128f_avx2/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/crypto_kem.h index e6e5caca82..1314236eb2 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE6688128F_CLEAN_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/operations.c b/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/operations.c index 90e8082d9b..8553693e49 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -89,7 +101,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/operations.h b/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6688128f_clean/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/crypto_kem.h index c19b2784e1..5248dc3cd9 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE6960119_AVX2_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/operations.c b/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/operations.c index 3aa78030d0..b92ab95f6a 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/operations.c @@ -136,6 +136,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -147,7 +159,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/operations.h b/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119_avx2/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/crypto_kem.h index d5ee59b2ce..34eb14dcc4 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE6960119_CLEAN_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/operations.c b/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/operations.c index 3aa78030d0..b92ab95f6a 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/operations.c @@ -136,6 +136,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -147,7 +159,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/operations.h b/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119_clean/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/crypto_kem.h index 4dc7f2a87b..647ccdea76 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE6960119F_AVX2_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/operations.c b/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/operations.c index 881a1cad75..57fc1de6dd 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/operations.c @@ -136,6 +136,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -148,7 +160,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/operations.h b/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119f_avx2/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/crypto_kem.h index 160d9171d4..c117d6a731 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE6960119F_CLEAN_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/operations.c b/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/operations.c index 881a1cad75..57fc1de6dd 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/operations.c @@ -136,6 +136,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -148,7 +160,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/operations.h b/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece6960119f_clean/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/crypto_kem.h index 1d46061378..91b683999f 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE8192128_AVX2_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/operations.c b/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/operations.c index 23479c8de8..14e6e826fe 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -88,7 +100,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/operations.h b/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128_avx2/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/crypto_kem.h index e9846d17cf..303cc12241 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE8192128_CLEAN_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/operations.c b/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/operations.c index 23479c8de8..14e6e826fe 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -88,7 +100,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/operations.h b/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128_clean/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/crypto_kem.h index 7551476b37..ca7dbc073f 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE8192128F_AVX2_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/operations.c b/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/operations.c index 90e8082d9b..8553693e49 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -89,7 +101,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/operations.h b/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128f_avx2/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/crypto_kem.h b/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/crypto_kem.h index 565f759740..e61d80d88b 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/crypto_kem.h +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/crypto_kem.h @@ -2,6 +2,7 @@ #define PQCLEAN_MCELIECE8192128F_CLEAN_CRYPTO_KEM_H #define crypto_kem_keypair CRYPTO_NAMESPACE(crypto_kem_keypair) +#define crypto_kem_keypair_derand CRYPTO_NAMESPACE(crypto_kem_keypair_derand) #define crypto_kem_enc CRYPTO_NAMESPACE(crypto_kem_enc) #define crypto_kem_dec CRYPTO_NAMESPACE(crypto_kem_dec) diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/operations.c b/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/operations.c index 90e8082d9b..8553693e49 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/operations.c +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/operations.c @@ -77,6 +77,18 @@ int crypto_kem_keypair ( unsigned char *pk, unsigned char *sk +) +{ + unsigned char seed[32] = {}; + randombytes(seed, 32); + return crypto_kem_keypair_derand(pk, sk, seed); +} + +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char input_seed[32] ) { int i; unsigned char seed[ 33 ] = {64}; @@ -89,7 +101,7 @@ int crypto_kem_keypair uint32_t perm[ 1 << GFBITS ]; // random permutation as 32-bit integers int16_t pi[ 1 << GFBITS ]; // random permutation - randombytes(seed + 1, 32); + memcpy(&seed[1], input_seed, 32); while (1) { rp = &r[ sizeof(r) - 32 ]; diff --git a/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/operations.h b/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/operations.h index fa34d033a4..b1a3891a2d 100644 --- a/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/operations.h +++ b/src/kem/classic_mceliece/pqclean_mceliece8192128f_clean/operations.h @@ -23,4 +23,11 @@ int crypto_kem_keypair unsigned char *sk ); +int crypto_kem_keypair_derand +( + unsigned char *pk, + unsigned char *sk, + const unsigned char seed[32] +); + #endif