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,454 @@
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[800] in a SnP-compatible way.
19
+ Please refer to SnP-documentation.h for more details.
20
+
21
+ This implementation comes with KeccakP-800-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
+ #include <stdint.h>
26
+ #include <string.h>
27
+ #include <stdlib.h>
28
+ #include "brg_endian.h"
29
+ #include "KeccakP-800-opt32-config.h"
30
+ #include "KeccakP-800-SnP.h"
31
+
32
+ /* Change READ32/WRITE macros if your target does not support unaligned 32-bit accesses. */
33
+ #if defined (__arm__) && !defined(__GNUC__)
34
+ #define ROL32(a, offset) __ror(a, 32-(offset))
35
+ #define READ32_UNALIGNED(argAddress) (*((const __packed uint32_t*)(argAddress)))
36
+ #define WRITE32_UNALIGNED(argAddress, argData) (*((__packed uint32_t*)(argAddress)) = (argData))
37
+ #elif defined(_MSC_VER)
38
+ #define ROL32(a, offset) _rotl(a, offset)
39
+ #define READ32_UNALIGNED(argAddress) (*((const uint32_t*)(argAddress)))
40
+ #define WRITE32_UNALIGNED(argAddress, argData) (*((uint32_t*)(argAddress)) = (argData))
41
+ #else
42
+ #define ROL32(a, offset) ((((uint32_t)a) << offset) ^ (((uint32_t)a) >> (32-offset)))
43
+ #define READ32_UNALIGNED(argAddress) (*((const uint32_t*)(argAddress)))
44
+ #define WRITE32_UNALIGNED(argAddress, argData) (*((uint32_t*)(argAddress)) = (argData))
45
+ #endif
46
+
47
+ #if defined(KeccakP800_useLaneComplementing)
48
+ #define UseBebigokimisa
49
+ #endif
50
+
51
+ #if defined(KeccakP800_useFlavorBis)
52
+ #include "KeccakP-800-opt32-bis.macros"
53
+ #include "KeccakP-800-unrolling-bis.macros"
54
+ #else
55
+ #include "KeccakP-800-opt32.macros"
56
+ #include "KeccakP-800-unrolling.macros"
57
+ #endif
58
+
59
+ #ifdef KeccakP800_useLaneComplementing
60
+
61
+ const uint32_t KeccakP800LaneComplement[25] = {
62
+ 0,
63
+ 0xFFFFFFFF,
64
+ 0xFFFFFFFF,
65
+ 0,
66
+ 0,
67
+ 0,
68
+ 0,
69
+ 0,
70
+ 0xFFFFFFFF,
71
+ 0,
72
+ 0,
73
+ 0,
74
+ 0xFFFFFFFF,
75
+ 0,
76
+ 0,
77
+ 0,
78
+ 0,
79
+ 0xFFFFFFFF,
80
+ 0,
81
+ 0,
82
+ 0xFFFFFFFF,
83
+ 0,
84
+ 0,
85
+ 0,
86
+ 0};
87
+
88
+ #endif
89
+
90
+ const uint32_t KeccakF800RoundConstants[24] = {
91
+ 0x00000001ULL,
92
+ 0x00008082ULL,
93
+ 0x0000808aULL,
94
+ 0x80008000ULL,
95
+ 0x0000808bULL,
96
+ 0x80000001ULL,
97
+ 0x80008081ULL,
98
+ 0x00008009ULL,
99
+ 0x0000008aULL,
100
+ 0x00000088ULL,
101
+ 0x80008009ULL,
102
+ 0x8000000aULL,
103
+ 0x8000808bULL,
104
+ 0x0000008bULL,
105
+ 0x00008089ULL,
106
+ 0x00008003ULL,
107
+ 0x00008002ULL,
108
+ 0x00000080ULL,
109
+ 0x0000800aULL,
110
+ 0x8000000aULL,
111
+ 0x80008081ULL,
112
+ 0x00008080ULL};
113
+
114
+ /* ---------------------------------------------------------------- */
115
+
116
+ void KeccakP800_Initialize(void *state)
117
+ {
118
+ memset(state, 0, 100);
119
+ #ifdef KeccakP800_useLaneComplementing
120
+ ((uint32_t*)state)[ 1] = ~(uint32_t)0;
121
+ ((uint32_t*)state)[ 2] = ~(uint32_t)0;
122
+ ((uint32_t*)state)[ 8] = ~(uint32_t)0;
123
+ ((uint32_t*)state)[12] = ~(uint32_t)0;
124
+ ((uint32_t*)state)[17] = ~(uint32_t)0;
125
+ ((uint32_t*)state)[20] = ~(uint32_t)0;
126
+ #endif
127
+ }
128
+
129
+ /* ---------------------------------------------------------------- */
130
+
131
+ void KeccakP800_AddByte(void *argState, unsigned char data, unsigned int offset)
132
+ {
133
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
134
+ unsigned int lanePosition = offset/4;
135
+ unsigned int offsetInLane = offset%4;
136
+ uint32_t lane = (uint32_t)data << (8*offsetInLane);
137
+ ((uint32_t*)argState)[lanePosition] ^= lane;
138
+ #else
139
+ #error "Not yet implemented"
140
+ #endif
141
+ }
142
+
143
+ /* ---------------------------------------------------------------- */
144
+
145
+ void KeccakP800_AddBytes(void *argState, const unsigned char *data, unsigned int offset, unsigned int length)
146
+ {
147
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
148
+ unsigned int sizeLeft = length;
149
+ unsigned int lanePosition = offset/4;
150
+ unsigned int offsetInLane = offset%4;
151
+ const unsigned char *curData = data;
152
+ uint32_t *state = (uint32_t*)argState;
153
+
154
+ state += lanePosition;
155
+ if ((sizeLeft > 0) && (offsetInLane != 0)) {
156
+ unsigned int bytesInLane = 4 - offsetInLane;
157
+ uint32_t lane = 0;
158
+ if (bytesInLane > sizeLeft)
159
+ bytesInLane = sizeLeft;
160
+ memcpy((unsigned char*)&lane + offsetInLane, curData, bytesInLane);
161
+ *state++ ^= lane;
162
+ sizeLeft -= bytesInLane;
163
+ curData += bytesInLane;
164
+ }
165
+
166
+ while(sizeLeft >= 4) {
167
+ *state++ ^= READ32_UNALIGNED( curData );
168
+ sizeLeft -= 4;
169
+ curData += 4;
170
+ }
171
+
172
+ if (sizeLeft > 0) {
173
+ uint32_t lane = 0;
174
+ memcpy(&lane, curData, sizeLeft);
175
+ *state ^= lane;
176
+ }
177
+ #else
178
+ #error "Not yet implemented"
179
+ #endif
180
+ }
181
+
182
+ /* ---------------------------------------------------------------- */
183
+
184
+ void KeccakP800_OverwriteBytes(void *argState, const unsigned char *data, unsigned int offset, unsigned int length)
185
+ {
186
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
187
+ #ifdef KeccakP800_useLaneComplementing
188
+ unsigned int sizeLeft = length;
189
+ unsigned int lanePosition = offset/4;
190
+ unsigned int offsetInLane = offset%4;
191
+ const unsigned char *curData = data;
192
+ uint32_t *state = (uint32_t*)argState;
193
+
194
+ if ((sizeLeft > 0) && (offsetInLane != 0)) {
195
+ unsigned int bytesInLane = 4 - offsetInLane;
196
+ unsigned char laneComplement = (unsigned char)KeccakP800LaneComplement[lanePosition];
197
+ if (bytesInLane > sizeLeft)
198
+ bytesInLane = sizeLeft;
199
+ sizeLeft -= bytesInLane;
200
+ do {
201
+ *(((unsigned char *)&state[lanePosition] + offsetInLane)) = *curData++ ^ laneComplement;
202
+ ++offsetInLane;
203
+ }
204
+ while ( --bytesInLane != 0);
205
+ lanePosition++;
206
+ }
207
+
208
+ while(sizeLeft >= 4) {
209
+ state[lanePosition] = READ32_UNALIGNED( curData ) ^ KeccakP800LaneComplement[lanePosition];
210
+ sizeLeft -= 4;
211
+ lanePosition++;
212
+ curData += 4;
213
+ }
214
+
215
+ if (sizeLeft > 0) {
216
+ unsigned char laneComplement = (unsigned char)KeccakP800LaneComplement[lanePosition];
217
+ unsigned int i;
218
+ for ( i = 0; i < sizeLeft; ++i ) {
219
+ *((unsigned char *)&state[lanePosition] + i) = *curData++ ^ laneComplement;
220
+ }
221
+ }
222
+ #else
223
+ memcpy((unsigned char*)argState+offset, data, length);
224
+ #endif
225
+ #else
226
+ #error "Not yet implemented"
227
+ #endif
228
+ }
229
+
230
+ /* ---------------------------------------------------------------- */
231
+
232
+ void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
233
+ {
234
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
235
+ #ifdef KeccakP800_useLaneComplementing
236
+ memcpy((unsigned char*)state, (unsigned char*)KeccakP800LaneComplement, byteCount);
237
+ #else
238
+ memset(state, 0, byteCount);
239
+ #endif
240
+ #else
241
+ #error "Not yet implemented"
242
+ #endif
243
+ }
244
+
245
+ /* ---------------------------------------------------------------- */
246
+
247
+ void KeccakP800_Permute_Nrounds(void *state, unsigned int nr)
248
+ {
249
+ declareBCDE
250
+ unsigned int i;
251
+ uint32_t *Astate = (uint32_t*)state;
252
+
253
+ roundsN(A,E,nr)
254
+ }
255
+
256
+ /* ---------------------------------------------------------------- */
257
+
258
+ void KeccakP800_Permute_12rounds(void *state)
259
+ {
260
+ declareBCDE
261
+ #ifndef KeccakP800_fullUnrolling
262
+ unsigned int i;
263
+ #endif
264
+ uint32_t *Astate = (uint32_t*)state;
265
+
266
+ rounds12
267
+ }
268
+
269
+ /* ---------------------------------------------------------------- */
270
+
271
+ void KeccakP800_Permute_22rounds(void *state)
272
+ {
273
+ declareBCDE
274
+ #ifndef KeccakP800_fullUnrolling
275
+ unsigned int i;
276
+ #endif
277
+ uint32_t *Astate = (uint32_t*)state;
278
+
279
+ rounds22
280
+ }
281
+
282
+ /* ---------------------------------------------------------------- */
283
+
284
+ void KeccakP800_ExtractBytes(const void *argState, unsigned char *data, unsigned int offset, unsigned int length)
285
+ {
286
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
287
+ #ifdef KeccakP800_useLaneComplementing
288
+ unsigned int sizeLeft = length;
289
+ unsigned int lanePosition = offset/4;
290
+ unsigned int offsetInLane = offset%4;
291
+ unsigned char *curData = data;
292
+ const uint32_t *state = (const uint32_t*)argState;
293
+ const uint32_t *pLaneComplement;
294
+
295
+ state += lanePosition;
296
+ pLaneComplement = KeccakP800LaneComplement + lanePosition;
297
+ if ((sizeLeft > 0) && (offsetInLane != 0)) {
298
+ unsigned int bytesInLane = 4 - offsetInLane;
299
+ uint32_t lane = (*state++ ^ *pLaneComplement++) >> (offsetInLane * 8);
300
+ if (bytesInLane > sizeLeft)
301
+ bytesInLane = sizeLeft;
302
+ sizeLeft -= bytesInLane;
303
+ do {
304
+ *curData++ = (unsigned char)lane;
305
+ lane >>= 8;
306
+ }
307
+ while ( --bytesInLane != 0);
308
+ lanePosition++;
309
+ }
310
+
311
+ while(sizeLeft >= 4) {
312
+ WRITE32_UNALIGNED( curData, *state++ ^ *pLaneComplement++ );
313
+ sizeLeft -= 4;
314
+ curData += 4;
315
+ }
316
+
317
+ if (sizeLeft > 0) {
318
+ uint32_t lane = *state ^ *pLaneComplement;
319
+ unsigned int i;
320
+ for ( i = 0; i < sizeLeft; ++i ) {
321
+ *curData++ = (unsigned char)lane;
322
+ lane >>= 8;
323
+ }
324
+ }
325
+ #else
326
+ memcpy(data, (unsigned char*)argState+offset, length);
327
+ #endif
328
+ #else
329
+ #error "Not yet implemented"
330
+ #endif
331
+ }
332
+
333
+ /* ---------------------------------------------------------------- */
334
+
335
+ void KeccakP800_ExtractAndAddBytes(const void *argState, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
336
+ {
337
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
338
+ #ifdef KeccakP800_useLaneComplementing
339
+ unsigned int sizeLeft = length;
340
+ unsigned int lanePosition = offset/4;
341
+ unsigned int offsetInLane = offset%4;
342
+ const unsigned char *curInput = input;
343
+ unsigned char *curOutput = output;
344
+ const uint32_t *state = (const uint32_t*)argState;
345
+ const uint32_t *pLaneComplement;
346
+
347
+ state += lanePosition;
348
+ pLaneComplement = KeccakP800LaneComplement + lanePosition;
349
+ if ((sizeLeft > 0) && (offsetInLane != 0)) {
350
+ unsigned int bytesInLane = 4 - offsetInLane;
351
+ uint32_t lane = (*state++ ^ *pLaneComplement++) >> (offsetInLane * 8);
352
+ if (bytesInLane > sizeLeft)
353
+ bytesInLane = sizeLeft;
354
+ sizeLeft -= bytesInLane;
355
+ do {
356
+ *curOutput++ = (*curInput++) ^ (unsigned char)lane;
357
+ lane >>= 8;
358
+ }
359
+ while ( --bytesInLane != 0);
360
+ }
361
+
362
+ while(sizeLeft >= 4) {
363
+ WRITE32_UNALIGNED( curOutput, READ32_UNALIGNED( curInput ) ^ *state++ ^ *pLaneComplement++ );
364
+ sizeLeft -= 4;
365
+ curInput += 4;
366
+ curOutput += 4;
367
+ }
368
+
369
+ if (sizeLeft > 0) {
370
+ uint32_t lane = *state ^ *pLaneComplement;
371
+ do {
372
+ *curOutput++ = (*curInput++) ^ (unsigned char)lane;
373
+ lane >>= 8;
374
+ }
375
+ while ( --sizeLeft != 0 );
376
+ }
377
+ #else
378
+ unsigned int sizeLeft = length;
379
+ unsigned int lanePosition = offset/4;
380
+ unsigned int offsetInLane = offset%4;
381
+ const unsigned char *curInput = input;
382
+ unsigned char *curOutput = output;
383
+ const uint32_t *state = (const uint32_t*)argState;
384
+
385
+ state += lanePosition;
386
+ if ((sizeLeft > 0) && (offsetInLane != 0)) {
387
+ unsigned int bytesInLane = 4 - offsetInLane;
388
+ uint32_t lane = *state++ >> (offsetInLane * 8);
389
+ if (bytesInLane > sizeLeft)
390
+ bytesInLane = sizeLeft;
391
+ sizeLeft -= bytesInLane;
392
+ do {
393
+ *curOutput++ = (*curInput++) ^ (unsigned char)lane;
394
+ lane >>= 8;
395
+ }
396
+ while ( --bytesInLane != 0);
397
+ }
398
+
399
+ while(sizeLeft >= 4) {
400
+ WRITE32_UNALIGNED( curOutput, READ32_UNALIGNED( curInput ) ^ *state++ );
401
+ sizeLeft -= 4;
402
+ curInput += 4;
403
+ curOutput += 4;
404
+ }
405
+
406
+ if (sizeLeft > 0) {
407
+ uint32_t lane = *state;
408
+ do {
409
+ *curOutput++ = (*curInput++) ^ (unsigned char)lane;
410
+ lane >>= 8;
411
+ }
412
+ while ( --sizeLeft != 0 );
413
+ }
414
+ #endif
415
+ #else
416
+ #error "Not yet implemented"
417
+ #endif
418
+ }
419
+
420
+ /* ---------------------------------------------------------------- */
421
+
422
+ size_t KeccakF800_FastLoop_Absorb(void *state, unsigned int laneCount, const unsigned char *data, size_t dataByteLen)
423
+ {
424
+ size_t originalDataByteLen = dataByteLen;
425
+ unsigned int laneCountInBytes = laneCount*4;
426
+
427
+ while(dataByteLen >= laneCountInBytes) {
428
+ #if (PLATFORM_BYTE_ORDER == IS_LITTLE_ENDIAN)
429
+ uint32_t * pState = (uint32_t*)state;
430
+ unsigned int lc;
431
+
432
+ for ( lc = laneCount; lc >= 4; lc -= 4 ) {
433
+ *pState++ ^= READ32_UNALIGNED( data );
434
+ data += 4;
435
+ *pState++ ^= READ32_UNALIGNED( data );
436
+ data += 4;
437
+ *pState++ ^= READ32_UNALIGNED( data );
438
+ data += 4;
439
+ *pState++ ^= READ32_UNALIGNED( data );
440
+ data += 4;
441
+ }
442
+ while ( lc-- != 0 ) {
443
+ *pState++ ^= READ32_UNALIGNED( data );
444
+ data += 4;
445
+ }
446
+ #else
447
+ KeccakP800_AddBytes(state, data, 0, laneCountInBytes);
448
+ data += laneCountInBytes;
449
+ #endif
450
+ KeccakP800_Permute_22rounds( state );
451
+ dataByteLen -= laneCountInBytes;
452
+ }
453
+ return originalDataByteLen - dataByteLen;
454
+ }