sleeping_kangaroo12 0.0.1

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 (284) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +127 -0
  3. data/ext/Rakefile +73 -0
  4. data/ext/binding/sleeping_kangaroo12.c +39 -0
  5. data/ext/config/xkcp.build +17 -0
  6. data/ext/xkcp/LICENSE +1 -0
  7. data/ext/xkcp/Makefile +15 -0
  8. data/ext/xkcp/Makefile.build +200 -0
  9. data/ext/xkcp/README.markdown +296 -0
  10. data/ext/xkcp/lib/HighLevel.build +143 -0
  11. data/ext/xkcp/lib/LowLevel.build +757 -0
  12. data/ext/xkcp/lib/common/align.h +33 -0
  13. data/ext/xkcp/lib/common/brg_endian.h +143 -0
  14. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.c +301 -0
  15. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.h +97 -0
  16. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.c +81 -0
  17. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.h +125 -0
  18. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.c +48 -0
  19. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.h +79 -0
  20. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.c +81 -0
  21. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.h +73 -0
  22. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.inc +195 -0
  23. data/ext/xkcp/lib/high/Keccak/KeccakSponge.c +111 -0
  24. data/ext/xkcp/lib/high/Keccak/KeccakSponge.h +76 -0
  25. data/ext/xkcp/lib/high/Keccak/KeccakSponge.inc +314 -0
  26. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.c +61 -0
  27. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.h +67 -0
  28. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.inc +128 -0
  29. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.c +93 -0
  30. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.h +599 -0
  31. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.inc +573 -0
  32. data/ext/xkcp/lib/high/Ketje/Ketjev2.c +87 -0
  33. data/ext/xkcp/lib/high/Ketje/Ketjev2.h +88 -0
  34. data/ext/xkcp/lib/high/Ketje/Ketjev2.inc +274 -0
  35. data/ext/xkcp/lib/high/Keyak/Keyakv2.c +132 -0
  36. data/ext/xkcp/lib/high/Keyak/Keyakv2.h +217 -0
  37. data/ext/xkcp/lib/high/Keyak/Keyakv2.inc +81 -0
  38. data/ext/xkcp/lib/high/Keyak/Motorist.inc +953 -0
  39. data/ext/xkcp/lib/high/Kravatte/Kravatte.c +533 -0
  40. data/ext/xkcp/lib/high/Kravatte/Kravatte.h +115 -0
  41. data/ext/xkcp/lib/high/Kravatte/KravatteModes.c +557 -0
  42. data/ext/xkcp/lib/high/Kravatte/KravatteModes.h +247 -0
  43. data/ext/xkcp/lib/high/Xoodyak/Cyclist.h +66 -0
  44. data/ext/xkcp/lib/high/Xoodyak/Cyclist.inc +336 -0
  45. data/ext/xkcp/lib/high/Xoodyak/Xoodyak-parameters.h +26 -0
  46. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.c +55 -0
  47. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.h +35 -0
  48. data/ext/xkcp/lib/high/Xoofff/Xoofff.c +634 -0
  49. data/ext/xkcp/lib/high/Xoofff/Xoofff.h +147 -0
  50. data/ext/xkcp/lib/high/Xoofff/XoofffModes.c +483 -0
  51. data/ext/xkcp/lib/high/Xoofff/XoofffModes.h +241 -0
  52. data/ext/xkcp/lib/high/common/Phases.h +25 -0
  53. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-SnP.h +41 -0
  54. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-armcc.s +1666 -0
  55. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-gcc.s +1655 -0
  56. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-armcc.s +1268 -0
  57. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-gcc.s +1264 -0
  58. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-armcc.s +1178 -0
  59. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +1175 -0
  60. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-armcc.s +1338 -0
  61. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-gcc.s +1336 -0
  62. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-armcc.s +1343 -0
  63. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +1339 -0
  64. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-SnP.h +42 -0
  65. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-armcc.s +823 -0
  66. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-gcc.s +831 -0
  67. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-SnP.h +31 -0
  68. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-armv8a-neon.s +540 -0
  69. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-SnP.h +42 -0
  70. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-compact.s +733 -0
  71. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-fast.s +1121 -0
  72. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-AVX2.s +1100 -0
  73. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h +52 -0
  74. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-AVX512.c +623 -0
  75. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-SnP.h +47 -0
  76. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u12/KeccakP-1600-AVX512-config.h +6 -0
  77. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u6/KeccakP-1600-AVX512-config.h +6 -0
  78. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/ua/KeccakP-1600-AVX512-config.h +6 -0
  79. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-AVX512.s +1031 -0
  80. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-SnP.h +53 -0
  81. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-SnP.h +44 -0
  82. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-XOP.c +476 -0
  83. data/ext/xkcp/lib/low/KeccakP-1600/XOP/u6/KeccakP-1600-XOP-config.h +6 -0
  84. data/ext/xkcp/lib/low/KeccakP-1600/XOP/ua/KeccakP-1600-XOP-config.h +6 -0
  85. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros +748 -0
  86. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros +305 -0
  87. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-SnP.h +40 -0
  88. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-compact64.c +420 -0
  89. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-SnP.h +43 -0
  90. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-inplace32BI.c +1163 -0
  91. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-SnP.h +54 -0
  92. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c +565 -0
  93. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcu6/KeccakP-1600-opt64-config.h +7 -0
  94. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua/KeccakP-1600-opt64-config.h +7 -0
  95. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua-shld/KeccakP-1600-opt64-config.h +8 -0
  96. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/u6/KeccakP-1600-opt64-config.h +6 -0
  97. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h +6 -0
  98. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-SnP.h +44 -0
  99. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference.h +23 -0
  100. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference32BI.c +625 -0
  101. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-SnP.h +44 -0
  102. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.c +440 -0
  103. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.h +23 -0
  104. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-SnP.h +42 -0
  105. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas.s +1196 -0
  106. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas_Apple.s +1124 -0
  107. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-shld-gas.s +1196 -0
  108. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-armcc.s +1392 -0
  109. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +1394 -0
  110. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-times2-SnP.h +42 -0
  111. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u12/SIMD512-2-config.h +7 -0
  112. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u4/SIMD512-2-config.h +7 -0
  113. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512ufull/SIMD512-2-config.h +7 -0
  114. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SIMD512.c +850 -0
  115. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SnP.h +51 -0
  116. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c +957 -0
  117. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SnP.h +49 -0
  118. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-u2/SIMD128-config.h +8 -0
  119. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-ua/SIMD128-config.h +8 -0
  120. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-u2/SIMD128-config.h +9 -0
  121. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-ua/SIMD128-config.h +9 -0
  122. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-SnP.h +45 -0
  123. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-on1.c +37 -0
  124. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c +1321 -0
  125. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h +55 -0
  126. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u12/SIMD256-config.h +7 -0
  127. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u6/SIMD256-config.h +7 -0
  128. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h +7 -0
  129. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u12/SIMD512-4-config.h +7 -0
  130. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u4/SIMD512-4-config.h +7 -0
  131. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512ufull/SIMD512-4-config.h +7 -0
  132. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SIMD512.c +881 -0
  133. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SnP.h +51 -0
  134. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h +45 -0
  135. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c +37 -0
  136. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-SnP.h +45 -0
  137. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-on2.c +38 -0
  138. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SIMD512.c +1615 -0
  139. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SnP.h +57 -0
  140. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u12/SIMD512-config.h +7 -0
  141. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u4/SIMD512-config.h +7 -0
  142. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/ua/SIMD512-config.h +7 -0
  143. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-SnP.h +45 -0
  144. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-on1.c +37 -0
  145. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-SnP.h +45 -0
  146. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-on2.c +38 -0
  147. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-SnP.h +45 -0
  148. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-on4.c +38 -0
  149. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-SnP.h +41 -0
  150. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-armcc.s +442 -0
  151. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-gcc.s +446 -0
  152. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-armcc.s +419 -0
  153. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-gcc.s +427 -0
  154. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-SnP.h +41 -0
  155. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-avr8-fast.s +647 -0
  156. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-SnP.h +39 -0
  157. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-compact.c +190 -0
  158. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-SnP.h +43 -0
  159. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.c +412 -0
  160. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.h +23 -0
  161. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-SnP.h +41 -0
  162. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-armcc.s +454 -0
  163. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-gcc.s +458 -0
  164. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-armcc.s +455 -0
  165. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-gcc.s +458 -0
  166. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-SnP.h +41 -0
  167. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-avr8-fast.s +728 -0
  168. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-SnP.h +43 -0
  169. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.c +414 -0
  170. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.h +23 -0
  171. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-SnP.h +42 -0
  172. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-armcc.s +527 -0
  173. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-gcc.s +533 -0
  174. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-armcc.s +528 -0
  175. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-gcc.s +534 -0
  176. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-armcc.s +521 -0
  177. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-gcc.s +527 -0
  178. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-armcc.s +517 -0
  179. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-gcc.s +523 -0
  180. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-armcc.s +550 -0
  181. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-gcc.s +556 -0
  182. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-SnP.h +32 -0
  183. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-armv8a-neon.s +432 -0
  184. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-SnP.h +42 -0
  185. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-avr8-fast.s +929 -0
  186. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-SnP.h +40 -0
  187. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-compact.c +244 -0
  188. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-SnP.h +46 -0
  189. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32-bis.macros +184 -0
  190. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.c +454 -0
  191. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.macros +459 -0
  192. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling-bis.macros +83 -0
  193. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling.macros +88 -0
  194. data/ext/xkcp/lib/low/KeccakP-800/plain/lcu2/KeccakP-800-opt32-config.h +7 -0
  195. data/ext/xkcp/lib/low/KeccakP-800/plain/lcua/KeccakP-800-opt32-config.h +7 -0
  196. data/ext/xkcp/lib/low/KeccakP-800/plain/u2/KeccakP-800-opt32-config.h +7 -0
  197. data/ext/xkcp/lib/low/KeccakP-800/plain/ua/KeccakP-800-opt32-config.h +7 -0
  198. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-SnP.h +44 -0
  199. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.c +437 -0
  200. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.h +23 -0
  201. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/Ket.h +57 -0
  202. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-armcc.s +475 -0
  203. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-gcc.s +480 -0
  204. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-armcc.s +590 -0
  205. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-gcc.s +590 -0
  206. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.c +126 -0
  207. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.h +68 -0
  208. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.inc +174 -0
  209. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.c +80 -0
  210. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.h +68 -0
  211. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.inc +142 -0
  212. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-SnP.h +55 -0
  213. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-armcc.s +1086 -0
  214. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-gcc.s +1092 -0
  215. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-armcc.s +721 -0
  216. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-gcc.s +726 -0
  217. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-armcc.s +723 -0
  218. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-gcc.s +729 -0
  219. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-armcc.s +1164 -0
  220. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-gcc.s +1165 -0
  221. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-armcc.s +562 -0
  222. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-gcc.s +563 -0
  223. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-armcc.s +563 -0
  224. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-gcc.s +565 -0
  225. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-SnP.h +55 -0
  226. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-armcc.s +476 -0
  227. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-gcc.s +485 -0
  228. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-armcc.s +362 -0
  229. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-gcc.s +367 -0
  230. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-SnP.h +43 -0
  231. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-avr8-u1.s +1341 -0
  232. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SIMD512.c +581 -0
  233. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SnP.h +58 -0
  234. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodyak-full-block-SIMD512.c +332 -0
  235. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SIMD128.c +329 -0
  236. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SnP.h +53 -0
  237. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodyak-full-block-SIMD128.c +355 -0
  238. data/ext/xkcp/lib/low/Xoodoo/Xoodoo.h +79 -0
  239. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-SnP.h +56 -0
  240. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-optimized.c +399 -0
  241. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodyak-full-blocks.c +127 -0
  242. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-SnP.h +43 -0
  243. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-reference.c +253 -0
  244. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SIMD512.c +1044 -0
  245. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SnP.h +49 -0
  246. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-SnP.h +45 -0
  247. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-on1.c +37 -0
  248. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-ARMv7A.s +1587 -0
  249. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-SnP.h +48 -0
  250. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SIMD512.c +1202 -0
  251. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SnP.h +48 -0
  252. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SIMD128.c +484 -0
  253. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SnP.h +44 -0
  254. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-SnP.h +45 -0
  255. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-on1.c +37 -0
  256. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SIMD256.c +939 -0
  257. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SnP.h +49 -0
  258. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SIMD512.c +1216 -0
  259. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SnP.h +48 -0
  260. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-SnP.h +45 -0
  261. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-on1.c +37 -0
  262. data/ext/xkcp/lib/low/common/PlSnP-Fallback.inc +290 -0
  263. data/ext/xkcp/lib/low/common/SnP-Relaned.h +141 -0
  264. data/ext/xkcp/support/Build/ExpandProducts.xsl +79 -0
  265. data/ext/xkcp/support/Build/ToGlobalMakefile.xsl +206 -0
  266. data/ext/xkcp/support/Build/ToOneTarget.xsl +89 -0
  267. data/ext/xkcp/support/Build/ToTargetConfigFile.xsl +37 -0
  268. data/ext/xkcp/support/Build/ToTargetMakefile.xsl +298 -0
  269. data/ext/xkcp/support/Build/ToVCXProj.xsl +198 -0
  270. data/ext/xkcp/support/Kernel-PMU/Kernel-pmu.md +133 -0
  271. data/ext/xkcp/support/Kernel-PMU/Makefile +8 -0
  272. data/ext/xkcp/support/Kernel-PMU/enable_arm_pmu.c +129 -0
  273. data/ext/xkcp/support/Kernel-PMU/load-module +1 -0
  274. data/ext/xkcp/util/KeccakSum/KeccakSum.c +394 -0
  275. data/ext/xkcp/util/KeccakSum/base64.c +86 -0
  276. data/ext/xkcp/util/KeccakSum/base64.h +12 -0
  277. data/lib/sleeping_kangaroo12/binding.rb +15 -0
  278. data/lib/sleeping_kangaroo12/build/loader.rb +40 -0
  279. data/lib/sleeping_kangaroo12/build/platform.rb +37 -0
  280. data/lib/sleeping_kangaroo12/build.rb +4 -0
  281. data/lib/sleeping_kangaroo12/digest.rb +103 -0
  282. data/lib/sleeping_kangaroo12/version.rb +5 -0
  283. data/lib/sleeping_kangaroo12.rb +7 -0
  284. metadata +372 -0
@@ -0,0 +1,1264 @@
1
+ @
2
+ @ The eXtended Keccak Code Package (XKCP)
3
+ @ https://github.com/XKCP/XKCP
4
+ @
5
+ @ The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
6
+ @
7
+ @ Implementation by Ronny Van Keer, hereby denoted as "the implementer".
8
+ @
9
+ @ For more information, feedback or questions, please refer to the Keccak Team website:
10
+ @ https://keccak.team/
11
+ @
12
+ @ To the extent possible under law, the implementer has waived all copyright
13
+ @ and related or neighboring rights to the source code in this file.
14
+ @ http://creativecommons.org/publicdomain/zero/1.0/
15
+ @
16
+ @ ---
17
+ @
18
+ @ This file implements Keccak-p[1600] in a SnP-compatible way.
19
+ @ Please refer to SnP-documentation.h for more details.
20
+ @
21
+ @ This implementation comes with KeccakP-1600-SnP.h in the same folder.
22
+ @ Please refer to LowLevel.build for the exact list of other files it must be combined with.
23
+ @
24
+
25
+ @ WARNING: This implementation assumes a little endian CPU with ARMv7A architecture (e.g., Cortex-A8) and the GCC compiler.
26
+
27
+ @ INFO: Tested on a Cortex-A8 (BeagleBone Black)
28
+
29
+
30
+ .text
31
+
32
+ @ Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
33
+ .macro toBitInterleaving x0,x1,s0,s1,t,m55,m33,m0F,mFF, over
34
+
35
+ and \t,\x0,\m55
36
+ orr \t,\t,\t, LSR #1
37
+ and \t,\t,\m33
38
+ orr \t,\t,\t, LSR #2
39
+ and \t,\t,\m0F
40
+ orr \t,\t,\t, LSR #4
41
+ and \t,\t,\mFF
42
+ bfi \t,\t,#8, #8
43
+ .if \over != 0
44
+ lsr \s0,\t, #8
45
+ .else
46
+ eor \s0,\s0,\t, LSR #8
47
+ .endif
48
+
49
+ and \t,\x1,\m55
50
+ orr \t,\t,\t, LSR #1
51
+ and \t,\t,\m33
52
+ orr \t,\t,\t, LSR #2
53
+ and \t,\t,\m0F
54
+ orr \t,\t,\t, LSR #4
55
+ and \t,\t,\mFF
56
+ orr \t,\t,\t, LSR #8
57
+ eor \s0,\s0,\t, LSL #16
58
+
59
+ and \t,\x0,\m55, LSL #1
60
+ orr \t,\t,\t, LSL #1
61
+ and \t,\t,\m33, LSL #2
62
+ orr \t,\t,\t, LSL #2
63
+ and \t,\t,\m0F, LSL #4
64
+ orr \t,\t,\t, LSL #4
65
+ and \t,\t,\mFF, LSL #8
66
+ orr \t,\t,\t, LSL #8
67
+ .if \over != 0
68
+ lsr \s1,\t, #16
69
+ .else
70
+ eor \s1,\s1,\t, LSR #16
71
+ .endif
72
+
73
+ and \t,\x1,\m55, LSL #1
74
+ orr \t,\t,\t, LSL #1
75
+ and \t,\t,\m33, LSL #2
76
+ orr \t,\t,\t, LSL #2
77
+ and \t,\t,\m0F, LSL #4
78
+ orr \t,\t,\t, LSL #4
79
+ and \t,\t,\mFF, LSL #8
80
+ orr \t,\t,\t, LSL #8
81
+ bfc \t, #0, #16
82
+ eors \s1,\s1,\t
83
+ .endm
84
+
85
+ @ Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
86
+ .macro fromBitInterleaving x0, x1, t, mFF, mF0, m0C, m22
87
+
88
+ movs \t, \x0 @ t = x0@
89
+ bfi \x0, \x1, #16, #16 @ x0 = (x0 & 0x0000FFFF) | (x1 << 16)@
90
+ bfc \x1, #0, #16 @ x1 = (t >> 16) | (x1 & 0xFFFF0000)@
91
+ orr \x1, \x1, \t, LSR #16
92
+
93
+ eor \t, \x0, \x0, LSR #8 @ t = (x0 ^ (x0 >> 8)) & 0x0000FF00UL@ x0 = x0 ^ t ^ (t << 8)@
94
+ and \t, \mFF
95
+ eors \x0, \x0, \t
96
+ eor \x0, \x0, \t, LSL #8
97
+
98
+ eor \t, \x0, \x0, LSR #4 @ t = (x0 ^ (x0 >> 4)) & 0x00F000F0UL@ x0 = x0 ^ t ^ (t << 4)@
99
+ and \t, \mF0
100
+ eors \x0, \x0, \t
101
+ eor \x0, \x0, \t, LSL #4
102
+
103
+ eor \t, \x0, \x0, LSR #2 @ t = (x0 ^ (x0 >> 2)) & 0x0C0C0C0CUL@ x0 = x0 ^ t ^ (t << 2)@
104
+ and \t, \m0C
105
+ eors \x0, \x0, \t
106
+ eor \x0, \x0, \t, LSL #2
107
+
108
+ eor \t, \x0, \x0, LSR #1 @ t = (x0 ^ (x0 >> 1)) & 0x22222222UL@ x0 = x0 ^ t ^ (t << 1)@
109
+ and \t, \m22
110
+ eors \x0, \x0, \t
111
+ eor \x0, \x0, \t, LSL #1
112
+
113
+ eor \t, \x1, \x1, LSR #8 @ t = (x1 ^ (x1 >> 8)) & 0x0000FF00UL@ x1 = x1 ^ t ^ (t << 8)@
114
+ and \t, \mFF
115
+ eors \x1, \x1, \t
116
+ eor \x1, \x1, \t, LSL #8
117
+
118
+ eor \t, \x1, \x1, LSR #4 @ t = (x1 ^ (x1 >> 4)) & 0x00F000F0UL@ x1 = x1 ^ t ^ (t << 4)@
119
+ and \t, \mF0
120
+ eors \x1, \x1, \t
121
+ eor \x1, \x1, \t, LSL #4
122
+
123
+ eor \t, \x1, \x1, LSR #2 @ t = (x1 ^ (x1 >> 2)) & 0x0C0C0C0CUL@ x1 = x1 ^ t ^ (t << 2)@
124
+ and \t, \m0C
125
+ eors \x1, \x1, \t
126
+ eor \x1, \x1, \t, LSL #2
127
+
128
+ eor \t, \x1, \x1, LSR #1 @ t = (x1 ^ (x1 >> 1)) & 0x22222222UL@ x1 = x1 ^ t ^ (t << 1)@
129
+ and \t, \m22
130
+ eors \x1, \x1, \t
131
+ eor \x1, \x1, \t, LSL #1
132
+ .endm
133
+
134
+ @ --- offsets in state
135
+ .equ Aba0 , 0*4
136
+ .equ Aba1 , 1*4
137
+ .equ Abe0 , 2*4
138
+ .equ Abe1 , 3*4
139
+ .equ Abi0 , 4*4
140
+ .equ Abi1 , 5*4
141
+ .equ Abo0 , 6*4
142
+ .equ Abo1 , 7*4
143
+ .equ Abu0 , 8*4
144
+ .equ Abu1 , 9*4
145
+ .equ Aga0 , 10*4
146
+ .equ Aga1 , 11*4
147
+ .equ Age0 , 12*4
148
+ .equ Age1 , 13*4
149
+ .equ Agi0 , 14*4
150
+ .equ Agi1 , 15*4
151
+ .equ Ago0 , 16*4
152
+ .equ Ago1 , 17*4
153
+ .equ Agu0 , 18*4
154
+ .equ Agu1 , 19*4
155
+ .equ Aka0 , 20*4
156
+ .equ Aka1 , 21*4
157
+ .equ Ake0 , 22*4
158
+ .equ Ake1 , 23*4
159
+ .equ Aki0 , 24*4
160
+ .equ Aki1 , 25*4
161
+ .equ Ako0 , 26*4
162
+ .equ Ako1 , 27*4
163
+ .equ Aku0 , 28*4
164
+ .equ Aku1 , 29*4
165
+ .equ Ama0 , 30*4
166
+ .equ Ama1 , 31*4
167
+ .equ Ame0 , 32*4
168
+ .equ Ame1 , 33*4
169
+ .equ Ami0 , 34*4
170
+ .equ Ami1 , 35*4
171
+ .equ Amo0 , 36*4
172
+ .equ Amo1 , 37*4
173
+ .equ Amu0 , 38*4
174
+ .equ Amu1 , 39*4
175
+ .equ Asa0 , 40*4
176
+ .equ Asa1 , 41*4
177
+ .equ Ase0 , 42*4
178
+ .equ Ase1 , 43*4
179
+ .equ Asi0 , 44*4
180
+ .equ Asi1 , 45*4
181
+ .equ Aso0 , 46*4
182
+ .equ Aso1 , 47*4
183
+ .equ Asu0 , 48*4
184
+ .equ Asu1 , 49*4
185
+
186
+ @ --- offsets on stack
187
+ .equ mDa0 , 0*4
188
+ .equ mDa1 , 1*4
189
+ .equ mDo0 , 2*4
190
+ .equ mDo1 , 3*4
191
+ .equ mDi0 , 4*4
192
+ .equ mRC , 5*4
193
+ .equ mSize , 6*4
194
+
195
+
196
+ .macro xor5 result,b,g,k,m,s
197
+
198
+ ldr \result, [r0, #\b]
199
+ ldr r1, [r0, #\g]
200
+ eors \result, \result, r1
201
+ ldr r1, [r0, #\k]
202
+ eors \result, \result, r1
203
+ ldr r1, [r0, #\m]
204
+ eors \result, \result, r1
205
+ ldr r1, [r0, #\s]
206
+ eors \result, \result, r1
207
+ .endm
208
+
209
+ .macro xorrol result, aa, bb
210
+
211
+ eor \result, \aa, \bb, ROR #31
212
+ .endm
213
+
214
+ .macro xandnot resofs, aa, bb, cc
215
+
216
+ bic r1, \cc, \bb
217
+ eors r1, r1, \aa
218
+ str r1, [r0, #\resofs]
219
+ .endm
220
+
221
+ .macro KeccakThetaRhoPiChiIota aA1, aDax, aA2, aDex, rot2, aA3, aDix, rot3, aA4, aDox, rot4, aA5, aDux, rot5, offset, last
222
+ ldr r3, [r0, #\aA1]
223
+ ldr r4, [r0, #\aA2]
224
+ ldr r5, [r0, #\aA3]
225
+ ldr r6, [r0, #\aA4]
226
+ ldr r7, [r0, #\aA5]
227
+ eors r3, r3, \aDax
228
+ eors r5, r5, \aDix
229
+ eors r4, r4, \aDex
230
+ eors r6, r6, \aDox
231
+ eors r7, r7, \aDux
232
+ rors r4, #32-\rot2
233
+ rors r5, #32-\rot3
234
+ rors r6, #32-\rot4
235
+ rors r7, #32-\rot5
236
+ xandnot \aA2, r4, r5, r6
237
+ xandnot \aA3, r5, r6, r7
238
+ xandnot \aA4, r6, r7, r3
239
+ xandnot \aA5, r7, r3, r4
240
+ ldr r1, [sp, #mRC]
241
+ bics r5, r5, r4
242
+ ldr r4, [r1, #\offset]
243
+ eors r3, r3, r5
244
+ eors r3, r3, r4
245
+ .if \last == 1
246
+ ldr r4, [r1, #32]!
247
+ str r1, [sp, #mRC]
248
+ cmp r4, #0xFF
249
+ .endif
250
+ str r3, [r0, #\aA1]
251
+ .endm
252
+
253
+ .macro KeccakThetaRhoPiChi aB1, aA1, aDax, rot1, aB2, aA2, aDex, rot2, aB3, aA3, aDix, rot3, aB4, aA4, aDox, rot4, aB5, aA5, aDux, rot5
254
+ ldr \aB1, [r0, #\aA1]
255
+ ldr \aB2, [r0, #\aA2]
256
+ ldr \aB3, [r0, #\aA3]
257
+ ldr \aB4, [r0, #\aA4]
258
+ ldr \aB5, [r0, #\aA5]
259
+ eors \aB1, \aB1, \aDax
260
+ eors \aB3, \aB3, \aDix
261
+ eors \aB2, \aB2, \aDex
262
+ eors \aB4, \aB4, \aDox
263
+ eors \aB5, \aB5, \aDux
264
+ rors \aB1, #32-\rot1
265
+ .if \rot2 > 0
266
+ rors \aB2, #32-\rot2
267
+ .endif
268
+ rors \aB3, #32-\rot3
269
+ rors \aB4, #32-\rot4
270
+ rors \aB5, #32-\rot5
271
+ xandnot \aA1, r3, r4, r5
272
+ xandnot \aA2, r4, r5, r6
273
+ xandnot \aA3, r5, r6, r7
274
+ xandnot \aA4, r6, r7, r3
275
+ xandnot \aA5, r7, r3, r4
276
+ .endm
277
+
278
+ .macro KeccakRound0
279
+
280
+ xor5 r3, Abu0, Agu0, Aku0, Amu0, Asu0
281
+ xor5 r7, Abe1, Age1, Ake1, Ame1, Ase1
282
+ xorrol r6, r3, r7
283
+ str r6, [sp, #mDa0]
284
+ xor5 r6, Abu1, Agu1, Aku1, Amu1, Asu1
285
+ xor5 lr, Abe0, Age0, Ake0, Ame0, Ase0
286
+ eors r8, r6, lr
287
+ str r8, [sp, #mDa1]
288
+
289
+ xor5 r5, Abi0, Agi0, Aki0, Ami0, Asi0
290
+ xorrol r9, r5, r6
291
+ str r9, [sp, #mDo0]
292
+ xor5 r4, Abi1, Agi1, Aki1, Ami1, Asi1
293
+ eors r3, r3, r4
294
+ str r3, [sp, #mDo1]
295
+
296
+ xor5 r3, Aba0, Aga0, Aka0, Ama0, Asa0
297
+ xorrol r10, r3, r4
298
+ xor5 r6, Aba1, Aga1, Aka1, Ama1, Asa1
299
+ eors r11, r6, r5
300
+
301
+ xor5 r4, Abo1, Ago1, Ako1, Amo1, Aso1
302
+ xorrol r5, lr, r4
303
+ str r5, [sp, #mDi0]
304
+ xor5 r5, Abo0, Ago0, Ako0, Amo0, Aso0
305
+ eors r2, r7, r5
306
+
307
+ xorrol r12, r5, r6
308
+ eors lr, r4, r3
309
+
310
+ KeccakThetaRhoPiChi r5, Aka1, r8, 2, r6, Ame1, r11, 23, r7, Asi1, r2, 31, r3, Abo0, r9, 14, r4, Agu0, r12, 10
311
+ KeccakThetaRhoPiChi r7, Asa1, r8, 9, r3, Abe0, r10, 0, r4, Agi1, r2, 3, r5, Ako0, r9, 12, r6, Amu1, lr, 4
312
+ ldr r8, [sp, #mDa0]
313
+ KeccakThetaRhoPiChi r4, Aga0, r8, 18, r5, Ake0, r10, 5, r6, Ami1, r2, 8, r7, Aso0, r9, 28, r3, Abu1, lr, 14
314
+ KeccakThetaRhoPiChi r6, Ama0, r8, 20, r7, Ase1, r11, 1, r3, Abi1, r2, 31, r4, Ago0, r9, 27, r5, Aku0, r12, 19
315
+ ldr r9, [sp, #mDo1]
316
+ KeccakThetaRhoPiChiIota Aba0, r8, Age0, r10, 22, Aki1, r2, 22, Amo1, r9, 11, Asu0, r12, 7, 0, 0
317
+
318
+ ldr r2, [sp, #mDi0]
319
+ KeccakThetaRhoPiChi r5, Aka0, r8, 1, r6, Ame0, r10, 22, r7, Asi0, r2, 30, r3, Abo1, r9, 14, r4, Agu1, lr, 10
320
+ KeccakThetaRhoPiChi r7, Asa0, r8, 9, r3, Abe1, r11, 1, r4, Agi0, r2, 3, r5, Ako1, r9, 13, r6, Amu0, r12, 4
321
+ ldr r8, [sp, #mDa1]
322
+ KeccakThetaRhoPiChi r4, Aga1, r8, 18, r5, Ake1, r11, 5, r6, Ami0, r2, 7, r7, Aso1, r9, 28, r3, Abu0, r12, 13
323
+ KeccakThetaRhoPiChi r6, Ama1, r8, 21, r7, Ase0, r10, 1, r3, Abi0, r2, 31, r4, Ago1, r9, 28, r5, Aku1, lr, 20
324
+ ldr r9, [sp, #mDo0]
325
+ KeccakThetaRhoPiChiIota Aba1, r8, Age1, r11, 22, Aki0, r2, 21, Amo0, r9, 10, Asu1, lr, 7, 4, 0
326
+ .endm
327
+
328
+ .macro KeccakRound1
329
+
330
+ xor5 r3, Asu0, Agu0, Amu0, Abu1, Aku1
331
+ xor5 r7, Age1, Ame0, Abe0, Ake1, Ase1
332
+ xorrol r6, r3, r7
333
+ str r6, [sp, #mDa0]
334
+ xor5 r6, Asu1, Agu1, Amu1, Abu0, Aku0
335
+ xor5 lr, Age0, Ame1, Abe1, Ake0, Ase0
336
+ eors r8, r6, lr
337
+ str r8, [sp, #mDa1]
338
+
339
+ xor5 r5, Aki1, Asi1, Agi0, Ami1, Abi0
340
+ xorrol r9, r5, r6
341
+ str r9, [sp, #mDo0]
342
+ xor5 r4, Aki0, Asi0, Agi1, Ami0, Abi1
343
+ eors r3, r3, r4
344
+ str r3, [sp, #mDo1]
345
+
346
+ xor5 r3, Aba0, Aka1, Asa0, Aga0, Ama1
347
+ xorrol r10, r3, r4
348
+ xor5 r6, Aba1, Aka0, Asa1, Aga1, Ama0
349
+ eors r11, r6, r5
350
+
351
+ xor5 r4, Amo0, Abo1, Ako0, Aso1, Ago0
352
+ xorrol r5, lr, r4
353
+ str r5, [sp, #mDi0]
354
+ xor5 r5, Amo1, Abo0, Ako1, Aso0, Ago1
355
+ eors r2, r7, r5
356
+
357
+ xorrol r12, r5, r6
358
+ eors lr, r4, r3
359
+
360
+ KeccakThetaRhoPiChi r5, Asa1, r8, 2, r6, Ake1, r11, 23, r7, Abi1, r2, 31, r3, Amo1, r9, 14, r4, Agu0, r12, 10
361
+ KeccakThetaRhoPiChi r7, Ama0, r8, 9, r3, Age0, r10, 0, r4, Asi0, r2, 3, r5, Ako1, r9, 12, r6, Abu0, lr, 4
362
+ ldr r8, [sp, #mDa0]
363
+ KeccakThetaRhoPiChi r4, Aka1, r8, 18, r5, Abe1, r10, 5, r6, Ami0, r2, 8, r7, Ago1, r9, 28, r3, Asu1, lr, 14
364
+ KeccakThetaRhoPiChi r6, Aga0, r8, 20, r7, Ase1, r11, 1, r3, Aki0, r2, 31, r4, Abo0, r9, 27, r5, Amu0, r12, 19
365
+ ldr r9, [sp, #mDo1]
366
+ KeccakThetaRhoPiChiIota Aba0, r8, Ame1, r10, 22, Agi1, r2, 22, Aso1, r9, 11, Aku1, r12, 7, 8, 0
367
+
368
+ ldr r2, [sp, #mDi0]
369
+ KeccakThetaRhoPiChi r5, Asa0, r8, 1, r6, Ake0, r10, 22, r7, Abi0, r2, 30, r3, Amo0, r9, 14, r4, Agu1, lr, 10
370
+ KeccakThetaRhoPiChi r7, Ama1, r8, 9, r3, Age1, r11, 1, r4, Asi1, r2, 3, r5, Ako0, r9, 13, r6, Abu1, r12, 4
371
+ ldr r8, [sp, #mDa1]
372
+ KeccakThetaRhoPiChi r4, Aka0, r8, 18, r5, Abe0, r11, 5, r6, Ami1, r2, 7, r7, Ago0, r9, 28, r3, Asu0, r12, 13
373
+ KeccakThetaRhoPiChi r6, Aga1, r8, 21, r7, Ase0, r10, 1, r3, Aki1, r2, 31, r4, Abo1, r9, 28, r5, Amu1, lr, 20
374
+ ldr r9, [sp, #mDo0]
375
+ KeccakThetaRhoPiChiIota Aba1, r8, Ame0, r11, 22, Agi0, r2, 21, Aso0, r9, 10, Aku0, lr, 7, 12, 0
376
+ .endm
377
+
378
+ .macro KeccakRound2
379
+
380
+ xor5 r3, Aku1, Agu0, Abu1, Asu1, Amu1
381
+ xor5 r7, Ame0, Ake0, Age0, Abe0, Ase1
382
+ xorrol r6, r3, r7
383
+ str r6, [sp, #mDa0]
384
+ xor5 r6, Aku0, Agu1, Abu0, Asu0, Amu0
385
+ xor5 lr, Ame1, Ake1, Age1, Abe1, Ase0
386
+ eors r8, r6, lr
387
+ str r8, [sp, #mDa1]
388
+
389
+ xor5 r5, Agi1, Abi1, Asi1, Ami0, Aki1
390
+ xorrol r9, r5, r6
391
+ str r9, [sp, #mDo0]
392
+ xor5 r4, Agi0, Abi0, Asi0, Ami1, Aki0
393
+ eors r3, r3, r4
394
+ str r3, [sp, #mDo1]
395
+
396
+ xor5 r3, Aba0, Asa1, Ama1, Aka1, Aga1
397
+ xorrol r10, r3, r4
398
+ xor5 r6, Aba1, Asa0, Ama0, Aka0, Aga0
399
+ eors r11, r6, r5
400
+
401
+ xor5 r4, Aso0, Amo0, Ako1, Ago0, Abo0
402
+ xorrol r5, lr, r4
403
+ str r5, [sp, #mDi0]
404
+ xor5 r5, Aso1, Amo1, Ako0, Ago1, Abo1
405
+ eors r2, r7, r5
406
+
407
+ xorrol r12, r5, r6
408
+ eors lr, r4, r3
409
+
410
+ KeccakThetaRhoPiChi r5, Ama0, r8, 2, r6, Abe0, r11, 23, r7, Aki0, r2, 31, r3, Aso1, r9, 14, r4, Agu0, r12, 10
411
+ KeccakThetaRhoPiChi r7, Aga0, r8, 9, r3, Ame1, r10, 0, r4, Abi0, r2, 3, r5, Ako0, r9, 12, r6, Asu0, lr, 4
412
+ ldr r8, [sp, #mDa0]
413
+ KeccakThetaRhoPiChi r4, Asa1, r8, 18, r5, Age1, r10, 5, r6, Ami1, r2, 8, r7, Abo1, r9, 28, r3, Aku0, lr, 14
414
+ KeccakThetaRhoPiChi r6, Aka1, r8, 20, r7, Ase1, r11, 1, r3, Agi0, r2, 31, r4, Amo1, r9, 27, r5, Abu1, r12, 19
415
+ ldr r9, [sp, #mDo1]
416
+ KeccakThetaRhoPiChiIota Aba0, r8, Ake1, r10, 22, Asi0, r2, 22, Ago0, r9, 11, Amu1, r12, 7, 16, 0
417
+
418
+ ldr r2, [sp, #mDi0]
419
+ KeccakThetaRhoPiChi r5, Ama1, r8, 1, r6, Abe1, r10, 22, r7, Aki1, r2, 30, r3, Aso0, r9, 14, r4, Agu1, lr, 10
420
+ KeccakThetaRhoPiChi r7, Aga1, r8, 9, r3, Ame0, r11, 1, r4, Abi1, r2, 3, r5, Ako1, r9, 13, r6, Asu1, r12, 4
421
+ ldr r8, [sp, #mDa1]
422
+ KeccakThetaRhoPiChi r4, Asa0, r8, 18, r5, Age0, r11, 5, r6, Ami0, r2, 7, r7, Abo0, r9, 28, r3, Aku1, r12, 13
423
+ KeccakThetaRhoPiChi r6, Aka0, r8, 21, r7, Ase0, r10, 1, r3, Agi1, r2, 31, r4, Amo0, r9, 28, r5, Abu0, lr, 20
424
+ ldr r9, [sp, #mDo0]
425
+ KeccakThetaRhoPiChiIota Aba1, r8, Ake0, r11, 22, Asi1, r2, 21, Ago1, r9, 10, Amu0, lr, 7, 20, 0
426
+ .endm
427
+
428
+ .macro KeccakRound3
429
+
430
+ xor5 r3, Amu1, Agu0, Asu1, Aku0, Abu0
431
+ xor5 r7, Ake0, Abe1, Ame1, Age0, Ase1
432
+ xorrol r6, r3, r7
433
+ str r6, [sp, #mDa0]
434
+ xor5 r6, Amu0, Agu1, Asu0, Aku1, Abu1
435
+ xor5 lr, Ake1, Abe0, Ame0, Age1, Ase0
436
+ eors r8, r6, lr
437
+ str r8, [sp, #mDa1]
438
+
439
+ xor5 r5, Asi0, Aki0, Abi1, Ami1, Agi1
440
+ xorrol r9, r5, r6
441
+ str r9, [sp, #mDo0]
442
+ xor5 r4, Asi1, Aki1, Abi0, Ami0, Agi0
443
+ eors r3, r3, r4
444
+ str r3, [sp, #mDo1]
445
+
446
+ xor5 r3, Aba0, Ama0, Aga1, Asa1, Aka0
447
+ xorrol r10, r3, r4
448
+ xor5 r6, Aba1, Ama1, Aga0, Asa0, Aka1
449
+ eors r11, r6, r5
450
+
451
+ xor5 r4, Ago1, Aso0, Ako0, Abo0, Amo1
452
+ xorrol r5, lr, r4
453
+ str r5, [sp, #mDi0]
454
+ xor5 r5, Ago0, Aso1, Ako1, Abo1, Amo0
455
+ eors r2, r7, r5
456
+
457
+ xorrol r12, r5, r6
458
+ eors lr, r4, r3
459
+
460
+ KeccakThetaRhoPiChi r5, Aga0, r8, 2, r6, Age0, r11, 23, r7, Agi0, r2, 31, r3, Ago0, r9, 14, r4, Agu0, r12, 10
461
+ KeccakThetaRhoPiChi r7, Aka1, r8, 9, r3, Ake1, r10, 0, r4, Aki1, r2, 3, r5, Ako1, r9, 12, r6, Aku1, lr, 4
462
+ ldr r8, [sp, #mDa0]
463
+ KeccakThetaRhoPiChi r4, Ama0, r8, 18, r5, Ame0, r10, 5, r6, Ami0, r2, 8, r7, Amo0, r9, 28, r3, Amu0, lr, 14
464
+ KeccakThetaRhoPiChi r6, Asa1, r8, 20, r7, Ase1, r11, 1, r3, Asi1, r2, 31, r4, Aso1, r9, 27, r5, Asu1, r12, 19
465
+ ldr r9, [sp, #mDo1]
466
+ KeccakThetaRhoPiChiIota Aba0, r8, Abe0, r10, 22, Abi0, r2, 22, Abo0, r9, 11, Abu0, r12, 7, 24, 0
467
+
468
+ ldr r2, [sp, #mDi0]
469
+ KeccakThetaRhoPiChi r5, Aga1, r8, 1, r6, Age1, r10, 22, r7, Agi1, r2, 30, r3, Ago1, r9, 14, r4, Agu1, lr, 10
470
+ KeccakThetaRhoPiChi r7, Aka0, r8, 9, r3, Ake0, r11, 1, r4, Aki0, r2, 3, r5, Ako0, r9, 13, r6, Aku0, r12, 4
471
+ ldr r8, [sp, #mDa1]
472
+ KeccakThetaRhoPiChi r4, Ama1, r8, 18, r5, Ame1, r11, 5, r6, Ami1, r2, 7, r7, Amo1, r9, 28, r3, Amu1, r12, 13
473
+ KeccakThetaRhoPiChi r6, Asa0, r8, 21, r7, Ase0, r10, 1, r3, Asi0, r2, 31, r4, Aso0, r9, 28, r5, Asu0, lr, 20
474
+ ldr r9, [sp, #mDo0]
475
+ KeccakThetaRhoPiChiIota Aba1, r8, Abe1, r11, 22, Abi1, r2, 21, Abo1, r9, 10, Abu1, lr, 7, 28, 1
476
+ .endm
477
+
478
+ @----------------------------------------------------------------------------
479
+ @
480
+ @ void KeccakP1600_StaticInitialize( void )
481
+ @
482
+ .align 8
483
+ .global KeccakP1600_StaticInitialize
484
+ .type KeccakP1600_StaticInitialize, %function;
485
+ KeccakP1600_StaticInitialize:
486
+ bx lr
487
+
488
+
489
+ @----------------------------------------------------------------------------
490
+ @
491
+ @ void KeccakP1600_Initialize(void *state)
492
+ @
493
+ .align 8
494
+ .global KeccakP1600_Initialize
495
+ .type KeccakP1600_Initialize, %function;
496
+ KeccakP1600_Initialize:
497
+ push {r4 - r5}
498
+ movs r1, #0
499
+ movs r2, #0
500
+ movs r3, #0
501
+ movs r4, #0
502
+ movs r5, #0
503
+ stmia r0!, { r1 - r5 }
504
+ stmia r0!, { r1 - r5 }
505
+ stmia r0!, { r1 - r5 }
506
+ stmia r0!, { r1 - r5 }
507
+ stmia r0!, { r1 - r5 }
508
+ stmia r0!, { r1 - r5 }
509
+ stmia r0!, { r1 - r5 }
510
+ stmia r0!, { r1 - r5 }
511
+ stmia r0!, { r1 - r5 }
512
+ stmia r0!, { r1 - r5 }
513
+ pop {r4 - r5}
514
+ bx lr
515
+
516
+
517
+ @ ----------------------------------------------------------------------------
518
+ @
519
+ @ void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
520
+ @
521
+ .align 8
522
+ .global KeccakP1600_AddByte
523
+ .type KeccakP1600_AddByte, %function;
524
+ KeccakP1600_AddByte:
525
+ push {r4 - r11}
526
+ bic r3, r2, #7 @ r3 = offset & ~7
527
+ adds r0, r0, r3 @ state += r3
528
+ ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
529
+ movw r8, #0x5555
530
+ movt r8, #0x5555
531
+ movw r9, #0x3333
532
+ movt r9, #0x3333
533
+ movw r10, #0x0F0F
534
+ movt r10, #0x0F0F
535
+ movw r11, #0x00FF
536
+ movt r11, #0x00FF
537
+ movs r4, #0
538
+ movs r5, #0
539
+ push { r4 - r5 }
540
+ add r2, r2, sp
541
+ strb r1, [r2]
542
+ pop { r4 - r5 }
543
+ ldrd r6, r7, [r0]
544
+ toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 0
545
+ strd r6, r7, [r0]
546
+ pop {r4 - r11}
547
+ bx lr
548
+
549
+
550
+ @----------------------------------------------------------------------------
551
+ @
552
+ @ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
553
+ @
554
+ .align 8
555
+ .global KeccakP1600_AddBytes
556
+ .type KeccakP1600_AddBytes, %function;
557
+ KeccakP1600_AddBytes:
558
+ cmp r3, #0 @ .if length != 0
559
+ beq KeccakP1600_AddBytes_Exit1
560
+ push {r4 - r8, lr} @ then
561
+ bic r4, r2, #7 @ offset &= ~7
562
+ adds r0, r0, r4 @ add whole lane offset to state pointer
563
+ ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
564
+ beq KeccakP1600_AddBytes_CheckLanes @ .if offset != 0
565
+ movs r4, r3 @ then, do remaining bytes in first lane
566
+ rsb r5, r2, #8 @ max size in lane = 8 - offset
567
+ cmp r4, r5
568
+ ble KeccakP1600_AddBytes_BytesAlign
569
+ movs r4, r5
570
+ KeccakP1600_AddBytes_BytesAlign:
571
+ sub r8, r3, r4 @ size left
572
+ movs r3, r4
573
+ bl __KeccakP1600_AddBytesInLane
574
+ mov r3, r8
575
+ KeccakP1600_AddBytes_CheckLanes:
576
+ lsrs r2, r3, #3 @ .if length >= 8
577
+ beq KeccakP1600_AddBytes_Bytes
578
+ mov r8, r3
579
+ bl __KeccakP1600_AddLanes
580
+ and r3, r8, #7
581
+ KeccakP1600_AddBytes_Bytes:
582
+ cmp r3, #0
583
+ beq KeccakP1600_AddBytes_Exit
584
+ movs r2, #0
585
+ bl __KeccakP1600_AddBytesInLane
586
+ KeccakP1600_AddBytes_Exit:
587
+ pop {r4 - r8, pc}
588
+ KeccakP1600_AddBytes_Exit1:
589
+ bx lr
590
+
591
+
592
+ @----------------------------------------------------------------------------
593
+ @
594
+ @ __KeccakP1600_AddLanes
595
+ @
596
+ @ Input:
597
+ @ r0 state pointer
598
+ @ r1 data pointer
599
+ @ r2 laneCount
600
+ @
601
+ @ Output:
602
+ @ r0 state pointer next lane
603
+ @ r1 data pointer next byte to input
604
+ @
605
+ @ Changed: r2-r7
606
+ @
607
+ .align 8
608
+ __KeccakP1600_AddLanes:
609
+ push {r8 - r11}
610
+ movw r8, #0x5555
611
+ movt r8, #0x5555
612
+ movw r9, #0x3333
613
+ movt r9, #0x3333
614
+ movw r10, #0x0F0F
615
+ movt r10, #0x0F0F
616
+ movw r11, #0x00FF
617
+ movt r11, #0x00FF
618
+ __KeccakP1600_AddLanes_LoopAligned:
619
+ ldr r4, [r1], #4
620
+ ldr r5, [r1], #4
621
+ ldrd r6, r7, [r0]
622
+ toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 0
623
+ strd r6, r7, [r0], #8
624
+ subs r2, r2, #1
625
+ bne __KeccakP1600_AddLanes_LoopAligned
626
+ pop {r8 - r11}
627
+ bx lr
628
+
629
+
630
+ @----------------------------------------------------------------------------
631
+ @
632
+ @ __KeccakP1600_AddBytesInLane
633
+ @
634
+ @ Input:
635
+ @ r0 state pointer
636
+ @ r1 data pointer
637
+ @ r2 offset in lane
638
+ @ r3 length
639
+ @
640
+ @ Output:
641
+ @ r0 state pointer next lane
642
+ @ r1 data pointer next byte to input
643
+ @
644
+ @ Changed: r2-r7
645
+ @
646
+ .align 8
647
+ __KeccakP1600_AddBytesInLane:
648
+ push {r8 - r11}
649
+ movw r8, #0x5555
650
+ movt r8, #0x5555
651
+ movw r9, #0x3333
652
+ movt r9, #0x3333
653
+ movw r10, #0x0F0F
654
+ movt r10, #0x0F0F
655
+ movw r11, #0x00FF
656
+ movt r11, #0x00FF
657
+ movs r4, #0
658
+ movs r5, #0
659
+ push { r4 - r5 }
660
+ add r2, r2, sp
661
+ __KeccakP1600_AddBytesInLane_Loop:
662
+ ldrb r5, [r1], #1
663
+ strb r5, [r2], #1
664
+ subs r3, r3, #1
665
+ bne __KeccakP1600_AddBytesInLane_Loop
666
+ pop { r4 - r5 }
667
+ ldrd r6, r7, [r0]
668
+ toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 0
669
+ strd r6, r7, [r0], #8
670
+ pop {r8 - r11}
671
+ bx lr
672
+
673
+
674
+ @----------------------------------------------------------------------------
675
+ @
676
+ @ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
677
+ @
678
+ .align 8
679
+ .global KeccakP1600_OverwriteBytes
680
+ .type KeccakP1600_OverwriteBytes, %function;
681
+ KeccakP1600_OverwriteBytes:
682
+ cmp r3, #0 @ .if length != 0
683
+ beq KeccakP1600_OverwriteBytes_Exit1
684
+ push {r4 - r8, lr} @ then
685
+ bic r4, r2, #7 @ offset &= ~7
686
+ adds r0, r0, r4 @ add whole lane offset to state pointer
687
+ ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
688
+ beq KeccakP1600_OverwriteBytes_CheckLanes @ .if offset != 0
689
+ movs r4, r3 @ then, do remaining bytes in first lane
690
+ rsb r5, r2, #8 @ max size in lane = 8 - offset
691
+ cmp r4, r5
692
+ ble KeccakP1600_OverwriteBytes_BytesAlign
693
+ movs r4, r5
694
+ KeccakP1600_OverwriteBytes_BytesAlign:
695
+ sub r8, r3, r4 @ size left
696
+ movs r3, r4
697
+ bl __KeccakP1600_OverwriteBytesInLane
698
+ mov r3, r8
699
+ KeccakP1600_OverwriteBytes_CheckLanes:
700
+ lsrs r2, r3, #3 @ .if length >= 8
701
+ beq KeccakP1600_OverwriteBytes_Bytes
702
+ mov r8, r3
703
+ bl __KeccakP1600_OverwriteLanes
704
+ and r3, r8, #7
705
+ KeccakP1600_OverwriteBytes_Bytes:
706
+ cmp r3, #0
707
+ beq KeccakP1600_OverwriteBytes_Exit
708
+ movs r2, #0
709
+ bl __KeccakP1600_OverwriteBytesInLane
710
+ KeccakP1600_OverwriteBytes_Exit:
711
+ pop {r4 - r8, pc}
712
+ KeccakP1600_OverwriteBytes_Exit1:
713
+ bx lr
714
+
715
+
716
+ @----------------------------------------------------------------------------
717
+ @
718
+ @ __KeccakP1600_OverwriteLanes
719
+ @
720
+ @ Input:
721
+ @ r0 state pointer
722
+ @ r1 data pointer
723
+ @ r2 laneCount
724
+ @
725
+ @ Output:
726
+ @ r0 state pointer next lane
727
+ @ r1 data pointer next byte to input
728
+ @
729
+ @ Changed: r2-r7
730
+ @
731
+ .align 8
732
+ __KeccakP1600_OverwriteLanes:
733
+ push {r8 - r11}
734
+ movw r8, #0x5555
735
+ movt r8, #0x5555
736
+ movw r9, #0x3333
737
+ movt r9, #0x3333
738
+ movw r10, #0x0F0F
739
+ movt r10, #0x0F0F
740
+ movw r11, #0x00FF
741
+ movt r11, #0x00FF
742
+ __KeccakP1600_OverwriteLanes_LoopAligned:
743
+ ldr r4, [r1], #4
744
+ ldr r5, [r1], #4
745
+ toBitInterleaving r4, r5, r6, r7, r3, r8, r9, r10, r11, 1
746
+ strd r6, r7, [r0], #8
747
+ subs r2, r2, #1
748
+ bne __KeccakP1600_OverwriteLanes_LoopAligned
749
+ pop {r8 - r11}
750
+ bx lr
751
+
752
+
753
+ @----------------------------------------------------------------------------
754
+ @
755
+ @ __KeccakP1600_OverwriteBytesInLane
756
+ @
757
+ @ Input:
758
+ @ r0 state pointer
759
+ @ r1 data pointer
760
+ @ r2 offset in lane
761
+ @ r3 length
762
+ @
763
+ @ Output:
764
+ @ r0 state pointer next lane
765
+ @ r1 data pointer next byte to input
766
+ @
767
+ @ Changed: r2-r7
768
+ @
769
+ .align 8
770
+ __KeccakP1600_OverwriteBytesInLane:
771
+ push {r8 - r11}
772
+ movw r8, #0x5555
773
+ movt r8, #0x5555
774
+ movw r9, #0x3333
775
+ movt r9, #0x3333
776
+ movw r10, #0x0F0F
777
+ movt r10, #0x0F0F
778
+ movw r11, #0x00FF
779
+ movt r11, #0x00FF
780
+ movs r4, #0
781
+ movs r5, #0
782
+ push { r4 - r5 }
783
+ lsl r7, r2, #2
784
+ add r2, r2, sp
785
+ movs r6, #0x0F @r6 mask to wipe nibbles(bit interleaved bytes) in state
786
+ lsls r6, r6, r7
787
+ movs r7, r6
788
+ KeccakP1600_OverwriteBytesInLane_Loop:
789
+ orrs r6, r6, r7
790
+ lsls r7, r7, #4
791
+ ldrb r5, [r1], #1
792
+ subs r3, r3, #1
793
+ strb r5, [r2], #1
794
+ bne KeccakP1600_OverwriteBytesInLane_Loop
795
+ pop { r4 - r5 }
796
+ toBitInterleaving r4, r5, r2, r3, r7, r8, r9, r10, r11, 1
797
+ ldrd r4, r5, [r0]
798
+ bics r4, r4, r6
799
+ bics r5, r5, r6
800
+ orrs r2, r2, r4
801
+ orrs r3, r3, r5
802
+ strd r2, r3, [r0], #8
803
+ pop {r8 - r11}
804
+ bx lr
805
+
806
+
807
+ @----------------------------------------------------------------------------
808
+ @
809
+ @ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
810
+ @
811
+ .align 8
812
+ .global KeccakP1600_OverwriteWithZeroes
813
+ .type KeccakP1600_OverwriteWithZeroes, %function;
814
+ KeccakP1600_OverwriteWithZeroes:
815
+ push {r4 - r5}
816
+ lsrs r2, r1, #3
817
+ beq KeccakP1600_OverwriteWithZeroes_Bytes
818
+ movs r4, #0
819
+ movs r5, #0
820
+ KeccakP1600_OverwriteWithZeroes_LoopLanes:
821
+ strd r4, r5, [r0], #8
822
+ subs r2, r2, #1
823
+ bne KeccakP1600_OverwriteWithZeroes_LoopLanes
824
+ KeccakP1600_OverwriteWithZeroes_Bytes:
825
+ ands r1, #7
826
+ beq KeccakP1600_OverwriteWithZeroes_Exit
827
+ movs r3, #0x0F @r2 already zero, r3 = mask to wipe nibbles(bit interleaved bytes) in state
828
+ KeccakP1600_OverwriteWithZeroes_LoopBytes:
829
+ orrs r2, r2, r3
830
+ lsls r3, r3, #4
831
+ subs r1, r1, #1
832
+ bne KeccakP1600_OverwriteWithZeroes_LoopBytes
833
+ ldrd r4, r5, [r0]
834
+ bics r4, r4, r2
835
+ bics r5, r5, r2
836
+ strd r4, r5, [r0], #8
837
+ KeccakP1600_OverwriteWithZeroes_Exit:
838
+ pop {r4 - r5}
839
+ bx lr
840
+
841
+
842
+ @----------------------------------------------------------------------------
843
+ @
844
+ @ void KeccakP1600_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
845
+ @
846
+ .align 8
847
+ .global KeccakP1600_ExtractBytes
848
+ .type KeccakP1600_ExtractBytes, %function;
849
+ KeccakP1600_ExtractBytes:
850
+ cmp r3, #0 @ .if length != 0
851
+ beq KeccakP1600_ExtractBytes_Exit1
852
+ push {r4 - r8, lr} @ then
853
+ bic r4, r2, #7 @ offset &= ~7
854
+ adds r0, r0, r4 @ add whole lane offset to state pointer
855
+ ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
856
+ beq KeccakP1600_ExtractBytes_CheckLanes @ .if offset != 0
857
+ movs r4, r3 @ then, do remaining bytes in first lane
858
+ rsb r5, r2, #8 @ max size in lane = 8 - offset
859
+ cmp r4, r5
860
+ ble KeccakP1600_ExtractBytes_BytesAlign
861
+ movs r4, r5
862
+ KeccakP1600_ExtractBytes_BytesAlign:
863
+ sub r8, r3, r4 @ size left
864
+ movs r3, r4
865
+ bl __KeccakP1600_ExtractBytesInLane
866
+ mov r3, r8
867
+ KeccakP1600_ExtractBytes_CheckLanes:
868
+ lsrs r2, r3, #3 @ .if length >= 8
869
+ beq KeccakP1600_ExtractBytes_Bytes
870
+ mov r8, r3
871
+ bl __KeccakP1600_ExtractLanes
872
+ and r3, r8, #7
873
+ KeccakP1600_ExtractBytes_Bytes:
874
+ cmp r3, #0
875
+ beq KeccakP1600_ExtractBytes_Exit
876
+ movs r2, #0
877
+ bl __KeccakP1600_ExtractBytesInLane
878
+ KeccakP1600_ExtractBytes_Exit:
879
+ pop {r4 - r8, pc}
880
+ KeccakP1600_ExtractBytes_Exit1:
881
+ bx lr
882
+
883
+
884
+ @----------------------------------------------------------------------------
885
+ @
886
+ @ __KeccakP1600_ExtractLanes
887
+ @
888
+ @ Input:
889
+ @ r0 state pointer
890
+ @ r1 data pointer
891
+ @ r2 laneCount
892
+ @
893
+ @ Output:
894
+ @ r0 state pointer next lane
895
+ @ r1 data pointer next byte to input
896
+ @
897
+ @ Changed: r2-r5
898
+ @
899
+ .align 8
900
+ __KeccakP1600_ExtractLanes:
901
+ push {r6 - r9}
902
+ movw r6, #0xFF00
903
+ movw r7, #0x00F0
904
+ movt r7, #0x00F0
905
+ movw r8, #0x0C0C
906
+ movt r8, #0x0C0C
907
+ movw r9, #0x2222
908
+ movt r9, #0x2222
909
+ __KeccakP1600_ExtractLanes_LoopAligned:
910
+ ldrd r4, r5, [r0], #8
911
+ fromBitInterleaving r4, r5, r3, r6, r7, r8, r9
912
+ str r4, [r1], #4
913
+ subs r2, r2, #1
914
+ str r5, [r1], #4
915
+ bne __KeccakP1600_ExtractLanes_LoopAligned
916
+ pop {r6 - r9}
917
+ bx lr
918
+
919
+
920
+ @----------------------------------------------------------------------------
921
+ @
922
+ @ __KeccakP1600_ExtractBytesInLane
923
+ @
924
+ @ Input:
925
+ @ r0 state pointer
926
+ @ r1 data pointer
927
+ @ r2 offset in lane
928
+ @ r3 length
929
+ @
930
+ @ Output:
931
+ @ r0 state pointer next lane
932
+ @ r1 data pointer next byte to input
933
+ @
934
+ @ Changed: r2-r5,r12
935
+ @
936
+ .align 8
937
+ __KeccakP1600_ExtractBytesInLane:
938
+ push {r6 - r9}
939
+ movw r6, #0xFF00
940
+ movw r7, #0x00F0
941
+ movt r7, #0x00F0
942
+ movw r8, #0x0C0C
943
+ movt r8, #0x0C0C
944
+ movw r9, #0x2222
945
+ movt r9, #0x2222
946
+ ldrd r4, r5, [r0], #8
947
+ fromBitInterleaving r4, r5, r12, r6, r7, r8, r9
948
+ push {r4, r5}
949
+ add r2, sp, r2
950
+ __KeccakP1600_ExtractBytesInLane_Loop:
951
+ ldrb r4, [r2], #1
952
+ subs r3, r3, #1
953
+ strb r4, [r1], #1
954
+ bne __KeccakP1600_ExtractBytesInLane_Loop
955
+ add sp, #8
956
+ pop {r6 - r9}
957
+ bx lr
958
+
959
+
960
+ @----------------------------------------------------------------------------
961
+ @
962
+ @ void KeccakP1600_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
963
+ @
964
+ .align 8
965
+ .global KeccakP1600_ExtractAndAddBytes
966
+ .type KeccakP1600_ExtractAndAddBytes, %function;
967
+ KeccakP1600_ExtractAndAddBytes:
968
+ push {r4 - r10, lr}
969
+ mov r10, r2
970
+ mov r2, r3
971
+ ldr r3, [sp, #8*4]
972
+ cmp r3, #0
973
+ beq KeccakP1600_ExtractAndAddBytes_Exit @ .if length != 0
974
+ bic r4, r2, #7 @ then, offset &= ~7
975
+ adds r0, r0, r4 @ add whole lane offset to state pointer
976
+ ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
977
+ beq KeccakP1600_ExtractAndAddBytes_CheckLanes @ .if offset != 0
978
+ movs r4, r3 @ then, do remaining bytes in first lane
979
+ rsb r5, r2, #8 @ max size in lane = 8 - offset
980
+ cmp r4, r5
981
+ ble KeccakP1600_ExtractAndAddBytes_BytesAlign
982
+ movs r4, r5
983
+ KeccakP1600_ExtractAndAddBytes_BytesAlign:
984
+ sub r8, r3, r4 @ size left
985
+ movs r3, r4
986
+ bl __KeccakP1600_ExtractAndAddBytesInLane
987
+ mov r3, r8
988
+ KeccakP1600_ExtractAndAddBytes_CheckLanes:
989
+ lsrs r2, r3, #3 @ .if length >= 8
990
+ beq KeccakP1600_ExtractAndAddBytes_Bytes
991
+ mov r8, r3
992
+ bl __KeccakP1600_ExtractAndAddLanes
993
+ and r3, r8, #7
994
+ KeccakP1600_ExtractAndAddBytes_Bytes:
995
+ cmp r3, #0
996
+ beq KeccakP1600_ExtractAndAddBytes_Exit
997
+ movs r2, #0
998
+ bl __KeccakP1600_ExtractAndAddBytesInLane
999
+ KeccakP1600_ExtractAndAddBytes_Exit:
1000
+ pop {r4 - r10, pc}
1001
+
1002
+
1003
+ @----------------------------------------------------------------------------
1004
+ @
1005
+ @ __KeccakP1600_ExtractAndAddLanes
1006
+ @
1007
+ @ Input:
1008
+ @ r0 state pointer
1009
+ @ r1 in pointer
1010
+ @ r2 laneCount
1011
+ @ r10 out pointer
1012
+ @
1013
+ @ Output:
1014
+ @ r0 state pointer next lane
1015
+ @ r1 in pointer (next 32-bit word)
1016
+ @ r10 out pointer (next 32-bit word)
1017
+ @
1018
+ @ Changed: r2-r5
1019
+ @
1020
+ .align 8
1021
+ __KeccakP1600_ExtractAndAddLanes:
1022
+ push {r6 - r9}
1023
+ movw r6, #0xFF00
1024
+ movw r7, #0x00F0
1025
+ movt r7, #0x00F0
1026
+ movw r8, #0x0C0C
1027
+ movt r8, #0x0C0C
1028
+ movw r9, #0x2222
1029
+ movt r9, #0x2222
1030
+ __KeccakP1600_ExtractAndAddLanes_LoopAligned:
1031
+ ldrd r4, r5, [r0], #8
1032
+ fromBitInterleaving r4, r5, r3, r6, r7, r8, r9
1033
+ ldr r3, [r1], #4
1034
+ eors r4, r4, r3
1035
+ str r4, [r10], #4
1036
+ ldr r3, [r1], #4
1037
+ eors r5, r5, r3
1038
+ subs r2, r2, #1
1039
+ str r5, [r10], #4
1040
+ bne __KeccakP1600_ExtractAndAddLanes_LoopAligned
1041
+ pop {r6 - r9}
1042
+ bx lr
1043
+
1044
+
1045
+ @----------------------------------------------------------------------------
1046
+ @
1047
+ @ __KeccakP1600_ExtractAndAddBytesInLane
1048
+ @
1049
+ @ Input:
1050
+ @ r0 state pointer
1051
+ @ r1 in pointer
1052
+ @ r2 offset in lane
1053
+ @ r3 length
1054
+ @ r10 out pointer
1055
+ @
1056
+ @ Output:
1057
+ @ r0 state pointer next lane
1058
+ @ r1 in pointer (next byte)
1059
+ @ r10 out pointer (next byte)
1060
+ @
1061
+ @ Changed: r2-r5,r12
1062
+ @
1063
+ .align 8
1064
+ __KeccakP1600_ExtractAndAddBytesInLane:
1065
+ push {r6 - r9}
1066
+ movw r6, #0xFF00
1067
+ movw r7, #0x00F0
1068
+ movt r7, #0x00F0
1069
+ movw r8, #0x0C0C
1070
+ movt r8, #0x0C0C
1071
+ movw r9, #0x2222
1072
+ movt r9, #0x2222
1073
+ ldrd r4, r5, [r0], #8
1074
+ fromBitInterleaving r4, r5, r12, r6, r7, r8, r9
1075
+ push {r4, r5}
1076
+ add r2, sp, r2
1077
+ __KeccakP1600_ExtractAndAddBytesInLane_Loop:
1078
+ ldrb r4, [r2], #1
1079
+ ldrb r5, [r1], #1
1080
+ eors r4, r4, r5
1081
+ subs r3, r3, #1
1082
+ strb r4, [r10], #1
1083
+ bne __KeccakP1600_ExtractAndAddBytesInLane_Loop
1084
+ add sp, #8
1085
+ pop {r6 - r9}
1086
+ bx lr
1087
+
1088
+
1089
+ .macro SwapPI13 in0,in1,in2,in3,eo0,eo1,eo2,eo3
1090
+ ldr r3, [r0, #\in0+0]
1091
+ ldr r4, [r0, #\in0+4]
1092
+ ldr r2, [r0, #\in1+0]
1093
+ ldr r1, [r0, #\in1+4]
1094
+ str r2, [r0, #\in0+\eo0*4]
1095
+ str r1, [r0, #\in0+(\eo0^1)*4]
1096
+ ldr r2, [r0, #\in2+0]
1097
+ ldr r1, [r0, #\in2+4]
1098
+ str r2, [r0, #\in1+\eo1*4]
1099
+ str r1, [r0, #\in1+(\eo1^1)*4]
1100
+ ldr r2, [r0, #\in3+0]
1101
+ ldr r1, [r0, #\in3+4]
1102
+ str r2, [r0, #\in2+\eo2*4]
1103
+ str r1, [r0, #\in2+(\eo2^1)*4]
1104
+ str r3, [r0, #\in3+\eo3*4]
1105
+ str r4, [r0, #\in3+(\eo3^1)*4]
1106
+ .endm
1107
+
1108
+ .macro SwapPI2 in0,in1,in2,in3
1109
+ ldr r3, [r0, #\in0+0]
1110
+ ldr r4, [r0, #\in0+4]
1111
+ ldr r2, [r0, #\in1+0]
1112
+ ldr r1, [r0, #\in1+4]
1113
+ str r2, [r0, #\in0+4]
1114
+ str r1, [r0, #\in0+0]
1115
+ str r3, [r0, #\in1+4]
1116
+ str r4, [r0, #\in1+0]
1117
+ ldr r3, [r0, #\in2+0]
1118
+ ldr r4, [r0, #\in2+4]
1119
+ ldr r2, [r0, #\in3+0]
1120
+ ldr r1, [r0, #\in3+4]
1121
+ str r2, [r0, #\in2+4]
1122
+ str r1, [r0, #\in2+0]
1123
+ str r3, [r0, #\in3+4]
1124
+ str r4, [r0, #\in3+0]
1125
+ .endm
1126
+
1127
+ .macro SwapEO even,odd
1128
+ ldr r3, [r0, #\even]
1129
+ ldr r4, [r0, #\odd]
1130
+ str r3, [r0, #\odd]
1131
+ str r4, [r0, #\even]
1132
+ .endm
1133
+
1134
+ @ ----------------------------------------------------------------------------
1135
+ @
1136
+ @ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds)
1137
+ @
1138
+ .align 8
1139
+ .global KeccakP1600_Permute_Nrounds
1140
+ .type KeccakP1600_Permute_Nrounds, %function;
1141
+ KeccakP1600_Permute_Nrounds:
1142
+ lsls r3, r1, #30
1143
+ bne KeccakP1600_Permute_NroundsNotMultiple4
1144
+ lsls r2, r1, #3
1145
+ adr r1, KeccakP1600_Permute_RoundConstants0Mod4
1146
+ subs r1, r1, r2
1147
+ b KeccakP1600_Permute
1148
+ KeccakP1600_Permute_NroundsNotMultiple4: @ nrounds not multiple of 4
1149
+ push { r4 - r12, lr }
1150
+ sub sp, #mSize
1151
+ lsrs r2, r1, #2
1152
+ lsls r2, r2, #3+2
1153
+ adr r1, KeccakP1600_Permute_RoundConstants0
1154
+ subs r1, r1, r2
1155
+ str r1, [sp, #mRC]
1156
+ lsls r3, r3, #1
1157
+ bcs KeccakP1600_Permute_Nrounds23Mod4
1158
+ KeccakP1600_Permute_Nrounds1Mod4:
1159
+ SwapPI13 Aga0, Aka0, Asa0, Ama0, 1, 0, 1, 0
1160
+ SwapPI13 Abe0, Age0, Ame0, Ake0, 0, 1, 0, 1
1161
+ SwapPI13 Abi0, Aki0, Agi0, Asi0, 1, 0, 1, 0
1162
+ SwapEO Ami0, Ami1
1163
+ SwapPI13 Abo0, Amo0, Aso0, Ago0, 1, 0, 1, 0
1164
+ SwapEO Ako0, Ako1
1165
+ SwapPI13 Abu0, Asu0, Aku0, Amu0, 0, 1, 0, 1
1166
+ b.w KeccakP1600_Permute_Round1Mod4
1167
+ KeccakP1600_Permute_Nrounds23Mod4:
1168
+ bpl KeccakP1600_Permute_Nrounds2Mod4
1169
+ KeccakP1600_Permute_Nrounds3Mod4:
1170
+ SwapPI13 Aga0, Ama0, Asa0, Aka0, 0, 1, 0, 1
1171
+ SwapPI13 Abe0, Ake0, Ame0, Age0, 1, 0, 1, 0
1172
+ SwapPI13 Abi0, Asi0, Agi0, Aki0, 0, 1, 0, 1
1173
+ SwapEO Ami0, Ami1
1174
+ SwapPI13 Abo0, Ago0, Aso0, Amo0, 0, 1, 0, 1
1175
+ SwapEO Ako0, Ako1
1176
+ SwapPI13 Abu0, Amu0, Aku0, Asu0, 1, 0, 1, 0
1177
+ b.w KeccakP1600_Permute_Round3Mod4
1178
+ KeccakP1600_Permute_Nrounds2Mod4:
1179
+ SwapPI2 Aga0, Asa0, Aka0, Ama0
1180
+ SwapPI2 Abe0, Ame0, Age0, Ake0
1181
+ SwapPI2 Abi0, Agi0, Aki0, Asi0
1182
+ SwapPI2 Abo0, Aso0, Ago0, Amo0
1183
+ SwapPI2 Abu0, Aku0, Amu0, Asu0
1184
+ b.w KeccakP1600_Permute_Round2Mod4
1185
+
1186
+
1187
+ @ ----------------------------------------------------------------------------
1188
+ @
1189
+ @ void KeccakP1600_Permute_12rounds( void *state )
1190
+ @
1191
+ .align 8
1192
+ .global KeccakP1600_Permute_12rounds
1193
+ .type KeccakP1600_Permute_12rounds, %function;
1194
+ KeccakP1600_Permute_12rounds:
1195
+ adr r1, KeccakP1600_Permute_RoundConstants12
1196
+ b KeccakP1600_Permute
1197
+
1198
+
1199
+ @ ----------------------------------------------------------------------------
1200
+ @
1201
+ @ void KeccakP1600_Permute_24rounds( void *state )
1202
+ @
1203
+ .align 8
1204
+ .global KeccakP1600_Permute_24rounds
1205
+ .type KeccakP1600_Permute_24rounds, %function;
1206
+ KeccakP1600_Permute_24rounds:
1207
+ adr r1, KeccakP1600_Permute_RoundConstants24
1208
+ b KeccakP1600_Permute
1209
+
1210
+
1211
+ .align 8
1212
+ KeccakP1600_Permute_RoundConstants24:
1213
+ @ 0 1
1214
+ .long 0x00000001, 0x00000000
1215
+ .long 0x00000000, 0x00000089
1216
+ .long 0x00000000, 0x8000008b
1217
+ .long 0x00000000, 0x80008080
1218
+ .long 0x00000001, 0x0000008b
1219
+ .long 0x00000001, 0x00008000
1220
+ .long 0x00000001, 0x80008088
1221
+ .long 0x00000001, 0x80000082
1222
+ .long 0x00000000, 0x0000000b
1223
+ .long 0x00000000, 0x0000000a
1224
+ .long 0x00000001, 0x00008082
1225
+ .long 0x00000000, 0x00008003
1226
+ KeccakP1600_Permute_RoundConstants12:
1227
+ .long 0x00000001, 0x0000808b
1228
+ .long 0x00000001, 0x8000000b
1229
+ .long 0x00000001, 0x8000008a
1230
+ .long 0x00000001, 0x80000081
1231
+ .long 0x00000000, 0x80000081
1232
+ .long 0x00000000, 0x80000008
1233
+ .long 0x00000000, 0x00000083
1234
+ .long 0x00000000, 0x80008003
1235
+ KeccakP1600_Permute_RoundConstants0:
1236
+ .long 0x00000001, 0x80008088
1237
+ .long 0x00000000, 0x80000088
1238
+ .long 0x00000001, 0x00008000
1239
+ .long 0x00000000, 0x80008082
1240
+ KeccakP1600_Permute_RoundConstants0Mod4:
1241
+ .long 0x000000FF @terminator
1242
+
1243
+ @----------------------------------------------------------------------------
1244
+ @
1245
+ @ void KeccakP1600_Permute( void *state, void * rc )
1246
+ @
1247
+ .align 8
1248
+ KeccakP1600_Permute:
1249
+ push { r4 - r12, lr }
1250
+ sub sp, #mSize
1251
+ str r1, [sp, #mRC]
1252
+ KeccakP1600_Permute_RoundLoop:
1253
+ KeccakRound0
1254
+ KeccakP1600_Permute_Round3Mod4:
1255
+ KeccakRound1
1256
+ KeccakP1600_Permute_Round2Mod4:
1257
+ KeccakRound2
1258
+ KeccakP1600_Permute_Round1Mod4:
1259
+ KeccakRound3
1260
+ bne KeccakP1600_Permute_RoundLoop
1261
+ add sp, #mSize
1262
+ pop { r4 - r12, pc }
1263
+
1264
+