sleeping_kangaroo12 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +127 -0
  3. data/ext/Rakefile +73 -0
  4. data/ext/binding/sleeping_kangaroo12.c +39 -0
  5. data/ext/config/xkcp.build +17 -0
  6. data/ext/xkcp/LICENSE +1 -0
  7. data/ext/xkcp/Makefile +15 -0
  8. data/ext/xkcp/Makefile.build +200 -0
  9. data/ext/xkcp/README.markdown +296 -0
  10. data/ext/xkcp/lib/HighLevel.build +143 -0
  11. data/ext/xkcp/lib/LowLevel.build +757 -0
  12. data/ext/xkcp/lib/common/align.h +33 -0
  13. data/ext/xkcp/lib/common/brg_endian.h +143 -0
  14. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.c +301 -0
  15. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.h +97 -0
  16. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.c +81 -0
  17. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.h +125 -0
  18. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.c +48 -0
  19. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.h +79 -0
  20. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.c +81 -0
  21. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.h +73 -0
  22. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.inc +195 -0
  23. data/ext/xkcp/lib/high/Keccak/KeccakSponge.c +111 -0
  24. data/ext/xkcp/lib/high/Keccak/KeccakSponge.h +76 -0
  25. data/ext/xkcp/lib/high/Keccak/KeccakSponge.inc +314 -0
  26. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.c +61 -0
  27. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.h +67 -0
  28. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.inc +128 -0
  29. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.c +93 -0
  30. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.h +599 -0
  31. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.inc +573 -0
  32. data/ext/xkcp/lib/high/Ketje/Ketjev2.c +87 -0
  33. data/ext/xkcp/lib/high/Ketje/Ketjev2.h +88 -0
  34. data/ext/xkcp/lib/high/Ketje/Ketjev2.inc +274 -0
  35. data/ext/xkcp/lib/high/Keyak/Keyakv2.c +132 -0
  36. data/ext/xkcp/lib/high/Keyak/Keyakv2.h +217 -0
  37. data/ext/xkcp/lib/high/Keyak/Keyakv2.inc +81 -0
  38. data/ext/xkcp/lib/high/Keyak/Motorist.inc +953 -0
  39. data/ext/xkcp/lib/high/Kravatte/Kravatte.c +533 -0
  40. data/ext/xkcp/lib/high/Kravatte/Kravatte.h +115 -0
  41. data/ext/xkcp/lib/high/Kravatte/KravatteModes.c +557 -0
  42. data/ext/xkcp/lib/high/Kravatte/KravatteModes.h +247 -0
  43. data/ext/xkcp/lib/high/Xoodyak/Cyclist.h +66 -0
  44. data/ext/xkcp/lib/high/Xoodyak/Cyclist.inc +336 -0
  45. data/ext/xkcp/lib/high/Xoodyak/Xoodyak-parameters.h +26 -0
  46. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.c +55 -0
  47. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.h +35 -0
  48. data/ext/xkcp/lib/high/Xoofff/Xoofff.c +634 -0
  49. data/ext/xkcp/lib/high/Xoofff/Xoofff.h +147 -0
  50. data/ext/xkcp/lib/high/Xoofff/XoofffModes.c +483 -0
  51. data/ext/xkcp/lib/high/Xoofff/XoofffModes.h +241 -0
  52. data/ext/xkcp/lib/high/common/Phases.h +25 -0
  53. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-SnP.h +41 -0
  54. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-armcc.s +1666 -0
  55. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-gcc.s +1655 -0
  56. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-armcc.s +1268 -0
  57. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-gcc.s +1264 -0
  58. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-armcc.s +1178 -0
  59. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +1175 -0
  60. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-armcc.s +1338 -0
  61. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-gcc.s +1336 -0
  62. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-armcc.s +1343 -0
  63. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +1339 -0
  64. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-SnP.h +42 -0
  65. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-armcc.s +823 -0
  66. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-gcc.s +831 -0
  67. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-SnP.h +31 -0
  68. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-armv8a-neon.s +540 -0
  69. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-SnP.h +42 -0
  70. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-compact.s +733 -0
  71. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-fast.s +1121 -0
  72. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-AVX2.s +1100 -0
  73. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h +52 -0
  74. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-AVX512.c +623 -0
  75. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-SnP.h +47 -0
  76. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u12/KeccakP-1600-AVX512-config.h +6 -0
  77. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u6/KeccakP-1600-AVX512-config.h +6 -0
  78. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/ua/KeccakP-1600-AVX512-config.h +6 -0
  79. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-AVX512.s +1031 -0
  80. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-SnP.h +53 -0
  81. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-SnP.h +44 -0
  82. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-XOP.c +476 -0
  83. data/ext/xkcp/lib/low/KeccakP-1600/XOP/u6/KeccakP-1600-XOP-config.h +6 -0
  84. data/ext/xkcp/lib/low/KeccakP-1600/XOP/ua/KeccakP-1600-XOP-config.h +6 -0
  85. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros +748 -0
  86. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros +305 -0
  87. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-SnP.h +40 -0
  88. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-compact64.c +420 -0
  89. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-SnP.h +43 -0
  90. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-inplace32BI.c +1163 -0
  91. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-SnP.h +54 -0
  92. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c +565 -0
  93. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcu6/KeccakP-1600-opt64-config.h +7 -0
  94. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua/KeccakP-1600-opt64-config.h +7 -0
  95. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua-shld/KeccakP-1600-opt64-config.h +8 -0
  96. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/u6/KeccakP-1600-opt64-config.h +6 -0
  97. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h +6 -0
  98. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-SnP.h +44 -0
  99. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference.h +23 -0
  100. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference32BI.c +625 -0
  101. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-SnP.h +44 -0
  102. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.c +440 -0
  103. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.h +23 -0
  104. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-SnP.h +42 -0
  105. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas.s +1196 -0
  106. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas_Apple.s +1124 -0
  107. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-shld-gas.s +1196 -0
  108. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-armcc.s +1392 -0
  109. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +1394 -0
  110. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-times2-SnP.h +42 -0
  111. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u12/SIMD512-2-config.h +7 -0
  112. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u4/SIMD512-2-config.h +7 -0
  113. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512ufull/SIMD512-2-config.h +7 -0
  114. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SIMD512.c +850 -0
  115. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SnP.h +51 -0
  116. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c +957 -0
  117. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SnP.h +49 -0
  118. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-u2/SIMD128-config.h +8 -0
  119. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-ua/SIMD128-config.h +8 -0
  120. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-u2/SIMD128-config.h +9 -0
  121. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-ua/SIMD128-config.h +9 -0
  122. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-SnP.h +45 -0
  123. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-on1.c +37 -0
  124. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c +1321 -0
  125. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h +55 -0
  126. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u12/SIMD256-config.h +7 -0
  127. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u6/SIMD256-config.h +7 -0
  128. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h +7 -0
  129. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u12/SIMD512-4-config.h +7 -0
  130. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u4/SIMD512-4-config.h +7 -0
  131. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512ufull/SIMD512-4-config.h +7 -0
  132. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SIMD512.c +881 -0
  133. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SnP.h +51 -0
  134. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h +45 -0
  135. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c +37 -0
  136. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-SnP.h +45 -0
  137. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-on2.c +38 -0
  138. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SIMD512.c +1615 -0
  139. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SnP.h +57 -0
  140. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u12/SIMD512-config.h +7 -0
  141. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u4/SIMD512-config.h +7 -0
  142. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/ua/SIMD512-config.h +7 -0
  143. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-SnP.h +45 -0
  144. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-on1.c +37 -0
  145. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-SnP.h +45 -0
  146. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-on2.c +38 -0
  147. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-SnP.h +45 -0
  148. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-on4.c +38 -0
  149. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-SnP.h +41 -0
  150. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-armcc.s +442 -0
  151. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-gcc.s +446 -0
  152. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-armcc.s +419 -0
  153. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-gcc.s +427 -0
  154. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-SnP.h +41 -0
  155. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-avr8-fast.s +647 -0
  156. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-SnP.h +39 -0
  157. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-compact.c +190 -0
  158. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-SnP.h +43 -0
  159. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.c +412 -0
  160. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.h +23 -0
  161. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-SnP.h +41 -0
  162. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-armcc.s +454 -0
  163. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-gcc.s +458 -0
  164. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-armcc.s +455 -0
  165. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-gcc.s +458 -0
  166. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-SnP.h +41 -0
  167. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-avr8-fast.s +728 -0
  168. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-SnP.h +43 -0
  169. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.c +414 -0
  170. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.h +23 -0
  171. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-SnP.h +42 -0
  172. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-armcc.s +527 -0
  173. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-gcc.s +533 -0
  174. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-armcc.s +528 -0
  175. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-gcc.s +534 -0
  176. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-armcc.s +521 -0
  177. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-gcc.s +527 -0
  178. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-armcc.s +517 -0
  179. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-gcc.s +523 -0
  180. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-armcc.s +550 -0
  181. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-gcc.s +556 -0
  182. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-SnP.h +32 -0
  183. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-armv8a-neon.s +432 -0
  184. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-SnP.h +42 -0
  185. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-avr8-fast.s +929 -0
  186. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-SnP.h +40 -0
  187. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-compact.c +244 -0
  188. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-SnP.h +46 -0
  189. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32-bis.macros +184 -0
  190. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.c +454 -0
  191. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.macros +459 -0
  192. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling-bis.macros +83 -0
  193. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling.macros +88 -0
  194. data/ext/xkcp/lib/low/KeccakP-800/plain/lcu2/KeccakP-800-opt32-config.h +7 -0
  195. data/ext/xkcp/lib/low/KeccakP-800/plain/lcua/KeccakP-800-opt32-config.h +7 -0
  196. data/ext/xkcp/lib/low/KeccakP-800/plain/u2/KeccakP-800-opt32-config.h +7 -0
  197. data/ext/xkcp/lib/low/KeccakP-800/plain/ua/KeccakP-800-opt32-config.h +7 -0
  198. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-SnP.h +44 -0
  199. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.c +437 -0
  200. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.h +23 -0
  201. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/Ket.h +57 -0
  202. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-armcc.s +475 -0
  203. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-gcc.s +480 -0
  204. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-armcc.s +590 -0
  205. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-gcc.s +590 -0
  206. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.c +126 -0
  207. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.h +68 -0
  208. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.inc +174 -0
  209. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.c +80 -0
  210. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.h +68 -0
  211. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.inc +142 -0
  212. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-SnP.h +55 -0
  213. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-armcc.s +1086 -0
  214. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-gcc.s +1092 -0
  215. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-armcc.s +721 -0
  216. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-gcc.s +726 -0
  217. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-armcc.s +723 -0
  218. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-gcc.s +729 -0
  219. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-armcc.s +1164 -0
  220. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-gcc.s +1165 -0
  221. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-armcc.s +562 -0
  222. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-gcc.s +563 -0
  223. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-armcc.s +563 -0
  224. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-gcc.s +565 -0
  225. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-SnP.h +55 -0
  226. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-armcc.s +476 -0
  227. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-gcc.s +485 -0
  228. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-armcc.s +362 -0
  229. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-gcc.s +367 -0
  230. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-SnP.h +43 -0
  231. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-avr8-u1.s +1341 -0
  232. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SIMD512.c +581 -0
  233. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SnP.h +58 -0
  234. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodyak-full-block-SIMD512.c +332 -0
  235. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SIMD128.c +329 -0
  236. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SnP.h +53 -0
  237. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodyak-full-block-SIMD128.c +355 -0
  238. data/ext/xkcp/lib/low/Xoodoo/Xoodoo.h +79 -0
  239. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-SnP.h +56 -0
  240. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-optimized.c +399 -0
  241. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodyak-full-blocks.c +127 -0
  242. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-SnP.h +43 -0
  243. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-reference.c +253 -0
  244. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SIMD512.c +1044 -0
  245. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SnP.h +49 -0
  246. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-SnP.h +45 -0
  247. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-on1.c +37 -0
  248. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-ARMv7A.s +1587 -0
  249. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-SnP.h +48 -0
  250. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SIMD512.c +1202 -0
  251. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SnP.h +48 -0
  252. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SIMD128.c +484 -0
  253. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SnP.h +44 -0
  254. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-SnP.h +45 -0
  255. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-on1.c +37 -0
  256. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SIMD256.c +939 -0
  257. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SnP.h +49 -0
  258. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SIMD512.c +1216 -0
  259. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SnP.h +48 -0
  260. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-SnP.h +45 -0
  261. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-on1.c +37 -0
  262. data/ext/xkcp/lib/low/common/PlSnP-Fallback.inc +290 -0
  263. data/ext/xkcp/lib/low/common/SnP-Relaned.h +141 -0
  264. data/ext/xkcp/support/Build/ExpandProducts.xsl +79 -0
  265. data/ext/xkcp/support/Build/ToGlobalMakefile.xsl +206 -0
  266. data/ext/xkcp/support/Build/ToOneTarget.xsl +89 -0
  267. data/ext/xkcp/support/Build/ToTargetConfigFile.xsl +37 -0
  268. data/ext/xkcp/support/Build/ToTargetMakefile.xsl +298 -0
  269. data/ext/xkcp/support/Build/ToVCXProj.xsl +198 -0
  270. data/ext/xkcp/support/Kernel-PMU/Kernel-pmu.md +133 -0
  271. data/ext/xkcp/support/Kernel-PMU/Makefile +8 -0
  272. data/ext/xkcp/support/Kernel-PMU/enable_arm_pmu.c +129 -0
  273. data/ext/xkcp/support/Kernel-PMU/load-module +1 -0
  274. data/ext/xkcp/util/KeccakSum/KeccakSum.c +394 -0
  275. data/ext/xkcp/util/KeccakSum/base64.c +86 -0
  276. data/ext/xkcp/util/KeccakSum/base64.h +12 -0
  277. data/lib/sleeping_kangaroo12/binding.rb +15 -0
  278. data/lib/sleeping_kangaroo12/build/loader.rb +40 -0
  279. data/lib/sleeping_kangaroo12/build/platform.rb +37 -0
  280. data/lib/sleeping_kangaroo12/build.rb +4 -0
  281. data/lib/sleeping_kangaroo12/digest.rb +103 -0
  282. data/lib/sleeping_kangaroo12/version.rb +5 -0
  283. data/lib/sleeping_kangaroo12.rb +7 -0
  284. metadata +372 -0
@@ -0,0 +1,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
+