<PackageReference Include="SSH.NET" Version="2020.0.1" />

SalsaCore

static class SalsaCore
namespace Renci.SshNet.Security.Chaos.NaCl.Internal.Salsa { internal static class SalsaCore { internal static void HSalsa(out Array16<uint> output, ref Array16<uint> input, int rounds) { InternalAssert.Assert(rounds % 2 == 0, "Number of salsa rounds must be even"); int num = rounds / 2; uint num2 = input.x0; uint num3 = input.x1; uint num4 = input.x2; uint num5 = input.x3; uint num6 = input.x4; uint num7 = input.x5; uint num8 = input.x6; uint num9 = input.x7; uint num10 = input.x8; uint num11 = input.x9; uint num12 = input.x10; uint num13 = input.x11; uint num14 = input.x12; uint num15 = input.x13; uint num16 = input.x14; uint num17 = input.x15; for (int i = 0; i < num; i++) { uint num18 = num2 + num14; num6 ^= ((num18 << 7) | (num18 >> 25)); num18 = num6 + num2; num10 ^= ((num18 << 9) | (num18 >> 23)); num18 = num10 + num6; num14 ^= ((num18 << 13) | (num18 >> 19)); num18 = num14 + num10; num2 ^= ((num18 << 18) | (num18 >> 14)); num18 = num7 + num3; num11 ^= ((num18 << 7) | (num18 >> 25)); num18 = num11 + num7; num15 ^= ((num18 << 9) | (num18 >> 23)); num18 = num15 + num11; num3 ^= ((num18 << 13) | (num18 >> 19)); num18 = num3 + num15; num7 ^= ((num18 << 18) | (num18 >> 14)); num18 = num12 + num8; num16 ^= ((num18 << 7) | (num18 >> 25)); num18 = num16 + num12; num4 ^= ((num18 << 9) | (num18 >> 23)); num18 = num4 + num16; num8 ^= ((num18 << 13) | (num18 >> 19)); num18 = num8 + num4; num12 ^= ((num18 << 18) | (num18 >> 14)); num18 = num17 + num13; num5 ^= ((num18 << 7) | (num18 >> 25)); num18 = num5 + num17; num9 ^= ((num18 << 9) | (num18 >> 23)); num18 = num9 + num5; num13 ^= ((num18 << 13) | (num18 >> 19)); num18 = num13 + num9; num17 ^= ((num18 << 18) | (num18 >> 14)); num18 = num2 + num5; num3 ^= ((num18 << 7) | (num18 >> 25)); num18 = num3 + num2; num4 ^= ((num18 << 9) | (num18 >> 23)); num18 = num4 + num3; num5 ^= ((num18 << 13) | (num18 >> 19)); num18 = num5 + num4; num2 ^= ((num18 << 18) | (num18 >> 14)); num18 = num7 + num6; num8 ^= ((num18 << 7) | (num18 >> 25)); num18 = num8 + num7; num9 ^= ((num18 << 9) | (num18 >> 23)); num18 = num9 + num8; num6 ^= ((num18 << 13) | (num18 >> 19)); num18 = num6 + num9; num7 ^= ((num18 << 18) | (num18 >> 14)); num18 = num12 + num11; num13 ^= ((num18 << 7) | (num18 >> 25)); num18 = num13 + num12; num10 ^= ((num18 << 9) | (num18 >> 23)); num18 = num10 + num13; num11 ^= ((num18 << 13) | (num18 >> 19)); num18 = num11 + num10; num12 ^= ((num18 << 18) | (num18 >> 14)); num18 = num17 + num16; num14 ^= ((num18 << 7) | (num18 >> 25)); num18 = num14 + num17; num15 ^= ((num18 << 9) | (num18 >> 23)); num18 = num15 + num14; num16 ^= ((num18 << 13) | (num18 >> 19)); num18 = num16 + num15; num17 ^= ((num18 << 18) | (num18 >> 14)); } output.x0 = num2; output.x1 = num3; output.x2 = num4; output.x3 = num5; output.x4 = num6; output.x5 = num7; output.x6 = num8; output.x7 = num9; output.x8 = num10; output.x9 = num11; output.x10 = num12; output.x11 = num13; output.x12 = num14; output.x13 = num15; output.x14 = num16; output.x15 = num17; } internal static void Salsa(out Array16<uint> output, ref Array16<uint> input, int rounds) { HSalsa(out Array16<uint> output2, ref input, rounds); output.x0 = output2.x0 + input.x0; output.x1 = output2.x1 + input.x1; output.x2 = output2.x2 + input.x2; output.x3 = output2.x3 + input.x3; output.x4 = output2.x4 + input.x4; output.x5 = output2.x5 + input.x5; output.x6 = output2.x6 + input.x6; output.x7 = output2.x7 + input.x7; output.x8 = output2.x8 + input.x8; output.x9 = output2.x9 + input.x9; output.x10 = output2.x10 + input.x10; output.x11 = output2.x11 + input.x11; output.x12 = output2.x12 + input.x12; output.x13 = output2.x13 + input.x13; output.x14 = output2.x14 + input.x14; output.x15 = output2.x15 + input.x15; } } }