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,442 @@
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[200] in a SnP-compatible way.
19
+ ; Please refer to SnP-documentation.h for more details.
20
+ ;
21
+ ; This implementation comes with KeccakP-200-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 ARMv6M architecture (e.g., Cortex-M0).
26
+
27
+ PRESERVE8
28
+ THUMB
29
+ AREA |.text|, CODE, READONLY
30
+
31
+ _ba equ 0
32
+ _be equ 1
33
+ _bi equ 2
34
+ _bo equ 3
35
+ _bu equ 4
36
+ _ga equ 5
37
+ _ge equ 6
38
+ _gi equ 7
39
+ _go equ 8
40
+ _gu equ 9
41
+ _ka equ 10
42
+ _ke equ 11
43
+ _ki equ 12
44
+ _ko equ 13
45
+ _ku equ 14
46
+ _ma equ 15
47
+ _me equ 16
48
+ _mi equ 17
49
+ _mo equ 18
50
+ _mu equ 19
51
+ _sa equ 20
52
+ _se equ 21
53
+ _si equ 22
54
+ _so equ 23
55
+ _su equ 24
56
+
57
+ MACRO
58
+ xor5 $result,$ptr,$b,$g,$k,$m,$s
59
+ ldrb $result, [$ptr, #$b]
60
+ ldrb r7, [$ptr, #$g]
61
+ eors $result, $result, r7
62
+ ldrb r7, [$ptr, #$k]
63
+ eors $result, $result, r7
64
+ ldrb r7, [$ptr, #$m]
65
+ eors $result, $result, r7
66
+ ldrb r7, [$ptr, #$s]
67
+ eors $result, $result, r7
68
+ MEND
69
+
70
+ MACRO
71
+ xorrol $b, $yy, $rr
72
+ mov r7, $yy
73
+ eors $b, $b, r7
74
+ if $rr != 0
75
+ lsls r7, $b, #$rr
76
+ lsrs $b, $b, #8-$rr
77
+ orrs $b, $b, r7
78
+ uxtb $b, $b
79
+ endif
80
+ MEND
81
+
82
+ MACRO
83
+ rolxor $d, $a, $b, $rot
84
+ sxtb r7, $b
85
+ rors r7, r7, $rot
86
+ eors r7, r7, $a
87
+ uxtb r7, r7
88
+ mov $d, r7
89
+ MEND
90
+
91
+ MACRO
92
+ xandnot $resptr, $resofs, $aa, $bb, $cc, $temp
93
+ mov $temp, $cc
94
+ bics $temp, $temp, $bb
95
+ eors $temp, $temp, $aa
96
+ strb $temp, [$resptr, #$resofs]
97
+ MEND
98
+
99
+ MACRO
100
+ xandnotRC $resptr, $resofs, $aa, $bb, $cc, $rco
101
+ bics $cc, $cc, $bb
102
+ eors $cc, $cc, $aa
103
+ mov r7, r8
104
+ ldrb $bb, [r7, #$rco]
105
+ eors $cc, $cc, $bb
106
+ strb $cc, [$resptr, #$resofs]
107
+ MEND
108
+
109
+ MACRO
110
+ KeccakRound $sOut, $sIn, $rco
111
+ ;prepTheta
112
+ push { $sOut }
113
+ movs $sOut, #31
114
+ xor5 r1, $sIn, _ba, _ga, _ka, _ma, _sa
115
+ xor5 r2, $sIn, _be, _ge, _ke, _me, _se
116
+ xor5 r3, $sIn, _bi, _gi, _ki, _mi, _si
117
+ xor5 r4, $sIn, _bo, _go, _ko, _mo, _so
118
+ xor5 r5, $sIn, _bu, _gu, _ku, _mu, _su
119
+ rolxor r9, r5, r2, $sOut
120
+ rolxor r10, r1, r3, $sOut
121
+ rolxor r11, r2, r4, $sOut
122
+ rolxor r12, r3, r5, $sOut
123
+ rolxor lr, r4, r1, $sOut
124
+ pop { $sOut }
125
+ ;thetaRhoPiChiIota
126
+ ldrb r1, [$sIn, #_bo]
127
+ ldrb r2, [$sIn, #_gu]
128
+ ldrb r3, [$sIn, #_ka]
129
+ ldrb r4, [$sIn, #_me]
130
+ ldrb r5, [$sIn, #_si]
131
+ xorrol r1, r12, 4
132
+ xorrol r2, lr, 4
133
+ xorrol r3, r9, 3
134
+ xorrol r4, r10, 5
135
+ xorrol r5, r11, 5
136
+ xandnot $sOut, _ga, r1, r2, r3, r7
137
+ xandnot $sOut, _ge, r2, r3, r4, r7
138
+ xandnot $sOut, _gi, r3, r4, r5, r7
139
+ xandnot $sOut, _go, r4, r5, r1, r7
140
+ xandnot $sOut, _gu, r5, r1, r2, r7
141
+ ldrb r1, [$sIn, #_be]
142
+ ldrb r2, [$sIn, #_gi]
143
+ ldrb r3, [$sIn, #_ko]
144
+ ldrb r4, [$sIn, #_mu]
145
+ ldrb r5, [$sIn, #_sa]
146
+ xorrol r1, r10, 1
147
+ xorrol r2, r11, 6
148
+ xorrol r3, r12, 1
149
+ xorrol r4, lr, 0
150
+ xorrol r5, r9, 2
151
+ xandnot $sOut, _ka, r1, r2, r3, r7
152
+ xandnot $sOut, _ke, r2, r3, r4, r7
153
+ xandnot $sOut, _ki, r3, r4, r5, r7
154
+ xandnot $sOut, _ko, r4, r5, r1, r7
155
+ xandnot $sOut, _ku, r5, r1, r2, r7
156
+ ldrb r1, [$sIn, #_bu]
157
+ ldrb r2, [$sIn, #_ga]
158
+ ldrb r3, [$sIn, #_ke]
159
+ ldrb r4, [$sIn, #_mi]
160
+ ldrb r5, [$sIn, #_so]
161
+ xorrol r1, lr, 3
162
+ xorrol r2, r9, 4
163
+ xorrol r3, r10, 2
164
+ xorrol r4, r11, 7
165
+ xorrol r5, r12, 0
166
+ xandnot $sOut, _ma, r1, r2, r3, r7
167
+ xandnot $sOut, _me, r2, r3, r4, r7
168
+ xandnot $sOut, _mi, r3, r4, r5, r7
169
+ xandnot $sOut, _mo, r4, r5, r1, r7
170
+ xandnot $sOut, _mu, r5, r1, r2, r7
171
+ ldrb r1, [$sIn, #_bi]
172
+ ldrb r2, [$sIn, #_go]
173
+ ldrb r3, [$sIn, #_ku]
174
+ ldrb r4, [$sIn, #_ma]
175
+ ldrb r5, [$sIn, #_se]
176
+ xorrol r1, r11, 6
177
+ xorrol r2, r12, 7
178
+ xorrol r3, lr, 7
179
+ xorrol r4, r9, 1
180
+ xorrol r5, r10, 2
181
+ xandnot $sOut, _sa, r1, r2, r3, r7
182
+ xandnot $sOut, _se, r2, r3, r4, r7
183
+ xandnot $sOut, _si, r3, r4, r5, r7
184
+ xandnot $sOut, _so, r4, r5, r1, r7
185
+ xandnot $sOut, _su, r5, r1, r2, r7
186
+ ldrb r1, [$sIn, #_ba]
187
+ ldrb r2, [$sIn, #_ge]
188
+ ldrb r3, [$sIn, #_ki]
189
+ ldrb r4, [$sIn, #_mo]
190
+ ldrb r5, [$sIn, #_su]
191
+ xorrol r1, r9, 0
192
+ xorrol r2, r10, 4
193
+ xorrol r3, r11, 3
194
+ xorrol r4, r12, 5
195
+ xorrol r5, lr, 6
196
+ xandnot $sOut, _be, r2, r3, r4, r7
197
+ xandnot $sOut, _bi, r3, r4, r5, r7
198
+ xandnot $sOut, _bo, r4, r5, r1, r7
199
+ xandnot $sOut, _bu, r5, r1, r2, r7
200
+ xandnotRC $sOut, _ba, r1, r2, r3, $rco
201
+ MEND
202
+
203
+ ;----------------------------------------------------------------------------
204
+ ;
205
+ ; void KeccakP200_StaticInitialize( void )
206
+ ;
207
+ ALIGN 4
208
+ EXPORT KeccakP200_StaticInitialize
209
+ KeccakP200_StaticInitialize PROC
210
+ bx lr
211
+ ENDP
212
+
213
+ ;----------------------------------------------------------------------------
214
+ ;
215
+ ; void KeccakP200_Initialize(void *state)
216
+ ;
217
+ ALIGN 4
218
+ EXPORT KeccakP200_Initialize
219
+ KeccakP200_Initialize PROC
220
+ movs r1, #0
221
+ movs r2, #0
222
+ movs r3, #0
223
+ stmia r0!, { r1 - r3 }
224
+ stmia r0!, { r1 - r3 }
225
+ strb r1, [r0]
226
+ bx lr
227
+ ENDP
228
+
229
+ ; ----------------------------------------------------------------------------
230
+ ;
231
+ ; void KeccakP200_AddByte(void *state, unsigned char byte, unsigned int offset)
232
+ ;
233
+ ALIGN 4
234
+ EXPORT KeccakP200_AddByte
235
+ KeccakP200_AddByte PROC
236
+ ldrb r3, [r0, r2]
237
+ eors r3, r3, r1
238
+ strb r3, [r0, r2]
239
+ bx lr
240
+ ENDP
241
+
242
+ ;----------------------------------------------------------------------------
243
+ ;
244
+ ; void KeccakP200_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
245
+ ;
246
+ ALIGN 4
247
+ EXPORT KeccakP200_AddBytes
248
+ KeccakP200_AddBytes PROC
249
+ subs r3, r3, #1
250
+ bcc KeccakP200_AddBytes_Exit
251
+ adds r0, r0, r2
252
+ push {r4,lr}
253
+ KeccakP200_AddBytes_Loop
254
+ ldrb r2, [r1, r3]
255
+ ldrb r4, [r0, r3]
256
+ eors r2, r2, r4
257
+ strb r2, [r0, r3]
258
+ subs r3, r3, #1
259
+ bcs KeccakP200_AddBytes_Loop
260
+ pop {r4,pc}
261
+ KeccakP200_AddBytes_Exit
262
+ bx lr
263
+ ENDP
264
+
265
+ ; ----------------------------------------------------------------------------
266
+ ;
267
+ ; void KeccakP200_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
268
+ ;
269
+ ALIGN 4
270
+ EXPORT KeccakP200_OverwriteBytes
271
+ KeccakP200_OverwriteBytes PROC
272
+ subs r3, r3, #1
273
+ bcc KeccakP200_OverwriteBytes_Exit
274
+ adds r0, r0, r2
275
+ KeccakP200_OverwriteBytes_Loop
276
+ ldrb r2, [r1, r3]
277
+ strb r2, [r0, r3]
278
+ subs r3, r3, #1
279
+ bcs KeccakP200_OverwriteBytes_Loop
280
+ KeccakP200_OverwriteBytes_Exit
281
+ bx lr
282
+ ENDP
283
+
284
+ ;----------------------------------------------------------------------------
285
+ ;
286
+ ; void KeccakP200_OverwriteWithZeroes(void *state, unsigned int byteCount)
287
+ ;
288
+ ALIGN 4
289
+ EXPORT KeccakP200_OverwriteWithZeroes
290
+ KeccakP200_OverwriteWithZeroes PROC
291
+ movs r3, #0
292
+ cmp r1, #0
293
+ beq KeccakP200_OverwriteWithZeroes_Exit
294
+ KeccakP200_OverwriteWithZeroes_LoopBytes
295
+ subs r1, r1, #1
296
+ strb r3, [r0, r1]
297
+ bne KeccakP200_OverwriteWithZeroes_LoopBytes
298
+ KeccakP200_OverwriteWithZeroes_Exit
299
+ bx lr
300
+ ENDP
301
+
302
+ ; ----------------------------------------------------------------------------
303
+ ;
304
+ ; void KeccakP200_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
305
+ ;
306
+ ALIGN 4
307
+ EXPORT KeccakP200_ExtractBytes
308
+ KeccakP200_ExtractBytes PROC
309
+ subs r3, r3, #1
310
+ bcc KeccakP200_ExtractBytes_Exit
311
+ adds r0, r0, r2
312
+ KeccakP200_ExtractBytes_Loop
313
+ ldrb r2, [r0, r3]
314
+ strb r2, [r1, r3]
315
+ subs r3, r3, #1
316
+ bcs KeccakP200_ExtractBytes_Loop
317
+ KeccakP200_ExtractBytes_Exit
318
+ bx lr
319
+ ENDP
320
+
321
+ ; ----------------------------------------------------------------------------
322
+ ;
323
+ ; void KeccakP200_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
324
+ ;
325
+ ALIGN 4
326
+ EXPORT KeccakP200_ExtractAndAddBytes
327
+ KeccakP200_ExtractAndAddBytes PROC
328
+ push {r4,r5}
329
+ adds r0, r0, r3 ; state += offset (offset register no longer needed, reuse for length)
330
+ ldr r3, [sp, #8] ; get length argument from stack
331
+ subs r3, r3, #1 ; if length != 0
332
+ bcc KeccakP200_ExtractAndAddBytes_Exit
333
+ KeccakP200_ExtractAndAddBytes_Loop
334
+ ldrb r5, [r0, r3]
335
+ ldrb r4, [r1, r3]
336
+ eors r5, r5, r4
337
+ strb r5, [r2, r3]
338
+ subs r3, r3, #1
339
+ bcs KeccakP200_ExtractAndAddBytes_Loop
340
+ KeccakP200_ExtractAndAddBytes_Exit
341
+ pop {r4,r5}
342
+ bx lr
343
+ ENDP
344
+
345
+ ;----------------------------------------------------------------------------
346
+ ;
347
+ ; void KeccakP200_Permute_Nrounds( void *state, unsigned int nr )
348
+ ;
349
+ ALIGN 4
350
+ EXPORT KeccakP200_Permute_Nrounds
351
+ KeccakP200_Permute_Nrounds PROC
352
+ push { r4 - r6, lr }
353
+ mov r2, r8
354
+ mov r3, r9
355
+ mov r4, r10
356
+ mov r5, r11
357
+ mov r6, r12
358
+ push { r2 - r7 }
359
+ sub sp, sp, #25+7
360
+ mov r6, sp
361
+ adr r7, KeccakP200_Permute_RoundConstants18
362
+ adds r7, r7, #18
363
+ subs r7, r7, r1
364
+ lsls r1, r1, #31
365
+ beq KeccakP200_Permute_Nrounds_GoRoundLoop
366
+ ldm r0!, { r1, r2, r3, r4, r5 } ; odd number of rounds: copy state to stack
367
+ subs r0, r0, #20
368
+ stm r6!, { r1, r2, r3, r4, r5 }
369
+ subs r6, r6, #20
370
+ ldr r1, [r0, #_sa]
371
+ str r1, [r6, #_sa]
372
+ ldrb r1, [r0, #_su]
373
+ strb r1, [r6, #_su]
374
+ subs r7, r7, #1
375
+ mov r8, r7
376
+ b KeccakP200_Permute_RoundOdd
377
+ KeccakP200_Permute_Nrounds_GoRoundLoop
378
+ b KeccakP200_Permute_RoundLoop
379
+ ENDP
380
+
381
+ ;----------------------------------------------------------------------------
382
+ ;
383
+ ; void KeccakP200_Permute_18rounds( void *state )
384
+ ;
385
+ ALIGN 4
386
+ EXPORT KeccakP200_Permute_18rounds
387
+ KeccakP200_Permute_18rounds PROC
388
+ push { r4 - r6, lr }
389
+ mov r2, r8
390
+ mov r3, r9
391
+ mov r4, r10
392
+ mov r5, r11
393
+ mov r6, r12
394
+ push { r2 - r7 }
395
+ sub sp, sp, #25+7
396
+ mov r6, sp
397
+ adr r7, KeccakP200_Permute_RoundConstants18
398
+ b KeccakP200_Permute_RoundLoop
399
+ nop
400
+
401
+ KeccakP200_Permute_RoundConstants18
402
+ dcb 0x01
403
+ dcb 0x82
404
+ dcb 0x8a
405
+ dcb 0x00
406
+ dcb 0x8b
407
+ dcb 0x01
408
+ dcb 0x81
409
+ dcb 0x09
410
+ dcb 0x8a
411
+ dcb 0x88
412
+ dcb 0x09
413
+ dcb 0x0a
414
+ dcb 0x8b
415
+ dcb 0x8b
416
+ dcb 0x89
417
+ dcb 0x03
418
+ dcb 0x02
419
+ dcb 0x80
420
+
421
+ ALIGN 4
422
+ KeccakP200_Permute_RoundLoop
423
+ mov r8, r7
424
+ KeccakRound r6, r0, 0
425
+ KeccakP200_Permute_RoundOdd
426
+ KeccakRound r0, r6, 1
427
+ adds r7, r7, #2
428
+ cmp r2, #0x80
429
+ beq KeccakP200_Permute_Done
430
+ b KeccakP200_Permute_RoundLoop
431
+ KeccakP200_Permute_Done
432
+ add sp,sp,#25+7
433
+ pop { r1 - r5, r7 }
434
+ mov r8, r1
435
+ mov r9, r2
436
+ mov r10, r3
437
+ mov r11, r4
438
+ mov r12, r5
439
+ pop { r4 - r6, pc }
440
+ ENDP
441
+
442
+ END