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,432 @@
1
+ // The eXtended Keccak Code Package (XKCP)
2
+ // https://github.com/XKCP/XKCP
3
+ //
4
+ // Implementation by Andre Moraes
5
+ //
6
+ // This file implements Keccak-p[800] in a SnP-compatible way.
7
+ // Please refer to SnP-documentation.h for more details.
8
+ //
9
+ // This implementation comes with KeccakP-800-SnP.h in the same folder.
10
+ // Please refer to LowLevel.build for the exact list of other files it must be combined with.
11
+
12
+ // INFO: Tested on Cortex-A53(odroid-c2), using gcc.
13
+ // WARNING: These functions work only on little endian CPU with ARMv8A architecture
14
+ // WARNING: Don't use V8-V15 or X19-X28 since we aren't saving them
15
+
16
+ // Register-Lane Lookup
17
+
18
+ // v22 = A[0] || A[1] || A[2] || A[3]
19
+ // v23 = A[4]
20
+
21
+ // v24 = A[5] || A[6] || A[7] || A[8]
22
+ // v25 = A[9]
23
+
24
+ // v26 = A[10] || A[11] || A[12] || A[13]
25
+ // v27 = A[14]
26
+
27
+ // v28 = A[15] || A[16] || A[17] || A[18]
28
+ // v29 = A[19]
29
+
30
+ // v30 = A[20] || A[21] || A[22] || A[23]
31
+ // v31 = A[24]
32
+
33
+ .macro LoadState
34
+ ld1 { v22.d }[0], [x0], #8
35
+ ld1 { v22.d }[1], [x0], #8
36
+ ld1 { v23.s }[0], [x0], #4
37
+ ld1 { v24.d }[0], [x0], #8
38
+ ld1 { v24.d }[1], [x0], #8
39
+ ld1 { v25.s }[0], [x0], #4
40
+ ld1 { v26.d }[0], [x0], #8
41
+ ld1 { v26.d }[1], [x0], #8
42
+ ld1 { v27.s }[0], [x0], #4
43
+ ld1 { v28.d }[0], [x0], #8
44
+ ld1 { v28.d }[1], [x0], #8
45
+ ld1 { v29.s }[0], [x0], #4
46
+ ld1 { v30.d }[0], [x0], #8
47
+ ld1 { v30.d }[1], [x0], #8
48
+ ld1 { v31.s }[0], [x0], #4
49
+ sub x0, x0, #100
50
+ movi v20.4s, #0
51
+ .endm
52
+
53
+ .macro StoreState
54
+ st1 { v22.d }[0], [x0], #8
55
+ st1 { v22.d }[1], [x0], #8
56
+ st1 { v23.s }[0], [x0], #4
57
+ st1 { v24.d }[0], [x0], #8
58
+ st1 { v24.d }[1], [x0], #8
59
+ st1 { v25.s }[0], [x0], #4
60
+ st1 { v26.d }[0], [x0], #8
61
+ st1 { v26.d }[1], [x0], #8
62
+ st1 { v27.s }[0], [x0], #4
63
+ st1 { v28.d }[0], [x0], #8
64
+ st1 { v28.d }[1], [x0], #8
65
+ st1 { v29.s }[0], [x0], #4
66
+ st1 { v30.d }[0], [x0], #8
67
+ st1 { v30.d }[1], [x0], #8
68
+ st1 { v31.s }[0], [x0], #4
69
+ .endm
70
+
71
+ // NEON has no BIT-wise vector rotate operation
72
+ .macro ROTL32 dst, src, rot
73
+ shl \dst\().4s, \src\().4s, #\rot
74
+ sri \dst\().4s, \src\().4s, #32-\rot
75
+ .endm
76
+
77
+ .macro RhoPi dst, src, sav, rot
78
+ ror \src, \src, #32-\rot
79
+ mov \sav, \dst
80
+ mov \dst, \src
81
+ .endm
82
+
83
+ .macro Chi src1, src2
84
+ mov v0.2d[0], \src1\().2d[1]
85
+ mov v0.s[2], \src2\().s[0]
86
+ mov v0.s[3], \src1\().s[0]
87
+ ext v1.16b, \src1\().16b, \src2\().16b, #4
88
+ mov v2.s[0], \src1\().s[1]
89
+ mov v3.s[0], \src1\().s[0]
90
+ bic v4.16b, v0.16b, v1.16b
91
+ bic v5.16b, v2.16b, v3.16b
92
+ eor \src1\().16b, \src1\().16b, v4.16b
93
+ eor \src2\().16b, \src2\().16b, v5.16b
94
+ .endm
95
+
96
+ .macro KeccakRound
97
+ // Theta - Build new lanes
98
+ eor v0.16b, v22.16b, v24.16b
99
+ eor v0.16b, v0.16b, v26.16b
100
+ eor v0.16b, v0.16b, v28.16b
101
+ eor v0.16b, v0.16b, v30.16b // v0 = B[0] || B[1] || B[2] || B[3]
102
+
103
+ eor v1.16b, v23.16b, v25.16b
104
+ eor v1.16b, v1.16b, v27.16b
105
+ eor v1.16b, v1.16b, v29.16b
106
+ eor v1.16b, v1.16b, v31.16b // v1 = B[4]
107
+
108
+ ROTL32 v2, v0, 1 // v2 = ROT32(B[0]) || ROT32(B[1]) || ROT32(B[2]) || ROT32(B[3])
109
+ ROTL32 v3, v1, 1 // v3 = ROT32(B[4])
110
+
111
+ ext v4.16b, v2.16b, v3.16b, #8 // v4 = ROT32(B[2]) || ROT32(B[3]) || ROT32(B[4]) || ????
112
+ mov v4.s[3], v2.s[0] // v4 = ROT32(B[2]) || ROT32(B[3]) || ROT32(B[4]) || ROT32(B[0])
113
+
114
+ eor v5.16b, v0.16b, v4.16b // v5 = ->A[1] || ->A[2] || ->A[3] || ->A[4]
115
+
116
+ mov v6.s[0], v2.s[1]
117
+ eor v6.16b, v6.16b, v1.16b // v6 = ->A[0]
118
+
119
+ mov v6.s[1], v5.s[0]
120
+ mov v6.s[2], v5.s[1]
121
+ mov v6.s[3], v5.s[2] // v6 = ->A[0] || ->A[1] || ->A[2] || ->A[3]
122
+
123
+ mov v7.s[0], v5.s[3] // v7 = ->A[4]
124
+
125
+ // Apply Theta
126
+ eor v22.16b, v22.16b, v6.16b
127
+ eor v24.16b, v24.16b, v6.16b
128
+ eor v26.16b, v26.16b, v6.16b
129
+ eor v28.16b, v28.16b, v6.16b
130
+ eor v30.16b, v30.16b, v6.16b
131
+
132
+ eor v23.16b, v23.16b, v7.16b
133
+ eor v25.16b, v25.16b, v7.16b
134
+ eor v27.16b, v27.16b, v7.16b
135
+ eor v29.16b, v29.16b, v7.16b
136
+ eor v31.16b, v31.16b, v7.16b
137
+
138
+ // Rho Pi
139
+ mov w11, v22.s[1] // w11 = A[1]
140
+
141
+ RhoPi v26.s[0], w11, w10, 1 // A[10] = ROTL64(A[1], 1)
142
+ RhoPi v24.s[2], w10, w11, 3 // A[7] = ROTL64(A[10], 3)
143
+ RhoPi v26.s[1], w11, w10, 6 // A[11] = ROTL64(A[7], 6)
144
+ RhoPi v28.s[2], w10, w11, 10 // A[17] = ROTL64(A[11], 10)
145
+ RhoPi v28.s[3], w11, w10, 15 // A[18] = ROTL64(A[17], 15)
146
+ RhoPi v22.s[3], w10, w11, 21 // A[3] = ROTL64(A[18], 21)
147
+ RhoPi v24.s[0], w11, w10, 28 // A[5] = ROTL64(A[3], 28)
148
+ RhoPi v28.s[1], w10, w11, 4 // A[16] = ROTL64(A[5], 4)
149
+ RhoPi v24.s[3], w11, w10, 13 // A[8] = ROTL64(A[16], 13)
150
+ RhoPi v30.s[1], w10, w11, 23 // A[21] = ROTL64(A[8], 23)
151
+ RhoPi v31.s[0], w11, w10, 2 // A[24] = ROTL64(A[21], 2)
152
+ RhoPi v23.s[0], w10, w11, 14 // A[4] = ROTL64(A[24], 14)
153
+ RhoPi v28.s[0], w11, w10, 27 // A[15] = ROTL64(A[4], 27)
154
+ RhoPi v30.s[3], w10, w11, 9 // A[23] = ROTL64(A[15], 9)
155
+ RhoPi v29.s[0], w11, w10, 24 // A[19] = ROTL64(A[23], 24)
156
+ RhoPi v26.s[3], w10, w11, 8 // A[13] = ROTL64(A[19], 8)
157
+ RhoPi v26.s[2], w11, w10, 25 // A[12] = ROTL64(A[13], 25)
158
+ RhoPi v22.s[2], w10, w11, 11 // A[2] = ROTL64(A[12], 11)
159
+ RhoPi v30.s[0], w11, w10, 30 // A[20] = ROTL64(A[2], 30)
160
+ RhoPi v27.s[0], w10, w11, 18 // A[14] = ROTL64(A[20], 18)
161
+ RhoPi v30.s[2], w11, w10, 7 // A[22] = ROTL64(A[14], 7)
162
+ RhoPi v25.s[0], w10, w11, 29 // A[9] = ROTL64(A[22], 29)
163
+ RhoPi v24.s[1], w11, w10, 20 // A[6] = ROTL64(A[9], 20)
164
+
165
+ ror w10, w10, #20
166
+ mov v22.s[1], w10 // A[1] = ROTL64(A[6], 12)
167
+
168
+ // Chi
169
+ Chi v22, v23
170
+ Chi v24, v25
171
+ Chi v26, v27
172
+ Chi v28, v29
173
+ Chi v30, v31
174
+
175
+ // Iota
176
+ ld1 { v20.s }[0], [x1], #4
177
+ eor v22.16b, v22.16b, v20.16b
178
+
179
+ .endm
180
+
181
+ .align 8
182
+ KeccakP800_Permute_RoundConstants22:
183
+ .word 0x00000001
184
+ .word 0x00008082
185
+ .word 0x0000808a
186
+ .word 0x80008000
187
+ .word 0x0000808b
188
+ .word 0x80000001
189
+ .word 0x80008081
190
+ .word 0x00008009
191
+ .word 0x0000008a
192
+ .word 0x00000088
193
+ KeccakP800_Permute_RoundConstants12:
194
+ .word 0x80008009
195
+ .word 0x8000000a
196
+ .word 0x8000808b
197
+ .word 0x0000008b
198
+ .word 0x00008089
199
+ .word 0x00008003
200
+ .word 0x00008002
201
+ .word 0x00000080
202
+ .word 0x0000800a
203
+ .word 0x8000000a
204
+ .word 0x80008081
205
+ .word 0x00008080
206
+ KeccakP800_Permute_RoundConstants0:
207
+
208
+ //----------------------------------------------------------------------------
209
+ //
210
+ // void KeccakP800_Initialize(void *state)
211
+ //
212
+ .align 8
213
+ .global KeccakP800_Initialize
214
+ KeccakP800_Initialize:
215
+ movi v0.2d, #0
216
+ movi v1.2d, #0
217
+ st2 { v0.2d, v1.2d }, [x0], #32
218
+ st2 { v0.2d, v1.2d }, [x0], #32
219
+ st2 { v0.2d, v1.2d }, [x0], #32
220
+ st1 { v0.s }[0], [x0]
221
+ ret
222
+
223
+
224
+ // ----------------------------------------------------------------------------
225
+ //
226
+ // void KeccakP800_AddByte(void *state, unsigned char byte, unsigned int offset)
227
+ //
228
+ .align 8
229
+ .global KeccakP800_AddByte
230
+ KeccakP800_AddByte:
231
+ ldrb w3, [x0, x2]
232
+ eor w3, w3, w1
233
+ strb w3, [x0, x2]
234
+ ret
235
+
236
+
237
+ // ----------------------------------------------------------------------------
238
+ //
239
+ // void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
240
+ //
241
+ .align 8
242
+ .global KeccakP800_AddBytes
243
+ KeccakP800_AddBytes:
244
+ add x0, x0, x2
245
+ subs w4, w3, #1
246
+ b.cc KeccakP800_AddBytes_Exit // length 0, move along
247
+ KeccakP800_AddBytes_LanesLoop: // Go 2 lanes=8 bytes at a time
248
+ subs w3, w3, #8
249
+ b.cc KeccakP800_AddBytes_Bytes
250
+ ld1 { v0.d }[0], [x0]
251
+ ld1 { v4.d }[0], [x1], #8
252
+ eor v0.8b, v0.8b, v4.8b
253
+ st1 { v0.d }[0], [x0], #8
254
+ b KeccakP800_AddBytes_LanesLoop
255
+ KeccakP800_AddBytes_Bytes:
256
+ add w3, w3, #8
257
+ KeccakP800_AddBytes_BytesLoop: // Same thing but go 1 byte at a time
258
+ subs w3, w3, #1
259
+ b.cc KeccakP800_AddBytes_Exit
260
+ ldrb w4, [x0]
261
+ ldrb w5, [x1], #1
262
+ eor w4, w4, w5
263
+ strb w4, [x0], #1
264
+ b KeccakP800_AddBytes_BytesLoop
265
+ KeccakP800_AddBytes_Exit:
266
+ ret
267
+
268
+ // ----------------------------------------------------------------------------
269
+ //
270
+ // void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
271
+ //
272
+ .align 8
273
+ .global KeccakP800_OverwriteBytes
274
+ KeccakP800_OverwriteBytes:
275
+ add x0, x0, x2
276
+ subs w4, w3, #1
277
+ b.cc KeccakP800_OverwriteBytes_Exit
278
+ KeccakP800_OverwriteBytes_LanesLoop:
279
+ subs w3, w3, #8
280
+ b.cc KeccakP800_OverwriteBytes_Bytes
281
+ ld1 { v0.d }[0], [x1], #8
282
+ st1 { v0.d }[0], [x0], #8
283
+ b KeccakP800_OverwriteBytes_LanesLoop
284
+ KeccakP800_OverwriteBytes_Bytes:
285
+ add w3, w3, #8
286
+ KeccakP800_OverwriteBytes_BytesLoop:
287
+ subs w3, w3, #1
288
+ b.cc KeccakP800_OverwriteBytes_Exit
289
+ ldrb w4, [x1], #1
290
+ strb w4, [x0], #1
291
+ b KeccakP800_OverwriteBytes_BytesLoop
292
+ KeccakP800_OverwriteBytes_Exit:
293
+ ret
294
+
295
+
296
+ //----------------------------------------------------------------------------
297
+ //
298
+ // void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
299
+ //
300
+ .align 8
301
+ .global KeccakP800_OverwriteWithZeroes
302
+ KeccakP800_OverwriteWithZeroes:
303
+ subs w2, w1, #1
304
+ b.cc KeccakP800_OverwriteWithZeroes_Exit
305
+ movi v0.2d, #0
306
+ mov w2, #0
307
+ KeccakP800_OverwriteWithZeroes_LanesLoop:
308
+ subs w1, w1, #8
309
+ b.cc KeccakP800_OverwriteWithZeroes_Bytes
310
+ st1 { v0.d }[0], [x0], #8
311
+ b KeccakP800_OverwriteWithZeroes_LanesLoop
312
+ KeccakP800_OverwriteWithZeroes_Bytes:
313
+ add w1, w1, #8
314
+ KeccakP800_OverwriteWithZeroes_LoopBytes:
315
+ subs w1, w1, #1
316
+ b.cc KeccakP800_OverwriteWithZeroes_Exit
317
+ strb w2, [x0], #1
318
+ b KeccakP800_OverwriteWithZeroes_LoopBytes
319
+ KeccakP800_OverwriteWithZeroes_Exit:
320
+ ret
321
+
322
+
323
+ // ----------------------------------------------------------------------------
324
+ //
325
+ // void KeccakP800_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
326
+ //
327
+ .align 8
328
+ .global KeccakP800_ExtractBytes
329
+ KeccakP800_ExtractBytes:
330
+ add x0, x0, x2
331
+ subs w4, w3, #1
332
+ b.cc KeccakP800_ExtractBytes_Exit
333
+ KeccakP800_ExtractBytes_LanesLoop:
334
+ subs w3, w3, #8
335
+ b.cc KeccakP800_ExtractBytes_Bytes
336
+ ld1 { v0.d }[0], [x0], #8
337
+ st1 { v0.d }[0], [x1], #8
338
+ b KeccakP800_ExtractBytes_LanesLoop
339
+ KeccakP800_ExtractBytes_Bytes:
340
+ add w3, w3, #8
341
+ KeccakP800_ExtractBytes_BytesLoop:
342
+ subs w3, w3, #1
343
+ b.cc KeccakP800_ExtractBytes_Exit
344
+ ldrb w4, [x0], #1
345
+ strb w4, [x1], #1
346
+ b KeccakP800_ExtractBytes_BytesLoop
347
+ KeccakP800_ExtractBytes_Exit:
348
+ ret
349
+
350
+
351
+ // ----------------------------------------------------------------------------
352
+ //
353
+ // void KeccakP800_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
354
+ //
355
+ .align 8
356
+ .global KeccakP800_ExtractAndAddBytes
357
+ KeccakP800_ExtractAndAddBytes:
358
+ add x0, x0, x3
359
+ subs w5, w4, #1
360
+ b.cc KeccakP800_ExtractAndAddBytes_Exit
361
+ KeccakP800_ExtractAndAddBytes_LanesLoop:
362
+ subs w4, w4, #8
363
+ b.cc KeccakP800_ExtractAndAddBytes_Bytes
364
+ ld1 { v0.d }[0], [x0], #8
365
+ ld1 { v4.d }[0], [x1], #8
366
+ eor v0.8b, v0.8b, v4.8b
367
+ st1 { v0.d }[0], [x2], #8
368
+ b KeccakP800_ExtractAndAddBytes_LanesLoop
369
+ KeccakP800_ExtractAndAddBytes_Bytes:
370
+ add w4, w4, #8
371
+ KeccakP800_ExtractAndAddBytes_BytesLoop:
372
+ subs w4, w4, #1
373
+ b.cc KeccakP800_ExtractAndAddBytes_Exit
374
+ ldrb w5, [x0], #1
375
+ ldrb w6, [x1], #1
376
+ eor w5, w5, w6
377
+ strb w5, [x2], #1
378
+ b KeccakP800_ExtractAndAddBytes_BytesLoop
379
+ KeccakP800_ExtractAndAddBytes_Exit:
380
+ ret
381
+
382
+ // ----------------------------------------------------------------------------
383
+ //
384
+ // void KeccakP800_Permute_Nrounds( void *state, unsigned int nrounds )
385
+ //
386
+ .align 8
387
+ .global KeccakP800_Permute_Nrounds
388
+ KeccakP800_Permute_Nrounds:
389
+ mov x2, x1
390
+ adr x1, KeccakP800_Permute_RoundConstants0
391
+ lsl x3, x2, #2
392
+ sub x1, x1, x3
393
+ b KeccakP800_Permute
394
+
395
+ // ----------------------------------------------------------------------------
396
+ //
397
+ // void KeccakP800_Permute_12rounds( void *state )
398
+ //
399
+ .align 8
400
+ .global KeccakP800_Permute_12rounds
401
+ KeccakP800_Permute_12rounds:
402
+ adr x1, KeccakP800_Permute_RoundConstants12
403
+ mov x2, #12
404
+ b KeccakP800_Permute
405
+
406
+ // ----------------------------------------------------------------------------
407
+ //
408
+ // void KeccakP800_Permute_22rounds( void *state )
409
+ //
410
+ .align 8
411
+ .global KeccakP800_Permute_22rounds
412
+ KeccakP800_Permute_22rounds:
413
+ adr x1, KeccakP800_Permute_RoundConstants22
414
+ mov x2, #22
415
+ b KeccakP800_Permute
416
+
417
+ //----------------------------------------------------------------------------
418
+ //
419
+ // void KeccakP800_Permute( void *state, uint32_t *rc, unsigned int nrounds )
420
+ //
421
+ .align 8
422
+ .global KeccakP800_Permute
423
+ KeccakP800_Permute:
424
+ LoadState
425
+ KeccakP800_Permute_RoundLoop:
426
+ KeccakRound
427
+ subs w2, w2, #1
428
+ bne KeccakP800_Permute_RoundLoop
429
+ KeccakP800_Permute_Exit:
430
+ StoreState
431
+ ret
432
+
@@ -0,0 +1,42 @@
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
+ Please refer to SnP-documentation.h for more details.
19
+ */
20
+
21
+ #ifndef _KeccakP_800_SnP_h_
22
+ #define _KeccakP_800_SnP_h_
23
+
24
+ #define KeccakP800_implementation "8-bit optimized AVR assembler implementation"
25
+ #define KeccakP800_stateSizeInBytes 100
26
+ #define KeccakP800_stateAlignment 8
27
+
28
+ void KeccakP800_StaticInitialize( void );
29
+ /* #define KeccakP800_StaticInitialize() */
30
+ void KeccakP800_Initialize(void *state);
31
+ void KeccakP800_AddByte(void *state, unsigned char data, unsigned int offset);
32
+ /* #define KeccakP800_AddByte(argS, argData, argOffset) ((unsigned char*)argS)[argOffset] ^= (argData) */
33
+ void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
34
+ void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
35
+ void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount);
36
+ void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds);
37
+ void KeccakP800_Permute_12rounds(void *state);
38
+ void KeccakP800_Permute_22rounds(void *state);
39
+ void KeccakP800_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
40
+ void KeccakP800_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
41
+
42
+ #endif