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