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,831 @@
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: These functions work only on little endian CPU with@ ARMv7A + NEON architecture
26
+ @ WARNING: State must be 256 bit (32 bytes) aligned, best is 64-byte (cache alignment).
27
+ @ INFO: Tested on Cortex-A8 (BeagleBone Black), using gcc.
28
+
29
+
30
+ .text
31
+
32
+ @ conditional assembly settings
33
+ .equ LoopUnroll , 1 @ possible values 1, 2, 4, 6, 12
34
+
35
+ @ offsets in state
36
+ .equ _ba , 0*8
37
+ .equ _be , 1*8
38
+ .equ _bi , 2*8
39
+ .equ _bo , 3*8
40
+ .equ _bu , 4*8
41
+ .equ _ga , 5*8
42
+ .equ _ge , 6*8
43
+ .equ _gi , 7*8
44
+ .equ _go , 8*8
45
+ .equ _gu , 9*8
46
+ .equ _ka , 10*8
47
+ .equ _ke , 11*8
48
+ .equ _ki , 12*8
49
+ .equ _ko , 13*8
50
+ .equ _ku , 14*8
51
+ .equ _ma , 15*8
52
+ .equ _me , 16*8
53
+ .equ _mi , 17*8
54
+ .equ _mo , 18*8
55
+ .equ _mu , 19*8
56
+ .equ _sa , 20*8
57
+ .equ _se , 21*8
58
+ .equ _si , 22*8
59
+ .equ _so , 23*8
60
+ .equ _su , 24*8
61
+
62
+ @ macros
63
+
64
+ .macro LoadState
65
+ vld1.64 d0, [r0:64]!
66
+ vld1.64 d2, [r0:64]!
67
+ vld1.64 d4, [r0:64]!
68
+ vld1.64 d6, [r0:64]!
69
+ vld1.64 d8, [r0:64]!
70
+ vld1.64 d1, [r0:64]!
71
+ vld1.64 d3, [r0:64]!
72
+ vld1.64 d5, [r0:64]!
73
+ vld1.64 d7, [r0:64]!
74
+ vld1.64 d9, [r0:64]!
75
+ vld1.64 d10, [r0:64]!
76
+ vld1.64 d12, [r0:64]!
77
+ vld1.64 d14, [r0:64]!
78
+ vld1.64 d16, [r0:64]!
79
+ vld1.64 d18, [r0:64]!
80
+ vld1.64 d11, [r0:64]!
81
+ vld1.64 d13, [r0:64]!
82
+ vld1.64 d15, [r0:64]!
83
+ vld1.64 d17, [r0:64]!
84
+ vld1.64 d19, [r0:64]!
85
+ vld1.64 { d20, d21 }, [r0:128]!
86
+ vld1.64 { d22, d23 }, [r0:128]!
87
+ vld1.64 d24, [r0:64]
88
+ sub r0, r0, #24*8
89
+ .endm
90
+
91
+ .macro StoreState
92
+ vst1.64 d0, [r0:64]!
93
+ vst1.64 d2, [r0:64]!
94
+ vst1.64 d4, [r0:64]!
95
+ vst1.64 d6, [r0:64]!
96
+ vst1.64 d8, [r0:64]!
97
+ vst1.64 d1, [r0:64]!
98
+ vst1.64 d3, [r0:64]!
99
+ vst1.64 d5, [r0:64]!
100
+ vst1.64 d7, [r0:64]!
101
+ vst1.64 d9, [r0:64]!
102
+ vst1.64 d10, [r0:64]!
103
+ vst1.64 d12, [r0:64]!
104
+ vst1.64 d14, [r0:64]!
105
+ vst1.64 d16, [r0:64]!
106
+ vst1.64 d18, [r0:64]!
107
+ vst1.64 d11, [r0:64]!
108
+ vst1.64 d13, [r0:64]!
109
+ vst1.64 d15, [r0:64]!
110
+ vst1.64 d17, [r0:64]!
111
+ vst1.64 d19, [r0:64]!
112
+ vst1.64 { d20, d21 }, [r0:128]!
113
+ vst1.64 { d22, d23 }, [r0:128]!
114
+ vst1.64 d24, [r0:64]
115
+ .endm
116
+
117
+ .macro RhoPi4 dst1, src1, rot1, dst2, src2, rot2, dst3, src3, rot3, dst4, src4, rot4
118
+ .if (\rot1 & 7) != 0
119
+ vshl.u64 \dst1, \src1, #\rot1
120
+ .else
121
+ vext.8 \dst1, \src1, \src1, #8-\rot1/8
122
+ .endif
123
+ .if (\rot2 & 7) != 0
124
+ vshl.u64 \dst2, \src2, #\rot2
125
+ .else
126
+ vext.8 \dst2, \src2, \src2, #8-\rot2/8
127
+ .endif
128
+ .if (\rot3 & 7) != 0
129
+ vshl.u64 \dst3, \src3, #\rot3
130
+ .else
131
+ vext.8 \dst3, \src3, \src3, #8-\rot3/8
132
+ .endif
133
+ .if (\rot4 & 7) != 0
134
+ vshl.u64 \dst4, \src4, #\rot4
135
+ .else
136
+ vext.8 \dst4, \src4, \src4, #8-\rot4/8
137
+ .endif
138
+ .if (\rot1 & 7) != 0
139
+ vsri.u64 \dst1, \src1, #64-\rot1
140
+ .endif
141
+ .if (\rot2 & 7) != 0
142
+ vsri.u64 \dst2, \src2, #64-\rot2
143
+ .endif
144
+ .if (\rot3 & 7) != 0
145
+ vsri.u64 \dst3, \src3, #64-\rot3
146
+ .endif
147
+ .if (\rot4 & 7) != 0
148
+ vsri.u64 \dst4, \src4, #64-\rot4
149
+ .endif
150
+ .endm
151
+
152
+ .macro KeccakRound
153
+
154
+ @Prepare Theta
155
+ veor.64 q13, q0, q5
156
+ vst1.64 {q12}, [r0:128]!
157
+ veor.64 q14, q1, q6
158
+ vst1.64 {q4}, [r0:128]!
159
+ veor.64 d26, d26, d27
160
+ vst1.64 {q9}, [r0:128]
161
+ veor.64 d28, d28, d29
162
+ veor.64 d26, d26, d20
163
+ veor.64 d27, d28, d21
164
+
165
+ veor.64 q14, q2, q7
166
+ veor.64 q15, q3, q8
167
+ veor.64 q4, q4, q9
168
+ veor.64 d28, d28, d29
169
+ veor.64 d30, d30, d31
170
+ veor.64 d25, d8, d9
171
+ veor.64 d28, d28, d22
172
+ veor.64 d29, d30, d23
173
+ veor.64 d25, d25, d24
174
+ sub r0, r0, #32
175
+
176
+ @Apply Theta
177
+ vadd.u64 d30, d27, d27
178
+ vadd.u64 d24, d28, d28
179
+ vadd.u64 d8, d29, d29
180
+ vadd.u64 d18, d25, d25
181
+
182
+ vsri.64 d30, d27, #63
183
+ vsri.64 d24, d28, #63
184
+ vsri.64 d8, d29, #63
185
+ vsri.64 d18, d25, #63
186
+
187
+ veor.64 d30, d30, d25
188
+ veor.64 d24, d24, d26
189
+ veor.64 d8, d8, d27
190
+ vadd.u64 d27, d26, d26 @u
191
+ veor.64 d18, d18, d28
192
+
193
+ vmov.i64 d31, d30
194
+ vmov.i64 d25, d24
195
+ vsri.64 d27, d26, #63 @u
196
+ vmov.i64 d9, d8
197
+ vmov.i64 d19, d18
198
+
199
+ veor.64 d20, d20, d30
200
+ veor.64 d21, d21, d24
201
+ veor.64 d27, d27, d29 @u
202
+ veor.64 d22, d22, d8
203
+ veor.64 d23, d23, d18
204
+ vmov.i64 d26, d27 @u
205
+
206
+ veor.64 q0, q0, q15
207
+ veor.64 q1, q1, q12
208
+ veor.64 q2, q2, q4
209
+ veor.64 q3, q3, q9
210
+
211
+ veor.64 q5, q5, q15
212
+ veor.64 q6, q6, q12
213
+ vld1.64 {q12}, [r0:128]!
214
+ veor.64 q7, q7, q4
215
+ vld1.64 {q4}, [r0:128]!
216
+ veor.64 q8, q8, q9
217
+ vld1.64 {q9}, [r0:128]
218
+ veor.64 d24, d24, d26 @u
219
+ sub r0, r0, #32
220
+ veor.64 q4, q4, q13 @u
221
+ veor.64 q9, q9, q13 @u
222
+
223
+ @Rho Pi
224
+ vmov.i64 d27, d2
225
+ vmov.i64 d28, d4
226
+ vmov.i64 d29, d6
227
+ vmov.i64 d25, d8
228
+
229
+ RhoPi4 d2, d3, 44, d4, d14, 43, d8, d24, 14, d6, d17, 21 @ 1 < 6, 2 < 12, 4 < 24, 3 < 18
230
+ RhoPi4 d3, d9, 20, d14, d16, 25, d24, d21, 2, d17, d15, 15 @ 6 < 9, 12 < 13, 24 < 21, 18 < 17
231
+ RhoPi4 d9, d22, 61, d16, d19, 8, d21, d7, 55, d15, d12, 10 @ 9 < 22, 13 < 19, 21 < 8, 17 < 11
232
+ RhoPi4 d22, d18, 39, d19, d23, 56, d7, d13, 45, d12, d5, 6 @ 22 < 14, 19 < 23, 8 < 16, 11 < 7
233
+ RhoPi4 d18, d20, 18, d23, d11, 41, d13, d1, 36, d5, d10, 3 @ 14 < 20, 23 < 15, 16 < 5, 7 < 10
234
+ RhoPi4 d20, d28, 62, d11, d25, 27, d1, d29, 28, d10, d27, 1 @ 20 < 2, 15 < 4, 5 < 3, 10 < 1
235
+
236
+ @Chi b+g
237
+ vmov.i64 q13, q0
238
+ vbic.64 q15, q2, q1 @ ba ^= ~be & bi
239
+ veor.64 q0, q15
240
+ vmov.i64 q14, q1
241
+ vbic.64 q15, q3, q2 @ be ^= ~bi & bo
242
+ veor.64 q1, q15
243
+ vbic.64 q15, q4, q3 @ bi ^= ~bo & bu
244
+ veor.64 q2, q15
245
+ vbic.64 q15, q13, q4 @ bo ^= ~bu & ba
246
+ vbic.64 q13, q14, q13 @ bu ^= ~ba & be
247
+ veor.64 q3, q15
248
+ veor.64 q4, q13
249
+
250
+ @Chi k+m
251
+ vmov.i64 q13, q5
252
+ vbic.64 q15, q7, q6 @ ba ^= ~be & bi
253
+ veor.64 q5, q15
254
+ vmov.i64 q14, q6
255
+ vbic.64 q15, q8, q7 @ be ^= ~bi & bo
256
+ veor.64 q6, q15
257
+ vbic.64 q15, q9, q8 @ bi ^= ~bo & bu
258
+ veor.64 q7, q15
259
+ vbic.64 q15, q13, q9 @ bo ^= ~bu & ba
260
+ vbic.64 q13, q14, q13 @ bu ^= ~ba & be
261
+ veor.64 q8, q15
262
+ veor.64 q9, q13
263
+
264
+ @Chi s
265
+ vmov.i64 q13, q10
266
+ vbic.64 d30, d22, d21 @ ba ^= ~be & bi
267
+ vbic.64 d31, d23, d22 @ be ^= ~bi & bo
268
+ veor.64 q10, q15
269
+ vbic.64 d30, d24, d23 @ bi ^= ~bo & bu
270
+ vbic.64 d31, d26, d24 @ bo ^= ~bu & ba
271
+ vbic.64 d26, d27, d26 @ bu ^= ~ba & be
272
+ veor.64 q11, q15
273
+ vld1.64 d30, [r1:64]! @ Iota
274
+ veor.64 d24, d26
275
+ veor.64 d0, d0, d30 @ Iota
276
+ .endm
277
+
278
+ @----------------------------------------------------------------------------
279
+ @
280
+ @ void KeccakP1600_StaticInitialize( void )
281
+ @
282
+ .align 8
283
+ .global KeccakP1600_StaticInitialize
284
+ .type KeccakP1600_StaticInitialize, %function;
285
+ KeccakP1600_StaticInitialize:
286
+ bx lr
287
+
288
+
289
+ @----------------------------------------------------------------------------
290
+ @
291
+ @ void KeccakP1600_Initialize(void *state)
292
+ @
293
+ .align 8
294
+ .global KeccakP1600_Initialize
295
+ .type KeccakP1600_Initialize, %function;
296
+ KeccakP1600_Initialize:
297
+ vmov.i64 q0, #0
298
+ vmov.i64 q1, #0
299
+ vmov.i64 q2, #0
300
+ vmov.i64 q3, #0
301
+ vstm r0!, { d0 - d7 } @ clear 8 lanes at a time
302
+ vstm r0!, { d0 - d7 }
303
+ vstm r0!, { d0 - d7 }
304
+ vstm r0!, { d0 }
305
+ bx lr
306
+
307
+
308
+ @ ----------------------------------------------------------------------------
309
+ @
310
+ @ void KeccakP1600_AddByte(void *state, unsigned char byte, unsigned int offset)
311
+ @
312
+ .align 8
313
+ .global KeccakP1600_AddByte
314
+ .type KeccakP1600_AddByte, %function;
315
+ KeccakP1600_AddByte:
316
+ ldrb r3, [r0, r2]
317
+ eors r3, r3, r1
318
+ strb r3, [r0, r2]
319
+ bx lr
320
+
321
+
322
+ @ ----------------------------------------------------------------------------
323
+ @
324
+ @ void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
325
+ @
326
+ .align 8
327
+ .global KeccakP1600_AddBytes
328
+ .type KeccakP1600_AddBytes, %function;
329
+ KeccakP1600_AddBytes:
330
+ push {r4,lr}
331
+ adds r0, r0, r2 @ state += offset
332
+ subs r3, r3, #8 @ .if length >= lane size
333
+ bcc KeccakP1600_AddBytes_Bytes
334
+ KeccakP1600_AddBytes_LanesLoop: @ then, perform on lanes
335
+ ldr r2, [r0]
336
+ ldr r4, [r1], #4
337
+ ldr r12, [r0, #4]
338
+ ldr lr, [r1], #4
339
+ eors r2, r2, r4
340
+ eors r12, r12, lr
341
+ subs r3, r3, #8
342
+ str r2, [r0], #4
343
+ str r12, [r0], #4
344
+ bcs KeccakP1600_AddBytes_LanesLoop
345
+ KeccakP1600_AddBytes_Bytes:
346
+ adds r3, r3, #7
347
+ bcc KeccakP1600_AddBytes_Exit
348
+ KeccakP1600_AddBytes_BytesLoop:
349
+ ldrb r2, [r0]
350
+ ldrb r4, [r1], #1
351
+ eors r2, r2, r4
352
+ strb r2, [r0], #1
353
+ subs r3, r3, #1
354
+ bcs KeccakP1600_AddBytes_BytesLoop
355
+ KeccakP1600_AddBytes_Exit:
356
+ pop {r4,pc}
357
+
358
+
359
+ @ ----------------------------------------------------------------------------
360
+ @
361
+ @ void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
362
+ @
363
+ .align 8
364
+ .global KeccakP1600_OverwriteBytes
365
+ .type KeccakP1600_OverwriteBytes, %function;
366
+ KeccakP1600_OverwriteBytes:
367
+ adds r0, r0, r2 @ state += offset
368
+ subs r3, r3, #8 @ .if length >= lane size
369
+ bcc KeccakP1600_OverwriteBytes_Bytes
370
+ KeccakP1600_OverwriteBytes_LanesLoop: @ then, perform on lanes
371
+ ldr r2, [r1], #4
372
+ ldr r12, [r1], #4
373
+ subs r3, r3, #8
374
+ str r2, [r0], #4
375
+ str r12, [r0], #4
376
+ bcs KeccakP1600_OverwriteBytes_LanesLoop
377
+ KeccakP1600_OverwriteBytes_Bytes:
378
+ adds r3, r3, #7
379
+ bcc KeccakP1600_OverwriteBytes_Exit
380
+ KeccakP1600_OverwriteBytes_BytesLoop:
381
+ ldrb r2, [r1], #1
382
+ subs r3, r3, #1
383
+ strb r2, [r0], #1
384
+ bcs KeccakP1600_OverwriteBytes_BytesLoop
385
+ KeccakP1600_OverwriteBytes_Exit:
386
+ bx lr
387
+
388
+
389
+ @----------------------------------------------------------------------------
390
+ @
391
+ @ void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
392
+ @
393
+ .align 8
394
+ .global KeccakP1600_OverwriteWithZeroes
395
+ .type KeccakP1600_OverwriteWithZeroes, %function;
396
+ KeccakP1600_OverwriteWithZeroes:
397
+ lsrs r2, r1, #3
398
+ beq KeccakP1600_OverwriteWithZeroes_Bytes
399
+ vmov.i64 d0, #0
400
+ KeccakP1600_OverwriteWithZeroes_LoopLanes:
401
+ subs r2, r2, #1
402
+ vstm r0!, { d0 }
403
+ bne KeccakP1600_OverwriteWithZeroes_LoopLanes
404
+ KeccakP1600_OverwriteWithZeroes_Bytes:
405
+ ands r1, #7
406
+ beq KeccakP1600_OverwriteWithZeroes_Exit
407
+ movs r3, #0
408
+ KeccakP1600_OverwriteWithZeroes_LoopBytes:
409
+ subs r1, r1, #1
410
+ strb r3, [r0], #1
411
+ bne KeccakP1600_OverwriteWithZeroes_LoopBytes
412
+ KeccakP1600_OverwriteWithZeroes_Exit:
413
+ bx lr
414
+
415
+
416
+ @ ----------------------------------------------------------------------------
417
+ @
418
+ @ void KeccakP1600_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
419
+ @
420
+ .align 8
421
+ .global KeccakP1600_ExtractBytes
422
+ .type KeccakP1600_ExtractBytes, %function;
423
+ KeccakP1600_ExtractBytes:
424
+ adds r0, r0, r2 @ state += offset
425
+ subs r3, r3, #8 @ .if length >= lane size
426
+ bcc KeccakP1600_ExtractBytes_Bytes
427
+ KeccakP1600_ExtractBytes_LanesLoop: @ then, handle lanes
428
+ ldr r2, [r0], #4
429
+ ldr r12, [r0], #4
430
+ subs r3, r3, #8
431
+ str r2, [r1], #4
432
+ str r12, [r1], #4
433
+ bcs KeccakP1600_ExtractBytes_LanesLoop
434
+ KeccakP1600_ExtractBytes_Bytes:
435
+ adds r3, r3, #7
436
+ bcc KeccakP1600_ExtractBytes_Exit
437
+ KeccakP1600_ExtractBytes_BytesLoop:
438
+ ldrb r2, [r0], #1
439
+ subs r3, r3, #1
440
+ strb r2, [r1], #1
441
+ bcs KeccakP1600_ExtractBytes_BytesLoop
442
+ KeccakP1600_ExtractBytes_Exit:
443
+ bx lr
444
+
445
+
446
+ @ ----------------------------------------------------------------------------
447
+ @
448
+ @ void KeccakP800_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
449
+ @
450
+ .align 8
451
+ .global KeccakP1600_ExtractAndAddBytes
452
+ .type KeccakP1600_ExtractAndAddBytes, %function;
453
+ KeccakP1600_ExtractAndAddBytes:
454
+ push {r4,r5}
455
+ add r0, r0, r3 @ state += offset (offset register no longer needed, reuse for length)
456
+ ldr r3, [sp, #8] @ get length argument from stack
457
+ subs r3, r3, #8 @ .if length >= lane size
458
+ bcc KeccakP1600_ExtractAndAddBytes_Bytes
459
+ KeccakP1600_ExtractAndAddBytes_LanesLoop: @ then, handle lanes
460
+ ldr r5, [r0], #4
461
+ ldr r4, [r1], #4
462
+ eor r5, r5, r4
463
+ str r5, [r2], #4
464
+ subs r3, r3, #8
465
+ ldr r5, [r0], #4
466
+ ldr r4, [r1], #4
467
+ eor r5, r5, r4
468
+ str r5, [r2], #4
469
+ bcs KeccakP1600_ExtractAndAddBytes_LanesLoop
470
+ KeccakP1600_ExtractAndAddBytes_Bytes:
471
+ adds r3, r3, #7
472
+ bcc KeccakP1600_ExtractAndAddBytes_Exit
473
+ KeccakP1600_ExtractAndAddBytes_BytesLoop:
474
+ ldrb r5, [r0], #1
475
+ ldrb r4, [r1], #1
476
+ eor r5, r5, r4
477
+ strb r5, [r2], #1
478
+ subs r3, r3, #1
479
+ bcs KeccakP1600_ExtractAndAddBytes_BytesLoop
480
+ KeccakP1600_ExtractAndAddBytes_Exit:
481
+ pop {r4,r5}
482
+ bx lr
483
+
484
+
485
+ @ ----------------------------------------------------------------------------
486
+ @
487
+ @ void KeccakP1600_Permute_Nrounds(void *state, unsigned int nrounds)
488
+ @
489
+ .align 8
490
+ .global KeccakP1600_Permute_Nrounds
491
+ .type KeccakP1600_Permute_Nrounds, %function;
492
+ KeccakP1600_Permute_Nrounds:
493
+ movs r2, r1
494
+ adr r1, KeccakP1600_Permute_RoundConstants0
495
+ sub r1, r1, r2, LSL #3
496
+ b KeccakP1600_Permute
497
+
498
+
499
+ @ ----------------------------------------------------------------------------
500
+ @
501
+ @ void KeccakP1600_Permute_12rounds( void *state )
502
+ @
503
+ .align 8
504
+ .global KeccakP1600_Permute_12rounds
505
+ .type KeccakP1600_Permute_12rounds, %function;
506
+ KeccakP1600_Permute_12rounds:
507
+ adr r1, KeccakP1600_Permute_RoundConstants12
508
+ movs r2, #12
509
+ b KeccakP1600_Permute
510
+
511
+
512
+ @ ----------------------------------------------------------------------------
513
+ @
514
+ @ void KeccakP1600_Permute_24rounds( void *state )
515
+ @
516
+ .align 8
517
+ .global KeccakP1600_Permute_24rounds
518
+ .type KeccakP1600_Permute_24rounds, %function;
519
+ KeccakP1600_Permute_24rounds:
520
+ adr r1, KeccakP1600_Permute_RoundConstants24
521
+ movs r2, #24
522
+ b KeccakP1600_Permute
523
+
524
+
525
+ .align 8
526
+ KeccakP1600_Permute_RoundConstants24:
527
+ .quad 0x0000000000000001
528
+ .quad 0x0000000000008082
529
+ .quad 0x800000000000808a
530
+ .quad 0x8000000080008000
531
+ .quad 0x000000000000808b
532
+ .quad 0x0000000080000001
533
+ .quad 0x8000000080008081
534
+ .quad 0x8000000000008009
535
+ .quad 0x000000000000008a
536
+ .quad 0x0000000000000088
537
+ .quad 0x0000000080008009
538
+ .quad 0x000000008000000a
539
+ KeccakP1600_Permute_RoundConstants12:
540
+ .quad 0x000000008000808b
541
+ .quad 0x800000000000008b
542
+ .quad 0x8000000000008089
543
+ .quad 0x8000000000008003
544
+ .quad 0x8000000000008002
545
+ .quad 0x8000000000000080
546
+ .quad 0x000000000000800a
547
+ .quad 0x800000008000000a
548
+ .quad 0x8000000080008081
549
+ .quad 0x8000000000008080
550
+ .quad 0x0000000080000001
551
+ .quad 0x8000000080008008
552
+ KeccakP1600_Permute_RoundConstants0:
553
+
554
+ .align 8
555
+ KeccakP1600_XORandPermuteAsmOnly:
556
+
557
+ add pc, pc, r5, LSL #3
558
+ mov r1, #0 @ dummy instruction for PC alignment, not executed
559
+ veor.64 d0, d0, d30
560
+ b KeccakP1600_PermuteAsmOnly
561
+ veor.64 d2, d2, d30
562
+ b KeccakP1600_PermuteAsmOnly
563
+ veor.64 d4, d4, d30
564
+ b KeccakP1600_PermuteAsmOnly
565
+ veor.64 d6, d6, d30
566
+ b KeccakP1600_PermuteAsmOnly
567
+ veor.64 d8, d8, d30
568
+ b KeccakP1600_PermuteAsmOnly
569
+
570
+ veor.64 d1, d1, d30
571
+ b KeccakP1600_PermuteAsmOnly
572
+ veor.64 d3, d3, d30
573
+ b KeccakP1600_PermuteAsmOnly
574
+ veor.64 d5, d5, d30
575
+ b KeccakP1600_PermuteAsmOnly
576
+ veor.64 d7, d7, d30
577
+ b KeccakP1600_PermuteAsmOnly
578
+ veor.64 d9, d9, d30
579
+ b KeccakP1600_PermuteAsmOnly
580
+
581
+ veor.64 d10, d10, d30
582
+ b KeccakP1600_PermuteAsmOnly
583
+ veor.64 d12, d12, d30
584
+ b KeccakP1600_PermuteAsmOnly
585
+ veor.64 d14, d14, d30
586
+ b KeccakP1600_PermuteAsmOnly
587
+ veor.64 d16, d16, d30
588
+ b KeccakP1600_PermuteAsmOnly
589
+ veor.64 d18, d18, d30
590
+ b KeccakP1600_PermuteAsmOnly
591
+
592
+ veor.64 d11, d11, d30
593
+ b KeccakP1600_PermuteAsmOnly
594
+ veor.64 d13, d13, d30
595
+ b KeccakP1600_PermuteAsmOnly
596
+ veor.64 d15, d15, d30
597
+ b KeccakP1600_PermuteAsmOnly
598
+ veor.64 d17, d17, d30
599
+ b KeccakP1600_PermuteAsmOnly
600
+ veor.64 d19, d19, d30
601
+ b KeccakP1600_PermuteAsmOnly
602
+
603
+ veor.64 d20, d20, d30
604
+ b KeccakP1600_PermuteAsmOnly
605
+ veor.64 d21, d21, d30
606
+ b KeccakP1600_PermuteAsmOnly
607
+ veor.64 d22, d22, d30
608
+ b KeccakP1600_PermuteAsmOnly
609
+ veor.64 d23, d23, d30
610
+ b KeccakP1600_PermuteAsmOnly
611
+ veor.64 d24, d24, d30
612
+ KeccakP1600_PermuteAsmOnly:
613
+ KeccakP1600_Permute_RoundLoop:
614
+ KeccakRound
615
+ .if LoopUnroll > 1
616
+ KeccakRound
617
+ .if LoopUnroll > 2
618
+ KeccakRound
619
+ KeccakRound
620
+ .if LoopUnroll > 4
621
+ KeccakRound
622
+ KeccakRound
623
+ .if LoopUnroll > 6
624
+ KeccakRound
625
+ KeccakRound
626
+ KeccakRound
627
+ KeccakRound
628
+ KeccakRound
629
+ KeccakRound
630
+ .endif
631
+ .endif
632
+ .endif
633
+ .endif
634
+ subs r2, #LoopUnroll
635
+ bne KeccakP1600_Permute_RoundLoop
636
+ bx lr
637
+
638
+
639
+ @----------------------------------------------------------------------------
640
+ @
641
+ @ void KeccakP1600_Permute( void *state, void *roundConstants, unsigned int numberOfRounds )
642
+ @
643
+ .align 8
644
+ .global KeccakP1600_Permute
645
+ .type KeccakP1600_Permute, %function;
646
+ KeccakP1600_Permute:
647
+ mov r3, lr
648
+ vpush {q4-q7}
649
+ LoadState
650
+ bl KeccakP1600_PermuteAsmOnly
651
+ StoreState
652
+ vpop {q4-q7}
653
+ bx r3
654
+
655
+
656
+ .if 0
657
+
658
+ @----------------------------------------------------------------------------
659
+ @
660
+ @ size_t KeccakF1600_FastLoop_Absorb( void *state, unsigned int laneCount, unsigned char *data,
661
+ @ size_t dataByteLen, unsigned char trailingBits )
662
+ @
663
+ .align 8
664
+ .global KeccakF1600_FastLoop_Absorb
665
+ .type KeccakF1600_FastLoop_Absorb, %function;
666
+ KeccakF1600_FastLoop_Absorb:
667
+ push {r4-r8,lr} @ 6 CPU registers (24 bytes)
668
+ lsr r3, r3, #3 @ r3 nbrLanes = dataByteLen / SnP_laneLengthInBytes
669
+ mov r6, r2 @ r6 data pointer
670
+ subs r3, r3, r1 @ .if (nbrLanes >= laneCount)
671
+ mov r4, r2 @ r4 initial data pointer
672
+ bcc KeccakF1600_FastLoop_Absorb_Exit
673
+ mov r5, r1
674
+ vpush {q4-q7} @ 4 quad registers (64 bytes)
675
+ LoadState
676
+
677
+ sub sp, sp, #8 @ alloc space for trailingBits lane
678
+ veor.64 d30, d30, d30
679
+ add r7, sp, #(6+16+2)*4
680
+ vld1.8 {d30[0]}, [r7]
681
+ vst1.64 {d30}, [sp:64]
682
+
683
+ cmp r5, #21
684
+ bne KeccakF1600_FastLoop_Absorb_Not21Lanes
685
+ KeccakF1600_FastLoop_Absorb_Loop21Lanes:
686
+ vld1.64 { d26, d27, d28, d29 }, [r6]! @ XOR first 21 lanes
687
+ veor.64 d0, d0, d26
688
+ veor.64 d2, d2, d27
689
+ veor.64 d4, d4, d28
690
+ veor.64 d6, d6, d29
691
+ vld1.64 { d26, d27, d28, d29 }, [r6]!
692
+ veor.64 d8, d8, d26
693
+ veor.64 d1, d1, d27
694
+ veor.64 d3, d3, d28
695
+ veor.64 d5, d5, d29
696
+ vld1.64 { d26, d27, d28, d29 }, [r6]!
697
+ veor.64 d7, d7, d26
698
+ veor.64 d9, d9, d27
699
+ veor.64 d10, d10, d28
700
+ veor.64 d12, d12, d29
701
+ vld1.64 { d26, d27, d28, d29 }, [r6]!
702
+ veor.64 d14, d14, d26
703
+ veor.64 d16, d16, d27
704
+ veor.64 d18, d18, d28
705
+ veor.64 d11, d11, d29
706
+ vld1.64 { d26, d27, d28, d29 }, [r6]!
707
+ veor.64 d13, d13, d26
708
+ veor.64 d15, d15, d27
709
+ veor.64 d17, d17, d28
710
+ veor.64 d19, d19, d29
711
+ vld1.64 { d26 }, [r6]!
712
+ veor.64 d20, d20, d26
713
+
714
+ vld1.64 {d30}, [sp:64] @ xor trailingBits
715
+ veor.64 d21, d21, d30
716
+ bl KeccakP1600_PermuteAsmOnly
717
+ subs r3, r3, r5 @ nbrLanes -= laneCount
718
+ bcs KeccakF1600_FastLoop_Absorb_Loop21Lanes
719
+ KeccakF1600_FastLoop_Absorb_Done:
720
+ add sp, sp, #8 @ free trailingBits lane
721
+ StoreState
722
+ vpop {q4-q7}
723
+ KeccakF1600_FastLoop_Absorb_Exit:
724
+ sub r0, r6, r4 @ processed = data pointer - initial data pointer
725
+ pop {r4-r8,pc}
726
+ KeccakF1600_FastLoop_Absorb_Not21Lanes:
727
+ cmp r5, #16
728
+ mvn r7, #7 @ r7 = -8
729
+ blo KeccakF1600_FastLoop_Absorb_LoopLessThan16Lanes
730
+ KeccakF1600_FastLoop_Absorb_Loop16OrMoreLanes:
731
+ vld1.64 { d26, d27, d28, d29 }, [r6]! @ XOR first 16 lanes
732
+ veor.64 d0, d0, d26
733
+ veor.64 d2, d2, d27
734
+ veor.64 d4, d4, d28
735
+ veor.64 d6, d6, d29
736
+ vld1.64 { d26, d27, d28, d29 }, [r6]!
737
+ veor.64 d8, d8, d26
738
+ veor.64 d1, d1, d27
739
+ veor.64 d3, d3, d28
740
+ veor.64 d5, d5, d29
741
+ vld1.64 { d26, d27, d28, d29 }, [r6]!
742
+ veor.64 d7, d7, d26
743
+ veor.64 d9, d9, d27
744
+ veor.64 d10, d10, d28
745
+ veor.64 d12, d12, d29
746
+ vld1.64 { d26, d27, d28, d29 }, [r6]!
747
+ veor.64 d14, d14, d26
748
+ veor.64 d16, d16, d27
749
+ veor.64 d18, d18, d28
750
+ veor.64 d11, d11, d29
751
+
752
+ sub r2, r5, #16 @ XOR last n lanes, maximum 9
753
+ rsb r1, r2, #9
754
+ add r6, r6, r2, LSL #3 @ data += n lanes * 8
755
+ sub r2, r6, #8 @ r2 tempdata = data - 8
756
+ add pc, pc, r1, LSL #3
757
+ mov r1, #0 @ dummy instruction for PC alignment, not executed
758
+ vld1.64 d30, [r2], r7
759
+ veor.64 d24, d24, d30
760
+ vld1.64 d30, [r2], r7
761
+ veor.64 d23, d23, d30
762
+ vld1.64 d30, [r2], r7
763
+ veor.64 d22, d22, d30
764
+ vld1.64 d30, [r2], r7
765
+ veor.64 d21, d21, d30
766
+ vld1.64 d30, [r2], r7
767
+ veor.64 d20, d20, d30
768
+
769
+ vld1.64 d30, [r2], r7
770
+ veor.64 d19, d19, d30
771
+ vld1.64 d30, [r2], r7
772
+ veor.64 d17, d17, d30
773
+ vld1.64 d30, [r2], r7
774
+ veor.64 d15, d15, d30
775
+ vld1.64 d30, [r2], r7
776
+ veor.64 d13, d13, d30
777
+
778
+ vld1.64 {d30}, [sp:64]
779
+ bl KeccakP1600_XORandPermuteAsmOnly
780
+ subs r3, r3, r5 @ nbrLanes -= laneCount
781
+ bcs KeccakF1600_FastLoop_Absorb_Loop16OrMoreLanes
782
+ b KeccakF1600_FastLoop_Absorb_Done
783
+ KeccakF1600_FastLoop_Absorb_LoopLessThan16Lanes:
784
+ rsb r1, r5, #15 @ XOR up to 15 lanes
785
+ add r6, r6, r5, LSL #3 @ data += laneCount * 8
786
+ sub r2, r6, #8 @ r2 tempdata = data - 8
787
+ add pc, pc, r1, LSL #3
788
+ mov r1, #0 @ dummy instruction for PC alignment, not executed
789
+
790
+ vld1.64 d30, [r2], r7
791
+ veor.64 d18, d18, d30
792
+ vld1.64 d30, [r2], r7
793
+ veor.64 d16, d16, d30
794
+ vld1.64 d30, [r2], r7
795
+ veor.64 d14, d14, d30
796
+ vld1.64 d30, [r2], r7
797
+ veor.64 d12, d12, d30
798
+ vld1.64 d30, [r2], r7
799
+ veor.64 d10, d10, d30
800
+
801
+ vld1.64 d30, [r2], r7
802
+ veor.64 d9, d9, d30
803
+ vld1.64 d30, [r2], r7
804
+ veor.64 d7, d7, d30
805
+ vld1.64 d30, [r2], r7
806
+ veor.64 d5, d5, d30
807
+ vld1.64 d30, [r2], r7
808
+ veor.64 d3, d3, d30
809
+ vld1.64 d30, [r2], r7
810
+ veor.64 d1, d1, d30
811
+
812
+ vld1.64 d30, [r2], r7
813
+ veor.64 d8, d8, d30
814
+ vld1.64 d30, [r2], r7
815
+ veor.64 d6, d6, d30
816
+ vld1.64 d30, [r2], r7
817
+ veor.64 d4, d4, d30
818
+ vld1.64 d30, [r2], r7
819
+ veor.64 d2, d2, d30
820
+ vld1.64 d30, [r2], r7
821
+ veor.64 d0, d0, d30
822
+
823
+ vld1.64 {d30}, [sp:64]
824
+ bl KeccakP1600_XORandPermuteAsmOnly
825
+ subs r3, r3, r5 @ nbrLanes -= laneCount
826
+ bcs KeccakF1600_FastLoop_Absorb_LoopLessThan16Lanes
827
+ b KeccakF1600_FastLoop_Absorb_Done
828
+
829
+
830
+ .endif
831
+