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,1175 @@
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 ARMv7M architecture (e.g., Cortex-M3) and the GCC compiler.
26
+
27
+
28
+ .thumb
29
+ .syntax unified
30
+ .text
31
+
32
+ @ Credit: Henry S. Warren, Hacker's Delight, Addison-Wesley, 2002
33
+ .macro toBitInterleaving x0,x1,s0,s1,t,over
34
+
35
+ and \t,\x0,#0x55555555
36
+ orr \t,\t,\t, LSR #1
37
+ and \t,\t,#0x33333333
38
+ orr \t,\t,\t, LSR #2
39
+ and \t,\t,#0x0F0F0F0F
40
+ orr \t,\t,\t, LSR #4
41
+ and \t,\t,#0x00FF00FF
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,#0x55555555
50
+ orr \t,\t,\t, LSR #1
51
+ and \t,\t,#0x33333333
52
+ orr \t,\t,\t, LSR #2
53
+ and \t,\t,#0x0F0F0F0F
54
+ orr \t,\t,\t, LSR #4
55
+ and \t,\t,#0x00FF00FF
56
+ orr \t,\t,\t, LSR #8
57
+ eor \s0,\s0,\t, LSL #16
58
+
59
+ and \t,\x0,#0xAAAAAAAA
60
+ orr \t,\t,\t, LSL #1
61
+ and \t,\t,#0xCCCCCCCC
62
+ orr \t,\t,\t, LSL #2
63
+ and \t,\t,#0xF0F0F0F0
64
+ orr \t,\t,\t, LSL #4
65
+ and \t,\t,#0xFF00FF00
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,#0xAAAAAAAA
74
+ orr \t,\t,\t, LSL #1
75
+ and \t,\t,#0xCCCCCCCC
76
+ orr \t,\t,\t, LSL #2
77
+ and \t,\t,#0xF0F0F0F0
78
+ orr \t,\t,\t, LSL #4
79
+ and \t,\t,#0xFF00FF00
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
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, #0x0000FF00
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, #0x00F000F0
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, #0x0C0C0C0C
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, #0x22222222
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, #0x0000FF00
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, #0x00F000F0
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, #0x0C0C0C0C
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, #0x22222222
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
+ @
481
+ @ void KeccakP1600_StaticInitialize( void )
482
+ @
483
+ .align 8
484
+ .global KeccakP1600_StaticInitialize
485
+ .type KeccakP1600_StaticInitialize, %function;
486
+ KeccakP1600_StaticInitialize:
487
+ bx lr
488
+
489
+
490
+ @----------------------------------------------------------------------------
491
+ @
492
+ @ void KeccakP1600_Initialize(void *state)
493
+ @
494
+ .align 8
495
+ .global KeccakP1600_Initialize
496
+ .type KeccakP1600_Initialize, %function;
497
+ KeccakP1600_Initialize:
498
+ push {r4 - r5}
499
+ movs r1, #0
500
+ movs r2, #0
501
+ movs r3, #0
502
+ movs r4, #0
503
+ movs r5, #0
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
+ stmia r0!, { r1 - r5 }
514
+ pop {r4 - r5}
515
+ bx lr
516
+
517
+
518
+ @ ----------------------------------------------------------------------------
519
+ @
520
+ @ void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
521
+ @
522
+ .align 8
523
+ .global KeccakP1600_AddByte
524
+ .type KeccakP1600_AddByte, %function;
525
+ KeccakP1600_AddByte:
526
+ push {r4 - r7}
527
+ bic r3, r2, #7 @ r3 = offset & ~7
528
+ adds r0, r0, r3 @ state += r3
529
+ ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
530
+
531
+ movs r4, #0
532
+ movs r5, #0
533
+ push { r4 - r5 }
534
+ add r2, r2, sp
535
+ strb r1, [r2]
536
+ pop { r4 - r5 }
537
+ ldrd r6, r7, [r0]
538
+ toBitInterleaving r4, r5, r6, r7, r3, 0
539
+ strd r6, r7, [r0]
540
+ pop {r4 - r7}
541
+ bx lr
542
+
543
+
544
+ @----------------------------------------------------------------------------
545
+ @
546
+ @ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
547
+ @
548
+ .align 8
549
+ .global KeccakP1600_AddBytes
550
+ .type KeccakP1600_AddBytes, %function;
551
+ KeccakP1600_AddBytes:
552
+ cbz r3, KeccakP1600_AddBytes_Exit1
553
+ push {r4 - r8, lr} @ then
554
+ bic r4, r2, #7 @ offset &= ~7
555
+ adds r0, r0, r4 @ add whole lane offset to state pointer
556
+ ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
557
+ beq KeccakP1600_AddBytes_CheckLanes @ .if offset != 0
558
+ movs r4, r3 @ then, do remaining bytes in first lane
559
+ rsb r5, r2, #8 @ max size in lane = 8 - offset
560
+ cmp r4, r5
561
+ ble KeccakP1600_AddBytes_BytesAlign
562
+ movs r4, r5
563
+ KeccakP1600_AddBytes_BytesAlign:
564
+ sub r8, r3, r4 @ size left
565
+ movs r3, r4
566
+ bl __KeccakP1600_AddBytesInLane
567
+ mov r3, r8
568
+ KeccakP1600_AddBytes_CheckLanes:
569
+ lsrs r2, r3, #3 @ .if length >= 8
570
+ beq KeccakP1600_AddBytes_Bytes
571
+ mov r8, r3
572
+ bl __KeccakP1600_AddLanes
573
+ and r3, r8, #7
574
+ KeccakP1600_AddBytes_Bytes:
575
+ cbz r3, KeccakP1600_AddBytes_Exit
576
+ movs r2, #0
577
+ bl __KeccakP1600_AddBytesInLane
578
+ KeccakP1600_AddBytes_Exit:
579
+ pop {r4 - r8, pc}
580
+ KeccakP1600_AddBytes_Exit1:
581
+ bx lr
582
+
583
+
584
+ @----------------------------------------------------------------------------
585
+ @
586
+ @ __KeccakP1600_AddLanes
587
+ @
588
+ @ Input:
589
+ @ r0 state pointer
590
+ @ r1 data pointer
591
+ @ r2 laneCount
592
+ @
593
+ @ Output:
594
+ @ r0 state pointer next lane
595
+ @ r1 data pointer next byte to input
596
+ @
597
+ @ Changed: r2-r7
598
+ @
599
+ .align 8
600
+ __KeccakP1600_AddLanes:
601
+ __KeccakP1600_AddLanes_LoopAligned:
602
+ ldr r4, [r1], #4
603
+ ldr r5, [r1], #4
604
+ ldrd r6, r7, [r0]
605
+ toBitInterleaving r4, r5, r6, r7, r3, 0
606
+ strd r6, r7, [r0], #8
607
+ subs r2, r2, #1
608
+ bne __KeccakP1600_AddLanes_LoopAligned
609
+ bx lr
610
+
611
+
612
+ @----------------------------------------------------------------------------
613
+ @
614
+ @ __KeccakP1600_AddBytesInLane
615
+ @
616
+ @ Input:
617
+ @ r0 state pointer
618
+ @ r1 data pointer
619
+ @ r2 offset in lane
620
+ @ r3 length
621
+ @
622
+ @ Output:
623
+ @ r0 state pointer next lane
624
+ @ r1 data pointer next byte to input
625
+ @
626
+ @ Changed: r2-r7
627
+ @
628
+ .align 8
629
+ __KeccakP1600_AddBytesInLane:
630
+ movs r4, #0
631
+ movs r5, #0
632
+ push { r4 - r5 }
633
+ add r2, r2, sp
634
+ __KeccakP1600_AddBytesInLane_Loop:
635
+ ldrb r5, [r1], #1
636
+ strb r5, [r2], #1
637
+ subs r3, r3, #1
638
+ bne __KeccakP1600_AddBytesInLane_Loop
639
+ pop { r4 - r5 }
640
+ ldrd r6, r7, [r0]
641
+ toBitInterleaving r4, r5, r6, r7, r3, 0
642
+ strd r6, r7, [r0], #8
643
+ bx lr
644
+
645
+
646
+ @----------------------------------------------------------------------------
647
+ @
648
+ @ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
649
+ @
650
+ .align 8
651
+ .global KeccakP1600_OverwriteBytes
652
+ .type KeccakP1600_OverwriteBytes, %function;
653
+ KeccakP1600_OverwriteBytes:
654
+ cbz r3, KeccakP1600_OverwriteBytes_Exit1 @ .if length != 0
655
+ push {r4 - r8, lr} @ then
656
+ bic r4, r2, #7 @ offset &= ~7
657
+ adds r0, r0, r4 @ add whole lane offset to state pointer
658
+ ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
659
+ beq KeccakP1600_OverwriteBytes_CheckLanes @ .if offset != 0
660
+ movs r4, r3 @ then, do remaining bytes in first lane
661
+ rsb r5, r2, #8 @ max size in lane = 8 - offset
662
+ cmp r4, r5
663
+ ble KeccakP1600_OverwriteBytes_BytesAlign
664
+ movs r4, r5
665
+ KeccakP1600_OverwriteBytes_BytesAlign:
666
+ sub r8, r3, r4 @ size left
667
+ movs r3, r4
668
+ bl __KeccakP1600_OverwriteBytesInLane
669
+ mov r3, r8
670
+ KeccakP1600_OverwriteBytes_CheckLanes:
671
+ lsrs r2, r3, #3 @ .if length >= 8
672
+ beq KeccakP1600_OverwriteBytes_Bytes
673
+ mov r8, r3
674
+ bl __KeccakP1600_OverwriteLanes
675
+ and r3, r8, #7
676
+ KeccakP1600_OverwriteBytes_Bytes:
677
+ cbz r3, KeccakP1600_OverwriteBytes_Exit
678
+ movs r2, #0
679
+ bl __KeccakP1600_OverwriteBytesInLane
680
+ KeccakP1600_OverwriteBytes_Exit:
681
+ pop {r4 - r8, pc}
682
+ KeccakP1600_OverwriteBytes_Exit1:
683
+ bx lr
684
+
685
+
686
+ @----------------------------------------------------------------------------
687
+ @
688
+ @ __KeccakP1600_OverwriteLanes
689
+ @
690
+ @ Input:
691
+ @ r0 state pointer
692
+ @ r1 data pointer
693
+ @ r2 laneCount
694
+ @
695
+ @ Output:
696
+ @ r0 state pointer next lane
697
+ @ r1 data pointer next byte to input
698
+ @
699
+ @ Changed: r2-r7
700
+ @
701
+ .align 8
702
+ __KeccakP1600_OverwriteLanes:
703
+ __KeccakP1600_OverwriteLanes_LoopAligned:
704
+ ldr r4, [r1], #4
705
+ ldr r5, [r1], #4
706
+ ldrd r6, r7, [r0]
707
+ toBitInterleaving r4, r5, r6, r7, r3, 1
708
+ strd r6, r7, [r0], #8
709
+ subs r2, r2, #1
710
+ bne __KeccakP1600_OverwriteLanes_LoopAligned
711
+ bx lr
712
+
713
+
714
+ @----------------------------------------------------------------------------
715
+ @
716
+ @ __KeccakP1600_OverwriteBytesInLane
717
+ @
718
+ @ Input:
719
+ @ r0 state pointer
720
+ @ r1 data pointer
721
+ @ r2 offset in lane
722
+ @ r3 length
723
+ @
724
+ @ Output:
725
+ @ r0 state pointer next lane
726
+ @ r1 data pointer next byte to input
727
+ @
728
+ @ Changed: r2-r7
729
+ @
730
+ .align 8
731
+ __KeccakP1600_OverwriteBytesInLane:
732
+ movs r4, #0
733
+ movs r5, #0
734
+ push { r4 - r5 }
735
+ lsl r7, r2, #2
736
+ add r2, r2, sp
737
+ movs r6, #0x0F @r6 mask to wipe nibbles(bit interleaved bytes) in state
738
+ lsls r6, r6, r7
739
+ movs r7, r6
740
+ KeccakP1600_OverwriteBytesInLane_Loop:
741
+ orrs r6, r6, r7
742
+ lsls r7, r7, #4
743
+ ldrb r5, [r1], #1
744
+ subs r3, r3, #1
745
+ strb r5, [r2], #1
746
+ bne KeccakP1600_OverwriteBytesInLane_Loop
747
+ pop { r4 - r5 }
748
+ toBitInterleaving r4, r5, r2, r3, r7, 1
749
+ ldrd r4, r5, [r0]
750
+ bics r4, r4, r6
751
+ bics r5, r5, r6
752
+ orrs r2, r2, r4
753
+ orrs r3, r3, r5
754
+ strd r2, r3, [r0], #8
755
+ bx lr
756
+
757
+
758
+ @----------------------------------------------------------------------------
759
+ @
760
+ @ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
761
+ @
762
+ .align 8
763
+ .global KeccakP1600_OverwriteWithZeroes
764
+ .type KeccakP1600_OverwriteWithZeroes, %function;
765
+ KeccakP1600_OverwriteWithZeroes:
766
+ push {r4 - r5}
767
+ lsrs r2, r1, #3
768
+ beq KeccakP1600_OverwriteWithZeroes_Bytes
769
+ movs r4, #0
770
+ movs r5, #0
771
+ KeccakP1600_OverwriteWithZeroes_LoopLanes:
772
+ strd r4, r5, [r0], #8
773
+ subs r2, r2, #1
774
+ bne KeccakP1600_OverwriteWithZeroes_LoopLanes
775
+ KeccakP1600_OverwriteWithZeroes_Bytes:
776
+ ands r1, #7
777
+ beq KeccakP1600_OverwriteWithZeroes_Exit
778
+ movs r3, #0x0F @r2 already zero, r3 = mask to wipe nibbles(bit interleaved bytes) in state
779
+ KeccakP1600_OverwriteWithZeroes_LoopBytes:
780
+ orrs r2, r2, r3
781
+ lsls r3, r3, #4
782
+ subs r1, r1, #1
783
+ bne KeccakP1600_OverwriteWithZeroes_LoopBytes
784
+ ldrd r4, r5, [r0]
785
+ bics r4, r4, r2
786
+ bics r5, r5, r2
787
+ strd r4, r5, [r0], #8
788
+ KeccakP1600_OverwriteWithZeroes_Exit:
789
+ pop {r4 - r5}
790
+ bx lr
791
+
792
+
793
+ @----------------------------------------------------------------------------
794
+ @
795
+ @ void KeccakP1600_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
796
+ @
797
+ .align 8
798
+ .global KeccakP1600_ExtractBytes
799
+ .type KeccakP1600_ExtractBytes, %function;
800
+ KeccakP1600_ExtractBytes:
801
+ cbz r3, KeccakP1600_ExtractBytes_Exit1 @ .if length != 0
802
+ push {r4 - r8, lr} @ then
803
+ bic r4, r2, #7 @ offset &= ~7
804
+ adds r0, r0, r4 @ add whole lane offset to state pointer
805
+ ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
806
+ beq KeccakP1600_ExtractBytes_CheckLanes @ .if offset != 0
807
+ movs r4, r3 @ then, do remaining bytes in first lane
808
+ rsb r5, r2, #8 @ max size in lane = 8 - offset
809
+ cmp r4, r5
810
+ ble KeccakP1600_ExtractBytes_BytesAlign
811
+ movs r4, r5
812
+ KeccakP1600_ExtractBytes_BytesAlign:
813
+ sub r8, r3, r4 @ size left
814
+ movs r3, r4
815
+ bl __KeccakP1600_ExtractBytesInLane
816
+ mov r3, r8
817
+ KeccakP1600_ExtractBytes_CheckLanes:
818
+ lsrs r2, r3, #3 @ .if length >= 8
819
+ beq KeccakP1600_ExtractBytes_Bytes
820
+ mov r8, r3
821
+ bl __KeccakP1600_ExtractLanes
822
+ and r3, r8, #7
823
+ KeccakP1600_ExtractBytes_Bytes:
824
+ cbz r3, KeccakP1600_ExtractBytes_Exit
825
+ movs r2, #0
826
+ bl __KeccakP1600_ExtractBytesInLane
827
+ KeccakP1600_ExtractBytes_Exit:
828
+ pop {r4 - r8, pc}
829
+ KeccakP1600_ExtractBytes_Exit1:
830
+ bx lr
831
+
832
+
833
+ @----------------------------------------------------------------------------
834
+ @
835
+ @ __KeccakP1600_ExtractLanes
836
+ @
837
+ @ Input:
838
+ @ r0 state pointer
839
+ @ r1 data pointer
840
+ @ r2 laneCount
841
+ @
842
+ @ Output:
843
+ @ r0 state pointer next lane
844
+ @ r1 data pointer next byte to input
845
+ @
846
+ @ Changed: r2-r5
847
+ @
848
+ .align 8
849
+ __KeccakP1600_ExtractLanes:
850
+ __KeccakP1600_ExtractLanes_LoopAligned:
851
+ ldrd r4, r5, [r0], #8
852
+ fromBitInterleaving r4, r5, r3
853
+ str r4, [r1], #4
854
+ subs r2, r2, #1
855
+ str r5, [r1], #4
856
+ bne __KeccakP1600_ExtractLanes_LoopAligned
857
+ bx lr
858
+
859
+
860
+ @----------------------------------------------------------------------------
861
+ @
862
+ @ __KeccakP1600_ExtractBytesInLane
863
+ @
864
+ @ Input:
865
+ @ r0 state pointer
866
+ @ r1 data pointer
867
+ @ r2 offset in lane
868
+ @ r3 length
869
+ @
870
+ @ Output:
871
+ @ r0 state pointer next lane
872
+ @ r1 data pointer next byte to input
873
+ @
874
+ @ Changed: r2-r6
875
+ @
876
+ .align 8
877
+ __KeccakP1600_ExtractBytesInLane:
878
+ ldrd r4, r5, [r0], #8
879
+ fromBitInterleaving r4, r5, r6
880
+ push {r4, r5}
881
+ add r2, sp, r2
882
+ __KeccakP1600_ExtractBytesInLane_Loop:
883
+ ldrb r4, [r2], #1
884
+ subs r3, r3, #1
885
+ strb r4, [r1], #1
886
+ bne __KeccakP1600_ExtractBytesInLane_Loop
887
+ add sp, #8
888
+ bx lr
889
+
890
+
891
+ @----------------------------------------------------------------------------
892
+ @
893
+ @ void KeccakP1600_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
894
+ @
895
+ .align 8
896
+ .global KeccakP1600_ExtractAndAddBytes
897
+ .type KeccakP1600_ExtractAndAddBytes, %function;
898
+ KeccakP1600_ExtractAndAddBytes:
899
+ push {r4 - r10, lr}
900
+ mov r9, r2
901
+ mov r2, r3
902
+ ldr r3, [sp, #8*4]
903
+ cbz r3, KeccakP1600_ExtractAndAddBytes_Exit @ .if length != 0
904
+ bic r4, r2, #7 @ then, offset &= ~7
905
+ adds r0, r0, r4 @ add whole lane offset to state pointer
906
+ ands r2, r2, #7 @ offset &= 7 (part not lane aligned)
907
+ beq KeccakP1600_ExtractAndAddBytes_CheckLanes @ .if offset != 0
908
+ movs r4, r3 @ then, do remaining bytes in first lane
909
+ rsb r5, r2, #8 @ max size in lane = 8 - offset
910
+ cmp r4, r5
911
+ ble KeccakP1600_ExtractAndAddBytes_BytesAlign
912
+ movs r4, r5
913
+ KeccakP1600_ExtractAndAddBytes_BytesAlign:
914
+ sub r8, r3, r4 @ size left
915
+ movs r3, r4
916
+ bl __KeccakP1600_ExtractAndAddBytesInLane
917
+ mov r3, r8
918
+ KeccakP1600_ExtractAndAddBytes_CheckLanes:
919
+ lsrs r2, r3, #3 @ .if length >= 8
920
+ beq KeccakP1600_ExtractAndAddBytes_Bytes
921
+ mov r8, r3
922
+ bl __KeccakP1600_ExtractAndAddLanes
923
+ and r3, r8, #7
924
+ KeccakP1600_ExtractAndAddBytes_Bytes:
925
+ cbz r3, KeccakP1600_ExtractAndAddBytes_Exit
926
+ movs r2, #0
927
+ bl __KeccakP1600_ExtractAndAddBytesInLane
928
+ KeccakP1600_ExtractAndAddBytes_Exit:
929
+ pop {r4 - r10, pc}
930
+
931
+
932
+ @----------------------------------------------------------------------------
933
+ @
934
+ @ __KeccakP1600_ExtractAndAddLanes
935
+ @
936
+ @ Input:
937
+ @ r0 state pointer
938
+ @ r1 input pointer
939
+ @ r9 output pointer
940
+ @ r2 laneCount
941
+ @
942
+ @ Output:
943
+ @ r0 state pointer next lane
944
+ @ r1 input pointer next 32-bit word
945
+ @ r9 output pointer next 32-bit word
946
+ @
947
+ @ Changed: r2-r5
948
+ @
949
+ .align 8
950
+ __KeccakP1600_ExtractAndAddLanes:
951
+ __KeccakP1600_ExtractAndAddLanes_LoopAligned:
952
+ ldrd r4, r5, [r0], #8
953
+ fromBitInterleaving r4, r5, r3
954
+ ldr r3, [r1], #4
955
+ eors r4, r4, r3
956
+ str r4, [r9], #4
957
+ ldr r3, [r1], #4
958
+ eors r5, r5, r3
959
+ subs r2, r2, #1
960
+ str r5, [r9], #4
961
+ bne __KeccakP1600_ExtractAndAddLanes_LoopAligned
962
+ bx lr
963
+
964
+
965
+ @----------------------------------------------------------------------------
966
+ @
967
+ @ __KeccakP1600_ExtractAndAddBytesInLane
968
+ @
969
+ @ Input:
970
+ @ r0 state pointer
971
+ @ r1 input pointer
972
+ @ r9 output pointer
973
+ @ r2 offset in lane
974
+ @ r3 length
975
+ @
976
+ @ Output:
977
+ @ r0 state pointer next lane
978
+ @ r1 input pointer next byte
979
+ @ r9 output pointer next byte
980
+ @
981
+ @ Changed: r2-r6
982
+ @
983
+ .align 8
984
+ __KeccakP1600_ExtractAndAddBytesInLane:
985
+ ldrd r4, r5, [r0], #8
986
+ fromBitInterleaving r4, r5, r6
987
+ push {r4, r5}
988
+ add r2, sp, r2
989
+ __KeccakP1600_ExtractAndAddBytesInLane_Loop:
990
+ ldrb r4, [r2], #1
991
+ ldrb r5, [r1], #1
992
+ eors r4, r4, r5
993
+ subs r3, r3, #1
994
+ strb r4, [r9], #1
995
+ bne __KeccakP1600_ExtractAndAddBytesInLane_Loop
996
+ add sp, #8
997
+ bx lr
998
+
999
+
1000
+ .macro SwapPI13 in0,in1,in2,in3,eo0,eo1,eo2,eo3
1001
+ ldr r3, [r0, #\in0+0]
1002
+ ldr r4, [r0, #\in0+4]
1003
+ ldr r2, [r0, #\in1+0]
1004
+ ldr r1, [r0, #\in1+4]
1005
+ str r2, [r0, #\in0+\eo0*4]
1006
+ str r1, [r0, #\in0+(\eo0^1)*4]
1007
+ ldr r2, [r0, #\in2+0]
1008
+ ldr r1, [r0, #\in2+4]
1009
+ str r2, [r0, #\in1+\eo1*4]
1010
+ str r1, [r0, #\in1+(\eo1^1)*4]
1011
+ ldr r2, [r0, #\in3+0]
1012
+ ldr r1, [r0, #\in3+4]
1013
+ str r2, [r0, #\in2+\eo2*4]
1014
+ str r1, [r0, #\in2+(\eo2^1)*4]
1015
+ str r3, [r0, #\in3+\eo3*4]
1016
+ str r4, [r0, #\in3+(\eo3^1)*4]
1017
+ .endm
1018
+
1019
+ .macro SwapPI2 in0,in1,in2,in3
1020
+ ldr r3, [r0, #\in0+0]
1021
+ ldr r4, [r0, #\in0+4]
1022
+ ldr r2, [r0, #\in1+0]
1023
+ ldr r1, [r0, #\in1+4]
1024
+ str r2, [r0, #\in0+4]
1025
+ str r1, [r0, #\in0+0]
1026
+ str r3, [r0, #\in1+4]
1027
+ str r4, [r0, #\in1+0]
1028
+ ldr r3, [r0, #\in2+0]
1029
+ ldr r4, [r0, #\in2+4]
1030
+ ldr r2, [r0, #\in3+0]
1031
+ ldr r1, [r0, #\in3+4]
1032
+ str r2, [r0, #\in2+4]
1033
+ str r1, [r0, #\in2+0]
1034
+ str r3, [r0, #\in3+4]
1035
+ str r4, [r0, #\in3+0]
1036
+ .endm
1037
+
1038
+ .macro SwapEO even,odd
1039
+ ldr r3, [r0, #\even]
1040
+ ldr r4, [r0, #\odd]
1041
+ str r3, [r0, #\odd]
1042
+ str r4, [r0, #\even]
1043
+ .endm
1044
+
1045
+ @ ----------------------------------------------------------------------------
1046
+ @
1047
+ @ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds)
1048
+ @
1049
+ .align 8
1050
+ .global KeccakP1600_Permute_Nrounds
1051
+ .type KeccakP1600_Permute_Nrounds, %function;
1052
+ KeccakP1600_Permute_Nrounds:
1053
+ lsls r3, r1, #30
1054
+ bne KeccakP1600_Permute_NroundsNotMultiple4
1055
+ lsls r2, r1, #3
1056
+ adr r1, KeccakP1600_Permute_RoundConstants0Mod4
1057
+ subs r1, r1, r2
1058
+ b KeccakP1600_Permute
1059
+ KeccakP1600_Permute_NroundsNotMultiple4: @ nrounds not multiple of 4
1060
+ push { r4 - r12, lr }
1061
+ sub sp, #mSize
1062
+ lsrs r2, r1, #2
1063
+ lsls r2, r2, #3+2
1064
+ adr r1, KeccakP1600_Permute_RoundConstants0
1065
+ subs r1, r1, r2
1066
+ str r1, [sp, #mRC]
1067
+ lsls r3, r3, #1
1068
+ bcs KeccakP1600_Permute_Nrounds23Mod4
1069
+ KeccakP1600_Permute_Nrounds1Mod4:
1070
+ SwapPI13 Aga0, Aka0, Asa0, Ama0, 1, 0, 1, 0
1071
+ SwapPI13 Abe0, Age0, Ame0, Ake0, 0, 1, 0, 1
1072
+ SwapPI13 Abi0, Aki0, Agi0, Asi0, 1, 0, 1, 0
1073
+ SwapEO Ami0, Ami1
1074
+ SwapPI13 Abo0, Amo0, Aso0, Ago0, 1, 0, 1, 0
1075
+ SwapEO Ako0, Ako1
1076
+ SwapPI13 Abu0, Asu0, Aku0, Amu0, 0, 1, 0, 1
1077
+ b.w KeccakP1600_Permute_Round1Mod4
1078
+ KeccakP1600_Permute_Nrounds23Mod4:
1079
+ bpl KeccakP1600_Permute_Nrounds2Mod4
1080
+ KeccakP1600_Permute_Nrounds3Mod4:
1081
+ SwapPI13 Aga0, Ama0, Asa0, Aka0, 0, 1, 0, 1
1082
+ SwapPI13 Abe0, Ake0, Ame0, Age0, 1, 0, 1, 0
1083
+ SwapPI13 Abi0, Asi0, Agi0, Aki0, 0, 1, 0, 1
1084
+ SwapEO Ami0, Ami1
1085
+ SwapPI13 Abo0, Ago0, Aso0, Amo0, 0, 1, 0, 1
1086
+ SwapEO Ako0, Ako1
1087
+ SwapPI13 Abu0, Amu0, Aku0, Asu0, 1, 0, 1, 0
1088
+ b.w KeccakP1600_Permute_Round3Mod4
1089
+ KeccakP1600_Permute_Nrounds2Mod4:
1090
+ SwapPI2 Aga0, Asa0, Aka0, Ama0
1091
+ SwapPI2 Abe0, Ame0, Age0, Ake0
1092
+ SwapPI2 Abi0, Agi0, Aki0, Asi0
1093
+ SwapPI2 Abo0, Aso0, Ago0, Amo0
1094
+ SwapPI2 Abu0, Aku0, Amu0, Asu0
1095
+ b.w KeccakP1600_Permute_Round2Mod4
1096
+
1097
+
1098
+ @ ----------------------------------------------------------------------------
1099
+ @
1100
+ @ void KeccakP1600_Permute_12rounds( void *state )
1101
+ @
1102
+ .align 8
1103
+ .global KeccakP1600_Permute_12rounds
1104
+ .type KeccakP1600_Permute_12rounds, %function;
1105
+ KeccakP1600_Permute_12rounds:
1106
+ adr r1, KeccakP1600_Permute_RoundConstants12
1107
+ b KeccakP1600_Permute
1108
+
1109
+
1110
+ @ ----------------------------------------------------------------------------
1111
+ @
1112
+ @ void KeccakP1600_Permute_24rounds( void *state )
1113
+ @
1114
+ .align 8
1115
+ .global KeccakP1600_Permute_24rounds
1116
+ .type KeccakP1600_Permute_24rounds, %function;
1117
+ KeccakP1600_Permute_24rounds:
1118
+ adr r1, KeccakP1600_Permute_RoundConstants24
1119
+ b KeccakP1600_Permute
1120
+
1121
+
1122
+ .align 8
1123
+ KeccakP1600_Permute_RoundConstants24:
1124
+ @ 0 1
1125
+ .long 0x00000001, 0x00000000
1126
+ .long 0x00000000, 0x00000089
1127
+ .long 0x00000000, 0x8000008b
1128
+ .long 0x00000000, 0x80008080
1129
+ .long 0x00000001, 0x0000008b
1130
+ .long 0x00000001, 0x00008000
1131
+ .long 0x00000001, 0x80008088
1132
+ .long 0x00000001, 0x80000082
1133
+ .long 0x00000000, 0x0000000b
1134
+ .long 0x00000000, 0x0000000a
1135
+ .long 0x00000001, 0x00008082
1136
+ .long 0x00000000, 0x00008003
1137
+ KeccakP1600_Permute_RoundConstants12:
1138
+ .long 0x00000001, 0x0000808b
1139
+ .long 0x00000001, 0x8000000b
1140
+ .long 0x00000001, 0x8000008a
1141
+ .long 0x00000001, 0x80000081
1142
+ .long 0x00000000, 0x80000081
1143
+ .long 0x00000000, 0x80000008
1144
+ .long 0x00000000, 0x00000083
1145
+ .long 0x00000000, 0x80008003
1146
+ KeccakP1600_Permute_RoundConstants0:
1147
+ .long 0x00000001, 0x80008088
1148
+ .long 0x00000000, 0x80000088
1149
+ .long 0x00000001, 0x00008000
1150
+ .long 0x00000000, 0x80008082
1151
+ KeccakP1600_Permute_RoundConstants0Mod4:
1152
+ .long 0x000000FF @terminator
1153
+
1154
+ @----------------------------------------------------------------------------
1155
+ @
1156
+ @ void KeccakP1600_Permute( void *state, void * rc )
1157
+ @
1158
+ .align 8
1159
+ KeccakP1600_Permute:
1160
+ push { r4 - r12, lr }
1161
+ sub sp, #mSize
1162
+ str r1, [sp, #mRC]
1163
+ KeccakP1600_Permute_RoundLoop:
1164
+ KeccakRound0
1165
+ KeccakP1600_Permute_Round3Mod4:
1166
+ KeccakRound1
1167
+ KeccakP1600_Permute_Round2Mod4:
1168
+ KeccakRound2
1169
+ KeccakP1600_Permute_Round1Mod4:
1170
+ KeccakRound3
1171
+ bne KeccakP1600_Permute_RoundLoop
1172
+ add sp, #mSize
1173
+ pop { r4 - r12, pc }
1174
+
1175
+