sleeping_kangaroo12 0.0.1 → 0.0.5

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 (296) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +27 -0
  3. data/README.md +48 -53
  4. data/ext/Rakefile +12 -37
  5. data/ext/binding/sleeping_kangaroo12.c +1 -16
  6. data/ext/{xkcp → k12}/Makefile +0 -0
  7. data/ext/k12/Makefile.build +118 -0
  8. data/ext/k12/README.markdown +86 -0
  9. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-ARMv8Asha3.S +623 -0
  10. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-SnP.h +65 -0
  11. data/ext/k12/lib/ARMv8Asha3/KeccakP-1600-opt64.c +227 -0
  12. data/ext/{xkcp/lib/low/KeccakP-1600/compact → k12/lib/Inplace32BI}/KeccakP-1600-SnP.h +4 -9
  13. data/ext/{xkcp/lib/low/KeccakP-1600/plain-32bits-inplace → k12/lib/Inplace32BI}/KeccakP-1600-inplace32BI.c +65 -160
  14. data/ext/k12/lib/KangarooTwelve.c +332 -0
  15. data/ext/{xkcp/lib/high/KangarooTwelve → k12/lib}/KangarooTwelve.h +53 -16
  16. data/ext/{xkcp/lib/low/KeccakP-1600/AVX2 → k12/lib/Optimized64}/KeccakP-1600-AVX2.s +122 -558
  17. data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512-plainC.c +241 -0
  18. data/ext/k12/lib/Optimized64/KeccakP-1600-AVX512.s +551 -0
  19. data/ext/k12/lib/Optimized64/KeccakP-1600-SnP.h +74 -0
  20. data/ext/{xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-64.macros → k12/lib/Optimized64/KeccakP-1600-opt64.c} +447 -169
  21. data/ext/k12/lib/Optimized64/KeccakP-1600-runtimeDispatch.c +406 -0
  22. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX2.c +419 -0
  23. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-AVX512.c +458 -0
  24. data/ext/k12/lib/Optimized64/KeccakP-1600-timesN-SSSE3.c +438 -0
  25. data/ext/{xkcp/lib/low/KeccakP-1600/plain-64bits → k12/lib/Plain64}/KeccakP-1600-SnP.h +14 -20
  26. data/ext/{xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.h → k12/lib/Plain64/KeccakP-1600-plain64.c} +9 -8
  27. data/ext/{xkcp/lib/common → k12/lib}/align.h +3 -2
  28. data/ext/{xkcp/lib/common → k12/lib}/brg_endian.h +0 -0
  29. data/ext/{xkcp → k12}/support/Build/ExpandProducts.xsl +0 -0
  30. data/ext/{xkcp → k12}/support/Build/ToGlobalMakefile.xsl +0 -0
  31. data/ext/{xkcp → k12}/support/Build/ToOneTarget.xsl +0 -0
  32. data/ext/{xkcp → k12}/support/Build/ToTargetConfigFile.xsl +0 -0
  33. data/ext/{xkcp → k12}/support/Build/ToTargetMakefile.xsl +10 -16
  34. data/ext/{xkcp → k12}/support/Build/ToVCXProj.xsl +0 -0
  35. data/lib/sleeping_kangaroo12/binding.rb +2 -1
  36. data/lib/sleeping_kangaroo12/build/loader.rb +1 -0
  37. data/lib/sleeping_kangaroo12/build/platform.rb +1 -0
  38. data/lib/sleeping_kangaroo12/digest.rb +38 -4
  39. data/lib/sleeping_kangaroo12/version.rb +1 -1
  40. metadata +48 -288
  41. data/ext/config/xkcp.build +0 -17
  42. data/ext/xkcp/LICENSE +0 -1
  43. data/ext/xkcp/Makefile.build +0 -200
  44. data/ext/xkcp/README.markdown +0 -296
  45. data/ext/xkcp/lib/HighLevel.build +0 -143
  46. data/ext/xkcp/lib/LowLevel.build +0 -757
  47. data/ext/xkcp/lib/high/KangarooTwelve/KangarooTwelve.c +0 -301
  48. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.c +0 -81
  49. data/ext/xkcp/lib/high/Keccak/FIPS202/KeccakHash.h +0 -125
  50. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.c +0 -48
  51. data/ext/xkcp/lib/high/Keccak/FIPS202/SimpleFIPS202.h +0 -79
  52. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.c +0 -81
  53. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.h +0 -73
  54. data/ext/xkcp/lib/high/Keccak/KeccakDuplex.inc +0 -195
  55. data/ext/xkcp/lib/high/Keccak/KeccakSponge.c +0 -111
  56. data/ext/xkcp/lib/high/Keccak/KeccakSponge.h +0 -76
  57. data/ext/xkcp/lib/high/Keccak/KeccakSponge.inc +0 -314
  58. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.c +0 -61
  59. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.h +0 -67
  60. data/ext/xkcp/lib/high/Keccak/PRG/KeccakPRG.inc +0 -128
  61. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.c +0 -93
  62. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.h +0 -599
  63. data/ext/xkcp/lib/high/Keccak/SP800-185/SP800-185.inc +0 -573
  64. data/ext/xkcp/lib/high/Ketje/Ketjev2.c +0 -87
  65. data/ext/xkcp/lib/high/Ketje/Ketjev2.h +0 -88
  66. data/ext/xkcp/lib/high/Ketje/Ketjev2.inc +0 -274
  67. data/ext/xkcp/lib/high/Keyak/Keyakv2.c +0 -132
  68. data/ext/xkcp/lib/high/Keyak/Keyakv2.h +0 -217
  69. data/ext/xkcp/lib/high/Keyak/Keyakv2.inc +0 -81
  70. data/ext/xkcp/lib/high/Keyak/Motorist.inc +0 -953
  71. data/ext/xkcp/lib/high/Kravatte/Kravatte.c +0 -533
  72. data/ext/xkcp/lib/high/Kravatte/Kravatte.h +0 -115
  73. data/ext/xkcp/lib/high/Kravatte/KravatteModes.c +0 -557
  74. data/ext/xkcp/lib/high/Kravatte/KravatteModes.h +0 -247
  75. data/ext/xkcp/lib/high/Xoodyak/Cyclist.h +0 -66
  76. data/ext/xkcp/lib/high/Xoodyak/Cyclist.inc +0 -336
  77. data/ext/xkcp/lib/high/Xoodyak/Xoodyak-parameters.h +0 -26
  78. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.c +0 -55
  79. data/ext/xkcp/lib/high/Xoodyak/Xoodyak.h +0 -35
  80. data/ext/xkcp/lib/high/Xoofff/Xoofff.c +0 -634
  81. data/ext/xkcp/lib/high/Xoofff/Xoofff.h +0 -147
  82. data/ext/xkcp/lib/high/Xoofff/XoofffModes.c +0 -483
  83. data/ext/xkcp/lib/high/Xoofff/XoofffModes.h +0 -241
  84. data/ext/xkcp/lib/high/common/Phases.h +0 -25
  85. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-SnP.h +0 -41
  86. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-armcc.s +0 -1666
  87. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv6m-le-gcc.s +0 -1655
  88. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-armcc.s +0 -1268
  89. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7a-le-gcc.s +0 -1264
  90. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-armcc.s +0 -1178
  91. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-inplace-32bi-armv7m-le-gcc.s +0 -1175
  92. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-armcc.s +0 -1338
  93. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u1-32bi-armv6m-le-gcc.s +0 -1336
  94. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-armcc.s +0 -1343
  95. data/ext/xkcp/lib/low/KeccakP-1600/ARM/KeccakP-1600-u2-32bi-armv6m-le-gcc.s +0 -1339
  96. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-SnP.h +0 -42
  97. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-armcc.s +0 -823
  98. data/ext/xkcp/lib/low/KeccakP-1600/ARMv7A-NEON/KeccakP-1600-armv7a-le-neon-gcc.s +0 -831
  99. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-SnP.h +0 -31
  100. data/ext/xkcp/lib/low/KeccakP-1600/ARMv8A/KeccakP-1600-armv8a-neon.s +0 -540
  101. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-SnP.h +0 -42
  102. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-compact.s +0 -733
  103. data/ext/xkcp/lib/low/KeccakP-1600/AVR8/KeccakP-1600-avr8-fast.s +0 -1121
  104. data/ext/xkcp/lib/low/KeccakP-1600/AVX2/KeccakP-1600-SnP.h +0 -52
  105. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-AVX512.c +0 -623
  106. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/KeccakP-1600-SnP.h +0 -47
  107. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u12/KeccakP-1600-AVX512-config.h +0 -6
  108. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/u6/KeccakP-1600-AVX512-config.h +0 -6
  109. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/C/ua/KeccakP-1600-AVX512-config.h +0 -6
  110. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-AVX512.s +0 -1031
  111. data/ext/xkcp/lib/low/KeccakP-1600/AVX512/KeccakP-1600-SnP.h +0 -53
  112. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-SnP.h +0 -44
  113. data/ext/xkcp/lib/low/KeccakP-1600/XOP/KeccakP-1600-XOP.c +0 -476
  114. data/ext/xkcp/lib/low/KeccakP-1600/XOP/u6/KeccakP-1600-XOP-config.h +0 -6
  115. data/ext/xkcp/lib/low/KeccakP-1600/XOP/ua/KeccakP-1600-XOP-config.h +0 -6
  116. data/ext/xkcp/lib/low/KeccakP-1600/common/KeccakP-1600-unrolling.macros +0 -305
  117. data/ext/xkcp/lib/low/KeccakP-1600/compact/KeccakP-1600-compact64.c +0 -420
  118. data/ext/xkcp/lib/low/KeccakP-1600/plain-32bits-inplace/KeccakP-1600-SnP.h +0 -43
  119. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/KeccakP-1600-opt64.c +0 -565
  120. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcu6/KeccakP-1600-opt64-config.h +0 -7
  121. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua/KeccakP-1600-opt64-config.h +0 -7
  122. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/lcua-shld/KeccakP-1600-opt64-config.h +0 -8
  123. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/u6/KeccakP-1600-opt64-config.h +0 -6
  124. data/ext/xkcp/lib/low/KeccakP-1600/plain-64bits/ua/KeccakP-1600-opt64-config.h +0 -6
  125. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-SnP.h +0 -44
  126. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference.h +0 -23
  127. data/ext/xkcp/lib/low/KeccakP-1600/ref-32bits/KeccakP-1600-reference32BI.c +0 -625
  128. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-SnP.h +0 -44
  129. data/ext/xkcp/lib/low/KeccakP-1600/ref-64bits/KeccakP-1600-reference.c +0 -440
  130. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-SnP.h +0 -42
  131. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas.s +0 -1196
  132. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-gas_Apple.s +0 -1124
  133. data/ext/xkcp/lib/low/KeccakP-1600/x86-64/KeccakP-1600-x86-64-shld-gas.s +0 -1196
  134. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-armcc.s +0 -1392
  135. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-inplace-pl2-armv7a-neon-le-gcc.s +0 -1394
  136. data/ext/xkcp/lib/low/KeccakP-1600-times2/ARMv7A-NEON/KeccakP-1600-times2-SnP.h +0 -42
  137. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u12/SIMD512-2-config.h +0 -7
  138. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512u4/SIMD512-2-config.h +0 -7
  139. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/AVX512ufull/SIMD512-2-config.h +0 -7
  140. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SIMD512.c +0 -850
  141. data/ext/xkcp/lib/low/KeccakP-1600-times2/AVX512/KeccakP-1600-times2-SnP.h +0 -51
  142. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SIMD128.c +0 -957
  143. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/KeccakP-1600-times2-SnP.h +0 -49
  144. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-u2/SIMD128-config.h +0 -8
  145. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/SSSE3-ua/SIMD128-config.h +0 -8
  146. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-u2/SIMD128-config.h +0 -9
  147. data/ext/xkcp/lib/low/KeccakP-1600-times2/SIMD128/XOP-ua/SIMD128-config.h +0 -9
  148. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-SnP.h +0 -45
  149. data/ext/xkcp/lib/low/KeccakP-1600-times2/fallback-on1/KeccakP-1600-times2-on1.c +0 -37
  150. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SIMD256.c +0 -1321
  151. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/KeccakP-1600-times4-SnP.h +0 -55
  152. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u12/SIMD256-config.h +0 -7
  153. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/u6/SIMD256-config.h +0 -7
  154. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX2/ua/SIMD256-config.h +0 -7
  155. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u12/SIMD512-4-config.h +0 -7
  156. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512u4/SIMD512-4-config.h +0 -7
  157. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/AVX512ufull/SIMD512-4-config.h +0 -7
  158. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SIMD512.c +0 -881
  159. data/ext/xkcp/lib/low/KeccakP-1600-times4/AVX512/KeccakP-1600-times4-SnP.h +0 -51
  160. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-SnP.h +0 -45
  161. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on1/KeccakP-1600-times4-on1.c +0 -37
  162. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-SnP.h +0 -45
  163. data/ext/xkcp/lib/low/KeccakP-1600-times4/fallback-on2/KeccakP-1600-times4-on2.c +0 -38
  164. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SIMD512.c +0 -1615
  165. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/KeccakP-1600-times8-SnP.h +0 -57
  166. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u12/SIMD512-config.h +0 -7
  167. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/u4/SIMD512-config.h +0 -7
  168. data/ext/xkcp/lib/low/KeccakP-1600-times8/AVX512/ua/SIMD512-config.h +0 -7
  169. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-SnP.h +0 -45
  170. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on1/KeccakP-1600-times8-on1.c +0 -37
  171. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-SnP.h +0 -45
  172. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on2/KeccakP-1600-times8-on2.c +0 -38
  173. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-SnP.h +0 -45
  174. data/ext/xkcp/lib/low/KeccakP-1600-times8/fallback-on4/KeccakP-1600-times8-on4.c +0 -38
  175. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-SnP.h +0 -41
  176. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-armcc.s +0 -442
  177. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv6m-le-gcc.s +0 -446
  178. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-armcc.s +0 -419
  179. data/ext/xkcp/lib/low/KeccakP-200/ARM/KeccakP-200-armv7m-le-gcc.s +0 -427
  180. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-SnP.h +0 -41
  181. data/ext/xkcp/lib/low/KeccakP-200/AVR8/KeccakP-200-avr8-fast.s +0 -647
  182. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-SnP.h +0 -39
  183. data/ext/xkcp/lib/low/KeccakP-200/compact/KeccakP-200-compact.c +0 -190
  184. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-SnP.h +0 -43
  185. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.c +0 -412
  186. data/ext/xkcp/lib/low/KeccakP-200/ref/KeccakP-200-reference.h +0 -23
  187. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-SnP.h +0 -41
  188. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-armcc.s +0 -454
  189. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv6m-le-gcc.s +0 -458
  190. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-armcc.s +0 -455
  191. data/ext/xkcp/lib/low/KeccakP-400/ARM/KeccakP-400-armv7m-le-gcc.s +0 -458
  192. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-SnP.h +0 -41
  193. data/ext/xkcp/lib/low/KeccakP-400/AVR8/KeccakP-400-avr8-fast.s +0 -728
  194. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-SnP.h +0 -43
  195. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.c +0 -414
  196. data/ext/xkcp/lib/low/KeccakP-400/ref/KeccakP-400-reference.h +0 -23
  197. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-SnP.h +0 -42
  198. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-armcc.s +0 -527
  199. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u1-armv6m-le-gcc.s +0 -533
  200. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-armcc.s +0 -528
  201. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv6m-le-gcc.s +0 -534
  202. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-armcc.s +0 -521
  203. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7a-le-gcc.s +0 -527
  204. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-armcc.s +0 -517
  205. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-u2-armv7m-le-gcc.s +0 -523
  206. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-armcc.s +0 -550
  207. data/ext/xkcp/lib/low/KeccakP-800/ARM/KeccakP-800-uf-armv7m-le-gcc.s +0 -556
  208. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-SnP.h +0 -32
  209. data/ext/xkcp/lib/low/KeccakP-800/ARMv8A/KeccakP-800-armv8a-neon.s +0 -432
  210. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-SnP.h +0 -42
  211. data/ext/xkcp/lib/low/KeccakP-800/AVR8/KeccakP-800-avr8-fast.s +0 -929
  212. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-SnP.h +0 -40
  213. data/ext/xkcp/lib/low/KeccakP-800/compact/KeccakP-800-compact.c +0 -244
  214. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-SnP.h +0 -46
  215. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32-bis.macros +0 -184
  216. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.c +0 -454
  217. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-opt32.macros +0 -459
  218. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling-bis.macros +0 -83
  219. data/ext/xkcp/lib/low/KeccakP-800/plain/KeccakP-800-unrolling.macros +0 -88
  220. data/ext/xkcp/lib/low/KeccakP-800/plain/lcu2/KeccakP-800-opt32-config.h +0 -7
  221. data/ext/xkcp/lib/low/KeccakP-800/plain/lcua/KeccakP-800-opt32-config.h +0 -7
  222. data/ext/xkcp/lib/low/KeccakP-800/plain/u2/KeccakP-800-opt32-config.h +0 -7
  223. data/ext/xkcp/lib/low/KeccakP-800/plain/ua/KeccakP-800-opt32-config.h +0 -7
  224. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-SnP.h +0 -44
  225. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.c +0 -437
  226. data/ext/xkcp/lib/low/KeccakP-800/ref/KeccakP-800-reference.h +0 -23
  227. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/Ket.h +0 -57
  228. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-armcc.s +0 -475
  229. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeJr-armv7m-le-gcc.s +0 -480
  230. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-armcc.s +0 -590
  231. data/ext/xkcp/lib/low/Ketje/OptimizedAsmARM/KetjeSr-armv7m-le-gcc.s +0 -590
  232. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.c +0 -126
  233. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.h +0 -68
  234. data/ext/xkcp/lib/low/Ketje/OptimizedLE/Ket.inc +0 -174
  235. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.c +0 -80
  236. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.h +0 -68
  237. data/ext/xkcp/lib/low/Ketje/SnP-compliant/Ket.inc +0 -142
  238. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-SnP.h +0 -55
  239. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-armcc.s +0 -1086
  240. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-u1-armv6m-le-gcc.s +0 -1092
  241. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-armcc.s +0 -721
  242. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv6-le-gcc.s +0 -726
  243. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-armcc.s +0 -723
  244. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodoo-uf-armv7m-le-gcc.s +0 -729
  245. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-armcc.s +0 -1164
  246. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-u1-armv6m-le-gcc.s +0 -1165
  247. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-armcc.s +0 -562
  248. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv6-le-gcc.s +0 -563
  249. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-armcc.s +0 -563
  250. data/ext/xkcp/lib/low/Xoodoo/ARM/Xoodyak-uf-armv7m-le-gcc.s +0 -565
  251. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-SnP.h +0 -55
  252. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-armcc.s +0 -476
  253. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodoo-uf-armv7a-neon-le-gcc.s +0 -485
  254. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-armcc.s +0 -362
  255. data/ext/xkcp/lib/low/Xoodoo/ARMv7A-NEON/Xoodyak-uf-armv7a-neon-le-gcc.s +0 -367
  256. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-SnP.h +0 -43
  257. data/ext/xkcp/lib/low/Xoodoo/AVR8/Xoodoo-avr8-u1.s +0 -1341
  258. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SIMD512.c +0 -581
  259. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodoo-SnP.h +0 -58
  260. data/ext/xkcp/lib/low/Xoodoo/AVX512/Xoodyak-full-block-SIMD512.c +0 -332
  261. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SIMD128.c +0 -329
  262. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodoo-SnP.h +0 -53
  263. data/ext/xkcp/lib/low/Xoodoo/SSE2/Xoodyak-full-block-SIMD128.c +0 -355
  264. data/ext/xkcp/lib/low/Xoodoo/Xoodoo.h +0 -79
  265. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-SnP.h +0 -56
  266. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodoo-optimized.c +0 -399
  267. data/ext/xkcp/lib/low/Xoodoo/plain/Xoodyak-full-blocks.c +0 -127
  268. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-SnP.h +0 -43
  269. data/ext/xkcp/lib/low/Xoodoo/ref/Xoodoo-reference.c +0 -253
  270. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SIMD512.c +0 -1044
  271. data/ext/xkcp/lib/low/Xoodoo-times16/AVX512/Xoodoo-times16-SnP.h +0 -49
  272. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-SnP.h +0 -45
  273. data/ext/xkcp/lib/low/Xoodoo-times16/fallback-on1/Xoodoo-times16-on1.c +0 -37
  274. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-ARMv7A.s +0 -1587
  275. data/ext/xkcp/lib/low/Xoodoo-times4/ARMv7A-NEON/Xoodoo-times4-SnP.h +0 -48
  276. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SIMD512.c +0 -1202
  277. data/ext/xkcp/lib/low/Xoodoo-times4/AVX512/Xoodoo-times4-SnP.h +0 -48
  278. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SIMD128.c +0 -484
  279. data/ext/xkcp/lib/low/Xoodoo-times4/SSSE3/Xoodoo-times4-SnP.h +0 -44
  280. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-SnP.h +0 -45
  281. data/ext/xkcp/lib/low/Xoodoo-times4/fallback-on1/Xoodoo-times4-on1.c +0 -37
  282. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SIMD256.c +0 -939
  283. data/ext/xkcp/lib/low/Xoodoo-times8/AVX2/Xoodoo-times8-SnP.h +0 -49
  284. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SIMD512.c +0 -1216
  285. data/ext/xkcp/lib/low/Xoodoo-times8/AVX512/Xoodoo-times8-SnP.h +0 -48
  286. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-SnP.h +0 -45
  287. data/ext/xkcp/lib/low/Xoodoo-times8/fallback-on1/Xoodoo-times8-on1.c +0 -37
  288. data/ext/xkcp/lib/low/common/PlSnP-Fallback.inc +0 -290
  289. data/ext/xkcp/lib/low/common/SnP-Relaned.h +0 -141
  290. data/ext/xkcp/support/Kernel-PMU/Kernel-pmu.md +0 -133
  291. data/ext/xkcp/support/Kernel-PMU/Makefile +0 -8
  292. data/ext/xkcp/support/Kernel-PMU/enable_arm_pmu.c +0 -129
  293. data/ext/xkcp/support/Kernel-PMU/load-module +0 -1
  294. data/ext/xkcp/util/KeccakSum/KeccakSum.c +0 -394
  295. data/ext/xkcp/util/KeccakSum/base64.c +0 -86
  296. data/ext/xkcp/util/KeccakSum/base64.h +0 -12
@@ -1,929 +0,0 @@
1
- ;
2
- ; The eXtended Keccak Code Package (XKCP)
3
- ; https://github.com/XKCP/XKCP
4
- ;
5
- ; The Keccak-p permutations, designed by Guido Bertoni, Joan Daemen, Michaël Peeters and Gilles Van Assche.
6
- ;
7
- ; Implementation by Ronny Van Keer, hereby denoted as "the implementer".
8
- ;
9
- ; For more information, feedback or questions, please refer to the Keccak Team website:
10
- ; https://keccak.team/
11
- ;
12
- ; To the extent possible under law, the implementer has waived all copyright
13
- ; and related or neighboring rights to the source code in this file.
14
- ; http://creativecommons.org/publicdomain/zero/1.0/
15
- ;
16
- ; ---
17
- ;
18
- ; This file implements Keccak-p[800] in a SnP-compatible way.
19
- ; Please refer to SnP-documentation.h for more details.
20
- ;
21
- ; This implementation comes with KeccakP-800-SnP.h in the same folder.
22
- ; Please refer to LowLevel.build for the exact list of other files it must be combined with.
23
- ;
24
-
25
- ; INFO: Tested on ATmega1280 simulator
26
-
27
- ; Registers used in all routines
28
- #define zero 1
29
- #define rpState 24
30
- #define rX 26
31
- #define rY 28
32
- #define rZ 30
33
- #define sp 0x3D
34
-
35
- ;----------------------------------------------------------------------------
36
- ;
37
- ; void KeccakP800_StaticInitialize( void )
38
- ;
39
- .global KeccakP800_StaticInitialize
40
-
41
- ;----------------------------------------------------------------------------
42
- ;
43
- ; void KeccakP800_Initialize(void *state)
44
- ;
45
- ; argument state is passed in r24:r25
46
- ;
47
- .global KeccakP800_Initialize
48
- KeccakP800_Initialize:
49
- movw rZ, r24
50
- ldi r23, 5*5 ; clear state (4 bytes/1 lane per iteration)
51
- KeccakP800_Initialize_Loop:
52
- st z+, zero
53
- st z+, zero
54
- st z+, zero
55
- st z+, zero
56
- dec r23
57
- brne KeccakP800_Initialize_Loop
58
- KeccakP800_StaticInitialize:
59
- ret
60
-
61
- ;----------------------------------------------------------------------------
62
- ;
63
- ; void KeccakP800_AddByte(void *state, unsigned char data, unsigned int offset)
64
- ;
65
- ; argument state is passed in r24:r25
66
- ; argument data is passed in r22:r23, only LSB (r22) is used
67
- ; argument offset is passed in r20:r21, only LSB (r20) is used
68
- ;
69
- .global KeccakP800_AddByte
70
- KeccakP800_AddByte:
71
- movw rZ, r24
72
- add rZ, r20
73
- adc rZ+1, zero
74
- ld r0, Z
75
- eor r0, r22
76
- st Z, r0
77
- ret
78
-
79
- ;----------------------------------------------------------------------------
80
- ;
81
- ; void KeccakP800_AddBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
82
- ;
83
- ; argument state is passed in r24:r25
84
- ; argument data is passed in r22:r23
85
- ; argument offset is passed in r20:r21, only LSB (r20) is used
86
- ; argument length is passed in r18:r19, only LSB (r18) is used
87
- ;
88
- .global KeccakP800_AddBytes
89
- KeccakP800_AddBytes:
90
- movw rZ, r24
91
- add rZ, r20
92
- adc rZ+1, zero
93
- movw rX, r22
94
- subi r18, 8
95
- brcs KeccakP800_AddBytes_Byte
96
- ;do 8 bytes per iteration
97
- KeccakP800_AddBytes_Loop8:
98
- ld r21, X+
99
- ld r0, Z
100
- eor r0, r21
101
- st Z+, r0
102
- ld r21, X+
103
- ld r0, Z
104
- eor r0, r21
105
- st Z+, r0
106
- ld r21, X+
107
- ld r0, Z
108
- eor r0, r21
109
- st Z+, r0
110
- ld r21, X+
111
- ld r0, Z
112
- eor r0, r21
113
- st Z+, r0
114
-
115
- ld r21, X+
116
- ld r0, Z
117
- eor r0, r21
118
- st Z+, r0
119
- ld r21, X+
120
- ld r0, Z
121
- eor r0, r21
122
- st Z+, r0
123
- ld r21, X+
124
- ld r0, Z
125
- eor r0, r21
126
- st Z+, r0
127
- ld r21, X+
128
- ld r0, Z
129
- eor r0, r21
130
- st Z+, r0
131
-
132
- subi r18, 8
133
- brcc KeccakP800_AddBytes_Loop8
134
- KeccakP800_AddBytes_Byte:
135
- ldi r19, 8
136
- add r18, r19
137
- breq KeccakP800_AddBytes_End
138
- KeccakP800_AddBytes_Loop1:
139
- ld r21, X+
140
- ld r0, Z
141
- eor r0, r21
142
- st Z+, r0
143
- dec r18
144
- brne KeccakP800_AddBytes_Loop1
145
- KeccakP800_AddBytes_End:
146
- ret
147
-
148
-
149
- ;----------------------------------------------------------------------------
150
- ;
151
- ; void KeccakP800_OverwriteBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
152
- ;
153
- ; argument state is passed in r24:r25
154
- ; argument data is passed in r22:r23
155
- ; argument offset is passed in r20:r21, only LSB (r20) is used
156
- ; argument length is passed in r18:r19, only LSB (r18) is used
157
- ;
158
- .global KeccakP800_OverwriteBytes
159
- KeccakP800_OverwriteBytes:
160
- movw rZ, r24
161
- add rZ, r20
162
- adc rZ+1, zero
163
- movw rX, r22
164
- subi r18, 8
165
- brcs KeccakP800_OverwriteBytes_Byte
166
- ;do 8 bytes per iteration
167
- KeccakP800_OverwriteBytes_Loop8:
168
- ld r0, X+
169
- st Z+, r0
170
- ld r0, X+
171
- st Z+, r0
172
- ld r0, X+
173
- st Z+, r0
174
- ld r0, X+
175
- st Z+, r0
176
- ld r0, X+
177
- st Z+, r0
178
- ld r0, X+
179
- st Z+, r0
180
- ld r0, X+
181
- st Z+, r0
182
- ld r0, X+
183
- st Z+, r0
184
- subi r18, 8
185
- brcc KeccakP800_OverwriteBytes_Loop8
186
- KeccakP800_OverwriteBytes_Byte:
187
- ldi r19, 8
188
- add r18, r19
189
- breq KeccakP800_OverwriteBytes_End
190
- KeccakP800_OverwriteBytes_Loop1:
191
- ld r0, X+
192
- st Z+, r0
193
- dec r18
194
- brne KeccakP800_OverwriteBytes_Loop1
195
- KeccakP800_OverwriteBytes_End:
196
- ret
197
-
198
- ;----------------------------------------------------------------------------
199
- ;
200
- ; void KeccakP800_OverwriteWithZeroes(void *state, unsigned int byteCount)
201
- ;
202
- ; argument state is passed in r24:r25
203
- ; argument byteCount is passed in r22:r23, only LSB (r22) is used
204
- ;
205
- .global KeccakP800_OverwriteWithZeroes
206
- KeccakP800_OverwriteWithZeroes:
207
- movw rZ, r24 ;rZ = state
208
- mov r23, r22
209
- lsr r23
210
- lsr r23
211
- breq KeccakP800_OverwriteWithZeroes_Bytes
212
- KeccakP800_OverwriteWithZeroes_LoopLanes:
213
- st Z+, r1
214
- st Z+, r1
215
- st Z+, r1
216
- st Z+, r1
217
- dec r23
218
- brne KeccakP800_OverwriteWithZeroes_LoopLanes
219
- KeccakP800_OverwriteWithZeroes_Bytes:
220
- andi r22, 3
221
- breq KeccakP800_OverwriteWithZeroes_End
222
- KeccakP800_OverwriteWithZeroes_LoopBytes:
223
- st Z+, r1
224
- dec r22
225
- brne KeccakP800_OverwriteWithZeroes_LoopBytes
226
- KeccakP800_OverwriteWithZeroes_End:
227
- ret
228
-
229
- ;----------------------------------------------------------------------------
230
- ;
231
- ; void KeccakP800_ExtractBytes(void *state, const unsigned char *data, unsigned int offset, unsigned int length)
232
- ;
233
- ; argument state is passed in r24:r25
234
- ; argument data is passed in r22:r23
235
- ; argument offset is passed in r20:r21, only LSB (r20) is used
236
- ; argument length is passed in r18:r19, only LSB (r18) is used
237
- ;
238
- .global KeccakP800_ExtractBytes
239
- KeccakP800_ExtractBytes:
240
- movw rZ, r24
241
- add rZ, r20
242
- adc rZ+1, zero
243
- movw rX, r22
244
- subi r18, 8
245
- brcs KeccakP800_ExtractBytes_Byte
246
- ;do 8 bytes per iteration
247
- KeccakP800_ExtractBytes_Loop8:
248
- ld r0, Z+
249
- st X+, r0
250
- ld r0, Z+
251
- st X+, r0
252
- ld r0, Z+
253
- st X+, r0
254
- ld r0, Z+
255
- st X+, r0
256
- ld r0, Z+
257
- st X+, r0
258
- ld r0, Z+
259
- st X+, r0
260
- ld r0, Z+
261
- st X+, r0
262
- ld r0, Z+
263
- st X+, r0
264
- subi r18, 8
265
- brcc KeccakP800_ExtractBytes_Loop8
266
- KeccakP800_ExtractBytes_Byte:
267
- ldi r19, 8
268
- add r18, r19
269
- breq KeccakP800_ExtractBytes_End
270
- KeccakP800_ExtractBytes_Loop1:
271
- ld r0, Z+
272
- st X+, r0
273
- dec r18
274
- brne KeccakP800_ExtractBytes_Loop1
275
- KeccakP800_ExtractBytes_End:
276
- ret
277
-
278
- ;----------------------------------------------------------------------------
279
- ;
280
- ; void KeccakP800_ExtractAndAddBytes(void *state, const unsigned char *input, unsigned char *output, unsigned int offset, unsigned int length)
281
- ;
282
- ; argument state is passed in r24:r25
283
- ; argument input is passed in r22:r23
284
- ; argument output is passed in r20:r21
285
- ; argument offset is passed in r18:r19, only LSB (r18) is used
286
- ; argument length is passed in r16:r17, only LSB (r16) is used
287
- ;
288
- .global KeccakP800_ExtractAndAddBytes
289
- KeccakP800_ExtractAndAddBytes:
290
- tst r16
291
- breq KeccakP800_ExtractAndAddBytes_End
292
- push r16
293
- push r28
294
- push r29
295
- movw rZ, r24
296
- add rZ, r18
297
- adc rZ+1, zero
298
- movw rX, r22
299
- movw rY, r20
300
- subi r16, 4
301
- brcs KeccakP800_ExtractAndAddBytes_Byte
302
- KeccakP800_ExtractAndAddBytes_LoopLane:
303
- ld r21, Z+
304
- ld r0, X+
305
- eor r0, r21
306
- st Y+, r0
307
- ld r21, Z+
308
- ld r0, X+
309
- eor r0, r21
310
- st Y+, r0
311
- ld r21, Z+
312
- ld r0, X+
313
- eor r0, r21
314
- st Y+, r0
315
- ld r21, Z+
316
- ld r0, X+
317
- eor r0, r21
318
- st Y+, r0
319
- subi r16, 4
320
- brcc KeccakP800_ExtractAndAddBytes_LoopLane
321
- KeccakP800_ExtractAndAddBytes_Byte:
322
- ldi r19, 4
323
- add r16, r19
324
- breq KeccakP800_ExtractAndAddBytes_Done
325
- KeccakP800_ExtractAndAddBytes_Loop1:
326
- ld r21, Z+
327
- ld r0, X+
328
- eor r0, r21
329
- st Y+, r0
330
- dec r16
331
- brne KeccakP800_ExtractAndAddBytes_Loop1
332
- KeccakP800_ExtractAndAddBytes_Done:
333
- pop r29
334
- pop r28
335
- pop r16
336
- KeccakP800_ExtractAndAddBytes_End:
337
- ret
338
-
339
-
340
- #define ROT_BIT(a) ((a) & 7)
341
- #define ROT_BYTE(a) ((((a)/8 + !!(((a)%8) > 4)) & 3) * 5)
342
-
343
- KeccakP800_RhoPiConstants:
344
- .BYTE ROT_BIT( 1), ROT_BYTE( 3), 10 * 4
345
- .BYTE ROT_BIT( 3), ROT_BYTE( 6), 7 * 4
346
- .BYTE ROT_BIT( 6), ROT_BYTE(10), 11 * 4
347
- .BYTE ROT_BIT(10), ROT_BYTE(15), 17 * 4
348
- .BYTE ROT_BIT(15), ROT_BYTE(21), 18 * 4
349
- .BYTE ROT_BIT(21), ROT_BYTE(28), 3 * 4
350
- .BYTE ROT_BIT(28), ROT_BYTE(36), 5 * 4
351
- .BYTE ROT_BIT(36), ROT_BYTE(45), 16 * 4
352
- .BYTE ROT_BIT(45), ROT_BYTE(55), 8 * 4
353
- .BYTE ROT_BIT(55), ROT_BYTE( 2), 21 * 4
354
- .BYTE ROT_BIT( 2), ROT_BYTE(14), 24 * 4
355
- .BYTE ROT_BIT(14), ROT_BYTE(27), 4 * 4
356
- .BYTE ROT_BIT(27), ROT_BYTE(41), 15 * 4
357
- .BYTE ROT_BIT(41), ROT_BYTE(56), 23 * 4
358
- .BYTE ROT_BIT(56), ROT_BYTE( 8), 19 * 4
359
- .BYTE ROT_BIT( 8), ROT_BYTE(25), 13 * 4
360
- .BYTE ROT_BIT(25), ROT_BYTE(43), 12 * 4
361
- .BYTE ROT_BIT(43), ROT_BYTE(62), 2 * 4
362
- .BYTE ROT_BIT(62), ROT_BYTE(18), 20 * 4
363
- .BYTE ROT_BIT(18), ROT_BYTE(39), 14 * 4
364
- .BYTE ROT_BIT(39), ROT_BYTE(61), 22 * 4
365
- .BYTE ROT_BIT(61), ROT_BYTE(20), 9 * 4
366
- .BYTE ROT_BIT(20), ROT_BYTE(44), 6 * 4
367
- .BYTE ROT_BIT(44), ROT_BYTE( 1), 1 * 4
368
-
369
- KeccakP800_RoundConstants_22:
370
- .BYTE 0x01, 0x00, 0x00, 0x00
371
- .BYTE 0x82, 0x80, 0x00, 0x00
372
- .BYTE 0x8a, 0x80, 0x00, 0x00
373
- .BYTE 0x00, 0x80, 0x00, 0x80
374
- .BYTE 0x8b, 0x80, 0x00, 0x00
375
- .BYTE 0x01, 0x00, 0x00, 0x80
376
- .BYTE 0x81, 0x80, 0x00, 0x80
377
- .BYTE 0x09, 0x80, 0x00, 0x00
378
- .BYTE 0x8a, 0x00, 0x00, 0x00
379
- .BYTE 0x88, 0x00, 0x00, 0x00
380
- KeccakP800_RoundConstants_12:
381
- .BYTE 0x09, 0x80, 0x00, 0x80
382
- .BYTE 0x0a, 0x00, 0x00, 0x80
383
- .BYTE 0x8b, 0x80, 0x00, 0x80
384
- .BYTE 0x8b, 0x00, 0x00, 0x00
385
- .BYTE 0x89, 0x80, 0x00, 0x00
386
- .BYTE 0x03, 0x80, 0x00, 0x00
387
- .BYTE 0x02, 0x80, 0x00, 0x00
388
- .BYTE 0x80, 0x00, 0x00, 0x00
389
- .BYTE 0x0a, 0x80, 0x00, 0x00
390
- .BYTE 0x0a, 0x00, 0x00, 0x80
391
- .BYTE 0x81, 0x80, 0x00, 0x80
392
- .BYTE 0x80, 0x80, 0x00, 0x00
393
- KeccakP800_RoundConstants_0:
394
- .BYTE 0xFF, 0 ; terminator
395
-
396
- .text
397
-
398
- #define pRound 22 // 2 regs (22-23)
399
-
400
- ;----------------------------------------------------------------------------
401
- ;
402
- ; void KeccakP800_Permute_Nrounds( void *state, unsigned int nrounds )
403
- ;
404
- ; argument state is passed in r24:r25
405
- ; argument nrounds is passed in r22:r23 (only LSB (r22) is used)
406
- ;
407
- .global KeccakP800_Permute_Nrounds
408
- KeccakP800_Permute_Nrounds:
409
- mov r26, r22
410
- ldi pRound, lo8(KeccakP800_RoundConstants_0)
411
- ldi pRound+1, hi8(KeccakP800_RoundConstants_0)
412
- lsl r26
413
- lsl r26
414
- sub pRound, r26
415
- sbc pRound+1, zero
416
- rjmp KeccakP800_Permute
417
-
418
- ;----------------------------------------------------------------------------
419
- ;
420
- ; void KeccakP800_Permute_22rounds( void *state )
421
- ;
422
- .global KeccakP800_Permute_22rounds
423
- KeccakP800_Permute_22rounds:
424
- ldi pRound, lo8(KeccakP800_RoundConstants_22)
425
- ldi pRound+1, hi8(KeccakP800_RoundConstants_22)
426
- rjmp KeccakP800_Permute
427
-
428
- ;----------------------------------------------------------------------------
429
- ;
430
- ; void KeccakP800_Permute_12rounds( void *state )
431
- ;
432
- .global KeccakP800_Permute_12rounds
433
- KeccakP800_Permute_12rounds:
434
- ldi pRound, lo8(KeccakP800_RoundConstants_12)
435
- ldi pRound+1, hi8(KeccakP800_RoundConstants_12)
436
- KeccakP800_Permute:
437
- push r2
438
- push r3
439
- push r4
440
- push r5
441
- push r6
442
- push r7
443
- push r8
444
- push r9
445
- push r10
446
- push r11
447
- push r12
448
- push r13
449
- push r14
450
- push r15
451
- push r16
452
- push r17
453
- push r28
454
- push r29
455
-
456
- ; Allocate C variables (5*4)
457
- in rZ, sp
458
- in rZ+1, sp+1
459
- sbiw rZ, 5*4
460
- in r0, 0x3F
461
- cli
462
- out sp+1, rZ+1
463
- out sp, rZ ; Z points to 5 C lanes
464
- out 0x3F, r0
465
-
466
- ; Variables used in multiple operations
467
- #define rTemp 2 // 8 regs (2-9)
468
- #define rTempBis 10 // 8 regs (10-17)
469
- #define rTempTer 18 // 4 regs (18-21)
470
- #define pRound 22 // 2 regs (22-23)
471
-
472
- ; Initial Prepare Theta
473
- #define TCIPx rTempTer
474
-
475
- ldi TCIPx, 5
476
- movw rY, rpState
477
- KeccakInitialPrepTheta_Loop:
478
- ld rTemp+0, Y+ ;state[x]
479
- ld rTemp+1, Y+
480
- ld rTemp+2, Y+
481
- ld rTemp+3, Y+
482
-
483
- adiw rY, 16
484
- ld r0, Y+ ;state[5+x]
485
- eor rTemp+0, r0
486
- ld r0, Y+
487
- eor rTemp+1, r0
488
- ld r0, Y+
489
- eor rTemp+2, r0
490
- ld r0, Y+
491
- eor rTemp+3, r0
492
-
493
- adiw rY, 16
494
- ld r0, Y+ ;state[10+x]
495
- eor rTemp+0, r0
496
- ld r0, Y+
497
- eor rTemp+1, r0
498
- ld r0, Y+
499
- eor rTemp+2, r0
500
- ld r0, Y+
501
- eor rTemp+3, r0
502
-
503
- adiw rY, 16
504
- ld r0, Y+ ;state[15+x]
505
- eor rTemp+0, r0
506
- ld r0, Y+
507
- eor rTemp+1, r0
508
- ld r0, Y+
509
- eor rTemp+2, r0
510
- ld r0, Y+
511
- eor rTemp+3, r0
512
-
513
- adiw rY, 16
514
- ld r0, Y+ ;state[20+x]
515
- eor rTemp+0, r0
516
- ld r0, Y+
517
- eor rTemp+1, r0
518
- ld r0, Y+
519
- eor rTemp+2, r0
520
- ld r0, Y+
521
- eor rTemp+3, r0
522
-
523
- st Z+, rTemp+0
524
- st Z+, rTemp+1
525
- st Z+, rTemp+2
526
- st Z+, rTemp+3
527
-
528
- subi rY, 80
529
- sbc rY+1, zero
530
-
531
- subi TCIPx, 1
532
- brne KeccakInitialPrepTheta_Loop
533
- #undef TCIPx
534
-
535
- Keccak_RoundLoop:
536
-
537
- ; Theta
538
- #define TCplus rX
539
- #define TCminus rZ
540
- #define TCcoordX rTempTer
541
- #define TCcoordY rTempTer+1
542
-
543
- in TCminus, sp
544
- in TCminus+1, sp+1
545
- movw TCplus, TCminus
546
- adiw TCminus, 4*4
547
- adiw TCplus, 1*4
548
- movw rY, rpState
549
-
550
- ldi TCcoordX, 0x16
551
- KeccakTheta_Loop1:
552
- ld rTemp+0, X+
553
- ld rTemp+1, X+
554
- ld rTemp+2, X+
555
- ld rTemp+3, X+
556
-
557
- lsl rTemp+0
558
- rol rTemp+1
559
- rol rTemp+2
560
- rol rTemp+3
561
- adc rTemp+0, zero
562
-
563
- ld r0, Z+
564
- eor rTemp+0, r0
565
- ld r0, Z+
566
- eor rTemp+1, r0
567
- ld r0, Z+
568
- eor rTemp+2, r0
569
- ld r0, Z+
570
- eor rTemp+3, r0
571
-
572
- ldi TCcoordY, 5
573
- KeccakTheta_Loop2:
574
- ld r0, Y
575
- eor r0, rTemp+0
576
- st Y+, r0
577
- ld r0, Y
578
- eor r0, rTemp+1
579
- st Y+, r0
580
- ld r0, Y
581
- eor r0, rTemp+2
582
- st Y+, r0
583
- ld r0, Y
584
- eor r0, rTemp+3
585
- st Y+, r0
586
- adiw rY, 16
587
-
588
- dec TCcoordY
589
- brne KeccakTheta_Loop2
590
-
591
- subi rY, 100-4
592
- sbc rY+1, zero
593
-
594
- lsr TCcoordX
595
- brcc 1f
596
- brne KeccakTheta_Loop1
597
- rjmp KeccakTheta_End
598
- 1:
599
- cpi TCcoordX, 0x0B
600
- brne 2f
601
- sbiw TCminus, 20
602
- rjmp KeccakTheta_Loop1
603
- 2:
604
- sbiw TCplus, 20
605
- rjmp KeccakTheta_Loop1
606
-
607
- KeccakTheta_End:
608
- #undef TCplus
609
- #undef TCminus
610
- #undef TCcoordX
611
- #undef TCcoordY
612
-
613
- ; Rho Pi
614
- #define RPpConst rTempTer // 2 regs
615
- #define RPindex rTempTer+2
616
- #define RPpBitRot rX
617
- #define RPpByteRot pRound
618
-
619
- sbiw rY, 16
620
-
621
- ld rTemp+0, Y+
622
- ld rTemp+1, Y+
623
- ld rTemp+2, Y+
624
- ld rTemp+3, Y+
625
-
626
- push pRound
627
- push pRound+1
628
- ldi RPpConst, lo8(KeccakP800_RhoPiConstants)
629
- ldi RPpConst+1, hi8(KeccakP800_RhoPiConstants)
630
- ldi RPpBitRot, pm_lo8(bit_rot_jmp_table)
631
- ldi RPpBitRot+1, pm_hi8(bit_rot_jmp_table)
632
- ldi RPpByteRot, pm_lo8(rotate32_0byte_left)
633
- ldi RPpByteRot+1, pm_hi8(rotate32_0byte_left)
634
-
635
- KeccakRhoPi_Loop:
636
- ; get rotation codes and state index
637
- movw rZ, RPpConst
638
- lpm r0, Z+ ;bits
639
- lpm rTempBis, Z+ ;bytes
640
- lpm RPindex, Z+
641
- movw RPpConst, rZ
642
-
643
- ; do bit rotation
644
- movw rZ, RPpBitRot
645
- add rZ, r0
646
- adc rZ+1, zero
647
- ijmp
648
-
649
- KeccakRhoPi_RhoBitRotateDone:
650
- movw rY, rpState
651
- add rY, RPindex
652
- adc rY+1, zero
653
-
654
- movw rZ, RPpByteRot
655
- add rZ, rTempBis
656
- adc rZ+1, zero
657
- ijmp
658
-
659
- KeccakRhoPi_PiStore:
660
- sbiw rY, 4
661
- st Y+, rTemp+0
662
- st Y+, rTemp+1
663
- st Y+, rTemp+2
664
- st Y+, rTemp+3
665
-
666
- movw rTemp+0, rTempBis+0
667
- movw rTemp+2, rTempBis+2
668
- KeccakRhoPi_RhoDone:
669
- subi RPindex, 4
670
- brne KeccakRhoPi_Loop
671
- pop pRound+1
672
- pop pRound
673
-
674
- #undef RPpConst
675
- #undef RPindex
676
- #undef RPpBitrot
677
- #undef RPpByteRot
678
-
679
-
680
- ; Chi Iota prepare Theta
681
- #define CIPTa0 rTemp
682
- #define CIPTa1 rTemp+1
683
- #define CIPTa2 rTemp+2
684
- #define CIPTa3 rTemp+3
685
- #define CIPTa4 rTemp+4
686
- #define CIPTc0 rTempBis
687
- #define CIPTc1 rTempBis+1
688
- #define CIPTc2 rTempBis+2
689
- #define CIPTc3 rTempBis+3
690
- #define CIPTc4 rTempBis+4
691
- #define CIPTz rTempBis+6
692
- #define CIPTy rTempBis+7
693
-
694
- in rX, sp ; 5 * C
695
- in rX+1, sp+1
696
- movw rY, rpState
697
- movw rZ, pRound
698
-
699
- ldi CIPTz, 4
700
- KeccakChiIotaPrepareTheta_zLoop:
701
- mov CIPTc0, zero
702
- mov CIPTc1, zero
703
- movw CIPTc2, CIPTc0
704
- mov CIPTc4, zero
705
-
706
- ldi CIPTy, 5
707
- KeccakChiIotaPrepareTheta_yLoop:
708
- ld CIPTa0, Y
709
- ldd CIPTa1, Y+4
710
- ldd CIPTa2, Y+8
711
- ldd CIPTa3, Y+12
712
- ldd CIPTa4, Y+16
713
-
714
- ;*p = t = a0 ^ ((~a1) & a2); c0 ^= t;
715
- mov r0, CIPTa1
716
- com r0
717
- and r0, CIPTa2
718
- eor r0, CIPTa0
719
- eor CIPTc0, r0
720
- st Y, r0
721
-
722
- ;*(p+4) = t = a1 ^ ((~a2) & a3); c1 ^= t;
723
- mov r0, CIPTa2
724
- com r0
725
- and r0, CIPTa3
726
- eor r0, CIPTa1
727
- eor CIPTc1, r0
728
- std Y+4, r0
729
-
730
- ;*(p+8) = a2 ^= ((~a3) & a4); c2 ^= a2;
731
- mov r0, CIPTa3
732
- com r0
733
- and r0, CIPTa4
734
- eor r0, CIPTa2
735
- eor CIPTc2, r0
736
- std Y+8, r0
737
-
738
- ;*(p+12) = a3 ^= ((~a4) & a0); c3 ^= a3;
739
- mov r0, CIPTa4
740
- com r0
741
- and r0, CIPTa0
742
- eor r0, CIPTa3
743
- eor CIPTc3, r0
744
- std Y+12, r0
745
-
746
- ;*(p+16) = a4 ^= ((~a0) & a1); c4 ^= a4;
747
- com CIPTa0
748
- and CIPTa0, CIPTa1
749
- eor CIPTa0, CIPTa4
750
- eor CIPTc4, CIPTa0
751
- std Y+16, CIPTa0
752
-
753
- adiw rY, 20
754
- dec CIPTy
755
- brne KeccakChiIotaPrepareTheta_yLoop
756
-
757
- subi rY, 100
758
- sbc rY+1, zero
759
-
760
- lpm r0, Z+ ;Round Constant
761
- ld CIPTa0, Y
762
- eor CIPTa0, r0
763
- st Y+, CIPTa0
764
-
765
- movw pRound, rZ
766
- movw rZ, rX
767
- eor CIPTc0, r0
768
- st Z+, CIPTc0
769
- std Z+3, CIPTc1
770
- std Z+7, CIPTc2
771
- std Z+11, CIPTc3
772
- std Z+15, CIPTc4
773
- movw rX, rZ
774
- movw rZ, pRound
775
-
776
- dec CIPTz
777
- brne KeccakChiIotaPrepareTheta_zLoop
778
-
779
- #undef CIPTa0
780
- #undef CIPTa1
781
- #undef CIPTa2
782
- #undef CIPTa3
783
- #undef CIPTa4
784
- #undef CIPTc0
785
- #undef CIPTc1
786
- #undef CIPTc2
787
- #undef CIPTc3
788
- #undef CIPTc4
789
- #undef CIPTz
790
- #undef CIPTy
791
-
792
- ;Check for terminator
793
- lpm r0, Z
794
- inc r0
795
- breq Keccak_Done
796
- rjmp Keccak_RoundLoop
797
- Keccak_Done:
798
-
799
- ; Free C(on stack) and registers
800
- in rX, sp ; free 5 C lanes
801
- in rX+1, sp+1
802
- adiw rX, 5*4
803
- in r0, 0x3F
804
- cli
805
- out sp+1, rX+1
806
- out sp, rX
807
- out 0x3F, r0
808
-
809
- pop r29
810
- pop r28
811
- pop r17
812
- pop r16
813
- pop r15
814
- pop r14
815
- pop r13
816
- pop r12
817
- pop r11
818
- pop r10
819
- pop r9
820
- pop r8
821
- pop r7
822
- pop r6
823
- pop r5
824
- pop r4
825
- pop r3
826
- pop r2
827
- ret
828
-
829
- bit_rot_jmp_table:
830
- rjmp KeccakRhoPi_RhoBitRotateDone
831
- rjmp rotate32_1bit_left
832
- rjmp rotate32_2bit_left
833
- rjmp rotate32_3bit_left
834
- rjmp rotate32_4bit_left
835
- rjmp rotate32_3bit_right
836
- rjmp rotate32_2bit_right
837
- rjmp rotate32_1bit_right
838
-
839
- rotate32_4bit_left:
840
- lsl rTemp
841
- rol rTemp+1
842
- rol rTemp+2
843
- rol rTemp+3
844
- adc rTemp, r1
845
- rotate32_3bit_left:
846
- lsl rTemp
847
- rol rTemp+1
848
- rol rTemp+2
849
- rol rTemp+3
850
- adc rTemp, r1
851
- rotate32_2bit_left:
852
- lsl rTemp
853
- rol rTemp+1
854
- rol rTemp+2
855
- rol rTemp+3
856
- adc rTemp, r1
857
- rotate32_1bit_left:
858
- lsl rTemp
859
- rol rTemp+1
860
- rol rTemp+2
861
- rol rTemp+3
862
- adc rTemp, r1
863
- rjmp KeccakRhoPi_RhoBitRotateDone
864
-
865
- rotate32_3bit_right:
866
- bst rTemp, 0
867
- ror rTemp+3
868
- ror rTemp+2
869
- ror rTemp+1
870
- ror rTemp
871
- bld rTemp+3, 7
872
- rotate32_2bit_right:
873
- bst rTemp, 0
874
- ror rTemp+3
875
- ror rTemp+2
876
- ror rTemp+1
877
- ror rTemp
878
- bld rTemp+3, 7
879
- rotate32_1bit_right:
880
- bst rTemp, 0
881
- ror rTemp+3
882
- ror rTemp+2
883
- ror rTemp+1
884
- ror rTemp
885
- bld rTemp+3, 7
886
- rjmp KeccakRhoPi_RhoBitRotateDone
887
-
888
-
889
- ; Each byte rotate routine must be 5 instructions long.
890
-
891
- rotate32_0byte_left:
892
- ld rTempBis+0, Y+
893
- ld rTempBis+1, Y+
894
- ld rTempBis+2, Y+
895
- ld rTempBis+3, Y+
896
- rjmp KeccakRhoPi_PiStore
897
-
898
- rotate32_1byte_left:
899
- ld rTempBis+1, Y+
900
- ld rTempBis+2, Y+
901
- ld rTempBis+3, Y+
902
- ld rTempBis+0, Y+
903
- rjmp KeccakRhoPi_PiStore
904
-
905
- rotate32_2byte_left:
906
- ld rTempBis+2, Y+
907
- ld rTempBis+3, Y+
908
- ld rTempBis+0, Y+
909
- ld rTempBis+1, Y+
910
- rjmp KeccakRhoPi_PiStore
911
-
912
- rotate32_3byte_left:
913
- ld rTempBis+3, Y+
914
- ld rTempBis+0, Y+
915
- ld rTempBis+1, Y+
916
- ld rTempBis+2, Y+
917
- rjmp KeccakRhoPi_PiStore
918
-
919
- #undef rTemp
920
- #undef rTempBis
921
- #undef rTempTer
922
- #undef pRound
923
-
924
- #undef rpState
925
- #undef zero
926
- #undef rX
927
- #undef rY
928
- #undef rZ
929
- #undef sp