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,1077 @@
1
+ /*
2
+ * Copyright (c) The mlkem-native project authors
3
+ * Copyright (c) The mldsa-native project authors
4
+ * Copyright (c) 2021-2022 Arm Limited
5
+ * Copyright (c) 2022 Matthias Kannwischer
6
+ * SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
7
+ */
8
+
9
+ // Author: Hanno Becker <hannobecker@posteo.de>
10
+ // Author: Matthias Kannwischer <matthias@kannwischer.eu>
11
+
12
+ /*yaml
13
+ Name: keccak_f1600_x4_v8a_scalar_hybrid_asm
14
+ Description: AArch64 hybrid scalar/vector implementation of Keccak-f[1600] permutation for four sequential states
15
+ Signature: void mld_keccak_f1600_x4_v8a_scalar_hybrid_asm(uint64_t state[100], const uint64_t rc[24])
16
+ ABI:
17
+ x0:
18
+ type: buffer
19
+ size_bytes: 800
20
+ permissions: read/write
21
+ c_parameter: uint64_t state[100]
22
+ description: Four sequential Keccak states (state0[25], state1[25], state2[25], state3[25])
23
+ x1:
24
+ type: buffer
25
+ size_bytes: 192
26
+ permissions: read-only
27
+ c_parameter: const uint64_t rc[24]
28
+ description: Round constants (24 x uint64_t)
29
+ Stack:
30
+ bytes: 224
31
+ description: register preservation and temporary storage
32
+ */
33
+
34
+ #include "../../../../common.h"
35
+ #if defined(MLD_FIPS202_AARCH64_NEED_X4_V8A_SCALAR_HYBRID) && \
36
+ !defined(MLD_CONFIG_MULTILEVEL_NO_SHARED)
37
+
38
+ /*
39
+ * WARNING: This file is auto-derived from the mldsa-native source file
40
+ * dev/fips202/aarch64/src/keccak_f1600_x4_v8a_scalar_hybrid_asm.S using scripts/simpasm. Do not modify it directly.
41
+ */
42
+
43
+ #if defined(__ELF__)
44
+ .section .note.GNU-stack,"",@progbits
45
+ #endif
46
+
47
+ .text
48
+ .balign 4
49
+ .global MLD_ASM_NAMESPACE(keccak_f1600_x4_v8a_scalar_hybrid_asm)
50
+ MLD_ASM_FN_SYMBOL(keccak_f1600_x4_v8a_scalar_hybrid_asm)
51
+
52
+ .cfi_startproc
53
+ sub sp, sp, #0xe0
54
+ .cfi_adjust_cfa_offset 0xe0
55
+ stp x19, x20, [sp, #0x30]
56
+ .cfi_rel_offset x19, 0x30
57
+ .cfi_rel_offset x20, 0x38
58
+ stp x21, x22, [sp, #0x40]
59
+ .cfi_rel_offset x21, 0x40
60
+ .cfi_rel_offset x22, 0x48
61
+ stp x23, x24, [sp, #0x50]
62
+ .cfi_rel_offset x23, 0x50
63
+ .cfi_rel_offset x24, 0x58
64
+ stp x25, x26, [sp, #0x60]
65
+ .cfi_rel_offset x25, 0x60
66
+ .cfi_rel_offset x26, 0x68
67
+ stp x27, x28, [sp, #0x70]
68
+ .cfi_rel_offset x27, 0x70
69
+ .cfi_rel_offset x28, 0x78
70
+ stp x29, x30, [sp, #0x80]
71
+ .cfi_rel_offset x29, 0x80
72
+ .cfi_rel_offset x30, 0x88
73
+ stp d8, d9, [sp, #0x90]
74
+ .cfi_rel_offset d8, 0x90
75
+ .cfi_rel_offset d9, 0x98
76
+ stp d10, d11, [sp, #0xa0]
77
+ .cfi_rel_offset d10, 0xa0
78
+ .cfi_rel_offset d11, 0xa8
79
+ stp d12, d13, [sp, #0xb0]
80
+ .cfi_rel_offset d12, 0xb0
81
+ .cfi_rel_offset d13, 0xb8
82
+ stp d14, d15, [sp, #0xc0]
83
+ .cfi_rel_offset d14, 0xc0
84
+ .cfi_rel_offset d15, 0xc8
85
+ mov x29, x1
86
+ mov x30, #0x0 // =0
87
+ str x30, [sp, #0x20]
88
+ str x29, [sp, #0x8]
89
+ str x29, [sp, #0x10]
90
+ str x0, [sp]
91
+ add x4, x0, #0xc8
92
+ ldp q25, q26, [x0], #0x20
93
+ ld1 { v27.2d, v28.2d }, [x4], #32
94
+ trn1 v0.2d, v25.2d, v27.2d
95
+ trn2 v1.2d, v25.2d, v27.2d
96
+ trn1 v2.2d, v26.2d, v28.2d
97
+ trn2 v3.2d, v26.2d, v28.2d
98
+ ldp q25, q26, [x0], #0x20
99
+ ld1 { v27.2d, v28.2d }, [x4], #32
100
+ trn1 v4.2d, v25.2d, v27.2d
101
+ trn2 v5.2d, v25.2d, v27.2d
102
+ trn1 v6.2d, v26.2d, v28.2d
103
+ trn2 v7.2d, v26.2d, v28.2d
104
+ ldp q25, q26, [x0], #0x20
105
+ ld1 { v27.2d, v28.2d }, [x4], #32
106
+ trn1 v8.2d, v25.2d, v27.2d
107
+ trn2 v9.2d, v25.2d, v27.2d
108
+ trn1 v10.2d, v26.2d, v28.2d
109
+ trn2 v11.2d, v26.2d, v28.2d
110
+ ldp q25, q26, [x0], #0x20
111
+ ld1 { v27.2d, v28.2d }, [x4], #32
112
+ trn1 v12.2d, v25.2d, v27.2d
113
+ trn2 v13.2d, v25.2d, v27.2d
114
+ trn1 v14.2d, v26.2d, v28.2d
115
+ trn2 v15.2d, v26.2d, v28.2d
116
+ ldp q25, q26, [x0], #0x20
117
+ ld1 { v27.2d, v28.2d }, [x4], #32
118
+ trn1 v16.2d, v25.2d, v27.2d
119
+ trn2 v17.2d, v25.2d, v27.2d
120
+ trn1 v18.2d, v26.2d, v28.2d
121
+ trn2 v19.2d, v26.2d, v28.2d
122
+ ldp q25, q26, [x0], #0x20
123
+ ld1 { v27.2d, v28.2d }, [x4], #32
124
+ trn1 v20.2d, v25.2d, v27.2d
125
+ trn2 v21.2d, v25.2d, v27.2d
126
+ trn1 v22.2d, v26.2d, v28.2d
127
+ trn2 v23.2d, v26.2d, v28.2d
128
+ ldr d25, [x0]
129
+ ldr d27, [x4]
130
+ trn1 v24.2d, v25.2d, v27.2d
131
+ sub x0, x0, #0xc0
132
+ add x0, x0, #0x190
133
+ ldp x1, x6, [x0]
134
+ ldp x11, x16, [x0, #0x10]
135
+ ldp x21, x2, [x0, #0x20]
136
+ ldp x7, x12, [x0, #0x30]
137
+ ldp x17, x22, [x0, #0x40]
138
+ ldp x3, x8, [x0, #0x50]
139
+ ldp x13, x28, [x0, #0x60]
140
+ ldp x23, x4, [x0, #0x70]
141
+ ldp x9, x14, [x0, #0x80]
142
+ ldp x19, x24, [x0, #0x90]
143
+ ldp x5, x10, [x0, #0xa0]
144
+ ldp x15, x20, [x0, #0xb0]
145
+ ldr x25, [x0, #0xc0]
146
+ sub x0, x0, #0x190
147
+
148
+ Lkeccak_f1600_x4_v8a_scalar_hybrid_initial:
149
+ eor x30, x24, x25
150
+ eor x27, x9, x10
151
+ eor v30.16b, v0.16b, v5.16b
152
+ eor v30.16b, v30.16b, v10.16b
153
+ eor x0, x30, x21
154
+ eor v30.16b, v30.16b, v15.16b
155
+ eor x26, x27, x6
156
+ eor x27, x26, x7
157
+ eor v30.16b, v30.16b, v20.16b
158
+ eor x29, x0, x22
159
+ eor v29.16b, v1.16b, v6.16b
160
+ eor x26, x29, x23
161
+ eor v29.16b, v29.16b, v11.16b
162
+ eor x29, x4, x5
163
+ eor x30, x29, x1
164
+ eor v29.16b, v29.16b, v16.16b
165
+ eor x0, x27, x8
166
+ eor v29.16b, v29.16b, v21.16b
167
+ eor x29, x30, x2
168
+ eor v28.16b, v2.16b, v7.16b
169
+ eor x30, x19, x20
170
+ eor x30, x30, x16
171
+ eor v28.16b, v28.16b, v12.16b
172
+ eor x27, x26, x0, ror #63
173
+ eor v28.16b, v28.16b, v17.16b
174
+ eor x4, x4, x27
175
+ eor v28.16b, v28.16b, v22.16b
176
+ eor x30, x30, x17
177
+ eor x30, x30, x28
178
+ eor v27.16b, v3.16b, v8.16b
179
+ eor x29, x29, x3
180
+ eor v27.16b, v27.16b, v13.16b
181
+ eor x0, x0, x30, ror #63
182
+ eor v27.16b, v27.16b, v18.16b
183
+ eor x30, x30, x29, ror #63
184
+ eor x22, x22, x30
185
+ eor v27.16b, v27.16b, v23.16b
186
+ eor x23, x23, x30
187
+ eor v26.16b, v4.16b, v9.16b
188
+ str x23, [sp, #0xd0]
189
+ eor v26.16b, v26.16b, v14.16b
190
+ eor x23, x14, x15
191
+ eor x14, x14, x0
192
+ eor v26.16b, v26.16b, v19.16b
193
+ eor x23, x23, x11
194
+ eor v26.16b, v26.16b, v24.16b
195
+ eor x15, x15, x0
196
+ eor x1, x1, x27
197
+ add v31.2d, v28.2d, v28.2d
198
+ eor x23, x23, x12
199
+ sri v31.2d, v28.2d, #0x3f
200
+ eor x23, x23, x13
201
+ eor v25.16b, v31.16b, v30.16b
202
+ eor x11, x11, x0
203
+ eor x29, x29, x23, ror #63
204
+ add v31.2d, v26.2d, v26.2d
205
+ eor x23, x23, x26, ror #63
206
+ sri v31.2d, v26.2d, #0x3f
207
+ eor x26, x13, x0
208
+ eor v28.16b, v31.16b, v28.16b
209
+ eor x13, x28, x23
210
+ eor x28, x24, x30
211
+ add v31.2d, v29.2d, v29.2d
212
+ eor x24, x16, x23
213
+ sri v31.2d, v29.2d, #0x3f
214
+ eor x16, x21, x30
215
+ eor v26.16b, v31.16b, v26.16b
216
+ eor x21, x25, x30
217
+ eor x30, x19, x23
218
+ add v31.2d, v27.2d, v27.2d
219
+ eor x19, x20, x23
220
+ sri v31.2d, v27.2d, #0x3f
221
+ eor x20, x17, x23
222
+ eor v29.16b, v31.16b, v29.16b
223
+ eor x17, x12, x0
224
+ eor x0, x2, x27
225
+ add v31.2d, v30.2d, v30.2d
226
+ eor x2, x6, x29
227
+ sri v31.2d, v30.2d, #0x3f
228
+ eor x6, x8, x29
229
+ eor v27.16b, v31.16b, v27.16b
230
+ bic x8, x28, x13, ror #47
231
+ eor x12, x3, x27
232
+ eor v30.16b, v0.16b, v26.16b
233
+ bic x3, x13, x17, ror #19
234
+ eor v31.16b, v2.16b, v29.16b
235
+ eor x5, x5, x27
236
+ ldr x27, [sp, #0xd0]
237
+ shl v0.2d, v31.2d, #0x3e
238
+ bic x25, x17, x2, ror #5
239
+ sri v0.2d, v31.2d, #0x2
240
+ eor x9, x9, x29
241
+ eor v31.16b, v12.16b, v29.16b
242
+ eor x23, x25, x5, ror #52
243
+ eor x3, x3, x2, ror #24
244
+ shl v2.2d, v31.2d, #0x2b
245
+ eor x8, x8, x17, ror #2
246
+ sri v2.2d, v31.2d, #0x15
247
+ eor x17, x10, x29
248
+ eor v31.16b, v13.16b, v28.16b
249
+ bic x25, x12, x22, ror #47
250
+ eor x29, x7, x29
251
+ shl v12.2d, v31.2d, #0x19
252
+ bic x10, x4, x27, ror #2
253
+ sri v12.2d, v31.2d, #0x27
254
+ bic x7, x5, x28, ror #10
255
+ eor v31.16b, v19.16b, v27.16b
256
+ eor x10, x10, x20, ror #50
257
+ eor x13, x7, x13, ror #57
258
+ shl v13.2d, v31.2d, #0x8
259
+ bic x7, x2, x5, ror #47
260
+ sri v13.2d, v31.2d, #0x38
261
+ eor x2, x25, x24, ror #39
262
+ eor v31.16b, v23.16b, v28.16b
263
+ bic x25, x20, x11, ror #57
264
+ bic x5, x17, x4, ror #25
265
+ shl v19.2d, v31.2d, #0x38
266
+ eor x25, x25, x17, ror #53
267
+ sri v19.2d, v31.2d, #0x8
268
+ bic x17, x11, x17, ror #60
269
+ eor v31.16b, v15.16b, v26.16b
270
+ eor x28, x7, x28, ror #57
271
+ bic x7, x9, x12, ror #42
272
+ shl v23.2d, v31.2d, #0x29
273
+ eor x7, x7, x22, ror #25
274
+ sri v23.2d, v31.2d, #0x17
275
+ bic x22, x22, x24, ror #56
276
+ bic x24, x24, x15, ror #31
277
+ eor v31.16b, v1.16b, v25.16b
278
+ eor x22, x22, x15, ror #23
279
+ shl v15.2d, v31.2d, #0x1
280
+ bic x20, x27, x20, ror #48
281
+ sri v15.2d, v31.2d, #0x3f
282
+ bic x15, x15, x9, ror #16
283
+ eor x12, x15, x12, ror #58
284
+ eor v31.16b, v8.16b, v28.16b
285
+ eor x15, x5, x27, ror #27
286
+ shl v1.2d, v31.2d, #0x37
287
+ eor x5, x20, x11, ror #41
288
+ sri v1.2d, v31.2d, #0x9
289
+ ldr x11, [sp, #0x8]
290
+ eor x20, x17, x4, ror #21
291
+ eor v31.16b, v16.16b, v25.16b
292
+ eor x17, x24, x9, ror #47
293
+ shl v8.2d, v31.2d, #0x2d
294
+ mov x24, #0x1 // =1
295
+ sri v8.2d, v31.2d, #0x13
296
+ bic x9, x0, x16, ror #9
297
+ str x24, [sp, #0x18]
298
+ eor v31.16b, v7.16b, v29.16b
299
+ bic x24, x29, x1, ror #44
300
+ shl v16.2d, v31.2d, #0x6
301
+ bic x27, x1, x21, ror #50
302
+ sri v16.2d, v31.2d, #0x3a
303
+ bic x4, x26, x29, ror #63
304
+ eor x1, x1, x4, ror #21
305
+ eor v31.16b, v10.16b, v26.16b
306
+ ldr x11, [x11]
307
+ shl v7.2d, v31.2d, #0x3
308
+ bic x4, x21, x30, ror #57
309
+ sri v7.2d, v31.2d, #0x3d
310
+ eor x21, x24, x21, ror #30
311
+ eor x24, x9, x19, ror #44
312
+ eor v31.16b, v3.16b, v28.16b
313
+ bic x9, x14, x6, ror #5
314
+ shl v10.2d, v31.2d, #0x1c
315
+ eor x9, x9, x0, ror #43
316
+ sri v10.2d, v31.2d, #0x24
317
+ bic x0, x6, x0, ror #38
318
+ eor x1, x1, x11
319
+ eor v31.16b, v18.16b, v28.16b
320
+ eor x11, x4, x26, ror #35
321
+ shl v3.2d, v31.2d, #0x15
322
+ eor x4, x0, x16, ror #47
323
+ bic x0, x16, x19, ror #35
324
+ sri v3.2d, v31.2d, #0x2b
325
+ eor x16, x27, x30, ror #43
326
+ eor v31.16b, v17.16b, v29.16b
327
+ bic x27, x30, x26, ror #42
328
+ shl v18.2d, v31.2d, #0xf
329
+ bic x26, x19, x14, ror #41
330
+ eor x19, x0, x14, ror #12
331
+ sri v18.2d, v31.2d, #0x31
332
+ eor x14, x26, x6, ror #46
333
+ eor v31.16b, v11.16b, v25.16b
334
+ eor x6, x27, x29, ror #41
335
+ shl v17.2d, v31.2d, #0xa
336
+ eor x0, x15, x11, ror #52
337
+ eor x0, x0, x13, ror #48
338
+ sri v17.2d, v31.2d, #0x36
339
+ eor x26, x8, x9, ror #57
340
+ eor v31.16b, v9.16b, v27.16b
341
+ eor x27, x0, x14, ror #10
342
+ shl v11.2d, v31.2d, #0x14
343
+ eor x29, x16, x28, ror #63
344
+ eor x26, x26, x6, ror #51
345
+ sri v11.2d, v31.2d, #0x2c
346
+ eor x30, x23, x22, ror #50
347
+ eor v31.16b, v22.16b, v29.16b
348
+ eor x0, x26, x10, ror #31
349
+ shl v9.2d, v31.2d, #0x3d
350
+ eor x29, x29, x19, ror #37
351
+ eor x27, x27, x12, ror #5
352
+ sri v9.2d, v31.2d, #0x3
353
+ eor x30, x30, x24, ror #34
354
+ eor v31.16b, v14.16b, v27.16b
355
+ eor x0, x0, x7, ror #27
356
+ shl v22.2d, v31.2d, #0x27
357
+ eor x26, x30, x21, ror #26
358
+ eor x26, x26, x25, ror #15
359
+ sri v22.2d, v31.2d, #0x19
360
+ ror x30, x27, #0x3e
361
+ eor v31.16b, v20.16b, v26.16b
362
+ eor x30, x30, x26, ror #57
363
+ ror x26, x26, #0x3a
364
+ shl v14.2d, v31.2d, #0x12
365
+ eor x16, x30, x16
366
+ sri v14.2d, v31.2d, #0x2e
367
+ eor x28, x30, x28, ror #63
368
+ eor v31.16b, v4.16b, v27.16b
369
+ str x28, [sp, #0xd0]
370
+ eor x29, x29, x17, ror #36
371
+ shl v20.2d, v31.2d, #0x1b
372
+ eor x28, x1, x2, ror #61
373
+ sri v20.2d, v31.2d, #0x25
374
+ eor x19, x30, x19, ror #37
375
+ eor v31.16b, v24.16b, v27.16b
376
+ eor x29, x29, x20, ror #2
377
+ eor x28, x28, x4, ror #54
378
+ shl v4.2d, v31.2d, #0xe
379
+ eor x26, x26, x0, ror #55
380
+ sri v4.2d, v31.2d, #0x32
381
+ eor x28, x28, x3, ror #39
382
+ eor v31.16b, v21.16b, v25.16b
383
+ eor x28, x28, x5, ror #25
384
+ ror x0, x0, #0x38
385
+ shl v24.2d, v31.2d, #0x2
386
+ eor x0, x0, x29, ror #63
387
+ sri v24.2d, v31.2d, #0x3e
388
+ eor x27, x28, x27, ror #61
389
+ eor v31.16b, v5.16b, v26.16b
390
+ eor x13, x0, x13, ror #46
391
+ eor x28, x29, x28, ror #63
392
+ shl v21.2d, v31.2d, #0x24
393
+ eor x29, x30, x20, ror #2
394
+ sri v21.2d, v31.2d, #0x1c
395
+ eor x20, x26, x3, ror #39
396
+ eor v31.16b, v6.16b, v25.16b
397
+ eor x11, x0, x11, ror #50
398
+ eor x25, x28, x25, ror #9
399
+ shl v27.2d, v31.2d, #0x2c
400
+ eor x3, x28, x21, ror #20
401
+ sri v27.2d, v31.2d, #0x14
402
+ eor x21, x26, x1
403
+ eor x9, x27, x9, ror #49
404
+ bic v31.16b, v7.16b, v11.16b
405
+ eor x24, x28, x24, ror #28
406
+ eor v5.16b, v31.16b, v10.16b
407
+ eor x1, x30, x17, ror #36
408
+ bic v31.16b, v8.16b, v7.16b
409
+ eor x14, x0, x14, ror #8
410
+ eor x22, x28, x22, ror #44
411
+ eor v6.16b, v31.16b, v11.16b
412
+ eor x8, x27, x8, ror #56
413
+ bic v31.16b, v9.16b, v8.16b
414
+ eor x17, x27, x7, ror #19
415
+ eor v7.16b, v31.16b, v7.16b
416
+ eor x15, x0, x15, ror #62
417
+ bic x7, x20, x22, ror #47
418
+ bic v31.16b, v10.16b, v9.16b
419
+ eor x4, x26, x4, ror #54
420
+ eor v8.16b, v31.16b, v8.16b
421
+ eor x0, x0, x12, ror #3
422
+ bic v31.16b, v11.16b, v10.16b
423
+ eor x28, x28, x23, ror #58
424
+ eor x23, x26, x2, ror #61
425
+ eor v9.16b, v31.16b, v9.16b
426
+ eor x26, x26, x5, ror #25
427
+ bic v31.16b, v12.16b, v16.16b
428
+ eor x2, x7, x16, ror #39
429
+ eor v10.16b, v31.16b, v15.16b
430
+ bic x7, x9, x20, ror #42
431
+ bic x30, x15, x9, ror #16
432
+ bic v31.16b, v13.16b, v12.16b
433
+ eor x7, x7, x22, ror #25
434
+ eor v11.16b, v31.16b, v16.16b
435
+ eor x12, x30, x20, ror #58
436
+ bic v31.16b, v14.16b, v13.16b
437
+ bic x20, x22, x16, ror #56
438
+ eor x30, x27, x6, ror #43
439
+ eor v12.16b, v31.16b, v12.16b
440
+ eor x22, x20, x15, ror #23
441
+ bic v31.16b, v15.16b, v14.16b
442
+ bic x6, x19, x13, ror #42
443
+ eor v13.16b, v31.16b, v13.16b
444
+ eor x6, x6, x17, ror #41
445
+ bic x5, x13, x17, ror #63
446
+ bic v31.16b, v16.16b, v15.16b
447
+ eor x5, x21, x5, ror #21
448
+ eor v14.16b, v31.16b, v14.16b
449
+ bic x17, x17, x21, ror #44
450
+ eor x27, x27, x10, ror #23
451
+ bic v31.16b, v17.16b, v21.16b
452
+ bic x21, x21, x25, ror #50
453
+ eor v15.16b, v31.16b, v20.16b
454
+ bic x20, x27, x4, ror #25
455
+ bic v31.16b, v18.16b, v17.16b
456
+ bic x10, x16, x15, ror #31
457
+ eor x16, x21, x19, ror #43
458
+ eor v16.16b, v31.16b, v21.16b
459
+ eor x21, x17, x25, ror #30
460
+ bic v31.16b, v19.16b, v18.16b
461
+ bic x19, x25, x19, ror #57
462
+ eor v17.16b, v31.16b, v17.16b
463
+ ldr x25, [sp, #0x18]
464
+ eor x17, x10, x9, ror #47
465
+ bic v31.16b, v20.16b, v19.16b
466
+ ldr x9, [sp, #0x8]
467
+ eor v18.16b, v31.16b, v18.16b
468
+ eor x15, x20, x28, ror #27
469
+ bic v31.16b, v21.16b, v20.16b
470
+ bic x20, x4, x28, ror #2
471
+ eor x10, x20, x1, ror #50
472
+ eor v19.16b, v31.16b, v19.16b
473
+ bic x20, x11, x27, ror #60
474
+ bic v31.16b, v22.16b, v1.16b
475
+ eor x20, x20, x4, ror #21
476
+ eor v20.16b, v31.16b, v0.16b
477
+ bic x4, x28, x1, ror #48
478
+ bic x1, x1, x11, ror #57
479
+ bic v31.16b, v23.16b, v22.16b
480
+ ldr x28, [x9, x25, lsl #3]
481
+ eor v21.16b, v31.16b, v1.16b
482
+ ldr x9, [sp, #0xd0]
483
+ bic v31.16b, v24.16b, v23.16b
484
+ add x25, x25, #0x1
485
+ str x25, [sp, #0x18]
486
+ eor v22.16b, v31.16b, v22.16b
487
+ cmp x25, #0x17
488
+ bic v31.16b, v0.16b, v24.16b
489
+ eor x25, x1, x27, ror #53
490
+ bic x27, x30, x26, ror #47
491
+ eor v23.16b, v31.16b, v23.16b
492
+ eor x1, x5, x28
493
+ bic v31.16b, v1.16b, v0.16b
494
+ eor x5, x4, x11, ror #41
495
+ eor v24.16b, v31.16b, v24.16b
496
+ eor x11, x19, x13, ror #35
497
+ bic x13, x26, x24, ror #10
498
+ bic v31.16b, v2.16b, v27.16b
499
+ eor x28, x27, x24, ror #57
500
+ eor v0.16b, v31.16b, v30.16b
501
+ bic x27, x24, x9, ror #47
502
+ bic v31.16b, v3.16b, v2.16b
503
+ bic x19, x23, x3, ror #9
504
+ bic x4, x29, x14, ror #41
505
+ eor v1.16b, v31.16b, v27.16b
506
+ eor x24, x19, x29, ror #44
507
+ bic v31.16b, v4.16b, v3.16b
508
+ bic x29, x3, x29, ror #35
509
+ eor v2.16b, v31.16b, v2.16b
510
+ eor x13, x13, x9, ror #57
511
+ eor x19, x29, x14, ror #12
512
+ bic v31.16b, v30.16b, v4.16b
513
+ bic x29, x9, x0, ror #19
514
+ eor v3.16b, v31.16b, v3.16b
515
+ bic x14, x14, x8, ror #5
516
+ bic v31.16b, v27.16b, v30.16b
517
+ eor x9, x14, x23, ror #43
518
+ eor x14, x4, x8, ror #46
519
+ eor v4.16b, v31.16b, v4.16b
520
+ bic x23, x8, x23, ror #38
521
+ eor x8, x27, x0, ror #2
522
+ eor x4, x23, x3, ror #47
523
+ bic x3, x0, x30, ror #5
524
+ eor x23, x3, x26, ror #52
525
+ eor x3, x29, x30, ror #24
526
+ ldr x30, [sp, #0x10]
527
+ ld1r { v28.2d }, [x30], #8
528
+ str x30, [sp, #0x10]
529
+ eor v0.16b, v0.16b, v28.16b
530
+
531
+ Lkeccak_f1600_x4_v8a_scalar_hybrid_loop:
532
+ eor x0, x15, x11, ror #52
533
+ eor x0, x0, x13, ror #48
534
+ eor v30.16b, v0.16b, v5.16b
535
+ eor v30.16b, v30.16b, v10.16b
536
+ eor x26, x8, x9, ror #57
537
+ eor v30.16b, v30.16b, v15.16b
538
+ eor x27, x0, x14, ror #10
539
+ eor x29, x16, x28, ror #63
540
+ eor v30.16b, v30.16b, v20.16b
541
+ eor x26, x26, x6, ror #51
542
+ eor v29.16b, v1.16b, v6.16b
543
+ eor x30, x23, x22, ror #50
544
+ eor v29.16b, v29.16b, v11.16b
545
+ eor x0, x26, x10, ror #31
546
+ eor x29, x29, x19, ror #37
547
+ eor v29.16b, v29.16b, v16.16b
548
+ eor x27, x27, x12, ror #5
549
+ eor v29.16b, v29.16b, v21.16b
550
+ eor x30, x30, x24, ror #34
551
+ eor x0, x0, x7, ror #27
552
+ eor v28.16b, v2.16b, v7.16b
553
+ eor x26, x30, x21, ror #26
554
+ eor v28.16b, v28.16b, v12.16b
555
+ eor x26, x26, x25, ror #15
556
+ eor v28.16b, v28.16b, v17.16b
557
+ ror x30, x27, #0x3e
558
+ eor x30, x30, x26, ror #57
559
+ eor v28.16b, v28.16b, v22.16b
560
+ ror x26, x26, #0x3a
561
+ eor v27.16b, v3.16b, v8.16b
562
+ eor x16, x30, x16
563
+ eor v27.16b, v27.16b, v13.16b
564
+ eor x28, x30, x28, ror #63
565
+ str x28, [sp, #0xd0]
566
+ eor v27.16b, v27.16b, v18.16b
567
+ eor x29, x29, x17, ror #36
568
+ eor v27.16b, v27.16b, v23.16b
569
+ eor x28, x1, x2, ror #61
570
+ eor x19, x30, x19, ror #37
571
+ eor v26.16b, v4.16b, v9.16b
572
+ eor x29, x29, x20, ror #2
573
+ eor v26.16b, v26.16b, v14.16b
574
+ eor x28, x28, x4, ror #54
575
+ eor v26.16b, v26.16b, v19.16b
576
+ eor x26, x26, x0, ror #55
577
+ eor x28, x28, x3, ror #39
578
+ eor v26.16b, v26.16b, v24.16b
579
+ eor x28, x28, x5, ror #25
580
+ add v31.2d, v28.2d, v28.2d
581
+ ror x0, x0, #0x38
582
+ eor x0, x0, x29, ror #63
583
+ sri v31.2d, v28.2d, #0x3f
584
+ eor x27, x28, x27, ror #61
585
+ eor v25.16b, v31.16b, v30.16b
586
+ eor x13, x0, x13, ror #46
587
+ add v31.2d, v26.2d, v26.2d
588
+ eor x28, x29, x28, ror #63
589
+ eor x29, x30, x20, ror #2
590
+ sri v31.2d, v26.2d, #0x3f
591
+ eor x20, x26, x3, ror #39
592
+ eor v28.16b, v31.16b, v28.16b
593
+ eor x11, x0, x11, ror #50
594
+ add v31.2d, v29.2d, v29.2d
595
+ eor x25, x28, x25, ror #9
596
+ eor x3, x28, x21, ror #20
597
+ sri v31.2d, v29.2d, #0x3f
598
+ eor x21, x26, x1
599
+ eor v26.16b, v31.16b, v26.16b
600
+ eor x9, x27, x9, ror #49
601
+ eor x24, x28, x24, ror #28
602
+ add v31.2d, v27.2d, v27.2d
603
+ eor x1, x30, x17, ror #36
604
+ sri v31.2d, v27.2d, #0x3f
605
+ eor x14, x0, x14, ror #8
606
+ eor v29.16b, v31.16b, v29.16b
607
+ eor x22, x28, x22, ror #44
608
+ eor x8, x27, x8, ror #56
609
+ add v31.2d, v30.2d, v30.2d
610
+ eor x17, x27, x7, ror #19
611
+ sri v31.2d, v30.2d, #0x3f
612
+ eor x15, x0, x15, ror #62
613
+ bic x7, x20, x22, ror #47
614
+ eor v27.16b, v31.16b, v27.16b
615
+ eor x4, x26, x4, ror #54
616
+ eor v30.16b, v0.16b, v26.16b
617
+ eor x0, x0, x12, ror #3
618
+ eor v31.16b, v2.16b, v29.16b
619
+ eor x28, x28, x23, ror #58
620
+ eor x23, x26, x2, ror #61
621
+ shl v0.2d, v31.2d, #0x3e
622
+ eor x26, x26, x5, ror #25
623
+ sri v0.2d, v31.2d, #0x2
624
+ eor x2, x7, x16, ror #39
625
+ eor v31.16b, v12.16b, v29.16b
626
+ bic x7, x9, x20, ror #42
627
+ bic x30, x15, x9, ror #16
628
+ shl v2.2d, v31.2d, #0x2b
629
+ eor x7, x7, x22, ror #25
630
+ sri v2.2d, v31.2d, #0x15
631
+ eor x12, x30, x20, ror #58
632
+ bic x20, x22, x16, ror #56
633
+ eor v31.16b, v13.16b, v28.16b
634
+ eor x30, x27, x6, ror #43
635
+ shl v12.2d, v31.2d, #0x19
636
+ eor x22, x20, x15, ror #23
637
+ sri v12.2d, v31.2d, #0x27
638
+ bic x6, x19, x13, ror #42
639
+ eor x6, x6, x17, ror #41
640
+ eor v31.16b, v19.16b, v27.16b
641
+ bic x5, x13, x17, ror #63
642
+ shl v13.2d, v31.2d, #0x8
643
+ eor x5, x21, x5, ror #21
644
+ sri v13.2d, v31.2d, #0x38
645
+ bic x17, x17, x21, ror #44
646
+ eor x27, x27, x10, ror #23
647
+ eor v31.16b, v23.16b, v28.16b
648
+ bic x21, x21, x25, ror #50
649
+ shl v19.2d, v31.2d, #0x38
650
+ bic x20, x27, x4, ror #25
651
+ bic x10, x16, x15, ror #31
652
+ sri v19.2d, v31.2d, #0x8
653
+ eor x16, x21, x19, ror #43
654
+ eor v31.16b, v15.16b, v26.16b
655
+ eor x21, x17, x25, ror #30
656
+ shl v23.2d, v31.2d, #0x29
657
+ bic x19, x25, x19, ror #57
658
+ ldr x25, [sp, #0x18]
659
+ sri v23.2d, v31.2d, #0x17
660
+ eor x17, x10, x9, ror #47
661
+ eor v31.16b, v1.16b, v25.16b
662
+ ldr x9, [sp, #0x8]
663
+ eor x15, x20, x28, ror #27
664
+ shl v15.2d, v31.2d, #0x1
665
+ bic x20, x4, x28, ror #2
666
+ sri v15.2d, v31.2d, #0x3f
667
+ eor x10, x20, x1, ror #50
668
+ eor v31.16b, v8.16b, v28.16b
669
+ bic x20, x11, x27, ror #60
670
+ eor x20, x20, x4, ror #21
671
+ shl v1.2d, v31.2d, #0x37
672
+ bic x4, x28, x1, ror #48
673
+ sri v1.2d, v31.2d, #0x9
674
+ bic x1, x1, x11, ror #57
675
+ eor v31.16b, v16.16b, v25.16b
676
+ ldr x28, [x9, x25, lsl #3]
677
+ ldr x9, [sp, #0xd0]
678
+ shl v8.2d, v31.2d, #0x2d
679
+ add x25, x25, #0x1
680
+ sri v8.2d, v31.2d, #0x13
681
+ str x25, [sp, #0x18]
682
+ cmp x25, #0x17
683
+ eor v31.16b, v7.16b, v29.16b
684
+ eor x25, x1, x27, ror #53
685
+ shl v16.2d, v31.2d, #0x6
686
+ bic x27, x30, x26, ror #47
687
+ sri v16.2d, v31.2d, #0x3a
688
+ eor x1, x5, x28
689
+ eor x5, x4, x11, ror #41
690
+ eor v31.16b, v10.16b, v26.16b
691
+ eor x11, x19, x13, ror #35
692
+ shl v7.2d, v31.2d, #0x3
693
+ bic x13, x26, x24, ror #10
694
+ eor x28, x27, x24, ror #57
695
+ sri v7.2d, v31.2d, #0x3d
696
+ bic x27, x24, x9, ror #47
697
+ eor v31.16b, v3.16b, v28.16b
698
+ bic x19, x23, x3, ror #9
699
+ shl v10.2d, v31.2d, #0x1c
700
+ bic x4, x29, x14, ror #41
701
+ eor x24, x19, x29, ror #44
702
+ sri v10.2d, v31.2d, #0x24
703
+ bic x29, x3, x29, ror #35
704
+ eor v31.16b, v18.16b, v28.16b
705
+ eor x13, x13, x9, ror #57
706
+ shl v3.2d, v31.2d, #0x15
707
+ eor x19, x29, x14, ror #12
708
+ bic x29, x9, x0, ror #19
709
+ sri v3.2d, v31.2d, #0x2b
710
+ bic x14, x14, x8, ror #5
711
+ eor v31.16b, v17.16b, v29.16b
712
+ eor x9, x14, x23, ror #43
713
+ eor x14, x4, x8, ror #46
714
+ shl v18.2d, v31.2d, #0xf
715
+ bic x23, x8, x23, ror #38
716
+ sri v18.2d, v31.2d, #0x31
717
+ eor x8, x27, x0, ror #2
718
+ eor v31.16b, v11.16b, v25.16b
719
+ eor x4, x23, x3, ror #47
720
+ bic x3, x0, x30, ror #5
721
+ shl v17.2d, v31.2d, #0xa
722
+ eor x23, x3, x26, ror #52
723
+ sri v17.2d, v31.2d, #0x36
724
+ eor x3, x29, x30, ror #24
725
+ eor x0, x15, x11, ror #52
726
+ eor v31.16b, v9.16b, v27.16b
727
+ eor x0, x0, x13, ror #48
728
+ shl v11.2d, v31.2d, #0x14
729
+ eor x26, x8, x9, ror #57
730
+ sri v11.2d, v31.2d, #0x2c
731
+ eor x27, x0, x14, ror #10
732
+ eor x29, x16, x28, ror #63
733
+ eor v31.16b, v22.16b, v29.16b
734
+ eor x26, x26, x6, ror #51
735
+ shl v9.2d, v31.2d, #0x3d
736
+ eor x30, x23, x22, ror #50
737
+ sri v9.2d, v31.2d, #0x3
738
+ eor x0, x26, x10, ror #31
739
+ eor x29, x29, x19, ror #37
740
+ eor v31.16b, v14.16b, v27.16b
741
+ eor x27, x27, x12, ror #5
742
+ shl v22.2d, v31.2d, #0x27
743
+ eor x30, x30, x24, ror #34
744
+ eor x0, x0, x7, ror #27
745
+ sri v22.2d, v31.2d, #0x19
746
+ eor x26, x30, x21, ror #26
747
+ eor v31.16b, v20.16b, v26.16b
748
+ eor x26, x26, x25, ror #15
749
+ shl v14.2d, v31.2d, #0x12
750
+ ror x30, x27, #0x3e
751
+ eor x30, x30, x26, ror #57
752
+ sri v14.2d, v31.2d, #0x2e
753
+ ror x26, x26, #0x3a
754
+ eor v31.16b, v4.16b, v27.16b
755
+ eor x16, x30, x16
756
+ shl v20.2d, v31.2d, #0x1b
757
+ eor x28, x30, x28, ror #63
758
+ str x28, [sp, #0xd0]
759
+ sri v20.2d, v31.2d, #0x25
760
+ eor x29, x29, x17, ror #36
761
+ eor v31.16b, v24.16b, v27.16b
762
+ eor x28, x1, x2, ror #61
763
+ eor x19, x30, x19, ror #37
764
+ shl v4.2d, v31.2d, #0xe
765
+ eor x29, x29, x20, ror #2
766
+ sri v4.2d, v31.2d, #0x32
767
+ eor x28, x28, x4, ror #54
768
+ eor v31.16b, v21.16b, v25.16b
769
+ eor x26, x26, x0, ror #55
770
+ eor x28, x28, x3, ror #39
771
+ shl v24.2d, v31.2d, #0x2
772
+ eor x28, x28, x5, ror #25
773
+ sri v24.2d, v31.2d, #0x3e
774
+ ror x0, x0, #0x38
775
+ eor x0, x0, x29, ror #63
776
+ eor v31.16b, v5.16b, v26.16b
777
+ eor x27, x28, x27, ror #61
778
+ shl v21.2d, v31.2d, #0x24
779
+ eor x13, x0, x13, ror #46
780
+ sri v21.2d, v31.2d, #0x1c
781
+ eor x28, x29, x28, ror #63
782
+ eor x29, x30, x20, ror #2
783
+ eor v31.16b, v6.16b, v25.16b
784
+ eor x20, x26, x3, ror #39
785
+ shl v27.2d, v31.2d, #0x2c
786
+ eor x11, x0, x11, ror #50
787
+ sri v27.2d, v31.2d, #0x14
788
+ eor x25, x28, x25, ror #9
789
+ eor x3, x28, x21, ror #20
790
+ bic v31.16b, v7.16b, v11.16b
791
+ eor x21, x26, x1
792
+ eor v5.16b, v31.16b, v10.16b
793
+ eor x9, x27, x9, ror #49
794
+ eor x24, x28, x24, ror #28
795
+ bic v31.16b, v8.16b, v7.16b
796
+ eor x1, x30, x17, ror #36
797
+ eor v6.16b, v31.16b, v11.16b
798
+ eor x14, x0, x14, ror #8
799
+ bic v31.16b, v9.16b, v8.16b
800
+ eor x22, x28, x22, ror #44
801
+ eor x8, x27, x8, ror #56
802
+ eor v7.16b, v31.16b, v7.16b
803
+ eor x17, x27, x7, ror #19
804
+ bic v31.16b, v10.16b, v9.16b
805
+ eor x15, x0, x15, ror #62
806
+ bic x7, x20, x22, ror #47
807
+ eor v8.16b, v31.16b, v8.16b
808
+ eor x4, x26, x4, ror #54
809
+ bic v31.16b, v11.16b, v10.16b
810
+ eor x0, x0, x12, ror #3
811
+ eor v9.16b, v31.16b, v9.16b
812
+ eor x28, x28, x23, ror #58
813
+ eor x23, x26, x2, ror #61
814
+ bic v31.16b, v12.16b, v16.16b
815
+ eor x26, x26, x5, ror #25
816
+ eor v10.16b, v31.16b, v15.16b
817
+ eor x2, x7, x16, ror #39
818
+ bic v31.16b, v13.16b, v12.16b
819
+ bic x7, x9, x20, ror #42
820
+ bic x30, x15, x9, ror #16
821
+ eor v11.16b, v31.16b, v16.16b
822
+ eor x7, x7, x22, ror #25
823
+ bic v31.16b, v14.16b, v13.16b
824
+ eor x12, x30, x20, ror #58
825
+ bic x20, x22, x16, ror #56
826
+ eor v12.16b, v31.16b, v12.16b
827
+ eor x30, x27, x6, ror #43
828
+ bic v31.16b, v15.16b, v14.16b
829
+ eor x22, x20, x15, ror #23
830
+ eor v13.16b, v31.16b, v13.16b
831
+ bic x6, x19, x13, ror #42
832
+ eor x6, x6, x17, ror #41
833
+ bic v31.16b, v16.16b, v15.16b
834
+ bic x5, x13, x17, ror #63
835
+ eor v14.16b, v31.16b, v14.16b
836
+ eor x5, x21, x5, ror #21
837
+ bic v31.16b, v17.16b, v21.16b
838
+ bic x17, x17, x21, ror #44
839
+ eor x27, x27, x10, ror #23
840
+ eor v15.16b, v31.16b, v20.16b
841
+ bic x21, x21, x25, ror #50
842
+ bic v31.16b, v18.16b, v17.16b
843
+ bic x20, x27, x4, ror #25
844
+ bic x10, x16, x15, ror #31
845
+ eor v16.16b, v31.16b, v21.16b
846
+ eor x16, x21, x19, ror #43
847
+ bic v31.16b, v19.16b, v18.16b
848
+ eor x21, x17, x25, ror #30
849
+ eor v17.16b, v31.16b, v17.16b
850
+ bic x19, x25, x19, ror #57
851
+ ldr x25, [sp, #0x18]
852
+ bic v31.16b, v20.16b, v19.16b
853
+ eor x17, x10, x9, ror #47
854
+ eor v18.16b, v31.16b, v18.16b
855
+ ldr x9, [sp, #0x8]
856
+ eor x15, x20, x28, ror #27
857
+ bic v31.16b, v21.16b, v20.16b
858
+ bic x20, x4, x28, ror #2
859
+ eor v19.16b, v31.16b, v19.16b
860
+ eor x10, x20, x1, ror #50
861
+ bic v31.16b, v22.16b, v1.16b
862
+ bic x20, x11, x27, ror #60
863
+ eor x20, x20, x4, ror #21
864
+ eor v20.16b, v31.16b, v0.16b
865
+ bic x4, x28, x1, ror #48
866
+ bic v31.16b, v23.16b, v22.16b
867
+ bic x1, x1, x11, ror #57
868
+ eor v21.16b, v31.16b, v1.16b
869
+ ldr x28, [x9, x25, lsl #3]
870
+ ldr x9, [sp, #0xd0]
871
+ bic v31.16b, v24.16b, v23.16b
872
+ add x25, x25, #0x1
873
+ eor v22.16b, v31.16b, v22.16b
874
+ str x25, [sp, #0x18]
875
+ cmp x25, #0x17
876
+ bic v31.16b, v0.16b, v24.16b
877
+ eor x25, x1, x27, ror #53
878
+ eor v23.16b, v31.16b, v23.16b
879
+ bic x27, x30, x26, ror #47
880
+ bic v31.16b, v1.16b, v0.16b
881
+ eor x1, x5, x28
882
+ eor x5, x4, x11, ror #41
883
+ eor v24.16b, v31.16b, v24.16b
884
+ eor x11, x19, x13, ror #35
885
+ bic v31.16b, v2.16b, v27.16b
886
+ bic x13, x26, x24, ror #10
887
+ eor x28, x27, x24, ror #57
888
+ eor v0.16b, v31.16b, v30.16b
889
+ bic x27, x24, x9, ror #47
890
+ bic v31.16b, v3.16b, v2.16b
891
+ bic x19, x23, x3, ror #9
892
+ eor v1.16b, v31.16b, v27.16b
893
+ bic x4, x29, x14, ror #41
894
+ eor x24, x19, x29, ror #44
895
+ bic v31.16b, v4.16b, v3.16b
896
+ bic x29, x3, x29, ror #35
897
+ eor v2.16b, v31.16b, v2.16b
898
+ eor x13, x13, x9, ror #57
899
+ bic v31.16b, v30.16b, v4.16b
900
+ eor x19, x29, x14, ror #12
901
+ bic x29, x9, x0, ror #19
902
+ eor v3.16b, v31.16b, v3.16b
903
+ bic x14, x14, x8, ror #5
904
+ bic v31.16b, v27.16b, v30.16b
905
+ eor x9, x14, x23, ror #43
906
+ eor x14, x4, x8, ror #46
907
+ eor v4.16b, v31.16b, v4.16b
908
+ bic x23, x8, x23, ror #38
909
+ eor x8, x27, x0, ror #2
910
+ eor x4, x23, x3, ror #47
911
+ bic x3, x0, x30, ror #5
912
+ eor x23, x3, x26, ror #52
913
+ eor x3, x29, x30, ror #24
914
+ ldr x30, [sp, #0x10]
915
+ ld1r { v28.2d }, [x30], #8
916
+ str x30, [sp, #0x10]
917
+ eor v0.16b, v0.16b, v28.16b
918
+
919
+ Lkeccak_f1600_x4_v8a_scalar_hybrid_loop_end:
920
+ b.le Lkeccak_f1600_x4_v8a_scalar_hybrid_loop
921
+ ror x2, x2, #0x3d
922
+ ror x3, x3, #0x27
923
+ ror x4, x4, #0x36
924
+ ror x5, x5, #0x19
925
+ ror x6, x6, #0x2b
926
+ ror x7, x7, #0x13
927
+ ror x8, x8, #0x38
928
+ ror x9, x9, #0x31
929
+ ror x10, x10, #0x17
930
+ ror x11, x11, #0x32
931
+ ror x12, x12, #0x3
932
+ ror x13, x13, #0x2e
933
+ ror x14, x14, #0x8
934
+ ror x15, x15, #0x3e
935
+ ror x17, x17, #0x24
936
+ ror x28, x28, #0x3f
937
+ ror x19, x19, #0x25
938
+ ror x20, x20, #0x2
939
+ ror x21, x21, #0x14
940
+ ror x22, x22, #0x2c
941
+ ror x23, x23, #0x3a
942
+ ror x24, x24, #0x1c
943
+ ror x25, x25, #0x9
944
+ ldr x30, [sp, #0x20]
945
+ cmp x30, #0x1
946
+ b.eq Lkeccak_f1600_x4_v8a_scalar_hybrid_done
947
+ mov x30, #0x1 // =1
948
+ str x30, [sp, #0x20]
949
+ ldr x0, [sp]
950
+ add x0, x0, #0x190
951
+ stp x1, x6, [x0]
952
+ stp x11, x16, [x0, #0x10]
953
+ stp x21, x2, [x0, #0x20]
954
+ stp x7, x12, [x0, #0x30]
955
+ stp x17, x22, [x0, #0x40]
956
+ stp x3, x8, [x0, #0x50]
957
+ stp x13, x28, [x0, #0x60]
958
+ stp x23, x4, [x0, #0x70]
959
+ stp x9, x14, [x0, #0x80]
960
+ stp x19, x24, [x0, #0x90]
961
+ stp x5, x10, [x0, #0xa0]
962
+ stp x15, x20, [x0, #0xb0]
963
+ str x25, [x0, #0xc0]
964
+ sub x0, x0, #0x190
965
+ add x0, x0, #0x258
966
+ ldp x1, x6, [x0]
967
+ ldp x11, x16, [x0, #0x10]
968
+ ldp x21, x2, [x0, #0x20]
969
+ ldp x7, x12, [x0, #0x30]
970
+ ldp x17, x22, [x0, #0x40]
971
+ ldp x3, x8, [x0, #0x50]
972
+ ldp x13, x28, [x0, #0x60]
973
+ ldp x23, x4, [x0, #0x70]
974
+ ldp x9, x14, [x0, #0x80]
975
+ ldp x19, x24, [x0, #0x90]
976
+ ldp x5, x10, [x0, #0xa0]
977
+ ldp x15, x20, [x0, #0xb0]
978
+ ldr x25, [x0, #0xc0]
979
+ sub x0, x0, #0x258
980
+ b Lkeccak_f1600_x4_v8a_scalar_hybrid_initial
981
+
982
+ Lkeccak_f1600_x4_v8a_scalar_hybrid_done:
983
+ ldr x0, [sp]
984
+ add x0, x0, #0x258
985
+ stp x1, x6, [x0]
986
+ stp x11, x16, [x0, #0x10]
987
+ stp x21, x2, [x0, #0x20]
988
+ stp x7, x12, [x0, #0x30]
989
+ stp x17, x22, [x0, #0x40]
990
+ stp x3, x8, [x0, #0x50]
991
+ stp x13, x28, [x0, #0x60]
992
+ stp x23, x4, [x0, #0x70]
993
+ stp x9, x14, [x0, #0x80]
994
+ stp x19, x24, [x0, #0x90]
995
+ stp x5, x10, [x0, #0xa0]
996
+ stp x15, x20, [x0, #0xb0]
997
+ str x25, [x0, #0xc0]
998
+ sub x0, x0, #0x258
999
+ add x4, x0, #0xc8
1000
+ trn1 v25.2d, v0.2d, v1.2d
1001
+ trn1 v26.2d, v2.2d, v3.2d
1002
+ stp q25, q26, [x0], #0x20
1003
+ trn2 v27.2d, v0.2d, v1.2d
1004
+ trn2 v28.2d, v2.2d, v3.2d
1005
+ st1 { v27.2d, v28.2d }, [x4], #32
1006
+ trn1 v25.2d, v4.2d, v5.2d
1007
+ trn1 v26.2d, v6.2d, v7.2d
1008
+ stp q25, q26, [x0], #0x20
1009
+ trn2 v27.2d, v4.2d, v5.2d
1010
+ trn2 v28.2d, v6.2d, v7.2d
1011
+ st1 { v27.2d, v28.2d }, [x4], #32
1012
+ trn1 v25.2d, v8.2d, v9.2d
1013
+ trn1 v26.2d, v10.2d, v11.2d
1014
+ stp q25, q26, [x0], #0x20
1015
+ trn2 v27.2d, v8.2d, v9.2d
1016
+ trn2 v28.2d, v10.2d, v11.2d
1017
+ st1 { v27.2d, v28.2d }, [x4], #32
1018
+ trn1 v25.2d, v12.2d, v13.2d
1019
+ trn1 v26.2d, v14.2d, v15.2d
1020
+ stp q25, q26, [x0], #0x20
1021
+ trn2 v27.2d, v12.2d, v13.2d
1022
+ trn2 v28.2d, v14.2d, v15.2d
1023
+ st1 { v27.2d, v28.2d }, [x4], #32
1024
+ trn1 v25.2d, v16.2d, v17.2d
1025
+ trn1 v26.2d, v18.2d, v19.2d
1026
+ stp q25, q26, [x0], #0x20
1027
+ trn2 v27.2d, v16.2d, v17.2d
1028
+ trn2 v28.2d, v18.2d, v19.2d
1029
+ st1 { v27.2d, v28.2d }, [x4], #32
1030
+ trn1 v25.2d, v20.2d, v21.2d
1031
+ trn1 v26.2d, v22.2d, v23.2d
1032
+ stp q25, q26, [x0], #0x20
1033
+ trn2 v27.2d, v20.2d, v21.2d
1034
+ trn2 v28.2d, v22.2d, v23.2d
1035
+ st1 { v27.2d, v28.2d }, [x4], #32
1036
+ str d24, [x0]
1037
+ trn2 v25.2d, v24.2d, v24.2d
1038
+ str d25, [x4]
1039
+ ldp d8, d9, [sp, #0x90]
1040
+ .cfi_restore d8
1041
+ .cfi_restore d9
1042
+ ldp d10, d11, [sp, #0xa0]
1043
+ .cfi_restore d10
1044
+ .cfi_restore d11
1045
+ ldp d12, d13, [sp, #0xb0]
1046
+ .cfi_restore d12
1047
+ .cfi_restore d13
1048
+ ldp d14, d15, [sp, #0xc0]
1049
+ .cfi_restore d14
1050
+ .cfi_restore d15
1051
+ ldp x19, x20, [sp, #0x30]
1052
+ .cfi_restore x19
1053
+ .cfi_restore x20
1054
+ ldp x21, x22, [sp, #0x40]
1055
+ .cfi_restore x21
1056
+ .cfi_restore x22
1057
+ ldp x23, x24, [sp, #0x50]
1058
+ .cfi_restore x23
1059
+ .cfi_restore x24
1060
+ ldp x25, x26, [sp, #0x60]
1061
+ .cfi_restore x25
1062
+ .cfi_restore x26
1063
+ ldp x27, x28, [sp, #0x70]
1064
+ .cfi_restore x27
1065
+ .cfi_restore x28
1066
+ ldp x29, x30, [sp, #0x80]
1067
+ .cfi_restore x29
1068
+ .cfi_restore x30
1069
+ add sp, sp, #0xe0
1070
+ .cfi_adjust_cfa_offset -0xe0
1071
+ ret
1072
+ .cfi_endproc
1073
+
1074
+ MLD_ASM_FN_SIZE(keccak_f1600_x4_v8a_scalar_hybrid_asm)
1075
+
1076
+ #endif /* MLD_FIPS202_AARCH64_NEED_X4_V8A_SCALAR_HYBRID && \
1077
+ !MLD_CONFIG_MULTILEVEL_NO_SHARED */