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,480 @@
1
+ @
2
+ @ The eXtended Keccak Code Package (XKCP)
3
+ @ https://github.com/XKCP/XKCP
4
+ @
5
+ @ Ketje, designed by Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche and Ronny Van Keer.
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
+ @ WARNING: These functions work only on little endian CPU with@ ARMv7m architecture (Cortex-M3, ...).
18
+
19
+
20
+ .thumb
21
+ .syntax unified
22
+ .text
23
+
24
+ .equ _ba, 0
25
+ .equ _be, 1
26
+ .equ _bi, 2
27
+ .equ _bo, 3
28
+ .equ _bu, 4
29
+ .equ _ga, 5
30
+ .equ _ge, 6
31
+ .equ _gi, 7
32
+ .equ _go, 8
33
+ .equ _gu, 9
34
+ .equ _ka, 10
35
+ .equ _ke, 11
36
+ .equ _ki, 12
37
+ .equ _ko, 13
38
+ .equ _ku, 14
39
+ .equ _ma, 15
40
+ .equ _me, 16
41
+ .equ _mi, 17
42
+ .equ _mo, 18
43
+ .equ _mu, 19
44
+ .equ _sa, 20
45
+ .equ _se, 21
46
+ .equ _si, 22
47
+ .equ _so, 23
48
+ .equ _su, 24
49
+
50
+
51
+ .equ _a , 0
52
+ .equ _e , 8
53
+ .equ _i , 16
54
+ .equ _o , 24
55
+
56
+ .equ _B , 0
57
+ .equ _G , 8
58
+ .equ _K , 16
59
+ .equ _M , 24
60
+
61
+ .macro RhoPi rot, rOut, oOut, rIn, oIn
62
+
63
+ .if \rot != 0
64
+ .if \oIn ==0
65
+ ubfx r2, \rIn, #8-\rot, #\rot
66
+ bfi r2, \rIn, #\rot, #8-\rot
67
+ bfi \rOut, r2, #\oOut, #8
68
+ .else
69
+ uxtb r1, \rIn, ROR #\oIn
70
+ ubfx r2, r1, #8-\rot, #\rot
71
+ bfi r2, r1, #\rot, #8-\rot
72
+ bfi \rOut, r2, #\oOut, #8
73
+ .endif
74
+ .else
75
+ .if \oIn !=0
76
+ lsr r1, \rIn, #\oIn
77
+ bfi \rOut, r1, #\oOut, #8
78
+ .else
79
+ bfi \rOut, \rOut, #\oOut, #8
80
+ .endif
81
+ .endif
82
+ .endm
83
+
84
+ .macro Chi rXaeio, rXu, offU
85
+
86
+ .if \offU == 0
87
+ lsls r2, \rXu, #24
88
+ .else
89
+ .if \offU == 24
90
+ and r2, \rXu, #0xFF000000
91
+ .else
92
+ ubfx r2, \rXu, #\offU, #8 @r2 = Beiou
93
+ lsls r2, r2, #24
94
+ .endif
95
+ .endif
96
+ orr r2, r2, \rXaeio, LSR #8
97
+ lsl r1, \rXaeio, #24 @r1 = Bioua
98
+ orr r1, r1, r2, LSR #8
99
+ bics r1, r1, r2 @r1 = Bioua & ~ Beiou
100
+ bic r2, r2, \rXaeio @r2 = Be & ~Ba
101
+ eor \rXaeio, \rXaeio, r1 @Baeio ^= r1
102
+ .if \offU !=0
103
+ eor r2, r2, \rXu, LSR #\offU @r2 ^= Bu
104
+ .else
105
+ eors r2, r2, \rXu @r2 ^= Bu
106
+ .endif
107
+ bfi \rXu, r2, #\offU, #8
108
+ .endm
109
+
110
+ @----------------------------------------------------------------------------
111
+ @
112
+ @ void KetJr_StateAddByte( void *state, unsigned char value, unsigned int offset )
113
+ @
114
+ .align 8
115
+ .global KetJr_StateAddByte
116
+ .type KetJr_StateAddByte, %function;
117
+ KetJr_StateAddByte:
118
+ adr r3, Ket_StateTwistIndexes
119
+ ldrb r3, [r3, r2]
120
+ ldrb r2, [r0, r3]
121
+ eors r1, r1, r2
122
+ strb r1, [r0, r3]
123
+ bx lr
124
+
125
+
126
+ @----------------------------------------------------------------------------
127
+ @
128
+ @ unsigned char KetJr_StateExtractByte( void *state, unsigned int offset )
129
+ @
130
+ .align 8
131
+ .global KetJr_StateExtractByte
132
+ .type KetJr_StateExtractByte, %function;
133
+ KetJr_StateExtractByte:
134
+ adr r3, Ket_StateTwistIndexes
135
+ ldrb r3, [r3, r1]
136
+ ldrb r0, [r0, r3]
137
+ bx lr
138
+
139
+
140
+ @----------------------------------------------------------------------------
141
+ @
142
+ @ void KetJr_StateOverwrite( void *state, unsigned int offset, const unsigned char *data, unsigned int length )
143
+ @
144
+ .align 8
145
+ .global KetJr_StateOverwrite
146
+ .type KetJr_StateOverwrite, %function;
147
+ KetJr_StateOverwrite:
148
+ cmp r3, #0
149
+ beq KetJr_StateOverwrite_Exit
150
+ push {r4-r5}
151
+ adr r4, Ket_StateTwistIndexes
152
+ adds r1, r1, r4
153
+ KetJr_StateOverwrite_Loop:
154
+ ldrb r5, [r1], #1
155
+ ldrb r4, [r2], #1
156
+ subs r3, r3, #1
157
+ strb r4, [r0, r5]
158
+ bne KetJr_StateOverwrite_Loop
159
+ pop {r4-r5}
160
+ KetJr_StateOverwrite_Exit:
161
+ bx lr
162
+
163
+
164
+ @----------------------------------------------------------------------------
165
+ @
166
+ @ void KetJr_Step( void *state, unsigned int size, unsigned char framing )
167
+ @
168
+ .align 8
169
+ .global KetJr_Step
170
+ .type KetJr_Step, %function;
171
+ KetJr_Step:
172
+ push {r4-r12,lr}
173
+
174
+ @ add framing into state in RAM
175
+ adr r3, Ket_StateTwistIndexes
176
+ ldrb r3, [r3, r1]
177
+ ldrb r4, [r0, r3]
178
+ eors r4, r4, r2
179
+ strb r4, [r0, r3]
180
+
181
+ @ Load state into registers
182
+ ldr r8, [r0, #_ba] @ B-aeio
183
+ ldr r9, [r0, #_ga] @ G-aeio
184
+ ldr r10, [r0, #_ka] @ K-aeio
185
+ ldr r11, [r0, #_ma] @ M-aeio
186
+ ldr r12, [r0, #_sa] @ S-aeio
187
+
188
+ ldrb r6, [r0, #_bu] @ BGKM-u
189
+ ldrb r3, [r0, #_gu]
190
+ orr r6, r6, r3, LSL #8
191
+ ldrb r3, [r0, #_ku]
192
+ orr r6, r6, r3, LSL #16
193
+ ldrb r3, [r0, #_mu]
194
+ orr r6, r6, r3, LSL #24
195
+
196
+ ldrb r7, [r0, #_su] @ S-u
197
+
198
+ eor r10, r10, #0x00080000 @ add padding
199
+ bl KeccakP200_1_StatePermuteAsm
200
+
201
+ @ Save registers into RAM state
202
+ str r8, [r0, #_ba] @ B-aeio
203
+ str r9, [r0, #_ga] @ G-aeio
204
+ str r10, [r0, #_ka] @ K-aeio
205
+ str r11, [r0, #_ma] @ M-aeio
206
+ str r12, [r0, #_sa] @ S-aeio
207
+
208
+ strb r6, [r0, #_bu] @ BGKM-u
209
+ lsrs r6, #8
210
+ strb r6, [r0, #_gu]
211
+ lsrs r6, #8
212
+ strb r6, [r0, #_ku]
213
+ lsrs r6, #8
214
+ strb r6, [r0, #_mu]
215
+ strb r7, [r0, #_su] @ S-u
216
+
217
+ pop {r4-r12,pc}
218
+
219
+
220
+ .align 8
221
+ Ket_StateTwistIndexes:
222
+ .byte 0, 6, 12, 18, 24
223
+ .byte 3, 9, 10, 16, 22
224
+ .byte 1, 7, 13, 19, 20
225
+ .byte 4, 5, 11, 17, 23
226
+ .byte 2, 8, 14, 15, 21
227
+
228
+ @----------------------------------------------------------------------------
229
+ @
230
+ @ void KetJr_FeedAssociatedDataBlocks( void *state, const unsigned char *data, unsigned int nBlocks )
231
+ @
232
+ .align 8
233
+ .global KetJr_FeedAssociatedDataBlocks
234
+ .type KetJr_FeedAssociatedDataBlocks, %function;
235
+ KetJr_FeedAssociatedDataBlocks:
236
+ push {r4-r12,lr}
237
+
238
+ @ Load state into registers
239
+ ldr r8, [r0, #_ba] @ B-aeio
240
+ ldr r9, [r0, #_ga] @ G-aeio
241
+ ldr r10, [r0, #_ka] @ K-aeio
242
+ ldr r11, [r0, #_ma] @ M-aeio
243
+ ldr r12, [r0, #_sa] @ S-aeio
244
+ ldrb r6, [r0, #_bu] @ BGKM-u
245
+ ldrb r3, [r0, #_gu]
246
+ orr r6, r6, r3, LSL #8
247
+ ldrb r3, [r0, #_ku]
248
+ orr r6, r6, r3, LSL #16
249
+ ldrb r3, [r0, #_mu]
250
+ orr r6, r6, r3, LSL #24
251
+ ldrb r7, [r0, #_su] @ S-u
252
+ KetJr_FeedAssociatedDataBlocks_Loop:
253
+ ldrb r3, [r1], #1 @ byte 1
254
+ eor r8, r8, r3
255
+ ldrb r3, [r1], #1 @ byte 2
256
+ eor r9, r9, r3, LSL #8
257
+ eor r10, r10, #0x000C0000 @ padding + FRAMEBITS00
258
+ push {r1-r2}
259
+ bl KeccakP200_1_StatePermuteAsm
260
+ pop {r1-r2}
261
+ subs r2, r2, #1
262
+ bne KetJr_FeedAssociatedDataBlocks_Loop
263
+
264
+ @ Save registers into RAM state
265
+ str r8, [r0, #_ba] @ B-aeio
266
+ str r9, [r0, #_ga] @ G-aeio
267
+ str r10, [r0, #_ka] @ K-aeio
268
+ str r11, [r0, #_ma] @ M-aeio
269
+ str r12, [r0, #_sa] @ S-aeio
270
+ strb r6, [r0, #_bu] @ BGKM-u
271
+ lsrs r6, #8
272
+ strb r6, [r0, #_gu]
273
+ lsrs r6, #8
274
+ strb r6, [r0, #_ku]
275
+ lsrs r6, #8
276
+ strb r6, [r0, #_mu]
277
+ strb r7, [r0, #_su] @ S-u
278
+
279
+ pop {r4-r12,pc}
280
+
281
+
282
+ @----------------------------------------------------------------------------
283
+ @
284
+ @ void KetJr_UnwrapBlocks( void *state, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks )
285
+ @
286
+ .align 8
287
+ .global KetJr_UnwrapBlocks
288
+ .type KetJr_UnwrapBlocks, %function;
289
+ KetJr_UnwrapBlocks:
290
+ push {r4-r12,lr}
291
+
292
+ @ Load state into registers
293
+ ldr r8, [r0, #_ba] @ B-aeio
294
+ ldr r9, [r0, #_ga] @ G-aeio
295
+ ldr r10, [r0, #_ka] @ K-aeio
296
+ ldr r11, [r0, #_ma] @ M-aeio
297
+ ldr r12, [r0, #_sa] @ S-aeio
298
+ ldrb r6, [r0, #_bu] @ BGKM-u
299
+ ldrb r4, [r0, #_gu]
300
+ orr r6, r6, r4, LSL #8
301
+ ldrb r4, [r0, #_ku]
302
+ orr r6, r6, r4, LSL #16
303
+ ldrb r4, [r0, #_mu]
304
+ orr r6, r6, r4, LSL #24
305
+ ldrb r7, [r0, #_su] @ S-u
306
+ KetJr_UnwrapBlocks_Loop:
307
+ ldrb r5, [r1], #1 @ ciphertext byte 1
308
+ eor r4, r5, r8
309
+ strb r4, [r2], #1 @ plaintext
310
+ bfi r8, r5, #0, #8 @ state = ciphertext
311
+ ldrb r5, [r1], #1 @ ciphertext byte 2
312
+ eor r4, r5, r9, LSR #8
313
+ strb r4, [r2], #1 @ plaintext
314
+ bfi r9, r5, #8, #8 @ state = ciphertext
315
+ eor r10, r10, #0x000F0000 @ padding + FRAMEBITS11
316
+ push {r1-r4}
317
+ bl KeccakP200_1_StatePermuteAsm
318
+ pop {r1-r4}
319
+ subs r3, r3, #1
320
+ bne KetJr_UnwrapBlocks_Loop
321
+
322
+ @ Save registers into RAM state
323
+ str r8, [r0, #_ba] @ B-aeio
324
+ str r9, [r0, #_ga] @ G-aeio
325
+ str r10, [r0, #_ka] @ K-aeio
326
+ str r11, [r0, #_ma] @ M-aeio
327
+ str r12, [r0, #_sa] @ S-aeio
328
+
329
+ strb r6, [r0, #_bu] @ BGKM-u
330
+ lsrs r6, #8
331
+ strb r6, [r0, #_gu]
332
+ lsrs r6, #8
333
+ strb r6, [r0, #_ku]
334
+ lsrs r6, #8
335
+ strb r6, [r0, #_mu]
336
+ strb r7, [r0, #_su] @ S-u
337
+
338
+ pop {r4-r12,pc}
339
+
340
+
341
+ @----------------------------------------------------------------------------
342
+ @
343
+ @ void KetJr_WrapBlocks( void *state, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks )
344
+ @
345
+ .align 8
346
+ .global KetJr_WrapBlocks
347
+ .type KetJr_WrapBlocks, %function;
348
+ KetJr_WrapBlocks:
349
+ push {r4-r12,lr}
350
+
351
+ @ Load state into registers
352
+ ldr r8, [r0, #_ba] @ B-aeio
353
+ ldr r9, [r0, #_ga] @ G-aeio
354
+ ldr r10, [r0, #_ka] @ K-aeio
355
+ ldr r11, [r0, #_ma] @ M-aeio
356
+ ldr r12, [r0, #_sa] @ S-aeio
357
+ ldrb r6, [r0, #_bu] @ BGKM-u
358
+ ldrb r4, [r0, #_gu]
359
+ orr r6, r6, r4, LSL #8
360
+ ldrb r4, [r0, #_ku]
361
+ orr r6, r6, r4, LSL #16
362
+ ldrb r4, [r0, #_mu]
363
+ orr r6, r6, r4, LSL #24
364
+ ldrb r7, [r0, #_su] @ S-u
365
+ KetJr_WrapBlocks_Loop:
366
+ ldrb r4, [r1], #1 @ plaintext byte 1
367
+ eor r4, r4, r8
368
+ strb r4, [r2], #1 @ ciphertext
369
+ bfi r8, r4, #0, #8 @ state = ciphertext
370
+ ldrb r4, [r1], #1 @ plaintext byte 2
371
+ eor r4, r4, r9, LSR #8
372
+ strb r4, [r2], #1 @ ciphertext
373
+ bfi r9, r4, #8, #8 @ state = ciphertext
374
+ eor r10, r10, #0x000F0000 @ padding + FRAMEBITS11
375
+ push {r1-r4}
376
+ bl KeccakP200_1_StatePermuteAsm
377
+ pop {r1-r4}
378
+ subs r3, r3, #1
379
+ bne KetJr_WrapBlocks_Loop
380
+
381
+ @ Save registers into RAM state
382
+ str r8, [r0, #_ba] @ B-aeio
383
+ str r9, [r0, #_ga] @ G-aeio
384
+ str r10, [r0, #_ka] @ K-aeio
385
+ str r11, [r0, #_ma] @ M-aeio
386
+ str r12, [r0, #_sa] @ S-aeio
387
+ strb r6, [r0, #_bu] @ BGKM-u
388
+ lsrs r6, #8
389
+ strb r6, [r0, #_gu]
390
+ lsrs r6, #8
391
+ strb r6, [r0, #_ku]
392
+ lsrs r6, #8
393
+ strb r6, [r0, #_mu]
394
+ strb r7, [r0, #_su] @ S-u
395
+
396
+ pop {r4-r12,pc}
397
+
398
+
399
+ @----------------------------------------------------------------------------
400
+ @
401
+ @ Keccak-P[200, 1] usable from asm only
402
+ @
403
+ KeccakP200_1_StatePermuteAsm:
404
+
405
+ @ Prepare Theta
406
+ eors r4, r8, r9
407
+ eors r4, r4, r10
408
+ eors r4, r4, r11
409
+ eors r4, r4, r12
410
+ eor r1, r6, r6, LSL #16
411
+ eor r1, r1, r1, LSL #8
412
+ eor r5, r7, r1, LSR #24
413
+ bic r1, r4, #0x80808080 @ r1 = rol(Caeio)
414
+ lsl r1, r1, #1
415
+ and r2, r4, #0x80808080
416
+ orr r1, r1, r2, LSR #7
417
+
418
+ @ Apply Theta u
419
+ eors r2, r1, r4, LSR #24 @ rt2(=Du) = Co ^ rol(Ca)
420
+ uxtb r2, r2
421
+ eor r7, r7, r2
422
+ orr r2, r2, r2, LSL #8
423
+ orr r2, r2, r2, LSL #16
424
+ eor r6, r6, r2
425
+ lsl r2, r5, #1 @ r2 = rol(Cu)
426
+ orrs r2, r2, r5, LSR #7
427
+ lsr r1, r1, #8
428
+ orr r1, r1, r2, LSL #24 @ r1 = rol(Ceiou)
429
+ orr r2, r5, r4, LSL #8 @ r2 = Cuaei
430
+ eors r2, r2, r1 @ r2 ^= r1
431
+
432
+ @ Apply Theta aeio
433
+ eor r8, r8, r2
434
+ eor r9, r9, r2
435
+ eor r10, r10, r2
436
+ eor r11, r11, r2
437
+ eor r12, r12, r2
438
+
439
+ @ Rho Pi
440
+ lsr r3, r8, #_e @ save _be
441
+ RhoPi 4, r8, _e, r9, _e @ _be, _ge 1 < 6
442
+ RhoPi 4, r9, _e, r6, _G @ _ge, _gu 6 < 9
443
+ RhoPi 5, r6, _G, r12, _i @ _gu, _si 9 < 22
444
+ RhoPi 7, r12, _i, r6, _K @ _si, _ku 22 < 14
445
+ RhoPi 2, r6, _K, r12, _a @ _ku, _sa 14 < 20
446
+ RhoPi 6, r12, _a, r8, _i @ _sa, _bi 20 < 2
447
+ RhoPi 3, r8, _i, r10, _i @ _bi, _ki 2 < 12
448
+ RhoPi 1, r10, _i, r10, _o @ _ki, _ko 12 < 13
449
+ RhoPi 0, r10, _o, r6, _M @ _ko, _mu 13 < 19
450
+ RhoPi 0, r6, _M, r12, _o @ _mu, _so 19 < 23
451
+ RhoPi 1, r12, _o, r11, _a @ _so, _ma 23 < 15
452
+ RhoPi 3, r11, _a, r6, _B @ _ma, _bu 15 < 4
453
+ RhoPi 6, r6, _B, r7, 0 @ _bu, _su 4 < 24
454
+ RhoPi 2, r7, 0, r12, _e @ _su, _se 24 < 21
455
+ RhoPi 7, r12, _e, r9, _o @ _se, _go 21 < 8
456
+ RhoPi 5, r9, _o, r11, _e @ _go, _me 8 < 16
457
+ RhoPi 4, r11, _e, r9, _a @ _me, _ga 16 < 5
458
+ RhoPi 4, r9, _a, r8, _o @ _ga, _bo 5 < 3
459
+ RhoPi 5, r8, _o, r11, _o @ _bo, _mo 3 < 18
460
+ RhoPi 7, r11, _o, r11, _i @ _mo, _mi 18 < 17
461
+ RhoPi 2, r11, _i, r10, _e @ _mi, _ke 17 < 11
462
+ RhoPi 6, r10, _e, r9, _i @ _ke, _gi 11 < 7
463
+ RhoPi 3, r9, _i, r10, _a @ _gi, _ka 7 < 10
464
+ RhoPi 1, r10, _a, r3, 0 @ _ka, _be 10 < 1
465
+
466
+ @ Chi
467
+ Chi r8, r6, _B
468
+ Chi r9, r6, _G
469
+ Chi r10, r6, _K
470
+ Chi r11, r6, _M
471
+ Chi r12, r7, 0
472
+
473
+ @ Iota
474
+ eor r8, r8, #0x80
475
+
476
+ @ Done
477
+ bx lr
478
+
479
+
480
+