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