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,521 @@
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 ARMv7A architecture and the ARMCC compiler.
26
+
27
+ PRESERVE8
28
+ AREA |.text|, CODE, READONLY
29
+
30
+ _ba equ 0*4
31
+ _be equ 1*4
32
+ _bi equ 2*4
33
+ _bo equ 3*4
34
+ _bu equ 4*4
35
+ _ga equ 5*4
36
+ _ge equ 6*4
37
+ _gi equ 7*4
38
+ _go equ 8*4
39
+ _gu equ 9*4
40
+ _ka equ 10*4
41
+ _ke equ 11*4
42
+ _ki equ 12*4
43
+ _ko equ 13*4
44
+ _ku equ 14*4
45
+ _ma equ 15*4
46
+ _me equ 16*4
47
+ _mi equ 17*4
48
+ _mo equ 18*4
49
+ _mu equ 19*4
50
+ _sa equ 20*4
51
+ _se equ 21*4
52
+ _si equ 22*4
53
+ _so equ 23*4
54
+ _su equ 24*4
55
+ _SAS equ 4*25+4 ; keep stack aligned on 8 bytes
56
+
57
+
58
+ MACRO
59
+ ThetaRhoPiChiIota $stateOut, $stateIn, $ofsOut, $ofs1, $ofs2, $ofs3, $ofs4, $dd1, $dd2, $dd3, $dd4, $dd5, $rr2, $rr3, $rr4, $rr5
60
+ ldr r2, [$stateIn, #$ofs1]
61
+ ldr r3, [$stateIn, #$ofs2]
62
+ ldr r4, [$stateIn, #$ofs3]
63
+ eor r2, r2, $dd1
64
+ ldr r5, [$stateIn, #$ofs4]
65
+ eor r3, r3, $dd2
66
+ eor r4, r4, $dd3
67
+ eor r5, r5, $dd4
68
+ eor r6, r6, $dd5
69
+ ror r3, r3, #32-$rr2
70
+ ror r4, r4, #32-$rr3
71
+ ror r5, r5, #32-$rr4
72
+ ror r6, r6, #32-$rr5
73
+
74
+ bic r1, r5, r4
75
+ eor r1, r1, r3
76
+ str r1, [$stateOut, #$ofsOut+4]
77
+ bic r1, r6, r5
78
+ eor r1, r1, r4
79
+ str r1, [$stateOut, #$ofsOut+8]
80
+ bic r1, r2, r6
81
+ eor r1, r1, r5
82
+ str r1, [$stateOut, #$ofsOut+12]
83
+ bic r7, r3, r2
84
+ eor r7, r7, r6
85
+ str r7, [$stateOut, #$ofsOut+16]
86
+ ldr r1, [lr], #4
87
+ bic r4, r4, r3
88
+ eor r4, r4, r1
89
+ eor r4, r4, r2
90
+ str r4, [$stateOut, #$ofsOut+0]
91
+ MEND
92
+
93
+ MACRO
94
+ ThetaRhoPiChi $stateOut, $stateIn, $ofsOut, $ofs1, $ofs2, $ofs3, $ofs4, $ofs5, $dd1, $dd2, $dd3, $dd4, $dd5, $rr1, $rr2, $rr3, $rr4, $rr5
95
+ ldr r2, [$stateIn, #$ofs1]
96
+ ldr r3, [$stateIn, #$ofs2]
97
+ ldr r4, [$stateIn, #$ofs3]
98
+ eor r2, r2, $dd1
99
+ ldr r5, [$stateIn, #$ofs4]
100
+ eor r3, r3, $dd2
101
+ ldr r6, [$stateIn, #$ofs5]
102
+ eor r4, r4, $dd3
103
+ eor r5, r5, $dd4
104
+ ror r2, r2, #32-$rr1
105
+ eor r6, r6, $dd5
106
+ ror r3, r3, #32-$rr2
107
+ ror r4, r4, #32-$rr3
108
+ ror r5, r5, #32-$rr4
109
+ ror r6, r6, #32-$rr5
110
+
111
+ bic r1, r4, r3
112
+ eor r1, r1, r2
113
+ str r1, [$stateOut, #$ofsOut+0]
114
+ bic r1, r5, r4
115
+ eor r1, r1, r3
116
+ str r1, [$stateOut, #$ofsOut+4]
117
+ bic r1, r6, r5
118
+ eor r1, r1, r4
119
+ str r1, [$stateOut, #$ofsOut+8]
120
+ bic r1, r2, r6
121
+ bic r2, r3, r2
122
+ eor r1, r1, r5
123
+ eor r2, r2, r6
124
+ str r1, [$stateOut, #$ofsOut+12]
125
+ eor r7, r7, r2
126
+ str r2, [$stateOut, #$ofsOut+16]
127
+ MEND
128
+
129
+ MACRO
130
+ ThetaRhoPiChiLast $stateOut, $stateIn, $ofsOut, $ofs1, $ofs2, $ofs3, $ofs4, $ofs5, $dd1, $dd2, $dd3, $dd4, $dd5, $rr1, $rr2, $rr3, $rr4, $rr5
131
+ ldr r2, [$stateIn, #$ofs1]
132
+ ldr r3, [$stateIn, #$ofs2]
133
+ ldr r4, [$stateIn, #$ofs3]
134
+ eor r2, r2, $dd1
135
+ ldr r5, [$stateIn, #$ofs4]
136
+ eor r3, r3, $dd2
137
+ ldr r6, [$stateIn, #$ofs5]
138
+ eor r4, r4, $dd3
139
+ eor r5, r5, $dd4
140
+ ror r2, r2, #32-$rr1
141
+ eor r6, r6, $dd5
142
+ ror r3, r3, #32-$rr2
143
+ ror r4, r4, #32-$rr3
144
+ ror r5, r5, #32-$rr4
145
+ ror r6, r6, #32-$rr5
146
+
147
+ bic r8, r4, r3
148
+ bic r9, r5, r4
149
+ bic r10, r6, r5
150
+ bic r11, r2, r6
151
+ bic r1, r3, r2
152
+ eor r8, r8, r2
153
+ eor r9, r9, r3
154
+ eor r10, r10, r4
155
+ str r8, [$stateOut, #$ofsOut+0]
156
+ eor r11, r11, r5
157
+ str r9, [$stateOut, #$ofsOut+4]
158
+ eor r6, r6, r1
159
+ str r10, [$stateOut, #$ofsOut+8]
160
+ str r11, [$stateOut, #$ofsOut+12]
161
+ eor r7, r7, r6
162
+ str r6, [$stateOut, #$ofsOut+16]
163
+ MEND
164
+
165
+ MACRO
166
+ KeccakRound $stateOut, $stateIn
167
+ ; prepare Theta
168
+ ldr r2, [$stateIn, #_ba]
169
+ ldr r3, [$stateIn, #_be]
170
+ ldr r4, [$stateIn, #_bi]
171
+ ldr r5, [$stateIn, #_bo]
172
+ eor r2, r2, r8
173
+ eor r3, r3, r9
174
+ eor r4, r4, r10
175
+ eor r5, r5, r11
176
+ ldr r8, [$stateIn, #_ga]
177
+ ldr r9, [$stateIn, #_ge]
178
+ ldr r10, [$stateIn, #_gi]
179
+ ldr r11, [$stateIn, #_go]
180
+ eor r2, r2, r8
181
+ eor r3, r3, r9
182
+ eor r4, r4, r10
183
+ eor r5, r5, r11
184
+ ldr r8, [$stateIn, #_ka]
185
+ ldr r9, [$stateIn, #_ke]
186
+ ldr r10, [$stateIn, #_ki]
187
+ ldr r11, [$stateIn, #_ko]
188
+ eor r2, r2, r8
189
+ eor r3, r3, r9
190
+ eor r4, r4, r10
191
+ eor r5, r5, r11
192
+ ldr r8, [$stateIn, #_ma]
193
+ ldr r9, [$stateIn, #_me]
194
+ ldr r10, [$stateIn, #_mi]
195
+ ldr r11, [$stateIn, #_mo]
196
+ eor r2, r2, r8
197
+ eor r3, r3, r9
198
+ eor r4, r4, r10
199
+ eor r5, r5, r11
200
+ eor r8, r7, r3, ROR #31
201
+ eor r9, r2, r4, ROR #31
202
+ eor r10, r3, r5, ROR #31
203
+ eor r11, r4, r7, ROR #31
204
+ eor r12, r5, r2, ROR #31
205
+
206
+ ThetaRhoPiChiIota $stateOut, $stateIn, _ba, _ba, _ge, _ki, _mo, r8, r9, r10, r11, r12, 12, 11, 21, 14
207
+ ThetaRhoPiChi $stateOut, $stateIn, _ga, _bo, _gu, _ka, _me, _si, r11, r12, r8, r9, r10, 28, 20, 3, 13, 29
208
+ ThetaRhoPiChi $stateOut, $stateIn, _ka, _be, _gi, _ko, _mu, _sa, r9, r10, r11, r12, r8, 1, 6, 25, 8, 18
209
+ ThetaRhoPiChi $stateOut, $stateIn, _ma, _bu, _ga, _ke, _mi, _so, r12, r8, r9, r10, r11, 27, 4, 10, 15, 24
210
+ ThetaRhoPiChiLast $stateOut, $stateIn, _sa, _bi, _go, _ku, _ma, _se, r10, r11, r12, r8, r9, 30, 23, 7, 9, 2
211
+ MEND
212
+
213
+
214
+ ; ----------------------------------------------------------------------------
215
+ ;
216
+ ; void KeccakP800_StaticInitialize( void )
217
+ ;
218
+ ALIGN
219
+ EXPORT KeccakP800_StaticInitialize
220
+ KeccakP800_StaticInitialize PROC
221
+ bx lr
222
+ ENDP
223
+
224
+ ; ----------------------------------------------------------------------------
225
+ ;
226
+ ; void KeccakP800_Initialize(void *state)
227
+ ;
228
+ ALIGN
229
+ EXPORT KeccakP800_Initialize
230
+ KeccakP800_Initialize PROC
231
+ push {r4 - r5}
232
+ movs r1, #0
233
+ movs r2, #0
234
+ movs r3, #0
235
+ movs r4, #0
236
+ movs r5, #0
237
+ stmia r0!, { r1 - r5 }
238
+ stmia r0!, { r1 - r5 }
239
+ stmia r0!, { r1 - r5 }
240
+ stmia r0!, { r1 - r5 }
241
+ stmia r0!, { r1 - r5 }
242
+ pop {r4 - r5}
243
+ bx lr
244
+ ENDP
245
+
246
+ ; ----------------------------------------------------------------------------
247
+ ;
248
+ ; void KeccakP800_AddByte(void *state, unsigned char byte, unsigned int offset)
249
+ ;
250
+ ALIGN
251
+ EXPORT KeccakP800_AddByte
252
+ KeccakP800_AddByte PROC
253
+ ldrb r3, [r0, r2]
254
+ eors r3, r3, r1
255
+ strb r3, [r0, r2]
256
+ bx lr
257
+ ENDP
258
+
259
+ ; ----------------------------------------------------------------------------
260
+ ;
261
+ ; void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
262
+ ;
263
+ ALIGN
264
+ EXPORT KeccakP800_AddBytes
265
+ KeccakP800_AddBytes PROC
266
+ push {r4,lr}
267
+ adds r0, r0, r2 ; state += offset
268
+ subs r3, r3, #4 ; if length >= 4
269
+ bcc KeccakP800_AddBytes_Bytes
270
+ KeccakP800_AddBytes_LanesLoop ; then, perform on words
271
+ ldr r2, [r0]
272
+ ldr r4, [r1], #4
273
+ eors r2, r2, r4
274
+ str r2, [r0], #4
275
+ subs r3, r3, #4
276
+ bcs KeccakP800_AddBytes_LanesLoop
277
+ KeccakP800_AddBytes_Bytes
278
+ adds r3, r3, #3
279
+ bcc KeccakP800_AddBytes_Exit
280
+ KeccakP800_AddBytes_BytesLoop
281
+ ldrb r2, [r0]
282
+ ldrb r4, [r1], #1
283
+ eors r2, r2, r4
284
+ strb r2, [r0], #1
285
+ subs r3, r3, #1
286
+ bcs KeccakP800_AddBytes_BytesLoop
287
+ KeccakP800_AddBytes_Exit
288
+ pop {r4,pc}
289
+ ENDP
290
+
291
+ ; ----------------------------------------------------------------------------
292
+ ;
293
+ ; void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
294
+ ;
295
+ ALIGN
296
+ EXPORT KeccakP800_OverwriteBytes
297
+ KeccakP800_OverwriteBytes PROC
298
+ adds r0, r0, r2 ; state += offset
299
+ subs r3, r3, #4 ; if length >= 4
300
+ bcc KeccakP800_OverwriteBytes_Bytes
301
+ KeccakP800_OverwriteBytes_LanesLoop ; then, perform on words
302
+ ldr r2, [r1], #4
303
+ str r2, [r0], #4
304
+ subs r3, r3, #4
305
+ bcs KeccakP800_OverwriteBytes_LanesLoop
306
+ KeccakP800_OverwriteBytes_Bytes
307
+ adds r3, r3, #3
308
+ bcc KeccakP800_OverwriteBytes_Exit
309
+ KeccakP800_OverwriteBytes_BytesLoop
310
+ ldrb r2, [r1], #1
311
+ strb r2, [r0], #1
312
+ subs r3, r3, #1
313
+ bcs KeccakP800_OverwriteBytes_BytesLoop
314
+ KeccakP800_OverwriteBytes_Exit
315
+ bx lr
316
+ ENDP
317
+
318
+
319
+ ; ----------------------------------------------------------------------------
320
+ ;
321
+ ; void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
322
+ ;
323
+ ALIGN
324
+ EXPORT KeccakP800_OverwriteWithZeroes
325
+ KeccakP800_OverwriteWithZeroes PROC
326
+ movs r3, #0
327
+ lsrs r2, r1, #2
328
+ beq KeccakP800_OverwriteWithZeroes_Bytes
329
+ KeccakP800_OverwriteWithZeroes_LoopLanes
330
+ str r3, [r0], #4
331
+ subs r2, r2, #1
332
+ bne KeccakP800_OverwriteWithZeroes_LoopLanes
333
+ KeccakP800_OverwriteWithZeroes_Bytes
334
+ ands r1, #3
335
+ beq KeccakP800_OverwriteWithZeroes_Exit
336
+ KeccakP800_OverwriteWithZeroes_LoopBytes
337
+ strb r3, [r0], #1
338
+ subs r1, r1, #1
339
+ bne KeccakP800_OverwriteWithZeroes_LoopBytes
340
+ KeccakP800_OverwriteWithZeroes_Exit
341
+ bx lr
342
+ ENDP
343
+
344
+ ; ----------------------------------------------------------------------------
345
+ ;
346
+ ; void KeccakP800_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
347
+ ;
348
+ ALIGN
349
+ EXPORT KeccakP800_ExtractBytes
350
+ KeccakP800_ExtractBytes PROC
351
+ adds r0, r0, r2 ; state += offset
352
+ subs r3, r3, #4 ; if length >= 4
353
+ bcc KeccakP800_ExtractBytes_Bytes
354
+ KeccakP800_ExtractBytes_LanesLoop ; then, handle words
355
+ ldr r2, [r0], #4
356
+ str r2, [r1], #4
357
+ subs r3, r3, #4
358
+ bcs KeccakP800_ExtractBytes_LanesLoop
359
+ KeccakP800_ExtractBytes_Bytes
360
+ adds r3, r3, #3
361
+ bcc KeccakP800_ExtractBytes_Exit
362
+ KeccakP800_ExtractBytes_BytesLoop
363
+ ldrb r2, [r0], #1
364
+ strb r2, [r1], #1
365
+ subs r3, r3, #1
366
+ bcs KeccakP800_ExtractBytes_BytesLoop
367
+ KeccakP800_ExtractBytes_Exit
368
+ bx lr
369
+ ENDP
370
+
371
+ ; ----------------------------------------------------------------------------
372
+ ;
373
+ ; void KeccakP800_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
374
+ ;
375
+ ALIGN
376
+ EXPORT KeccakP800_ExtractAndAddBytes
377
+ KeccakP800_ExtractAndAddBytes PROC
378
+ push {r4,r5}
379
+ adds r0, r0, r3 ; state += offset (offset register no longer needed, reuse for length)
380
+ ldr r3, [sp, #8] ; get length argument from stack
381
+ subs r3, r3, #4 ; if length >= 4
382
+ bcc KeccakP800_ExtractAndAddBytes_Bytes
383
+ KeccakP800_ExtractAndAddBytes_LanesLoop ; then, handle words
384
+ ldr r5, [r0], #4
385
+ ldr r4, [r1], #4
386
+ eors r5, r5, r4
387
+ str r5, [r2], #4
388
+ subs r3, r3, #4
389
+ bcs KeccakP800_ExtractAndAddBytes_LanesLoop
390
+ KeccakP800_ExtractAndAddBytes_Bytes
391
+ adds r3, r3, #3
392
+ bcc KeccakP800_ExtractAndAddBytes_Exit
393
+ KeccakP800_ExtractAndAddBytes_BytesLoop
394
+ ldrb r5, [r0], #1
395
+ ldrb r4, [r1], #1
396
+ eors r5, r5, r4
397
+ strb r5, [r2], #1
398
+ subs r3, r3, #1
399
+ bcs KeccakP800_ExtractAndAddBytes_BytesLoop
400
+ KeccakP800_ExtractAndAddBytes_Exit
401
+ pop {r4,r5}
402
+ bx lr
403
+ ENDP
404
+
405
+ ; ----------------------------------------------------------------------------
406
+ ;
407
+ ; void KeccakP800_Permute_Nrounds(void *state, unsigned int nrounds)
408
+ ;
409
+ ALIGN
410
+ EXPORT KeccakP800_Permute_Nrounds
411
+ KeccakP800_Permute_Nrounds PROC
412
+ mov r2, r1
413
+ adr r1, KeccakP800_Permute_RoundConstants0
414
+ sub r1, r1, r2, LSL #2
415
+ tst r2, #1
416
+ beq KeccakP800_Permute
417
+ push {r4-r12,lr} ; odd number of rounds
418
+ sub sp, sp, #_SAS
419
+ mov lr, r1
420
+ mov r1, sp
421
+ ldm r0!, {r2,r3,r4,r5,r7} ; copy state to stack and prepare theta
422
+ stm r1!, {r2,r3,r4,r5,r7}
423
+ ldm r0!, {r2,r3,r4,r5,r6}
424
+ stm r1!, {r2,r3,r4,r5,r6}
425
+ eor r7, r7, r6
426
+ ldm r0!, {r2,r3,r4,r5,r6}
427
+ stm r1!, {r2,r3,r4,r5,r6}
428
+ eor r7, r7, r6
429
+ ldm r0!, {r2,r3,r4,r5,r6}
430
+ stm r1!, {r2,r3,r4,r5,r6}
431
+ eor r7, r7, r6
432
+ ldm r0!, {r8,r9,r10,r11,r12}
433
+ stm r1!, {r8,r9,r10,r11,r12}
434
+ eor r7, r7, r12
435
+ mov r6, r12
436
+ sub r0, r0, #100
437
+ b KeccakP800_Permute_OddRoundEntry
438
+ ENDP
439
+
440
+ ; ----------------------------------------------------------------------------
441
+ ;
442
+ ; void KeccakP800_Permute_12rounds( void *state )
443
+ ;
444
+ ALIGN
445
+ EXPORT KeccakP800_Permute_12rounds
446
+ KeccakP800_Permute_12rounds PROC
447
+ adr r1, KeccakP800_Permute_RoundConstants12
448
+ b KeccakP800_Permute
449
+ ENDP
450
+
451
+ ; ----------------------------------------------------------------------------
452
+ ;
453
+ ; void KeccakP800_Permute_22rounds( void *state )
454
+ ;
455
+ ALIGN
456
+ EXPORT KeccakP800_Permute_22rounds
457
+ KeccakP800_Permute_22rounds PROC
458
+ adr r1, KeccakP800_Permute_RoundConstants22
459
+ b KeccakP800_Permute
460
+ ENDP
461
+
462
+ ALIGN
463
+ KeccakP800_Permute_RoundConstants22
464
+ dcd 0x00000001
465
+ dcd 0x00008082
466
+ dcd 0x0000808a
467
+ dcd 0x80008000
468
+ dcd 0x0000808b
469
+ dcd 0x80000001
470
+ dcd 0x80008081
471
+ dcd 0x00008009
472
+ dcd 0x0000008a
473
+ dcd 0x00000088
474
+ KeccakP800_Permute_RoundConstants12
475
+ dcd 0x80008009
476
+ dcd 0x8000000a
477
+ dcd 0x8000808b
478
+ dcd 0x0000008b
479
+ dcd 0x00008089
480
+ dcd 0x00008003
481
+ dcd 0x00008002
482
+ dcd 0x00000080
483
+ dcd 0x0000800a
484
+ dcd 0x8000000a
485
+ dcd 0x80008081
486
+ dcd 0x00008080
487
+ KeccakP800_Permute_RoundConstants0
488
+ dcd 0 ; terminator
489
+
490
+ ; ----------------------------------------------------------------------------
491
+ ;
492
+ ; void KeccakP800_Permute( void *state, void *rc )
493
+ ;
494
+ ALIGN
495
+ KeccakP800_Permute PROC
496
+ push {r4-r12,lr}
497
+ mov lr, r1
498
+ add r2, r0, #_sa
499
+ sub sp, sp, #_SAS
500
+ ldmia r2, { r8 - r12 }
501
+ ldr r7, [r0, #_bu]
502
+ ldr r1, [r0, #_gu]
503
+ mov r6, r12
504
+ eor r7, r7, r12
505
+ ldr r12, [r0, #_ku]
506
+ eor r7, r7, r1
507
+ ldr r1, [r0, #_mu]
508
+ eor r7, r7, r12
509
+ eor r7, r7, r1
510
+ KeccakP800_Permute_RoundLoop
511
+ KeccakRound sp, r0
512
+ KeccakP800_Permute_OddRoundEntry
513
+ KeccakRound r0, sp
514
+ ldr r4, [lr]
515
+ cmp r4, #0
516
+ bne KeccakP800_Permute_RoundLoop
517
+ add sp,sp,#_SAS
518
+ pop {r4-r12,pc}
519
+ ENDP
520
+
521
+ END