pq_crypto 0.6.4 → 0.6.6

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.
Files changed (213) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +180 -0
  3. data/README.md +7 -0
  4. data/ext/pqcrypto/extconf.rb +4 -1
  5. data/ext/pqcrypto/pq_externalmu.c +35 -0
  6. data/ext/pqcrypto/pqcrypto_native_api.h +85 -75
  7. data/ext/pqcrypto/pqcrypto_ruby_secure.c +16 -9
  8. data/ext/pqcrypto/pqcrypto_secure.c +43 -33
  9. data/ext/pqcrypto/pqcrypto_secure.h +52 -47
  10. data/ext/pqcrypto/pqcrypto_version.h +1 -1
  11. data/ext/pqcrypto/vendor/.vendored +7 -7
  12. data/ext/pqcrypto/vendor/mldsa-native/BUILDING.md +5 -2
  13. data/ext/pqcrypto/vendor/mldsa-native/LICENSE +21 -2
  14. data/ext/pqcrypto/vendor/mldsa-native/README.md +20 -7
  15. data/ext/pqcrypto/vendor/mldsa-native/RELEASE.md +160 -0
  16. data/ext/pqcrypto/vendor/mldsa-native/SECURITY.md +1 -1
  17. data/ext/pqcrypto/vendor/mldsa-native/mldsa/README.md +2 -2
  18. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native.c +85 -59
  19. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native.h +292 -348
  20. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native_asm.S +122 -76
  21. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native_config.h +184 -86
  22. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/cbmc.h +49 -4
  23. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/common.h +49 -81
  24. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/context.h +152 -0
  25. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/ct.h +25 -12
  26. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/debug.c +2 -0
  27. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/debug.h +2 -0
  28. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/fips202x4.c +2 -2
  29. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.c +9 -11
  30. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/auto.h +19 -11
  31. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_scalar_aarch64_asm.S +6 -4
  32. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_v84a_aarch64_asm.S +7 -4
  33. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x2_v84a_aarch64_asm.S +7 -4
  34. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_scalar_hybrid_aarch64_asm.S +12 -9
  35. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_v84a_scalar_hybrid_aarch64_asm.S +12 -9
  36. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_scalar.h +1 -1
  37. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_v84a.h +3 -2
  38. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x2_v84a.h +3 -2
  39. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_scalar.h +6 -1
  40. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_v84a_scalar.h +3 -2
  41. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/api.h +11 -11
  42. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/mve.h +9 -22
  43. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.S +8 -5
  44. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.c +1 -0
  45. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/{state_extract_bytes_x4_mve.S → keccak_f1600_x4_state_extract_bytes_mve.S} +14 -14
  46. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/{state_xor_bytes_x4_mve.S → keccak_f1600_x4_state_xor_bytes_mve.S} +12 -12
  47. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/auto.h +5 -4
  48. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/keccak_f1600_x4_avx2.h +2 -2
  49. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/fips202_native_x86_64.h +1 -0
  50. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/keccak_f1600_x4_avx2_asm.S +36 -2
  51. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/meta.h +62 -4
  52. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/arith_native_aarch64.h +87 -54
  53. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{intt_aarch64_asm.S → mldsa_intt_aarch64_asm.S} +39 -6
  54. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{ntt_aarch64_asm.S → mldsa_ntt_aarch64_asm.S} +39 -6
  55. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{pointwise_montgomery_aarch64_asm.S → mldsa_pointwise_montgomery_aarch64_asm.S} +25 -3
  56. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_caddq_aarch64_asm.S → mldsa_poly_caddq_aarch64_asm.S} +19 -3
  57. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_chknorm_aarch64_asm.S → mldsa_poly_chknorm_aarch64_asm.S} +24 -3
  58. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_decompose_32_aarch64_asm.S → mldsa_poly_decompose_32_aarch64_asm.S} +25 -3
  59. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_decompose_88_aarch64_asm.S → mldsa_poly_decompose_88_aarch64_asm.S} +25 -3
  60. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_use_hint_32_aarch64_asm.S → mldsa_poly_use_hint_32_aarch64_asm.S} +25 -3
  61. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{poly_use_hint_88_aarch64_asm.S → mldsa_poly_use_hint_88_aarch64_asm.S} +25 -3
  62. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{mld_polyvecl_pointwise_acc_montgomery_l4_aarch64_asm.S → mldsa_polyvecl_pointwise_acc_montgomery_l4_aarch64_asm.S} +31 -3
  63. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{mld_polyvecl_pointwise_acc_montgomery_l5_aarch64_asm.S → mldsa_polyvecl_pointwise_acc_montgomery_l5_aarch64_asm.S} +31 -3
  64. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{mld_polyvecl_pointwise_acc_montgomery_l7_aarch64_asm.S → mldsa_polyvecl_pointwise_acc_montgomery_l7_aarch64_asm.S} +31 -3
  65. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{polyz_unpack_17_aarch64_asm.S → mldsa_polyz_unpack_17_aarch64_asm.S} +31 -3
  66. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{polyz_unpack_19_aarch64_asm.S → mldsa_polyz_unpack_19_aarch64_asm.S} +31 -3
  67. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{rej_uniform_aarch64_asm.S → mldsa_rej_uniform_aarch64_asm.S} +48 -15
  68. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{rej_uniform_eta2_aarch64_asm.S → mldsa_rej_uniform_eta2_aarch64_asm.S} +42 -9
  69. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/{rej_uniform_eta4_aarch64_asm.S → mldsa_rej_uniform_eta4_aarch64_asm.S} +42 -9
  70. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/api.h +11 -3
  71. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/meta.h +3 -2
  72. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/meta.h +28 -28
  73. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/arith_native_x86_64.h +171 -49
  74. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{intt_avx2_asm.S → mldsa_intt_avx2_asm.S} +23 -1
  75. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{ntt_avx2_asm.S → mldsa_ntt_avx2_asm.S} +23 -1
  76. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{nttunpack_avx2_asm.S → mldsa_nttunpack_avx2_asm.S} +17 -1
  77. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{pointwise_acc_l4_avx2_asm.S → mldsa_pointwise_acc_l4_avx2_asm.S} +37 -3
  78. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{pointwise_acc_l5_avx2_asm.S → mldsa_pointwise_acc_l5_avx2_asm.S} +37 -3
  79. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{pointwise_acc_l7_avx2_asm.S → mldsa_pointwise_acc_l7_avx2_asm.S} +37 -3
  80. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{pointwise_avx2_asm.S → mldsa_pointwise_avx2_asm.S} +31 -3
  81. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/{poly_caddq_avx2_asm.S → mldsa_poly_caddq_avx2_asm.S} +18 -9
  82. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_chknorm_avx2_asm.S +176 -0
  83. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_decompose_32_avx2_asm.S +490 -0
  84. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_decompose_88_avx2_asm.S +489 -0
  85. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_use_hint_32_avx2_asm.S +123 -0
  86. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_poly_use_hint_88_avx2_asm.S +125 -0
  87. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_polyz_unpack_17_avx2_asm.S +355 -0
  88. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_polyz_unpack_19_avx2_asm.S +355 -0
  89. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_avx2_asm.S +132 -0
  90. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_eta2_avx2_asm.S +205 -0
  91. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/mldsa_rej_uniform_eta4_avx2_asm.S +176 -0
  92. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/packing.c +27 -36
  93. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/packing.h +42 -8
  94. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/params.h +93 -17
  95. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly.c +74 -15
  96. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly.h +97 -11
  97. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly_kl.c +7 -38
  98. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly_kl.h +49 -7
  99. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec.c +16 -17
  100. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec.h +26 -9
  101. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec_lazy.c +3 -0
  102. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec_lazy.h +18 -19
  103. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/reduce.h +15 -3
  104. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/rounding.h +28 -6
  105. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sign.c +311 -246
  106. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sign.h +245 -240
  107. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sys.h +64 -5
  108. data/ext/pqcrypto/vendor/mlkem-native/BUILDING.md +5 -2
  109. data/ext/pqcrypto/vendor/mlkem-native/LICENSE +21 -3
  110. data/ext/pqcrypto/vendor/mlkem-native/README.md +4 -6
  111. data/ext/pqcrypto/vendor/mlkem-native/RELEASE.md +211 -0
  112. data/ext/pqcrypto/vendor/mlkem-native/mlkem/README.md +2 -2
  113. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native.c +25 -34
  114. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native.h +79 -142
  115. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native_asm.S +62 -71
  116. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native_config.h +77 -39
  117. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/cbmc.h +25 -0
  118. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/common.h +48 -34
  119. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/compress.c +25 -5
  120. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/compress.h +14 -0
  121. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/context.h +51 -0
  122. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/fips202.h +2 -2
  123. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/keccakf1600.c +8 -8
  124. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/auto.h +20 -12
  125. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x1_scalar_aarch64_asm.S +5 -3
  126. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x1_v84a_aarch64_asm.S +5 -2
  127. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x2_v84a_aarch64_asm.S +5 -2
  128. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_scalar_hybrid_aarch64_asm.S +10 -7
  129. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_v84a_scalar_hybrid_aarch64_asm.S +10 -7
  130. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x1_scalar.h +1 -1
  131. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x1_v84a.h +3 -2
  132. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x2_v84a.h +3 -2
  133. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x4_v8a_scalar.h +6 -1
  134. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x4_v8a_v84a_scalar.h +3 -2
  135. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/api.h +11 -11
  136. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/mve.h +8 -22
  137. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.S +8 -5
  138. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/{state_extract_bytes_x4_mve.S → keccak_f1600_x4_state_extract_bytes_mve.S} +14 -14
  139. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/{state_xor_bytes_x4_mve.S → keccak_f1600_x4_state_xor_bytes_mve.S} +12 -12
  140. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/x86_64/keccak_f1600_x4_avx2.h +2 -2
  141. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/x86_64/src/keccak_f1600_x4_avx2_asm.S +36 -2
  142. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/indcpa.c +22 -0
  143. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/indcpa.h +20 -11
  144. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/kem.c +39 -11
  145. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/kem.h +64 -15
  146. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/meta.h +44 -2
  147. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/aarch64_zetas.c +2 -0
  148. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/arith_native_aarch64.h +11 -10
  149. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/{intt_aarch64_asm.S → mlkem_intt_aarch64_asm.S} +16 -9
  150. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/{ntt_aarch64_asm.S → mlkem_ntt_aarch64_asm.S} +10 -7
  151. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/{poly_mulcache_compute_aarch64_asm.S → mlkem_poly_mulcache_compute_aarch64_asm.S} +6 -3
  152. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/{poly_reduce_aarch64_asm.S → mlkem_poly_reduce_aarch64_asm.S} +6 -3
  153. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/{poly_tobytes_aarch64_asm.S → mlkem_poly_tobytes_aarch64_asm.S} +12 -5
  154. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/{poly_tomont_aarch64_asm.S → mlkem_poly_tomont_aarch64_asm.S} +11 -5
  155. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/{polyvec_basemul_acc_montgomery_cached_k2_aarch64_asm.S → mlkem_polyvec_basemul_acc_montgomery_cached_k2_aarch64_asm.S} +6 -3
  156. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/{polyvec_basemul_acc_montgomery_cached_k3_aarch64_asm.S → mlkem_polyvec_basemul_acc_montgomery_cached_k3_aarch64_asm.S} +6 -3
  157. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/{polyvec_basemul_acc_montgomery_cached_k4_aarch64_asm.S → mlkem_polyvec_basemul_acc_montgomery_cached_k4_aarch64_asm.S} +6 -3
  158. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/{rej_uniform_aarch64_asm.S → mlkem_rej_uniform_aarch64_asm.S} +17 -17
  159. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/api.h +21 -8
  160. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/meta.h +1 -1
  161. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/ppc64le/meta.h +4 -0
  162. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/ppc64le/src/{intt_ppc_asm.S → mlkem_intt_ppc_asm.S} +29 -5
  163. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/ppc64le/src/{ntt_ppc_asm.S → mlkem_ntt_ppc_asm.S} +22 -1
  164. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/ppc64le/src/{poly_tomont_ppc_asm.S → mlkem_poly_tomont_ppc_asm.S} +25 -3
  165. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/ppc64le/src/{reduce_ppc_asm.S → mlkem_reduce_ppc_asm.S} +22 -1
  166. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/meta.h +4 -0
  167. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/arith_native_riscv64.h +4 -0
  168. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_poly.c +6 -2
  169. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/meta.h +45 -25
  170. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/arith_native_x86_64.h +20 -20
  171. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/compress_consts.c +14 -3
  172. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/compress_consts.h +8 -0
  173. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{intt_avx2_asm.S → mlkem_intt_avx2_asm.S} +27 -3
  174. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{ntt_avx2_asm.S → mlkem_ntt_avx2_asm.S} +23 -1
  175. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{nttfrombytes_avx2_asm.S → mlkem_nttfrombytes_avx2_asm.S} +27 -3
  176. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{ntttobytes_avx2_asm.S → mlkem_ntttobytes_avx2_asm.S} +27 -3
  177. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{nttunpack_avx2_asm.S → mlkem_nttunpack_avx2_asm.S} +17 -1
  178. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{poly_compress_d10_avx2_asm.S → mlkem_poly_compress_d10_avx2_asm.S} +34 -3
  179. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{poly_compress_d11_avx2_asm.S → mlkem_poly_compress_d11_avx2_asm.S} +33 -2
  180. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{poly_compress_d4_avx2_asm.S → mlkem_poly_compress_d4_avx2_asm.S} +34 -3
  181. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{poly_compress_d5_avx2_asm.S → mlkem_poly_compress_d5_avx2_asm.S} +33 -2
  182. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{poly_decompress_d10_avx2_asm.S → mlkem_poly_decompress_d10_avx2_asm.S} +32 -3
  183. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{poly_decompress_d11_avx2_asm.S → mlkem_poly_decompress_d11_avx2_asm.S} +32 -2
  184. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{poly_decompress_d4_avx2_asm.S → mlkem_poly_decompress_d4_avx2_asm.S} +32 -3
  185. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{poly_decompress_d5_avx2_asm.S → mlkem_poly_decompress_d5_avx2_asm.S} +32 -2
  186. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{poly_mulcache_compute_avx2_asm.S → mlkem_poly_mulcache_compute_avx2_asm.S} +29 -1
  187. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{polyvec_basemul_acc_montgomery_cached_k2_avx2_asm.S → mlkem_polyvec_basemul_acc_montgomery_cached_k2_avx2_asm.S} +35 -1
  188. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{polyvec_basemul_acc_montgomery_cached_k3_avx2_asm.S → mlkem_polyvec_basemul_acc_montgomery_cached_k3_avx2_asm.S} +35 -1
  189. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{polyvec_basemul_acc_montgomery_cached_k4_avx2_asm.S → mlkem_polyvec_basemul_acc_montgomery_cached_k4_avx2_asm.S} +35 -1
  190. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{reduce_avx2_asm.S → mlkem_reduce_avx2_asm.S} +17 -1
  191. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{rej_uniform_avx2_asm.S → mlkem_rej_uniform_avx2_asm.S} +40 -7
  192. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/{tomont_avx2_asm.S → mlkem_tomont_avx2_asm.S} +20 -3
  193. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly.c +7 -2
  194. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly.h +6 -0
  195. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly_k.c +25 -4
  196. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly_k.h +33 -4
  197. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/sampling.c +4 -0
  198. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/sampling.h +4 -0
  199. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/sys.h +21 -3
  200. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/verify.h +11 -10
  201. data/lib/pq_crypto/version.rb +1 -1
  202. data/script/vendor_libs.rb +6 -6
  203. metadata +79 -79
  204. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_chknorm_avx2.c +0 -52
  205. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_decompose_32_avx2.c +0 -157
  206. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_decompose_88_avx2.c +0 -157
  207. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_use_hint_32_avx2.c +0 -103
  208. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_use_hint_88_avx2.c +0 -105
  209. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/polyz_unpack_17_avx2.c +0 -94
  210. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/polyz_unpack_19_avx2.c +0 -96
  211. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_avx2.c +0 -126
  212. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_eta2_avx2.c +0 -157
  213. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_eta4_avx2.c +0 -141
@@ -0,0 +1,355 @@
1
+ /*
2
+ * Copyright (c) The mldsa-native project authors
3
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
4
+ */
5
+
6
+ /* References
7
+ * ==========
8
+ *
9
+ * - [REF_AVX2]
10
+ * CRYSTALS-Dilithium optimized AVX2 implementation
11
+ * Bai, Ducas, Kiltz, Lepoint, Lyubashevsky, Schwabe, Seiler, Stehlé
12
+ * https://github.com/pq-crystals/dilithium/tree/master/avx2
13
+ */
14
+
15
+ /*
16
+ * This file is derived from the public domain
17
+ * AVX2 Dilithium implementation @[REF_AVX2].
18
+ */
19
+
20
+
21
+ /*yaml
22
+ Name: polyz_unpack_19_avx2_asm
23
+ Description: x86_64 AVX2 unpacking of 19-bit packed coefficients.
24
+ Unpack polynomial z with 20-bit packed coefficients (GAMMA1 = 2^19),
25
+ mapping packed [0, 2^20-1] to signed [-(2^19-1), 2^19] via GAMMA1 - x.
26
+ Signature: void mld_polyz_unpack_19_avx2_asm(int32_t *r, const uint8_t *a)
27
+ ABI:
28
+ Architecture: x86_64
29
+ CallingConvention: SysV
30
+ Features: [AVX2]
31
+ rdi:
32
+ type: buffer
33
+ size_bytes: 1024
34
+ permissions: write-only
35
+ c_parameter: int32_t *r
36
+ description: Output polynomial (256 x int32_t)
37
+ rsi:
38
+ type: buffer
39
+ size_bytes: 640
40
+ permissions: read-only
41
+ c_parameter: const uint8_t *a
42
+ description: Packed input bytes
43
+ */
44
+
45
+ #include "../../../common.h"
46
+
47
+ #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \
48
+ (!defined(MLD_CONFIG_NO_SIGN_API) || \
49
+ !defined(MLD_CONFIG_NO_VERIFY_API)) && \
50
+ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED) && \
51
+ (defined(MLD_CONFIG_MULTILEVEL_WITH_SHARED) || \
52
+ (MLD_CONFIG_PARAMETER_SET == 65 || MLD_CONFIG_PARAMETER_SET == 87))
53
+
54
+
55
+ /*
56
+ * WARNING: This file is auto-derived from the mldsa-native source file
57
+ * dev/x86_64/src/mldsa_polyz_unpack_19_avx2_asm.S using scripts/simpasm. Do not modify it directly.
58
+ */
59
+
60
+ .text
61
+ .balign 4
62
+ .global MLD_ASM_NAMESPACE(polyz_unpack_19_avx2_asm)
63
+ MLD_ASM_FN_SYMBOL(polyz_unpack_19_avx2_asm)
64
+
65
+ .cfi_startproc
66
+ movabsq $-0xfbfcfd00fdff00, %rax # imm = 0xFF040302FF020100
67
+ vmovq %rax, %xmm1
68
+ movabsq $-0xf6f7f800f8f9fb, %rax # imm = 0xFF090807FF070605
69
+ vpinsrq $0x1, %rax, %xmm1, %xmm1
70
+ movabsq $-0xe5e6e700e7e8ea, %rax # imm = 0xFF1A1918FF181716
71
+ vmovq %rax, %xmm5
72
+ movabsq $-0xe0e1e200e2e3e5, %rax # imm = 0xFF1F1E1DFF1D1C1B
73
+ vpinsrq $0x1, %rax, %xmm5, %xmm5
74
+ vinserti128 $0x1, %xmm5, %ymm1, %ymm1
75
+ movabsq $0x400000000, %rax # imm = 0x400000000
76
+ vmovq %rax, %xmm2
77
+ movabsq $0x400000000, %rax # imm = 0x400000000
78
+ vpinsrq $0x1, %rax, %xmm2, %xmm2
79
+ vinserti128 $0x1, %xmm2, %ymm2, %ymm2
80
+ movl $0xfffff, %eax # imm = 0xFFFFF
81
+ vmovd %eax, %xmm3
82
+ vpbroadcastd %xmm3, %ymm3
83
+ movl $0x80000, %eax # imm = 0x80000
84
+ vmovd %eax, %xmm4
85
+ vpbroadcastd %xmm4, %ymm4
86
+ vmovdqu (%rsi), %xmm0
87
+ vmovdqu 0x4(%rsi), %xmm5
88
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
89
+ vpshufb %ymm1, %ymm0, %ymm0
90
+ vpsrlvd %ymm2, %ymm0, %ymm0
91
+ vpand %ymm3, %ymm0, %ymm0
92
+ vpsubd %ymm0, %ymm4, %ymm0
93
+ vmovdqa %ymm0, (%rdi)
94
+ vmovdqu 0x14(%rsi), %xmm0
95
+ vmovdqu 0x18(%rsi), %xmm5
96
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
97
+ vpshufb %ymm1, %ymm0, %ymm0
98
+ vpsrlvd %ymm2, %ymm0, %ymm0
99
+ vpand %ymm3, %ymm0, %ymm0
100
+ vpsubd %ymm0, %ymm4, %ymm0
101
+ vmovdqa %ymm0, 0x20(%rdi)
102
+ vmovdqu 0x28(%rsi), %xmm0
103
+ vmovdqu 0x2c(%rsi), %xmm5
104
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
105
+ vpshufb %ymm1, %ymm0, %ymm0
106
+ vpsrlvd %ymm2, %ymm0, %ymm0
107
+ vpand %ymm3, %ymm0, %ymm0
108
+ vpsubd %ymm0, %ymm4, %ymm0
109
+ vmovdqa %ymm0, 0x40(%rdi)
110
+ vmovdqu 0x3c(%rsi), %xmm0
111
+ vmovdqu 0x40(%rsi), %xmm5
112
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
113
+ vpshufb %ymm1, %ymm0, %ymm0
114
+ vpsrlvd %ymm2, %ymm0, %ymm0
115
+ vpand %ymm3, %ymm0, %ymm0
116
+ vpsubd %ymm0, %ymm4, %ymm0
117
+ vmovdqa %ymm0, 0x60(%rdi)
118
+ vmovdqu 0x50(%rsi), %xmm0
119
+ vmovdqu 0x54(%rsi), %xmm5
120
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
121
+ vpshufb %ymm1, %ymm0, %ymm0
122
+ vpsrlvd %ymm2, %ymm0, %ymm0
123
+ vpand %ymm3, %ymm0, %ymm0
124
+ vpsubd %ymm0, %ymm4, %ymm0
125
+ vmovdqa %ymm0, 0x80(%rdi)
126
+ vmovdqu 0x64(%rsi), %xmm0
127
+ vmovdqu 0x68(%rsi), %xmm5
128
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
129
+ vpshufb %ymm1, %ymm0, %ymm0
130
+ vpsrlvd %ymm2, %ymm0, %ymm0
131
+ vpand %ymm3, %ymm0, %ymm0
132
+ vpsubd %ymm0, %ymm4, %ymm0
133
+ vmovdqa %ymm0, 0xa0(%rdi)
134
+ vmovdqu 0x78(%rsi), %xmm0
135
+ vmovdqu 0x7c(%rsi), %xmm5
136
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
137
+ vpshufb %ymm1, %ymm0, %ymm0
138
+ vpsrlvd %ymm2, %ymm0, %ymm0
139
+ vpand %ymm3, %ymm0, %ymm0
140
+ vpsubd %ymm0, %ymm4, %ymm0
141
+ vmovdqa %ymm0, 0xc0(%rdi)
142
+ vmovdqu 0x8c(%rsi), %xmm0
143
+ vmovdqu 0x90(%rsi), %xmm5
144
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
145
+ vpshufb %ymm1, %ymm0, %ymm0
146
+ vpsrlvd %ymm2, %ymm0, %ymm0
147
+ vpand %ymm3, %ymm0, %ymm0
148
+ vpsubd %ymm0, %ymm4, %ymm0
149
+ vmovdqa %ymm0, 0xe0(%rdi)
150
+ vmovdqu 0xa0(%rsi), %xmm0
151
+ vmovdqu 0xa4(%rsi), %xmm5
152
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
153
+ vpshufb %ymm1, %ymm0, %ymm0
154
+ vpsrlvd %ymm2, %ymm0, %ymm0
155
+ vpand %ymm3, %ymm0, %ymm0
156
+ vpsubd %ymm0, %ymm4, %ymm0
157
+ vmovdqa %ymm0, 0x100(%rdi)
158
+ vmovdqu 0xb4(%rsi), %xmm0
159
+ vmovdqu 0xb8(%rsi), %xmm5
160
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
161
+ vpshufb %ymm1, %ymm0, %ymm0
162
+ vpsrlvd %ymm2, %ymm0, %ymm0
163
+ vpand %ymm3, %ymm0, %ymm0
164
+ vpsubd %ymm0, %ymm4, %ymm0
165
+ vmovdqa %ymm0, 0x120(%rdi)
166
+ vmovdqu 0xc8(%rsi), %xmm0
167
+ vmovdqu 0xcc(%rsi), %xmm5
168
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
169
+ vpshufb %ymm1, %ymm0, %ymm0
170
+ vpsrlvd %ymm2, %ymm0, %ymm0
171
+ vpand %ymm3, %ymm0, %ymm0
172
+ vpsubd %ymm0, %ymm4, %ymm0
173
+ vmovdqa %ymm0, 0x140(%rdi)
174
+ vmovdqu 0xdc(%rsi), %xmm0
175
+ vmovdqu 0xe0(%rsi), %xmm5
176
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
177
+ vpshufb %ymm1, %ymm0, %ymm0
178
+ vpsrlvd %ymm2, %ymm0, %ymm0
179
+ vpand %ymm3, %ymm0, %ymm0
180
+ vpsubd %ymm0, %ymm4, %ymm0
181
+ vmovdqa %ymm0, 0x160(%rdi)
182
+ vmovdqu 0xf0(%rsi), %xmm0
183
+ vmovdqu 0xf4(%rsi), %xmm5
184
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
185
+ vpshufb %ymm1, %ymm0, %ymm0
186
+ vpsrlvd %ymm2, %ymm0, %ymm0
187
+ vpand %ymm3, %ymm0, %ymm0
188
+ vpsubd %ymm0, %ymm4, %ymm0
189
+ vmovdqa %ymm0, 0x180(%rdi)
190
+ vmovdqu 0x104(%rsi), %xmm0
191
+ vmovdqu 0x108(%rsi), %xmm5
192
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
193
+ vpshufb %ymm1, %ymm0, %ymm0
194
+ vpsrlvd %ymm2, %ymm0, %ymm0
195
+ vpand %ymm3, %ymm0, %ymm0
196
+ vpsubd %ymm0, %ymm4, %ymm0
197
+ vmovdqa %ymm0, 0x1a0(%rdi)
198
+ vmovdqu 0x118(%rsi), %xmm0
199
+ vmovdqu 0x11c(%rsi), %xmm5
200
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
201
+ vpshufb %ymm1, %ymm0, %ymm0
202
+ vpsrlvd %ymm2, %ymm0, %ymm0
203
+ vpand %ymm3, %ymm0, %ymm0
204
+ vpsubd %ymm0, %ymm4, %ymm0
205
+ vmovdqa %ymm0, 0x1c0(%rdi)
206
+ vmovdqu 0x12c(%rsi), %xmm0
207
+ vmovdqu 0x130(%rsi), %xmm5
208
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
209
+ vpshufb %ymm1, %ymm0, %ymm0
210
+ vpsrlvd %ymm2, %ymm0, %ymm0
211
+ vpand %ymm3, %ymm0, %ymm0
212
+ vpsubd %ymm0, %ymm4, %ymm0
213
+ vmovdqa %ymm0, 0x1e0(%rdi)
214
+ vmovdqu 0x140(%rsi), %xmm0
215
+ vmovdqu 0x144(%rsi), %xmm5
216
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
217
+ vpshufb %ymm1, %ymm0, %ymm0
218
+ vpsrlvd %ymm2, %ymm0, %ymm0
219
+ vpand %ymm3, %ymm0, %ymm0
220
+ vpsubd %ymm0, %ymm4, %ymm0
221
+ vmovdqa %ymm0, 0x200(%rdi)
222
+ vmovdqu 0x154(%rsi), %xmm0
223
+ vmovdqu 0x158(%rsi), %xmm5
224
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
225
+ vpshufb %ymm1, %ymm0, %ymm0
226
+ vpsrlvd %ymm2, %ymm0, %ymm0
227
+ vpand %ymm3, %ymm0, %ymm0
228
+ vpsubd %ymm0, %ymm4, %ymm0
229
+ vmovdqa %ymm0, 0x220(%rdi)
230
+ vmovdqu 0x168(%rsi), %xmm0
231
+ vmovdqu 0x16c(%rsi), %xmm5
232
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
233
+ vpshufb %ymm1, %ymm0, %ymm0
234
+ vpsrlvd %ymm2, %ymm0, %ymm0
235
+ vpand %ymm3, %ymm0, %ymm0
236
+ vpsubd %ymm0, %ymm4, %ymm0
237
+ vmovdqa %ymm0, 0x240(%rdi)
238
+ vmovdqu 0x17c(%rsi), %xmm0
239
+ vmovdqu 0x180(%rsi), %xmm5
240
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
241
+ vpshufb %ymm1, %ymm0, %ymm0
242
+ vpsrlvd %ymm2, %ymm0, %ymm0
243
+ vpand %ymm3, %ymm0, %ymm0
244
+ vpsubd %ymm0, %ymm4, %ymm0
245
+ vmovdqa %ymm0, 0x260(%rdi)
246
+ vmovdqu 0x190(%rsi), %xmm0
247
+ vmovdqu 0x194(%rsi), %xmm5
248
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
249
+ vpshufb %ymm1, %ymm0, %ymm0
250
+ vpsrlvd %ymm2, %ymm0, %ymm0
251
+ vpand %ymm3, %ymm0, %ymm0
252
+ vpsubd %ymm0, %ymm4, %ymm0
253
+ vmovdqa %ymm0, 0x280(%rdi)
254
+ vmovdqu 0x1a4(%rsi), %xmm0
255
+ vmovdqu 0x1a8(%rsi), %xmm5
256
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
257
+ vpshufb %ymm1, %ymm0, %ymm0
258
+ vpsrlvd %ymm2, %ymm0, %ymm0
259
+ vpand %ymm3, %ymm0, %ymm0
260
+ vpsubd %ymm0, %ymm4, %ymm0
261
+ vmovdqa %ymm0, 0x2a0(%rdi)
262
+ vmovdqu 0x1b8(%rsi), %xmm0
263
+ vmovdqu 0x1bc(%rsi), %xmm5
264
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
265
+ vpshufb %ymm1, %ymm0, %ymm0
266
+ vpsrlvd %ymm2, %ymm0, %ymm0
267
+ vpand %ymm3, %ymm0, %ymm0
268
+ vpsubd %ymm0, %ymm4, %ymm0
269
+ vmovdqa %ymm0, 0x2c0(%rdi)
270
+ vmovdqu 0x1cc(%rsi), %xmm0
271
+ vmovdqu 0x1d0(%rsi), %xmm5
272
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
273
+ vpshufb %ymm1, %ymm0, %ymm0
274
+ vpsrlvd %ymm2, %ymm0, %ymm0
275
+ vpand %ymm3, %ymm0, %ymm0
276
+ vpsubd %ymm0, %ymm4, %ymm0
277
+ vmovdqa %ymm0, 0x2e0(%rdi)
278
+ vmovdqu 0x1e0(%rsi), %xmm0
279
+ vmovdqu 0x1e4(%rsi), %xmm5
280
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
281
+ vpshufb %ymm1, %ymm0, %ymm0
282
+ vpsrlvd %ymm2, %ymm0, %ymm0
283
+ vpand %ymm3, %ymm0, %ymm0
284
+ vpsubd %ymm0, %ymm4, %ymm0
285
+ vmovdqa %ymm0, 0x300(%rdi)
286
+ vmovdqu 0x1f4(%rsi), %xmm0
287
+ vmovdqu 0x1f8(%rsi), %xmm5
288
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
289
+ vpshufb %ymm1, %ymm0, %ymm0
290
+ vpsrlvd %ymm2, %ymm0, %ymm0
291
+ vpand %ymm3, %ymm0, %ymm0
292
+ vpsubd %ymm0, %ymm4, %ymm0
293
+ vmovdqa %ymm0, 0x320(%rdi)
294
+ vmovdqu 0x208(%rsi), %xmm0
295
+ vmovdqu 0x20c(%rsi), %xmm5
296
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
297
+ vpshufb %ymm1, %ymm0, %ymm0
298
+ vpsrlvd %ymm2, %ymm0, %ymm0
299
+ vpand %ymm3, %ymm0, %ymm0
300
+ vpsubd %ymm0, %ymm4, %ymm0
301
+ vmovdqa %ymm0, 0x340(%rdi)
302
+ vmovdqu 0x21c(%rsi), %xmm0
303
+ vmovdqu 0x220(%rsi), %xmm5
304
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
305
+ vpshufb %ymm1, %ymm0, %ymm0
306
+ vpsrlvd %ymm2, %ymm0, %ymm0
307
+ vpand %ymm3, %ymm0, %ymm0
308
+ vpsubd %ymm0, %ymm4, %ymm0
309
+ vmovdqa %ymm0, 0x360(%rdi)
310
+ vmovdqu 0x230(%rsi), %xmm0
311
+ vmovdqu 0x234(%rsi), %xmm5
312
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
313
+ vpshufb %ymm1, %ymm0, %ymm0
314
+ vpsrlvd %ymm2, %ymm0, %ymm0
315
+ vpand %ymm3, %ymm0, %ymm0
316
+ vpsubd %ymm0, %ymm4, %ymm0
317
+ vmovdqa %ymm0, 0x380(%rdi)
318
+ vmovdqu 0x244(%rsi), %xmm0
319
+ vmovdqu 0x248(%rsi), %xmm5
320
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
321
+ vpshufb %ymm1, %ymm0, %ymm0
322
+ vpsrlvd %ymm2, %ymm0, %ymm0
323
+ vpand %ymm3, %ymm0, %ymm0
324
+ vpsubd %ymm0, %ymm4, %ymm0
325
+ vmovdqa %ymm0, 0x3a0(%rdi)
326
+ vmovdqu 0x258(%rsi), %xmm0
327
+ vmovdqu 0x25c(%rsi), %xmm5
328
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
329
+ vpshufb %ymm1, %ymm0, %ymm0
330
+ vpsrlvd %ymm2, %ymm0, %ymm0
331
+ vpand %ymm3, %ymm0, %ymm0
332
+ vpsubd %ymm0, %ymm4, %ymm0
333
+ vmovdqa %ymm0, 0x3c0(%rdi)
334
+ vmovdqu 0x26c(%rsi), %xmm0
335
+ vmovdqu 0x270(%rsi), %xmm5
336
+ vinserti128 $0x1, %xmm5, %ymm0, %ymm0
337
+ vpshufb %ymm1, %ymm0, %ymm0
338
+ vpsrlvd %ymm2, %ymm0, %ymm0
339
+ vpand %ymm3, %ymm0, %ymm0
340
+ vpsubd %ymm0, %ymm4, %ymm0
341
+ vmovdqa %ymm0, 0x3e0(%rdi)
342
+ retq
343
+ .cfi_endproc
344
+
345
+ MLD_ASM_FN_SIZE(polyz_unpack_19_avx2_asm)
346
+
347
+
348
+ #endif /* MLD_ARITH_BACKEND_X86_64_DEFAULT && (!MLD_CONFIG_NO_SIGN_API || \
349
+ !MLD_CONFIG_NO_VERIFY_API) && !MLD_CONFIG_MULTILEVEL_NO_SHARED && \
350
+ (MLD_CONFIG_MULTILEVEL_WITH_SHARED || MLD_CONFIG_PARAMETER_SET == 65 \
351
+ || MLD_CONFIG_PARAMETER_SET == 87) */
352
+
353
+ #if defined(__ELF__)
354
+ .section .note.GNU-stack,"",%progbits
355
+ #endif
@@ -0,0 +1,132 @@
1
+ /*
2
+ * Copyright (c) The mldsa-native project authors
3
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
4
+ */
5
+
6
+ /* References
7
+ * ==========
8
+ *
9
+ * - [REF_AVX2]
10
+ * CRYSTALS-Dilithium optimized AVX2 implementation
11
+ * Bai, Ducas, Kiltz, Lepoint, Lyubashevsky, Schwabe, Seiler, Stehlé
12
+ * https://github.com/pq-crystals/dilithium/tree/master/avx2
13
+ */
14
+
15
+ /*
16
+ * This file is derived from the public domain
17
+ * AVX2 Dilithium implementation @[REF_AVX2].
18
+ */
19
+
20
+ /*yaml
21
+ Name: rej_uniform_avx2_asm
22
+ Description: x86_64 AVX2 rejection sampling of uniform coefficients mod q.
23
+ Extract 23-bit values from the input byte buffer and accept those that are
24
+ < MLDSA_Q, writing accepted coefficients to the output buffer. Returns the
25
+ number of valid coefficients written (at most 256).
26
+ Signature: unsigned mld_rej_uniform_avx2_asm(int32_t *r, const uint8_t buf[840], const uint8_t table[256][8])
27
+ ABI:
28
+ Architecture: x86_64
29
+ CallingConvention: SysV
30
+ Features: [AVX2]
31
+ rdi:
32
+ type: buffer
33
+ size_bytes: 1024
34
+ permissions: write-only
35
+ c_parameter: int32_t *r
36
+ description: Output buffer (256 x int32_t)
37
+ rsi:
38
+ type: buffer
39
+ size_bytes: 840
40
+ permissions: read-only
41
+ c_parameter: const uint8_t buf[840]
42
+ description: Input buffer (MLD_POLY_UNIFORM_NBLOCKS * SHAKE128_RATE = 5 * 168)
43
+ rdx:
44
+ type: buffer
45
+ size_bytes: 2048
46
+ permissions: read-only
47
+ c_parameter: const uint8_t table[256][8]
48
+ description: Lookup table (256 x 8 x uint8_t)
49
+ */
50
+
51
+ #include "../../../common.h"
52
+ #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && \
53
+ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED)
54
+
55
+ /*
56
+ * WARNING: This file is auto-derived from the mldsa-native source file
57
+ * dev/x86_64/src/mldsa_rej_uniform_avx2_asm.S using scripts/simpasm. Do not modify it directly.
58
+ */
59
+
60
+ .text
61
+ .balign 4
62
+ .global MLD_ASM_NAMESPACE(rej_uniform_avx2_asm)
63
+ MLD_ASM_FN_SYMBOL(rej_uniform_avx2_asm)
64
+
65
+ .cfi_startproc
66
+ movabsq $-0xfafbfc00fdff00, %r10 # imm = 0xFF050403FF020100
67
+ vmovq %r10, %xmm0
68
+ movabsq $-0xf4f5f600f7f8fa, %r10 # imm = 0xFF0B0A09FF080706
69
+ vpinsrq $0x1, %r10, %xmm0, %xmm0
70
+ movabsq $-0xf6f7f800f9fafc, %r10 # imm = 0xFF090807FF060504
71
+ vmovq %r10, %xmm3
72
+ movabsq $-0xf0f1f200f3f4f6, %r10 # imm = 0xFF0F0E0DFF0C0B0A
73
+ vpinsrq $0x1, %r10, %xmm3, %xmm3
74
+ vinserti128 $0x1, %xmm3, %ymm0, %ymm0
75
+ movl $0x7fffff, %r8d # imm = 0x7FFFFF
76
+ vmovd %r8d, %xmm1
77
+ vpbroadcastd %xmm1, %ymm1
78
+ movl $0x7fe001, %r8d # imm = 0x7FE001
79
+ vmovd %r8d, %xmm2
80
+ vpbroadcastd %xmm2, %ymm2
81
+ xorl %eax, %eax
82
+ xorl %ecx, %ecx
83
+
84
+ Lmld_rej_uniform_avx2_asm_loop:
85
+ cmpl $0xf8, %eax
86
+ ja Lmld_rej_uniform_avx2_asm_scalar
87
+ cmpl $0x328, %ecx # imm = 0x328
88
+ ja Lmld_rej_uniform_avx2_asm_scalar
89
+ vmovdqu (%rsi,%rcx), %ymm3
90
+ addl $0x18, %ecx
91
+ vpermq $0x94, %ymm3, %ymm3 # ymm3 = ymm3[0,1,1,2]
92
+ vpshufb %ymm0, %ymm3, %ymm3
93
+ vpand %ymm1, %ymm3, %ymm3
94
+ vpsubd %ymm2, %ymm3, %ymm4
95
+ vmovmskps %ymm4, %r8d
96
+ popcntl %r8d, %r9d
97
+ vmovq (%rdx,%r8,8), %xmm4
98
+ vpmovzxbd %xmm4, %ymm4 # ymm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero,xmm4[4],zero,zero,zero,xmm4[5],zero,zero,zero,xmm4[6],zero,zero,zero,xmm4[7],zero,zero,zero
99
+ vpermd %ymm3, %ymm4, %ymm3
100
+ vmovdqu %ymm3, (%rdi,%rax,4)
101
+ addl %r9d, %eax
102
+ jmp Lmld_rej_uniform_avx2_asm_loop
103
+
104
+ Lmld_rej_uniform_avx2_asm_scalar:
105
+ cmpl $0x100, %eax # imm = 0x100
106
+ jae Lmld_rej_uniform_avx2_asm_done
107
+ cmpl $0x345, %ecx # imm = 0x345
108
+ ja Lmld_rej_uniform_avx2_asm_done
109
+ movzwl (%rsi,%rcx), %r8d
110
+ movzbl 0x2(%rsi,%rcx), %r9d
111
+ shll $0x10, %r9d
112
+ orl %r9d, %r8d
113
+ andl $0x7fffff, %r8d # imm = 0x7FFFFF
114
+ addl $0x3, %ecx
115
+ cmpl $0x7fe001, %r8d # imm = 0x7FE001
116
+ jae Lmld_rej_uniform_avx2_asm_scalar
117
+ movl %r8d, (%rdi,%rax,4)
118
+ addl $0x1, %eax
119
+ jmp Lmld_rej_uniform_avx2_asm_scalar
120
+
121
+ Lmld_rej_uniform_avx2_asm_done:
122
+ retq
123
+ .cfi_endproc
124
+
125
+ MLD_ASM_FN_SIZE(rej_uniform_avx2_asm)
126
+
127
+ #endif /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \
128
+ */
129
+
130
+ #if defined(__ELF__)
131
+ .section .note.GNU-stack,"",%progbits
132
+ #endif
@@ -0,0 +1,205 @@
1
+ /*
2
+ * Copyright (c) The mldsa-native project authors
3
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
4
+ */
5
+
6
+ /* References
7
+ * ==========
8
+ *
9
+ * - [REF_AVX2]
10
+ * CRYSTALS-Dilithium optimized AVX2 implementation
11
+ * Bai, Ducas, Kiltz, Lepoint, Lyubashevsky, Schwabe, Seiler, Stehlé
12
+ * https://github.com/pq-crystals/dilithium/tree/master/avx2
13
+ */
14
+
15
+ /*
16
+ * This file is derived from the public domain
17
+ * AVX2 Dilithium implementation @[REF_AVX2].
18
+ */
19
+
20
+ /*yaml
21
+ Name: rej_uniform_eta2_avx2_asm
22
+ Description: x86_64 AVX2 rejection sampling of eta=2 secret coefficients.
23
+ Extracts 4-bit nibbles from the input byte buffer, accepts those < 15,
24
+ and maps an accepted nibble n to the coefficient 2 - (n mod 5) via a
25
+ centered modulo-5 reduction, producing values in [-2, 2].
26
+ Signature: unsigned mld_rej_uniform_eta2_avx2_asm(int32_t *r, const uint8_t *buf, const uint8_t table[256][8])
27
+ ABI:
28
+ Architecture: x86_64
29
+ CallingConvention: SysV
30
+ Features: [AVX2]
31
+ rdi:
32
+ type: buffer
33
+ size_bytes: 1024
34
+ permissions: write-only
35
+ c_parameter: int32_t *r
36
+ description: Output coefficient buffer (256 x int32_t)
37
+ rsi:
38
+ type: buffer
39
+ size_bytes: 136
40
+ permissions: read-only
41
+ c_parameter: const uint8_t *buf
42
+ description: Input byte buffer (MLD_AVX2_REJ_UNIFORM_ETA2_BUFLEN = 136)
43
+ rdx:
44
+ type: buffer
45
+ size_bytes: 2048
46
+ permissions: read-only
47
+ c_parameter: const uint8_t *table
48
+ description: Lookup table (256 x 8 uint8_t = mld_rej_uniform_table)
49
+ */
50
+
51
+ #include "../../../common.h"
52
+ #if defined(MLD_ARITH_BACKEND_X86_64_DEFAULT) && !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED)
53
+
54
+ /*
55
+ * WARNING: This file is auto-derived from the mldsa-native source file
56
+ * dev/x86_64/src/mldsa_rej_uniform_eta2_avx2_asm.S using scripts/simpasm. Do not modify it directly.
57
+ */
58
+
59
+ .text
60
+ .balign 4
61
+ .global MLD_ASM_NAMESPACE(rej_uniform_eta2_avx2_asm)
62
+ MLD_ASM_FN_SYMBOL(rej_uniform_eta2_avx2_asm)
63
+
64
+ .cfi_startproc
65
+ movl $0xf0f0f0f, %r8d # imm = 0xF0F0F0F
66
+ vmovd %r8d, %xmm3
67
+ vpbroadcastd %xmm3, %ymm3
68
+ movl $0x2020202, %r8d # imm = 0x2020202
69
+ vmovd %r8d, %xmm4
70
+ vpbroadcastd %xmm4, %ymm4
71
+ movl $0xf0f0f0f, %r8d # imm = 0xF0F0F0F
72
+ vmovd %r8d, %xmm5
73
+ vpbroadcastd %xmm5, %ymm5
74
+ movl $0xffffe660, %r8d # imm = 0xFFFFE660
75
+ vpinsrw $0x0, %r8d, %xmm6, %xmm6
76
+ vpbroadcastw %xmm6, %ymm6
77
+ movl $0x5, %r8d
78
+ vpinsrw $0x0, %r8d, %xmm7, %xmm7
79
+ vpbroadcastw %xmm7, %ymm7
80
+ xorl %eax, %eax
81
+ xorl %ecx, %ecx
82
+
83
+ Lmld_rej_uniform_eta2_avx2_asm_loop:
84
+ cmpl $0xf8, %eax
85
+ ja Lmld_rej_uniform_eta2_avx2_asm_scalar
86
+ cmpl $0x78, %ecx
87
+ ja Lmld_rej_uniform_eta2_avx2_asm_scalar
88
+ vpmovzxbw (%rsi,%rcx), %ymm0
89
+ vpsllw $0x4, %ymm0, %ymm1
90
+ vpor %ymm1, %ymm0, %ymm0
91
+ vpand %ymm3, %ymm0, %ymm0
92
+ vpsubb %ymm5, %ymm0, %ymm1
93
+ vpsubb %ymm0, %ymm4, %ymm0
94
+ vpmovmskb %ymm1, %r8d
95
+ vextracti128 $0x0, %ymm0, %xmm8
96
+ movzbl %r8b, %r10d
97
+ vmovq (%rdx,%r10,8), %xmm9
98
+ vpshufb %xmm9, %xmm8, %xmm9
99
+ vpmovsxbd %xmm9, %ymm1
100
+ vpmulhrsw %ymm6, %ymm1, %ymm2
101
+ vpmullw %ymm7, %ymm2, %ymm2
102
+ vpaddd %ymm2, %ymm1, %ymm1
103
+ vmovdqu %ymm1, (%rdi,%rax,4)
104
+ popcntl %r10d, %r9d
105
+ addl %r9d, %eax
106
+ shrl $0x8, %r8d
107
+ addl $0x4, %ecx
108
+ cmpl $0xf8, %eax
109
+ ja Lmld_rej_uniform_eta2_avx2_asm_scalar
110
+ vpsrldq $0x8, %xmm8, %xmm8 # xmm8 = xmm8[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
111
+ movzbl %r8b, %r10d
112
+ vmovq (%rdx,%r10,8), %xmm9
113
+ vpshufb %xmm9, %xmm8, %xmm9
114
+ vpmovsxbd %xmm9, %ymm1
115
+ vpmulhrsw %ymm6, %ymm1, %ymm2
116
+ vpmullw %ymm7, %ymm2, %ymm2
117
+ vpaddd %ymm2, %ymm1, %ymm1
118
+ vmovdqu %ymm1, (%rdi,%rax,4)
119
+ popcntl %r10d, %r9d
120
+ addl %r9d, %eax
121
+ shrl $0x8, %r8d
122
+ addl $0x4, %ecx
123
+ cmpl $0xf8, %eax
124
+ ja Lmld_rej_uniform_eta2_avx2_asm_scalar
125
+ vextracti128 $0x1, %ymm0, %xmm8
126
+ movzbl %r8b, %r10d
127
+ vmovq (%rdx,%r10,8), %xmm9
128
+ vpshufb %xmm9, %xmm8, %xmm9
129
+ vpmovsxbd %xmm9, %ymm1
130
+ vpmulhrsw %ymm6, %ymm1, %ymm2
131
+ vpmullw %ymm7, %ymm2, %ymm2
132
+ vpaddd %ymm2, %ymm1, %ymm1
133
+ vmovdqu %ymm1, (%rdi,%rax,4)
134
+ popcntl %r10d, %r9d
135
+ addl %r9d, %eax
136
+ shrl $0x8, %r8d
137
+ addl $0x4, %ecx
138
+ cmpl $0xf8, %eax
139
+ ja Lmld_rej_uniform_eta2_avx2_asm_scalar
140
+ vpsrldq $0x8, %xmm8, %xmm8 # xmm8 = xmm8[8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
141
+ movzbl %r8b, %r10d
142
+ vmovq (%rdx,%r10,8), %xmm9
143
+ vpshufb %xmm9, %xmm8, %xmm9
144
+ vpmovsxbd %xmm9, %ymm1
145
+ vpmulhrsw %ymm6, %ymm1, %ymm2
146
+ vpmullw %ymm7, %ymm2, %ymm2
147
+ vpaddd %ymm2, %ymm1, %ymm1
148
+ vmovdqu %ymm1, (%rdi,%rax,4)
149
+ popcntl %r10d, %r9d
150
+ addl %r9d, %eax
151
+ addl $0x4, %ecx
152
+ jmp Lmld_rej_uniform_eta2_avx2_asm_loop
153
+
154
+ Lmld_rej_uniform_eta2_avx2_asm_scalar:
155
+ cmpl $0x100, %eax # imm = 0x100
156
+ jae Lmld_rej_uniform_eta2_avx2_asm_done
157
+ cmpl $0x88, %ecx
158
+ jae Lmld_rej_uniform_eta2_avx2_asm_done
159
+ movzbl (%rsi,%rcx), %r11d
160
+ incl %ecx
161
+ movl %r11d, %r10d
162
+ andl $0xf, %r10d
163
+ cmpl $0xf, %r10d
164
+ jae Lmld_rej_uniform_eta2_avx2_asm_high_nibble
165
+ movl %r10d, %r11d
166
+ imull $0xcd, %r11d, %r11d
167
+ shrl $0xa, %r11d
168
+ imull $0x5, %r11d, %r11d
169
+ subl %r11d, %r10d
170
+ movl $0x2, %r11d
171
+ subl %r10d, %r11d
172
+ movl %r11d, (%rdi,%rax,4)
173
+ incl %eax
174
+ cmpl $0x100, %eax # imm = 0x100
175
+ jae Lmld_rej_uniform_eta2_avx2_asm_done
176
+
177
+ Lmld_rej_uniform_eta2_avx2_asm_high_nibble:
178
+ movzbl -0x1(%rsi,%rcx), %r11d
179
+ shrl $0x4, %r11d
180
+ andl $0xf, %r11d
181
+ cmpl $0xf, %r11d
182
+ jae Lmld_rej_uniform_eta2_avx2_asm_scalar
183
+ movl %r11d, %r10d
184
+ imull $0xcd, %r10d, %r10d
185
+ shrl $0xa, %r10d
186
+ imull $0x5, %r10d, %r10d
187
+ subl %r10d, %r11d
188
+ movl $0x2, %r10d
189
+ subl %r11d, %r10d
190
+ movl %r10d, (%rdi,%rax,4)
191
+ incl %eax
192
+ jmp Lmld_rej_uniform_eta2_avx2_asm_scalar
193
+
194
+ Lmld_rej_uniform_eta2_avx2_asm_done:
195
+ retq
196
+ .cfi_endproc
197
+
198
+ MLD_ASM_FN_SIZE(rej_uniform_eta2_avx2_asm)
199
+
200
+ #endif /* MLD_ARITH_BACKEND_X86_64_DEFAULT && !MLD_CONFIG_MULTILEVEL_NO_SHARED \
201
+ */
202
+
203
+ #if defined(__ELF__)
204
+ .section .note.GNU-stack,"",%progbits
205
+ #endif