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,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