pq_crypto 0.6.1 → 0.6.2

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