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