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