pq_crypto 0.3.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +56 -0
- data/CHANGELOG.md +62 -0
- data/GET_STARTED.md +366 -40
- data/README.md +76 -233
- data/SECURITY.md +107 -82
- data/ext/pqcrypto/extconf.rb +169 -87
- data/ext/pqcrypto/mldsa_api.h +1 -48
- data/ext/pqcrypto/mlkem_api.h +1 -18
- data/ext/pqcrypto/pq_externalmu.c +89 -204
- data/ext/pqcrypto/pqcrypto_native_api.h +129 -0
- data/ext/pqcrypto/pqcrypto_ruby_secure.c +484 -84
- data/ext/pqcrypto/pqcrypto_secure.c +203 -78
- data/ext/pqcrypto/pqcrypto_secure.h +53 -14
- data/ext/pqcrypto/pqcrypto_version.h +7 -0
- data/ext/pqcrypto/randombytes.h +9 -0
- data/ext/pqcrypto/vendor/.vendored +10 -5
- data/ext/pqcrypto/vendor/mldsa-native/BUILDING.md +105 -0
- data/ext/pqcrypto/vendor/mldsa-native/LICENSE +286 -0
- data/ext/pqcrypto/vendor/mldsa-native/META.yml +24 -0
- data/ext/pqcrypto/vendor/mldsa-native/README.md +221 -0
- data/ext/pqcrypto/vendor/mldsa-native/SECURITY.md +8 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native.c +721 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native.h +975 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native_asm.S +724 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native_config.h +723 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/cbmc.h +166 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/common.h +321 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/ct.c +21 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/ct.h +385 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/debug.c +73 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/debug.h +130 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/fips202.c +277 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/fips202.h +244 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/fips202x4.c +182 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/fips202x4.h +117 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.c +438 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.h +105 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/auto.h +71 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/fips202_native_aarch64.h +62 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_scalar_asm.S +376 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_v84a_asm.S +204 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x2_v84a_asm.S +259 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_scalar_hybrid_asm.S +1077 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_v84a_scalar_hybrid_asm.S +987 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccakf1600_round_constants.c +41 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_scalar.h +26 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_v84a.h +35 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x2_v84a.h +37 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_scalar.h +27 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_v84a_scalar.h +36 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/api.h +69 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/README.md +10 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/mve.h +32 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/fips202_native_armv81m.h +20 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.S +638 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.c +136 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccakf1600_round_constants.c +52 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/auto.h +29 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/KeccakP_1600_times4_SIMD256.c +488 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/KeccakP_1600_times4_SIMD256.h +16 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/xkcp.h +31 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/meta.h +247 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/aarch64_zetas.c +231 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/arith_native_aarch64.h +150 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/intt.S +753 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/mld_polyvecl_pointwise_acc_montgomery_l4.S +129 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/mld_polyvecl_pointwise_acc_montgomery_l5.S +145 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/mld_polyvecl_pointwise_acc_montgomery_l7.S +177 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/ntt.S +653 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/pointwise_montgomery.S +79 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_caddq_asm.S +53 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_chknorm_asm.S +55 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_decompose_32_asm.S +85 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_decompose_88_asm.S +85 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_use_hint_32_asm.S +102 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_use_hint_88_asm.S +110 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/polyz_unpack_17_asm.S +72 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/polyz_unpack_19_asm.S +69 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/polyz_unpack_table.c +40 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_asm.S +189 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_eta2_asm.S +135 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_eta4_asm.S +128 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_eta_table.c +543 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_table.c +62 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/api.h +649 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/meta.h +23 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/meta.h +315 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/arith_native_x86_64.h +124 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/consts.c +157 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/consts.h +27 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/intt.S +2311 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/ntt.S +2383 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/nttunpack.S +239 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/pointwise.S +131 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/pointwise_acc_l4.S +139 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/pointwise_acc_l5.S +155 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/pointwise_acc_l7.S +187 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_caddq_avx2.c +61 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_chknorm_avx2.c +52 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_decompose_32_avx2.c +155 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_decompose_88_avx2.c +155 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_use_hint_32_avx2.c +102 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_use_hint_88_avx2.c +104 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/polyz_unpack_17_avx2.c +91 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/polyz_unpack_19_avx2.c +93 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_avx2.c +126 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_eta2_avx2.c +155 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_eta4_avx2.c +139 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_table.c +160 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/packing.c +293 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/packing.h +224 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/params.h +77 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly.c +991 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly.h +393 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly_kl.c +946 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly_kl.h +360 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec.c +877 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec.h +725 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/randombytes.h +26 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/reduce.h +139 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/rounding.h +249 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sign.c +1511 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sign.h +806 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/symmetric.h +68 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sys.h +268 -0
- data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/zetas.inc +55 -0
- data/ext/pqcrypto/vendor/mlkem-native/BUILDING.md +104 -0
- data/ext/pqcrypto/vendor/mlkem-native/LICENSE +294 -0
- data/ext/pqcrypto/vendor/mlkem-native/META.yml +30 -0
- data/ext/pqcrypto/vendor/mlkem-native/README.md +223 -0
- data/ext/pqcrypto/vendor/mlkem-native/RELEASE.md +86 -0
- data/ext/pqcrypto/vendor/mlkem-native/SECURITY.md +8 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/README.md +23 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native.c +660 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native.h +538 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native_asm.S +681 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native_config.h +709 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/cbmc.h +174 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/common.h +274 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/compress.c +717 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/compress.h +688 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/debug.c +64 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/debug.h +128 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/fips202.c +251 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/fips202.h +158 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/fips202x4.c +208 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/fips202x4.h +80 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/keccakf1600.c +463 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/keccakf1600.h +98 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/auto.h +70 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/fips202_native_aarch64.h +69 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x1_scalar_asm.S +375 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x1_v84a_asm.S +203 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x2_v84a_asm.S +258 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_scalar_hybrid_asm.S +1076 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_v84a_scalar_hybrid_asm.S +986 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccakf1600_round_constants.c +46 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x1_scalar.h +25 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x1_v84a.h +34 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x2_v84a.h +35 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x4_v8a_scalar.h +26 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x4_v8a_v84a_scalar.h +35 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/api.h +117 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/README.md +10 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/mve.h +79 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/fips202_native_armv81m.h +35 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.S +667 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.c +40 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/keccakf1600_round_constants.c +51 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/state_extract_bytes_x4_mve.S +290 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/state_xor_bytes_x4_mve.S +314 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/auto.h +28 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/x86_64/keccak_f1600_x4_avx2.h +33 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/x86_64/src/fips202_native_x86_64.h +41 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/x86_64/src/keccak_f1600_x4_avx2.S +451 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/x86_64/src/keccakf1600_constants.c +51 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/indcpa.c +622 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/indcpa.h +156 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/kem.c +446 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/kem.h +326 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/README.md +16 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/meta.h +122 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/aarch64_zetas.c +174 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/arith_native_aarch64.h +177 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/intt.S +628 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/ntt.S +562 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/poly_mulcache_compute_asm.S +127 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/poly_reduce_asm.S +150 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/poly_tobytes_asm.S +117 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/poly_tomont_asm.S +98 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k2.S +261 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k3.S +314 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k4.S +368 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/rej_uniform_asm.S +226 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/rej_uniform_table.c +542 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/api.h +637 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/meta.h +25 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/README.md +11 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/meta.h +128 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/arith_native_riscv64.h +45 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_debug.c +81 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_debug.h +145 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_izetas.inc +27 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_poly.c +805 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_zetas.inc +27 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_zetas_basemul.inc +39 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/README.md +4 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/meta.h +304 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/arith_native_x86_64.h +309 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/compress_consts.c +94 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/compress_consts.h +45 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/consts.c +102 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/consts.h +25 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/intt.S +719 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/mulcache_compute.S +90 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/ntt.S +639 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/nttfrombytes.S +193 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/ntttobytes.S +181 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/nttunpack.S +174 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_compress_d10.S +382 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_compress_d11.S +448 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_compress_d4.S +163 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_compress_d5.S +220 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_decompress_d10.S +228 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_decompress_d11.S +277 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_decompress_d4.S +180 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_decompress_d5.S +192 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/polyvec_basemul_acc_montgomery_cached_asm_k2.S +502 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/polyvec_basemul_acc_montgomery_cached_asm_k3.S +750 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/polyvec_basemul_acc_montgomery_cached_asm_k4.S +998 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/reduce.S +218 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/rej_uniform_asm.S +103 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/rej_uniform_table.c +544 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/tomont.S +155 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/params.h +76 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly.c +572 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly.h +317 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly_k.c +502 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly_k.h +668 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/randombytes.h +60 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/sampling.c +362 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/sampling.h +118 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/symmetric.h +70 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/sys.h +260 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/verify.c +20 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/verify.h +464 -0
- data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/zetas.inc +30 -0
- data/lib/pq_crypto/algorithm_registry.rb +200 -0
- data/lib/pq_crypto/hybrid_kem.rb +1 -12
- data/lib/pq_crypto/kem.rb +104 -13
- data/lib/pq_crypto/pkcs8.rb +387 -0
- data/lib/pq_crypto/serialization.rb +1 -14
- data/lib/pq_crypto/signature.rb +123 -17
- data/lib/pq_crypto/spki.rb +131 -0
- data/lib/pq_crypto/version.rb +1 -1
- data/lib/pq_crypto.rb +79 -20
- data/script/vendor_libs.rb +88 -155
- metadata +241 -73
- data/ext/pqcrypto/vendor/pqclean/common/aes.c +0 -639
- data/ext/pqcrypto/vendor/pqclean/common/aes.h +0 -64
- data/ext/pqcrypto/vendor/pqclean/common/compat.h +0 -73
- data/ext/pqcrypto/vendor/pqclean/common/crypto_declassify.h +0 -7
- data/ext/pqcrypto/vendor/pqclean/common/fips202.c +0 -928
- data/ext/pqcrypto/vendor/pqclean/common/fips202.h +0 -166
- data/ext/pqcrypto/vendor/pqclean/common/keccak2x/feat.S +0 -168
- data/ext/pqcrypto/vendor/pqclean/common/keccak2x/fips202x2.c +0 -684
- data/ext/pqcrypto/vendor/pqclean/common/keccak2x/fips202x2.h +0 -60
- data/ext/pqcrypto/vendor/pqclean/common/keccak4x/KeccakP-1600-times4-SIMD256.c +0 -1028
- data/ext/pqcrypto/vendor/pqclean/common/keccak4x/KeccakP-1600-times4-SnP.h +0 -50
- data/ext/pqcrypto/vendor/pqclean/common/keccak4x/KeccakP-1600-unrolling.macros +0 -198
- data/ext/pqcrypto/vendor/pqclean/common/keccak4x/Makefile +0 -8
- data/ext/pqcrypto/vendor/pqclean/common/keccak4x/Makefile.Microsoft_nmake +0 -8
- data/ext/pqcrypto/vendor/pqclean/common/keccak4x/SIMD256-config.h +0 -3
- data/ext/pqcrypto/vendor/pqclean/common/keccak4x/align.h +0 -34
- data/ext/pqcrypto/vendor/pqclean/common/keccak4x/brg_endian.h +0 -142
- data/ext/pqcrypto/vendor/pqclean/common/nistseedexpander.c +0 -101
- data/ext/pqcrypto/vendor/pqclean/common/nistseedexpander.h +0 -39
- data/ext/pqcrypto/vendor/pqclean/common/randombytes.c +0 -355
- data/ext/pqcrypto/vendor/pqclean/common/randombytes.h +0 -27
- data/ext/pqcrypto/vendor/pqclean/common/sha2.c +0 -769
- data/ext/pqcrypto/vendor/pqclean/common/sha2.h +0 -173
- data/ext/pqcrypto/vendor/pqclean/common/sp800-185.c +0 -156
- data/ext/pqcrypto/vendor/pqclean/common/sp800-185.h +0 -27
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/LICENSE +0 -5
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/Makefile +0 -19
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/Makefile.Microsoft_nmake +0 -23
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/api.h +0 -18
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/cbd.c +0 -83
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/cbd.h +0 -11
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/indcpa.c +0 -327
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/indcpa.h +0 -22
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/kem.c +0 -164
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/kem.h +0 -23
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/ntt.c +0 -146
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/ntt.h +0 -14
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/params.h +0 -36
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/poly.c +0 -299
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/poly.h +0 -37
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/polyvec.c +0 -188
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/polyvec.h +0 -26
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/reduce.c +0 -41
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/reduce.h +0 -13
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/symmetric-shake.c +0 -71
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/symmetric.h +0 -30
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/verify.c +0 -67
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/verify.h +0 -13
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/LICENSE +0 -5
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/Makefile +0 -19
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/Makefile.Microsoft_nmake +0 -23
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/api.h +0 -50
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/ntt.c +0 -98
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/ntt.h +0 -10
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/packing.c +0 -261
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/packing.h +0 -31
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/params.h +0 -44
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/poly.c +0 -799
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/poly.h +0 -52
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/polyvec.c +0 -415
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/polyvec.h +0 -65
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/reduce.c +0 -69
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/reduce.h +0 -17
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/rounding.c +0 -92
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/rounding.h +0 -14
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/sign.c +0 -407
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/sign.h +0 -47
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/symmetric-shake.c +0 -26
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/symmetric.h +0 -34
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) The mldsa-native project authors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
|
|
4
|
+
*/
|
|
5
|
+
#ifndef MLD_POLY_KL_H
|
|
6
|
+
#define MLD_POLY_KL_H
|
|
7
|
+
|
|
8
|
+
#include "cbmc.h"
|
|
9
|
+
#include "common.h"
|
|
10
|
+
#include "poly.h"
|
|
11
|
+
|
|
12
|
+
#define mld_poly_decompose MLD_NAMESPACE_KL(poly_decompose)
|
|
13
|
+
/*************************************************
|
|
14
|
+
* Name: mld_poly_decompose
|
|
15
|
+
*
|
|
16
|
+
* Description: For all coefficients c of the input polynomial,
|
|
17
|
+
* compute high and low bits c0, c1 such c mod MLDSA_Q = c1*ALPHA +
|
|
18
|
+
* c0 with -ALPHA/2 < c0 <= ALPHA/2 except
|
|
19
|
+
* c1 = (MLDSA_Q-1)/ALPHA where we set
|
|
20
|
+
* c1 = 0 and -ALPHA/2 <= c0 = c mod MLDSA_Q - MLDSA_Q < 0.
|
|
21
|
+
* Assumes coefficients to be standard representatives.
|
|
22
|
+
*
|
|
23
|
+
* Arguments: - mld_poly *a1: pointer to output polynomial with coefficients
|
|
24
|
+
* c1
|
|
25
|
+
* - mld_poly *a0: pointer to input/output polynomial. Output
|
|
26
|
+
* polynomial has coefficients c0
|
|
27
|
+
*
|
|
28
|
+
* Reference: The reference implementation has the input polynomial as a
|
|
29
|
+
* separate argument that may be aliased with either of the outputs.
|
|
30
|
+
* Removing the aliasing eases CBMC proofs.
|
|
31
|
+
*
|
|
32
|
+
**************************************************/
|
|
33
|
+
MLD_INTERNAL_API
|
|
34
|
+
void mld_poly_decompose(mld_poly *a1, mld_poly *a0)
|
|
35
|
+
__contract__(
|
|
36
|
+
requires(memory_no_alias(a1, sizeof(mld_poly)))
|
|
37
|
+
requires(memory_no_alias(a0, sizeof(mld_poly)))
|
|
38
|
+
requires(array_bound(a0->coeffs, 0, MLDSA_N, 0, MLDSA_Q))
|
|
39
|
+
assigns(memory_slice(a1, sizeof(mld_poly)))
|
|
40
|
+
assigns(memory_slice(a0, sizeof(mld_poly)))
|
|
41
|
+
ensures(array_bound(a1->coeffs, 0, MLDSA_N, 0, (MLDSA_Q-1)/(2*MLDSA_GAMMA2)))
|
|
42
|
+
ensures(array_abs_bound(a0->coeffs, 0, MLDSA_N, MLDSA_GAMMA2+1))
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
#define mld_poly_make_hint MLD_NAMESPACE_KL(poly_make_hint)
|
|
47
|
+
/*************************************************
|
|
48
|
+
* Name: mld_poly_make_hint
|
|
49
|
+
*
|
|
50
|
+
* Description: Compute hint polynomial. The coefficients of which indicate
|
|
51
|
+
* whether the low bits of the corresponding coefficient of
|
|
52
|
+
* the input polynomial overflow into the high bits.
|
|
53
|
+
*
|
|
54
|
+
* Arguments: - mld_poly *h: pointer to output hint polynomial
|
|
55
|
+
* - const mld_poly *a0: pointer to low part of input polynomial
|
|
56
|
+
* - const mld_poly *a1: pointer to high part of input polynomial
|
|
57
|
+
*
|
|
58
|
+
* Returns number of 1 bits.
|
|
59
|
+
**************************************************/
|
|
60
|
+
MLD_INTERNAL_API
|
|
61
|
+
MLD_MUST_CHECK_RETURN_VALUE
|
|
62
|
+
unsigned int mld_poly_make_hint(mld_poly *h, const mld_poly *a0,
|
|
63
|
+
const mld_poly *a1)
|
|
64
|
+
__contract__(
|
|
65
|
+
requires(memory_no_alias(h, sizeof(mld_poly)))
|
|
66
|
+
requires(memory_no_alias(a0, sizeof(mld_poly)))
|
|
67
|
+
requires(memory_no_alias(a1, sizeof(mld_poly)))
|
|
68
|
+
assigns(memory_slice(h, sizeof(mld_poly)))
|
|
69
|
+
ensures(return_value <= MLDSA_N)
|
|
70
|
+
ensures(array_bound(h->coeffs, 0, MLDSA_N, 0, 2))
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
#define mld_poly_use_hint MLD_NAMESPACE_KL(poly_use_hint)
|
|
74
|
+
/*************************************************
|
|
75
|
+
* Name: mld_poly_use_hint
|
|
76
|
+
*
|
|
77
|
+
* Description: Use hint polynomial to correct the high bits of a polynomial.
|
|
78
|
+
*
|
|
79
|
+
* Arguments: - mld_poly *b: pointer to output polynomial with corrected high
|
|
80
|
+
*bits
|
|
81
|
+
* - const mld_poly *a: pointer to input polynomial
|
|
82
|
+
* - const mld_poly *h: pointer to input hint polynomial
|
|
83
|
+
**************************************************/
|
|
84
|
+
MLD_INTERNAL_API
|
|
85
|
+
void mld_poly_use_hint(mld_poly *b, const mld_poly *a, const mld_poly *h)
|
|
86
|
+
__contract__(
|
|
87
|
+
requires(memory_no_alias(a, sizeof(mld_poly)))
|
|
88
|
+
requires(memory_no_alias(b, sizeof(mld_poly)))
|
|
89
|
+
requires(memory_no_alias(h, sizeof(mld_poly)))
|
|
90
|
+
requires(array_bound(a->coeffs, 0, MLDSA_N, 0, MLDSA_Q))
|
|
91
|
+
requires(array_bound(h->coeffs, 0, MLDSA_N, 0, 2))
|
|
92
|
+
assigns(memory_slice(b, sizeof(mld_poly)))
|
|
93
|
+
ensures(array_bound(b->coeffs, 0, MLDSA_N, 0, (MLDSA_Q-1)/(2*MLDSA_GAMMA2)))
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
|
|
97
|
+
#define mld_poly_uniform_eta_4x MLD_NAMESPACE_KL(poly_uniform_eta_4x)
|
|
98
|
+
/*************************************************
|
|
99
|
+
* Name: mld_poly_uniform_eta
|
|
100
|
+
*
|
|
101
|
+
* Description: Sample four polynomials with uniformly random coefficients
|
|
102
|
+
* in [-MLDSA_ETA,MLDSA_ETA] by performing rejection sampling on
|
|
103
|
+
* the output stream from SHAKE256(seed|nonce_i)
|
|
104
|
+
*
|
|
105
|
+
* Arguments: - mld_poly *r0: pointer to first output polynomial
|
|
106
|
+
* - mld_poly *r1: pointer to second output polynomial
|
|
107
|
+
* - mld_poly *r2: pointer to third output polynomial
|
|
108
|
+
* - mld_poly *r3: pointer to fourth output polynomial
|
|
109
|
+
* - const uint8_t seed[]: byte array with seed of length
|
|
110
|
+
* MLDSA_CRHBYTES
|
|
111
|
+
* - uint8_t nonce0: first nonce
|
|
112
|
+
* - uint8_t nonce1: second nonce
|
|
113
|
+
* - uint8_t nonce2: third nonce
|
|
114
|
+
* - uint8_t nonce3: fourth nonce
|
|
115
|
+
**************************************************/
|
|
116
|
+
MLD_INTERNAL_API
|
|
117
|
+
void mld_poly_uniform_eta_4x(mld_poly *r0, mld_poly *r1, mld_poly *r2,
|
|
118
|
+
mld_poly *r3, const uint8_t seed[MLDSA_CRHBYTES],
|
|
119
|
+
uint8_t nonce0, uint8_t nonce1, uint8_t nonce2,
|
|
120
|
+
uint8_t nonce3)
|
|
121
|
+
__contract__(
|
|
122
|
+
requires(memory_no_alias(r0, sizeof(mld_poly)))
|
|
123
|
+
requires(memory_no_alias(r1, sizeof(mld_poly)))
|
|
124
|
+
requires(memory_no_alias(r2, sizeof(mld_poly)))
|
|
125
|
+
requires(memory_no_alias(r3, sizeof(mld_poly)))
|
|
126
|
+
requires(memory_no_alias(seed, MLDSA_CRHBYTES))
|
|
127
|
+
assigns(memory_slice(r0, sizeof(mld_poly)))
|
|
128
|
+
assigns(memory_slice(r1, sizeof(mld_poly)))
|
|
129
|
+
assigns(memory_slice(r2, sizeof(mld_poly)))
|
|
130
|
+
assigns(memory_slice(r3, sizeof(mld_poly)))
|
|
131
|
+
ensures(array_abs_bound(r0->coeffs, 0, MLDSA_N, MLDSA_ETA + 1))
|
|
132
|
+
ensures(array_abs_bound(r1->coeffs, 0, MLDSA_N, MLDSA_ETA + 1))
|
|
133
|
+
ensures(array_abs_bound(r2->coeffs, 0, MLDSA_N, MLDSA_ETA + 1))
|
|
134
|
+
ensures(array_abs_bound(r3->coeffs, 0, MLDSA_N, MLDSA_ETA + 1))
|
|
135
|
+
);
|
|
136
|
+
#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY */
|
|
137
|
+
|
|
138
|
+
#if defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
|
|
139
|
+
#define mld_poly_uniform_eta MLD_NAMESPACE_KL(poly_uniform_eta)
|
|
140
|
+
/*************************************************
|
|
141
|
+
* Name: mld_poly_uniform_eta
|
|
142
|
+
*
|
|
143
|
+
* Description: Sample polynomial with uniformly random coefficients
|
|
144
|
+
* in [-MLDSA_ETA,MLDSA_ETA] by performing rejection sampling on
|
|
145
|
+
* the output stream from SHAKE256(seed|nonce)
|
|
146
|
+
*
|
|
147
|
+
* Arguments: - mld_poly *r: pointer to output polynomial
|
|
148
|
+
* - const uint8_t seed[]: byte array with seed of length
|
|
149
|
+
* MLDSA_CRHBYTES
|
|
150
|
+
* - uint8_t nonce: nonce
|
|
151
|
+
**************************************************/
|
|
152
|
+
MLD_INTERNAL_API
|
|
153
|
+
void mld_poly_uniform_eta(mld_poly *r, const uint8_t seed[MLDSA_CRHBYTES],
|
|
154
|
+
uint8_t nonce)
|
|
155
|
+
__contract__(
|
|
156
|
+
requires(memory_no_alias(r, sizeof(mld_poly)))
|
|
157
|
+
requires(memory_no_alias(seed, MLDSA_CRHBYTES))
|
|
158
|
+
assigns(memory_slice(r, sizeof(mld_poly)))
|
|
159
|
+
ensures(array_abs_bound(r->coeffs, 0, MLDSA_N, MLDSA_ETA + 1))
|
|
160
|
+
);
|
|
161
|
+
#endif /* MLD_CONFIG_SERIAL_FIPS202_ONLY */
|
|
162
|
+
|
|
163
|
+
#if MLD_CONFIG_PARAMETER_SET == 65 || defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
|
|
164
|
+
#define mld_poly_uniform_gamma1 MLD_NAMESPACE_KL(poly_uniform_gamma1)
|
|
165
|
+
/*************************************************
|
|
166
|
+
* Name: mld_poly_uniform_gamma1
|
|
167
|
+
*
|
|
168
|
+
* Description: Sample polynomial with uniformly random coefficients
|
|
169
|
+
* in [-(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1] by unpacking output
|
|
170
|
+
* stream of SHAKE256(seed|nonce)
|
|
171
|
+
*
|
|
172
|
+
* Arguments: - mld_poly *a: pointer to output polynomial
|
|
173
|
+
* - const uint8_t seed[]: byte array with seed of length
|
|
174
|
+
* MLDSA_CRHBYTES
|
|
175
|
+
* - uint16_t nonce: 16-bit nonce
|
|
176
|
+
**************************************************/
|
|
177
|
+
MLD_INTERNAL_API
|
|
178
|
+
void mld_poly_uniform_gamma1(mld_poly *a, const uint8_t seed[MLDSA_CRHBYTES],
|
|
179
|
+
uint16_t nonce)
|
|
180
|
+
__contract__(
|
|
181
|
+
requires(memory_no_alias(a, sizeof(mld_poly)))
|
|
182
|
+
requires(memory_no_alias(seed, MLDSA_CRHBYTES))
|
|
183
|
+
assigns(memory_slice(a, sizeof(mld_poly)))
|
|
184
|
+
ensures(array_bound(a->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))
|
|
185
|
+
);
|
|
186
|
+
#endif /* MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_SERIAL_FIPS202_ONLY */
|
|
187
|
+
|
|
188
|
+
#if !defined(MLD_CONFIG_SERIAL_FIPS202_ONLY)
|
|
189
|
+
#define mld_poly_uniform_gamma1_4x MLD_NAMESPACE_KL(poly_uniform_gamma1_4x)
|
|
190
|
+
/*************************************************
|
|
191
|
+
* Name: mld_poly_uniform_gamma1_4x
|
|
192
|
+
*
|
|
193
|
+
* Description: Sample polynomial with uniformly random coefficients
|
|
194
|
+
* in [-(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1] by unpacking output
|
|
195
|
+
* stream of SHAKE256(seed|nonce)
|
|
196
|
+
*
|
|
197
|
+
* Arguments: - mld_poly *a: pointer to output polynomial
|
|
198
|
+
* - const uint8_t seed[]: byte array with seed of length
|
|
199
|
+
* MLDSA_CRHBYTES
|
|
200
|
+
* - uint16_t nonce: 16-bit nonce
|
|
201
|
+
**************************************************/
|
|
202
|
+
MLD_INTERNAL_API
|
|
203
|
+
void mld_poly_uniform_gamma1_4x(mld_poly *r0, mld_poly *r1, mld_poly *r2,
|
|
204
|
+
mld_poly *r3,
|
|
205
|
+
const uint8_t seed[MLDSA_CRHBYTES],
|
|
206
|
+
uint16_t nonce0, uint16_t nonce1,
|
|
207
|
+
uint16_t nonce2, uint16_t nonce3)
|
|
208
|
+
__contract__(
|
|
209
|
+
requires(memory_no_alias(r0, sizeof(mld_poly)))
|
|
210
|
+
requires(memory_no_alias(r1, sizeof(mld_poly)))
|
|
211
|
+
requires(memory_no_alias(r2, sizeof(mld_poly)))
|
|
212
|
+
requires(memory_no_alias(r3, sizeof(mld_poly)))
|
|
213
|
+
requires(memory_no_alias(seed, MLDSA_CRHBYTES))
|
|
214
|
+
assigns(memory_slice(r0, sizeof(mld_poly)))
|
|
215
|
+
assigns(memory_slice(r1, sizeof(mld_poly)))
|
|
216
|
+
assigns(memory_slice(r2, sizeof(mld_poly)))
|
|
217
|
+
assigns(memory_slice(r3, sizeof(mld_poly)))
|
|
218
|
+
ensures(array_bound(r0->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))
|
|
219
|
+
ensures(array_bound(r1->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))
|
|
220
|
+
ensures(array_bound(r2->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))
|
|
221
|
+
ensures(array_bound(r3->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))
|
|
222
|
+
);
|
|
223
|
+
#endif /* !MLD_CONFIG_SERIAL_FIPS202_ONLY */
|
|
224
|
+
|
|
225
|
+
#define mld_poly_challenge MLD_NAMESPACE_KL(poly_challenge)
|
|
226
|
+
/*************************************************
|
|
227
|
+
* Name: mld_poly_challenge
|
|
228
|
+
*
|
|
229
|
+
* Description: Implementation of H. Samples polynomial with MLDSA_TAU nonzero
|
|
230
|
+
* coefficients in {-1,1} using the output stream of
|
|
231
|
+
* SHAKE256(seed).
|
|
232
|
+
*
|
|
233
|
+
* Arguments: - mld_poly *c: pointer to output polynomial
|
|
234
|
+
* - const uint8_t mu[]: byte array containing seed of length
|
|
235
|
+
* MLDSA_CTILDEBYTES
|
|
236
|
+
**************************************************/
|
|
237
|
+
MLD_INTERNAL_API
|
|
238
|
+
void mld_poly_challenge(mld_poly *c, const uint8_t seed[MLDSA_CTILDEBYTES])
|
|
239
|
+
__contract__(
|
|
240
|
+
requires(memory_no_alias(c, sizeof(mld_poly)))
|
|
241
|
+
requires(memory_no_alias(seed, MLDSA_CTILDEBYTES))
|
|
242
|
+
assigns(memory_slice(c, sizeof(mld_poly)))
|
|
243
|
+
/* All coefficients of c are -1, 0 or +1 */
|
|
244
|
+
ensures(array_bound(c->coeffs, 0, MLDSA_N, -1, 2))
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
#define mld_polyeta_pack MLD_NAMESPACE_KL(polyeta_pack)
|
|
248
|
+
/*************************************************
|
|
249
|
+
* Name: mld_polyeta_pack
|
|
250
|
+
*
|
|
251
|
+
* Description: Bit-pack polynomial with coefficients in [-MLDSA_ETA,MLDSA_ETA].
|
|
252
|
+
*
|
|
253
|
+
* Arguments: - uint8_t *r: pointer to output byte array with at least
|
|
254
|
+
* MLDSA_POLYETA_PACKEDBYTES bytes
|
|
255
|
+
* - const mld_poly *a: pointer to input polynomial
|
|
256
|
+
**************************************************/
|
|
257
|
+
MLD_INTERNAL_API
|
|
258
|
+
void mld_polyeta_pack(uint8_t r[MLDSA_POLYETA_PACKEDBYTES], const mld_poly *a)
|
|
259
|
+
__contract__(
|
|
260
|
+
requires(memory_no_alias(r, MLDSA_POLYETA_PACKEDBYTES))
|
|
261
|
+
requires(memory_no_alias(a, sizeof(mld_poly)))
|
|
262
|
+
requires(array_abs_bound(a->coeffs, 0, MLDSA_N, MLDSA_ETA + 1))
|
|
263
|
+
assigns(memory_slice(r, MLDSA_POLYETA_PACKEDBYTES))
|
|
264
|
+
);
|
|
265
|
+
|
|
266
|
+
/*
|
|
267
|
+
* polyeta_unpack produces coefficients in [-MLDSA_ETA,MLDSA_ETA] for
|
|
268
|
+
* well-formed inputs (i.e., those produced by polyeta_pack).
|
|
269
|
+
* However, when passed an arbitrary byte array, it may produce smaller values,
|
|
270
|
+
* i.e, values in [MLD_POLYETA_UNPACK_LOWER_BOUND,MLDSA_ETA]
|
|
271
|
+
* Even though this should never happen, we use use the bound for arbitrary
|
|
272
|
+
* inputs in the CBMC proofs.
|
|
273
|
+
*/
|
|
274
|
+
#if MLDSA_ETA == 2
|
|
275
|
+
#define MLD_POLYETA_UNPACK_LOWER_BOUND (-5)
|
|
276
|
+
#elif MLDSA_ETA == 4
|
|
277
|
+
#define MLD_POLYETA_UNPACK_LOWER_BOUND (-11)
|
|
278
|
+
#else
|
|
279
|
+
#error "Invalid value of MLDSA_ETA"
|
|
280
|
+
#endif
|
|
281
|
+
|
|
282
|
+
#define mld_polyeta_unpack MLD_NAMESPACE_KL(polyeta_unpack)
|
|
283
|
+
/*************************************************
|
|
284
|
+
* Name: mld_polyeta_unpack
|
|
285
|
+
*
|
|
286
|
+
* Description: Unpack polynomial with coefficients in [-MLDSA_ETA,MLDSA_ETA].
|
|
287
|
+
*
|
|
288
|
+
* Arguments: - mld_poly *r: pointer to output polynomial
|
|
289
|
+
* - const uint8_t *a: byte array with bit-packed polynomial
|
|
290
|
+
**************************************************/
|
|
291
|
+
MLD_INTERNAL_API
|
|
292
|
+
void mld_polyeta_unpack(mld_poly *r, const uint8_t a[MLDSA_POLYETA_PACKEDBYTES])
|
|
293
|
+
__contract__(
|
|
294
|
+
requires(memory_no_alias(r, sizeof(mld_poly)))
|
|
295
|
+
requires(memory_no_alias(a, MLDSA_POLYETA_PACKEDBYTES))
|
|
296
|
+
assigns(memory_slice(r, sizeof(mld_poly)))
|
|
297
|
+
ensures(array_bound(r->coeffs, 0, MLDSA_N, MLD_POLYETA_UNPACK_LOWER_BOUND, MLDSA_ETA + 1))
|
|
298
|
+
);
|
|
299
|
+
|
|
300
|
+
#define mld_polyz_pack MLD_NAMESPACE_KL(polyz_pack)
|
|
301
|
+
/*************************************************
|
|
302
|
+
* Name: mld_polyz_pack
|
|
303
|
+
*
|
|
304
|
+
* Description: Bit-pack polynomial with coefficients
|
|
305
|
+
* in [-(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1].
|
|
306
|
+
*
|
|
307
|
+
* Arguments: - uint8_t *r: pointer to output byte array with at least
|
|
308
|
+
* MLDSA_POLYZ_PACKEDBYTES bytes
|
|
309
|
+
* - const mld_poly *a: pointer to input polynomial
|
|
310
|
+
**************************************************/
|
|
311
|
+
MLD_INTERNAL_API
|
|
312
|
+
void mld_polyz_pack(uint8_t r[MLDSA_POLYZ_PACKEDBYTES], const mld_poly *a)
|
|
313
|
+
__contract__(
|
|
314
|
+
requires(memory_no_alias(r, MLDSA_POLYZ_PACKEDBYTES))
|
|
315
|
+
requires(memory_no_alias(a, sizeof(mld_poly)))
|
|
316
|
+
requires(array_bound(a->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))
|
|
317
|
+
assigns(memory_slice(r, MLDSA_POLYZ_PACKEDBYTES))
|
|
318
|
+
);
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
#define mld_polyz_unpack MLD_NAMESPACE_KL(polyz_unpack)
|
|
322
|
+
/*************************************************
|
|
323
|
+
* Name: mld_polyz_unpack
|
|
324
|
+
*
|
|
325
|
+
* Description: Unpack polynomial z with coefficients
|
|
326
|
+
* in [-(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1].
|
|
327
|
+
*
|
|
328
|
+
* Arguments: - mld_poly *r: pointer to output polynomial
|
|
329
|
+
* - const uint8_t *a: byte array with bit-packed polynomial
|
|
330
|
+
**************************************************/
|
|
331
|
+
MLD_INTERNAL_API
|
|
332
|
+
void mld_polyz_unpack(mld_poly *r, const uint8_t a[MLDSA_POLYZ_PACKEDBYTES])
|
|
333
|
+
__contract__(
|
|
334
|
+
requires(memory_no_alias(r, sizeof(mld_poly)))
|
|
335
|
+
requires(memory_no_alias(a, MLDSA_POLYZ_PACKEDBYTES))
|
|
336
|
+
assigns(memory_slice(r, sizeof(mld_poly)))
|
|
337
|
+
ensures(array_bound(r->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))
|
|
338
|
+
);
|
|
339
|
+
|
|
340
|
+
#define mld_polyw1_pack MLD_NAMESPACE_KL(polyw1_pack)
|
|
341
|
+
/*************************************************
|
|
342
|
+
* Name: mld_polyw1_pack
|
|
343
|
+
*
|
|
344
|
+
* Description: Bit-pack polynomial w1 with coefficients in [0,15] or [0,43].
|
|
345
|
+
* Input coefficients are assumed to be standard representatives.
|
|
346
|
+
*
|
|
347
|
+
* Arguments: - uint8_t *r: pointer to output byte array with at least
|
|
348
|
+
* MLDSA_POLYW1_PACKEDBYTES bytes
|
|
349
|
+
* - const mld_poly *a: pointer to input polynomial
|
|
350
|
+
**************************************************/
|
|
351
|
+
MLD_INTERNAL_API
|
|
352
|
+
void mld_polyw1_pack(uint8_t r[MLDSA_POLYW1_PACKEDBYTES], const mld_poly *a)
|
|
353
|
+
__contract__(
|
|
354
|
+
requires(memory_no_alias(r, MLDSA_POLYW1_PACKEDBYTES))
|
|
355
|
+
requires(memory_no_alias(a, sizeof(mld_poly)))
|
|
356
|
+
requires(array_bound(a->coeffs, 0, MLDSA_N, 0, (MLDSA_Q-1)/(2*MLDSA_GAMMA2)))
|
|
357
|
+
assigns(memory_slice(r, MLDSA_POLYW1_PACKEDBYTES))
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
#endif /* !MLD_POLY_KL_H */
|