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,733 @@
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
+ ; INFO: Tested on ATmega1280 simulator
26
+
27
+ ; Registers used in all routines
28
+ #define zero 1
29
+ #define rpState 24
30
+ #define rX 26
31
+ #define rY 28
32
+ #define rZ 30
33
+ #define sp 0x3D
34
+
35
+ ;----------------------------------------------------------------------------
36
+ ;
37
+ ; void KeccakP1600_StaticInitialize( void )
38
+ ;
39
+ .global KeccakP1600_StaticInitialize
40
+
41
+ ;----------------------------------------------------------------------------
42
+ ;
43
+ ; void KeccakP1600_Initialize(void *state)
44
+ ;
45
+ ; argument state is passed in r24:r25
46
+ ;
47
+ .global KeccakP1600_Initialize
48
+ KeccakP1600_Initialize:
49
+ movw rZ, r24
50
+ ldi r23, 5*5*8
51
+ KeccakP1600_Initialize_Loop:
52
+ st z+, zero
53
+ dec r23
54
+ brne KeccakP1600_Initialize_Loop
55
+ KeccakP1600_StaticInitialize:
56
+ ret
57
+
58
+ ;----------------------------------------------------------------------------
59
+ ;
60
+ ; void KeccakP1600_AddByte(void *state, unsigned char data, unsigned int offset)
61
+ ;
62
+ ; argument state is passed in r24:r25
63
+ ; argument data is passed in r22:r23, only LSB (r22) is used
64
+ ; argument offset is passed in r20:r21, only LSB (r20) is used
65
+ ;
66
+ .global KeccakP1600_AddByte
67
+ KeccakP1600_AddByte:
68
+ movw rZ, r24
69
+ add rZ, r20
70
+ adc rZ+1, zero
71
+ ld r0, Z
72
+ eor r0, r22
73
+ st Z, r0
74
+ ret
75
+
76
+ ;----------------------------------------------------------------------------
77
+ ;
78
+ ; void KeccakP1600_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
79
+ ;
80
+ ; argument state is passed in r24:r25
81
+ ; argument data is passed in r22:r23
82
+ ; argument offset is passed in r20:r21, only LSB (r20) is used
83
+ ; argument length is passed in r18:r19, only LSB (r18) is used
84
+ ;
85
+ .global KeccakP1600_AddBytes
86
+ KeccakP1600_AddBytes:
87
+ tst r18
88
+ breq KeccakP1600_AddBytes_End
89
+ movw rZ, r24
90
+ add rZ, r20
91
+ adc rZ+1, zero
92
+ movw rX, r22
93
+ KeccakP1600_AddBytes_Loop:
94
+ ld r21, X+
95
+ ld r0, Z
96
+ eor r0, r21
97
+ st Z+, r0
98
+ dec r18
99
+ brne KeccakP1600_AddBytes_Loop
100
+ KeccakP1600_AddBytes_End:
101
+ ret
102
+
103
+ ;----------------------------------------------------------------------------
104
+ ;
105
+ ; void KeccakP1600_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
106
+ ;
107
+ ; argument state is passed in r24:r25
108
+ ; argument data is passed in r22:r23
109
+ ; argument offset is passed in r20:r21, only LSB (r20) is used
110
+ ; argument length is passed in r18:r19, only LSB (r18) is used
111
+ ;
112
+ .global KeccakP1600_OverwriteBytes
113
+ KeccakP1600_OverwriteBytes:
114
+ tst r18
115
+ breq KeccakP1600_OverwriteBytes_End
116
+ movw rZ, r24
117
+ add rZ, r20
118
+ adc rZ+1, zero
119
+ movw rX, r22
120
+ KeccakP1600_OverwriteBytes_Loop:
121
+ ld r0, X+
122
+ st Z+, r0
123
+ dec r18
124
+ brne KeccakP1600_OverwriteBytes_Loop
125
+ KeccakP1600_OverwriteBytes_End:
126
+ ret
127
+
128
+ ;----------------------------------------------------------------------------
129
+ ;
130
+ ; void KeccakP1600_OverwriteWithZeroes(void *state, unsigned int byteCount)
131
+ ;
132
+ ; argument state is passed in r24:r25
133
+ ; argument byteCount is passed in r22:r23, only LSB (r22) is used
134
+ ;
135
+ .global KeccakP1600_OverwriteWithZeroes
136
+ KeccakP1600_OverwriteWithZeroes:
137
+ tst r22
138
+ breq KeccakP1600_OverwriteWithZeroes_End
139
+ movw rZ, r24 ; rZ = state
140
+ KeccakP1600_OverwriteWithZeroes_Loop:
141
+ st Z+, r1
142
+ dec r22
143
+ brne KeccakP1600_OverwriteWithZeroes_Loop
144
+ KeccakP1600_OverwriteWithZeroes_End:
145
+ ret
146
+
147
+ ;----------------------------------------------------------------------------
148
+ ;
149
+ ; void KeccakP1600_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
150
+ ;
151
+ ; argument state is passed in r24:r25
152
+ ; argument data is passed in r22:r23
153
+ ; argument offset is passed in r20:r21, only LSB (r20) is used
154
+ ; argument length is passed in r18:r19, only LSB (r18) is used
155
+ ;
156
+ .global KeccakP1600_ExtractBytes
157
+ KeccakP1600_ExtractBytes:
158
+ tst r18
159
+ breq KeccakP1600_ExtractBytes_End
160
+ movw rZ, r24
161
+ add rZ, r20
162
+ adc rZ+1, zero
163
+ movw rX, r22
164
+ KeccakP1600_ExtractBytes_Loop:
165
+ ld r0, Z+
166
+ st X+, r0
167
+ dec r18
168
+ brne KeccakP1600_ExtractBytes_Loop
169
+ KeccakP1600_ExtractBytes_End:
170
+ ret
171
+
172
+ ;----------------------------------------------------------------------------
173
+ ;
174
+ ; void KeccakP1600_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
175
+ ;
176
+ ; argument state is passed in r24:r25
177
+ ; argument input is passed in r22:r23
178
+ ; argument output is passed in r20:r21
179
+ ; argument offset is passed in r18:r19, only LSB (r18) is used
180
+ ; argument length is passed in r16:r17, only LSB (r16) is used
181
+ ;
182
+ .global KeccakP1600_ExtractAndAddBytes
183
+ KeccakP1600_ExtractAndAddBytes:
184
+ tst r16
185
+ breq KeccakP1600_ExtractAndAddBytes_End
186
+ push r16
187
+ push r28
188
+ push r29
189
+ movw rZ, r24
190
+ add rZ, r18
191
+ adc rZ+1, zero
192
+ movw rX, r22
193
+ movw rY, r20
194
+ KeccakP1600_ExtractAndAddBytes_Loop:
195
+ ld r19, X+
196
+ ld r0, Z+
197
+ eor r0, r19
198
+ st Y+, r0
199
+ dec r16
200
+ brne KeccakP1600_ExtractAndAddBytes_Loop
201
+ pop r29
202
+ pop r28
203
+ pop r16
204
+ KeccakP1600_ExtractAndAddBytes_End:
205
+ ret
206
+
207
+
208
+ #define ROT_BIT(a) ((a) & 7)
209
+ #define ROT_BYTE(a) (((a)/8 + !!(((a)%8) > 4)) & 7)
210
+
211
+ KeccakP1600_RhoPiConstants:
212
+ .BYTE ROT_BIT( 1), ROT_BYTE( 3), 10 * 8
213
+ .BYTE ROT_BIT( 3), ROT_BYTE( 6), 7 * 8
214
+ .BYTE ROT_BIT( 6), ROT_BYTE(10), 11 * 8
215
+ .BYTE ROT_BIT(10), ROT_BYTE(15), 17 * 8
216
+ .BYTE ROT_BIT(15), ROT_BYTE(21), 18 * 8
217
+ .BYTE ROT_BIT(21), ROT_BYTE(28), 3 * 8
218
+ .BYTE ROT_BIT(28), ROT_BYTE(36), 5 * 8
219
+ .BYTE ROT_BIT(36), ROT_BYTE(45), 16 * 8
220
+ .BYTE ROT_BIT(45), ROT_BYTE(55), 8 * 8
221
+ .BYTE ROT_BIT(55), ROT_BYTE( 2), 21 * 8
222
+ .BYTE ROT_BIT( 2), ROT_BYTE(14), 24 * 8
223
+ .BYTE ROT_BIT(14), ROT_BYTE(27), 4 * 8
224
+ .BYTE ROT_BIT(27), ROT_BYTE(41), 15 * 8
225
+ .BYTE ROT_BIT(41), ROT_BYTE(56), 23 * 8
226
+ .BYTE ROT_BIT(56), ROT_BYTE( 8), 19 * 8
227
+ .BYTE ROT_BIT( 8), ROT_BYTE(25), 13 * 8
228
+ .BYTE ROT_BIT(25), ROT_BYTE(43), 12 * 8
229
+ .BYTE ROT_BIT(43), ROT_BYTE(62), 2 * 8
230
+ .BYTE ROT_BIT(62), ROT_BYTE(18), 20 * 8
231
+ .BYTE ROT_BIT(18), ROT_BYTE(39), 14 * 8
232
+ .BYTE ROT_BIT(39), ROT_BYTE(61), 22 * 8
233
+ .BYTE ROT_BIT(61), ROT_BYTE(20), 9 * 8
234
+ .BYTE ROT_BIT(20), ROT_BYTE(44), 6 * 8
235
+ .BYTE ROT_BIT(44), ROT_BYTE( 1), 1 * 8
236
+
237
+ KeccakP1600_RoundConstants_24:
238
+ .BYTE 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
239
+ .BYTE 0x82, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
240
+ .BYTE 0x8a, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80
241
+ .BYTE 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
242
+ .BYTE 0x8b, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
243
+ .BYTE 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00
244
+ .BYTE 0x81, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
245
+ .BYTE 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80
246
+ .BYTE 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
247
+ .BYTE 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
248
+ .BYTE 0x09, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00
249
+ .BYTE 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00
250
+ KeccakP1600_RoundConstants_12:
251
+ .BYTE 0x8b, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00
252
+ .BYTE 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80
253
+ .BYTE 0x89, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80
254
+ .BYTE 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80
255
+ .BYTE 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80
256
+ .BYTE 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80
257
+ .BYTE 0x0a, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
258
+ .BYTE 0x0a, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
259
+ .BYTE 0x81, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
260
+ .BYTE 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80
261
+ .BYTE 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00
262
+ .BYTE 0x08, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
263
+ KeccakP1600_RoundConstants_0:
264
+ .BYTE 0xFF, 0 ; terminator
265
+
266
+ .text
267
+
268
+ #define pRound 22 // 2 regs (22-23)
269
+
270
+ ;----------------------------------------------------------------------------
271
+ ;
272
+ ; void KeccakP1600_Permute_Nrounds( void *state, unsigned int nrounds )
273
+ ;
274
+ ; argument state is passed in r24:r25
275
+ ; argument nrounds is passed in r22:r23 (only LSB (r22) is used)
276
+ ;
277
+ .global KeccakP1600_Permute_Nrounds
278
+ KeccakP1600_Permute_Nrounds:
279
+ mov r26, r22
280
+ ldi pRound, lo8(KeccakP1600_RoundConstants_0)
281
+ ldi pRound+1, hi8(KeccakP1600_RoundConstants_0)
282
+ lsl r26
283
+ lsl r26
284
+ lsl r26
285
+ sub pRound, r26
286
+ sbc pRound+1, zero
287
+ rjmp KeccakP1600_Permute
288
+
289
+ ;----------------------------------------------------------------------------
290
+ ;
291
+ ; void KeccakP1600_Permute_24rounds( void *state )
292
+ ;
293
+ .global KeccakP1600_Permute_24rounds
294
+ KeccakP1600_Permute_24rounds:
295
+ ldi pRound, lo8(KeccakP1600_RoundConstants_24)
296
+ ldi pRound+1, hi8(KeccakP1600_RoundConstants_24)
297
+ rjmp KeccakP1600_Permute
298
+
299
+ ;----------------------------------------------------------------------------
300
+ ;
301
+ ; void KeccakP1600_Permute_12rounds( void *state )
302
+ ;
303
+ .global KeccakP1600_Permute_12rounds
304
+ KeccakP1600_Permute_12rounds:
305
+ ldi pRound, lo8(KeccakP1600_RoundConstants_12)
306
+ ldi pRound+1, hi8(KeccakP1600_RoundConstants_12)
307
+ KeccakP1600_Permute:
308
+ push r2
309
+ push r3
310
+ push r4
311
+ push r5
312
+ push r6
313
+ push r7
314
+ push r8
315
+ push r9
316
+ push r10
317
+ push r11
318
+ push r12
319
+ push r13
320
+ push r14
321
+ push r15
322
+ push r16
323
+ push r17
324
+ push r28
325
+ push r29
326
+
327
+ ; Allocate C variables (5*8)
328
+ in rZ, sp
329
+ in rZ+1, sp+1
330
+ sbiw rZ, 40
331
+ in r0, 0x3F
332
+ cli
333
+ out sp+1, rZ+1
334
+ out sp, rZ ; Z points to 5 C lanes
335
+ out 0x3F, r0
336
+
337
+ ; Variables used in multiple operations
338
+ #define rTemp 2 // 8 regs (2-9)
339
+ #define rTempBis 10 // 8 regs (10-17)
340
+ #define rTempTer 18 // 2 regs (18-19)
341
+ #define pRound 22 // 2 regs (22-23)
342
+
343
+ ; Initial Prepare Theta
344
+ #define TCIPx rTempTer
345
+
346
+ movw rY, rpState
347
+ ldi TCIPx, 5*8
348
+ KeccakInitialPrepTheta_Loop:
349
+ ld r0, Y
350
+ adiw rY, 40
351
+ ld rTemp, Y
352
+ adiw rY, 40
353
+ eor r0, rTemp
354
+ ld rTemp, Y
355
+ adiw rY, 40
356
+ eor r0, rTemp
357
+ ld rTemp, Y
358
+ eor r0, rTemp
359
+ ldd rTemp, Y+40
360
+ eor r0, rTemp
361
+ st Z+, r0
362
+ subi rY, 119
363
+ sbc rY+1, zero
364
+ dec TCIPx
365
+ brne KeccakInitialPrepTheta_Loop
366
+ #undef TCIPx
367
+
368
+ Keccak_RoundLoop:
369
+
370
+ ; Theta
371
+ #define TCplus rX
372
+ #define TCminus rZ
373
+ #define TCcoordX rTempTer
374
+ #define TCcoordY rTempTer+1
375
+
376
+ in TCminus, sp
377
+ in TCminus+1, sp+1
378
+ movw TCplus, TCminus
379
+ adiw TCminus, 4*8
380
+ adiw TCplus, 1*8
381
+ movw rY, rpState
382
+
383
+ ldi TCcoordX, 0x16
384
+ KeccakTheta_Loop1:
385
+ ld rTemp+0, X+
386
+ ld rTemp+1, X+
387
+ ld rTemp+2, X+
388
+ ld rTemp+3, X+
389
+ ld rTemp+4, X+
390
+ ld rTemp+5, X+
391
+ ld rTemp+6, X+
392
+ ld rTemp+7, X+
393
+
394
+ lsl rTemp+0
395
+ rol rTemp+1
396
+ rol rTemp+2
397
+ rol rTemp+3
398
+ rol rTemp+4
399
+ rol rTemp+5
400
+ rol rTemp+6
401
+ rol rTemp+7
402
+ adc rTemp+0, zero
403
+
404
+ ld r0, Z+
405
+ eor rTemp+0, r0
406
+ ld r0, Z+
407
+ eor rTemp+1, r0
408
+ ld r0, Z+
409
+ eor rTemp+2, r0
410
+ ld r0, Z+
411
+ eor rTemp+3, r0
412
+ ld r0, Z+
413
+ eor rTemp+4, r0
414
+ ld r0, Z+
415
+ eor rTemp+5, r0
416
+ ld r0, Z+
417
+ eor rTemp+6, r0
418
+ ld r0, Z+
419
+ eor rTemp+7, r0
420
+
421
+ ldi TCcoordY, 5
422
+ KeccakTheta_Loop2:
423
+ ld r0, Y
424
+ eor r0, rTemp+0
425
+ st Y+, r0
426
+ ld r0, Y
427
+ eor r0, rTemp+1
428
+ st Y+, r0
429
+ ld r0, Y
430
+ eor r0, rTemp+2
431
+ st Y+, r0
432
+ ld r0, Y
433
+ eor r0, rTemp+3
434
+ st Y+, r0
435
+ ld r0, Y
436
+ eor r0, rTemp+4
437
+ st Y+, r0
438
+ ld r0, Y
439
+ eor r0, rTemp+5
440
+ st Y+, r0
441
+ ld r0, Y
442
+ eor r0, rTemp+6
443
+ st Y+, r0
444
+ ld r0, Y
445
+ eor r0, rTemp+7
446
+ st Y+, r0
447
+ adiw rY, 32
448
+
449
+ dec TCcoordY
450
+ brne KeccakTheta_Loop2
451
+
452
+ subi rY, 200-8
453
+ sbc rY+1, zero
454
+
455
+ lsr TCcoordX
456
+ brcc 1f
457
+ breq KeccakTheta_End
458
+ rjmp KeccakTheta_Loop1
459
+ 1:
460
+ cpi TCcoordX, 0x0B
461
+ brne 2f
462
+ sbiw TCminus, 40
463
+ rjmp KeccakTheta_Loop1
464
+ 2:
465
+ sbiw TCplus, 40
466
+ rjmp KeccakTheta_Loop1
467
+
468
+ KeccakTheta_End:
469
+ #undef TCplus
470
+ #undef TCminus
471
+ #undef TCcoordX
472
+ #undef TCcoordY
473
+
474
+
475
+ ; Rho Pi
476
+ #define RPindex rTempTer+0
477
+ #define RPTemp rTempTer+1
478
+
479
+ sbiw rY, 32
480
+
481
+ ld rTemp+0, Y+
482
+ ld rTemp+1, Y+
483
+ ld rTemp+2, Y+
484
+ ld rTemp+3, Y+
485
+ ld rTemp+4, Y+
486
+ ld rTemp+5, Y+
487
+ ld rTemp+6, Y+
488
+ ld rTemp+7, Y+
489
+
490
+ ldi rZ, lo8(KeccakP1600_RhoPiConstants)
491
+ ldi rZ+1, hi8(KeccakP1600_RhoPiConstants)
492
+
493
+ KeccakRhoPi_Loop:
494
+ ; do bit rotation
495
+ lpm RPTemp, Z+ ; get number of bits to rotate
496
+ cpi RPTemp, 5
497
+ brcs rotate64_nbit_leftOrNot
498
+ neg RPTemp
499
+ andi RPTemp, 3
500
+
501
+ rotate64_nbit_right:
502
+ bst rTemp, 0
503
+ ror rTemp+7
504
+ ror rTemp+6
505
+ ror rTemp+5
506
+ ror rTemp+4
507
+ ror rTemp+3
508
+ ror rTemp+2
509
+ ror rTemp+1
510
+ ror rTemp
511
+ bld rTemp+7, 7
512
+ dec RPTemp
513
+ brne rotate64_nbit_right
514
+ rjmp KeccakRhoPi_RhoBitRotateDone
515
+
516
+ rotate64_nbit_leftOrNot:
517
+ tst RPTemp
518
+ breq KeccakRhoPi_RhoBitRotateDone
519
+ rotate64_nbit_left:
520
+ lsl rTemp
521
+ rol rTemp+1
522
+ rol rTemp+2
523
+ rol rTemp+3
524
+ rol rTemp+4
525
+ rol rTemp+5
526
+ rol rTemp+6
527
+ rol rTemp+7
528
+ adc rTemp, r1
529
+ dec RPTemp
530
+ brne rotate64_nbit_left
531
+
532
+ KeccakRhoPi_RhoBitRotateDone:
533
+ lpm r0, Z+ ; get number of bytes to rotate
534
+ lpm RPindex, Z+ ; get index in state
535
+ movw rY, rpState
536
+ add rY, RPindex
537
+ adc rY+1, zero
538
+
539
+ ldi rX, rTempBis
540
+ add rX, r0
541
+ mov rX+1, zero
542
+ ldi RPTemp, 8
543
+ KeccakRhoPi_PiByteRotLoop:
544
+ ld r0, Y+
545
+ st X+, r0
546
+ cpi rX, rTempBis+8
547
+ brne KeccakRhoPi_PiByteRotFirst
548
+ ldi rX, rTempBis
549
+ KeccakRhoPi_PiByteRotFirst:
550
+ dec RPTemp
551
+ brne KeccakRhoPi_PiByteRotLoop
552
+
553
+ sbiw rY, 8
554
+ st Y+, rTemp+0
555
+ st Y+, rTemp+1
556
+ st Y+, rTemp+2
557
+ st Y+, rTemp+3
558
+ st Y+, rTemp+4
559
+ st Y+, rTemp+5
560
+ st Y+, rTemp+6
561
+ st Y+, rTemp+7
562
+
563
+ movw rTemp+0, rTempBis+0
564
+ movw rTemp+2, rTempBis+2
565
+ movw rTemp+4, rTempBis+4
566
+ movw rTemp+6, rTempBis+6
567
+ KeccakRhoPi_RhoDone:
568
+ subi RPindex, 8
569
+ brne KeccakRhoPi_Loop
570
+
571
+ #undef RPindex
572
+ #undef RPTemp
573
+
574
+ ; Chi Iota prepare Theta
575
+ #define CIPTa0 rTemp
576
+ #define CIPTa1 rTemp+1
577
+ #define CIPTa2 rTemp+2
578
+ #define CIPTa3 rTemp+3
579
+ #define CIPTa4 rTemp+4
580
+ #define CIPTc0 rTempBis
581
+ #define CIPTc1 rTempBis+1
582
+ #define CIPTc2 rTempBis+2
583
+ #define CIPTc3 rTempBis+3
584
+ #define CIPTc4 rTempBis+4
585
+ #define CIPTz rTempBis+6
586
+ #define CIPTy rTempBis+7
587
+
588
+ movw rY, rpState
589
+ in rX, sp ; 5 C lanes
590
+ in rX+1, sp+1
591
+ movw rZ, pRound
592
+
593
+ ldi CIPTz, 8
594
+ KeccakChiIotaPrepareTheta_zLoop:
595
+ mov CIPTc0, zero
596
+ mov CIPTc1, zero
597
+ movw CIPTc2, CIPTc0
598
+ mov CIPTc4, zero
599
+
600
+ ldi CIPTy, 5
601
+ KeccakChiIotaPrepareTheta_yLoop:
602
+ ld CIPTa0, Y
603
+ ldd CIPTa1, Y+8
604
+ ldd CIPTa2, Y+16
605
+ ldd CIPTa3, Y+24
606
+ ldd CIPTa4, Y+32
607
+
608
+ ;*p = t = a0 ^ ((~a1) & a2); c0 ^= t;
609
+ mov r0, CIPTa1
610
+ com r0
611
+ and r0, CIPTa2
612
+ eor r0, CIPTa0
613
+ eor CIPTc0, r0
614
+ st Y, r0
615
+
616
+ ;*(p+8) = t = a1 ^ ((~a2) & a3); c1 ^= t;
617
+ mov r0, CIPTa2
618
+ com r0
619
+ and r0, CIPTa3
620
+ eor r0, CIPTa1
621
+ eor CIPTc1, r0
622
+ std Y+8, r0
623
+
624
+ ;*(p+16) = a2 ^= ((~a3) & a4); c2 ^= a2;
625
+ mov r0, CIPTa3
626
+ com r0
627
+ and r0, CIPTa4
628
+ eor r0, CIPTa2
629
+ eor CIPTc2, r0
630
+ std Y+16, r0
631
+
632
+ ;*(p+24) = a3 ^= ((~a4) & a0); c3 ^= a3;
633
+ mov r0, CIPTa4
634
+ com r0
635
+ and r0, CIPTa0
636
+ eor r0, CIPTa3
637
+ eor CIPTc3, r0
638
+ std Y+24, r0
639
+
640
+ ;*(p+32) = a4 ^= ((~a0) & a1); c4 ^= a4;
641
+ com CIPTa0
642
+ and CIPTa0, CIPTa1
643
+ eor CIPTa0, CIPTa4
644
+ eor CIPTc4, CIPTa0
645
+ std Y+32, CIPTa0
646
+
647
+ adiw rY, 40
648
+ dec CIPTy
649
+ brne KeccakChiIotaPrepareTheta_yLoop
650
+
651
+ subi rY, 200
652
+ sbc rY+1, zero
653
+
654
+ lpm r0, Z+ ; Round Constant
655
+ ld CIPTa0, Y
656
+ eor CIPTa0, r0
657
+ st Y+, CIPTa0
658
+
659
+ movw pRound, rZ
660
+ movw rZ, rX
661
+ eor CIPTc0, r0
662
+ st Z+, CIPTc0
663
+ std Z+7, CIPTc1
664
+ std Z+15, CIPTc2
665
+ std Z+23, CIPTc3
666
+ std Z+31, CIPTc4
667
+ movw rX, rZ
668
+ movw rZ, pRound
669
+
670
+ dec CIPTz
671
+ brne KeccakChiIotaPrepareTheta_zLoop
672
+
673
+ #undef CIPTa0
674
+ #undef CIPTa1
675
+ #undef CIPTa2
676
+ #undef CIPTa3
677
+ #undef CIPTa4
678
+ #undef CIPTc0
679
+ #undef CIPTc1
680
+ #undef CIPTc2
681
+ #undef CIPTc3
682
+ #undef CIPTc4
683
+ #undef CIPTz
684
+ #undef CIPTy
685
+
686
+ ;Check for terminator
687
+ lpm r0, Z
688
+ inc r0
689
+ breq Keccak_Done
690
+ rjmp Keccak_RoundLoop
691
+ Keccak_Done:
692
+
693
+ #undef rTemp
694
+ #undef rTempBis
695
+ #undef rTempTer
696
+ #undef pRound
697
+
698
+ ; Free C(on stack) and registers
699
+ in rX, sp ; free 5 C lanes
700
+ in rX+1, sp+1
701
+ adiw rX, 40
702
+ in r0, 0x3F
703
+ cli
704
+ out sp+1, rX+1
705
+ out sp, rX
706
+ out 0x3F, r0
707
+
708
+ pop r29
709
+ pop r28
710
+ pop r17
711
+ pop r16
712
+ pop r15
713
+ pop r14
714
+ pop r13
715
+ pop r12
716
+ pop r11
717
+ pop r10
718
+ pop r9
719
+ pop r8
720
+ pop r7
721
+ pop r6
722
+ pop r5
723
+ pop r4
724
+ pop r3
725
+ pop r2
726
+ ret
727
+
728
+ #undef rpState
729
+ #undef zero
730
+ #undef rX
731
+ #undef rY
732
+ #undef rZ
733
+ #undef sp