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,590 @@
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*2
24
+ _be equ 1*2
25
+ _bi equ 2*2
26
+ _bo equ 3*2
27
+ _bu equ 4*2
28
+ _ga equ 5*2
29
+ _ge equ 6*2
30
+ _gi equ 7*2
31
+ _go equ 8*2
32
+ _gu equ 9*2
33
+ _ka equ 10*2
34
+ _ke equ 11*2
35
+ _ki equ 12*2
36
+ _ko equ 13*2
37
+ _ku equ 14*2
38
+ _ma equ 15*2
39
+ _me equ 16*2
40
+ _mi equ 17*2
41
+ _mo equ 18*2
42
+ _mu equ 19*2
43
+ _sa equ 20*2
44
+ _se equ 21*2
45
+ _si equ 22*2
46
+ _so equ 23*2
47
+ _su equ 24*2
48
+
49
+ _spare equ 25*2 ; 16-bit
50
+ _nBlock equ 26*2
51
+ _plaintext equ 28*2
52
+ _ciphertext equ 30*2
53
+ _AllocSize equ 32*2
54
+
55
+ MACRO
56
+ xor5 $result,$ptr,$b,$g,$k,$m,$rs
57
+
58
+ ldrh $result, [$ptr, #$b]
59
+ ldrh r6, [$ptr, #$g]
60
+ eor $result, $result, $rs
61
+ ldrh $rs, [$ptr, #$k]
62
+ eor $result, $result, r6
63
+ ldrh r6, [$ptr, #$m]
64
+ eor $result, $result, $rs
65
+ eor $result, $result, r6
66
+ MEND
67
+
68
+ MACRO
69
+ xor5D $resultL,$resultH,$ptr,$b,$g,$k,$m,$rsL,$rsH
70
+
71
+ bfi $rsL, $rsH, #16, #16
72
+ ldr $resultL, [$ptr, #$b]
73
+ ldr r6, [$ptr, #$g]
74
+ eor $resultL, $resultL, $rsL
75
+ ldr $rsL, [$ptr, #$k]
76
+ eor $resultL, $resultL, r6
77
+ ldr r6, [$ptr, #$m]
78
+ eor $resultL, $resultL, $rsL
79
+ eor $resultL, $resultL, r6
80
+ lsr $resultH, $resultL, #16
81
+ uxth $resultL, $resultL
82
+ MEND
83
+
84
+ MACRO
85
+ xorrol $b, $yy, $rr
86
+
87
+ eor $b, $b, $yy
88
+ lsl $b, $b, #$rr
89
+ orr $b, $b, $b, LSR #16
90
+ MEND
91
+
92
+ MACRO
93
+ rolxor $d, $a, $b
94
+
95
+ eor $d, $a, $b, LSL #1
96
+ eor $d, $d, $b, LSR #15
97
+ uxth $d, $d
98
+ MEND
99
+
100
+ MACRO
101
+ xandnot $resptr, $resofs, $aa, $bb, $cc, $temp
102
+
103
+ bic $temp, $cc, $bb
104
+ eor $temp, $temp, $aa
105
+ strh $temp, [$resptr, #$resofs]
106
+ MEND
107
+
108
+ MACRO
109
+ xandnotRC $resptr, $resofs, $aa, $bb, $cc
110
+
111
+ bic $cc, $cc, $bb
112
+ eor $cc, $cc, #0x0a
113
+ eor $cc, $cc, $aa
114
+ strh $cc, [$resptr, #$resofs]
115
+ MEND
116
+
117
+ MACRO
118
+ KeccakRound $sOut, $sIn
119
+
120
+ ;prepTheta
121
+ xor5D r1, r2, $sIn, _ba, _ga, _ka, _ma, r8, r9
122
+ xor5D r3, r4, $sIn, _bi, _gi, _ki, _mi, r10, r11
123
+ rolxor r8, r7, r2
124
+ rolxor r9, r1, r3
125
+ rolxor r10, r2, r4
126
+ rolxor r11, r3, r7
127
+ rolxor r12, r4, r1
128
+
129
+ ;thetaRhoPiChiIota
130
+ ldrh r1, [$sIn, #_ba]
131
+ ldrh r2, [$sIn, #_ge]
132
+ ldrh r3, [$sIn, #_ki]
133
+ ldrh r4, [$sIn, #_mo]
134
+ eor r1, r1, r8
135
+ xorrol r2, r9, 12
136
+ xorrol r3, r10, 11
137
+ xorrol r4, r11, 5
138
+ xorrol r5, r12, 14
139
+ xandnot $sOut, _be, r2, r3, r4, r6
140
+ xandnot $sOut, _bi, r3, r4, r5, r6
141
+ xandnot $sOut, _bo, r4, r5, r1, r6
142
+ xandnot $sOut, _bu, r5, r1, r2, r7
143
+ xandnotRC $sOut, _ba, r1, r2, r3
144
+
145
+ ldrh r1, [$sIn, #_bo]
146
+ ldrh r2, [$sIn, #_gu]
147
+ ldrh r3, [$sIn, #_ka]
148
+ ldrh r4, [$sIn, #_me]
149
+ ldrh r5, [$sIn, #_si]
150
+ xorrol r1, r11, 12
151
+ xorrol r2, r12, 4
152
+ xorrol r3, r8, 3
153
+ xorrol r4, r9, 13
154
+ xorrol r5, r10, 13
155
+ xandnot $sOut, _ga, r1, r2, r3, r6
156
+ xandnot $sOut, _ge, r2, r3, r4, r6
157
+ xandnot $sOut, _gi, r3, r4, r5, r6
158
+ xandnot $sOut, _go, r4, r5, r1, r6
159
+ xandnot $sOut, _gu, r5, r1, r2, r6
160
+ eor r7, r7, r6
161
+
162
+ ldrh r1, [$sIn, #_be]
163
+ ldrh r2, [$sIn, #_gi]
164
+ ldrh r3, [$sIn, #_ko]
165
+ ldrh r4, [$sIn, #_mu]
166
+ ldrh r5, [$sIn, #_sa]
167
+ xorrol r1, r9, 1
168
+ xorrol r2, r10, 6
169
+ xorrol r3, r11, 9
170
+ xorrol r4, r12, 8
171
+ xorrol r5, r8, 2
172
+ xandnot $sOut, _ka, r1, r2, r3, r6
173
+ xandnot $sOut, _ke, r2, r3, r4, r6
174
+ xandnot $sOut, _ki, r3, r4, r5, r6
175
+ xandnot $sOut, _ko, r4, r5, r1, r6
176
+ xandnot $sOut, _ku, r5, r1, r2, r6
177
+ eor r7, r7, r6
178
+
179
+ ldrh r1, [$sIn, #_bu]
180
+ ldrh r2, [$sIn, #_ga]
181
+ ldrh r3, [$sIn, #_ke]
182
+ ldrh r4, [$sIn, #_mi]
183
+ ldrh r5, [$sIn, #_so]
184
+ xorrol r1, r12, 11
185
+ xorrol r2, r8, 4
186
+ xorrol r3, r9, 10
187
+ xorrol r4, r10, 15
188
+ xorrol r5, r11, 8
189
+ xandnot $sOut, _ma, r1, r2, r3, r6
190
+ xandnot $sOut, _me, r2, r3, r4, r6
191
+ xandnot $sOut, _mi, r3, r4, r5, r6
192
+ xandnot $sOut, _mo, r4, r5, r1, r6
193
+ xandnot $sOut, _mu, r5, r1, r2, r6
194
+ eor r7, r7, r6
195
+
196
+ ldrh r1, [$sIn, #_bi]
197
+ ldrh r2, [$sIn, #_go]
198
+ ldrh r3, [$sIn, #_ku]
199
+ ldrh r4, [$sIn, #_ma]
200
+ ldrh r5, [$sIn, #_se]
201
+ xorrol r1, r10, 14
202
+ xorrol r2, r11, 7
203
+ xorrol r3, r12, 7
204
+ xorrol r4, r8, 9
205
+ xorrol r5, r9, 2
206
+ xandnot $sOut, _sa, r1, r2, r3, r8
207
+ xandnot $sOut, _se, r2, r3, r4, r9
208
+ xandnot $sOut, _si, r3, r4, r5, r10
209
+ xandnot $sOut, _so, r4, r5, r1, r11
210
+ bic r1, r2, r1
211
+ eor r5, r5, r1
212
+ eor r7, r7, r5
213
+ uxth r7, r7
214
+ strh r5, [$sOut, #_su]
215
+ uxth r5, r5
216
+ MEND
217
+
218
+ ;----------------------------------------------------------------------------
219
+ ;
220
+ ; void KetSr_StateAddByte( void *state, unsigned char value, unsigned int offset )
221
+ ;
222
+ ALIGN
223
+ EXPORT KetSr_StateAddByte
224
+ KetSr_StateAddByte PROC
225
+ adr r3, Ket_StateTwistIndexes
226
+ lsr r12, r2, #1
227
+ ldrb r3, [r3, r12]
228
+ and r2, r2, #1
229
+ add r3, r3, r2
230
+ ldrb r2, [r0, r3]
231
+ eors r1, r1, r2
232
+ strb r1, [r0, r3]
233
+ bx lr
234
+ ENDP
235
+
236
+ ;----------------------------------------------------------------------------
237
+ ;
238
+ ; unsigned char KetSr_StateExtractByte( void *state, unsigned int offset )
239
+ ;
240
+ ALIGN
241
+ EXPORT KetSr_StateExtractByte
242
+ KetSr_StateExtractByte PROC
243
+ adr r3, Ket_StateTwistIndexes
244
+ lsrs r2, r1, #1
245
+ ldrb r3, [r3, r2]
246
+ and r1, r1, #1
247
+ add r3, r3, r1
248
+ ldrb r0, [r0, r3]
249
+ bx lr
250
+ ENDP
251
+
252
+ ;----------------------------------------------------------------------------
253
+ ;
254
+ ; void KetSr_StateOverwrite( void *state, unsigned int offset, const unsigned char *data, unsigned int length )
255
+ ;
256
+ ALIGN
257
+ EXPORT KetSr_StateOverwrite
258
+ KetSr_StateOverwrite PROC
259
+ cmp r3, #0
260
+ beq KetSr_StateOverwrite_Exit
261
+ push {r4-r5}
262
+ adr r4, Ket_StateTwistIndexes
263
+ adds r4, r4, r1, LSR #1
264
+ ands r1, r1, #1
265
+ beq KetSr_StateOverwrite_Loop
266
+ ldrb r1, [r4], #1
267
+ b KetSr_StateOverwrite_OffsetOdd
268
+ KetSr_StateOverwrite_Loop
269
+ ldrb r1, [r4], #1
270
+ ldrb r5, [r2], #1
271
+ subs r3, r3, #1
272
+ strb r5, [r0, r1]
273
+ beq KetSr_StateOverwrite_Done
274
+ KetSr_StateOverwrite_OffsetOdd
275
+ adds r1, r1, #1
276
+ ldrb r5, [r2], #1
277
+ subs r3, r3, #1
278
+ strb r5, [r0, r1]
279
+ bne KetSr_StateOverwrite_Loop
280
+ KetSr_StateOverwrite_Done
281
+ pop {r4-r5}
282
+ KetSr_StateOverwrite_Exit
283
+ bx lr
284
+ ENDP
285
+
286
+ ;----------------------------------------------------------------------------
287
+ ;
288
+ ; void KetSr_Step( void *state, unsigned int size, unsigned char framing )
289
+ ;
290
+ ALIGN
291
+ EXPORT KetSr_Step
292
+ KetSr_Step PROC
293
+ push {r4-r12,lr}
294
+ sub sp, sp, #_AllocSize
295
+ adr r4, Ket_StateTwistIndexes ; framing
296
+ add r4, r4, r1, LSR #1
297
+ ldrb r4, [r4]
298
+ and r1, r1, #1
299
+ add r1, r1, r4
300
+ ldrb r4, [r0, r1]
301
+ eors r2, r2, r4
302
+ strb r2, [r0, r1]
303
+ ldrb r2, [r0, #_ki] ; padding
304
+ eor r2, r2, #0x08
305
+ strb r2, [r0, #_ki]
306
+ mov r4, sp ; Odd number of blocks, so copy state to stack
307
+ ldm r0!, { r5, r8, r9, r10, r11, r12 }
308
+ stm r4!, { r5, r8, r9, r10, r11, r12 }
309
+ ldm r0!, { r5, r8, r9, r10, r11, r12 }
310
+ stm r4!, { r5, r8, r9, r10, r11, r12 }
311
+ sub r0, r0, #2*24
312
+ ldrh r12, [r0, #_su]
313
+ strh r12, [sp, #_su]
314
+ ldrh r8, [sp, #_sa]
315
+ ldrh r9, [sp, #_se]
316
+ ldrh r10, [sp, #_si]
317
+ ldrh r12, [sp, #_su]
318
+ ldrh r11, [sp, #_so]
319
+ mov r5, r12
320
+ xor5 r7, sp, _bu, _gu, _ku, _mu, r12
321
+ bl KeccakP400_1_StatePermuteFromStack
322
+ add sp, sp, #_AllocSize
323
+ pop {r4-r12,pc}
324
+ ENDP
325
+
326
+ ALIGN
327
+ Ket_StateTwistIndexes
328
+ dcb 0*2, 6*2, 12*2, 18*2, 24*2
329
+ dcb 3*2, 9*2, 10*2, 16*2, 22*2
330
+ dcb 1*2, 7*2, 13*2, 19*2, 20*2
331
+ dcb 4*2, 5*2, 11*2, 17*2, 23*2
332
+ dcb 2*2, 8*2, 14*2, 15*2, 21*2
333
+
334
+ ;----------------------------------------------------------------------------
335
+ ;
336
+ ; void KetSr_FeedAssociatedDataBlocks( void *state, const unsigned char *data, unsigned int nBlocks )
337
+ ;
338
+ ALIGN
339
+ EXPORT KetSr_FeedAssociatedDataBlocks
340
+ KetSr_FeedAssociatedDataBlocks PROC
341
+ push {r4-r12,lr}
342
+ sub sp, sp, #_AllocSize
343
+ lsrs r3, r2, #1
344
+ bcc KetSr_FeedAssociatedDataBlocks_Even
345
+ adds r2, r2, #1
346
+ str r2, [sp, #_nBlock]
347
+ mov r4, sp ; Odd number of blocks, so copy state to stack
348
+ ldm r0!, { r5, r8, r9, r10, r11, r12 }
349
+ stm r4!, { r5, r8, r9, r10, r11, r12 }
350
+ ldm r0!, { r5, r8, r9, r10, r11, r12 }
351
+ stm r4!, { r5, r8, r9, r10, r11, r12 }
352
+ sub r0, r0, #2*24
353
+ ldrh r12, [r0, #_su]
354
+ strh r12, [sp, #_su]
355
+ ldrh r8, [sp, #_sa]
356
+ ldrh r9, [sp, #_se]
357
+ ldrh r10, [sp, #_si]
358
+ ldrh r12, [sp, #_su]
359
+ ldrh r11, [sp, #_so]
360
+ mov r5, r12
361
+ xor5 r7, sp, _bu, _gu, _ku, _mu, r12
362
+ b KetSr_FeedAssociatedDataBlocks_Odd
363
+ KetSr_FeedAssociatedDataBlocks_Even ; Even number of blocks
364
+ ldrh r8, [r0, #_sa]
365
+ ldrh r9, [r0, #_se]
366
+ ldrh r10, [r0, #_si]
367
+ ldrh r12, [r0, #_su]
368
+ ldrh r11, [r0, #_so]
369
+ mov r5, r12
370
+ xor5 r7, r0, _bu, _gu, _ku, _mu, r12
371
+ KetSr_FeedAssociatedDataBlocks_Loop
372
+ str r2, [sp, #_nBlock]
373
+ ldr r6, [r1], #4 ; Get data (2 lanes)
374
+ ldrh lr, [r0, #_ba] ; Add lane 1
375
+ eor lr, lr, r6
376
+ strh lr, [r0, #_ba]
377
+ ldrh lr, [r0, #_ge] ; Add lane 2
378
+ eor lr, lr, r6, LSR #16
379
+ strh lr, [r0, #_ge]
380
+ ldr r6, [r0, #_ki] ; Add FRAMEBITS00 and padding
381
+ eor r6, r6, #0x0C
382
+ str r6, [r0, #_ki]
383
+ str r1, [sp, #_plaintext]
384
+ bl KeccakP400_1_StatePermuteToStack
385
+ ldr r1, [sp, #_plaintext]
386
+ KetSr_FeedAssociatedDataBlocks_Odd
387
+ ldr r6, [r1], #4 ; Get data (2 lanes)
388
+ ldrh lr, [sp, #_ba] ; Add lane 1
389
+ eor lr, lr, r6
390
+ strh lr, [sp, #_ba]
391
+ ldrh lr, [sp, #_ge] ; Add lane 2
392
+ eor lr, lr, r6, LSR #16
393
+ strh lr, [sp, #_ge]
394
+ ldr r6, [sp, #_ki] ; Add FRAMEBITS00 and padding
395
+ eor r6, r6, #0x0C
396
+ str r6, [sp, #_ki]
397
+ str r1, [sp, #_plaintext]
398
+ bl KeccakP400_1_StatePermuteFromStack
399
+ ldr r1, [sp, #_plaintext]
400
+ ldr r2, [sp, #_nBlock]
401
+ subs r2, r2, #2
402
+ bne KetSr_FeedAssociatedDataBlocks_Loop
403
+ add sp, sp, #_AllocSize
404
+ pop {r4-r12,pc}
405
+ ENDP
406
+
407
+ ;----------------------------------------------------------------------------
408
+ ;
409
+ ; void KetSr_UnwrapBlocks( void *state, const unsigned char *ciphertext, unsigned char *plaintext, unsigned int nBlocks )
410
+ ;
411
+ ALIGN
412
+ EXPORT KetSr_UnwrapBlocks
413
+ KetSr_UnwrapBlocks PROC
414
+ push {r4-r12,lr}
415
+ sub sp, sp, #_AllocSize
416
+ lsrs r4, r3, #1
417
+ bcc KetSr_UnwrapBlocks_Even
418
+ adds r3, r3, #1
419
+ str r3, [sp, #_nBlock]
420
+ mov r4, sp ; Odd number of blocks, so copy state to stack
421
+ ldm r0!, { r5, r8, r9, r10, r11, r12 }
422
+ stm r4!, { r5, r8, r9, r10, r11, r12 }
423
+ ldm r0!, { r5, r8, r9, r10, r11, r12 }
424
+ stm r4!, { r5, r8, r9, r10, r11, r12 }
425
+ sub r0, r0, #2*24
426
+ ldrh r12, [r0, #_su]
427
+ strh r12, [sp, #_su]
428
+ ldrh r8, [sp, #_sa]
429
+ ldrh r9, [sp, #_se]
430
+ ldrh r10, [sp, #_si]
431
+ ldrh r12, [sp, #_su]
432
+ ldrh r11, [sp, #_so]
433
+ mov r5, r12
434
+ xor5 r7, sp, _bu, _gu, _ku, _mu, r12
435
+ b KetSr_UnwrapBlocks_Odd
436
+ KetSr_UnwrapBlocks_Even ; Even number of blocks
437
+ ldrh r8, [r0, #_sa]
438
+ ldrh r9, [r0, #_se]
439
+ ldrh r10, [r0, #_si]
440
+ ldrh r12, [r0, #_su]
441
+ ldrh r11, [r0, #_so]
442
+ mov r5, r12
443
+ xor5 r7, r0, _bu, _gu, _ku, _mu, r12
444
+ KetSr_UnwrapBlocks_Loop
445
+ str r3, [sp, #_nBlock]
446
+ ldr r6, [r1], #4 ; Get ciphertext (2 lanes)
447
+ ldrh lr, [r0, #_ba] ; Lane 1 from state
448
+ eor lr, lr, r6
449
+ strh lr, [r2], #2 ; Save plaintext lane 1
450
+ strh r6, [r0, #_ba] ; Save ciphertext into state lane 1
451
+ ldrh lr, [r0, #_ge] ; Lane 2 from state
452
+ eor lr, lr, r6, LSR #16
453
+ strh lr, [r2], #2 ; Save plaintext lane 2
454
+ lsrs r6, r6, #16
455
+ strh r6, [r0, #_ge] ; Save ciphertext into state lane 2
456
+ ldr r6, [r0, #_ki] ; Add FRAMEBITS11 and padding
457
+ eor r6, r6, #0x0F
458
+ str r6, [r0, #_ki]
459
+ str r1, [sp, #_ciphertext]
460
+ str r2, [sp, #_plaintext]
461
+ bl KeccakP400_1_StatePermuteToStack
462
+ ldr r1, [sp, #_ciphertext]
463
+ ldr r2, [sp, #_plaintext]
464
+ KetSr_UnwrapBlocks_Odd
465
+ ldr r6, [r1], #4 ; Get ciphertext (2 lanes)
466
+ ldrh lr, [sp, #_ba] ; Get lane 1 from state
467
+ eor lr, lr, r6
468
+ strh lr, [r2], #2 ; Save plaintext lane 1
469
+ strh r6, [sp, #_ba] ; Save ciphertext into state lane 1
470
+ ldrh lr, [sp, #_ge] ; Get lane 2 from state
471
+ eor lr, lr, r6, LSR #16
472
+ strh lr, [r2], #2 ; Save plaintext lane 2
473
+ lsrs r6, r6, #16
474
+ strh r6, [sp, #_ge] ; Save ciphertext into state lane 2
475
+ ldr r6, [sp, #_ki] ; Add FRAMEBITS11 and padding
476
+ eor r6, r6, #0x0F
477
+ str r6, [sp, #_ki]
478
+ str r1, [sp, #_ciphertext]
479
+ str r2, [sp, #_plaintext]
480
+ bl KeccakP400_1_StatePermuteFromStack
481
+ ldr r1, [sp, #_ciphertext]
482
+ ldr r2, [sp, #_plaintext]
483
+ ldr r3, [sp, #_nBlock]
484
+ subs r3, r3, #2
485
+ bne KetSr_UnwrapBlocks_Loop
486
+ add sp, sp, #_AllocSize
487
+ pop {r4-r12,pc}
488
+ ENDP
489
+
490
+ ;----------------------------------------------------------------------------
491
+ ;
492
+ ; void KetSr_WrapBlocks( void *state, const unsigned char *plaintext, unsigned char *ciphertext, unsigned int nBlocks )
493
+ ;
494
+ ALIGN
495
+ EXPORT KetSr_WrapBlocks
496
+ KetSr_WrapBlocks PROC
497
+ push {r4-r12,lr}
498
+ sub sp, sp, #_AllocSize
499
+ lsrs r4, r3, #1
500
+ bcc KetSr_WrapBlocks_Even
501
+ adds r3, r3, #1
502
+ str r3, [sp, #_nBlock]
503
+ mov r4, sp ; Odd number of blocks, so copy state to stack
504
+ ldm r0!, { r5, r8, r9, r10, r11, r12 }
505
+ stm r4!, { r5, r8, r9, r10, r11, r12 }
506
+ ldm r0!, { r5, r8, r9, r10, r11, r12 }
507
+ stm r4!, { r5, r8, r9, r10, r11, r12 }
508
+ sub r0, r0, #2*24
509
+ ldrh r12, [r0, #_su]
510
+ strh r12, [sp, #_su]
511
+ ldrh r8, [sp, #_sa]
512
+ ldrh r9, [sp, #_se]
513
+ ldrh r10, [sp, #_si]
514
+ ldrh r12, [sp, #_su]
515
+ ldrh r11, [sp, #_so]
516
+ mov r5, r12
517
+ xor5 r7, sp, _bu, _gu, _ku, _mu, r12
518
+ b KetSr_WrapBlocks_Odd
519
+ KetSr_WrapBlocks_Even ; Even number of blocks
520
+ ldrh r8, [r0, #_sa]
521
+ ldrh r9, [r0, #_se]
522
+ ldrh r10, [r0, #_si]
523
+ ldrh r12, [r0, #_su]
524
+ ldrh r11, [r0, #_so]
525
+ mov r5, r12
526
+ xor5 r7, r0, _bu, _gu, _ku, _mu, r12
527
+ KetSr_WrapBlocks_Loop
528
+ str r3, [sp, #_nBlock]
529
+ ldr r6, [r1], #4 ; Get plaintext (2 lanes)
530
+ ldrh lr, [r0, #_ba] ; Get lane 1 from state
531
+ eor lr, lr, r6
532
+ strh lr, [r2], #2 ; Save ciphertext lane 1
533
+ strh lr, [r0, #_ba] ; Save ciphertext into state lane 1
534
+ ldrh lr, [r0, #_ge] ; Get lane 2 from state
535
+ eor lr, lr, r6, LSR #16
536
+ strh lr, [r2], #2 ; Save ciphertext lane 2
537
+ strh lr, [r0, #_ge] ; Save ciphertext into state lane 2
538
+ ldr r6, [r0, #_ki] ; Add FRAMEBITS11 and padding
539
+ eor r6, r6, #0x0F
540
+ str r6, [r0, #_ki]
541
+ str r1, [sp, #_plaintext]
542
+ str r2, [sp, #_ciphertext]
543
+ bl KeccakP400_1_StatePermuteToStack
544
+ ldr r1, [sp, #_plaintext]
545
+ ldr r2, [sp, #_ciphertext]
546
+ KetSr_WrapBlocks_Odd
547
+ ldr r6, [r1], #4 ; Get plaintext (2 lanes)
548
+ ldrh lr, [sp, #_ba] ; Get lane 1 from state
549
+ eor lr, lr, r6
550
+ strh lr, [r2], #2 ; Save ciphertext lane 1
551
+ strh lr, [sp, #_ba] ; Save ciphertext into state lane 1
552
+ ldrh lr, [sp, #_ge] ; Get lane 2 from state
553
+ eor lr, lr, r6, LSR #16
554
+ strh lr, [r2], #2 ; Save ciphertext lane 2
555
+ strh lr, [sp, #_ge] ; Save ciphertext into state lane 2
556
+ ldr r6, [sp, #_ki] ; Add FRAMEBITS11 and padding
557
+ eor r6, r6, #0x0F
558
+ str r6, [sp, #_ki]
559
+ str r1, [sp, #_plaintext]
560
+ str r2, [sp, #_ciphertext]
561
+ bl KeccakP400_1_StatePermuteFromStack
562
+ ldr r1, [sp, #_plaintext]
563
+ ldr r2, [sp, #_ciphertext]
564
+ ldr r3, [sp, #_nBlock]
565
+ subs r3, r3, #2
566
+ bne KetSr_WrapBlocks_Loop
567
+ add sp, sp, #_AllocSize
568
+ pop {r4-r12,pc}
569
+ ENDP
570
+
571
+ ;----------------------------------------------------------------------------
572
+ ;
573
+ ; Keccak-P[400, 1] usable from asm only, from r0 to sp
574
+ ;
575
+ KeccakP400_1_StatePermuteToStack PROC
576
+ KeccakRound sp, r0
577
+ bx lr
578
+ ENDP
579
+
580
+ ;----------------------------------------------------------------------------
581
+ ;
582
+ ; Keccak-P[400, 1] usable from asm only, from sp to r0
583
+ ;
584
+ KeccakP400_1_StatePermuteFromStack PROC
585
+ KeccakRound r0, sp
586
+ bx lr
587
+ ENDP
588
+
589
+ END
590
+