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,556 @@
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
+ @ WARNING: This implementation assumes a little endian CPU with ARMv7M architecture (e.g., Cortex-M3) and the GCC compiler.
26
+
27
+
28
+ .thumb
29
+ .syntax unified
30
+ .text
31
+
32
+ @ ----------------------------------------------------------------------------
33
+
34
+ .equ _ba , 0*4
35
+ .equ _be , 1*4
36
+ .equ _bi , 2*4
37
+ .equ _bo , 3*4
38
+ .equ _bu , 4*4
39
+ .equ _ga , 5*4
40
+ .equ _ge , 6*4
41
+ .equ _gi , 7*4
42
+ .equ _go , 8*4
43
+ .equ _gu , 9*4
44
+ .equ _ka , 10*4
45
+ .equ _ke , 11*4
46
+ .equ _ki , 12*4
47
+ .equ _ko , 13*4
48
+ .equ _ku , 14*4
49
+ .equ _ma , 15*4
50
+ .equ _me , 16*4
51
+ .equ _mi , 17*4
52
+ .equ _mo , 18*4
53
+ .equ _mu , 19*4
54
+ .equ _sa , 20*4
55
+ .equ _se , 21*4
56
+ .equ _si , 22*4
57
+ .equ _so , 23*4
58
+ .equ _su , 24*4
59
+ .equ _RFU , 25*4
60
+ .equ _SAS , 26*4
61
+
62
+ @ ----------------------------------------------------------------------------
63
+
64
+ .macro xor5 result,ptr,rb,g,k,m,s
65
+ ldr \result, [\ptr, #\g]
66
+ eors \result, \result, \rb
67
+ ldr \rb, [\ptr, #\k]
68
+ eors \result, \result, \rb
69
+ ldr \rb, [\ptr, #\m]
70
+ eors \result, \result, \rb
71
+ ldr \rb, [\ptr, #\s]
72
+ eors \result, \result, \rb
73
+ .endm
74
+
75
+ .macro mTe b, yy, rr
76
+ eors \b, \b, \yy
77
+ .if \rr != 0
78
+ ror \b, \b, #32-\rr
79
+ .endif
80
+ .endm
81
+
82
+ .macro mCI resptr, resofs, ax0, ax1, ax2, temp, iota
83
+ bics \temp, \ax2, \ax1
84
+ eors \temp, \temp, \ax0
85
+ .if \iota < 0x100
86
+ eors \temp, \temp, #\iota
87
+ .else
88
+ mov \ax1, #\iota & 0xFFFF
89
+ .if \iota >= 0x10000
90
+ movt \ax1, #\iota >> 16
91
+ .endif
92
+ eors \temp, \temp, \ax1
93
+ .endif
94
+ str \temp, [\resptr, #\resofs]
95
+ .endm
96
+
97
+ .macro mC resptr, resofs, ax0, ax1, ax2, temp, pTxor, pTreg, save
98
+ bics \temp, \ax2, \ax1
99
+ eors \temp, \temp, \ax0
100
+ .if \save != 0
101
+ str \temp, [\resptr, #\resofs]
102
+ .endif
103
+ .if \pTxor != 0
104
+ eors \pTreg, \pTreg, \temp
105
+ .endif
106
+ .endm
107
+
108
+ .macro mKR stateOut,stateIn,iota
109
+
110
+ @ prepare Theta
111
+ xor5 r1, \stateIn, r9, _ga, _ka, _ma, _sa
112
+ xor5 r2, \stateIn, r10, _ge, _ke, _me, _se
113
+ eor r9, r8, r2, ROR #31
114
+ eor r10, r1, r6, ROR #31
115
+ eor r11, r2, r7, ROR #31
116
+ eor r12, r6, r8, ROR #31
117
+ eor lr, r7, r1, ROR #31
118
+
119
+ @ Theta Rho Pi Chi Iota
120
+ eors r1, r3, r11
121
+ rors r1, r1, #32-30
122
+ ldr r2, [\stateIn, #_go]
123
+ ldr r3, [\stateIn, #_ku]
124
+ ldr r4, [\stateIn, #_ma]
125
+ ldr r5, [\stateIn, #_se]
126
+ mTe r2, r12, 23
127
+ mTe r3, lr, 7
128
+ mTe r4, r9, 9
129
+ mTe r5, r10, 2
130
+ mC \stateOut, _su, r5, r1, r2, r8, 0, 0, 1
131
+ mC \stateOut, _so, r4, r5, r1, r7, 0, 0, 1
132
+ mC \stateOut, _si, r3, r4, r5, r6, 0, 0, 1
133
+ mC \stateOut, _se, r2, r3, r4, r4, 0, 0, 1
134
+ mC \stateOut, _sa, r1, r2, r3, r3, 0, 0, 1
135
+
136
+ ldr r1, [\stateIn, #_bu]
137
+ ldr r2, [\stateIn, #_ga]
138
+ ldr r4, [\stateIn, #_mi]
139
+ ldr r5, [\stateIn, #_so]
140
+ mTe r1, lr, 27
141
+ mTe r2, r9, 4
142
+ mTe r4, r11, 15
143
+ mTe r5, r12, 24
144
+ mC \stateOut, _mu, r5, r1, r2, r3, 1, r8, 1
145
+ mC \stateOut, _mo, r4, r5, r1, r3, 1, r7, 1
146
+ ldr r3, [\stateIn, #_ke]
147
+ mTe r3, r10, 10
148
+ mC \stateOut, _mi, r3, r4, r5, r5, 1, r6, 1
149
+ mC \stateOut, _me, r2, r3, r4, r4, 0, 0, 1
150
+ mC \stateOut, _ma, r1, r2, r3, r3, 0, 0, 1
151
+
152
+ ldr r1, [\stateIn, #_be]
153
+ ldr r2, [\stateIn, #_gi]
154
+ ldr r4, [\stateIn, #_mu]
155
+ ldr r5, [\stateIn, #_sa]
156
+ mTe r1, r10, 1
157
+ mTe r2, r11, 6
158
+ mTe r4, lr, 8
159
+ mTe r5, r9, 18
160
+ mC \stateOut, _ku, r5, r1, r2, r3, 1, r8, 1
161
+ mC \stateOut, _ko, r4, r5, r1, r3, 1, r7, 1
162
+ ldr r3, [\stateIn, #_ko]
163
+ mTe r3, r12, 25
164
+ mC \stateOut, _ki, r3, r4, r5, r5, 1, r6, 1
165
+ mC \stateOut, _ke, r2, r3, r4, r4, 0, 0, 1
166
+ mC \stateOut, _ka, r1, r2, r3, r3, 0, 0, 1
167
+
168
+ ldr r1, [\stateIn, #_bo]
169
+ ldr r2, [\stateIn, #_gu]
170
+ ldr r4, [\stateIn, #_me]
171
+ ldr r5, [\stateIn, #_si]
172
+ mTe r1, r12, 28
173
+ mTe r2, lr, 20
174
+ mTe r4, r10, 13
175
+ mTe r5, r11, 29
176
+ mC \stateOut, _gu, r5, r1, r2, r3, 1, r8, 1
177
+ mC \stateOut, _go, r4, r5, r1, r3, 1, r7, 1
178
+ ldr r3, [\stateIn, #_ka]
179
+ mTe r3, r9, 3
180
+ mC \stateOut, _gi, r3, r4, r5, r5, 1, r6, 1
181
+ mC \stateOut, _ge, r2, r3, r4, r4, 0, 0, 1
182
+ mC \stateOut, _ga, r1, r2, r3, r3, 0, 0, 1
183
+
184
+ ldr r1, [\stateIn, #_ba]
185
+ ldr r2, [\stateIn, #_ge]
186
+ ldr r3, [\stateIn, #_ki]
187
+ ldr r4, [\stateIn, #_mo]
188
+ ldr r5, [\stateIn, #_su]
189
+ mTe r1, r9, 0
190
+ mTe r2, r10, 12
191
+ mTe r3, r11, 11
192
+ mTe r4, r12, 21
193
+ mTe r5, lr, 14
194
+ mC \stateOut, _bu, r5, r1, r2, lr, 1, r8, 1
195
+ mC \stateOut, _bo, r4, r5, r1, r12, 1, r7, 1
196
+ mC \stateOut, _bi, r3, r4, r5, r11, 1, r6, 0
197
+ mC \stateOut, _be, r2, r3, r4, r10, 0, 0, 1
198
+ mCI \stateOut, _ba, r1, r2, r3, r9, \iota
199
+ mov r3, r11
200
+ .endm
201
+
202
+ @ ----------------------------------------------------------------------------
203
+ @
204
+ @ void KeccakP800_StaticInitialize( void )
205
+ @
206
+ .align 8
207
+ .global KeccakP800_StaticInitialize
208
+ .type KeccakP800_StaticInitialize, %function;
209
+ KeccakP800_StaticInitialize:
210
+ bx lr
211
+
212
+
213
+ @ ----------------------------------------------------------------------------
214
+ @
215
+ @ void KeccakP800_Initialize(void *state)
216
+ @
217
+ .align 8
218
+ .global KeccakP800_Initialize
219
+ .type KeccakP800_Initialize, %function;
220
+ KeccakP800_Initialize:
221
+ push {r4 - r5}
222
+ movs r1, #0
223
+ movs r2, #0
224
+ movs r3, #0
225
+ movs r4, #0
226
+ movs r5, #0
227
+ stmia r0!, { r1 - r5 }
228
+ stmia r0!, { r1 - r5 }
229
+ stmia r0!, { r1 - r5 }
230
+ stmia r0!, { r1 - r5 }
231
+ stmia r0!, { r1 - r5 }
232
+ pop {r4 - r5}
233
+ bx lr
234
+
235
+
236
+ @ ----------------------------------------------------------------------------
237
+ @
238
+ @ void KeccakP800_AddByte(void *state, unsigned char byte, unsigned int offset)
239
+ @
240
+ .align 8
241
+ .global KeccakP800_AddByte
242
+ .type KeccakP800_AddByte, %function;
243
+ KeccakP800_AddByte:
244
+ ldrb r3, [r0, r2]
245
+ eors r3, r3, r1
246
+ strb r3, [r0, r2]
247
+ bx lr
248
+
249
+
250
+ @ ----------------------------------------------------------------------------
251
+ @
252
+ @ void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
253
+ @
254
+ .align 8
255
+ .global KeccakP800_AddBytes
256
+ .type KeccakP800_AddBytes, %function;
257
+ KeccakP800_AddBytes:
258
+ push {r4,lr}
259
+ adds r0, r0, r2 @ state += offset
260
+ subs r3, r3, #4 @ .if length >= 4
261
+ bcc KeccakP800_AddBytes_Bytes
262
+ KeccakP800_AddBytes_LanesLoop: @ then, perform on words
263
+ ldr r2, [r0]
264
+ ldr r4, [r1], #4
265
+ eors r2, r2, r4
266
+ str r2, [r0], #4
267
+ subs r3, r3, #4
268
+ bcs KeccakP800_AddBytes_LanesLoop
269
+ KeccakP800_AddBytes_Bytes:
270
+ adds r3, r3, #3
271
+ bcc KeccakP800_AddBytes_Exit
272
+ KeccakP800_AddBytes_BytesLoop:
273
+ ldrb r2, [r0]
274
+ ldrb r4, [r1], #1
275
+ eors r2, r2, r4
276
+ strb r2, [r0], #1
277
+ subs r3, r3, #1
278
+ bcs KeccakP800_AddBytes_BytesLoop
279
+ KeccakP800_AddBytes_Exit:
280
+ pop {r4,pc}
281
+
282
+
283
+ @ ----------------------------------------------------------------------------
284
+ @
285
+ @ void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
286
+ @
287
+ .align 8
288
+ .global KeccakP800_OverwriteBytes
289
+ .type KeccakP800_OverwriteBytes, %function;
290
+ KeccakP800_OverwriteBytes:
291
+ adds r0, r0, r2 @ state += offset
292
+ subs r3, r3, #4 @ .if length >= 4
293
+ bcc KeccakP800_OverwriteBytes_Bytes
294
+ KeccakP800_OverwriteBytes_LanesLoop: @ then, perform on words
295
+ ldr r2, [r1], #4
296
+ str r2, [r0], #4
297
+ subs r3, r3, #4
298
+ bcs KeccakP800_OverwriteBytes_LanesLoop
299
+ KeccakP800_OverwriteBytes_Bytes:
300
+ adds r3, r3, #3
301
+ bcc KeccakP800_OverwriteBytes_Exit
302
+ KeccakP800_OverwriteBytes_BytesLoop:
303
+ ldrb r2, [r1], #1
304
+ strb r2, [r0], #1
305
+ subs r3, r3, #1
306
+ bcs KeccakP800_OverwriteBytes_BytesLoop
307
+ KeccakP800_OverwriteBytes_Exit:
308
+ bx lr
309
+
310
+
311
+ @ ----------------------------------------------------------------------------
312
+ @
313
+ @ void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
314
+ @
315
+ .align 8
316
+ .global KeccakP800_OverwriteWithZeroes
317
+ .type KeccakP800_OverwriteWithZeroes, %function;
318
+ KeccakP800_OverwriteWithZeroes:
319
+ movs r3, #0
320
+ lsrs r2, r1, #2
321
+ beq KeccakP800_OverwriteWithZeroes_Bytes
322
+ KeccakP800_OverwriteWithZeroes_LoopLanes:
323
+ str r3, [r0], #4
324
+ subs r2, r2, #1
325
+ bne KeccakP800_OverwriteWithZeroes_LoopLanes
326
+ KeccakP800_OverwriteWithZeroes_Bytes:
327
+ ands r1, #3
328
+ beq KeccakP800_OverwriteWithZeroes_Exit
329
+ KeccakP800_OverwriteWithZeroes_LoopBytes:
330
+ strb r3, [r0], #1
331
+ subs r1, r1, #1
332
+ bne KeccakP800_OverwriteWithZeroes_LoopBytes
333
+ KeccakP800_OverwriteWithZeroes_Exit:
334
+ bx lr
335
+
336
+
337
+ @ ----------------------------------------------------------------------------
338
+ @
339
+ @ void KeccakP800_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
340
+ @
341
+ .align 8
342
+ .global KeccakP800_ExtractBytes
343
+ .type KeccakP800_ExtractBytes, %function;
344
+ KeccakP800_ExtractBytes:
345
+ adds r0, r0, r2 @ state += offset
346
+ subs r3, r3, #4 @ .if length >= 4
347
+ bcc KeccakP800_ExtractBytes_Bytes
348
+ KeccakP800_ExtractBytes_LanesLoop: @ then, handle words
349
+ ldr r2, [r0], #4
350
+ str r2, [r1], #4
351
+ subs r3, r3, #4
352
+ bcs KeccakP800_ExtractBytes_LanesLoop
353
+ KeccakP800_ExtractBytes_Bytes:
354
+ adds r3, r3, #3
355
+ bcc KeccakP800_ExtractBytes_Exit
356
+ KeccakP800_ExtractBytes_BytesLoop:
357
+ ldrb r2, [r0], #1
358
+ strb r2, [r1], #1
359
+ subs r3, r3, #1
360
+ bcs KeccakP800_ExtractBytes_BytesLoop
361
+ KeccakP800_ExtractBytes_Exit:
362
+ bx lr
363
+
364
+
365
+ @ ----------------------------------------------------------------------------
366
+ @
367
+ @ void KeccakP800_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
368
+ @
369
+ .align 8
370
+ .global KeccakP800_ExtractAndAddBytes
371
+ .type KeccakP800_ExtractAndAddBytes, %function;
372
+ KeccakP800_ExtractAndAddBytes:
373
+ push {r4,r5}
374
+ adds r0, r0, r3 @ state += offset (offset register no longer needed, reuse for length)
375
+ ldr r3, [sp, #8] @ get length argument from stack
376
+ subs r3, r3, #4 @ .if length >= 4
377
+ bcc KeccakP800_ExtractAndAddBytes_Bytes
378
+ KeccakP800_ExtractAndAddBytes_LanesLoop: @ then, handle words
379
+ ldr r5, [r0], #4
380
+ ldr r4, [r1], #4
381
+ eors r5, r5, r4
382
+ str r5, [r2], #4
383
+ subs r3, r3, #4
384
+ bcs KeccakP800_ExtractAndAddBytes_LanesLoop
385
+ KeccakP800_ExtractAndAddBytes_Bytes:
386
+ adds r3, r3, #3
387
+ bcc KeccakP800_ExtractAndAddBytes_Exit
388
+ KeccakP800_ExtractAndAddBytes_BytesLoop:
389
+ ldrb r5, [r0], #1
390
+ ldrb r4, [r1], #1
391
+ eors r5, r5, r4
392
+ strb r5, [r2], #1
393
+ subs r3, r3, #1
394
+ bcs KeccakP800_ExtractAndAddBytes_BytesLoop
395
+ KeccakP800_ExtractAndAddBytes_Exit:
396
+ pop {r4,r5}
397
+ bx lr
398
+
399
+
400
+ @ ----------------------------------------------------------------------------
401
+ @
402
+ @ void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds)
403
+ @
404
+ .align 8
405
+ .global KeccakP800_Permute_Nrounds
406
+ .type KeccakP800_Permute_Nrounds, %function;
407
+ KeccakP800_Permute_Nrounds:
408
+ push {r4-r12,lr}
409
+ sub sp, sp, #_SAS
410
+ adr r2, KeccakP800_Permute_RoundPointers-4 @ get round function pointer from table
411
+ ldr r2, [r2, r1, LSL #2]
412
+ orr r2, r2, #1 @ set the thumb bit, not needed for Keil, gcc?
413
+ ldm r0, {r9,r10,r11,r12,lr}
414
+ tst r1, #1
415
+ beq KeccakP800_Permute_Nrounds_PrepareTheta
416
+ add r0, r0, #5*4 @ odd number of rounds
417
+ mov r1, sp @ copy state to stack
418
+ stm r1!, {r9,r10,r11,r12,lr}
419
+ ldm r0!, {r3,r4,r5,r7,r8}
420
+ stm r1!, {r3,r4,r5,r7,r8}
421
+ ldm r0!, {r3,r4,r5,r7,r8}
422
+ stm r1!, {r3,r4,r5,r7,r8}
423
+ ldm r0!, {r3,r4,r5,r7,r8}
424
+ stm r1!, {r3,r4,r5,r7,r8}
425
+ ldm r0!, {r3,r4,r5,r7,r8}
426
+ stm r1!, {r3,r4,r5,r7,r8}
427
+ sub r0, r0, #25*4
428
+ KeccakP800_Permute_Nrounds_PrepareTheta:
429
+ mov r3, r11
430
+ xor5 r8, r0, lr, _gu, _ku, _mu, _su
431
+ xor5 r7, r0, r12, _go, _ko, _mo, _so
432
+ xor5 r6, r0, r11, _gi, _ki, _mi, _si
433
+ bx r2
434
+
435
+
436
+ .align 8
437
+ KeccakP800_Permute_RoundPointers:
438
+ .long KeccakP800_Permute_1
439
+ .long KeccakP800_Permute_2
440
+ .long KeccakP800_Permute_3
441
+ .long KeccakP800_Permute_4
442
+ .long KeccakP800_Permute_5
443
+ .long KeccakP800_Permute_6
444
+ .long KeccakP800_Permute_7
445
+ .long KeccakP800_Permute_8
446
+ .long KeccakP800_Permute_9
447
+ .long KeccakP800_Permute_10
448
+ .long KeccakP800_Permute_11
449
+ .long KeccakP800_Permute_12
450
+ .long KeccakP800_Permute_13
451
+ .long KeccakP800_Permute_14
452
+ .long KeccakP800_Permute_15
453
+ .long KeccakP800_Permute_16
454
+ .long KeccakP800_Permute_17
455
+ .long KeccakP800_Permute_18
456
+ .long KeccakP800_Permute_19
457
+ .long KeccakP800_Permute_20
458
+ .long KeccakP800_Permute_21
459
+ .long KeccakP800_Permute_22
460
+
461
+ @ ----------------------------------------------------------------------------
462
+ @
463
+ @ void KeccakP800_Permute_12rounds( void *state )
464
+ @
465
+ .align 8
466
+ .global KeccakP800_Permute_12rounds
467
+ .type KeccakP800_Permute_12rounds, %function;
468
+ KeccakP800_Permute_12rounds:
469
+ push {r4-r12,lr}
470
+ sub sp, sp, #_SAS
471
+ ldm r0, {r9,r10,r11,r12,lr}
472
+ mov r3, r11
473
+ xor5 r8, r0, lr, _gu, _ku, _mu, _su
474
+ xor5 r7, r0, r12, _go, _ko, _mo, _so
475
+ xor5 r6, r0, r11, _gi, _ki, _mi, _si
476
+ mKR sp, r0, 0x80008009
477
+ mKR r0, sp, 0x8000000a
478
+ mKR sp, r0, 0x8000808b
479
+ mKR r0, sp, 0x0000008b
480
+ mKR sp, r0, 0x00008089
481
+ mKR r0, sp, 0x00008003
482
+ mKR sp, r0, 0x00008002
483
+ mKR r0, sp, 0x00000080
484
+ mKR sp, r0, 0x0000800a
485
+ mKR r0, sp, 0x8000000a
486
+ mKR sp, r0, 0x80008081
487
+ mKR r0, sp, 0x00008080
488
+ str r11, [r0, #_bi]
489
+ add sp,sp,#_SAS
490
+ pop {r4-r12,pc}
491
+
492
+
493
+ @ ----------------------------------------------------------------------------
494
+ @
495
+ @ void KeccakP800_Permute_22rounds( void *state )
496
+ @
497
+ .align 8
498
+ .global KeccakP800_Permute_22rounds
499
+ .type KeccakP800_Permute_22rounds, %function;
500
+ KeccakP800_Permute_22rounds:
501
+ push {r4-r12,lr}
502
+ sub sp, sp, #_SAS
503
+ ldm r0, {r9,r10,r11,r12,lr}
504
+ mov r3, r11
505
+ xor5 r8, r0, lr, _gu, _ku, _mu, _su
506
+ xor5 r7, r0, r12, _go, _ko, _mo, _so
507
+ xor5 r6, r0, r11, _gi, _ki, _mi, _si
508
+ KeccakP800_Permute_22:
509
+ mKR sp, r0, 0x00000001
510
+ KeccakP800_Permute_21:
511
+ mKR r0, sp, 0x00008082
512
+ KeccakP800_Permute_20:
513
+ mKR sp, r0, 0x0000808a
514
+ KeccakP800_Permute_19:
515
+ mKR r0, sp, 0x80008000
516
+ KeccakP800_Permute_18:
517
+ mKR sp, r0, 0x0000808b
518
+ KeccakP800_Permute_17:
519
+ mKR r0, sp, 0x80000001
520
+ KeccakP800_Permute_16:
521
+ mKR sp, r0, 0x80008081
522
+ KeccakP800_Permute_15:
523
+ mKR r0, sp, 0x00008009
524
+ KeccakP800_Permute_14:
525
+ mKR sp, r0, 0x0000008a
526
+ KeccakP800_Permute_13:
527
+ mKR r0, sp, 0x00000088
528
+ KeccakP800_Permute_12:
529
+ mKR sp, r0, 0x80008009
530
+ KeccakP800_Permute_11:
531
+ mKR r0, sp, 0x8000000a
532
+ KeccakP800_Permute_10:
533
+ mKR sp, r0, 0x8000808b
534
+ KeccakP800_Permute_9:
535
+ mKR r0, sp, 0x0000008b
536
+ KeccakP800_Permute_8:
537
+ mKR sp, r0, 0x00008089
538
+ KeccakP800_Permute_7:
539
+ mKR r0, sp, 0x00008003
540
+ KeccakP800_Permute_6:
541
+ mKR sp, r0, 0x00008002
542
+ KeccakP800_Permute_5:
543
+ mKR r0, sp, 0x00000080
544
+ KeccakP800_Permute_4:
545
+ mKR sp, r0, 0x0000800a
546
+ KeccakP800_Permute_3:
547
+ mKR r0, sp, 0x8000000a
548
+ KeccakP800_Permute_2:
549
+ mKR sp, r0, 0x80008081
550
+ KeccakP800_Permute_1:
551
+ mKR r0, sp, 0x00008080
552
+ str r11, [r0, #_bi]
553
+ add sp, sp, #_SAS
554
+ pop {r4-r12,pc}
555
+
556
+
@@ -0,0 +1,32 @@
1
+ /*
2
+ The eXtended Keccak Code Package (XKCP)
3
+ https://github.com/XKCP/XKCP
4
+
5
+ Implementation by Andre Moraes
6
+
7
+ ---
8
+
9
+ Please refer to SnP-documentation.h for more details.
10
+ */
11
+
12
+ #ifndef _KeccakP_800_SnP_h_
13
+ #define _KeccakP_800_SnP_h_
14
+
15
+ #define KeccakP800_implementation "64-bit optimized ARMv8a assembler implementation"
16
+ #define KeccakP800_stateSizeInBytes 100
17
+ #define KeccakP800_stateAlignment 8
18
+
19
+ #define KeccakP800_StaticInitialize()
20
+ void KeccakP800_Initialize(void *state);
21
+ void KeccakP800_AddByte(void *state, unsigned char data, unsigned int offset);
22
+ void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
23
+ void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length);
24
+ void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount);
25
+ void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds);
26
+ void KeccakP800_Permute_12rounds(void *state);
27
+ void KeccakP800_Permute_22rounds(void *state);
28
+ void KeccakP800_ExtractBytes(const void *state, unsigned char *data, unsigned int offset, unsigned int length);
29
+ void KeccakP800_ExtractAndAddBytes(const void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length);
30
+
31
+ #endif
32
+