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