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,454 @@
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[400] in a SnP-compatible way.
19
+ ; Please refer to SnP-documentation.h for more details.
20
+ ;
21
+ ; This implementation comes with KeccakP-400-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*2
32
+ _be equ 1*2
33
+ _bi equ 2*2
34
+ _bo equ 3*2
35
+ _bu equ 4*2
36
+ _ga equ 5*2
37
+ _ge equ 6*2
38
+ _gi equ 7*2
39
+ _go equ 8*2
40
+ _gu equ 9*2
41
+ _ka equ 10*2
42
+ _ke equ 11*2
43
+ _ki equ 12*2
44
+ _ko equ 13*2
45
+ _ku equ 14*2
46
+ _ma equ 15*2
47
+ _me equ 16*2
48
+ _mi equ 17*2
49
+ _mo equ 18*2
50
+ _mu equ 19*2
51
+ _sa equ 20*2
52
+ _se equ 21*2
53
+ _si equ 22*2
54
+ _so equ 23*2
55
+ _su equ 24*2
56
+
57
+ MACRO
58
+ xor5 $result,$ptr,$b,$g,$k,$m,$s
59
+ ldrh $result, [$ptr, #$b]
60
+ ldrh r7, [$ptr, #$g]
61
+ eors $result, $result, r7
62
+ ldrh r7, [$ptr, #$k]
63
+ eors $result, $result, r7
64
+ ldrh r7, [$ptr, #$m]
65
+ eors $result, $result, r7
66
+ ldrh 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, #16-$rr
77
+ orrs $b, $b, r7
78
+ uxth $b, $b
79
+ endif
80
+ MEND
81
+
82
+ MACRO
83
+ rolxor $d, $a, $b, $rot
84
+ sxth r7, $b
85
+ rors r7, r7, $rot
86
+ eors r7, r7, $a
87
+ uxth 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
+ strh $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
+ ldrh $bb, [r7, #$rco]
105
+ eors $cc, $cc, $bb
106
+ strh $cc, [$resptr, #$resofs]
107
+ MEND
108
+
109
+ MACRO
110
+ KeccakRound $sOut, $sIn, $rco
111
+
112
+ ;prepTheta
113
+ push { $sOut }
114
+ movs $sOut, #31
115
+ xor5 r1, $sIn, _ba, _ga, _ka, _ma, _sa
116
+ xor5 r2, $sIn, _be, _ge, _ke, _me, _se
117
+ xor5 r3, $sIn, _bi, _gi, _ki, _mi, _si
118
+ xor5 r4, $sIn, _bo, _go, _ko, _mo, _so
119
+ xor5 r5, $sIn, _bu, _gu, _ku, _mu, _su
120
+ rolxor r9, r5, r2, $sOut
121
+ rolxor r10, r1, r3, $sOut
122
+ rolxor r11, r2, r4, $sOut
123
+ rolxor r12, r3, r5, $sOut
124
+ rolxor lr, r4, r1, $sOut
125
+ pop { $sOut }
126
+
127
+ ;thetaRhoPiChiIota
128
+ ldrh r1, [$sIn, #_bo]
129
+ ldrh r2, [$sIn, #_gu]
130
+ ldrh r3, [$sIn, #_ka]
131
+ ldrh r4, [$sIn, #_me]
132
+ ldrh r5, [$sIn, #_si]
133
+ xorrol r1, r12, 12
134
+ xorrol r2, lr, 4
135
+ xorrol r3, r9, 3
136
+ xorrol r4, r10, 13
137
+ xorrol r5, r11, 13
138
+ xandnot $sOut, _ga, r1, r2, r3, r7
139
+ xandnot $sOut, _ge, r2, r3, r4, r7
140
+ xandnot $sOut, _gi, r3, r4, r5, r7
141
+ xandnot $sOut, _go, r4, r5, r1, r7
142
+ xandnot $sOut, _gu, r5, r1, r2, r7
143
+
144
+ ldrh r1, [$sIn, #_be]
145
+ ldrh r2, [$sIn, #_gi]
146
+ ldrh r3, [$sIn, #_ko]
147
+ ldrh r4, [$sIn, #_mu]
148
+ ldrh r5, [$sIn, #_sa]
149
+ xorrol r1, r10, 1
150
+ xorrol r2, r11, 6
151
+ xorrol r3, r12, 9
152
+ xorrol r4, lr, 8
153
+ xorrol r5, r9, 2
154
+ xandnot $sOut, _ka, r1, r2, r3, r7
155
+ xandnot $sOut, _ke, r2, r3, r4, r7
156
+ xandnot $sOut, _ki, r3, r4, r5, r7
157
+ xandnot $sOut, _ko, r4, r5, r1, r7
158
+ xandnot $sOut, _ku, r5, r1, r2, r7
159
+
160
+ ldrh r1, [$sIn, #_bu]
161
+ ldrh r2, [$sIn, #_ga]
162
+ ldrh r3, [$sIn, #_ke]
163
+ ldrh r4, [$sIn, #_mi]
164
+ ldrh r5, [$sIn, #_so]
165
+ xorrol r1, lr, 11
166
+ xorrol r2, r9, 4
167
+ xorrol r3, r10, 10
168
+ xorrol r4, r11, 15
169
+ xorrol r5, r12, 8
170
+ xandnot $sOut, _ma, r1, r2, r3, r7
171
+ xandnot $sOut, _me, r2, r3, r4, r7
172
+ xandnot $sOut, _mi, r3, r4, r5, r7
173
+ xandnot $sOut, _mo, r4, r5, r1, r7
174
+ xandnot $sOut, _mu, r5, r1, r2, r7
175
+
176
+ ldrh r1, [$sIn, #_bi]
177
+ ldrh r2, [$sIn, #_go]
178
+ ldrh r3, [$sIn, #_ku]
179
+ ldrh r4, [$sIn, #_ma]
180
+ ldrh r5, [$sIn, #_se]
181
+ xorrol r1, r11, 14
182
+ xorrol r2, r12, 7
183
+ xorrol r3, lr, 7
184
+ xorrol r4, r9, 9
185
+ xorrol r5, r10, 2
186
+ xandnot $sOut, _sa, r1, r2, r3, r7
187
+ xandnot $sOut, _se, r2, r3, r4, r7
188
+ xandnot $sOut, _si, r3, r4, r5, r7
189
+ xandnot $sOut, _so, r4, r5, r1, r7
190
+ xandnot $sOut, _su, r5, r1, r2, r7
191
+
192
+ ldrh r1, [$sIn, #_ba]
193
+ ldrh r2, [$sIn, #_ge]
194
+ ldrh r3, [$sIn, #_ki]
195
+ ldrh r4, [$sIn, #_mo]
196
+ ldrh r5, [$sIn, #_su]
197
+ xorrol r1, r9, 0
198
+ xorrol r2, r10, 12
199
+ xorrol r3, r11, 11
200
+ xorrol r4, r12, 5
201
+ xorrol r5, lr, 14
202
+ xandnot $sOut, _be, r2, r3, r4, r7
203
+ xandnot $sOut, _bi, r3, r4, r5, r7
204
+ xandnot $sOut, _bo, r4, r5, r1, r7
205
+ xandnot $sOut, _bu, r5, r1, r2, r7
206
+ xandnotRC $sOut, _ba, r1, r2, r3, $rco
207
+ MEND
208
+
209
+ ;----------------------------------------------------------------------------
210
+ ;
211
+ ; void KeccakP400_StaticInitialize( void )
212
+ ;
213
+ ALIGN 4
214
+ EXPORT KeccakP400_StaticInitialize
215
+ KeccakP400_StaticInitialize PROC
216
+ bx lr
217
+ ENDP
218
+
219
+ ;----------------------------------------------------------------------------
220
+ ;
221
+ ; void KeccakP400_Initialize(void *state)
222
+ ;
223
+ ALIGN 4
224
+ EXPORT KeccakP400_Initialize
225
+ KeccakP400_Initialize PROC
226
+ movs r1, #0
227
+ movs r2, #0
228
+ movs r3, #0
229
+ stmia r0!, { r1 - r3 }
230
+ stmia r0!, { r1 - r3 }
231
+ stmia r0!, { r1 - r3 }
232
+ stmia r0!, { r1 - r3 }
233
+ strh r1, [r0]
234
+ bx lr
235
+ ENDP
236
+
237
+ ; ----------------------------------------------------------------------------
238
+ ;
239
+ ; void KeccakP400_AddByte(void *state, unsigned char byte, unsigned int offset)
240
+ ;
241
+ ALIGN 4
242
+ EXPORT KeccakP400_AddByte
243
+ KeccakP400_AddByte PROC
244
+ ldrb r3, [r0, r2]
245
+ eors r3, r3, r1
246
+ strb r3, [r0, r2]
247
+ bx lr
248
+ ENDP
249
+
250
+ ;----------------------------------------------------------------------------
251
+ ;
252
+ ; void KeccakP400_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
253
+ ;
254
+ ALIGN 4
255
+ EXPORT KeccakP400_AddBytes
256
+ KeccakP400_AddBytes PROC
257
+ subs r3, r3, #1
258
+ bcc KeccakP400_AddBytes_Exit
259
+ adds r0, r0, r2
260
+ push {r4,lr}
261
+ KeccakP400_AddBytes_Loop
262
+ ldrb r2, [r1, r3]
263
+ ldrb r4, [r0, r3]
264
+ eors r2, r2, r4
265
+ strb r2, [r0, r3]
266
+ subs r3, r3, #1
267
+ bcs KeccakP400_AddBytes_Loop
268
+ pop {r4,pc}
269
+ KeccakP400_AddBytes_Exit
270
+ bx lr
271
+ ENDP
272
+
273
+ ; ----------------------------------------------------------------------------
274
+ ;
275
+ ; void KeccakP400_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
276
+ ;
277
+ ALIGN 4
278
+ EXPORT KeccakP400_OverwriteBytes
279
+ KeccakP400_OverwriteBytes PROC
280
+ subs r3, r3, #1
281
+ bcc KeccakP400_OverwriteBytes_Exit
282
+ adds r0, r0, r2
283
+ KeccakP400_OverwriteBytes_Loop
284
+ ldrb r2, [r1, r3]
285
+ strb r2, [r0, r3]
286
+ subs r3, r3, #1
287
+ bcs KeccakP400_OverwriteBytes_Loop
288
+ KeccakP400_OverwriteBytes_Exit
289
+ bx lr
290
+ ENDP
291
+
292
+ ;----------------------------------------------------------------------------
293
+ ;
294
+ ; void KeccakP400_OverwriteWithZeroes(void *state, unsigned int byteCount)
295
+ ;
296
+ ALIGN 4
297
+ EXPORT KeccakP400_OverwriteWithZeroes
298
+ KeccakP400_OverwriteWithZeroes PROC
299
+ movs r3, #0
300
+ cmp r1, #0
301
+ beq KeccakP400_OverwriteWithZeroes_Exit
302
+ KeccakP400_OverwriteWithZeroes_LoopBytes
303
+ subs r1, r1, #1
304
+ strb r3, [r0, r1]
305
+ bne KeccakP400_OverwriteWithZeroes_LoopBytes
306
+ KeccakP400_OverwriteWithZeroes_Exit
307
+ bx lr
308
+ ENDP
309
+
310
+ ; ----------------------------------------------------------------------------
311
+ ;
312
+ ; void KeccakP400_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
313
+ ;
314
+ ALIGN 4
315
+ EXPORT KeccakP400_ExtractBytes
316
+ KeccakP400_ExtractBytes PROC
317
+ subs r3, r3, #1
318
+ bcc KeccakP400_ExtractBytes_Exit
319
+ adds r0, r0, r2
320
+ KeccakP400_ExtractBytes_Loop
321
+ ldrb r2, [r0, r3]
322
+ strb r2, [r1, r3]
323
+ subs r3, r3, #1
324
+ bcs KeccakP400_ExtractBytes_Loop
325
+ KeccakP400_ExtractBytes_Exit
326
+ bx lr
327
+ ENDP
328
+
329
+ ; ----------------------------------------------------------------------------
330
+ ;
331
+ ; void KeccakP400_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
332
+ ;
333
+ ALIGN 4
334
+ EXPORT KeccakP400_ExtractAndAddBytes
335
+ KeccakP400_ExtractAndAddBytes PROC
336
+ push {r4,r5}
337
+ adds r0, r0, r3 ; state += offset (offset register no longer needed, reuse for length)
338
+ ldr r3, [sp, #8] ; get length argument from stack
339
+ subs r3, r3, #1 ; if length != 0
340
+ bcc KeccakP400_ExtractAndAddBytes_Exit
341
+ KeccakP400_ExtractAndAddBytes_Loop
342
+ ldrb r5, [r0, r3]
343
+ ldrb r4, [r1, r3]
344
+ eors r5, r5, r4
345
+ strb r5, [r2, r3]
346
+ subs r3, r3, #1
347
+ bcs KeccakP400_ExtractAndAddBytes_Loop
348
+ KeccakP400_ExtractAndAddBytes_Exit
349
+ pop {r4,r5}
350
+ bx lr
351
+ ENDP
352
+
353
+ ;----------------------------------------------------------------------------
354
+ ;
355
+ ; void KeccakP400_Permute_Nrounds( void *state, unsigned int nr )
356
+ ;
357
+ ALIGN 4
358
+ EXPORT KeccakP400_Permute_Nrounds
359
+ KeccakP400_Permute_Nrounds PROC
360
+ push { r4 - r6, lr }
361
+ mov r2, r8
362
+ mov r3, r9
363
+ mov r4, r10
364
+ mov r5, r11
365
+ mov r6, r12
366
+ push { r2 - r7 }
367
+ sub sp, sp, #25*2+6
368
+ mov r6, sp
369
+ adr r7, KeccakP400_Permute_RoundConstants
370
+ subs r7, r7, r1
371
+ subs r7, r7, r1
372
+ lsls r1, r1, #31
373
+ beq KeccakP400_Permute_Nrounds_GoRoundLoop
374
+ subs r7, r7, #2 ; odd number of rounds
375
+ mov r8, r7
376
+ ldm r0!, { r1, r2, r3, r4, r5, r7 } ; copy state to stack
377
+ stm r6!, { r1, r2, r3, r4, r5, r7 }
378
+ ldm r0!, { r1, r2, r3, r4, r5, r7 }
379
+ stm r6!, { r1, r2, r3, r4, r5, r7 }
380
+ subs r0, r0, #48
381
+ subs r6, r6, #48
382
+ ldrh r1, [r0, #_su]
383
+ strh r1, [r6, #_su]
384
+ b KeccakP400_Permute_RoundOdd
385
+ KeccakP400_Permute_Nrounds_GoRoundLoop
386
+ b KeccakP400_Permute_RoundLoop
387
+ nop
388
+ ENDP
389
+
390
+ ;----------------------------------------------------------------------------
391
+ ;
392
+ ; void KeccakP400_Permute_20rounds( void *state )
393
+ ;
394
+ ALIGN 4
395
+ EXPORT KeccakP400_Permute_20rounds
396
+ KeccakP400_Permute_20rounds PROC
397
+ push { r4 - r6, lr }
398
+ mov r2, r8
399
+ mov r3, r9
400
+ mov r4, r10
401
+ mov r5, r11
402
+ mov r6, r12
403
+ push { r2 - r7 }
404
+ sub sp, sp, #25*2+6
405
+ mov r6, sp
406
+ adr r7, KeccakP400_Permute_RoundConstants20
407
+ b KeccakP400_Permute_RoundLoop
408
+ ALIGN 4
409
+ KeccakP400_Permute_RoundConstants20
410
+ dcw 0x0001
411
+ dcw 0x8082
412
+ dcw 0x808a
413
+ dcw 0x8000
414
+ dcw 0x808b
415
+ dcw 0x0001
416
+ dcw 0x8081
417
+ dcw 0x8009
418
+ dcw 0x008a
419
+ dcw 0x0088
420
+ dcw 0x8009
421
+ dcw 0x000a
422
+ dcw 0x808b
423
+ dcw 0x008b
424
+ dcw 0x8089
425
+ dcw 0x8003
426
+ dcw 0x8002
427
+ dcw 0x0080
428
+ dcw 0x800a
429
+ dcw 0x000a
430
+ KeccakP400_Permute_RoundConstants
431
+ dcw 0xFF ;terminator
432
+
433
+ KeccakP400_Permute_RoundLoop
434
+ mov r8, r7
435
+ KeccakRound r6, r0, 0
436
+ KeccakP400_Permute_RoundOdd
437
+ KeccakRound r0, r6, 2
438
+ adds r7, r7, #4
439
+ ldrh r1, [r7]
440
+ cmp r1, #0xFF
441
+ beq KeccakP400_Permute_Done
442
+ b KeccakP400_Permute_RoundLoop
443
+ KeccakP400_Permute_Done
444
+ add sp,sp,#25*2+6
445
+ pop { r1 - r5, r7 }
446
+ mov r8, r1
447
+ mov r9, r2
448
+ mov r10, r3
449
+ mov r11, r4
450
+ mov r12, r5
451
+ pop { r4 - r6, pc }
452
+ ENDP
453
+
454
+ END