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

Sha512Internal

static class Sha512Internal
namespace Renci.SshNet.Security.Chaos.NaCl.Internal { internal static class Sha512Internal { private static readonly ulong[] K = new ulong[80] { 4794697086780616226, 8158064640168781261, 13096744586834688815, 16840607885511220156, 4131703408338449720, 6480981068601479193, 10538285296894168987, 12329834152419229976, 15566598209576043074, 1334009975649890238, 2608012711638119052, 6128411473006802146, 8268148722764581231, 9286055187155687089, 11230858885718282805, 13951009754708518548, 16472876342353939154, 17275323862435702243, 1135362057144423861, 2597628984639134821, 3308224258029322869, 5365058923640841347, 6679025012923562964, 8573033837759648693, 10970295158949994411, 12119686244451234320, 12683024718118986047, 13788192230050041572, 14330467153632333762, 15395433587784984357, 489312712824947311, 1452737877330783856, 2861767655752347644, 3322285676063803686, 5560940570517711597, 5996557281743188959, 7280758554555802590, 8532644243296465576, 9350256976987008742, 10552545826968843579, 11727347734174303076, 12113106623233404929, 14000437183269869457, 14369950271660146224, 15101387698204529176, 15463397548674623760, 17586052441742319658, 1182934255886127544, 1847814050463011016, 2177327727835720531, 2830643537854262169, 3796741975233480872, 4115178125766777443, 5681478168544905931, 6601373596472566643, 7507060721942968483, 8399075790359081724, 8693463985226723168, 9568029438360202098, 10144078919501101548, 10430055236837252648, 11840083180663258601, 13761210420658862357, 14299343276471374635, 14566680578165727644, 15097957966210449927, 16922976911328602910, 17689382322260857208, 500013540394364858, 748580250866718886, 1242879168328830382, 1977374033974150939, 2944078676154940804, 3659926193048069267, 4368137639120453308, 4836135668995329356, 5532061633213252278, 6448918945643986474, 6902733635092675308, 7801388544844847127 }; internal static void Sha512Init(out Array8<ulong> state) { state.x0 = 7640891576956012808; state.x1 = 13503953896175478587; state.x2 = 4354685564936845355; state.x3 = 11912009170470909681; state.x4 = 5840696475078001361; state.x5 = 11170449401992604703; state.x6 = 2270897969802886507; state.x7 = 6620516959819538809; } internal static void Core(out Array8<ulong> outputState, ref Array8<ulong> inputState, ref Array16<ulong> input) { ulong num = inputState.x0; ulong num2 = inputState.x1; ulong num3 = inputState.x2; ulong num4 = inputState.x3; ulong num5 = inputState.x4; ulong num6 = inputState.x5; ulong num7 = inputState.x6; ulong num8 = inputState.x7; ulong num9 = input.x0; ulong num10 = input.x1; ulong num11 = input.x2; ulong num12 = input.x3; ulong num13 = input.x4; ulong num14 = input.x5; ulong num15 = input.x6; ulong num16 = input.x7; ulong num17 = input.x8; ulong num18 = input.x9; ulong num19 = input.x10; ulong num20 = input.x11; ulong num21 = input.x12; ulong num22 = input.x13; ulong num23 = input.x14; ulong num24 = input.x15; int num25 = 0; while (true) { ulong num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num9; ulong num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num10; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num11; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num12; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num13; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num14; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num15; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num16; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num17; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num18; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num19; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num20; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num21; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num22; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num23; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; num26 = num8 + ((num5 >> 14) ^ (num5 << 50) ^ (num5 >> 18) ^ (num5 << 46) ^ (num5 >> 41) ^ (num5 << 23)) + ((num5 & num6) ^ (~num5 & num7)) + K[num25] + num24; num27 = ((num >> 28) ^ (num << 36) ^ (num >> 34) ^ (num << 30) ^ (num >> 39) ^ (num << 25)) + ((num & num2) ^ (num & num3) ^ (num2 & num3)); num8 = num7; num7 = num6; num6 = num5; num5 = num4 + num26; num4 = num3; num3 = num2; num2 = num; num = num26 + num27; num25++; if (num25 == 80) break; num9 += ((num23 >> 19) ^ (num23 << 45) ^ (num23 >> 61) ^ (num23 << 3) ^ (num23 >> 6)) + num18 + ((num10 >> 1) ^ (num10 << 63) ^ (num10 >> 8) ^ (num10 << 56) ^ (num10 >> 7)); num10 += ((num24 >> 19) ^ (num24 << 45) ^ (num24 >> 61) ^ (num24 << 3) ^ (num24 >> 6)) + num19 + ((num11 >> 1) ^ (num11 << 63) ^ (num11 >> 8) ^ (num11 << 56) ^ (num11 >> 7)); num11 += ((num9 >> 19) ^ (num9 << 45) ^ (num9 >> 61) ^ (num9 << 3) ^ (num9 >> 6)) + num20 + ((num12 >> 1) ^ (num12 << 63) ^ (num12 >> 8) ^ (num12 << 56) ^ (num12 >> 7)); num12 += ((num10 >> 19) ^ (num10 << 45) ^ (num10 >> 61) ^ (num10 << 3) ^ (num10 >> 6)) + num21 + ((num13 >> 1) ^ (num13 << 63) ^ (num13 >> 8) ^ (num13 << 56) ^ (num13 >> 7)); num13 += ((num11 >> 19) ^ (num11 << 45) ^ (num11 >> 61) ^ (num11 << 3) ^ (num11 >> 6)) + num22 + ((num14 >> 1) ^ (num14 << 63) ^ (num14 >> 8) ^ (num14 << 56) ^ (num14 >> 7)); num14 += ((num12 >> 19) ^ (num12 << 45) ^ (num12 >> 61) ^ (num12 << 3) ^ (num12 >> 6)) + num23 + ((num15 >> 1) ^ (num15 << 63) ^ (num15 >> 8) ^ (num15 << 56) ^ (num15 >> 7)); num15 += ((num13 >> 19) ^ (num13 << 45) ^ (num13 >> 61) ^ (num13 << 3) ^ (num13 >> 6)) + num24 + ((num16 >> 1) ^ (num16 << 63) ^ (num16 >> 8) ^ (num16 << 56) ^ (num16 >> 7)); num16 += ((num14 >> 19) ^ (num14 << 45) ^ (num14 >> 61) ^ (num14 << 3) ^ (num14 >> 6)) + num9 + ((num17 >> 1) ^ (num17 << 63) ^ (num17 >> 8) ^ (num17 << 56) ^ (num17 >> 7)); num17 += ((num15 >> 19) ^ (num15 << 45) ^ (num15 >> 61) ^ (num15 << 3) ^ (num15 >> 6)) + num10 + ((num18 >> 1) ^ (num18 << 63) ^ (num18 >> 8) ^ (num18 << 56) ^ (num18 >> 7)); num18 += ((num16 >> 19) ^ (num16 << 45) ^ (num16 >> 61) ^ (num16 << 3) ^ (num16 >> 6)) + num11 + ((num19 >> 1) ^ (num19 << 63) ^ (num19 >> 8) ^ (num19 << 56) ^ (num19 >> 7)); num19 += ((num17 >> 19) ^ (num17 << 45) ^ (num17 >> 61) ^ (num17 << 3) ^ (num17 >> 6)) + num12 + ((num20 >> 1) ^ (num20 << 63) ^ (num20 >> 8) ^ (num20 << 56) ^ (num20 >> 7)); num20 += ((num18 >> 19) ^ (num18 << 45) ^ (num18 >> 61) ^ (num18 << 3) ^ (num18 >> 6)) + num13 + ((num21 >> 1) ^ (num21 << 63) ^ (num21 >> 8) ^ (num21 << 56) ^ (num21 >> 7)); num21 += ((num19 >> 19) ^ (num19 << 45) ^ (num19 >> 61) ^ (num19 << 3) ^ (num19 >> 6)) + num14 + ((num22 >> 1) ^ (num22 << 63) ^ (num22 >> 8) ^ (num22 << 56) ^ (num22 >> 7)); num22 += ((num20 >> 19) ^ (num20 << 45) ^ (num20 >> 61) ^ (num20 << 3) ^ (num20 >> 6)) + num15 + ((num23 >> 1) ^ (num23 << 63) ^ (num23 >> 8) ^ (num23 << 56) ^ (num23 >> 7)); num23 += ((num21 >> 19) ^ (num21 << 45) ^ (num21 >> 61) ^ (num21 << 3) ^ (num21 >> 6)) + num16 + ((num24 >> 1) ^ (num24 << 63) ^ (num24 >> 8) ^ (num24 << 56) ^ (num24 >> 7)); num24 += ((num22 >> 19) ^ (num22 << 45) ^ (num22 >> 61) ^ (num22 << 3) ^ (num22 >> 6)) + num17 + ((num9 >> 1) ^ (num9 << 63) ^ (num9 >> 8) ^ (num9 << 56) ^ (num9 >> 7)); } outputState.x0 = inputState.x0 + num; outputState.x1 = inputState.x1 + num2; outputState.x2 = inputState.x2 + num3; outputState.x3 = inputState.x3 + num4; outputState.x4 = inputState.x4 + num5; outputState.x5 = inputState.x5 + num6; outputState.x6 = inputState.x6 + num7; outputState.x7 = inputState.x7 + num8; } } }