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.
Files changed (328) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +56 -0
  3. data/CHANGELOG.md +62 -0
  4. data/GET_STARTED.md +366 -40
  5. data/README.md +76 -233
  6. data/SECURITY.md +107 -82
  7. data/ext/pqcrypto/extconf.rb +169 -87
  8. data/ext/pqcrypto/mldsa_api.h +1 -48
  9. data/ext/pqcrypto/mlkem_api.h +1 -18
  10. data/ext/pqcrypto/pq_externalmu.c +89 -204
  11. data/ext/pqcrypto/pqcrypto_native_api.h +129 -0
  12. data/ext/pqcrypto/pqcrypto_ruby_secure.c +484 -84
  13. data/ext/pqcrypto/pqcrypto_secure.c +203 -78
  14. data/ext/pqcrypto/pqcrypto_secure.h +53 -14
  15. data/ext/pqcrypto/pqcrypto_version.h +7 -0
  16. data/ext/pqcrypto/randombytes.h +9 -0
  17. data/ext/pqcrypto/vendor/.vendored +10 -5
  18. data/ext/pqcrypto/vendor/mldsa-native/BUILDING.md +105 -0
  19. data/ext/pqcrypto/vendor/mldsa-native/LICENSE +286 -0
  20. data/ext/pqcrypto/vendor/mldsa-native/META.yml +24 -0
  21. data/ext/pqcrypto/vendor/mldsa-native/README.md +221 -0
  22. data/ext/pqcrypto/vendor/mldsa-native/SECURITY.md +8 -0
  23. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native.c +721 -0
  24. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native.h +975 -0
  25. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native_asm.S +724 -0
  26. data/ext/pqcrypto/vendor/mldsa-native/mldsa/mldsa_native_config.h +723 -0
  27. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/cbmc.h +166 -0
  28. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/common.h +321 -0
  29. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/ct.c +21 -0
  30. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/ct.h +385 -0
  31. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/debug.c +73 -0
  32. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/debug.h +130 -0
  33. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/fips202.c +277 -0
  34. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/fips202.h +244 -0
  35. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/fips202x4.c +182 -0
  36. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/fips202x4.h +117 -0
  37. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.c +438 -0
  38. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/keccakf1600.h +105 -0
  39. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/auto.h +71 -0
  40. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/fips202_native_aarch64.h +62 -0
  41. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_scalar_asm.S +376 -0
  42. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x1_v84a_asm.S +204 -0
  43. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x2_v84a_asm.S +259 -0
  44. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_scalar_hybrid_asm.S +1077 -0
  45. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_v84a_scalar_hybrid_asm.S +987 -0
  46. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/src/keccakf1600_round_constants.c +41 -0
  47. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_scalar.h +26 -0
  48. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x1_v84a.h +35 -0
  49. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x2_v84a.h +37 -0
  50. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_scalar.h +27 -0
  51. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/aarch64/x4_v8a_v84a_scalar.h +36 -0
  52. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/api.h +69 -0
  53. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/README.md +10 -0
  54. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/mve.h +32 -0
  55. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/fips202_native_armv81m.h +20 -0
  56. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.S +638 -0
  57. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.c +136 -0
  58. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/armv81m/src/keccakf1600_round_constants.c +52 -0
  59. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/auto.h +29 -0
  60. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/KeccakP_1600_times4_SIMD256.c +488 -0
  61. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/src/KeccakP_1600_times4_SIMD256.h +16 -0
  62. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/fips202/native/x86_64/xkcp.h +31 -0
  63. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/meta.h +247 -0
  64. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/aarch64_zetas.c +231 -0
  65. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/arith_native_aarch64.h +150 -0
  66. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/intt.S +753 -0
  67. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/mld_polyvecl_pointwise_acc_montgomery_l4.S +129 -0
  68. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/mld_polyvecl_pointwise_acc_montgomery_l5.S +145 -0
  69. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/mld_polyvecl_pointwise_acc_montgomery_l7.S +177 -0
  70. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/ntt.S +653 -0
  71. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/pointwise_montgomery.S +79 -0
  72. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_caddq_asm.S +53 -0
  73. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_chknorm_asm.S +55 -0
  74. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_decompose_32_asm.S +85 -0
  75. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_decompose_88_asm.S +85 -0
  76. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_use_hint_32_asm.S +102 -0
  77. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/poly_use_hint_88_asm.S +110 -0
  78. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/polyz_unpack_17_asm.S +72 -0
  79. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/polyz_unpack_19_asm.S +69 -0
  80. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/polyz_unpack_table.c +40 -0
  81. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_asm.S +189 -0
  82. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_eta2_asm.S +135 -0
  83. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_eta4_asm.S +128 -0
  84. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_eta_table.c +543 -0
  85. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/aarch64/src/rej_uniform_table.c +62 -0
  86. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/api.h +649 -0
  87. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/meta.h +23 -0
  88. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/meta.h +315 -0
  89. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/arith_native_x86_64.h +124 -0
  90. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/consts.c +157 -0
  91. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/consts.h +27 -0
  92. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/intt.S +2311 -0
  93. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/ntt.S +2383 -0
  94. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/nttunpack.S +239 -0
  95. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/pointwise.S +131 -0
  96. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/pointwise_acc_l4.S +139 -0
  97. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/pointwise_acc_l5.S +155 -0
  98. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/pointwise_acc_l7.S +187 -0
  99. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_caddq_avx2.c +61 -0
  100. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_chknorm_avx2.c +52 -0
  101. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_decompose_32_avx2.c +155 -0
  102. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_decompose_88_avx2.c +155 -0
  103. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_use_hint_32_avx2.c +102 -0
  104. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/poly_use_hint_88_avx2.c +104 -0
  105. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/polyz_unpack_17_avx2.c +91 -0
  106. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/polyz_unpack_19_avx2.c +93 -0
  107. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_avx2.c +126 -0
  108. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_eta2_avx2.c +155 -0
  109. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_eta4_avx2.c +139 -0
  110. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/native/x86_64/src/rej_uniform_table.c +160 -0
  111. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/packing.c +293 -0
  112. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/packing.h +224 -0
  113. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/params.h +77 -0
  114. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly.c +991 -0
  115. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly.h +393 -0
  116. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly_kl.c +946 -0
  117. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/poly_kl.h +360 -0
  118. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec.c +877 -0
  119. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/polyvec.h +725 -0
  120. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/randombytes.h +26 -0
  121. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/reduce.h +139 -0
  122. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/rounding.h +249 -0
  123. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sign.c +1511 -0
  124. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sign.h +806 -0
  125. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/symmetric.h +68 -0
  126. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/sys.h +268 -0
  127. data/ext/pqcrypto/vendor/mldsa-native/mldsa/src/zetas.inc +55 -0
  128. data/ext/pqcrypto/vendor/mlkem-native/BUILDING.md +104 -0
  129. data/ext/pqcrypto/vendor/mlkem-native/LICENSE +294 -0
  130. data/ext/pqcrypto/vendor/mlkem-native/META.yml +30 -0
  131. data/ext/pqcrypto/vendor/mlkem-native/README.md +223 -0
  132. data/ext/pqcrypto/vendor/mlkem-native/RELEASE.md +86 -0
  133. data/ext/pqcrypto/vendor/mlkem-native/SECURITY.md +8 -0
  134. data/ext/pqcrypto/vendor/mlkem-native/mlkem/README.md +23 -0
  135. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native.c +660 -0
  136. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native.h +538 -0
  137. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native_asm.S +681 -0
  138. data/ext/pqcrypto/vendor/mlkem-native/mlkem/mlkem_native_config.h +709 -0
  139. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/cbmc.h +174 -0
  140. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/common.h +274 -0
  141. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/compress.c +717 -0
  142. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/compress.h +688 -0
  143. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/debug.c +64 -0
  144. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/debug.h +128 -0
  145. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/fips202.c +251 -0
  146. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/fips202.h +158 -0
  147. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/fips202x4.c +208 -0
  148. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/fips202x4.h +80 -0
  149. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/keccakf1600.c +463 -0
  150. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/keccakf1600.h +98 -0
  151. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/auto.h +70 -0
  152. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/fips202_native_aarch64.h +69 -0
  153. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x1_scalar_asm.S +375 -0
  154. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x1_v84a_asm.S +203 -0
  155. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x2_v84a_asm.S +258 -0
  156. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_scalar_hybrid_asm.S +1076 -0
  157. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccak_f1600_x4_v8a_v84a_scalar_hybrid_asm.S +986 -0
  158. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/src/keccakf1600_round_constants.c +46 -0
  159. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x1_scalar.h +25 -0
  160. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x1_v84a.h +34 -0
  161. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x2_v84a.h +35 -0
  162. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x4_v8a_scalar.h +26 -0
  163. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/aarch64/x4_v8a_v84a_scalar.h +35 -0
  164. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/api.h +117 -0
  165. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/README.md +10 -0
  166. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/mve.h +79 -0
  167. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/fips202_native_armv81m.h +35 -0
  168. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.S +667 -0
  169. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.c +40 -0
  170. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/keccakf1600_round_constants.c +51 -0
  171. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/state_extract_bytes_x4_mve.S +290 -0
  172. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/armv81m/src/state_xor_bytes_x4_mve.S +314 -0
  173. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/auto.h +28 -0
  174. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/x86_64/keccak_f1600_x4_avx2.h +33 -0
  175. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/x86_64/src/fips202_native_x86_64.h +41 -0
  176. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/x86_64/src/keccak_f1600_x4_avx2.S +451 -0
  177. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/fips202/native/x86_64/src/keccakf1600_constants.c +51 -0
  178. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/indcpa.c +622 -0
  179. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/indcpa.h +156 -0
  180. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/kem.c +446 -0
  181. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/kem.h +326 -0
  182. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/README.md +16 -0
  183. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/meta.h +122 -0
  184. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/aarch64_zetas.c +174 -0
  185. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/arith_native_aarch64.h +177 -0
  186. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/intt.S +628 -0
  187. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/ntt.S +562 -0
  188. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/poly_mulcache_compute_asm.S +127 -0
  189. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/poly_reduce_asm.S +150 -0
  190. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/poly_tobytes_asm.S +117 -0
  191. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/poly_tomont_asm.S +98 -0
  192. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k2.S +261 -0
  193. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k3.S +314 -0
  194. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/polyvec_basemul_acc_montgomery_cached_asm_k4.S +368 -0
  195. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/rej_uniform_asm.S +226 -0
  196. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/aarch64/src/rej_uniform_table.c +542 -0
  197. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/api.h +637 -0
  198. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/meta.h +25 -0
  199. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/README.md +11 -0
  200. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/meta.h +128 -0
  201. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/arith_native_riscv64.h +45 -0
  202. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_debug.c +81 -0
  203. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_debug.h +145 -0
  204. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_izetas.inc +27 -0
  205. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_poly.c +805 -0
  206. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_zetas.inc +27 -0
  207. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/riscv64/src/rv64v_zetas_basemul.inc +39 -0
  208. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/README.md +4 -0
  209. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/meta.h +304 -0
  210. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/arith_native_x86_64.h +309 -0
  211. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/compress_consts.c +94 -0
  212. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/compress_consts.h +45 -0
  213. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/consts.c +102 -0
  214. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/consts.h +25 -0
  215. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/intt.S +719 -0
  216. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/mulcache_compute.S +90 -0
  217. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/ntt.S +639 -0
  218. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/nttfrombytes.S +193 -0
  219. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/ntttobytes.S +181 -0
  220. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/nttunpack.S +174 -0
  221. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_compress_d10.S +382 -0
  222. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_compress_d11.S +448 -0
  223. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_compress_d4.S +163 -0
  224. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_compress_d5.S +220 -0
  225. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_decompress_d10.S +228 -0
  226. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_decompress_d11.S +277 -0
  227. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_decompress_d4.S +180 -0
  228. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/poly_decompress_d5.S +192 -0
  229. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/polyvec_basemul_acc_montgomery_cached_asm_k2.S +502 -0
  230. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/polyvec_basemul_acc_montgomery_cached_asm_k3.S +750 -0
  231. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/polyvec_basemul_acc_montgomery_cached_asm_k4.S +998 -0
  232. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/reduce.S +218 -0
  233. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/rej_uniform_asm.S +103 -0
  234. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/rej_uniform_table.c +544 -0
  235. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/native/x86_64/src/tomont.S +155 -0
  236. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/params.h +76 -0
  237. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly.c +572 -0
  238. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly.h +317 -0
  239. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly_k.c +502 -0
  240. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/poly_k.h +668 -0
  241. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/randombytes.h +60 -0
  242. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/sampling.c +362 -0
  243. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/sampling.h +118 -0
  244. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/symmetric.h +70 -0
  245. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/sys.h +260 -0
  246. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/verify.c +20 -0
  247. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/verify.h +464 -0
  248. data/ext/pqcrypto/vendor/mlkem-native/mlkem/src/zetas.inc +30 -0
  249. data/lib/pq_crypto/algorithm_registry.rb +200 -0
  250. data/lib/pq_crypto/hybrid_kem.rb +1 -12
  251. data/lib/pq_crypto/kem.rb +104 -13
  252. data/lib/pq_crypto/pkcs8.rb +387 -0
  253. data/lib/pq_crypto/serialization.rb +1 -14
  254. data/lib/pq_crypto/signature.rb +123 -17
  255. data/lib/pq_crypto/spki.rb +131 -0
  256. data/lib/pq_crypto/version.rb +1 -1
  257. data/lib/pq_crypto.rb +79 -20
  258. data/script/vendor_libs.rb +88 -155
  259. metadata +241 -73
  260. data/ext/pqcrypto/vendor/pqclean/common/aes.c +0 -639
  261. data/ext/pqcrypto/vendor/pqclean/common/aes.h +0 -64
  262. data/ext/pqcrypto/vendor/pqclean/common/compat.h +0 -73
  263. data/ext/pqcrypto/vendor/pqclean/common/crypto_declassify.h +0 -7
  264. data/ext/pqcrypto/vendor/pqclean/common/fips202.c +0 -928
  265. data/ext/pqcrypto/vendor/pqclean/common/fips202.h +0 -166
  266. data/ext/pqcrypto/vendor/pqclean/common/keccak2x/feat.S +0 -168
  267. data/ext/pqcrypto/vendor/pqclean/common/keccak2x/fips202x2.c +0 -684
  268. data/ext/pqcrypto/vendor/pqclean/common/keccak2x/fips202x2.h +0 -60
  269. data/ext/pqcrypto/vendor/pqclean/common/keccak4x/KeccakP-1600-times4-SIMD256.c +0 -1028
  270. data/ext/pqcrypto/vendor/pqclean/common/keccak4x/KeccakP-1600-times4-SnP.h +0 -50
  271. data/ext/pqcrypto/vendor/pqclean/common/keccak4x/KeccakP-1600-unrolling.macros +0 -198
  272. data/ext/pqcrypto/vendor/pqclean/common/keccak4x/Makefile +0 -8
  273. data/ext/pqcrypto/vendor/pqclean/common/keccak4x/Makefile.Microsoft_nmake +0 -8
  274. data/ext/pqcrypto/vendor/pqclean/common/keccak4x/SIMD256-config.h +0 -3
  275. data/ext/pqcrypto/vendor/pqclean/common/keccak4x/align.h +0 -34
  276. data/ext/pqcrypto/vendor/pqclean/common/keccak4x/brg_endian.h +0 -142
  277. data/ext/pqcrypto/vendor/pqclean/common/nistseedexpander.c +0 -101
  278. data/ext/pqcrypto/vendor/pqclean/common/nistseedexpander.h +0 -39
  279. data/ext/pqcrypto/vendor/pqclean/common/randombytes.c +0 -355
  280. data/ext/pqcrypto/vendor/pqclean/common/randombytes.h +0 -27
  281. data/ext/pqcrypto/vendor/pqclean/common/sha2.c +0 -769
  282. data/ext/pqcrypto/vendor/pqclean/common/sha2.h +0 -173
  283. data/ext/pqcrypto/vendor/pqclean/common/sp800-185.c +0 -156
  284. data/ext/pqcrypto/vendor/pqclean/common/sp800-185.h +0 -27
  285. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/LICENSE +0 -5
  286. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/Makefile +0 -19
  287. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/Makefile.Microsoft_nmake +0 -23
  288. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/api.h +0 -18
  289. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/cbd.c +0 -83
  290. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/cbd.h +0 -11
  291. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/indcpa.c +0 -327
  292. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/indcpa.h +0 -22
  293. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/kem.c +0 -164
  294. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/kem.h +0 -23
  295. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/ntt.c +0 -146
  296. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/ntt.h +0 -14
  297. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/params.h +0 -36
  298. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/poly.c +0 -299
  299. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/poly.h +0 -37
  300. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/polyvec.c +0 -188
  301. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/polyvec.h +0 -26
  302. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/reduce.c +0 -41
  303. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/reduce.h +0 -13
  304. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/symmetric-shake.c +0 -71
  305. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/symmetric.h +0 -30
  306. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/verify.c +0 -67
  307. data/ext/pqcrypto/vendor/pqclean/crypto_kem/ml-kem-768/clean/verify.h +0 -13
  308. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/LICENSE +0 -5
  309. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/Makefile +0 -19
  310. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/Makefile.Microsoft_nmake +0 -23
  311. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/api.h +0 -50
  312. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/ntt.c +0 -98
  313. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/ntt.h +0 -10
  314. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/packing.c +0 -261
  315. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/packing.h +0 -31
  316. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/params.h +0 -44
  317. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/poly.c +0 -799
  318. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/poly.h +0 -52
  319. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/polyvec.c +0 -415
  320. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/polyvec.h +0 -65
  321. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/reduce.c +0 -69
  322. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/reduce.h +0 -17
  323. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/rounding.c +0 -92
  324. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/rounding.h +0 -14
  325. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/sign.c +0 -407
  326. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/sign.h +0 -47
  327. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/symmetric-shake.c +0 -26
  328. data/ext/pqcrypto/vendor/pqclean/crypto_sign/ml-dsa-65/clean/symmetric.h +0 -34
@@ -0,0 +1,33 @@
1
+ /*
2
+ * Copyright (c) The mlkem-native project authors
3
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
4
+ */
5
+
6
+ #ifndef MLK_FIPS202_NATIVE_X86_64_KECCAK_F1600_X4_AVX2_H
7
+ #define MLK_FIPS202_NATIVE_X86_64_KECCAK_F1600_X4_AVX2_H
8
+
9
+ #include "../../../common.h"
10
+
11
+ #define MLK_FIPS202_X86_64_NEED_X4_AVX2
12
+
13
+ /* Part of backend API */
14
+ #define MLK_USE_FIPS202_X4_NATIVE
15
+
16
+ #if !defined(__ASSEMBLER__)
17
+ #include "../api.h"
18
+ #include "src/fips202_native_x86_64.h"
19
+ MLK_MUST_CHECK_RETURN_VALUE
20
+ static MLK_INLINE int mlk_keccak_f1600_x4_native(uint64_t *state)
21
+ {
22
+ if (!mlk_sys_check_capability(MLK_SYS_CAP_AVX2))
23
+ {
24
+ return MLK_NATIVE_FUNC_FALLBACK;
25
+ }
26
+
27
+ mlk_keccak_f1600_x4_avx2(state, mlk_keccakf1600_round_constants,
28
+ mlk_keccak_rho8, mlk_keccak_rho56);
29
+ return MLK_NATIVE_FUNC_SUCCESS;
30
+ }
31
+ #endif /* !__ASSEMBLER__ */
32
+
33
+ #endif /* !MLK_FIPS202_NATIVE_X86_64_KECCAK_F1600_X4_AVX2_H */
@@ -0,0 +1,41 @@
1
+ /*
2
+ * Copyright (c) The mlkem-native project authors
3
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
4
+ */
5
+
6
+ #ifndef MLK_FIPS202_NATIVE_X86_64_SRC_FIPS202_NATIVE_X86_64_H
7
+ #define MLK_FIPS202_NATIVE_X86_64_SRC_FIPS202_NATIVE_X86_64_H
8
+
9
+ #include "../../../../cbmc.h"
10
+ #include "../../../../common.h"
11
+
12
+ /* TODO: Reconsider whether this check is needed -- x86_64 is always
13
+ * little-endian, so the backend selection already implies this. */
14
+ #ifndef MLK_SYS_LITTLE_ENDIAN
15
+ #error Expecting a little-endian platform
16
+ #endif
17
+
18
+ #define mlk_keccakf1600_round_constants \
19
+ MLK_NAMESPACE(keccakf1600_round_constants)
20
+ extern const uint64_t mlk_keccakf1600_round_constants[];
21
+
22
+ #define mlk_keccak_rho8 MLK_NAMESPACE(keccak_rho8)
23
+ extern const uint64_t mlk_keccak_rho8[];
24
+
25
+ #define mlk_keccak_rho56 MLK_NAMESPACE(keccak_rho56)
26
+ extern const uint64_t mlk_keccak_rho56[];
27
+
28
+ #define mlk_keccak_f1600_x4_avx2 MLK_NAMESPACE(keccak_f1600_x4_avx2)
29
+ void mlk_keccak_f1600_x4_avx2(uint64_t states[100], const uint64_t rc[24],
30
+ const uint64_t rho8[4], const uint64_t rho56[4])
31
+ /* This must be kept in sync with the HOL-Light specification
32
+ * in proofs/hol_light/x86_64/proofs/keccak_f1600_x4_avx2.ml */
33
+ __contract__(
34
+ requires(memory_no_alias(states, sizeof(uint64_t) * 25 * 4))
35
+ requires(rc == mlk_keccakf1600_round_constants)
36
+ requires(rho8 == mlk_keccak_rho8)
37
+ requires(rho56 == mlk_keccak_rho56)
38
+ assigns(memory_slice(states, sizeof(uint64_t) * 25 * 4))
39
+ );
40
+
41
+ #endif /* !MLK_FIPS202_NATIVE_X86_64_SRC_FIPS202_NATIVE_X86_64_H */
@@ -0,0 +1,451 @@
1
+ /*
2
+ * Copyright (c) The mlkem-native project authors
3
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
4
+ */
5
+ #include "../../../../common.h"
6
+
7
+ #if defined(MLK_FIPS202_X86_64_NEED_X4_AVX2) && \
8
+ !defined(MLK_CONFIG_MULTILEVEL_NO_SHARED)
9
+
10
+ /*
11
+ * WARNING: This file is auto-derived from the mlkem-native source file
12
+ * dev/fips202/x86_64/src/keccak_f1600_x4_avx2.S using scripts/simpasm. Do not modify it directly.
13
+ */
14
+
15
+ #if defined(__ELF__)
16
+ .section .note.GNU-stack,"",@progbits
17
+ #endif
18
+
19
+ .text
20
+ .balign 4
21
+ .global MLK_ASM_NAMESPACE(keccak_f1600_x4_avx2)
22
+ MLK_ASM_FN_SYMBOL(keccak_f1600_x4_avx2)
23
+
24
+ .cfi_startproc
25
+ subq $0x300, %rsp # imm = 0x300
26
+ .cfi_adjust_cfa_offset 0x300
27
+ vmovdqu (%rdi), %ymm0
28
+ vmovdqu 0xc8(%rdi), %ymm3
29
+ vmovdqu 0x190(%rdi), %ymm1
30
+ vmovdqu 0x258(%rdi), %ymm4
31
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
32
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
33
+ vpunpcklqdq %ymm4, %ymm1, %ymm3 # ymm3 = ymm1[0],ymm4[0],ymm1[2],ymm4[2]
34
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm7 # ymm7 = ymm2[0,1],ymm3[0,1]
35
+ vpunpckhqdq %ymm4, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm4[1],ymm1[3],ymm4[3]
36
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm3 # ymm3 = ymm2[2,3],ymm3[2,3]
37
+ vmovdqu 0x278(%rdi), %ymm4
38
+ vmovdqu %ymm3, 0x40(%rsp)
39
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm3 # ymm3 = ymm0[2,3],ymm1[2,3]
40
+ vmovdqu %ymm7, (%rsp)
41
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm7 # ymm7 = ymm0[0,1],ymm1[0,1]
42
+ vmovdqu 0x20(%rdi), %ymm0
43
+ vmovdqu 0x1b0(%rdi), %ymm1
44
+ vmovdqu %ymm3, 0x60(%rsp)
45
+ vmovdqu 0xe8(%rdi), %ymm3
46
+ vmovdqu %ymm7, 0x20(%rsp)
47
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
48
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
49
+ vpunpcklqdq %ymm4, %ymm1, %ymm3 # ymm3 = ymm1[0],ymm4[0],ymm1[2],ymm4[2]
50
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm7 # ymm7 = ymm2[0,1],ymm3[0,1]
51
+ vpunpckhqdq %ymm4, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm4[1],ymm1[3],ymm4[3]
52
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm3 # ymm3 = ymm2[2,3],ymm3[2,3]
53
+ vmovdqu 0x298(%rdi), %ymm4
54
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm14 # ymm14 = ymm0[2,3],ymm1[2,3]
55
+ vmovdqu %ymm7, 0x80(%rsp)
56
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm7 # ymm7 = ymm0[0,1],ymm1[0,1]
57
+ vmovdqu 0x40(%rdi), %ymm0
58
+ vmovdqu 0x1d0(%rdi), %ymm1
59
+ vmovdqu %ymm3, 0xc0(%rsp)
60
+ vmovdqu 0x108(%rdi), %ymm3
61
+ vmovdqu %ymm14, %ymm10
62
+ vmovdqu %ymm7, 0xa0(%rsp)
63
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
64
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
65
+ vpunpcklqdq %ymm4, %ymm1, %ymm3 # ymm3 = ymm1[0],ymm4[0],ymm1[2],ymm4[2]
66
+ vpunpckhqdq %ymm4, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm4[1],ymm1[3],ymm4[3]
67
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm11 # ymm11 = ymm2[0,1],ymm3[0,1]
68
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm3 # ymm3 = ymm2[2,3],ymm3[2,3]
69
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm7 # ymm7 = ymm0[0,1],ymm1[0,1]
70
+ vmovdqu %ymm3, 0x100(%rsp)
71
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm8 # ymm8 = ymm0[2,3],ymm1[2,3]
72
+ vmovdqu 0x128(%rdi), %ymm3
73
+ vmovdqu 0x60(%rdi), %ymm0
74
+ vmovdqu 0x1f0(%rdi), %ymm1
75
+ vmovdqu %ymm7, 0xe0(%rsp)
76
+ vmovdqu %ymm11, %ymm14
77
+ vmovdqu 0x2b8(%rdi), %ymm4
78
+ vmovdqu 0x2f8(%rdi), %ymm5
79
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
80
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
81
+ vpunpcklqdq %ymm4, %ymm1, %ymm3 # ymm3 = ymm1[0],ymm4[0],ymm1[2],ymm4[2]
82
+ vpunpckhqdq %ymm4, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm4[1],ymm1[3],ymm4[3]
83
+ vmovdqu 0x2d8(%rdi), %ymm4
84
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm15 # ymm15 = ymm2[0,1],ymm3[0,1]
85
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm3 # ymm3 = ymm2[2,3],ymm3[2,3]
86
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm7 # ymm7 = ymm0[0,1],ymm1[0,1]
87
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm9 # ymm9 = ymm0[2,3],ymm1[2,3]
88
+ vmovdqu %ymm3, 0x140(%rsp)
89
+ vmovdqu 0x80(%rdi), %ymm0
90
+ vmovdqu 0x148(%rdi), %ymm3
91
+ vmovdqu 0x210(%rdi), %ymm1
92
+ vmovdqu %ymm7, 0x120(%rsp)
93
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
94
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
95
+ vpunpcklqdq %ymm4, %ymm1, %ymm3 # ymm3 = ymm1[0],ymm4[0],ymm1[2],ymm4[2]
96
+ vpunpckhqdq %ymm4, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm4[1],ymm1[3],ymm4[3]
97
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm7 # ymm7 = ymm2[0,1],ymm3[0,1]
98
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm13 # ymm13 = ymm2[2,3],ymm3[2,3]
99
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm3 # ymm3 = ymm0[2,3],ymm1[2,3]
100
+ vmovdqu %ymm7, 0x160(%rsp)
101
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm7 # ymm7 = ymm0[0,1],ymm1[0,1]
102
+ vmovdqu 0xa0(%rdi), %ymm0
103
+ vmovdqu 0x230(%rdi), %ymm1
104
+ vmovdqu %ymm3, 0x1a0(%rsp)
105
+ vmovdqu 0x168(%rdi), %ymm3
106
+ vpunpcklqdq %ymm5, %ymm1, %ymm4 # ymm4 = ymm1[0],ymm5[0],ymm1[2],ymm5[2]
107
+ vpunpckhqdq %ymm5, %ymm1, %ymm1 # ymm1 = ymm1[1],ymm5[1],ymm1[3],ymm5[3]
108
+ vmovdqu %ymm7, 0x180(%rsp)
109
+ vpunpcklqdq %ymm3, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
110
+ vpunpckhqdq %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm3[1],ymm0[3],ymm3[3]
111
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm12 # ymm12 = ymm2[0,1],ymm4[0,1]
112
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm3 # ymm3 = ymm0[0,1],ymm1[0,1]
113
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm7 # ymm7 = ymm2[2,3],ymm4[2,3]
114
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm4 # ymm4 = ymm0[2,3],ymm1[2,3]
115
+ vmovq 0x250(%rdi), %xmm0
116
+ vmovq 0xc0(%rdi), %xmm1
117
+ vmovdqu %ymm12, 0x1c0(%rsp)
118
+ vmovdqu %ymm4, 0x1e0(%rsp)
119
+ vpinsrq $0x1, 0x318(%rdi), %xmm0, %xmm0
120
+ vpinsrq $0x1, 0x188(%rdi), %xmm1, %xmm1
121
+ vinserti128 $0x1, %xmm0, %ymm1, %ymm2
122
+ movq $0x0, %r10
123
+
124
+ LLkeccak_f1600_x4_avx2:
125
+ vmovdqu 0xa0(%rsp), %ymm4
126
+ vpxor 0x1c0(%rsp), %ymm9, %ymm0
127
+ vmovdqu %ymm9, 0x200(%rsp)
128
+ vmovdqu %ymm10, %ymm9
129
+ vmovdqu 0xc0(%rsp), %ymm11
130
+ vmovdqu 0x160(%rsp), %ymm12
131
+ vmovdqu %ymm3, 0x240(%rsp)
132
+ vpxor 0x100(%rsp), %ymm4, %ymm1
133
+ vmovdqu 0x40(%rsp), %ymm10
134
+ vmovdqu %ymm4, 0x220(%rsp)
135
+ vpxor %ymm3, %ymm12, %ymm12
136
+ vmovdqu 0x20(%rsp), %ymm6
137
+ vmovdqu 0x140(%rsp), %ymm4
138
+ vmovdqu %ymm14, 0x2a0(%rsp)
139
+ vpxor %ymm1, %ymm0, %ymm0
140
+ vpxor %ymm8, %ymm11, %ymm1
141
+ vpxor 0x180(%rsp), %ymm7, %ymm11
142
+ vmovdqu %ymm10, 0x280(%rsp)
143
+ vpxor %ymm1, %ymm12, %ymm12
144
+ vpxor %ymm15, %ymm9, %ymm1
145
+ vmovdqu 0xe0(%rsp), %ymm3
146
+ vmovdqu %ymm8, 0x260(%rsp)
147
+ vpxor %ymm1, %ymm11, %ymm11
148
+ vpxor 0x120(%rsp), %ymm14, %ymm1
149
+ vpxor %ymm6, %ymm12, %ymm12
150
+ vmovdqu 0x60(%rsp), %ymm8
151
+ vpxor %ymm10, %ymm11, %ymm11
152
+ vpxor 0x1e0(%rsp), %ymm13, %ymm10
153
+ vpxor %ymm4, %ymm3, %ymm3
154
+ vmovdqu %ymm4, 0x2c0(%rsp)
155
+ vpsrlq $0x3f, %ymm12, %ymm4
156
+ vpsrlq $0x3f, %ymm11, %ymm5
157
+ vpxor (%rsp), %ymm0, %ymm0
158
+ vpxor %ymm1, %ymm10, %ymm10
159
+ vmovdqu 0x80(%rsp), %ymm1
160
+ vpxor %ymm8, %ymm10, %ymm10
161
+ vmovdqu %ymm1, %ymm14
162
+ vpxor 0x1a0(%rsp), %ymm2, %ymm1
163
+ vmovdqu %ymm14, 0x2e0(%rsp)
164
+ vpxor %ymm3, %ymm1, %ymm1
165
+ vpsllq $0x1, %ymm12, %ymm3
166
+ vpor %ymm4, %ymm3, %ymm3
167
+ vpsllq $0x1, %ymm11, %ymm4
168
+ vpxor %ymm14, %ymm1, %ymm1
169
+ vpor %ymm5, %ymm4, %ymm4
170
+ vpsrlq $0x3f, %ymm10, %ymm14
171
+ vpxor %ymm1, %ymm3, %ymm3
172
+ vpsllq $0x1, %ymm10, %ymm5
173
+ vpxor %ymm0, %ymm4, %ymm4
174
+ vpor %ymm14, %ymm5, %ymm5
175
+ vpxor %ymm6, %ymm4, %ymm6
176
+ vpxor %ymm12, %ymm5, %ymm5
177
+ vpsrlq $0x3f, %ymm1, %ymm12
178
+ vpsllq $0x1, %ymm1, %ymm1
179
+ vpxor %ymm7, %ymm5, %ymm7
180
+ vpxor %ymm9, %ymm5, %ymm9
181
+ vpor %ymm12, %ymm1, %ymm1
182
+ vpxor (%rsp), %ymm3, %ymm12
183
+ vpxor %ymm11, %ymm1, %ymm1
184
+ vpsrlq $0x3f, %ymm0, %ymm11
185
+ vpsllq $0x1, %ymm0, %ymm0
186
+ vpxor %ymm13, %ymm1, %ymm13
187
+ vpxor %ymm8, %ymm1, %ymm8
188
+ vpor %ymm11, %ymm0, %ymm0
189
+ vpxor %ymm10, %ymm0, %ymm0
190
+ vpxor 0xc0(%rsp), %ymm4, %ymm10
191
+ vpxor %ymm2, %ymm0, %ymm2
192
+ vpsrlq $0x14, %ymm10, %ymm11
193
+ vpsllq $0x2c, %ymm10, %ymm10
194
+ vpor %ymm11, %ymm10, %ymm10
195
+ vpxor %ymm15, %ymm5, %ymm11
196
+ vpbroadcastq (%rsi), %ymm15
197
+ vpsrlq $0x15, %ymm11, %ymm14
198
+ vpsllq $0x2b, %ymm11, %ymm11
199
+ vpor %ymm14, %ymm11, %ymm11
200
+ vpandn %ymm11, %ymm10, %ymm14
201
+ vpxor %ymm15, %ymm14, %ymm14
202
+ vpxor %ymm12, %ymm14, %ymm15
203
+ vpsrlq $0x2b, %ymm13, %ymm14
204
+ vpsllq $0x15, %ymm13, %ymm13
205
+ vmovdqu %ymm15, (%rsp)
206
+ vpor %ymm14, %ymm13, %ymm13
207
+ vpandn %ymm13, %ymm11, %ymm14
208
+ vpxor %ymm10, %ymm14, %ymm15
209
+ vpsrlq $0x32, %ymm2, %ymm14
210
+ vpsllq $0xe, %ymm2, %ymm2
211
+ vmovdqu %ymm15, 0x20(%rsp)
212
+ vpor %ymm14, %ymm2, %ymm2
213
+ vpandn %ymm2, %ymm13, %ymm14
214
+ vpxor %ymm11, %ymm14, %ymm11
215
+ vmovdqu %ymm11, 0x40(%rsp)
216
+ vpandn %ymm12, %ymm2, %ymm11
217
+ vpandn %ymm10, %ymm12, %ymm12
218
+ vpxor %ymm13, %ymm11, %ymm11
219
+ vmovdqu %ymm11, 0x60(%rsp)
220
+ vpxor %ymm2, %ymm12, %ymm11
221
+ vpsrlq $0x24, %ymm8, %ymm2
222
+ vpsllq $0x1c, %ymm8, %ymm8
223
+ vmovdqu %ymm11, 0x80(%rsp)
224
+ vpor %ymm2, %ymm8, %ymm8
225
+ vpxor 0xe0(%rsp), %ymm0, %ymm2
226
+ vpsrlq $0x2c, %ymm2, %ymm10
227
+ vpsllq $0x14, %ymm2, %ymm2
228
+ vpor %ymm10, %ymm2, %ymm2
229
+ vpxor 0x100(%rsp), %ymm3, %ymm10
230
+ vpsrlq $0x3d, %ymm10, %ymm11
231
+ vpsllq $0x3, %ymm10, %ymm10
232
+ vpor %ymm11, %ymm10, %ymm10
233
+ vpandn %ymm10, %ymm2, %ymm11
234
+ vpxor %ymm8, %ymm11, %ymm11
235
+ vmovdqu %ymm11, 0xa0(%rsp)
236
+ vpxor 0x160(%rsp), %ymm4, %ymm11
237
+ vpsrlq $0x13, %ymm11, %ymm12
238
+ vpsllq $0x2d, %ymm11, %ymm11
239
+ vpor %ymm12, %ymm11, %ymm11
240
+ vpandn %ymm11, %ymm10, %ymm12
241
+ vpxor %ymm2, %ymm12, %ymm12
242
+ vmovdqu %ymm12, 0xc0(%rsp)
243
+ vpsrlq $0x3, %ymm7, %ymm12
244
+ vpsllq $0x3d, %ymm7, %ymm7
245
+ vpor %ymm12, %ymm7, %ymm7
246
+ vpandn %ymm7, %ymm11, %ymm12
247
+ vpxor %ymm10, %ymm12, %ymm10
248
+ vpandn %ymm8, %ymm7, %ymm12
249
+ vpandn %ymm2, %ymm8, %ymm8
250
+ vpsrlq $0x3f, %ymm6, %ymm2
251
+ vpsllq $0x1, %ymm6, %ymm6
252
+ vpxor %ymm11, %ymm12, %ymm14
253
+ vpor %ymm2, %ymm6, %ymm6
254
+ vpsrlq $0x3a, %ymm9, %ymm2
255
+ vpxor %ymm7, %ymm8, %ymm12
256
+ vpsllq $0x6, %ymm9, %ymm9
257
+ vmovdqu %ymm12, 0xe0(%rsp)
258
+ vpxor 0x1a0(%rsp), %ymm0, %ymm7
259
+ vpor %ymm2, %ymm9, %ymm9
260
+ vpxor 0x120(%rsp), %ymm1, %ymm2
261
+ vpshufb (%rdx), %ymm7, %ymm7
262
+ vpsrlq $0x27, %ymm2, %ymm11
263
+ vpsllq $0x19, %ymm2, %ymm2
264
+ vpor %ymm2, %ymm11, %ymm11
265
+ vpandn %ymm11, %ymm9, %ymm2
266
+ vpandn %ymm7, %ymm11, %ymm8
267
+ vpxor %ymm6, %ymm2, %ymm12
268
+ vpxor 0x1c0(%rsp), %ymm3, %ymm2
269
+ vpxor %ymm9, %ymm8, %ymm8
270
+ vmovdqu %ymm12, 0x100(%rsp)
271
+ vpsrlq $0x2e, %ymm2, %ymm12
272
+ vpsllq $0x12, %ymm2, %ymm2
273
+ vpor %ymm2, %ymm12, %ymm2
274
+ vpandn %ymm2, %ymm7, %ymm12
275
+ vpxor %ymm11, %ymm12, %ymm15
276
+ vpandn %ymm6, %ymm2, %ymm11
277
+ vpandn %ymm9, %ymm6, %ymm6
278
+ vpxor %ymm7, %ymm11, %ymm12
279
+ vmovdqu %ymm12, 0x120(%rsp)
280
+ vpxor %ymm2, %ymm6, %ymm12
281
+ vpxor 0x2e0(%rsp), %ymm0, %ymm6
282
+ vpxor 0x2c0(%rsp), %ymm0, %ymm0
283
+ vmovdqu %ymm12, 0x140(%rsp)
284
+ vpsrlq $0x25, %ymm6, %ymm2
285
+ vpsllq $0x1b, %ymm6, %ymm6
286
+ vpor %ymm6, %ymm2, %ymm2
287
+ vpxor 0x220(%rsp), %ymm3, %ymm6
288
+ vpxor 0x200(%rsp), %ymm3, %ymm3
289
+ vpsrlq $0x1c, %ymm6, %ymm7
290
+ vpsllq $0x24, %ymm6, %ymm6
291
+ vpor %ymm6, %ymm7, %ymm7
292
+ vpxor 0x260(%rsp), %ymm4, %ymm6
293
+ vpxor 0x240(%rsp), %ymm4, %ymm4
294
+ vpsrlq $0x36, %ymm6, %ymm12
295
+ vpsllq $0xa, %ymm6, %ymm6
296
+ vpor %ymm6, %ymm12, %ymm12
297
+ vpxor 0x180(%rsp), %ymm5, %ymm6
298
+ vpxor 0x280(%rsp), %ymm5, %ymm5
299
+ vpandn %ymm12, %ymm7, %ymm9
300
+ vpsrlq $0x31, %ymm6, %ymm11
301
+ vpsllq $0xf, %ymm6, %ymm6
302
+ vpxor %ymm2, %ymm9, %ymm9
303
+ vpor %ymm6, %ymm11, %ymm11
304
+ vpandn %ymm11, %ymm12, %ymm6
305
+ vpxor %ymm7, %ymm6, %ymm6
306
+ vmovdqu %ymm6, 0x160(%rsp)
307
+ vpxor 0x1e0(%rsp), %ymm1, %ymm6
308
+ vpxor 0x2a0(%rsp), %ymm1, %ymm1
309
+ vpshufb (%rcx), %ymm6, %ymm6
310
+ vpandn %ymm6, %ymm11, %ymm13
311
+ vpxor %ymm12, %ymm13, %ymm13
312
+ vmovdqu %ymm13, 0x180(%rsp)
313
+ vpandn %ymm2, %ymm6, %ymm13
314
+ vpandn %ymm7, %ymm2, %ymm2
315
+ vpxor %ymm6, %ymm2, %ymm2
316
+ vpsrlq $0x3e, %ymm4, %ymm6
317
+ vpxor %ymm11, %ymm13, %ymm13
318
+ vmovdqu %ymm2, 0x1a0(%rsp)
319
+ vpsrlq $0x2, %ymm5, %ymm2
320
+ vpsllq $0x3e, %ymm5, %ymm5
321
+ vpor %ymm5, %ymm2, %ymm2
322
+ vpsrlq $0x9, %ymm1, %ymm5
323
+ vpsllq $0x37, %ymm1, %ymm1
324
+ vpsllq $0x2, %ymm4, %ymm4
325
+ vpor %ymm1, %ymm5, %ymm1
326
+ vpsrlq $0x19, %ymm0, %ymm5
327
+ vpor %ymm4, %ymm6, %ymm4
328
+ vpsllq $0x27, %ymm0, %ymm0
329
+ vpor %ymm0, %ymm5, %ymm5
330
+ vpandn %ymm5, %ymm1, %ymm0
331
+ vpxor %ymm2, %ymm0, %ymm0
332
+ vmovdqu %ymm0, 0x1c0(%rsp)
333
+ vpsrlq $0x17, %ymm3, %ymm0
334
+ vpsllq $0x29, %ymm3, %ymm3
335
+ vpor %ymm3, %ymm0, %ymm0
336
+ vpandn %ymm4, %ymm0, %ymm7
337
+ vpandn %ymm0, %ymm5, %ymm3
338
+ vpxor %ymm5, %ymm7, %ymm7
339
+ vpandn %ymm2, %ymm4, %ymm5
340
+ vpandn %ymm1, %ymm2, %ymm2
341
+ vpxor %ymm0, %ymm5, %ymm5
342
+ vpxor %ymm1, %ymm3, %ymm3
343
+ vpxor %ymm4, %ymm2, %ymm2
344
+ vmovdqu %ymm5, 0x1e0(%rsp)
345
+ addq $0x8, %rsi
346
+ addq $0x1, %r10
347
+ cmpq $0x18, %r10
348
+ jne LLkeccak_f1600_x4_avx2
349
+ vmovdqu (%rsp), %ymm4
350
+ vmovdqu 0x40(%rsp), %ymm5
351
+ vmovdqu 0x20(%rsp), %ymm0
352
+ vmovdqu 0x60(%rsp), %ymm1
353
+ vmovdqu 0x1c0(%rsp), %ymm12
354
+ vmovdqu %ymm2, 0x1c0(%rsp)
355
+ vpunpcklqdq %ymm0, %ymm4, %ymm2 # ymm2 = ymm4[0],ymm0[0],ymm4[2],ymm0[2]
356
+ vpunpckhqdq %ymm0, %ymm4, %ymm0 # ymm0 = ymm4[1],ymm0[1],ymm4[3],ymm0[3]
357
+ vpunpcklqdq %ymm1, %ymm5, %ymm4 # ymm4 = ymm5[0],ymm1[0],ymm5[2],ymm1[2]
358
+ vpunpckhqdq %ymm1, %ymm5, %ymm1 # ymm1 = ymm5[1],ymm1[1],ymm5[3],ymm1[3]
359
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm6 # ymm6 = ymm2[0,1],ymm4[0,1]
360
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm4[2,3]
361
+ vmovdqu 0x80(%rsp), %ymm4
362
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm5 # ymm5 = ymm0[0,1],ymm1[0,1]
363
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[2,3],ymm1[2,3]
364
+ vmovdqu %ymm6, (%rdi)
365
+ vmovdqu %ymm5, 0xc8(%rdi)
366
+ vmovdqu %ymm2, 0x190(%rdi)
367
+ vmovdqu %ymm0, 0x258(%rdi)
368
+ vmovdqu 0xa0(%rsp), %ymm0
369
+ vpunpcklqdq %ymm0, %ymm4, %ymm2 # ymm2 = ymm4[0],ymm0[0],ymm4[2],ymm0[2]
370
+ vpunpckhqdq %ymm0, %ymm4, %ymm1 # ymm1 = ymm4[1],ymm0[1],ymm4[3],ymm0[3]
371
+ vmovdqu 0xc0(%rsp), %ymm0
372
+ vpunpcklqdq %ymm10, %ymm0, %ymm4 # ymm4 = ymm0[0],ymm10[0],ymm0[2],ymm10[2]
373
+ vpunpckhqdq %ymm10, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm10[1],ymm0[3],ymm10[3]
374
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm6 # ymm6 = ymm2[0,1],ymm4[0,1]
375
+ vperm2i128 $0x20, %ymm0, %ymm1, %ymm5 # ymm5 = ymm1[0,1],ymm0[0,1]
376
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm4[2,3]
377
+ vmovdqu 0xe0(%rsp), %ymm4
378
+ vperm2i128 $0x31, %ymm0, %ymm1, %ymm1 # ymm1 = ymm1[2,3],ymm0[2,3]
379
+ vmovdqu 0x100(%rsp), %ymm0
380
+ vmovdqu %ymm2, 0x1b0(%rdi)
381
+ vmovdqu %ymm1, 0x278(%rdi)
382
+ vpunpcklqdq %ymm4, %ymm14, %ymm2 # ymm2 = ymm14[0],ymm4[0],ymm14[2],ymm4[2]
383
+ vpunpckhqdq %ymm4, %ymm14, %ymm1 # ymm1 = ymm14[1],ymm4[1],ymm14[3],ymm4[3]
384
+ vpunpcklqdq %ymm8, %ymm0, %ymm4 # ymm4 = ymm0[0],ymm8[0],ymm0[2],ymm8[2]
385
+ vpunpckhqdq %ymm8, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm8[1],ymm0[3],ymm8[3]
386
+ vmovdqu %ymm6, 0x20(%rdi)
387
+ vmovdqu %ymm5, 0xe8(%rdi)
388
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm6 # ymm6 = ymm2[0,1],ymm4[0,1]
389
+ vperm2i128 $0x20, %ymm0, %ymm1, %ymm5 # ymm5 = ymm1[0,1],ymm0[0,1]
390
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm4[2,3]
391
+ vperm2i128 $0x31, %ymm0, %ymm1, %ymm1 # ymm1 = ymm1[2,3],ymm0[2,3]
392
+ vmovdqu 0x120(%rsp), %ymm4
393
+ vmovdqu 0x140(%rsp), %ymm0
394
+ vmovdqu %ymm2, 0x1d0(%rdi)
395
+ vmovdqu %ymm1, 0x298(%rdi)
396
+ vpunpcklqdq %ymm4, %ymm15, %ymm2 # ymm2 = ymm15[0],ymm4[0],ymm15[2],ymm4[2]
397
+ vpunpckhqdq %ymm4, %ymm15, %ymm1 # ymm1 = ymm15[1],ymm4[1],ymm15[3],ymm4[3]
398
+ vpunpcklqdq %ymm9, %ymm0, %ymm4 # ymm4 = ymm0[0],ymm9[0],ymm0[2],ymm9[2]
399
+ vmovdqu %ymm5, 0x108(%rdi)
400
+ vpunpckhqdq %ymm9, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm9[1],ymm0[3],ymm9[3]
401
+ vmovdqu %ymm6, 0x40(%rdi)
402
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm6 # ymm6 = ymm2[0,1],ymm4[0,1]
403
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm4[2,3]
404
+ vperm2i128 $0x20, %ymm0, %ymm1, %ymm5 # ymm5 = ymm1[0,1],ymm0[0,1]
405
+ vmovdqu 0x160(%rsp), %ymm4
406
+ vperm2i128 $0x31, %ymm0, %ymm1, %ymm1 # ymm1 = ymm1[2,3],ymm0[2,3]
407
+ vmovdqu 0x180(%rsp), %ymm0
408
+ vmovdqu %ymm5, 0x128(%rdi)
409
+ vmovdqu 0x1a0(%rsp), %ymm5
410
+ vmovdqu %ymm2, 0x1f0(%rdi)
411
+ vpunpcklqdq %ymm0, %ymm4, %ymm2 # ymm2 = ymm4[0],ymm0[0],ymm4[2],ymm0[2]
412
+ vpunpckhqdq %ymm0, %ymm4, %ymm0 # ymm0 = ymm4[1],ymm0[1],ymm4[3],ymm0[3]
413
+ vpunpcklqdq %ymm5, %ymm13, %ymm4 # ymm4 = ymm13[0],ymm5[0],ymm13[2],ymm5[2]
414
+ vmovdqu %ymm6, 0x60(%rdi)
415
+ vperm2i128 $0x20, %ymm4, %ymm2, %ymm6 # ymm6 = ymm2[0,1],ymm4[0,1]
416
+ vmovdqu %ymm1, 0x2b8(%rdi)
417
+ vperm2i128 $0x31, %ymm4, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm4[2,3]
418
+ vpunpckhqdq %ymm5, %ymm13, %ymm1 # ymm1 = ymm13[1],ymm5[1],ymm13[3],ymm5[3]
419
+ vmovdqu %ymm6, 0x80(%rdi)
420
+ vmovdqu 0x1e0(%rsp), %ymm4
421
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm5 # ymm5 = ymm0[0,1],ymm1[0,1]
422
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[2,3],ymm1[2,3]
423
+ vmovdqu %ymm2, 0x210(%rdi)
424
+ vpunpcklqdq %ymm3, %ymm12, %ymm2 # ymm2 = ymm12[0],ymm3[0],ymm12[2],ymm3[2]
425
+ vmovdqu %ymm0, 0x2d8(%rdi)
426
+ vpunpckhqdq %ymm3, %ymm12, %ymm0 # ymm0 = ymm12[1],ymm3[1],ymm12[3],ymm3[3]
427
+ vpunpcklqdq %ymm4, %ymm7, %ymm3 # ymm3 = ymm7[0],ymm4[0],ymm7[2],ymm4[2]
428
+ vpunpckhqdq %ymm4, %ymm7, %ymm1 # ymm1 = ymm7[1],ymm4[1],ymm7[3],ymm4[3]
429
+ vmovdqu %ymm5, 0x148(%rdi)
430
+ vperm2i128 $0x20, %ymm3, %ymm2, %ymm5 # ymm5 = ymm2[0,1],ymm3[0,1]
431
+ vperm2i128 $0x31, %ymm3, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm3[2,3]
432
+ vmovdqu 0x1c0(%rsp), %ymm3
433
+ vperm2i128 $0x20, %ymm1, %ymm0, %ymm4 # ymm4 = ymm0[0,1],ymm1[0,1]
434
+ vperm2i128 $0x31, %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[2,3],ymm1[2,3]
435
+ vmovdqu %ymm5, 0xa0(%rdi)
436
+ vextracti128 $0x1, %ymm3, %xmm15
437
+ vmovdqu %ymm4, 0x168(%rdi)
438
+ vmovdqu %ymm2, 0x230(%rdi)
439
+ vmovdqu %ymm0, 0x2f8(%rdi)
440
+ vmovq %xmm3, 0xc0(%rdi)
441
+ vmovhpd %xmm3, 0x188(%rdi)
442
+ vmovq %xmm15, 0x250(%rdi)
443
+ vmovhpd %xmm15, 0x318(%rdi)
444
+ addq $0x300, %rsp # imm = 0x300
445
+ .cfi_adjust_cfa_offset -0x300
446
+ retq
447
+ .cfi_endproc
448
+
449
+ MLK_ASM_FN_SIZE(keccak_f1600_x4_avx2)
450
+
451
+ #endif /* MLK_FIPS202_X86_64_NEED_X4_AVX2 && !MLK_CONFIG_MULTILEVEL_NO_SHARED */
@@ -0,0 +1,51 @@
1
+ /*
2
+ * Copyright (c) The mlkem-native project authors
3
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
4
+ */
5
+
6
+ /*
7
+ * WARNING: This file is auto-generated from scripts/autogen
8
+ * in the mlkem-native repository.
9
+ * Do not modify it directly.
10
+ */
11
+
12
+ #include "../../../../common.h"
13
+ #if defined(MLK_FIPS202_X86_64_NEED_X4_AVX2) && \
14
+ !defined(MLK_CONFIG_MULTILEVEL_NO_SHARED)
15
+
16
+ #include <stdint.h>
17
+
18
+ #include "fips202_native_x86_64.h"
19
+
20
+ MLK_ALIGN const uint64_t mlk_keccakf1600_round_constants[] = {
21
+ 0x0000000000000001, 0x0000000000008082, 0x800000000000808a,
22
+ 0x8000000080008000, 0x000000000000808b, 0x0000000080000001,
23
+ 0x8000000080008081, 0x8000000000008009, 0x000000000000008a,
24
+ 0x0000000000000088, 0x0000000080008009, 0x000000008000000a,
25
+ 0x000000008000808b, 0x800000000000008b, 0x8000000000008089,
26
+ 0x8000000000008003, 0x8000000000008002, 0x8000000000000080,
27
+ 0x000000000000800a, 0x800000008000000a, 0x8000000080008081,
28
+ 0x8000000000008080, 0x0000000080000001, 0x8000000080008008,
29
+ };
30
+
31
+ MLK_ALIGN const uint64_t mlk_keccak_rho8[] = {
32
+ 0x0605040302010007,
33
+ 0x0e0d0c0b0a09080f,
34
+ 0x1615141312111017,
35
+ 0x1e1d1c1b1a19181f,
36
+ };
37
+
38
+ MLK_ALIGN const uint64_t mlk_keccak_rho56[] = {
39
+ 0x0007060504030201,
40
+ 0x080f0e0d0c0b0a09,
41
+ 0x1017161514131211,
42
+ 0x181f1e1d1c1b1a19,
43
+ };
44
+
45
+ #else /* MLK_FIPS202_X86_64_NEED_X4_AVX2 && !MLK_CONFIG_MULTILEVEL_NO_SHARED \
46
+ */
47
+
48
+ MLK_EMPTY_CU(fips202_x86_64_constants)
49
+
50
+ #endif /* !(MLK_FIPS202_X86_64_NEED_X4_AVX2 && \
51
+ !MLK_CONFIG_MULTILEVEL_NO_SHARED) */