sleeping_kangaroo12 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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