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