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