From cbb4f97b3d0df637690e88cebf6346b891d1539b Mon Sep 17 00:00:00 2001 From: Spencer Wilson Date: Tue, 10 Dec 2024 09:54:07 -0500 Subject: [PATCH] Run copy_from_upstream Signed-off-by: Spencer Wilson --- docs/algorithms/kem/classic_mceliece.md | 2 +- docs/algorithms/kem/classic_mceliece.yml | 2 +- docs/algorithms/kem/hqc.md | 2 +- docs/algorithms/kem/hqc.yml | 3 +-- docs/algorithms/sig/falcon.md | 4 ++-- docs/algorithms/sig/falcon.yml | 2 +- docs/algorithms/sig/sphincs.md | 2 +- docs/algorithms/sig/sphincs.yml | 2 +- src/kem/hqc/kem_hqc_128.c | 2 +- src/kem/hqc/kem_hqc_192.c | 2 +- src/kem/hqc/kem_hqc_256.c | 2 +- src/kem/hqc/pqclean_hqc-128_clean/api.h | 1 + src/kem/hqc/pqclean_hqc-128_clean/code.c | 5 +++++ src/kem/hqc/pqclean_hqc-128_clean/code.h | 2 ++ src/kem/hqc/pqclean_hqc-128_clean/domains.h | 2 ++ src/kem/hqc/pqclean_hqc-128_clean/fft.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-128_clean/fft.h | 2 ++ src/kem/hqc/pqclean_hqc-128_clean/gf.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-128_clean/gf.h | 7 +++++++ src/kem/hqc/pqclean_hqc-128_clean/gf2x.c | 1 + src/kem/hqc/pqclean_hqc-128_clean/gf2x.h | 1 + src/kem/hqc/pqclean_hqc-128_clean/hqc.c | 7 +++++++ src/kem/hqc/pqclean_hqc-128_clean/hqc.h | 2 ++ src/kem/hqc/pqclean_hqc-128_clean/kem.c | 8 ++++++++ src/kem/hqc/pqclean_hqc-128_clean/parameters.h | 2 ++ src/kem/hqc/pqclean_hqc-128_clean/parsing.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-128_clean/parsing.h | 5 +++++ src/kem/hqc/pqclean_hqc-128_clean/reed_muller.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-128_clean/reed_muller.h | 2 ++ src/kem/hqc/pqclean_hqc-128_clean/reed_solomon.c | 15 +++++++++++++++ src/kem/hqc/pqclean_hqc-128_clean/reed_solomon.h | 2 ++ src/kem/hqc/pqclean_hqc-128_clean/shake_ds.c | 3 +++ src/kem/hqc/pqclean_hqc-128_clean/shake_ds.h | 2 ++ src/kem/hqc/pqclean_hqc-128_clean/shake_prng.c | 3 +++ src/kem/hqc/pqclean_hqc-128_clean/shake_prng.h | 2 ++ src/kem/hqc/pqclean_hqc-128_clean/vector.c | 9 +++++++++ src/kem/hqc/pqclean_hqc-128_clean/vector.h | 3 +++ src/kem/hqc/pqclean_hqc-192_clean/api.h | 1 + src/kem/hqc/pqclean_hqc-192_clean/code.c | 5 +++++ src/kem/hqc/pqclean_hqc-192_clean/code.h | 2 ++ src/kem/hqc/pqclean_hqc-192_clean/domains.h | 2 ++ src/kem/hqc/pqclean_hqc-192_clean/fft.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-192_clean/fft.h | 2 ++ src/kem/hqc/pqclean_hqc-192_clean/gf.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-192_clean/gf.h | 7 +++++++ src/kem/hqc/pqclean_hqc-192_clean/gf2x.c | 1 + src/kem/hqc/pqclean_hqc-192_clean/gf2x.h | 1 + src/kem/hqc/pqclean_hqc-192_clean/hqc.c | 7 +++++++ src/kem/hqc/pqclean_hqc-192_clean/hqc.h | 2 ++ src/kem/hqc/pqclean_hqc-192_clean/kem.c | 8 ++++++++ src/kem/hqc/pqclean_hqc-192_clean/parameters.h | 2 ++ src/kem/hqc/pqclean_hqc-192_clean/parsing.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-192_clean/parsing.h | 5 +++++ src/kem/hqc/pqclean_hqc-192_clean/reed_muller.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-192_clean/reed_muller.h | 2 ++ src/kem/hqc/pqclean_hqc-192_clean/reed_solomon.c | 15 +++++++++++++++ src/kem/hqc/pqclean_hqc-192_clean/reed_solomon.h | 2 ++ src/kem/hqc/pqclean_hqc-192_clean/shake_ds.c | 3 +++ src/kem/hqc/pqclean_hqc-192_clean/shake_ds.h | 2 ++ src/kem/hqc/pqclean_hqc-192_clean/shake_prng.c | 3 +++ src/kem/hqc/pqclean_hqc-192_clean/shake_prng.h | 2 ++ src/kem/hqc/pqclean_hqc-192_clean/vector.c | 9 +++++++++ src/kem/hqc/pqclean_hqc-192_clean/vector.h | 3 +++ src/kem/hqc/pqclean_hqc-256_clean/api.h | 1 + src/kem/hqc/pqclean_hqc-256_clean/code.c | 5 +++++ src/kem/hqc/pqclean_hqc-256_clean/code.h | 2 ++ src/kem/hqc/pqclean_hqc-256_clean/domains.h | 2 ++ src/kem/hqc/pqclean_hqc-256_clean/fft.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-256_clean/fft.h | 2 ++ src/kem/hqc/pqclean_hqc-256_clean/gf.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-256_clean/gf.h | 7 +++++++ src/kem/hqc/pqclean_hqc-256_clean/gf2x.c | 1 + src/kem/hqc/pqclean_hqc-256_clean/gf2x.h | 1 + src/kem/hqc/pqclean_hqc-256_clean/hqc.c | 7 +++++++ src/kem/hqc/pqclean_hqc-256_clean/hqc.h | 2 ++ src/kem/hqc/pqclean_hqc-256_clean/kem.c | 8 ++++++++ src/kem/hqc/pqclean_hqc-256_clean/parameters.h | 2 ++ src/kem/hqc/pqclean_hqc-256_clean/parsing.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-256_clean/parsing.h | 5 +++++ src/kem/hqc/pqclean_hqc-256_clean/reed_muller.c | 11 +++++++++++ src/kem/hqc/pqclean_hqc-256_clean/reed_muller.h | 2 ++ src/kem/hqc/pqclean_hqc-256_clean/reed_solomon.c | 15 +++++++++++++++ src/kem/hqc/pqclean_hqc-256_clean/reed_solomon.h | 2 ++ src/kem/hqc/pqclean_hqc-256_clean/shake_ds.c | 3 +++ src/kem/hqc/pqclean_hqc-256_clean/shake_ds.h | 2 ++ src/kem/hqc/pqclean_hqc-256_clean/shake_prng.c | 3 +++ src/kem/hqc/pqclean_hqc-256_clean/shake_prng.h | 2 ++ src/kem/hqc/pqclean_hqc-256_clean/vector.c | 9 +++++++++ src/kem/hqc/pqclean_hqc-256_clean/vector.h | 3 +++ 89 files changed, 402 insertions(+), 13 deletions(-) diff --git a/docs/algorithms/kem/classic_mceliece.md b/docs/algorithms/kem/classic_mceliece.md index 2c6a267e49..bcbee3dc1d 100644 --- a/docs/algorithms/kem/classic_mceliece.md +++ b/docs/algorithms/kem/classic_mceliece.md @@ -6,7 +6,7 @@ - **Authors' website**: https://classic.mceliece.org - **Specification version**: SUPERCOP-20221025. - **Primary Source**: - - **Source**: https://github.com/PQClean/PQClean/commit/8e221ae797b229858a0b0d784577a8cb149d5789 + - **Source**: https://github.com/PQClean/PQClean/commit/99630892b15a1d7af18e057a933b31a8d0ece242 - **Implementation license (SPDX-Identifier)**: Public domain - **Ancestors of primary source**: - SUPERCOP-20221025 "clean" and "avx2" implementations diff --git a/docs/algorithms/kem/classic_mceliece.yml b/docs/algorithms/kem/classic_mceliece.yml index 99a828bc61..3b9d16ba80 100644 --- a/docs/algorithms/kem/classic_mceliece.yml +++ b/docs/algorithms/kem/classic_mceliece.yml @@ -378,4 +378,4 @@ parameter-sets: auxiliary-submitters: [] primary-upstream: spdx-license-identifier: Public domain - source: https://github.com/PQClean/PQClean/commit/8e221ae797b229858a0b0d784577a8cb149d5789 + source: https://github.com/PQClean/PQClean/commit/99630892b15a1d7af18e057a933b31a8d0ece242 diff --git a/docs/algorithms/kem/hqc.md b/docs/algorithms/kem/hqc.md index df32ecdb2c..498e17e0fd 100644 --- a/docs/algorithms/kem/hqc.md +++ b/docs/algorithms/kem/hqc.md @@ -6,7 +6,7 @@ - **Authors' website**: https://pqc-hqc.org/ - **Specification version**: 2023-04-30. - **Primary Source**: - - **Source**: https://github.com/PQClean/PQClean/commit/8e221ae797b229858a0b0d784577a8cb149d5789 with copy_from_upstream patches + - **Source**: https://github.com/PQClean/PQClean/commit/99630892b15a1d7af18e057a933b31a8d0ece242 - **Implementation license (SPDX-Identifier)**: Public domain - **Ancestors of primary source**: - https://github.com/SWilson4/package-pqclean/tree/8db1b24b/hqc, which takes it from: diff --git a/docs/algorithms/kem/hqc.yml b/docs/algorithms/kem/hqc.yml index a9d0bb260f..fced482176 100644 --- a/docs/algorithms/kem/hqc.yml +++ b/docs/algorithms/kem/hqc.yml @@ -76,5 +76,4 @@ parameter-sets: upstream: primary-upstream primary-upstream: spdx-license-identifier: Public domain - source: https://github.com/PQClean/PQClean/commit/8e221ae797b229858a0b0d784577a8cb149d5789 - with copy_from_upstream patches + source: https://github.com/PQClean/PQClean/commit/99630892b15a1d7af18e057a933b31a8d0ece242 diff --git a/docs/algorithms/sig/falcon.md b/docs/algorithms/sig/falcon.md index 3dd6dddc90..054c301467 100644 --- a/docs/algorithms/sig/falcon.md +++ b/docs/algorithms/sig/falcon.md @@ -7,9 +7,9 @@ - **Authors' website**: https://falcon-sign.info - **Specification version**: 20211101. - **Primary Source**: - - **Source**: https://github.com/PQClean/PQClean/commit/8e221ae797b229858a0b0d784577a8cb149d5789 + - **Source**: https://github.com/PQClean/PQClean/commit/99630892b15a1d7af18e057a933b31a8d0ece242 - **Implementation license (SPDX-Identifier)**: MIT -- **Optimized Implementation sources**: https://github.com/PQClean/PQClean/commit/8e221ae797b229858a0b0d784577a8cb149d5789 +- **Optimized Implementation sources**: https://github.com/PQClean/PQClean/commit/99630892b15a1d7af18e057a933b31a8d0ece242 - **pqclean-aarch64**: - **Source**: https://github.com/PQClean/PQClean/commit/7707d1bcc8ae7f9ffd296dd13b1d76d2767d14f8 - **Implementation license (SPDX-Identifier)**: Apache-2.0 diff --git a/docs/algorithms/sig/falcon.yml b/docs/algorithms/sig/falcon.yml index 781e188e0b..9db3f3f3de 100644 --- a/docs/algorithms/sig/falcon.yml +++ b/docs/algorithms/sig/falcon.yml @@ -18,7 +18,7 @@ website: https://falcon-sign.info nist-round: 3 spec-version: 20211101 primary-upstream: - source: https://github.com/PQClean/PQClean/commit/8e221ae797b229858a0b0d784577a8cb149d5789 + source: https://github.com/PQClean/PQClean/commit/99630892b15a1d7af18e057a933b31a8d0ece242 spdx-license-identifier: MIT upstream-ancestors: - https://www.falcon-sign.info diff --git a/docs/algorithms/sig/sphincs.md b/docs/algorithms/sig/sphincs.md index 096a87b291..1015ddea3b 100644 --- a/docs/algorithms/sig/sphincs.md +++ b/docs/algorithms/sig/sphincs.md @@ -7,7 +7,7 @@ - **Authors' website**: https://sphincs.org/ - **Specification version**: NIST Round 3 submission, v3.1 (June 10, 2022). - **Primary Source**: - - **Source**: https://github.com/PQClean/PQClean/commit/8e221ae797b229858a0b0d784577a8cb149d5789 with copy_from_upstream patches + - **Source**: https://github.com/PQClean/PQClean/commit/99630892b15a1d7af18e057a933b31a8d0ece242 with copy_from_upstream patches - **Implementation license (SPDX-Identifier)**: CC0-1.0 diff --git a/docs/algorithms/sig/sphincs.yml b/docs/algorithms/sig/sphincs.yml index d3e6816c9e..2362d811c2 100644 --- a/docs/algorithms/sig/sphincs.yml +++ b/docs/algorithms/sig/sphincs.yml @@ -26,7 +26,7 @@ nist-round: 3 spec-version: NIST Round 3 submission, v3.1 (June 10, 2022) spdx-license-identifier: CC0-1.0 primary-upstream: - source: https://github.com/PQClean/PQClean/commit/8e221ae797b229858a0b0d784577a8cb149d5789 + source: https://github.com/PQClean/PQClean/commit/99630892b15a1d7af18e057a933b31a8d0ece242 with copy_from_upstream patches spdx-license-identifier: CC0-1.0 upstream-ancestors: diff --git a/src/kem/hqc/kem_hqc_128.c b/src/kem/hqc/kem_hqc_128.c index 300ff93e02..0b26784b9d 100644 --- a/src/kem/hqc/kem_hqc_128.c +++ b/src/kem/hqc/kem_hqc_128.c @@ -13,7 +13,7 @@ OQS_KEM *OQS_KEM_hqc_128_new(void) { return NULL; } kem->method_name = OQS_KEM_alg_hqc_128; - kem->alg_version = "hqc-submission_2023-04-30 via https://github.com/SWilson4/package-pqclean/tree/8db1b24b/hqc"; + kem->alg_version = "hqc-submission_2023-04-30 via https://github.com/SWilson4/package-pqclean/tree/9b509aa7/hqc"; kem->claimed_nist_level = 1; kem->ind_cca = true; diff --git a/src/kem/hqc/kem_hqc_192.c b/src/kem/hqc/kem_hqc_192.c index e0e6d676aa..10f9ba7e5c 100644 --- a/src/kem/hqc/kem_hqc_192.c +++ b/src/kem/hqc/kem_hqc_192.c @@ -13,7 +13,7 @@ OQS_KEM *OQS_KEM_hqc_192_new(void) { return NULL; } kem->method_name = OQS_KEM_alg_hqc_192; - kem->alg_version = "hqc-submission_2023-04-30 via https://github.com/SWilson4/package-pqclean/tree/8db1b24b/hqc"; + kem->alg_version = "hqc-submission_2023-04-30 via https://github.com/SWilson4/package-pqclean/tree/9b509aa7/hqc"; kem->claimed_nist_level = 3; kem->ind_cca = true; diff --git a/src/kem/hqc/kem_hqc_256.c b/src/kem/hqc/kem_hqc_256.c index 6cd66b634b..aaf60fd968 100644 --- a/src/kem/hqc/kem_hqc_256.c +++ b/src/kem/hqc/kem_hqc_256.c @@ -13,7 +13,7 @@ OQS_KEM *OQS_KEM_hqc_256_new(void) { return NULL; } kem->method_name = OQS_KEM_alg_hqc_256; - kem->alg_version = "hqc-submission_2023-04-30 via https://github.com/SWilson4/package-pqclean/tree/8db1b24b/hqc"; + kem->alg_version = "hqc-submission_2023-04-30 via https://github.com/SWilson4/package-pqclean/tree/9b509aa7/hqc"; kem->claimed_nist_level = 5; kem->ind_cca = true; diff --git a/src/kem/hqc/pqclean_hqc-128_clean/api.h b/src/kem/hqc/pqclean_hqc-128_clean/api.h index 2a6ccfc56a..a361da11ce 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/api.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/api.h @@ -23,4 +23,5 @@ int PQCLEAN_HQC128_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t int PQCLEAN_HQC128_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); + #endif diff --git a/src/kem/hqc/pqclean_hqc-128_clean/code.c b/src/kem/hqc/pqclean_hqc-128_clean/code.c index acb7910cbc..4499c01600 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/code.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/code.c @@ -8,6 +8,8 @@ * @brief Implementation of concatenated code */ + + /** * * @brief Encoding the message m to a code word em using the concatenated code @@ -26,6 +28,8 @@ void PQCLEAN_HQC128_CLEAN_code_encode(uint64_t *em, const uint8_t *m) { } + + /** * @brief Decoding the code word em to a message m using the concatenated code * @@ -38,4 +42,5 @@ void PQCLEAN_HQC128_CLEAN_code_decode(uint8_t *m, const uint64_t *em) { PQCLEAN_HQC128_CLEAN_reed_muller_decode(tmp, em); PQCLEAN_HQC128_CLEAN_reed_solomon_decode(m, tmp); + } diff --git a/src/kem/hqc/pqclean_hqc-128_clean/code.h b/src/kem/hqc/pqclean_hqc-128_clean/code.h index 32a69396e3..e6fd629e9f 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/code.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/code.h @@ -1,6 +1,7 @@ #ifndef CODE_H #define CODE_H + /** * @file code.h * @brief Header file of code.c @@ -12,4 +13,5 @@ void PQCLEAN_HQC128_CLEAN_code_encode(uint64_t *em, const uint8_t *message); void PQCLEAN_HQC128_CLEAN_code_decode(uint8_t *m, const uint64_t *em); + #endif diff --git a/src/kem/hqc/pqclean_hqc-128_clean/domains.h b/src/kem/hqc/pqclean_hqc-128_clean/domains.h index 86d0ef8498..20c782ccae 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/domains.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/domains.h @@ -1,11 +1,13 @@ #ifndef DOMAINS_H #define DOMAINS_H + /** * @file domains.h * @brief SHAKE-256 domains separation header grouping all domains to avoid collisions */ + #define PRNG_DOMAIN 1 #define SEEDEXPANDER_DOMAIN 2 #define G_FCT_DOMAIN 3 diff --git a/src/kem/hqc/pqclean_hqc-128_clean/fft.c b/src/kem/hqc/pqclean_hqc-128_clean/fft.c index 54e202b92a..386e0af435 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/fft.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/fft.c @@ -14,6 +14,7 @@ * https://binary.cr.yp.to/mcbits-20130616.pdf */ + static void radix_big(uint16_t *f0, uint16_t *f1, const uint16_t *f, uint32_t m_f); /** @@ -28,6 +29,8 @@ static void compute_fft_betas(uint16_t *betas) { } } + + /** * @brief Computes the subset sums of the given set * @@ -49,6 +52,8 @@ static void compute_subset_sums(uint16_t *subset_sums, const uint16_t *set, uint } } + + /** * @brief Computes the radix conversion of a polynomial f in GF(2^m)[x] * @@ -143,6 +148,8 @@ static void radix_big(uint16_t *f0, uint16_t *f1, const uint16_t *f, uint32_t m_ memcpy(f1 + n, Q1, 2 * n); } + + /** * @brief Evaluates f at all subset sums of a given set * @@ -236,6 +243,8 @@ static void fft_rec(uint16_t *w, uint16_t *f, size_t f_coeffs, uint8_t m, uint32 } } + + /** * @brief Evaluates f on all fields elements using an additive FFT algorithm * @@ -305,6 +314,8 @@ void PQCLEAN_HQC128_CLEAN_fft(uint16_t *w, const uint16_t *f, size_t f_coeffs) { } } + + /** * @brief Retrieves the error polynomial error from the evaluations w of the ELP (Error Locator Polynomial) on all field elements. * diff --git a/src/kem/hqc/pqclean_hqc-128_clean/fft.h b/src/kem/hqc/pqclean_hqc-128_clean/fft.h index f571437c51..7d9f2367e5 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/fft.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/fft.h @@ -1,6 +1,7 @@ #ifndef FFT_H #define FFT_H + /** * @file fft.h * @brief Header file of fft.c @@ -13,4 +14,5 @@ void PQCLEAN_HQC128_CLEAN_fft(uint16_t *w, const uint16_t *f, size_t f_coeffs); void PQCLEAN_HQC128_CLEAN_fft_retrieve_error_poly(uint8_t *error, const uint16_t *w); + #endif diff --git a/src/kem/hqc/pqclean_hqc-128_clean/gf.c b/src/kem/hqc/pqclean_hqc-128_clean/gf.c index 504f32a677..0d7387e687 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/gf.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/gf.c @@ -7,6 +7,7 @@ * @brief Galois field implementation */ + /** * @brief Computes the number of trailing zero bits. * @@ -23,6 +24,8 @@ static uint16_t trailing_zero_bits_count(uint16_t a) { return tmp; } + + /** * Reduces polynomial x modulo primitive polynomial GF_POLY. * @returns x mod GF_POLY @@ -57,6 +60,8 @@ static uint16_t gf_reduce(uint64_t x, size_t deg_x) { return (uint16_t)x; } + + /** * Carryless multiplication of two polynomials a and b. * @@ -105,6 +110,8 @@ static void gf_carryless_mul(uint8_t c[2], uint8_t a, uint8_t b) { c[1] = (uint8_t)h; } + + /** * Multiplies two elements of GF(2^GF_M). * @returns the product a*b @@ -118,6 +125,8 @@ uint16_t PQCLEAN_HQC128_CLEAN_gf_mul(uint16_t a, uint16_t b) { return gf_reduce(tmp, 2 * (PARAM_M - 1)); } + + /** * @brief Squares an element of GF(2^PARAM_M). * @returns a^2 @@ -134,6 +143,8 @@ uint16_t PQCLEAN_HQC128_CLEAN_gf_square(uint16_t a) { return gf_reduce(s, 2 * (PARAM_M - 1)); } + + /** * @brief Computes the inverse of an element of GF(2^PARAM_M), * using the addition chain 1 2 3 4 7 11 15 30 60 120 127 254 diff --git a/src/kem/hqc/pqclean_hqc-128_clean/gf.h b/src/kem/hqc/pqclean_hqc-128_clean/gf.h index 1de7351681..61a3034240 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/gf.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/gf.h @@ -1,6 +1,7 @@ #ifndef GF_H #define GF_H + /** * @file gf.h * @brief Header file of gf.c @@ -8,6 +9,7 @@ #include + /** * Powers of the root alpha of 1 + x^2 + x^3 + x^4 + x^8. * The last two elements are needed by the PQCLEAN_HQC128_CLEAN_gf_mul function @@ -15,16 +17,21 @@ */ static const uint16_t gf_exp [258] = { 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38, 76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192, 157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35, 70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222, 161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60, 120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223, 163, 91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26, 52, 104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147, 59, 118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218, 169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85, 170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198, 145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171, 75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25, 50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81, 162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9, 18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11, 22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71, 142, 1, 2, 4 }; + + /** * Logarithm of elements of GF(2^8) to the base alpha (root of 1 + x^2 + x^3 + x^4 + x^8). * The logarithm of 0 is set to 0 by convention. */ static const uint16_t gf_log [256] = { 0, 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75, 4, 100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113, 5, 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69, 29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114, 166, 6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145, 34, 136, 54, 208, 148, 206, 143, 150, 219, 189, 241, 210, 19, 92, 131, 56, 70, 64, 30, 66, 182, 163, 195, 72, 126, 110, 107, 58, 40, 84, 250, 133, 186, 61, 202, 94, 155, 159, 10, 21, 121, 43, 78, 212, 229, 172, 115, 243, 167, 87, 7, 112, 192, 247, 140, 128, 99, 13, 103, 74, 222, 237, 49, 197, 254, 24, 227, 165, 153, 119, 38, 184, 180, 124, 17, 68, 146, 217, 35, 32, 137, 46, 55, 63, 209, 91, 149, 188, 207, 205, 144, 135, 151, 178, 220, 252, 190, 97, 242, 86, 211, 171, 20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162, 31, 45, 67, 216, 183, 123, 164, 118, 196, 23, 73, 236, 127, 12, 111, 246, 108, 161, 59, 82, 41, 157, 85, 170, 251, 96, 134, 177, 187, 204, 62, 90, 203, 89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215, 79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80, 88, 175 }; + + uint16_t PQCLEAN_HQC128_CLEAN_gf_mul(uint16_t a, uint16_t b); uint16_t PQCLEAN_HQC128_CLEAN_gf_square(uint16_t a); uint16_t PQCLEAN_HQC128_CLEAN_gf_inverse(uint16_t a); + #endif diff --git a/src/kem/hqc/pqclean_hqc-128_clean/gf2x.c b/src/kem/hqc/pqclean_hqc-128_clean/gf2x.c index cd5a610484..c66d9f230f 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/gf2x.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/gf2x.c @@ -7,6 +7,7 @@ * @brief Implementation of multiplication of two polynomials */ + /** * @brief Caryless multiplication of two words of 64 bits * diff --git a/src/kem/hqc/pqclean_hqc-128_clean/gf2x.h b/src/kem/hqc/pqclean_hqc-128_clean/gf2x.h index d76999b06c..8325bfca8f 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/gf2x.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/gf2x.h @@ -9,4 +9,5 @@ void PQCLEAN_HQC128_CLEAN_vect_mul(uint64_t *o, const uint64_t *v1, const uint64_t *v2); + #endif diff --git a/src/kem/hqc/pqclean_hqc-128_clean/hqc.c b/src/kem/hqc/pqclean_hqc-128_clean/hqc.c index ab2641261e..eae0ff825b 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/hqc.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/hqc.c @@ -12,6 +12,8 @@ * @brief Implementation of hqc.h */ + + /** * @brief Keygen of the HQC_PKE IND_CPA scheme * @@ -59,6 +61,8 @@ void PQCLEAN_HQC128_CLEAN_hqc_pke_keygen(uint8_t *pk, uint8_t *sk) { PQCLEAN_HQC128_CLEAN_seedexpander_release(&sk_seedexpander); } + + /** * @brief Encryption of the HQC_PKE IND_CPA scheme * @@ -108,6 +112,8 @@ void PQCLEAN_HQC128_CLEAN_hqc_pke_encrypt(uint64_t *u, uint64_t *v, uint8_t *m, PQCLEAN_HQC128_CLEAN_seedexpander_release(&vec_seedexpander); } + + /** * @brief Decryption of the HQC_PKE IND_CPA scheme * @@ -132,6 +138,7 @@ uint8_t PQCLEAN_HQC128_CLEAN_hqc_pke_decrypt(uint8_t *m, uint8_t *sigma, const u PQCLEAN_HQC128_CLEAN_vect_mul(tmp2, y, u); PQCLEAN_HQC128_CLEAN_vect_add(tmp2, tmp1, tmp2, VEC_N_SIZE_64); + // Compute m by decoding v - u.y PQCLEAN_HQC128_CLEAN_code_decode(m, tmp2); diff --git a/src/kem/hqc/pqclean_hqc-128_clean/hqc.h b/src/kem/hqc/pqclean_hqc-128_clean/hqc.h index dc563fe5d9..7e96ee8f92 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/hqc.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/hqc.h @@ -1,6 +1,7 @@ #ifndef HQC_H #define HQC_H + /** * @file hqc.h * @brief Functions of the HQC_PKE IND_CPA scheme @@ -14,4 +15,5 @@ void PQCLEAN_HQC128_CLEAN_hqc_pke_encrypt(uint64_t *u, uint64_t *v, uint8_t *m, uint8_t PQCLEAN_HQC128_CLEAN_hqc_pke_decrypt(uint8_t *m, uint8_t *sigma, const uint64_t *u, const uint64_t *v, const unsigned char *sk); + #endif diff --git a/src/kem/hqc/pqclean_hqc-128_clean/kem.c b/src/kem/hqc/pqclean_hqc-128_clean/kem.c index c722a7578c..e0a4681fd9 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/kem.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/kem.c @@ -14,6 +14,8 @@ * @brief Implementation of api.h */ + + /** * @brief Keygen of the HQC_KEM IND_CAA2 scheme * @@ -32,6 +34,8 @@ int PQCLEAN_HQC128_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk) { return 0; } + + /** * @brief Encapsulation of the HQC_KEM IND_CAA2 scheme * @@ -71,9 +75,12 @@ int PQCLEAN_HQC128_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t // Computing ciphertext PQCLEAN_HQC128_CLEAN_hqc_ciphertext_to_string(ct, u, v, salt); + return 0; } + + /** * @brief Decapsulation of the HQC_KEM IND_CAA2 scheme * @@ -126,5 +133,6 @@ int PQCLEAN_HQC128_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const ui PQCLEAN_HQC128_CLEAN_store8_arr(mc + VEC_K_SIZE_BYTES + VEC_N_SIZE_BYTES, VEC_N1N2_SIZE_BYTES, v, VEC_N1N2_SIZE_64); PQCLEAN_HQC128_CLEAN_shake256_512_ds(&shake256state, ss, mc, VEC_K_SIZE_BYTES + VEC_N_SIZE_BYTES + VEC_N1N2_SIZE_BYTES, K_FCT_DOMAIN); + return (result & 1) - 1; } diff --git a/src/kem/hqc/pqclean_hqc-128_clean/parameters.h b/src/kem/hqc/pqclean_hqc-128_clean/parameters.h index ffda5bd029..f4ec3e806c 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/parameters.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/parameters.h @@ -1,12 +1,14 @@ #ifndef HQC_PARAMETERS_H #define HQC_PARAMETERS_H + /** * @file parameters.h * @brief Parameters of the HQC_KEM IND-CCA2 scheme */ #include "api.h" + #define CEIL_DIVIDE(a, b) (((a)+(b)-1)/(b)) /*!< Divide a by b and ceil the result*/ /* diff --git a/src/kem/hqc/pqclean_hqc-128_clean/parsing.c b/src/kem/hqc/pqclean_hqc-128_clean/parsing.c index c4f736db00..20dce664bb 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/parsing.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/parsing.c @@ -8,6 +8,7 @@ * @brief Functions to parse secret key, public key and ciphertext of the HQC scheme */ + static uint64_t load8(const uint8_t *in) { uint64_t ret = in[7]; @@ -71,6 +72,8 @@ void PQCLEAN_HQC128_CLEAN_hqc_secret_key_to_string(uint8_t *sk, const uint8_t *s memcpy(sk + SEED_BYTES + VEC_K_SIZE_BYTES, pk, PUBLIC_KEY_BYTES); } + + /** * @brief Parse a secret key from a string * @@ -95,6 +98,8 @@ void PQCLEAN_HQC128_CLEAN_hqc_secret_key_from_string(uint64_t *x, uint64_t *y, u PQCLEAN_HQC128_CLEAN_seedexpander_release(&sk_seedexpander); } + + /** * @brief Parse a public key into a string * @@ -109,6 +114,8 @@ void PQCLEAN_HQC128_CLEAN_hqc_public_key_to_string(uint8_t *pk, const uint8_t *p PQCLEAN_HQC128_CLEAN_store8_arr(pk + SEED_BYTES, VEC_N_SIZE_BYTES, s, VEC_N_SIZE_64); } + + /** * @brief Parse a public key from a string * @@ -129,6 +136,8 @@ void PQCLEAN_HQC128_CLEAN_hqc_public_key_from_string(uint64_t *h, uint64_t *s, c PQCLEAN_HQC128_CLEAN_seedexpander_release(&pk_seedexpander); } + + /** * @brief Parse a ciphertext into a string * @@ -145,6 +154,8 @@ void PQCLEAN_HQC128_CLEAN_hqc_ciphertext_to_string(uint8_t *ct, const uint64_t * memcpy(ct + VEC_N_SIZE_BYTES + VEC_N1N2_SIZE_BYTES, salt, SALT_SIZE_BYTES); } + + /** * @brief Parse a ciphertext from a string * diff --git a/src/kem/hqc/pqclean_hqc-128_clean/parsing.h b/src/kem/hqc/pqclean_hqc-128_clean/parsing.h index b83789b99e..f0a0f1667e 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/parsing.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/parsing.h @@ -1,6 +1,7 @@ #ifndef PARSING_H #define PARSING_H + /** * @file parsing.h * @brief Header file for parsing.c @@ -13,16 +14,20 @@ void PQCLEAN_HQC128_CLEAN_load8_arr(uint64_t *out64, size_t outlen, const uint8_ void PQCLEAN_HQC128_CLEAN_store8_arr(uint8_t *out8, size_t outlen, const uint64_t *in64, size_t inlen); + void PQCLEAN_HQC128_CLEAN_hqc_secret_key_to_string(uint8_t *sk, const uint8_t *sk_seed, const uint8_t *sigma, const uint8_t *pk); void PQCLEAN_HQC128_CLEAN_hqc_secret_key_from_string(uint64_t *x, uint64_t *y, uint8_t *sigma, uint8_t *pk, const uint8_t *sk); + void PQCLEAN_HQC128_CLEAN_hqc_public_key_to_string(uint8_t *pk, const uint8_t *pk_seed, const uint64_t *s); void PQCLEAN_HQC128_CLEAN_hqc_public_key_from_string(uint64_t *h, uint64_t *s, const uint8_t *pk); + void PQCLEAN_HQC128_CLEAN_hqc_ciphertext_to_string(uint8_t *ct, const uint64_t *u, const uint64_t *v, const uint8_t *salt); void PQCLEAN_HQC128_CLEAN_hqc_ciphertext_from_string(uint64_t *u, uint64_t *v, uint8_t *salt, const uint8_t *ct); + #endif diff --git a/src/kem/hqc/pqclean_hqc-128_clean/reed_muller.c b/src/kem/hqc/pqclean_hqc-128_clean/reed_muller.c index ede96cbfd9..695fc6b297 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/reed_muller.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/reed_muller.c @@ -7,6 +7,7 @@ * @brief Constant time implementation of Reed-Muller code RM(1,7) */ + // number of repeated code words #define MULTIPLICITY CEIL_DIVIDE(PARAM_N2, 128) @@ -52,6 +53,8 @@ static void encode(uint64_t *cword, uint8_t message) { cword[1] |= first_word; } + + /** * @brief Hadamard transform * @@ -80,6 +83,8 @@ static void hadamard(uint16_t src[128], uint16_t dst[128]) { } } + + /** * @brief Add multiple codewords into expanded codeword * @@ -110,6 +115,8 @@ static void expand_and_sum(uint16_t dest[128], const uint64_t src[2 * MULTIPLICI } } + + /** * @brief Finding the location of the highest value * @@ -137,6 +144,8 @@ static uint8_t find_peaks(const uint16_t transform[128]) { return (uint8_t) pos; } + + /** * @brief Encodes the received word * @@ -157,6 +166,8 @@ void PQCLEAN_HQC128_CLEAN_reed_muller_encode(uint64_t *cdw, const uint8_t *msg) } } + + /** * @brief Decodes the received word * diff --git a/src/kem/hqc/pqclean_hqc-128_clean/reed_muller.h b/src/kem/hqc/pqclean_hqc-128_clean/reed_muller.h index fe9e6872f5..fb93fc7a04 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/reed_muller.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/reed_muller.h @@ -1,6 +1,7 @@ #ifndef REED_MULLER_H #define REED_MULLER_H + /** * @file reed_muller.h * @brief Header file of reed_muller.c @@ -12,4 +13,5 @@ void PQCLEAN_HQC128_CLEAN_reed_muller_encode(uint64_t *cdw, const uint8_t *msg); void PQCLEAN_HQC128_CLEAN_reed_muller_decode(uint8_t *msg, const uint64_t *cdw); + #endif diff --git a/src/kem/hqc/pqclean_hqc-128_clean/reed_solomon.c b/src/kem/hqc/pqclean_hqc-128_clean/reed_solomon.c index 38abda9a34..70c78ef125 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/reed_solomon.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/reed_solomon.c @@ -9,6 +9,7 @@ * @brief Constant time implementation of Reed-Solomon codes */ + /** * @brief Encodes a message message of PARAM_K bits to a Reed-Solomon codeword codeword of PARAM_N1 bytes * @@ -44,6 +45,8 @@ void PQCLEAN_HQC128_CLEAN_reed_solomon_encode(uint8_t *cdw, const uint8_t *msg) memcpy(cdw + PARAM_N1 - PARAM_K, msg, PARAM_K); } + + /** * @brief Computes 2 * PARAM_DELTA syndromes * @@ -59,6 +62,8 @@ static void compute_syndromes(uint16_t *syndromes, uint8_t *cdw) { } } + + /** * @brief Computes the error locator polynomial (ELP) sigma * @@ -138,6 +143,8 @@ static uint16_t compute_elp(uint16_t *sigma, const uint16_t *syndromes) { return deg_sigma; } + + /** * @brief Computes the error polynomial error from the error locator polynomial sigma * @@ -154,6 +161,8 @@ static void compute_roots(uint8_t *error, uint16_t *sigma) { PQCLEAN_HQC128_CLEAN_fft_retrieve_error_poly(error, w); } + + /** * @brief Computes the polynomial z(x) * @@ -187,6 +196,8 @@ static void compute_z_poly(uint16_t *z, const uint16_t *sigma, uint16_t degree, } } + + /** * @brief Computes the error values * @@ -257,6 +268,8 @@ static void compute_error_values(uint16_t *error_values, const uint16_t *z, cons } } + + /** * @brief Correct the errors * @@ -270,6 +283,8 @@ static void correct_errors(uint8_t *cdw, const uint16_t *error_values) { } } + + /** * @brief Decodes the received word * diff --git a/src/kem/hqc/pqclean_hqc-128_clean/reed_solomon.h b/src/kem/hqc/pqclean_hqc-128_clean/reed_solomon.h index 0cc0b9de49..ad59774fde 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/reed_solomon.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/reed_solomon.h @@ -1,6 +1,7 @@ #ifndef REED_SOLOMON_H #define REED_SOLOMON_H + /** * @file reed_solomon.h * @brief Header file of reed_solomon.c @@ -14,4 +15,5 @@ void PQCLEAN_HQC128_CLEAN_reed_solomon_encode(uint8_t *cdw, const uint8_t *msg); void PQCLEAN_HQC128_CLEAN_reed_solomon_decode(uint8_t *msg, uint8_t *cdw); + #endif diff --git a/src/kem/hqc/pqclean_hqc-128_clean/shake_ds.c b/src/kem/hqc/pqclean_hqc-128_clean/shake_ds.c index 0e7bc23b76..7e2f9234db 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/shake_ds.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/shake_ds.c @@ -1,10 +1,13 @@ #include "shake_ds.h" + /** * @file shake_ds.c * @brief Implementation SHAKE-256 with incremental API and domain separation */ + + /** * @brief SHAKE-256 with incremental API and domain separation * diff --git a/src/kem/hqc/pqclean_hqc-128_clean/shake_ds.h b/src/kem/hqc/pqclean_hqc-128_clean/shake_ds.h index 2ed36586c3..822a82dccd 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/shake_ds.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/shake_ds.h @@ -1,6 +1,7 @@ #ifndef SHAKE_DS_H #define SHAKE_DS_H + /** * @file shake_ds.h * @brief Header file of shake_ds.c @@ -11,4 +12,5 @@ void PQCLEAN_HQC128_CLEAN_shake256_512_ds(shake256incctx *state, uint8_t *output, const uint8_t *input, size_t inlen, uint8_t domain); + #endif diff --git a/src/kem/hqc/pqclean_hqc-128_clean/shake_prng.c b/src/kem/hqc/pqclean_hqc-128_clean/shake_prng.c index a71278d476..39a2c12cae 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/shake_prng.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/shake_prng.c @@ -7,6 +7,7 @@ * @brief Implementation of SHAKE-256 based seed expander */ + /** * @brief Initialise a SHAKE-256 based seed expander * @@ -24,6 +25,8 @@ void PQCLEAN_HQC128_CLEAN_seedexpander_init(seedexpander_state *state, const uin shake256_inc_finalize(state); } + + /** * @brief A SHAKE-256 based seed expander * diff --git a/src/kem/hqc/pqclean_hqc-128_clean/shake_prng.h b/src/kem/hqc/pqclean_hqc-128_clean/shake_prng.h index e53dd9a08e..7c9036fb4e 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/shake_prng.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/shake_prng.h @@ -1,6 +1,7 @@ #ifndef SHAKE_PRNG_H #define SHAKE_PRNG_H + /** * @file shake_prng.h * @brief Header file of shake_prng.c @@ -17,4 +18,5 @@ void PQCLEAN_HQC128_CLEAN_seedexpander(seedexpander_state *state, uint8_t *outpu void PQCLEAN_HQC128_CLEAN_seedexpander_release(seedexpander_state *state); + #endif diff --git a/src/kem/hqc/pqclean_hqc-128_clean/vector.c b/src/kem/hqc/pqclean_hqc-128_clean/vector.c index 7ec996aad1..c3ff1b7818 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/vector.c +++ b/src/kem/hqc/pqclean_hqc-128_clean/vector.c @@ -9,6 +9,7 @@ * @brief Implementation of vectors sampling and some utilities for the HQC scheme */ + static uint32_t m_val[75] = { 243079, 243093, 243106, 243120, 243134, 243148, 243161, 243175, 243189, 243203, 243216, 243230, 243244, 243258, 243272, 243285, 243299, 243313, 243327, 243340, 243354, 243368, 243382, 243396, 243409, 243423, 243437, 243451, 243465, 243478, 243492, 243506, 243520, 243534, 243547, 243561, 243575, 243589, 243603, 243616, 243630, 243644, 243658, 243672, 243686, 243699, 243713, 243727, 243741, 243755, 243769, 243782, 243796, 243810, 243824, 243838, 243852, 243865, 243879, 243893, 243907, 243921, 243935, 243949, 243962, 243976, 243990, 244004, 244018, 244032, 244046, 244059, 244073, 244087, 244101 }; /** @@ -110,6 +111,8 @@ void PQCLEAN_HQC128_CLEAN_vect_set_random_fixed_weight(seedexpander_state *ctx, } } + + /** * @brief Generates a random vector of dimension PARAM_N * @@ -128,6 +131,8 @@ void PQCLEAN_HQC128_CLEAN_vect_set_random(seedexpander_state *ctx, uint64_t *v) v[VEC_N_SIZE_64 - 1] &= RED_MASK; } + + /** * @brief Adds two vectors * @@ -142,6 +147,8 @@ void PQCLEAN_HQC128_CLEAN_vect_add(uint64_t *o, const uint64_t *v1, const uint64 } } + + /** * @brief Compares two vectors * @@ -160,6 +167,8 @@ uint8_t PQCLEAN_HQC128_CLEAN_vect_compare(const uint8_t *v1, const uint8_t *v2, return (r - 1) >> 8; } + + /** * @brief Resize a vector so that it contains size_o bits * diff --git a/src/kem/hqc/pqclean_hqc-128_clean/vector.h b/src/kem/hqc/pqclean_hqc-128_clean/vector.h index a929fdd81b..16b2c920ed 100644 --- a/src/kem/hqc/pqclean_hqc-128_clean/vector.h +++ b/src/kem/hqc/pqclean_hqc-128_clean/vector.h @@ -1,6 +1,7 @@ #ifndef VECTOR_H #define VECTOR_H + /** * @file vector.h * @brief Header file for vector.c @@ -13,10 +14,12 @@ void PQCLEAN_HQC128_CLEAN_vect_set_random_fixed_weight(seedexpander_state *ctx, void PQCLEAN_HQC128_CLEAN_vect_set_random(seedexpander_state *ctx, uint64_t *v); + void PQCLEAN_HQC128_CLEAN_vect_add(uint64_t *o, const uint64_t *v1, const uint64_t *v2, size_t size); uint8_t PQCLEAN_HQC128_CLEAN_vect_compare(const uint8_t *v1, const uint8_t *v2, size_t size); void PQCLEAN_HQC128_CLEAN_vect_resize(uint64_t *o, uint32_t size_o, const uint64_t *v, uint32_t size_v); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/api.h b/src/kem/hqc/pqclean_hqc-192_clean/api.h index 3467b5f397..573a771e4c 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/api.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/api.h @@ -23,4 +23,5 @@ int PQCLEAN_HQC192_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t int PQCLEAN_HQC192_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/code.c b/src/kem/hqc/pqclean_hqc-192_clean/code.c index 05f5c1efed..ba21fa20b0 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/code.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/code.c @@ -8,6 +8,8 @@ * @brief Implementation of concatenated code */ + + /** * * @brief Encoding the message m to a code word em using the concatenated code @@ -26,6 +28,8 @@ void PQCLEAN_HQC192_CLEAN_code_encode(uint64_t *em, const uint8_t *m) { } + + /** * @brief Decoding the code word em to a message m using the concatenated code * @@ -38,4 +42,5 @@ void PQCLEAN_HQC192_CLEAN_code_decode(uint8_t *m, const uint64_t *em) { PQCLEAN_HQC192_CLEAN_reed_muller_decode(tmp, em); PQCLEAN_HQC192_CLEAN_reed_solomon_decode(m, tmp); + } diff --git a/src/kem/hqc/pqclean_hqc-192_clean/code.h b/src/kem/hqc/pqclean_hqc-192_clean/code.h index cdd16d0cc0..1318bea391 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/code.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/code.h @@ -1,6 +1,7 @@ #ifndef CODE_H #define CODE_H + /** * @file code.h * @brief Header file of code.c @@ -12,4 +13,5 @@ void PQCLEAN_HQC192_CLEAN_code_encode(uint64_t *em, const uint8_t *message); void PQCLEAN_HQC192_CLEAN_code_decode(uint8_t *m, const uint64_t *em); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/domains.h b/src/kem/hqc/pqclean_hqc-192_clean/domains.h index 86d0ef8498..20c782ccae 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/domains.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/domains.h @@ -1,11 +1,13 @@ #ifndef DOMAINS_H #define DOMAINS_H + /** * @file domains.h * @brief SHAKE-256 domains separation header grouping all domains to avoid collisions */ + #define PRNG_DOMAIN 1 #define SEEDEXPANDER_DOMAIN 2 #define G_FCT_DOMAIN 3 diff --git a/src/kem/hqc/pqclean_hqc-192_clean/fft.c b/src/kem/hqc/pqclean_hqc-192_clean/fft.c index a43d2e3e8a..1763a94225 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/fft.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/fft.c @@ -14,6 +14,7 @@ * https://binary.cr.yp.to/mcbits-20130616.pdf */ + static void radix_big(uint16_t *f0, uint16_t *f1, const uint16_t *f, uint32_t m_f); /** @@ -28,6 +29,8 @@ static void compute_fft_betas(uint16_t *betas) { } } + + /** * @brief Computes the subset sums of the given set * @@ -49,6 +52,8 @@ static void compute_subset_sums(uint16_t *subset_sums, const uint16_t *set, uint } } + + /** * @brief Computes the radix conversion of a polynomial f in GF(2^m)[x] * @@ -143,6 +148,8 @@ static void radix_big(uint16_t *f0, uint16_t *f1, const uint16_t *f, uint32_t m_ memcpy(f1 + n, Q1, 2 * n); } + + /** * @brief Evaluates f at all subset sums of a given set * @@ -236,6 +243,8 @@ static void fft_rec(uint16_t *w, uint16_t *f, size_t f_coeffs, uint8_t m, uint32 } } + + /** * @brief Evaluates f on all fields elements using an additive FFT algorithm * @@ -305,6 +314,8 @@ void PQCLEAN_HQC192_CLEAN_fft(uint16_t *w, const uint16_t *f, size_t f_coeffs) { } } + + /** * @brief Retrieves the error polynomial error from the evaluations w of the ELP (Error Locator Polynomial) on all field elements. * diff --git a/src/kem/hqc/pqclean_hqc-192_clean/fft.h b/src/kem/hqc/pqclean_hqc-192_clean/fft.h index e8b06490fc..8337c3ac96 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/fft.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/fft.h @@ -1,6 +1,7 @@ #ifndef FFT_H #define FFT_H + /** * @file fft.h * @brief Header file of fft.c @@ -13,4 +14,5 @@ void PQCLEAN_HQC192_CLEAN_fft(uint16_t *w, const uint16_t *f, size_t f_coeffs); void PQCLEAN_HQC192_CLEAN_fft_retrieve_error_poly(uint8_t *error, const uint16_t *w); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/gf.c b/src/kem/hqc/pqclean_hqc-192_clean/gf.c index da051ff235..517b76a84c 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/gf.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/gf.c @@ -7,6 +7,7 @@ * @brief Galois field implementation */ + /** * @brief Computes the number of trailing zero bits. * @@ -23,6 +24,8 @@ static uint16_t trailing_zero_bits_count(uint16_t a) { return tmp; } + + /** * Reduces polynomial x modulo primitive polynomial GF_POLY. * @returns x mod GF_POLY @@ -57,6 +60,8 @@ static uint16_t gf_reduce(uint64_t x, size_t deg_x) { return (uint16_t)x; } + + /** * Carryless multiplication of two polynomials a and b. * @@ -105,6 +110,8 @@ static void gf_carryless_mul(uint8_t c[2], uint8_t a, uint8_t b) { c[1] = (uint8_t)h; } + + /** * Multiplies two elements of GF(2^GF_M). * @returns the product a*b @@ -118,6 +125,8 @@ uint16_t PQCLEAN_HQC192_CLEAN_gf_mul(uint16_t a, uint16_t b) { return gf_reduce(tmp, 2 * (PARAM_M - 1)); } + + /** * @brief Squares an element of GF(2^PARAM_M). * @returns a^2 @@ -134,6 +143,8 @@ uint16_t PQCLEAN_HQC192_CLEAN_gf_square(uint16_t a) { return gf_reduce(s, 2 * (PARAM_M - 1)); } + + /** * @brief Computes the inverse of an element of GF(2^PARAM_M), * using the addition chain 1 2 3 4 7 11 15 30 60 120 127 254 diff --git a/src/kem/hqc/pqclean_hqc-192_clean/gf.h b/src/kem/hqc/pqclean_hqc-192_clean/gf.h index afbdb95ed2..3985472195 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/gf.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/gf.h @@ -1,6 +1,7 @@ #ifndef GF_H #define GF_H + /** * @file gf.h * @brief Header file of gf.c @@ -8,6 +9,7 @@ #include + /** * Powers of the root alpha of 1 + x^2 + x^3 + x^4 + x^8. * The last two elements are needed by the PQCLEAN_HQC192_CLEAN_gf_mul function @@ -15,16 +17,21 @@ */ static const uint16_t gf_exp [258] = { 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38, 76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192, 157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35, 70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222, 161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60, 120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223, 163, 91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26, 52, 104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147, 59, 118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218, 169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85, 170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198, 145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171, 75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25, 50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81, 162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9, 18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11, 22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71, 142, 1, 2, 4 }; + + /** * Logarithm of elements of GF(2^8) to the base alpha (root of 1 + x^2 + x^3 + x^4 + x^8). * The logarithm of 0 is set to 0 by convention. */ static const uint16_t gf_log [256] = { 0, 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75, 4, 100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113, 5, 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69, 29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114, 166, 6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145, 34, 136, 54, 208, 148, 206, 143, 150, 219, 189, 241, 210, 19, 92, 131, 56, 70, 64, 30, 66, 182, 163, 195, 72, 126, 110, 107, 58, 40, 84, 250, 133, 186, 61, 202, 94, 155, 159, 10, 21, 121, 43, 78, 212, 229, 172, 115, 243, 167, 87, 7, 112, 192, 247, 140, 128, 99, 13, 103, 74, 222, 237, 49, 197, 254, 24, 227, 165, 153, 119, 38, 184, 180, 124, 17, 68, 146, 217, 35, 32, 137, 46, 55, 63, 209, 91, 149, 188, 207, 205, 144, 135, 151, 178, 220, 252, 190, 97, 242, 86, 211, 171, 20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162, 31, 45, 67, 216, 183, 123, 164, 118, 196, 23, 73, 236, 127, 12, 111, 246, 108, 161, 59, 82, 41, 157, 85, 170, 251, 96, 134, 177, 187, 204, 62, 90, 203, 89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215, 79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80, 88, 175 }; + + uint16_t PQCLEAN_HQC192_CLEAN_gf_mul(uint16_t a, uint16_t b); uint16_t PQCLEAN_HQC192_CLEAN_gf_square(uint16_t a); uint16_t PQCLEAN_HQC192_CLEAN_gf_inverse(uint16_t a); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/gf2x.c b/src/kem/hqc/pqclean_hqc-192_clean/gf2x.c index 6ea9217383..255147cb00 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/gf2x.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/gf2x.c @@ -7,6 +7,7 @@ * @brief Implementation of multiplication of two polynomials */ + /** * @brief Caryless multiplication of two words of 64 bits * diff --git a/src/kem/hqc/pqclean_hqc-192_clean/gf2x.h b/src/kem/hqc/pqclean_hqc-192_clean/gf2x.h index bf4f74b94b..a7569d3f52 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/gf2x.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/gf2x.h @@ -9,4 +9,5 @@ void PQCLEAN_HQC192_CLEAN_vect_mul(uint64_t *o, const uint64_t *v1, const uint64_t *v2); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/hqc.c b/src/kem/hqc/pqclean_hqc-192_clean/hqc.c index fbe6041262..7ef8d6ab4b 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/hqc.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/hqc.c @@ -12,6 +12,8 @@ * @brief Implementation of hqc.h */ + + /** * @brief Keygen of the HQC_PKE IND_CPA scheme * @@ -59,6 +61,8 @@ void PQCLEAN_HQC192_CLEAN_hqc_pke_keygen(uint8_t *pk, uint8_t *sk) { PQCLEAN_HQC192_CLEAN_seedexpander_release(&sk_seedexpander); } + + /** * @brief Encryption of the HQC_PKE IND_CPA scheme * @@ -108,6 +112,8 @@ void PQCLEAN_HQC192_CLEAN_hqc_pke_encrypt(uint64_t *u, uint64_t *v, uint8_t *m, PQCLEAN_HQC192_CLEAN_seedexpander_release(&vec_seedexpander); } + + /** * @brief Decryption of the HQC_PKE IND_CPA scheme * @@ -132,6 +138,7 @@ uint8_t PQCLEAN_HQC192_CLEAN_hqc_pke_decrypt(uint8_t *m, uint8_t *sigma, const u PQCLEAN_HQC192_CLEAN_vect_mul(tmp2, y, u); PQCLEAN_HQC192_CLEAN_vect_add(tmp2, tmp1, tmp2, VEC_N_SIZE_64); + // Compute m by decoding v - u.y PQCLEAN_HQC192_CLEAN_code_decode(m, tmp2); diff --git a/src/kem/hqc/pqclean_hqc-192_clean/hqc.h b/src/kem/hqc/pqclean_hqc-192_clean/hqc.h index f3458dbba7..05cf6e80b8 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/hqc.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/hqc.h @@ -1,6 +1,7 @@ #ifndef HQC_H #define HQC_H + /** * @file hqc.h * @brief Functions of the HQC_PKE IND_CPA scheme @@ -14,4 +15,5 @@ void PQCLEAN_HQC192_CLEAN_hqc_pke_encrypt(uint64_t *u, uint64_t *v, uint8_t *m, uint8_t PQCLEAN_HQC192_CLEAN_hqc_pke_decrypt(uint8_t *m, uint8_t *sigma, const uint64_t *u, const uint64_t *v, const unsigned char *sk); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/kem.c b/src/kem/hqc/pqclean_hqc-192_clean/kem.c index 95a0023d9a..56be311491 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/kem.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/kem.c @@ -14,6 +14,8 @@ * @brief Implementation of api.h */ + + /** * @brief Keygen of the HQC_KEM IND_CAA2 scheme * @@ -32,6 +34,8 @@ int PQCLEAN_HQC192_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk) { return 0; } + + /** * @brief Encapsulation of the HQC_KEM IND_CAA2 scheme * @@ -71,9 +75,12 @@ int PQCLEAN_HQC192_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t // Computing ciphertext PQCLEAN_HQC192_CLEAN_hqc_ciphertext_to_string(ct, u, v, salt); + return 0; } + + /** * @brief Decapsulation of the HQC_KEM IND_CAA2 scheme * @@ -126,5 +133,6 @@ int PQCLEAN_HQC192_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const ui PQCLEAN_HQC192_CLEAN_store8_arr(mc + VEC_K_SIZE_BYTES + VEC_N_SIZE_BYTES, VEC_N1N2_SIZE_BYTES, v, VEC_N1N2_SIZE_64); PQCLEAN_HQC192_CLEAN_shake256_512_ds(&shake256state, ss, mc, VEC_K_SIZE_BYTES + VEC_N_SIZE_BYTES + VEC_N1N2_SIZE_BYTES, K_FCT_DOMAIN); + return (result & 1) - 1; } diff --git a/src/kem/hqc/pqclean_hqc-192_clean/parameters.h b/src/kem/hqc/pqclean_hqc-192_clean/parameters.h index f1efa66efd..136e3d99d8 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/parameters.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/parameters.h @@ -1,12 +1,14 @@ #ifndef HQC_PARAMETERS_H #define HQC_PARAMETERS_H + /** * @file parameters.h * @brief Parameters of the HQC_KEM IND-CCA2 scheme */ #include "api.h" + #define CEIL_DIVIDE(a, b) (((a)+(b)-1)/(b)) /*!< Divide a by b and ceil the result*/ /* diff --git a/src/kem/hqc/pqclean_hqc-192_clean/parsing.c b/src/kem/hqc/pqclean_hqc-192_clean/parsing.c index e0d56728a2..f3ef0064b4 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/parsing.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/parsing.c @@ -8,6 +8,7 @@ * @brief Functions to parse secret key, public key and ciphertext of the HQC scheme */ + static uint64_t load8(const uint8_t *in) { uint64_t ret = in[7]; @@ -71,6 +72,8 @@ void PQCLEAN_HQC192_CLEAN_hqc_secret_key_to_string(uint8_t *sk, const uint8_t *s memcpy(sk + SEED_BYTES + VEC_K_SIZE_BYTES, pk, PUBLIC_KEY_BYTES); } + + /** * @brief Parse a secret key from a string * @@ -95,6 +98,8 @@ void PQCLEAN_HQC192_CLEAN_hqc_secret_key_from_string(uint64_t *x, uint64_t *y, u PQCLEAN_HQC192_CLEAN_seedexpander_release(&sk_seedexpander); } + + /** * @brief Parse a public key into a string * @@ -109,6 +114,8 @@ void PQCLEAN_HQC192_CLEAN_hqc_public_key_to_string(uint8_t *pk, const uint8_t *p PQCLEAN_HQC192_CLEAN_store8_arr(pk + SEED_BYTES, VEC_N_SIZE_BYTES, s, VEC_N_SIZE_64); } + + /** * @brief Parse a public key from a string * @@ -129,6 +136,8 @@ void PQCLEAN_HQC192_CLEAN_hqc_public_key_from_string(uint64_t *h, uint64_t *s, c PQCLEAN_HQC192_CLEAN_seedexpander_release(&pk_seedexpander); } + + /** * @brief Parse a ciphertext into a string * @@ -145,6 +154,8 @@ void PQCLEAN_HQC192_CLEAN_hqc_ciphertext_to_string(uint8_t *ct, const uint64_t * memcpy(ct + VEC_N_SIZE_BYTES + VEC_N1N2_SIZE_BYTES, salt, SALT_SIZE_BYTES); } + + /** * @brief Parse a ciphertext from a string * diff --git a/src/kem/hqc/pqclean_hqc-192_clean/parsing.h b/src/kem/hqc/pqclean_hqc-192_clean/parsing.h index 93169b8d97..f3e6c726fb 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/parsing.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/parsing.h @@ -1,6 +1,7 @@ #ifndef PARSING_H #define PARSING_H + /** * @file parsing.h * @brief Header file for parsing.c @@ -13,16 +14,20 @@ void PQCLEAN_HQC192_CLEAN_load8_arr(uint64_t *out64, size_t outlen, const uint8_ void PQCLEAN_HQC192_CLEAN_store8_arr(uint8_t *out8, size_t outlen, const uint64_t *in64, size_t inlen); + void PQCLEAN_HQC192_CLEAN_hqc_secret_key_to_string(uint8_t *sk, const uint8_t *sk_seed, const uint8_t *sigma, const uint8_t *pk); void PQCLEAN_HQC192_CLEAN_hqc_secret_key_from_string(uint64_t *x, uint64_t *y, uint8_t *sigma, uint8_t *pk, const uint8_t *sk); + void PQCLEAN_HQC192_CLEAN_hqc_public_key_to_string(uint8_t *pk, const uint8_t *pk_seed, const uint64_t *s); void PQCLEAN_HQC192_CLEAN_hqc_public_key_from_string(uint64_t *h, uint64_t *s, const uint8_t *pk); + void PQCLEAN_HQC192_CLEAN_hqc_ciphertext_to_string(uint8_t *ct, const uint64_t *u, const uint64_t *v, const uint8_t *salt); void PQCLEAN_HQC192_CLEAN_hqc_ciphertext_from_string(uint64_t *u, uint64_t *v, uint8_t *salt, const uint8_t *ct); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/reed_muller.c b/src/kem/hqc/pqclean_hqc-192_clean/reed_muller.c index 29160c570c..a23994a542 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/reed_muller.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/reed_muller.c @@ -7,6 +7,7 @@ * @brief Constant time implementation of Reed-Muller code RM(1,7) */ + // number of repeated code words #define MULTIPLICITY CEIL_DIVIDE(PARAM_N2, 128) @@ -52,6 +53,8 @@ static void encode(uint64_t *cword, uint8_t message) { cword[1] |= first_word; } + + /** * @brief Hadamard transform * @@ -80,6 +83,8 @@ static void hadamard(uint16_t src[128], uint16_t dst[128]) { } } + + /** * @brief Add multiple codewords into expanded codeword * @@ -110,6 +115,8 @@ static void expand_and_sum(uint16_t dest[128], const uint64_t src[2 * MULTIPLICI } } + + /** * @brief Finding the location of the highest value * @@ -137,6 +144,8 @@ static uint8_t find_peaks(const uint16_t transform[128]) { return (uint8_t) pos; } + + /** * @brief Encodes the received word * @@ -157,6 +166,8 @@ void PQCLEAN_HQC192_CLEAN_reed_muller_encode(uint64_t *cdw, const uint8_t *msg) } } + + /** * @brief Decodes the received word * diff --git a/src/kem/hqc/pqclean_hqc-192_clean/reed_muller.h b/src/kem/hqc/pqclean_hqc-192_clean/reed_muller.h index 94c8b1e305..b7ea4ecafc 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/reed_muller.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/reed_muller.h @@ -1,6 +1,7 @@ #ifndef REED_MULLER_H #define REED_MULLER_H + /** * @file reed_muller.h * @brief Header file of reed_muller.c @@ -12,4 +13,5 @@ void PQCLEAN_HQC192_CLEAN_reed_muller_encode(uint64_t *cdw, const uint8_t *msg); void PQCLEAN_HQC192_CLEAN_reed_muller_decode(uint8_t *msg, const uint64_t *cdw); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/reed_solomon.c b/src/kem/hqc/pqclean_hqc-192_clean/reed_solomon.c index b172e380fc..ce12752304 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/reed_solomon.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/reed_solomon.c @@ -9,6 +9,7 @@ * @brief Constant time implementation of Reed-Solomon codes */ + /** * @brief Encodes a message message of PARAM_K bits to a Reed-Solomon codeword codeword of PARAM_N1 bytes * @@ -44,6 +45,8 @@ void PQCLEAN_HQC192_CLEAN_reed_solomon_encode(uint8_t *cdw, const uint8_t *msg) memcpy(cdw + PARAM_N1 - PARAM_K, msg, PARAM_K); } + + /** * @brief Computes 2 * PARAM_DELTA syndromes * @@ -59,6 +62,8 @@ static void compute_syndromes(uint16_t *syndromes, uint8_t *cdw) { } } + + /** * @brief Computes the error locator polynomial (ELP) sigma * @@ -138,6 +143,8 @@ static uint16_t compute_elp(uint16_t *sigma, const uint16_t *syndromes) { return deg_sigma; } + + /** * @brief Computes the error polynomial error from the error locator polynomial sigma * @@ -154,6 +161,8 @@ static void compute_roots(uint8_t *error, uint16_t *sigma) { PQCLEAN_HQC192_CLEAN_fft_retrieve_error_poly(error, w); } + + /** * @brief Computes the polynomial z(x) * @@ -187,6 +196,8 @@ static void compute_z_poly(uint16_t *z, const uint16_t *sigma, uint16_t degree, } } + + /** * @brief Computes the error values * @@ -257,6 +268,8 @@ static void compute_error_values(uint16_t *error_values, const uint16_t *z, cons } } + + /** * @brief Correct the errors * @@ -270,6 +283,8 @@ static void correct_errors(uint8_t *cdw, const uint16_t *error_values) { } } + + /** * @brief Decodes the received word * diff --git a/src/kem/hqc/pqclean_hqc-192_clean/reed_solomon.h b/src/kem/hqc/pqclean_hqc-192_clean/reed_solomon.h index 896b24e1e9..aae6421216 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/reed_solomon.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/reed_solomon.h @@ -1,6 +1,7 @@ #ifndef REED_SOLOMON_H #define REED_SOLOMON_H + /** * @file reed_solomon.h * @brief Header file of reed_solomon.c @@ -14,4 +15,5 @@ void PQCLEAN_HQC192_CLEAN_reed_solomon_encode(uint8_t *cdw, const uint8_t *msg); void PQCLEAN_HQC192_CLEAN_reed_solomon_decode(uint8_t *msg, uint8_t *cdw); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/shake_ds.c b/src/kem/hqc/pqclean_hqc-192_clean/shake_ds.c index a8c43e388c..f85d7c740b 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/shake_ds.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/shake_ds.c @@ -1,10 +1,13 @@ #include "shake_ds.h" + /** * @file shake_ds.c * @brief Implementation SHAKE-256 with incremental API and domain separation */ + + /** * @brief SHAKE-256 with incremental API and domain separation * diff --git a/src/kem/hqc/pqclean_hqc-192_clean/shake_ds.h b/src/kem/hqc/pqclean_hqc-192_clean/shake_ds.h index 8c33cc0674..1adff58c40 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/shake_ds.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/shake_ds.h @@ -1,6 +1,7 @@ #ifndef SHAKE_DS_H #define SHAKE_DS_H + /** * @file shake_ds.h * @brief Header file of shake_ds.c @@ -11,4 +12,5 @@ void PQCLEAN_HQC192_CLEAN_shake256_512_ds(shake256incctx *state, uint8_t *output, const uint8_t *input, size_t inlen, uint8_t domain); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/shake_prng.c b/src/kem/hqc/pqclean_hqc-192_clean/shake_prng.c index 9fea9723aa..13d7776bcc 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/shake_prng.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/shake_prng.c @@ -7,6 +7,7 @@ * @brief Implementation of SHAKE-256 based seed expander */ + /** * @brief Initialise a SHAKE-256 based seed expander * @@ -24,6 +25,8 @@ void PQCLEAN_HQC192_CLEAN_seedexpander_init(seedexpander_state *state, const uin shake256_inc_finalize(state); } + + /** * @brief A SHAKE-256 based seed expander * diff --git a/src/kem/hqc/pqclean_hqc-192_clean/shake_prng.h b/src/kem/hqc/pqclean_hqc-192_clean/shake_prng.h index 96a6efe75e..ac535e32a2 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/shake_prng.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/shake_prng.h @@ -1,6 +1,7 @@ #ifndef SHAKE_PRNG_H #define SHAKE_PRNG_H + /** * @file shake_prng.h * @brief Header file of shake_prng.c @@ -17,4 +18,5 @@ void PQCLEAN_HQC192_CLEAN_seedexpander(seedexpander_state *state, uint8_t *outpu void PQCLEAN_HQC192_CLEAN_seedexpander_release(seedexpander_state *state); + #endif diff --git a/src/kem/hqc/pqclean_hqc-192_clean/vector.c b/src/kem/hqc/pqclean_hqc-192_clean/vector.c index 3aa6b8faec..aa27d8ecb3 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/vector.c +++ b/src/kem/hqc/pqclean_hqc-192_clean/vector.c @@ -9,6 +9,7 @@ * @brief Implementation of vectors sampling and some utilities for the HQC scheme */ + static uint32_t m_val[114] = { 119800, 119803, 119807, 119810, 119813, 119817, 119820, 119823, 119827, 119830, 119833, 119837, 119840, 119843, 119847, 119850, 119853, 119857, 119860, 119864, 119867, 119870, 119874, 119877, 119880, 119884, 119887, 119890, 119894, 119897, 119900, 119904, 119907, 119910, 119914, 119917, 119920, 119924, 119927, 119930, 119934, 119937, 119941, 119944, 119947, 119951, 119954, 119957, 119961, 119964, 119967, 119971, 119974, 119977, 119981, 119984, 119987, 119991, 119994, 119997, 120001, 120004, 120008, 120011, 120014, 120018, 120021, 120024, 120028, 120031, 120034, 120038, 120041, 120044, 120048, 120051, 120054, 120058, 120061, 120065, 120068, 120071, 120075, 120078, 120081, 120085, 120088, 120091, 120095, 120098, 120101, 120105, 120108, 120112, 120115, 120118, 120122, 120125, 120128, 120132, 120135, 120138, 120142, 120145, 120149, 120152, 120155, 120159, 120162, 120165, 120169, 120172, 120175, 120179 }; /** @@ -110,6 +111,8 @@ void PQCLEAN_HQC192_CLEAN_vect_set_random_fixed_weight(seedexpander_state *ctx, } } + + /** * @brief Generates a random vector of dimension PARAM_N * @@ -128,6 +131,8 @@ void PQCLEAN_HQC192_CLEAN_vect_set_random(seedexpander_state *ctx, uint64_t *v) v[VEC_N_SIZE_64 - 1] &= RED_MASK; } + + /** * @brief Adds two vectors * @@ -142,6 +147,8 @@ void PQCLEAN_HQC192_CLEAN_vect_add(uint64_t *o, const uint64_t *v1, const uint64 } } + + /** * @brief Compares two vectors * @@ -160,6 +167,8 @@ uint8_t PQCLEAN_HQC192_CLEAN_vect_compare(const uint8_t *v1, const uint8_t *v2, return (r - 1) >> 8; } + + /** * @brief Resize a vector so that it contains size_o bits * diff --git a/src/kem/hqc/pqclean_hqc-192_clean/vector.h b/src/kem/hqc/pqclean_hqc-192_clean/vector.h index 6376c71c50..6a5107c39c 100644 --- a/src/kem/hqc/pqclean_hqc-192_clean/vector.h +++ b/src/kem/hqc/pqclean_hqc-192_clean/vector.h @@ -1,6 +1,7 @@ #ifndef VECTOR_H #define VECTOR_H + /** * @file vector.h * @brief Header file for vector.c @@ -13,10 +14,12 @@ void PQCLEAN_HQC192_CLEAN_vect_set_random_fixed_weight(seedexpander_state *ctx, void PQCLEAN_HQC192_CLEAN_vect_set_random(seedexpander_state *ctx, uint64_t *v); + void PQCLEAN_HQC192_CLEAN_vect_add(uint64_t *o, const uint64_t *v1, const uint64_t *v2, size_t size); uint8_t PQCLEAN_HQC192_CLEAN_vect_compare(const uint8_t *v1, const uint8_t *v2, size_t size); void PQCLEAN_HQC192_CLEAN_vect_resize(uint64_t *o, uint32_t size_o, const uint64_t *v, uint32_t size_v); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/api.h b/src/kem/hqc/pqclean_hqc-256_clean/api.h index e9288656fc..ec63b50c27 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/api.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/api.h @@ -23,4 +23,5 @@ int PQCLEAN_HQC256_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t int PQCLEAN_HQC256_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/code.c b/src/kem/hqc/pqclean_hqc-256_clean/code.c index 8437a4775d..0bb4e697a6 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/code.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/code.c @@ -8,6 +8,8 @@ * @brief Implementation of concatenated code */ + + /** * * @brief Encoding the message m to a code word em using the concatenated code @@ -26,6 +28,8 @@ void PQCLEAN_HQC256_CLEAN_code_encode(uint64_t *em, const uint8_t *m) { } + + /** * @brief Decoding the code word em to a message m using the concatenated code * @@ -38,4 +42,5 @@ void PQCLEAN_HQC256_CLEAN_code_decode(uint8_t *m, const uint64_t *em) { PQCLEAN_HQC256_CLEAN_reed_muller_decode(tmp, em); PQCLEAN_HQC256_CLEAN_reed_solomon_decode(m, tmp); + } diff --git a/src/kem/hqc/pqclean_hqc-256_clean/code.h b/src/kem/hqc/pqclean_hqc-256_clean/code.h index 7c496bfcc6..6c3f238aa0 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/code.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/code.h @@ -1,6 +1,7 @@ #ifndef CODE_H #define CODE_H + /** * @file code.h * @brief Header file of code.c @@ -12,4 +13,5 @@ void PQCLEAN_HQC256_CLEAN_code_encode(uint64_t *em, const uint8_t *message); void PQCLEAN_HQC256_CLEAN_code_decode(uint8_t *m, const uint64_t *em); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/domains.h b/src/kem/hqc/pqclean_hqc-256_clean/domains.h index 86d0ef8498..20c782ccae 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/domains.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/domains.h @@ -1,11 +1,13 @@ #ifndef DOMAINS_H #define DOMAINS_H + /** * @file domains.h * @brief SHAKE-256 domains separation header grouping all domains to avoid collisions */ + #define PRNG_DOMAIN 1 #define SEEDEXPANDER_DOMAIN 2 #define G_FCT_DOMAIN 3 diff --git a/src/kem/hqc/pqclean_hqc-256_clean/fft.c b/src/kem/hqc/pqclean_hqc-256_clean/fft.c index 9b38b8a1fc..dae2209521 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/fft.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/fft.c @@ -14,6 +14,7 @@ * https://binary.cr.yp.to/mcbits-20130616.pdf */ + static void radix_big(uint16_t *f0, uint16_t *f1, const uint16_t *f, uint32_t m_f); /** @@ -28,6 +29,8 @@ static void compute_fft_betas(uint16_t *betas) { } } + + /** * @brief Computes the subset sums of the given set * @@ -49,6 +52,8 @@ static void compute_subset_sums(uint16_t *subset_sums, const uint16_t *set, uint } } + + /** * @brief Computes the radix conversion of a polynomial f in GF(2^m)[x] * @@ -143,6 +148,8 @@ static void radix_big(uint16_t *f0, uint16_t *f1, const uint16_t *f, uint32_t m_ memcpy(f1 + n, Q1, 2 * n); } + + /** * @brief Evaluates f at all subset sums of a given set * @@ -236,6 +243,8 @@ static void fft_rec(uint16_t *w, uint16_t *f, size_t f_coeffs, uint8_t m, uint32 } } + + /** * @brief Evaluates f on all fields elements using an additive FFT algorithm * @@ -305,6 +314,8 @@ void PQCLEAN_HQC256_CLEAN_fft(uint16_t *w, const uint16_t *f, size_t f_coeffs) { } } + + /** * @brief Retrieves the error polynomial error from the evaluations w of the ELP (Error Locator Polynomial) on all field elements. * diff --git a/src/kem/hqc/pqclean_hqc-256_clean/fft.h b/src/kem/hqc/pqclean_hqc-256_clean/fft.h index 6fb827d07e..723203aba2 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/fft.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/fft.h @@ -1,6 +1,7 @@ #ifndef FFT_H #define FFT_H + /** * @file fft.h * @brief Header file of fft.c @@ -13,4 +14,5 @@ void PQCLEAN_HQC256_CLEAN_fft(uint16_t *w, const uint16_t *f, size_t f_coeffs); void PQCLEAN_HQC256_CLEAN_fft_retrieve_error_poly(uint8_t *error, const uint16_t *w); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/gf.c b/src/kem/hqc/pqclean_hqc-256_clean/gf.c index 1cbf15080b..0c4eb67503 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/gf.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/gf.c @@ -7,6 +7,7 @@ * @brief Galois field implementation */ + /** * @brief Computes the number of trailing zero bits. * @@ -23,6 +24,8 @@ static uint16_t trailing_zero_bits_count(uint16_t a) { return tmp; } + + /** * Reduces polynomial x modulo primitive polynomial GF_POLY. * @returns x mod GF_POLY @@ -57,6 +60,8 @@ static uint16_t gf_reduce(uint64_t x, size_t deg_x) { return (uint16_t)x; } + + /** * Carryless multiplication of two polynomials a and b. * @@ -105,6 +110,8 @@ static void gf_carryless_mul(uint8_t c[2], uint8_t a, uint8_t b) { c[1] = (uint8_t)h; } + + /** * Multiplies two elements of GF(2^GF_M). * @returns the product a*b @@ -118,6 +125,8 @@ uint16_t PQCLEAN_HQC256_CLEAN_gf_mul(uint16_t a, uint16_t b) { return gf_reduce(tmp, 2 * (PARAM_M - 1)); } + + /** * @brief Squares an element of GF(2^PARAM_M). * @returns a^2 @@ -134,6 +143,8 @@ uint16_t PQCLEAN_HQC256_CLEAN_gf_square(uint16_t a) { return gf_reduce(s, 2 * (PARAM_M - 1)); } + + /** * @brief Computes the inverse of an element of GF(2^PARAM_M), * using the addition chain 1 2 3 4 7 11 15 30 60 120 127 254 diff --git a/src/kem/hqc/pqclean_hqc-256_clean/gf.h b/src/kem/hqc/pqclean_hqc-256_clean/gf.h index bf9319dca5..06c55a2462 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/gf.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/gf.h @@ -1,6 +1,7 @@ #ifndef GF_H #define GF_H + /** * @file gf.h * @brief Header file of gf.c @@ -8,6 +9,7 @@ #include + /** * Powers of the root alpha of 1 + x^2 + x^3 + x^4 + x^8. * The last two elements are needed by the PQCLEAN_HQC256_CLEAN_gf_mul function @@ -15,16 +17,21 @@ */ static const uint16_t gf_exp [258] = { 1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38, 76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192, 157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35, 70, 140, 5, 10, 20, 40, 80, 160, 93, 186, 105, 210, 185, 111, 222, 161, 95, 190, 97, 194, 153, 47, 94, 188, 101, 202, 137, 15, 30, 60, 120, 240, 253, 231, 211, 187, 107, 214, 177, 127, 254, 225, 223, 163, 91, 182, 113, 226, 217, 175, 67, 134, 17, 34, 68, 136, 13, 26, 52, 104, 208, 189, 103, 206, 129, 31, 62, 124, 248, 237, 199, 147, 59, 118, 236, 197, 151, 51, 102, 204, 133, 23, 46, 92, 184, 109, 218, 169, 79, 158, 33, 66, 132, 21, 42, 84, 168, 77, 154, 41, 82, 164, 85, 170, 73, 146, 57, 114, 228, 213, 183, 115, 230, 209, 191, 99, 198, 145, 63, 126, 252, 229, 215, 179, 123, 246, 241, 255, 227, 219, 171, 75, 150, 49, 98, 196, 149, 55, 110, 220, 165, 87, 174, 65, 130, 25, 50, 100, 200, 141, 7, 14, 28, 56, 112, 224, 221, 167, 83, 166, 81, 162, 89, 178, 121, 242, 249, 239, 195, 155, 43, 86, 172, 69, 138, 9, 18, 36, 72, 144, 61, 122, 244, 245, 247, 243, 251, 235, 203, 139, 11, 22, 44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71, 142, 1, 2, 4 }; + + /** * Logarithm of elements of GF(2^8) to the base alpha (root of 1 + x^2 + x^3 + x^4 + x^8). * The logarithm of 0 is set to 0 by convention. */ static const uint16_t gf_log [256] = { 0, 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75, 4, 100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113, 5, 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69, 29, 181, 194, 125, 106, 39, 249, 185, 201, 154, 9, 120, 77, 228, 114, 166, 6, 191, 139, 98, 102, 221, 48, 253, 226, 152, 37, 179, 16, 145, 34, 136, 54, 208, 148, 206, 143, 150, 219, 189, 241, 210, 19, 92, 131, 56, 70, 64, 30, 66, 182, 163, 195, 72, 126, 110, 107, 58, 40, 84, 250, 133, 186, 61, 202, 94, 155, 159, 10, 21, 121, 43, 78, 212, 229, 172, 115, 243, 167, 87, 7, 112, 192, 247, 140, 128, 99, 13, 103, 74, 222, 237, 49, 197, 254, 24, 227, 165, 153, 119, 38, 184, 180, 124, 17, 68, 146, 217, 35, 32, 137, 46, 55, 63, 209, 91, 149, 188, 207, 205, 144, 135, 151, 178, 220, 252, 190, 97, 242, 86, 211, 171, 20, 42, 93, 158, 132, 60, 57, 83, 71, 109, 65, 162, 31, 45, 67, 216, 183, 123, 164, 118, 196, 23, 73, 236, 127, 12, 111, 246, 108, 161, 59, 82, 41, 157, 85, 170, 251, 96, 134, 177, 187, 204, 62, 90, 203, 89, 95, 176, 156, 169, 160, 81, 11, 245, 22, 235, 122, 117, 44, 215, 79, 174, 213, 233, 230, 231, 173, 232, 116, 214, 244, 234, 168, 80, 88, 175 }; + + uint16_t PQCLEAN_HQC256_CLEAN_gf_mul(uint16_t a, uint16_t b); uint16_t PQCLEAN_HQC256_CLEAN_gf_square(uint16_t a); uint16_t PQCLEAN_HQC256_CLEAN_gf_inverse(uint16_t a); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/gf2x.c b/src/kem/hqc/pqclean_hqc-256_clean/gf2x.c index 695ffa8e43..713f276b61 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/gf2x.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/gf2x.c @@ -7,6 +7,7 @@ * @brief Implementation of multiplication of two polynomials */ + /** * @brief Caryless multiplication of two words of 64 bits * diff --git a/src/kem/hqc/pqclean_hqc-256_clean/gf2x.h b/src/kem/hqc/pqclean_hqc-256_clean/gf2x.h index bd00b2a160..0088672fde 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/gf2x.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/gf2x.h @@ -9,4 +9,5 @@ void PQCLEAN_HQC256_CLEAN_vect_mul(uint64_t *o, const uint64_t *v1, const uint64_t *v2); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/hqc.c b/src/kem/hqc/pqclean_hqc-256_clean/hqc.c index cb3b2f128c..dfa4787dea 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/hqc.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/hqc.c @@ -12,6 +12,8 @@ * @brief Implementation of hqc.h */ + + /** * @brief Keygen of the HQC_PKE IND_CPA scheme * @@ -59,6 +61,8 @@ void PQCLEAN_HQC256_CLEAN_hqc_pke_keygen(uint8_t *pk, uint8_t *sk) { PQCLEAN_HQC256_CLEAN_seedexpander_release(&sk_seedexpander); } + + /** * @brief Encryption of the HQC_PKE IND_CPA scheme * @@ -108,6 +112,8 @@ void PQCLEAN_HQC256_CLEAN_hqc_pke_encrypt(uint64_t *u, uint64_t *v, uint8_t *m, PQCLEAN_HQC256_CLEAN_seedexpander_release(&vec_seedexpander); } + + /** * @brief Decryption of the HQC_PKE IND_CPA scheme * @@ -132,6 +138,7 @@ uint8_t PQCLEAN_HQC256_CLEAN_hqc_pke_decrypt(uint8_t *m, uint8_t *sigma, const u PQCLEAN_HQC256_CLEAN_vect_mul(tmp2, y, u); PQCLEAN_HQC256_CLEAN_vect_add(tmp2, tmp1, tmp2, VEC_N_SIZE_64); + // Compute m by decoding v - u.y PQCLEAN_HQC256_CLEAN_code_decode(m, tmp2); diff --git a/src/kem/hqc/pqclean_hqc-256_clean/hqc.h b/src/kem/hqc/pqclean_hqc-256_clean/hqc.h index bd229d2517..34dd4cfadd 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/hqc.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/hqc.h @@ -1,6 +1,7 @@ #ifndef HQC_H #define HQC_H + /** * @file hqc.h * @brief Functions of the HQC_PKE IND_CPA scheme @@ -14,4 +15,5 @@ void PQCLEAN_HQC256_CLEAN_hqc_pke_encrypt(uint64_t *u, uint64_t *v, uint8_t *m, uint8_t PQCLEAN_HQC256_CLEAN_hqc_pke_decrypt(uint8_t *m, uint8_t *sigma, const uint64_t *u, const uint64_t *v, const unsigned char *sk); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/kem.c b/src/kem/hqc/pqclean_hqc-256_clean/kem.c index d4c6a08fa6..2929ba08e0 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/kem.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/kem.c @@ -14,6 +14,8 @@ * @brief Implementation of api.h */ + + /** * @brief Keygen of the HQC_KEM IND_CAA2 scheme * @@ -32,6 +34,8 @@ int PQCLEAN_HQC256_CLEAN_crypto_kem_keypair(uint8_t *pk, uint8_t *sk) { return 0; } + + /** * @brief Encapsulation of the HQC_KEM IND_CAA2 scheme * @@ -71,9 +75,12 @@ int PQCLEAN_HQC256_CLEAN_crypto_kem_enc(uint8_t *ct, uint8_t *ss, const uint8_t // Computing ciphertext PQCLEAN_HQC256_CLEAN_hqc_ciphertext_to_string(ct, u, v, salt); + return 0; } + + /** * @brief Decapsulation of the HQC_KEM IND_CAA2 scheme * @@ -126,5 +133,6 @@ int PQCLEAN_HQC256_CLEAN_crypto_kem_dec(uint8_t *ss, const uint8_t *ct, const ui PQCLEAN_HQC256_CLEAN_store8_arr(mc + VEC_K_SIZE_BYTES + VEC_N_SIZE_BYTES, VEC_N1N2_SIZE_BYTES, v, VEC_N1N2_SIZE_64); PQCLEAN_HQC256_CLEAN_shake256_512_ds(&shake256state, ss, mc, VEC_K_SIZE_BYTES + VEC_N_SIZE_BYTES + VEC_N1N2_SIZE_BYTES, K_FCT_DOMAIN); + return (result & 1) - 1; } diff --git a/src/kem/hqc/pqclean_hqc-256_clean/parameters.h b/src/kem/hqc/pqclean_hqc-256_clean/parameters.h index 6ab60adb9a..725ff3758c 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/parameters.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/parameters.h @@ -1,12 +1,14 @@ #ifndef HQC_PARAMETERS_H #define HQC_PARAMETERS_H + /** * @file parameters.h * @brief Parameters of the HQC_KEM IND-CCA2 scheme */ #include "api.h" + #define CEIL_DIVIDE(a, b) (((a)+(b)-1)/(b)) /*!< Divide a by b and ceil the result*/ /* diff --git a/src/kem/hqc/pqclean_hqc-256_clean/parsing.c b/src/kem/hqc/pqclean_hqc-256_clean/parsing.c index 3ad6088ea8..fb34da7aba 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/parsing.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/parsing.c @@ -8,6 +8,7 @@ * @brief Functions to parse secret key, public key and ciphertext of the HQC scheme */ + static uint64_t load8(const uint8_t *in) { uint64_t ret = in[7]; @@ -71,6 +72,8 @@ void PQCLEAN_HQC256_CLEAN_hqc_secret_key_to_string(uint8_t *sk, const uint8_t *s memcpy(sk + SEED_BYTES + VEC_K_SIZE_BYTES, pk, PUBLIC_KEY_BYTES); } + + /** * @brief Parse a secret key from a string * @@ -95,6 +98,8 @@ void PQCLEAN_HQC256_CLEAN_hqc_secret_key_from_string(uint64_t *x, uint64_t *y, u PQCLEAN_HQC256_CLEAN_seedexpander_release(&sk_seedexpander); } + + /** * @brief Parse a public key into a string * @@ -109,6 +114,8 @@ void PQCLEAN_HQC256_CLEAN_hqc_public_key_to_string(uint8_t *pk, const uint8_t *p PQCLEAN_HQC256_CLEAN_store8_arr(pk + SEED_BYTES, VEC_N_SIZE_BYTES, s, VEC_N_SIZE_64); } + + /** * @brief Parse a public key from a string * @@ -129,6 +136,8 @@ void PQCLEAN_HQC256_CLEAN_hqc_public_key_from_string(uint64_t *h, uint64_t *s, c PQCLEAN_HQC256_CLEAN_seedexpander_release(&pk_seedexpander); } + + /** * @brief Parse a ciphertext into a string * @@ -145,6 +154,8 @@ void PQCLEAN_HQC256_CLEAN_hqc_ciphertext_to_string(uint8_t *ct, const uint64_t * memcpy(ct + VEC_N_SIZE_BYTES + VEC_N1N2_SIZE_BYTES, salt, SALT_SIZE_BYTES); } + + /** * @brief Parse a ciphertext from a string * diff --git a/src/kem/hqc/pqclean_hqc-256_clean/parsing.h b/src/kem/hqc/pqclean_hqc-256_clean/parsing.h index 9655588732..b00abe4fab 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/parsing.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/parsing.h @@ -1,6 +1,7 @@ #ifndef PARSING_H #define PARSING_H + /** * @file parsing.h * @brief Header file for parsing.c @@ -13,16 +14,20 @@ void PQCLEAN_HQC256_CLEAN_load8_arr(uint64_t *out64, size_t outlen, const uint8_ void PQCLEAN_HQC256_CLEAN_store8_arr(uint8_t *out8, size_t outlen, const uint64_t *in64, size_t inlen); + void PQCLEAN_HQC256_CLEAN_hqc_secret_key_to_string(uint8_t *sk, const uint8_t *sk_seed, const uint8_t *sigma, const uint8_t *pk); void PQCLEAN_HQC256_CLEAN_hqc_secret_key_from_string(uint64_t *x, uint64_t *y, uint8_t *sigma, uint8_t *pk, const uint8_t *sk); + void PQCLEAN_HQC256_CLEAN_hqc_public_key_to_string(uint8_t *pk, const uint8_t *pk_seed, const uint64_t *s); void PQCLEAN_HQC256_CLEAN_hqc_public_key_from_string(uint64_t *h, uint64_t *s, const uint8_t *pk); + void PQCLEAN_HQC256_CLEAN_hqc_ciphertext_to_string(uint8_t *ct, const uint64_t *u, const uint64_t *v, const uint8_t *salt); void PQCLEAN_HQC256_CLEAN_hqc_ciphertext_from_string(uint64_t *u, uint64_t *v, uint8_t *salt, const uint8_t *ct); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/reed_muller.c b/src/kem/hqc/pqclean_hqc-256_clean/reed_muller.c index 29ab7d0b82..9e8101cd12 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/reed_muller.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/reed_muller.c @@ -7,6 +7,7 @@ * @brief Constant time implementation of Reed-Muller code RM(1,7) */ + // number of repeated code words #define MULTIPLICITY CEIL_DIVIDE(PARAM_N2, 128) @@ -52,6 +53,8 @@ static void encode(uint64_t *cword, uint8_t message) { cword[1] |= first_word; } + + /** * @brief Hadamard transform * @@ -80,6 +83,8 @@ static void hadamard(uint16_t src[128], uint16_t dst[128]) { } } + + /** * @brief Add multiple codewords into expanded codeword * @@ -110,6 +115,8 @@ static void expand_and_sum(uint16_t dest[128], const uint64_t src[2 * MULTIPLICI } } + + /** * @brief Finding the location of the highest value * @@ -137,6 +144,8 @@ static uint8_t find_peaks(const uint16_t transform[128]) { return (uint8_t) pos; } + + /** * @brief Encodes the received word * @@ -157,6 +166,8 @@ void PQCLEAN_HQC256_CLEAN_reed_muller_encode(uint64_t *cdw, const uint8_t *msg) } } + + /** * @brief Decodes the received word * diff --git a/src/kem/hqc/pqclean_hqc-256_clean/reed_muller.h b/src/kem/hqc/pqclean_hqc-256_clean/reed_muller.h index db665d2e1a..00b83b0669 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/reed_muller.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/reed_muller.h @@ -1,6 +1,7 @@ #ifndef REED_MULLER_H #define REED_MULLER_H + /** * @file reed_muller.h * @brief Header file of reed_muller.c @@ -12,4 +13,5 @@ void PQCLEAN_HQC256_CLEAN_reed_muller_encode(uint64_t *cdw, const uint8_t *msg); void PQCLEAN_HQC256_CLEAN_reed_muller_decode(uint8_t *msg, const uint64_t *cdw); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/reed_solomon.c b/src/kem/hqc/pqclean_hqc-256_clean/reed_solomon.c index 654c202bce..7d742dee73 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/reed_solomon.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/reed_solomon.c @@ -9,6 +9,7 @@ * @brief Constant time implementation of Reed-Solomon codes */ + /** * @brief Encodes a message message of PARAM_K bits to a Reed-Solomon codeword codeword of PARAM_N1 bytes * @@ -44,6 +45,8 @@ void PQCLEAN_HQC256_CLEAN_reed_solomon_encode(uint8_t *cdw, const uint8_t *msg) memcpy(cdw + PARAM_N1 - PARAM_K, msg, PARAM_K); } + + /** * @brief Computes 2 * PARAM_DELTA syndromes * @@ -59,6 +62,8 @@ static void compute_syndromes(uint16_t *syndromes, uint8_t *cdw) { } } + + /** * @brief Computes the error locator polynomial (ELP) sigma * @@ -138,6 +143,8 @@ static uint16_t compute_elp(uint16_t *sigma, const uint16_t *syndromes) { return deg_sigma; } + + /** * @brief Computes the error polynomial error from the error locator polynomial sigma * @@ -154,6 +161,8 @@ static void compute_roots(uint8_t *error, uint16_t *sigma) { PQCLEAN_HQC256_CLEAN_fft_retrieve_error_poly(error, w); } + + /** * @brief Computes the polynomial z(x) * @@ -187,6 +196,8 @@ static void compute_z_poly(uint16_t *z, const uint16_t *sigma, uint16_t degree, } } + + /** * @brief Computes the error values * @@ -257,6 +268,8 @@ static void compute_error_values(uint16_t *error_values, const uint16_t *z, cons } } + + /** * @brief Correct the errors * @@ -270,6 +283,8 @@ static void correct_errors(uint8_t *cdw, const uint16_t *error_values) { } } + + /** * @brief Decodes the received word * diff --git a/src/kem/hqc/pqclean_hqc-256_clean/reed_solomon.h b/src/kem/hqc/pqclean_hqc-256_clean/reed_solomon.h index 2618e90257..522a98c52b 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/reed_solomon.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/reed_solomon.h @@ -1,6 +1,7 @@ #ifndef REED_SOLOMON_H #define REED_SOLOMON_H + /** * @file reed_solomon.h * @brief Header file of reed_solomon.c @@ -14,4 +15,5 @@ void PQCLEAN_HQC256_CLEAN_reed_solomon_encode(uint8_t *cdw, const uint8_t *msg); void PQCLEAN_HQC256_CLEAN_reed_solomon_decode(uint8_t *msg, uint8_t *cdw); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/shake_ds.c b/src/kem/hqc/pqclean_hqc-256_clean/shake_ds.c index 233244a7c4..3b80cc74e7 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/shake_ds.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/shake_ds.c @@ -1,10 +1,13 @@ #include "shake_ds.h" + /** * @file shake_ds.c * @brief Implementation SHAKE-256 with incremental API and domain separation */ + + /** * @brief SHAKE-256 with incremental API and domain separation * diff --git a/src/kem/hqc/pqclean_hqc-256_clean/shake_ds.h b/src/kem/hqc/pqclean_hqc-256_clean/shake_ds.h index b9e2c5a1dd..eac52bfe29 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/shake_ds.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/shake_ds.h @@ -1,6 +1,7 @@ #ifndef SHAKE_DS_H #define SHAKE_DS_H + /** * @file shake_ds.h * @brief Header file of shake_ds.c @@ -11,4 +12,5 @@ void PQCLEAN_HQC256_CLEAN_shake256_512_ds(shake256incctx *state, uint8_t *output, const uint8_t *input, size_t inlen, uint8_t domain); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/shake_prng.c b/src/kem/hqc/pqclean_hqc-256_clean/shake_prng.c index 225ea0117f..10ee0900a4 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/shake_prng.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/shake_prng.c @@ -7,6 +7,7 @@ * @brief Implementation of SHAKE-256 based seed expander */ + /** * @brief Initialise a SHAKE-256 based seed expander * @@ -24,6 +25,8 @@ void PQCLEAN_HQC256_CLEAN_seedexpander_init(seedexpander_state *state, const uin shake256_inc_finalize(state); } + + /** * @brief A SHAKE-256 based seed expander * diff --git a/src/kem/hqc/pqclean_hqc-256_clean/shake_prng.h b/src/kem/hqc/pqclean_hqc-256_clean/shake_prng.h index 918080a79c..f07fed6fb7 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/shake_prng.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/shake_prng.h @@ -1,6 +1,7 @@ #ifndef SHAKE_PRNG_H #define SHAKE_PRNG_H + /** * @file shake_prng.h * @brief Header file of shake_prng.c @@ -17,4 +18,5 @@ void PQCLEAN_HQC256_CLEAN_seedexpander(seedexpander_state *state, uint8_t *outpu void PQCLEAN_HQC256_CLEAN_seedexpander_release(seedexpander_state *state); + #endif diff --git a/src/kem/hqc/pqclean_hqc-256_clean/vector.c b/src/kem/hqc/pqclean_hqc-256_clean/vector.c index 119e1c83be..08a78ffec3 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/vector.c +++ b/src/kem/hqc/pqclean_hqc-256_clean/vector.c @@ -9,6 +9,7 @@ * @brief Implementation of vectors sampling and some utilities for the HQC scheme */ + static uint32_t m_val[149] = { 74517, 74518, 74520, 74521, 74522, 74524, 74525, 74526, 74527, 74529, 74530, 74531, 74533, 74534, 74535, 74536, 74538, 74539, 74540, 74542, 74543, 74544, 74545, 74547, 74548, 74549, 74551, 74552, 74553, 74555, 74556, 74557, 74558, 74560, 74561, 74562, 74564, 74565, 74566, 74567, 74569, 74570, 74571, 74573, 74574, 74575, 74577, 74578, 74579, 74580, 74582, 74583, 74584, 74586, 74587, 74588, 74590, 74591, 74592, 74593, 74595, 74596, 74597, 74599, 74600, 74601, 74602, 74604, 74605, 74606, 74608, 74609, 74610, 74612, 74613, 74614, 74615, 74617, 74618, 74619, 74621, 74622, 74623, 74625, 74626, 74627, 74628, 74630, 74631, 74632, 74634, 74635, 74636, 74637, 74639, 74640, 74641, 74643, 74644, 74645, 74647, 74648, 74649, 74650, 74652, 74653, 74654, 74656, 74657, 74658, 74660, 74661, 74662, 74663, 74665, 74666, 74667, 74669, 74670, 74671, 74673, 74674, 74675, 74676, 74678, 74679, 74680, 74682, 74683, 74684, 74685, 74687, 74688, 74689, 74691, 74692, 74693, 74695, 74696, 74697, 74698, 74700, 74701, 74702, 74704, 74705, 74706, 74708, 74709 }; /** @@ -110,6 +111,8 @@ void PQCLEAN_HQC256_CLEAN_vect_set_random_fixed_weight(seedexpander_state *ctx, } } + + /** * @brief Generates a random vector of dimension PARAM_N * @@ -128,6 +131,8 @@ void PQCLEAN_HQC256_CLEAN_vect_set_random(seedexpander_state *ctx, uint64_t *v) v[VEC_N_SIZE_64 - 1] &= RED_MASK; } + + /** * @brief Adds two vectors * @@ -142,6 +147,8 @@ void PQCLEAN_HQC256_CLEAN_vect_add(uint64_t *o, const uint64_t *v1, const uint64 } } + + /** * @brief Compares two vectors * @@ -160,6 +167,8 @@ uint8_t PQCLEAN_HQC256_CLEAN_vect_compare(const uint8_t *v1, const uint8_t *v2, return (r - 1) >> 8; } + + /** * @brief Resize a vector so that it contains size_o bits * diff --git a/src/kem/hqc/pqclean_hqc-256_clean/vector.h b/src/kem/hqc/pqclean_hqc-256_clean/vector.h index 5e3b6aa3d7..9067320d03 100644 --- a/src/kem/hqc/pqclean_hqc-256_clean/vector.h +++ b/src/kem/hqc/pqclean_hqc-256_clean/vector.h @@ -1,6 +1,7 @@ #ifndef VECTOR_H #define VECTOR_H + /** * @file vector.h * @brief Header file for vector.c @@ -13,10 +14,12 @@ void PQCLEAN_HQC256_CLEAN_vect_set_random_fixed_weight(seedexpander_state *ctx, void PQCLEAN_HQC256_CLEAN_vect_set_random(seedexpander_state *ctx, uint64_t *v); + void PQCLEAN_HQC256_CLEAN_vect_add(uint64_t *o, const uint64_t *v1, const uint64_t *v2, size_t size); uint8_t PQCLEAN_HQC256_CLEAN_vect_compare(const uint8_t *v1, const uint8_t *v2, size_t size); void PQCLEAN_HQC256_CLEAN_vect_resize(uint64_t *o, uint32_t size_o, const uint64_t *v, uint32_t size_v); + #endif