pq_crypto 0.4.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/CHANGELOG.md +25 -0
- data/GET_STARTED.md +21 -16
- data/README.md +26 -0
- data/SECURITY.md +22 -16
- data/ext/pqcrypto/extconf.rb +148 -99
- data/ext/pqcrypto/mldsa_api.h +1 -118
- data/ext/pqcrypto/mlkem_api.h +1 -42
- data/ext/pqcrypto/pq_externalmu.c +88 -216
- data/ext/pqcrypto/pqcrypto_native_api.h +129 -0
- data/ext/pqcrypto/pqcrypto_ruby_secure.c +0 -3
- data/ext/pqcrypto/pqcrypto_secure.c +135 -117
- data/ext/pqcrypto/pqcrypto_secure.h +1 -42
- data/ext/pqcrypto/pqcrypto_version.h +1 -1
- 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/version.rb +1 -1
- data/lib/pq_crypto.rb +1 -1
- data/script/vendor_libs.rb +88 -159
- metadata +236 -160
- 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-1024/clean/LICENSE +0 -5
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/Makefile +0 -19
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/Makefile.Microsoft_nmake +0 -23
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/api.h +0 -18
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/cbd.c +0 -83
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/cbd.h +0 -11
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/indcpa.c +0 -327
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/indcpa.h +0 -22
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/kem.c +0 -164
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/kem.h +0 -23
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/ntt.c +0 -146
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/ntt.h +0 -14
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/params.h +0 -36
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/poly.c +0 -311
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/poly.h +0 -37
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/polyvec.c +0 -198
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/polyvec.h +0 -26
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/reduce.c +0 -41
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/reduce.h +0 -13
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/symmetric-shake.c +0 -71
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/symmetric.h +0 -30
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/verify.c +0 -67
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-1024/clean/verify.h +0 -13
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/LICENSE +0 -5
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/Makefile +0 -19
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/Makefile.Microsoft_nmake +0 -23
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/api.h +0 -18
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/cbd.c +0 -108
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/cbd.h +0 -11
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/indcpa.c +0 -327
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/indcpa.h +0 -22
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/kem.c +0 -164
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/kem.h +0 -23
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/ntt.c +0 -146
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/ntt.h +0 -14
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/params.h +0 -36
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/poly.c +0 -299
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/poly.h +0 -37
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/polyvec.c +0 -188
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/polyvec.h +0 -26
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/reduce.c +0 -41
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/reduce.h +0 -13
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/symmetric-shake.c +0 -71
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/symmetric.h +0 -30
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/verify.c +0 -67
- data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-512/clean/verify.h +0 -13
- 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-44/clean/LICENSE +0 -5
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/Makefile +0 -19
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/Makefile.Microsoft_nmake +0 -23
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/api.h +0 -50
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/ntt.c +0 -98
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/ntt.h +0 -10
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/packing.c +0 -261
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/packing.h +0 -31
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/params.h +0 -44
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/poly.c +0 -848
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/poly.h +0 -52
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/polyvec.c +0 -415
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/polyvec.h +0 -65
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/reduce.c +0 -69
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/reduce.h +0 -17
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/rounding.c +0 -98
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/rounding.h +0 -14
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/sign.c +0 -407
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/sign.h +0 -47
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/symmetric-shake.c +0 -26
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-44/clean/symmetric.h +0 -34
- 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
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/LICENSE +0 -5
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/Makefile +0 -19
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/Makefile.Microsoft_nmake +0 -23
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/api.h +0 -50
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/ntt.c +0 -98
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/ntt.h +0 -10
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/packing.c +0 -261
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/packing.h +0 -31
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/params.h +0 -44
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/poly.c +0 -823
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/poly.h +0 -52
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/polyvec.c +0 -415
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/polyvec.h +0 -65
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/reduce.c +0 -69
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/reduce.h +0 -17
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/rounding.c +0 -92
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/rounding.h +0 -14
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/sign.c +0 -407
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/sign.h +0 -47
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/symmetric-shake.c +0 -26
- data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-87/clean/symmetric.h +0 -34
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4f34f4ae9f34414fbbc1f6ffc63de9c24306a6a432138e36442c1e43661fa59e
|
|
4
|
+
data.tar.gz: 6b2a754c55b9a1be4706cf5d835ee08844b54d75d96d43611f22c8c4f68cb10f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0b72822b4b645f891e8f87693004f736070b9bba37432a48ffc840ec1a114865ba691db7c1ffc12aab7643369c3883892d9fbcf3c4f7cf895b5938d2ee650b1c
|
|
7
|
+
data.tar.gz: 13c0263600408685f5d484528032305c48e3e3d551799abad990167c9a9d14d0287aabb70fd88dc00f72d6236f15e70c3d9f6e9572ad02276e11674aafd87774
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.0] - 2026-05-04
|
|
4
|
+
|
|
5
|
+
### Changed — native backend migration
|
|
6
|
+
|
|
7
|
+
- Replaced the PQClean runtime/build path with PQ Code Package `mlkem-native` and `mldsa-native` as the only ML-KEM / ML-DSA backend.
|
|
8
|
+
- Removed the PQClean fallback entirely so backend failures are attributable to the new native path instead of mixed old/new implementations.
|
|
9
|
+
- Updated the native extension build to require `ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native.c` and `ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native.c`.
|
|
10
|
+
- Changed vendoring and gem packaging to keep only a minimal PQ Code Package source snapshot, avoiding upstream examples and symlink-heavy trees in packaged gems.
|
|
11
|
+
- Switched native compilation to `-O3`; optional upstream native assembly remains opt-in through `PQCRYPTO_NATIVE_ASM=1`.
|
|
12
|
+
- `PQCrypto.backend` now reports `:native_pq_code_package`.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Corrected deterministic ML-DSA test signing on `mldsa-native` by passing the FIPS 204 pure-mode domain-separation prefix (`00 00` for an empty context) into `signature_internal`. This restores deterministic round-trip verification and ML-DSA siggen KAT compatibility.
|
|
17
|
+
|
|
18
|
+
### Documentation
|
|
19
|
+
|
|
20
|
+
- Updated README, GET_STARTED, SECURITY, and migration notes for the native-only backend and the no-PQClean policy.
|
|
21
|
+
- Documented that `pqc_container_*` remains a compatibility serialization format while the cryptographic backend has moved to PQ Code Package native sources.
|
|
22
|
+
|
|
23
|
+
### Migration notes
|
|
24
|
+
|
|
25
|
+
- Source checkouts must refresh vendor sources with `bundle exec rake vendor` before compiling if `ext/pqcrypto/vendor/.vendored` is missing or stale.
|
|
26
|
+
- This release intentionally does not support falling back to PQClean. If native sources are absent or incompatible, the extension build fails early.
|
|
27
|
+
|
|
3
28
|
## [0.4.2] - 2026-04-29
|
|
4
29
|
|
|
5
30
|
### Fixed
|
data/GET_STARTED.md
CHANGED
|
@@ -359,17 +359,23 @@ keypair.secret_key == imported_secret_key
|
|
|
359
359
|
Secret key `inspect` output is intentionally redacted, and secret key objects
|
|
360
360
|
do not expose a public fingerprint method.
|
|
361
361
|
|
|
362
|
-
## 13.
|
|
362
|
+
## 13. Native backend
|
|
363
363
|
|
|
364
|
-
|
|
364
|
+
Since `0.5.0`, the build uses PQ Code Package `mlkem-native` / `mldsa-native`
|
|
365
|
+
sources only. There is no PQClean fallback and no separate
|
|
366
|
+
`PQCRYPTO_KECCAK_BACKEND` switch: Keccak/SHAKE comes from the selected PQ Code
|
|
367
|
+
Package native source tree.
|
|
365
368
|
|
|
366
369
|
```bash
|
|
367
|
-
|
|
370
|
+
bundle exec rake vendor
|
|
371
|
+
bundle exec rake compile
|
|
368
372
|
```
|
|
369
373
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
374
|
+
To try the upstream native assembly backend, opt in explicitly:
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
PQCRYPTO_NATIVE_ASM=1 bundle exec rake compile
|
|
378
|
+
```
|
|
373
379
|
|
|
374
380
|
## 14. Async / Fiber scheduler behavior
|
|
375
381
|
|
|
@@ -389,8 +395,8 @@ PQCrypto::Testing.ml_dsa_keypair_from_seed(seed) # 32-byte seed
|
|
|
389
395
|
PQCrypto::Testing.ml_dsa_sign_from_seed(message, sk, seed)
|
|
390
396
|
```
|
|
391
397
|
|
|
392
|
-
These helpers are intended for tests only. They drive
|
|
393
|
-
and are not part of the normal application API.
|
|
398
|
+
These helpers are intended for tests only. They drive deterministic PQ Code
|
|
399
|
+
Package native entrypoints and are not part of the normal application API.
|
|
394
400
|
|
|
395
401
|
## 16. Development commands
|
|
396
402
|
|
|
@@ -400,20 +406,19 @@ Run the test suite:
|
|
|
400
406
|
bundle exec rake test
|
|
401
407
|
```
|
|
402
408
|
|
|
403
|
-
Refresh the pinned
|
|
404
|
-
vendored sources
|
|
409
|
+
Refresh the pinned PQ Code Package native vendor snapshot only when intentionally
|
|
410
|
+
updating vendored sources. The vendoring script keeps a minimal, source-gem-safe
|
|
411
|
+
snapshot: `mlkem-native/mlkem`, `mldsa-native/mldsa`, and upstream license/docs
|
|
412
|
+
only. It intentionally omits examples and symlink-heavy upstream trees:
|
|
405
413
|
|
|
406
414
|
```bash
|
|
407
415
|
bundle exec ruby script/vendor_libs.rb
|
|
408
416
|
```
|
|
409
417
|
|
|
410
|
-
To intentionally change the upstream snapshot, override
|
|
411
|
-
together:
|
|
418
|
+
To intentionally change the upstream snapshot, override the native package refs:
|
|
412
419
|
|
|
413
420
|
```bash
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
PQCLEAN_SHA256=<archive-sha256> \
|
|
417
|
-
PQCLEAN_STRIP=PQClean-<full-git-commit> \
|
|
421
|
+
MLKEM_NATIVE_REF=<tag-or-commit> \
|
|
422
|
+
MLDSA_NATIVE_REF=<tag-or-commit> \
|
|
418
423
|
bundle exec ruby script/vendor_libs.rb
|
|
419
424
|
```
|
data/README.md
CHANGED
|
@@ -66,6 +66,31 @@ original algorithms:
|
|
|
66
66
|
- Ruby 3.4 or later
|
|
67
67
|
- a C toolchain with C11 support
|
|
68
68
|
- OpenSSL 3.0 or later with SHA3-256 and SHAKE256 available
|
|
69
|
+
- vendored minimal PQ Code Package native snapshot in `ext/pqcrypto/vendor`
|
|
70
|
+
|
|
71
|
+
## Native backend
|
|
72
|
+
|
|
73
|
+
Version `0.5.0` moves ML-KEM and ML-DSA to PQ Code Package
|
|
74
|
+
`mlkem-native` / `mldsa-native` sources. PQClean is no longer built and there
|
|
75
|
+
is no runtime or build-time PQClean fallback. The repository and source gem
|
|
76
|
+
ship a minimal vendor snapshot containing only the `mlkem/` and `mldsa/` source
|
|
77
|
+
trees plus license/docs; upstream examples, tests, proofs, `.git` directories,
|
|
78
|
+
and symlink-heavy trees are intentionally omitted. If the native vendor snapshot
|
|
79
|
+
is missing, the extension build fails early.
|
|
80
|
+
|
|
81
|
+
From a source checkout, refresh the native vendor snapshot before compiling:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
bundle exec rake vendor
|
|
85
|
+
bundle exec rake compile
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
The default build uses the portable native source path. Upstream native assembly
|
|
89
|
+
can be tested explicitly with:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
PQCRYPTO_NATIVE_ASM=1 bundle exec rake compile
|
|
93
|
+
```
|
|
69
94
|
|
|
70
95
|
## Security status
|
|
71
96
|
|
|
@@ -98,4 +123,5 @@ Detailed usage examples live in [`GET_STARTED.md`](GET_STARTED.md):
|
|
|
98
123
|
- streaming ML-DSA for large files
|
|
99
124
|
- SPKI and PKCS#8 serialization
|
|
100
125
|
- `pqc_container_*` compatibility serialization
|
|
126
|
+
- native backend / vendoring notes
|
|
101
127
|
- secure wiping and practical safety notes
|
data/SECURITY.md
CHANGED
|
@@ -27,9 +27,14 @@ substitute for a security audit.
|
|
|
27
27
|
|
|
28
28
|
### ML-KEM / ML-DSA
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
As of `0.5.0`, the post-quantum primitives are backed by vendored PQ Code
|
|
31
|
+
Package `mlkem-native` and `mldsa-native` sources. PQClean is not built and
|
|
32
|
+
there is intentionally no PQClean fallback.
|
|
33
|
+
|
|
34
|
+
The gem calls the native package entrypoints for ML-KEM key generation,
|
|
35
|
+
encapsulation, decapsulation, ML-DSA key generation, signing, verification, and
|
|
36
|
+
test-only deterministic hooks. It does not reimplement ML-KEM, ML-DSA, SHAKE,
|
|
37
|
+
or Keccak.
|
|
33
38
|
|
|
34
39
|
### HybridKEM
|
|
35
40
|
|
|
@@ -96,22 +101,23 @@ these encodings, callers must explicitly set:
|
|
|
96
101
|
PQCrypto::PKCS8.allow_ml_dsa_seed_format = true
|
|
97
102
|
```
|
|
98
103
|
|
|
99
|
-
This opt-in
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
expand the RFC 9881 seed into an expanded private key. The replay buffer is
|
|
103
|
-
thread-local, cleared immediately after expansion, and remains inactive for all
|
|
104
|
-
normal production randomness paths.
|
|
105
|
-
|
|
106
|
-
For `both` encodings, the decoder expands the seed and rejects the key if the
|
|
104
|
+
This opt-in remains explicit because seed and both-form imports are more
|
|
105
|
+
sensitive than expanded-key imports: the decoder expands the seed into an
|
|
106
|
+
expanded private key and, for `both` encodings, rejects the key if the
|
|
107
107
|
expandedKey half does not match the seed-derived key.
|
|
108
108
|
|
|
109
|
+
The expansion path uses the vendored `mldsa-native` deterministic keypair
|
|
110
|
+
entrypoints rather than a `randombytes()` seed-replay fallback.
|
|
111
|
+
|
|
109
112
|
## Deterministic test hooks
|
|
110
113
|
|
|
111
|
-
`PQCrypto::Testing` deterministic helpers drive the
|
|
112
|
-
against caller-supplied seeds.
|
|
113
|
-
|
|
114
|
-
|
|
114
|
+
`PQCrypto::Testing` deterministic helpers drive the vendored PQ Code Package
|
|
115
|
+
native deterministic entrypoints against caller-supplied seeds. ML-DSA
|
|
116
|
+
deterministic signing passes the FIPS 204 pure-mode domain-separation prefix
|
|
117
|
+
into `mldsa-native` `signature_internal`; for an empty context this prefix is
|
|
118
|
+
`00 00`.
|
|
119
|
+
|
|
120
|
+
Outside of test-only deterministic calls, production randomness delegates
|
|
115
121
|
directly to OpenSSL `RAND_bytes`.
|
|
116
122
|
|
|
117
123
|
## Memory wiping
|
|
@@ -135,7 +141,7 @@ OpenSSL is used for:
|
|
|
135
141
|
- SHA3-256 for the X-Wing combiner
|
|
136
142
|
- RAND_bytes as the production entropy source for `randombytes()`
|
|
137
143
|
- CRYPTO_memcmp for constant-time comparison
|
|
138
|
-
- Base64 encode/decode for PEM
|
|
144
|
+
- Base64 encode/decode for PEM
|
|
139
145
|
|
|
140
146
|
OpenSSL 3.5+ is additionally used in interop tests when ML-KEM / ML-DSA EVP
|
|
141
147
|
support is available.
|
data/ext/pqcrypto/extconf.rb
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
require "mkmf"
|
|
5
|
+
require "rbconfig"
|
|
5
6
|
require_relative "../../lib/pq_crypto/version"
|
|
6
7
|
|
|
7
8
|
def generate_version_header!
|
|
@@ -24,19 +25,13 @@ end
|
|
|
24
25
|
|
|
25
26
|
generate_version_header!
|
|
26
27
|
|
|
27
|
-
$CFLAGS << " -std=c11 -Wall -Wextra -
|
|
28
|
+
$CFLAGS << " -std=c11 -Wall -Wextra -O3"
|
|
28
29
|
$CFLAGS << " -fstack-protector-strong -D_FORTIFY_SOURCE=2"
|
|
29
|
-
VENDOR_ONLY_CFLAGS = "-Wno-unused-parameter -Wno-unused-function -Wno-strict-prototypes -Wno-pedantic -Wno-c23-extensions -Wno-undef"
|
|
30
|
-
|
|
31
30
|
$LDFLAGS << " -Wl,-no_warn_duplicate_libraries" if RbConfig::CONFIG["host_os"] =~ /darwin/
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
KECCAK_BACKEND = (ENV["PQCRYPTO_KECCAK_BACKEND"] || "clean").strip.downcase
|
|
36
|
-
SUPPORTED_KECCAK_BACKENDS = %w[clean xkcp].freeze
|
|
32
|
+
VENDOR_ONLY_CFLAGS = "-Wno-unused-parameter -Wno-unused-function -Wno-strict-prototypes -Wno-pedantic -Wno-c23-extensions -Wno-undef"
|
|
37
33
|
|
|
38
34
|
SANITIZE = ENV["PQCRYPTO_SANITIZE"]
|
|
39
|
-
|
|
40
35
|
if SANITIZE && !SANITIZE.strip.empty?
|
|
41
36
|
sanitize = SANITIZE.strip
|
|
42
37
|
$CFLAGS.gsub!(/\s-D_FORTIFY_SOURCE=\d+/, "")
|
|
@@ -44,6 +39,8 @@ if SANITIZE && !SANITIZE.strip.empty?
|
|
|
44
39
|
$LDFLAGS << " -fsanitize=#{sanitize}"
|
|
45
40
|
end
|
|
46
41
|
|
|
42
|
+
NATIVE_ASM = (ENV["PQCRYPTO_NATIVE_ASM"] || "0") == "1"
|
|
43
|
+
|
|
47
44
|
def configure_compiler_environment
|
|
48
45
|
return unless RUBY_PLATFORM.include?("darwin")
|
|
49
46
|
|
|
@@ -52,6 +49,54 @@ def configure_compiler_environment
|
|
|
52
49
|
$LDFLAGS << " -L/opt/homebrew/lib"
|
|
53
50
|
end
|
|
54
51
|
|
|
52
|
+
def native_vendor_sources_for(vendor_dir)
|
|
53
|
+
[
|
|
54
|
+
File.join(vendor_dir, "mlkem-native", "mlkem", "mlkem_native.c"),
|
|
55
|
+
File.join(vendor_dir, "mldsa-native", "mldsa", "mldsa_native.c")
|
|
56
|
+
]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def native_vendor_ready?(vendor_dir)
|
|
60
|
+
File.exist?(File.join(vendor_dir, ".vendored")) &&
|
|
61
|
+
native_vendor_sources_for(vendor_dir).all? { |path| File.exist?(path) }
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def vendor_script_path
|
|
65
|
+
File.expand_path("../../script/vendor_libs.rb", __dir__)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def run_vendor_script!(vendor_dir)
|
|
69
|
+
script = vendor_script_path
|
|
70
|
+
abort <<~MSG unless File.exist?(script)
|
|
71
|
+
PQ Code Package vendored sources are missing and script/vendor_libs.rb was not packaged.
|
|
72
|
+
|
|
73
|
+
Expected:
|
|
74
|
+
#{native_vendor_sources_for(vendor_dir).join("\n ")}
|
|
75
|
+
|
|
76
|
+
Rebuild the gem from a repository that includes script/vendor_libs.rb, or run
|
|
77
|
+
script/vendor_libs.rb before building the gem package.
|
|
78
|
+
MSG
|
|
79
|
+
|
|
80
|
+
abort <<~MSG if ENV["PQCRYPTO_AUTO_VENDOR"] == "0"
|
|
81
|
+
PQ Code Package vendored sources are missing and PQCRYPTO_AUTO_VENDOR=0 was set.
|
|
82
|
+
|
|
83
|
+
Expected:
|
|
84
|
+
#{native_vendor_sources_for(vendor_dir).join("\n ")}
|
|
85
|
+
|
|
86
|
+
Run:
|
|
87
|
+
ruby script/vendor_libs.rb
|
|
88
|
+
MSG
|
|
89
|
+
|
|
90
|
+
puts "PQ Code Package native sources are missing; vendoring now..."
|
|
91
|
+
ok = system(RbConfig.ruby, script)
|
|
92
|
+
abort <<~MSG unless ok
|
|
93
|
+
Failed to vendor PQ Code Package native sources.
|
|
94
|
+
|
|
95
|
+
This build intentionally has no PQClean fallback. Install git/network access or
|
|
96
|
+
vendor mlkem-native and mldsa-native before installing the gem.
|
|
97
|
+
MSG
|
|
98
|
+
end
|
|
99
|
+
|
|
55
100
|
def find_vendor_dir
|
|
56
101
|
candidates = [
|
|
57
102
|
File.join(__dir__, "vendor"),
|
|
@@ -65,8 +110,13 @@ def find_vendor_dir
|
|
|
65
110
|
dir = File.dirname(dir)
|
|
66
111
|
end
|
|
67
112
|
|
|
68
|
-
candidates.
|
|
69
|
-
|
|
113
|
+
candidates.map! { |path| File.expand_path(path) }
|
|
114
|
+
candidates.uniq!
|
|
115
|
+
|
|
116
|
+
primary = File.expand_path(File.join(__dir__, "vendor"))
|
|
117
|
+
run_vendor_script!(primary) unless native_vendor_ready?(primary)
|
|
118
|
+
|
|
119
|
+
candidates.find { |path| native_vendor_ready?(path) }
|
|
70
120
|
end
|
|
71
121
|
|
|
72
122
|
def configure_openssl!
|
|
@@ -85,7 +135,6 @@ def configure_openssl!
|
|
|
85
135
|
#endif
|
|
86
136
|
int main(void) { return 0; }
|
|
87
137
|
SRC
|
|
88
|
-
|
|
89
138
|
abort "OpenSSL 3.0 or later is required" unless try_compile(version_check)
|
|
90
139
|
|
|
91
140
|
sha3_check = <<~SRC
|
|
@@ -104,113 +153,112 @@ def configure_openssl!
|
|
|
104
153
|
return md == NULL ? 1 : 0;
|
|
105
154
|
}
|
|
106
155
|
SRC
|
|
107
|
-
abort "OpenSSL SHAKE256 is required (X-Wing key expansion)" unless try_compile(shake_check)
|
|
156
|
+
abort "OpenSSL SHAKE256 is required (X-Wing key expansion / ML-DSA streaming mu)" unless try_compile(shake_check)
|
|
108
157
|
|
|
109
158
|
$CFLAGS << " -DHAVE_OPENSSL_EVP_H -DHAVE_OPENSSL_RAND_H"
|
|
110
159
|
end
|
|
111
160
|
|
|
112
|
-
def
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
case KECCAK_BACKEND
|
|
116
|
-
when "clean"
|
|
117
|
-
{
|
|
118
|
-
name: "clean",
|
|
119
|
-
include_dirs: [],
|
|
120
|
-
source_group: ["pqclean_common", [File.join(common_dir, "fips202.c")]]
|
|
121
|
-
}
|
|
122
|
-
when "xkcp"
|
|
123
|
-
# The optimized backend must provide the same fips202.h-compatible API as
|
|
124
|
-
# PQClean's common/fips202.c. Do not substitute OpenSSL EVP SHAKE here: the
|
|
125
|
-
# PQClean SHAKE state layout is part of the ML-KEM/ML-DSA call graph.
|
|
126
|
-
xkcp_dir = File.join(vendor_dir, "xkcp")
|
|
127
|
-
adapter_source = File.join(xkcp_dir, "pqclean_fips202_xkcp.c")
|
|
128
|
-
|
|
129
|
-
abort <<~MSG unless File.exist?(adapter_source)
|
|
130
|
-
PQCRYPTO_KECCAK_BACKEND=xkcp was requested, but no reviewed XKCP adapter was found.
|
|
131
|
-
|
|
132
|
-
Expected:
|
|
133
|
-
#{adapter_source}
|
|
134
|
-
|
|
135
|
-
Refusing to fall back silently to the clean backend. Vendor a fips202.h-compatible
|
|
136
|
-
XKCP adapter first, then run the full SHAKE-dependent KAT/regression test matrix.
|
|
137
|
-
MSG
|
|
138
|
-
|
|
139
|
-
{
|
|
140
|
-
name: "xkcp",
|
|
141
|
-
include_dirs: [xkcp_dir],
|
|
142
|
-
source_group: ["xkcp_keccak", [adapter_source]]
|
|
143
|
-
}
|
|
144
|
-
end
|
|
161
|
+
def recursive_include_dirs(root)
|
|
162
|
+
Dir.glob(File.join(root, "**", "*")).select { |p| File.directory?(p) }.map { |p| File.expand_path(p) }
|
|
145
163
|
end
|
|
146
164
|
|
|
147
|
-
def
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
pqclean_dir = File.join(vendor_dir, "pqclean")
|
|
151
|
-
return nil unless Dir.exist?(pqclean_dir)
|
|
165
|
+
def native_vendor_config(vendor_dir)
|
|
166
|
+
abort <<~MSG unless vendor_dir
|
|
167
|
+
PQ Code Package vendored sources are required.
|
|
152
168
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
"pqclean_mlkem1024" => File.join(pqclean_dir, "crypto_kem", "ml-kem-1024", "clean")
|
|
157
|
-
}
|
|
158
|
-
mldsa_dirs = {
|
|
159
|
-
"pqclean_mldsa44" => File.join(pqclean_dir, "crypto_sign", "ml-dsa-44", "clean"),
|
|
160
|
-
"pqclean_mldsa65" => File.join(pqclean_dir, "crypto_sign", "ml-dsa-65", "clean"),
|
|
161
|
-
"pqclean_mldsa87" => File.join(pqclean_dir, "crypto_sign", "ml-dsa-87", "clean")
|
|
162
|
-
}
|
|
163
|
-
common_dir = File.join(pqclean_dir, "common")
|
|
164
|
-
|
|
165
|
-
keccak_config = configure_keccak_backend(vendor_dir, common_dir)
|
|
169
|
+
Expected:
|
|
170
|
+
ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native.c
|
|
171
|
+
ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native.c
|
|
166
172
|
|
|
167
|
-
|
|
168
|
-
|
|
173
|
+
Run:
|
|
174
|
+
bundle exec rake vendor
|
|
175
|
+
MSG
|
|
169
176
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
[prefix, Dir.glob(File.join(dir, "*.c")).sort]
|
|
175
|
-
end
|
|
176
|
-
common_sources = %w[sha2.c sp800-185.c].map { |name| File.join(common_dir, name) }
|
|
177
|
+
mlkem_dir = File.join(vendor_dir, "mlkem-native", "mlkem")
|
|
178
|
+
mldsa_dir = File.join(vendor_dir, "mldsa-native", "mldsa")
|
|
179
|
+
mlkem_c = File.join(mlkem_dir, "mlkem_native.c")
|
|
180
|
+
mldsa_c = File.join(mldsa_dir, "mldsa_native.c")
|
|
177
181
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
keccak_config[:source_group]
|
|
183
|
-
]
|
|
182
|
+
missing = [mlkem_c, mldsa_c].reject { |path| File.exist?(path) }
|
|
183
|
+
abort <<~MSG unless missing.empty?
|
|
184
|
+
Missing PQ Code Package native source files:
|
|
185
|
+
#{missing.join("\n ")}
|
|
184
186
|
|
|
185
|
-
|
|
187
|
+
This build intentionally has no PQClean fallback. Auto-vendoring did not
|
|
188
|
+
produce the required files. Vendor mlkem-native and mldsa-native, then rebuild.
|
|
189
|
+
MSG
|
|
186
190
|
|
|
187
|
-
|
|
191
|
+
include_dirs = [__dir__, mlkem_dir, mldsa_dir, *recursive_include_dirs(mlkem_dir), *recursive_include_dirs(mldsa_dir)].uniq
|
|
188
192
|
include_dirs.each { |dir| $CPPFLAGS << " -I#{dir}" }
|
|
189
193
|
|
|
190
194
|
{
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
195
|
+
mlkem_dir: mlkem_dir,
|
|
196
|
+
mldsa_dir: mldsa_dir,
|
|
197
|
+
mlkem_c: mlkem_c,
|
|
198
|
+
mldsa_c: mldsa_c,
|
|
199
|
+
mlkem_asm: File.join(mlkem_dir, "mlkem_native_asm.S"),
|
|
200
|
+
mldsa_asm: File.join(mldsa_dir, "mldsa_native_asm.S")
|
|
194
201
|
}
|
|
195
202
|
end
|
|
196
203
|
|
|
197
|
-
def
|
|
198
|
-
|
|
204
|
+
def native_flags(kind, level, shared:)
|
|
205
|
+
prefix = kind == :mlkem ? "MLK" : "MLD"
|
|
206
|
+
ns = kind == :mlkem ? "pqcr_mlkem" : "pqcr_mldsa"
|
|
207
|
+
flags = []
|
|
208
|
+
flags << "-D#{prefix}_CONFIG_MULTILEVEL_BUILD"
|
|
209
|
+
flags << "-D#{prefix}_CONFIG_PARAMETER_SET=#{level}"
|
|
210
|
+
flags << "-D#{prefix}_CONFIG_NAMESPACE_PREFIX=#{ns}"
|
|
211
|
+
flags << "-D#{prefix}_CONFIG_NO_SUPERCOP"
|
|
212
|
+
flags << (shared ? "-D#{prefix}_CONFIG_MULTILEVEL_WITH_SHARED" : "-D#{prefix}_CONFIG_MULTILEVEL_NO_SHARED")
|
|
213
|
+
if NATIVE_ASM
|
|
214
|
+
flags << "-D#{prefix}_CONFIG_USE_NATIVE_BACKEND_ARITH"
|
|
215
|
+
flags << "-D#{prefix}_CONFIG_USE_NATIVE_BACKEND_FIPS202"
|
|
216
|
+
end
|
|
217
|
+
flags.join(" ")
|
|
218
|
+
end
|
|
199
219
|
|
|
220
|
+
def inject_native_sources!(config)
|
|
200
221
|
makefile = File.read("Makefile")
|
|
201
222
|
|
|
202
223
|
vendor_objects = []
|
|
203
224
|
build_rules = []
|
|
204
225
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
226
|
+
[
|
|
227
|
+
[:mlkem, "512", config[:mlkem_c], true],
|
|
228
|
+
[:mlkem, "768", config[:mlkem_c], false],
|
|
229
|
+
[:mlkem, "1024", config[:mlkem_c], false],
|
|
230
|
+
[:mldsa, "44", config[:mldsa_c], true],
|
|
231
|
+
[:mldsa, "65", config[:mldsa_c], false],
|
|
232
|
+
[:mldsa, "87", config[:mldsa_c], false]
|
|
233
|
+
].each do |kind, level, source, shared|
|
|
234
|
+
object = "pqnative_#{kind}_#{level}.o"
|
|
235
|
+
flags = native_flags(kind, level, shared: shared)
|
|
236
|
+
vendor_objects << object
|
|
237
|
+
build_rules << <<~RULE
|
|
238
|
+
#{object}: #{source}
|
|
239
|
+
$(ECHO) compiling #{source} [#{kind}-#{level}]
|
|
240
|
+
$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) #{VENDOR_ONLY_CFLAGS} #{flags} $(COUTFLAG)$@ -c $(CSRCFLAG)$<
|
|
241
|
+
RULE
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
if NATIVE_ASM
|
|
245
|
+
[
|
|
246
|
+
[:mlkem, "512", config[:mlkem_asm], true],
|
|
247
|
+
[:mlkem, "768", config[:mlkem_asm], false],
|
|
248
|
+
[:mlkem, "1024", config[:mlkem_asm], false],
|
|
249
|
+
[:mldsa, "44", config[:mldsa_asm], true],
|
|
250
|
+
[:mldsa, "65", config[:mldsa_asm], false],
|
|
251
|
+
[:mldsa, "87", config[:mldsa_asm], false]
|
|
252
|
+
].each do |kind, level, source, shared|
|
|
253
|
+
next unless File.exist?(source)
|
|
254
|
+
|
|
255
|
+
object = "pqnative_#{kind}_#{level}_asm.o"
|
|
256
|
+
flags = native_flags(kind, level, shared: shared)
|
|
209
257
|
vendor_objects << object
|
|
210
258
|
build_rules << <<~RULE
|
|
211
259
|
#{object}: #{source}
|
|
212
|
-
$(ECHO)
|
|
213
|
-
$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) #{VENDOR_ONLY_CFLAGS} $(COUTFLAG)$@ -c $(CSRCFLAG)$<
|
|
260
|
+
$(ECHO) assembling #{source} [#{kind}-#{level}]
|
|
261
|
+
$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) #{VENDOR_ONLY_CFLAGS} #{flags} $(COUTFLAG)$@ -c $(CSRCFLAG)$<
|
|
214
262
|
RULE
|
|
215
263
|
end
|
|
216
264
|
end
|
|
@@ -220,8 +268,8 @@ def inject_pqclean_sources!(pqclean_config)
|
|
|
220
268
|
|
|
221
269
|
makefile.sub!(objects_line, objects_line.chomp + " #{vendor_objects.join(' ')}\n")
|
|
222
270
|
|
|
223
|
-
unless makefile.include?("# vendored
|
|
224
|
-
rules_block = "\n# vendored
|
|
271
|
+
unless makefile.include?("# vendored pq-code-package objects")
|
|
272
|
+
rules_block = "\n# vendored pq-code-package objects\n" + build_rules.join("\n") + "\n"
|
|
225
273
|
anchor = "$(OBJS): $(HDRS) $(ruby_headers)\n"
|
|
226
274
|
raise "Could not find OBJS dependency anchor in generated Makefile" unless makefile.include?(anchor)
|
|
227
275
|
|
|
@@ -231,18 +279,19 @@ def inject_pqclean_sources!(pqclean_config)
|
|
|
231
279
|
File.write("Makefile", makefile)
|
|
232
280
|
end
|
|
233
281
|
|
|
234
|
-
vendor_dir =
|
|
282
|
+
vendor_dir = find_vendor_dir
|
|
235
283
|
|
|
236
284
|
puts
|
|
237
285
|
puts "=== PQCrypto build configuration ==="
|
|
238
286
|
configure_openssl!
|
|
239
|
-
|
|
287
|
+
native_config = native_vendor_config(vendor_dir)
|
|
240
288
|
puts "OpenSSL: system"
|
|
241
|
-
|
|
242
|
-
puts "
|
|
243
|
-
puts "
|
|
289
|
+
puts "ML-KEM: mlkem-native vendored"
|
|
290
|
+
puts "ML-DSA: mldsa-native vendored"
|
|
291
|
+
puts "Native asm backends: #{NATIVE_ASM ? 'enabled' : 'disabled'}"
|
|
292
|
+
puts "PQClean fallback: removed"
|
|
244
293
|
puts "Output: pqcrypto/pqcrypto_secure"
|
|
245
294
|
puts "===================================="
|
|
246
295
|
|
|
247
296
|
create_makefile("pqcrypto/pqcrypto_secure")
|
|
248
|
-
|
|
297
|
+
inject_native_sources!(native_config)
|