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,224 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) The mldsa-native project authors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
|
|
4
|
+
*/
|
|
5
|
+
#ifndef MLD_PACKING_H
|
|
6
|
+
#define MLD_PACKING_H
|
|
7
|
+
|
|
8
|
+
#include "polyvec.h"
|
|
9
|
+
|
|
10
|
+
#define mld_pack_pk MLD_NAMESPACE_KL(pack_pk)
|
|
11
|
+
/*************************************************
|
|
12
|
+
* Name: mld_pack_pk
|
|
13
|
+
*
|
|
14
|
+
* Description: Bit-pack public key pk = (rho, t1).
|
|
15
|
+
*
|
|
16
|
+
* Arguments: - uint8_t pk[]: output byte array
|
|
17
|
+
* - const uint8_t rho[]: byte array containing rho
|
|
18
|
+
* - const mld_polyveck *t1: pointer to vector t1
|
|
19
|
+
**************************************************/
|
|
20
|
+
MLD_INTERNAL_API
|
|
21
|
+
void mld_pack_pk(uint8_t pk[MLDSA_CRYPTO_PUBLICKEYBYTES],
|
|
22
|
+
const uint8_t rho[MLDSA_SEEDBYTES], const mld_polyveck *t1)
|
|
23
|
+
__contract__(
|
|
24
|
+
requires(memory_no_alias(pk, MLDSA_CRYPTO_PUBLICKEYBYTES))
|
|
25
|
+
requires(memory_no_alias(rho, MLDSA_SEEDBYTES))
|
|
26
|
+
requires(memory_no_alias(t1, sizeof(mld_polyveck)))
|
|
27
|
+
requires(forall(k0, 0, MLDSA_K,
|
|
28
|
+
array_bound(t1->vec[k0].coeffs, 0, MLDSA_N, 0, 1 << 10)))
|
|
29
|
+
assigns(memory_slice(pk, MLDSA_CRYPTO_PUBLICKEYBYTES))
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
#define mld_pack_sk MLD_NAMESPACE_KL(pack_sk)
|
|
34
|
+
/*************************************************
|
|
35
|
+
* Name: mld_pack_sk
|
|
36
|
+
*
|
|
37
|
+
* Description: Bit-pack secret key sk = (rho, tr, key, t0, s1, s2).
|
|
38
|
+
*
|
|
39
|
+
* Arguments: - uint8_t sk[]: output byte array
|
|
40
|
+
* - const uint8_t rho[]: byte array containing rho
|
|
41
|
+
* - const uint8_t tr[]: byte array containing tr
|
|
42
|
+
* - const uint8_t key[]: byte array containing key
|
|
43
|
+
* - const mld_polyveck *t0: pointer to vector t0
|
|
44
|
+
* - const mld_polyvecl *s1: pointer to vector s1
|
|
45
|
+
* - const mld_polyveck *s2: pointer to vector s2
|
|
46
|
+
**************************************************/
|
|
47
|
+
MLD_INTERNAL_API
|
|
48
|
+
void mld_pack_sk(uint8_t sk[MLDSA_CRYPTO_SECRETKEYBYTES],
|
|
49
|
+
const uint8_t rho[MLDSA_SEEDBYTES],
|
|
50
|
+
const uint8_t tr[MLDSA_TRBYTES],
|
|
51
|
+
const uint8_t key[MLDSA_SEEDBYTES], const mld_polyveck *t0,
|
|
52
|
+
const mld_polyvecl *s1, const mld_polyveck *s2)
|
|
53
|
+
__contract__(
|
|
54
|
+
requires(memory_no_alias(sk, MLDSA_CRYPTO_SECRETKEYBYTES))
|
|
55
|
+
requires(memory_no_alias(rho, MLDSA_SEEDBYTES))
|
|
56
|
+
requires(memory_no_alias(tr, MLDSA_TRBYTES))
|
|
57
|
+
requires(memory_no_alias(key, MLDSA_SEEDBYTES))
|
|
58
|
+
requires(memory_no_alias(t0, sizeof(mld_polyveck)))
|
|
59
|
+
requires(memory_no_alias(s1, sizeof(mld_polyvecl)))
|
|
60
|
+
requires(memory_no_alias(s2, sizeof(mld_polyveck)))
|
|
61
|
+
requires(forall(k0, 0, MLDSA_K,
|
|
62
|
+
array_bound(t0->vec[k0].coeffs, 0, MLDSA_N, -(1<<(MLDSA_D-1)) + 1, (1<<(MLDSA_D-1)) + 1)))
|
|
63
|
+
requires(forall(k1, 0, MLDSA_L,
|
|
64
|
+
array_abs_bound(s1->vec[k1].coeffs, 0, MLDSA_N, MLDSA_ETA + 1)))
|
|
65
|
+
requires(forall(k2, 0, MLDSA_K,
|
|
66
|
+
array_abs_bound(s2->vec[k2].coeffs, 0, MLDSA_N, MLDSA_ETA + 1)))
|
|
67
|
+
assigns(memory_slice(sk, MLDSA_CRYPTO_SECRETKEYBYTES))
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
#define mld_pack_sig_c_h MLD_NAMESPACE_KL(pack_sig_c_h)
|
|
72
|
+
/*************************************************
|
|
73
|
+
* Name: mld_pack_sig_c_h
|
|
74
|
+
*
|
|
75
|
+
* Description: Bit-pack c and h component of sig = (c, z, h).
|
|
76
|
+
* The z component is packed separately using mld_pack_sig_z.
|
|
77
|
+
*
|
|
78
|
+
* Arguments: - uint8_t sig[]: output byte array
|
|
79
|
+
* - const uint8_t *c: pointer to challenge hash length
|
|
80
|
+
* MLDSA_SEEDBYTES
|
|
81
|
+
* - const mld_polyveck *h: pointer to hint vector h
|
|
82
|
+
* - const unsigned int number_of_hints: total
|
|
83
|
+
* hints in *h
|
|
84
|
+
*
|
|
85
|
+
* Note that the number_of_hints argument is not present
|
|
86
|
+
* in the reference implementation. It is added here to ease
|
|
87
|
+
* proof of type safety.
|
|
88
|
+
**************************************************/
|
|
89
|
+
MLD_INTERNAL_API
|
|
90
|
+
void mld_pack_sig_c_h(uint8_t sig[MLDSA_CRYPTO_BYTES],
|
|
91
|
+
const uint8_t c[MLDSA_CTILDEBYTES], const mld_polyveck *h,
|
|
92
|
+
const unsigned int number_of_hints)
|
|
93
|
+
__contract__(
|
|
94
|
+
requires(memory_no_alias(sig, MLDSA_CRYPTO_BYTES))
|
|
95
|
+
requires(memory_no_alias(c, MLDSA_CTILDEBYTES))
|
|
96
|
+
requires(memory_no_alias(h, sizeof(mld_polyveck)))
|
|
97
|
+
requires(forall(k1, 0, MLDSA_K,
|
|
98
|
+
array_bound(h->vec[k1].coeffs, 0, MLDSA_N, 0, 2)))
|
|
99
|
+
requires(number_of_hints <= MLDSA_OMEGA)
|
|
100
|
+
assigns(memory_slice(sig, MLDSA_CRYPTO_BYTES))
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
#define mld_pack_sig_z MLD_NAMESPACE_KL(pack_sig_z)
|
|
104
|
+
/*************************************************
|
|
105
|
+
* Name: mld_pack_sig_z
|
|
106
|
+
*
|
|
107
|
+
* Description: Bit-pack single polynomial of z component of sig = (c, z, h).
|
|
108
|
+
* The c and h components are packed separately using
|
|
109
|
+
* mld_pack_sig_c_h.
|
|
110
|
+
*
|
|
111
|
+
* Arguments: - uint8_t sig[]: output byte array
|
|
112
|
+
* - const mld_poly *zi: pointer to a single polynomial in z
|
|
113
|
+
* - const unsigned int i: index of zi in vector z
|
|
114
|
+
*
|
|
115
|
+
**************************************************/
|
|
116
|
+
MLD_INTERNAL_API
|
|
117
|
+
void mld_pack_sig_z(uint8_t sig[MLDSA_CRYPTO_BYTES], const mld_poly *zi,
|
|
118
|
+
unsigned i)
|
|
119
|
+
__contract__(
|
|
120
|
+
requires(memory_no_alias(sig, MLDSA_CRYPTO_BYTES))
|
|
121
|
+
requires(memory_no_alias(zi, sizeof(mld_poly)))
|
|
122
|
+
requires(i < MLDSA_L)
|
|
123
|
+
requires(array_bound(zi->coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1))
|
|
124
|
+
assigns(memory_slice(sig, MLDSA_CRYPTO_BYTES))
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
#define mld_unpack_pk MLD_NAMESPACE_KL(unpack_pk)
|
|
128
|
+
/*************************************************
|
|
129
|
+
* Name: mld_unpack_pk
|
|
130
|
+
*
|
|
131
|
+
* Description: Unpack public key pk = (rho, t1).
|
|
132
|
+
*
|
|
133
|
+
* Arguments: - const uint8_t rho[]: output byte array for rho
|
|
134
|
+
* - const mld_polyveck *t1: pointer to output vector t1
|
|
135
|
+
* - uint8_t pk[]: byte array containing bit-packed pk
|
|
136
|
+
**************************************************/
|
|
137
|
+
MLD_INTERNAL_API
|
|
138
|
+
void mld_unpack_pk(uint8_t rho[MLDSA_SEEDBYTES], mld_polyveck *t1,
|
|
139
|
+
const uint8_t pk[MLDSA_CRYPTO_PUBLICKEYBYTES])
|
|
140
|
+
__contract__(
|
|
141
|
+
requires(memory_no_alias(pk, MLDSA_CRYPTO_PUBLICKEYBYTES))
|
|
142
|
+
requires(memory_no_alias(rho, MLDSA_SEEDBYTES))
|
|
143
|
+
requires(memory_no_alias(t1, sizeof(mld_polyveck)))
|
|
144
|
+
assigns(memory_slice(rho, MLDSA_SEEDBYTES))
|
|
145
|
+
assigns(memory_slice(t1, sizeof(mld_polyveck)))
|
|
146
|
+
ensures(forall(k0, 0, MLDSA_K,
|
|
147
|
+
array_bound(t1->vec[k0].coeffs, 0, MLDSA_N, 0, 1 << 10)))
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
#define mld_unpack_sk MLD_NAMESPACE_KL(unpack_sk)
|
|
152
|
+
/*************************************************
|
|
153
|
+
* Name: mld_unpack_sk
|
|
154
|
+
*
|
|
155
|
+
* Description: Unpack secret key sk = (rho, tr, key, t0, s1, s2).
|
|
156
|
+
*
|
|
157
|
+
* Arguments: - const uint8_t rho[]: output byte array for rho
|
|
158
|
+
* - const uint8_t tr[]: output byte array for tr
|
|
159
|
+
* - const uint8_t key[]: output byte array for key
|
|
160
|
+
* - const mld_polyveck *t0: pointer to output vector t0
|
|
161
|
+
* - const mld_polyvecl *s1: pointer to output vector s1
|
|
162
|
+
* - const mld_polyveck *s2: pointer to output vector s2
|
|
163
|
+
* - uint8_t sk[]: byte array containing bit-packed sk
|
|
164
|
+
**************************************************/
|
|
165
|
+
MLD_INTERNAL_API
|
|
166
|
+
void mld_unpack_sk(uint8_t rho[MLDSA_SEEDBYTES], uint8_t tr[MLDSA_TRBYTES],
|
|
167
|
+
uint8_t key[MLDSA_SEEDBYTES], mld_polyveck *t0,
|
|
168
|
+
mld_polyvecl *s1, mld_polyveck *s2,
|
|
169
|
+
const uint8_t sk[MLDSA_CRYPTO_SECRETKEYBYTES])
|
|
170
|
+
__contract__(
|
|
171
|
+
requires(memory_no_alias(rho, MLDSA_SEEDBYTES))
|
|
172
|
+
requires(memory_no_alias(tr, MLDSA_TRBYTES))
|
|
173
|
+
requires(memory_no_alias(key, MLDSA_SEEDBYTES))
|
|
174
|
+
requires(memory_no_alias(t0, sizeof(mld_polyveck)))
|
|
175
|
+
requires(memory_no_alias(s1, sizeof(mld_polyvecl)))
|
|
176
|
+
requires(memory_no_alias(s2, sizeof(mld_polyveck)))
|
|
177
|
+
requires(memory_no_alias(sk, MLDSA_CRYPTO_SECRETKEYBYTES))
|
|
178
|
+
assigns(memory_slice(rho, MLDSA_SEEDBYTES))
|
|
179
|
+
assigns(memory_slice(tr, MLDSA_TRBYTES))
|
|
180
|
+
assigns(memory_slice(key, MLDSA_SEEDBYTES))
|
|
181
|
+
assigns(memory_slice(t0, sizeof(mld_polyveck)))
|
|
182
|
+
assigns(memory_slice(s1, sizeof(mld_polyvecl)))
|
|
183
|
+
assigns(memory_slice(s2, sizeof(mld_polyveck)))
|
|
184
|
+
ensures(forall(k0, 0, MLDSA_K,
|
|
185
|
+
array_bound(t0->vec[k0].coeffs, 0, MLDSA_N, -(1<<(MLDSA_D-1)) + 1, (1<<(MLDSA_D-1)) + 1)))
|
|
186
|
+
ensures(forall(k1, 0, MLDSA_L,
|
|
187
|
+
array_bound(s1->vec[k1].coeffs, 0, MLDSA_N, MLD_POLYETA_UNPACK_LOWER_BOUND, MLDSA_ETA + 1)))
|
|
188
|
+
ensures(forall(k2, 0, MLDSA_K,
|
|
189
|
+
array_bound(s2->vec[k2].coeffs, 0, MLDSA_N, MLD_POLYETA_UNPACK_LOWER_BOUND, MLDSA_ETA + 1)))
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
#define mld_unpack_sig MLD_NAMESPACE_KL(unpack_sig)
|
|
193
|
+
/*************************************************
|
|
194
|
+
* Name: mld_unpack_sig
|
|
195
|
+
*
|
|
196
|
+
* Description: Unpack signature sig = (c, z, h).
|
|
197
|
+
*
|
|
198
|
+
* Arguments: - uint8_t *c: pointer to output challenge hash
|
|
199
|
+
* - mld_polyvecl *z: pointer to output vector z
|
|
200
|
+
* - mld_polyveck *h: pointer to output hint vector h
|
|
201
|
+
* - const uint8_t sig[]: byte array containing
|
|
202
|
+
* bit-packed signature
|
|
203
|
+
*
|
|
204
|
+
* Returns 1 in case of malformed signature; otherwise 0.
|
|
205
|
+
**************************************************/
|
|
206
|
+
MLD_INTERNAL_API
|
|
207
|
+
MLD_MUST_CHECK_RETURN_VALUE
|
|
208
|
+
int mld_unpack_sig(uint8_t c[MLDSA_CTILDEBYTES], mld_polyvecl *z,
|
|
209
|
+
mld_polyveck *h, const uint8_t sig[MLDSA_CRYPTO_BYTES])
|
|
210
|
+
__contract__(
|
|
211
|
+
requires(memory_no_alias(sig, MLDSA_CRYPTO_BYTES))
|
|
212
|
+
requires(memory_no_alias(c, MLDSA_CTILDEBYTES))
|
|
213
|
+
requires(memory_no_alias(z, sizeof(mld_polyvecl)))
|
|
214
|
+
requires(memory_no_alias(h, sizeof(mld_polyveck)))
|
|
215
|
+
assigns(memory_slice(c, MLDSA_CTILDEBYTES))
|
|
216
|
+
assigns(memory_slice(z, sizeof(mld_polyvecl)))
|
|
217
|
+
assigns(memory_slice(h, sizeof(mld_polyveck)))
|
|
218
|
+
ensures(forall(k0, 0, MLDSA_L,
|
|
219
|
+
array_bound(z->vec[k0].coeffs, 0, MLDSA_N, -(MLDSA_GAMMA1 - 1), MLDSA_GAMMA1 + 1)))
|
|
220
|
+
ensures(forall(k1, 0, MLDSA_K,
|
|
221
|
+
array_bound(h->vec[k1].coeffs, 0, MLDSA_N, 0, 2)))
|
|
222
|
+
ensures(return_value >= 0 && return_value <= 1)
|
|
223
|
+
);
|
|
224
|
+
#endif /* !MLD_PACKING_H */
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) The mldsa-native project authors
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
|
|
4
|
+
*/
|
|
5
|
+
#ifndef MLD_PARAMS_H
|
|
6
|
+
#define MLD_PARAMS_H
|
|
7
|
+
|
|
8
|
+
#define MLDSA_SEEDBYTES 32
|
|
9
|
+
#define MLDSA_CRHBYTES 64
|
|
10
|
+
#define MLDSA_TRBYTES 64
|
|
11
|
+
#define MLDSA_RNDBYTES 32
|
|
12
|
+
#define MLDSA_N 256
|
|
13
|
+
#define MLDSA_Q 8380417
|
|
14
|
+
#define MLDSA_Q_HALF ((MLDSA_Q + 1) / 2)
|
|
15
|
+
#define MLDSA_D 13
|
|
16
|
+
|
|
17
|
+
#if MLD_CONFIG_PARAMETER_SET == 44
|
|
18
|
+
|
|
19
|
+
#define MLDSA_K 4
|
|
20
|
+
#define MLDSA_L 4
|
|
21
|
+
#define MLDSA_ETA 2
|
|
22
|
+
#define MLDSA_TAU 39
|
|
23
|
+
#define MLDSA_BETA 78
|
|
24
|
+
#define MLDSA_GAMMA1 (1 << 17)
|
|
25
|
+
#define MLDSA_GAMMA2 ((MLDSA_Q - 1) / 88)
|
|
26
|
+
#define MLDSA_OMEGA 80
|
|
27
|
+
#define MLDSA_CTILDEBYTES 32
|
|
28
|
+
#define MLDSA_POLYZ_PACKEDBYTES 576
|
|
29
|
+
#define MLDSA_POLYW1_PACKEDBYTES 192
|
|
30
|
+
#define MLDSA_POLYETA_PACKEDBYTES 96
|
|
31
|
+
|
|
32
|
+
#elif MLD_CONFIG_PARAMETER_SET == 65
|
|
33
|
+
|
|
34
|
+
#define MLDSA_K 6
|
|
35
|
+
#define MLDSA_L 5
|
|
36
|
+
#define MLDSA_ETA 4
|
|
37
|
+
#define MLDSA_TAU 49
|
|
38
|
+
#define MLDSA_BETA 196
|
|
39
|
+
#define MLDSA_GAMMA1 (1 << 19)
|
|
40
|
+
#define MLDSA_GAMMA2 ((MLDSA_Q - 1) / 32)
|
|
41
|
+
#define MLDSA_OMEGA 55
|
|
42
|
+
#define MLDSA_CTILDEBYTES 48
|
|
43
|
+
#define MLDSA_POLYZ_PACKEDBYTES 640
|
|
44
|
+
#define MLDSA_POLYW1_PACKEDBYTES 128
|
|
45
|
+
#define MLDSA_POLYETA_PACKEDBYTES 128
|
|
46
|
+
|
|
47
|
+
#elif MLD_CONFIG_PARAMETER_SET == 87
|
|
48
|
+
|
|
49
|
+
#define MLDSA_K 8
|
|
50
|
+
#define MLDSA_L 7
|
|
51
|
+
#define MLDSA_ETA 2
|
|
52
|
+
#define MLDSA_TAU 60
|
|
53
|
+
#define MLDSA_BETA 120
|
|
54
|
+
#define MLDSA_GAMMA1 (1 << 19)
|
|
55
|
+
#define MLDSA_GAMMA2 ((MLDSA_Q - 1) / 32)
|
|
56
|
+
#define MLDSA_OMEGA 75
|
|
57
|
+
#define MLDSA_CTILDEBYTES 64
|
|
58
|
+
#define MLDSA_POLYZ_PACKEDBYTES 640
|
|
59
|
+
#define MLDSA_POLYW1_PACKEDBYTES 128
|
|
60
|
+
#define MLDSA_POLYETA_PACKEDBYTES 96
|
|
61
|
+
|
|
62
|
+
#endif /* MLD_CONFIG_PARAMETER_SET == 87 */
|
|
63
|
+
|
|
64
|
+
#define MLDSA_POLYT1_PACKEDBYTES 320
|
|
65
|
+
#define MLDSA_POLYT0_PACKEDBYTES 416
|
|
66
|
+
#define MLDSA_POLYVECH_PACKEDBYTES (MLDSA_OMEGA + MLDSA_K)
|
|
67
|
+
|
|
68
|
+
#define MLDSA_CRYPTO_PUBLICKEYBYTES \
|
|
69
|
+
(MLDSA_SEEDBYTES + MLDSA_K * MLDSA_POLYT1_PACKEDBYTES)
|
|
70
|
+
#define MLDSA_CRYPTO_SECRETKEYBYTES \
|
|
71
|
+
(2 * MLDSA_SEEDBYTES + MLDSA_TRBYTES + MLDSA_L * MLDSA_POLYETA_PACKEDBYTES + \
|
|
72
|
+
MLDSA_K * MLDSA_POLYETA_PACKEDBYTES + MLDSA_K * MLDSA_POLYT0_PACKEDBYTES)
|
|
73
|
+
#define MLDSA_CRYPTO_BYTES \
|
|
74
|
+
(MLDSA_CTILDEBYTES + MLDSA_L * MLDSA_POLYZ_PACKEDBYTES + \
|
|
75
|
+
MLDSA_POLYVECH_PACKEDBYTES)
|
|
76
|
+
|
|
77
|
+
#endif /* !MLD_PARAMS_H */
|