< Summary

Line coverage
100%
Covered lines: 485
Uncovered lines: 0
Coverable lines: 485
Total lines: 651
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
File 1: sc_clamp(...)100%1100%
File 2: load_3(...)100%1100%
File 2: load_4(...)100%1100%
File 2: sc_muladd(...)100%1100%
File 3: sc_reduce(...)100%1100%

File(s)

\home\appveyor\projects\ssh-net\src\Renci.SshNet\Security\Chaos.NaCl\Internal\Ed25519Ref10\sc_clamp.cs

#LineLine coverage
 1using System;
 2
 3namespace Renci.SshNet.Security.Chaos.NaCl.Internal.Ed25519Ref10
 4{
 5    internal static partial class ScalarOperations
 6    {
 7        internal static void sc_clamp(byte[] s, int offset)
 23528        {
 23529            s[offset + 0] &= 248;
 235210            s[offset + 31] &= 127;
 235211            s[offset + 31] |= 64;
 235212        }
 13    }
 14}

\home\appveyor\projects\ssh-net\src\Renci.SshNet\Security\Chaos.NaCl\Internal\Ed25519Ref10\sc_mul_add.cs

#LineLine coverage
 1using System;
 2
 3namespace Renci.SshNet.Security.Chaos.NaCl.Internal.Ed25519Ref10
 4{
 5    internal static partial class ScalarOperations
 6    {
 7        static Int64 load_3(byte[] input, int offset)
 738        {
 9            Int64 result;
 7310            result = (Int64)input[offset + 0];
 7311            result |= ((Int64)input[offset + 1]) << 8;
 7312            result |= ((Int64)input[offset + 2]) << 16;
 7313            return result;
 7314        }
 15
 16        static Int64 load_4(byte[] input, int offset)
 8317        {
 18            Int64 result;
 8319            result = (Int64)input[offset + 0];
 8320            result |= ((Int64)input[offset + 1]) << 8;
 8321            result |= ((Int64)input[offset + 2]) << 16;
 8322            result |= ((Int64)input[offset + 3]) << 24;
 8323            return result;
 8324        }
 25
 26        /*
 27        Input:
 28          a[0]+256*a[1]+...+256^31*a[31] = a
 29          b[0]+256*b[1]+...+256^31*b[31] = b
 30          c[0]+256*c[1]+...+256^31*c[31] = c
 31
 32        Output:
 33          s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l
 34          where l = 2^252 + 27742317777372353535851937790883648493.
 35        */
 36
 37        internal static void sc_muladd(byte[] s, byte[] a, byte[] b, byte[] c)
 138        {
 139            Int64 a0 = 2097151 & load_3(a, 0);
 140            Int64 a1 = 2097151 & (load_4(a, 2) >> 5);
 141            Int64 a2 = 2097151 & (load_3(a, 5) >> 2);
 142            Int64 a3 = 2097151 & (load_4(a, 7) >> 7);
 143            Int64 a4 = 2097151 & (load_4(a, 10) >> 4);
 144            Int64 a5 = 2097151 & (load_3(a, 13) >> 1);
 145            Int64 a6 = 2097151 & (load_4(a, 15) >> 6);
 146            Int64 a7 = 2097151 & (load_3(a, 18) >> 3);
 147            Int64 a8 = 2097151 & load_3(a, 21);
 148            Int64 a9 = 2097151 & (load_4(a, 23) >> 5);
 149            Int64 a10 = 2097151 & (load_3(a, 26) >> 2);
 150            Int64 a11 = (load_4(a, 28) >> 7);
 151            Int64 b0 = 2097151 & load_3(b, 0);
 152            Int64 b1 = 2097151 & (load_4(b, 2) >> 5);
 153            Int64 b2 = 2097151 & (load_3(b, 5) >> 2);
 154            Int64 b3 = 2097151 & (load_4(b, 7) >> 7);
 155            Int64 b4 = 2097151 & (load_4(b, 10) >> 4);
 156            Int64 b5 = 2097151 & (load_3(b, 13) >> 1);
 157            Int64 b6 = 2097151 & (load_4(b, 15) >> 6);
 158            Int64 b7 = 2097151 & (load_3(b, 18) >> 3);
 159            Int64 b8 = 2097151 & load_3(b, 21);
 160            Int64 b9 = 2097151 & (load_4(b, 23) >> 5);
 161            Int64 b10 = 2097151 & (load_3(b, 26) >> 2);
 162            Int64 b11 = (load_4(b, 28) >> 7);
 163            Int64 c0 = 2097151 & load_3(c, 0);
 164            Int64 c1 = 2097151 & (load_4(c, 2) >> 5);
 165            Int64 c2 = 2097151 & (load_3(c, 5) >> 2);
 166            Int64 c3 = 2097151 & (load_4(c, 7) >> 7);
 167            Int64 c4 = 2097151 & (load_4(c, 10) >> 4);
 168            Int64 c5 = 2097151 & (load_3(c, 13) >> 1);
 169            Int64 c6 = 2097151 & (load_4(c, 15) >> 6);
 170            Int64 c7 = 2097151 & (load_3(c, 18) >> 3);
 171            Int64 c8 = 2097151 & load_3(c, 21);
 172            Int64 c9 = 2097151 & (load_4(c, 23) >> 5);
 173            Int64 c10 = 2097151 & (load_3(c, 26) >> 2);
 174            Int64 c11 = (load_4(c, 28) >> 7);
 75            Int64 s0;
 76            Int64 s1;
 77            Int64 s2;
 78            Int64 s3;
 79            Int64 s4;
 80            Int64 s5;
 81            Int64 s6;
 82            Int64 s7;
 83            Int64 s8;
 84            Int64 s9;
 85            Int64 s10;
 86            Int64 s11;
 87            Int64 s12;
 88            Int64 s13;
 89            Int64 s14;
 90            Int64 s15;
 91            Int64 s16;
 92            Int64 s17;
 93            Int64 s18;
 94            Int64 s19;
 95            Int64 s20;
 96            Int64 s21;
 97            Int64 s22;
 98            Int64 s23;
 99            Int64 carry0;
 100            Int64 carry1;
 101            Int64 carry2;
 102            Int64 carry3;
 103            Int64 carry4;
 104            Int64 carry5;
 105            Int64 carry6;
 106            Int64 carry7;
 107            Int64 carry8;
 108            Int64 carry9;
 109            Int64 carry10;
 110            Int64 carry11;
 111            Int64 carry12;
 112            Int64 carry13;
 113            Int64 carry14;
 114            Int64 carry15;
 115            Int64 carry16;
 116            Int64 carry17;
 117            Int64 carry18;
 118            Int64 carry19;
 119            Int64 carry20;
 120            Int64 carry21;
 121            Int64 carry22;
 122
 1123            s0 = c0 + a0 * b0;
 1124            s1 = c1 + a0 * b1 + a1 * b0;
 1125            s2 = c2 + a0 * b2 + a1 * b1 + a2 * b0;
 1126            s3 = c3 + a0 * b3 + a1 * b2 + a2 * b1 + a3 * b0;
 1127            s4 = c4 + a0 * b4 + a1 * b3 + a2 * b2 + a3 * b1 + a4 * b0;
 1128            s5 = c5 + a0 * b5 + a1 * b4 + a2 * b3 + a3 * b2 + a4 * b1 + a5 * b0;
 1129            s6 = c6 + a0 * b6 + a1 * b5 + a2 * b4 + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0;
 1130            s7 = c7 + a0 * b7 + a1 * b6 + a2 * b5 + a3 * b4 + a4 * b3 + a5 * b2 + a6 * b1 + a7 * b0;
 1131            s8 = c8 + a0 * b8 + a1 * b7 + a2 * b6 + a3 * b5 + a4 * b4 + a5 * b3 + a6 * b2 + a7 * b1 + a8 * b0;
 1132            s9 = c9 + a0 * b9 + a1 * b8 + a2 * b7 + a3 * b6 + a4 * b5 + a5 * b4 + a6 * b3 + a7 * b2 + a8 * b1 + a9 * b0;
 1133            s10 = c10 + a0 * b10 + a1 * b9 + a2 * b8 + a3 * b7 + a4 * b6 + a5 * b5 + a6 * b4 + a7 * b3 + a8 * b2 + a9 * 
 1134            s11 = c11 + a0 * b11 + a1 * b10 + a2 * b9 + a3 * b8 + a4 * b7 + a5 * b6 + a6 * b5 + a7 * b4 + a8 * b3 + a9 *
 1135            s12 = a1 * b11 + a2 * b10 + a3 * b9 + a4 * b8 + a5 * b7 + a6 * b6 + a7 * b5 + a8 * b4 + a9 * b3 + a10 * b2 +
 1136            s13 = a2 * b11 + a3 * b10 + a4 * b9 + a5 * b8 + a6 * b7 + a7 * b6 + a8 * b5 + a9 * b4 + a10 * b3 + a11 * b2;
 1137            s14 = a3 * b11 + a4 * b10 + a5 * b9 + a6 * b8 + a7 * b7 + a8 * b6 + a9 * b5 + a10 * b4 + a11 * b3;
 1138            s15 = a4 * b11 + a5 * b10 + a6 * b9 + a7 * b8 + a8 * b7 + a9 * b6 + a10 * b5 + a11 * b4;
 1139            s16 = a5 * b11 + a6 * b10 + a7 * b9 + a8 * b8 + a9 * b7 + a10 * b6 + a11 * b5;
 1140            s17 = a6 * b11 + a7 * b10 + a8 * b9 + a9 * b8 + a10 * b7 + a11 * b6;
 1141            s18 = a7 * b11 + a8 * b10 + a9 * b9 + a10 * b8 + a11 * b7;
 1142            s19 = a8 * b11 + a9 * b10 + a10 * b9 + a11 * b8;
 1143            s20 = a9 * b11 + a10 * b10 + a11 * b9;
 1144            s21 = a10 * b11 + a11 * b10;
 1145            s22 = a11 * b11;
 1146            s23 = 0;
 147
 3148            carry0 = (s0 + (1 << 20)) >> 21; s1 += carry0; s0 -= carry0 << 21;
 3149            carry2 = (s2 + (1 << 20)) >> 21; s3 += carry2; s2 -= carry2 << 21;
 3150            carry4 = (s4 + (1 << 20)) >> 21; s5 += carry4; s4 -= carry4 << 21;
 3151            carry6 = (s6 + (1 << 20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
 3152            carry8 = (s8 + (1 << 20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
 3153            carry10 = (s10 + (1 << 20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
 3154            carry12 = (s12 + (1 << 20)) >> 21; s13 += carry12; s12 -= carry12 << 21;
 3155            carry14 = (s14 + (1 << 20)) >> 21; s15 += carry14; s14 -= carry14 << 21;
 3156            carry16 = (s16 + (1 << 20)) >> 21; s17 += carry16; s16 -= carry16 << 21;
 3157            carry18 = (s18 + (1 << 20)) >> 21; s19 += carry18; s18 -= carry18 << 21;
 3158            carry20 = (s20 + (1 << 20)) >> 21; s21 += carry20; s20 -= carry20 << 21;
 3159            carry22 = (s22 + (1 << 20)) >> 21; s23 += carry22; s22 -= carry22 << 21;
 160
 3161            carry1 = (s1 + (1 << 20)) >> 21; s2 += carry1; s1 -= carry1 << 21;
 3162            carry3 = (s3 + (1 << 20)) >> 21; s4 += carry3; s3 -= carry3 << 21;
 3163            carry5 = (s5 + (1 << 20)) >> 21; s6 += carry5; s5 -= carry5 << 21;
 3164            carry7 = (s7 + (1 << 20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
 3165            carry9 = (s9 + (1 << 20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
 3166            carry11 = (s11 + (1 << 20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
 3167            carry13 = (s13 + (1 << 20)) >> 21; s14 += carry13; s13 -= carry13 << 21;
 3168            carry15 = (s15 + (1 << 20)) >> 21; s16 += carry15; s15 -= carry15 << 21;
 3169            carry17 = (s17 + (1 << 20)) >> 21; s18 += carry17; s17 -= carry17 << 21;
 3170            carry19 = (s19 + (1 << 20)) >> 21; s20 += carry19; s19 -= carry19 << 21;
 3171            carry21 = (s21 + (1 << 20)) >> 21; s22 += carry21; s21 -= carry21 << 21;
 172
 1173            s11 += s23 * 666643;
 1174            s12 += s23 * 470296;
 1175            s13 += s23 * 654183;
 1176            s14 -= s23 * 997805;
 1177            s15 += s23 * 136657;
 1178            s16 -= s23 * 683901;
 1179            s23 = 0;
 180
 1181            s10 += s22 * 666643;
 1182            s11 += s22 * 470296;
 1183            s12 += s22 * 654183;
 1184            s13 -= s22 * 997805;
 1185            s14 += s22 * 136657;
 1186            s15 -= s22 * 683901;
 1187            s22 = 0;
 188
 1189            s9 += s21 * 666643;
 1190            s10 += s21 * 470296;
 1191            s11 += s21 * 654183;
 1192            s12 -= s21 * 997805;
 1193            s13 += s21 * 136657;
 1194            s14 -= s21 * 683901;
 1195            s21 = 0;
 196
 1197            s8 += s20 * 666643;
 1198            s9 += s20 * 470296;
 1199            s10 += s20 * 654183;
 1200            s11 -= s20 * 997805;
 1201            s12 += s20 * 136657;
 1202            s13 -= s20 * 683901;
 1203            s20 = 0;
 204
 1205            s7 += s19 * 666643;
 1206            s8 += s19 * 470296;
 1207            s9 += s19 * 654183;
 1208            s10 -= s19 * 997805;
 1209            s11 += s19 * 136657;
 1210            s12 -= s19 * 683901;
 1211            s19 = 0;
 212
 1213            s6 += s18 * 666643;
 1214            s7 += s18 * 470296;
 1215            s8 += s18 * 654183;
 1216            s9 -= s18 * 997805;
 1217            s10 += s18 * 136657;
 1218            s11 -= s18 * 683901;
 1219            s18 = 0;
 220
 3221            carry6 = (s6 + (1 << 20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
 3222            carry8 = (s8 + (1 << 20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
 3223            carry10 = (s10 + (1 << 20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
 3224            carry12 = (s12 + (1 << 20)) >> 21; s13 += carry12; s12 -= carry12 << 21;
 3225            carry14 = (s14 + (1 << 20)) >> 21; s15 += carry14; s14 -= carry14 << 21;
 3226            carry16 = (s16 + (1 << 20)) >> 21; s17 += carry16; s16 -= carry16 << 21;
 227
 3228            carry7 = (s7 + (1 << 20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
 3229            carry9 = (s9 + (1 << 20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
 3230            carry11 = (s11 + (1 << 20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
 3231            carry13 = (s13 + (1 << 20)) >> 21; s14 += carry13; s13 -= carry13 << 21;
 3232            carry15 = (s15 + (1 << 20)) >> 21; s16 += carry15; s15 -= carry15 << 21;
 233
 1234            s5 += s17 * 666643;
 1235            s6 += s17 * 470296;
 1236            s7 += s17 * 654183;
 1237            s8 -= s17 * 997805;
 1238            s9 += s17 * 136657;
 1239            s10 -= s17 * 683901;
 1240            s17 = 0;
 241
 1242            s4 += s16 * 666643;
 1243            s5 += s16 * 470296;
 1244            s6 += s16 * 654183;
 1245            s7 -= s16 * 997805;
 1246            s8 += s16 * 136657;
 1247            s9 -= s16 * 683901;
 1248            s16 = 0;
 249
 1250            s3 += s15 * 666643;
 1251            s4 += s15 * 470296;
 1252            s5 += s15 * 654183;
 1253            s6 -= s15 * 997805;
 1254            s7 += s15 * 136657;
 1255            s8 -= s15 * 683901;
 1256            s15 = 0;
 257
 1258            s2 += s14 * 666643;
 1259            s3 += s14 * 470296;
 1260            s4 += s14 * 654183;
 1261            s5 -= s14 * 997805;
 1262            s6 += s14 * 136657;
 1263            s7 -= s14 * 683901;
 1264            s14 = 0;
 265
 1266            s1 += s13 * 666643;
 1267            s2 += s13 * 470296;
 1268            s3 += s13 * 654183;
 1269            s4 -= s13 * 997805;
 1270            s5 += s13 * 136657;
 1271            s6 -= s13 * 683901;
 1272            s13 = 0;
 273
 1274            s0 += s12 * 666643;
 1275            s1 += s12 * 470296;
 1276            s2 += s12 * 654183;
 1277            s3 -= s12 * 997805;
 1278            s4 += s12 * 136657;
 1279            s5 -= s12 * 683901;
 1280            s12 = 0;
 281
 3282            carry0 = (s0 + (1 << 20)) >> 21; s1 += carry0; s0 -= carry0 << 21;
 3283            carry2 = (s2 + (1 << 20)) >> 21; s3 += carry2; s2 -= carry2 << 21;
 3284            carry4 = (s4 + (1 << 20)) >> 21; s5 += carry4; s4 -= carry4 << 21;
 3285            carry6 = (s6 + (1 << 20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
 3286            carry8 = (s8 + (1 << 20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
 3287            carry10 = (s10 + (1 << 20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
 288
 3289            carry1 = (s1 + (1 << 20)) >> 21; s2 += carry1; s1 -= carry1 << 21;
 3290            carry3 = (s3 + (1 << 20)) >> 21; s4 += carry3; s3 -= carry3 << 21;
 3291            carry5 = (s5 + (1 << 20)) >> 21; s6 += carry5; s5 -= carry5 << 21;
 3292            carry7 = (s7 + (1 << 20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
 3293            carry9 = (s9 + (1 << 20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
 3294            carry11 = (s11 + (1 << 20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
 295
 1296            s0 += s12 * 666643;
 1297            s1 += s12 * 470296;
 1298            s2 += s12 * 654183;
 1299            s3 -= s12 * 997805;
 1300            s4 += s12 * 136657;
 1301            s5 -= s12 * 683901;
 1302            s12 = 0;
 303
 3304            carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
 3305            carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
 3306            carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
 3307            carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
 3308            carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
 3309            carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
 3310            carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
 3311            carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
 3312            carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
 3313            carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
 3314            carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
 3315            carry11 = s11 >> 21; s12 += carry11; s11 -= carry11 << 21;
 316
 1317            s0 += s12 * 666643;
 1318            s1 += s12 * 470296;
 1319            s2 += s12 * 654183;
 1320            s3 -= s12 * 997805;
 1321            s4 += s12 * 136657;
 1322            s5 -= s12 * 683901;
 1323            s12 = 0;
 324
 3325            carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
 3326            carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
 3327            carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
 3328            carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
 3329            carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
 3330            carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
 3331            carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
 3332            carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
 3333            carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
 3334            carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
 3335            carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
 336
 337            unchecked
 1338            {
 1339                s[0] = (byte)(s0 >> 0);
 1340                s[1] = (byte)(s0 >> 8);
 1341                s[2] = (byte)((s0 >> 16) | (s1 << 5));
 1342                s[3] = (byte)(s1 >> 3);
 1343                s[4] = (byte)(s1 >> 11);
 1344                s[5] = (byte)((s1 >> 19) | (s2 << 2));
 1345                s[6] = (byte)(s2 >> 6);
 1346                s[7] = (byte)((s2 >> 14) | (s3 << 7));
 1347                s[8] = (byte)(s3 >> 1);
 1348                s[9] = (byte)(s3 >> 9);
 1349                s[10] = (byte)((s3 >> 17) | (s4 << 4));
 1350                s[11] = (byte)(s4 >> 4);
 1351                s[12] = (byte)(s4 >> 12);
 1352                s[13] = (byte)((s4 >> 20) | (s5 << 1));
 1353                s[14] = (byte)(s5 >> 7);
 1354                s[15] = (byte)((s5 >> 15) | (s6 << 6));
 1355                s[16] = (byte)(s6 >> 2);
 1356                s[17] = (byte)(s6 >> 10);
 1357                s[18] = (byte)((s6 >> 18) | (s7 << 3));
 1358                s[19] = (byte)(s7 >> 5);
 1359                s[20] = (byte)(s7 >> 13);
 1360                s[21] = (byte)(s8 >> 0);
 1361                s[22] = (byte)(s8 >> 8);
 1362                s[23] = (byte)((s8 >> 16) | (s9 << 5));
 1363                s[24] = (byte)(s9 >> 3);
 1364                s[25] = (byte)(s9 >> 11);
 1365                s[26] = (byte)((s9 >> 19) | (s10 << 2));
 1366                s[27] = (byte)(s10 >> 6);
 1367                s[28] = (byte)((s10 >> 14) | (s11 << 7));
 1368                s[29] = (byte)(s11 >> 1);
 1369                s[30] = (byte)(s11 >> 9);
 1370                s[31] = (byte)(s11 >> 17);
 1371            }
 1372        }
 373    }
 374}

\home\appveyor\projects\ssh-net\src\Renci.SshNet\Security\Chaos.NaCl\Internal\Ed25519Ref10\sc_reduce.cs

#LineLine coverage
 1using System;
 2
 3namespace Renci.SshNet.Security.Chaos.NaCl.Internal.Ed25519Ref10
 4{
 5    internal static partial class ScalarOperations
 6    {
 7        /*
 8        Input:
 9          s[0]+256*s[1]+...+256^63*s[63] = s
 10
 11        Output:
 12          s[0]+256*s[1]+...+256^31*s[31] = s mod l
 13          where l = 2^252 + 27742317777372353535851937790883648493.
 14          Overwrites s in place.
 15        */
 16
 17        internal static void sc_reduce(byte[] s)
 518        {
 519            Int64 s0 = 2097151 & load_3(s, 0);
 520            Int64 s1 = 2097151 & (load_4(s, 2) >> 5);
 521            Int64 s2 = 2097151 & (load_3(s, 5) >> 2);
 522            Int64 s3 = 2097151 & (load_4(s, 7) >> 7);
 523            Int64 s4 = 2097151 & (load_4(s, 10) >> 4);
 524            Int64 s5 = 2097151 & (load_3(s, 13) >> 1);
 525            Int64 s6 = 2097151 & (load_4(s, 15) >> 6);
 526            Int64 s7 = 2097151 & (load_3(s, 18) >> 3);
 527            Int64 s8 = 2097151 & load_3(s, 21);
 528            Int64 s9 = 2097151 & (load_4(s, 23) >> 5);
 529            Int64 s10 = 2097151 & (load_3(s, 26) >> 2);
 530            Int64 s11 = 2097151 & (load_4(s, 28) >> 7);
 531            Int64 s12 = 2097151 & (load_4(s, 31) >> 4);
 532            Int64 s13 = 2097151 & (load_3(s, 34) >> 1);
 533            Int64 s14 = 2097151 & (load_4(s, 36) >> 6);
 534            Int64 s15 = 2097151 & (load_3(s, 39) >> 3);
 535            Int64 s16 = 2097151 & load_3(s, 42);
 536            Int64 s17 = 2097151 & (load_4(s, 44) >> 5);
 537            Int64 s18 = 2097151 & (load_3(s, 47) >> 2);
 538            Int64 s19 = 2097151 & (load_4(s, 49) >> 7);
 539            Int64 s20 = 2097151 & (load_4(s, 52) >> 4);
 540            Int64 s21 = 2097151 & (load_3(s, 55) >> 1);
 541            Int64 s22 = 2097151 & (load_4(s, 57) >> 6);
 542            Int64 s23 = (load_4(s, 60) >> 3);
 43            Int64 carry0;
 44            Int64 carry1;
 45            Int64 carry2;
 46            Int64 carry3;
 47            Int64 carry4;
 48            Int64 carry5;
 49            Int64 carry6;
 50            Int64 carry7;
 51            Int64 carry8;
 52            Int64 carry9;
 53            Int64 carry10;
 54            Int64 carry11;
 55            Int64 carry12;
 56            Int64 carry13;
 57            Int64 carry14;
 58            Int64 carry15;
 59            Int64 carry16;
 60
 561            s11 += s23 * 666643;
 562            s12 += s23 * 470296;
 563            s13 += s23 * 654183;
 564            s14 -= s23 * 997805;
 565            s15 += s23 * 136657;
 566            s16 -= s23 * 683901;
 567            s23 = 0;
 68
 569            s10 += s22 * 666643;
 570            s11 += s22 * 470296;
 571            s12 += s22 * 654183;
 572            s13 -= s22 * 997805;
 573            s14 += s22 * 136657;
 574            s15 -= s22 * 683901;
 575            s22 = 0;
 76
 577            s9 += s21 * 666643;
 578            s10 += s21 * 470296;
 579            s11 += s21 * 654183;
 580            s12 -= s21 * 997805;
 581            s13 += s21 * 136657;
 582            s14 -= s21 * 683901;
 583            s21 = 0;
 84
 585            s8 += s20 * 666643;
 586            s9 += s20 * 470296;
 587            s10 += s20 * 654183;
 588            s11 -= s20 * 997805;
 589            s12 += s20 * 136657;
 590            s13 -= s20 * 683901;
 591            s20 = 0;
 92
 593            s7 += s19 * 666643;
 594            s8 += s19 * 470296;
 595            s9 += s19 * 654183;
 596            s10 -= s19 * 997805;
 597            s11 += s19 * 136657;
 598            s12 -= s19 * 683901;
 599            s19 = 0;
 100
 5101            s6 += s18 * 666643;
 5102            s7 += s18 * 470296;
 5103            s8 += s18 * 654183;
 5104            s9 -= s18 * 997805;
 5105            s10 += s18 * 136657;
 5106            s11 -= s18 * 683901;
 5107            s18 = 0;
 108
 15109            carry6 = (s6 + (1 << 20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
 15110            carry8 = (s8 + (1 << 20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
 15111            carry10 = (s10 + (1 << 20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
 15112            carry12 = (s12 + (1 << 20)) >> 21; s13 += carry12; s12 -= carry12 << 21;
 15113            carry14 = (s14 + (1 << 20)) >> 21; s15 += carry14; s14 -= carry14 << 21;
 15114            carry16 = (s16 + (1 << 20)) >> 21; s17 += carry16; s16 -= carry16 << 21;
 115
 15116            carry7 = (s7 + (1 << 20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
 15117            carry9 = (s9 + (1 << 20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
 15118            carry11 = (s11 + (1 << 20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
 15119            carry13 = (s13 + (1 << 20)) >> 21; s14 += carry13; s13 -= carry13 << 21;
 15120            carry15 = (s15 + (1 << 20)) >> 21; s16 += carry15; s15 -= carry15 << 21;
 121
 5122            s5 += s17 * 666643;
 5123            s6 += s17 * 470296;
 5124            s7 += s17 * 654183;
 5125            s8 -= s17 * 997805;
 5126            s9 += s17 * 136657;
 5127            s10 -= s17 * 683901;
 5128            s17 = 0;
 129
 5130            s4 += s16 * 666643;
 5131            s5 += s16 * 470296;
 5132            s6 += s16 * 654183;
 5133            s7 -= s16 * 997805;
 5134            s8 += s16 * 136657;
 5135            s9 -= s16 * 683901;
 5136            s16 = 0;
 137
 5138            s3 += s15 * 666643;
 5139            s4 += s15 * 470296;
 5140            s5 += s15 * 654183;
 5141            s6 -= s15 * 997805;
 5142            s7 += s15 * 136657;
 5143            s8 -= s15 * 683901;
 5144            s15 = 0;
 145
 5146            s2 += s14 * 666643;
 5147            s3 += s14 * 470296;
 5148            s4 += s14 * 654183;
 5149            s5 -= s14 * 997805;
 5150            s6 += s14 * 136657;
 5151            s7 -= s14 * 683901;
 5152            s14 = 0;
 153
 5154            s1 += s13 * 666643;
 5155            s2 += s13 * 470296;
 5156            s3 += s13 * 654183;
 5157            s4 -= s13 * 997805;
 5158            s5 += s13 * 136657;
 5159            s6 -= s13 * 683901;
 5160            s13 = 0;
 161
 5162            s0 += s12 * 666643;
 5163            s1 += s12 * 470296;
 5164            s2 += s12 * 654183;
 5165            s3 -= s12 * 997805;
 5166            s4 += s12 * 136657;
 5167            s5 -= s12 * 683901;
 5168            s12 = 0;
 169
 15170            carry0 = (s0 + (1 << 20)) >> 21; s1 += carry0; s0 -= carry0 << 21;
 15171            carry2 = (s2 + (1 << 20)) >> 21; s3 += carry2; s2 -= carry2 << 21;
 15172            carry4 = (s4 + (1 << 20)) >> 21; s5 += carry4; s4 -= carry4 << 21;
 15173            carry6 = (s6 + (1 << 20)) >> 21; s7 += carry6; s6 -= carry6 << 21;
 15174            carry8 = (s8 + (1 << 20)) >> 21; s9 += carry8; s8 -= carry8 << 21;
 15175            carry10 = (s10 + (1 << 20)) >> 21; s11 += carry10; s10 -= carry10 << 21;
 176
 15177            carry1 = (s1 + (1 << 20)) >> 21; s2 += carry1; s1 -= carry1 << 21;
 15178            carry3 = (s3 + (1 << 20)) >> 21; s4 += carry3; s3 -= carry3 << 21;
 15179            carry5 = (s5 + (1 << 20)) >> 21; s6 += carry5; s5 -= carry5 << 21;
 15180            carry7 = (s7 + (1 << 20)) >> 21; s8 += carry7; s7 -= carry7 << 21;
 15181            carry9 = (s9 + (1 << 20)) >> 21; s10 += carry9; s9 -= carry9 << 21;
 15182            carry11 = (s11 + (1 << 20)) >> 21; s12 += carry11; s11 -= carry11 << 21;
 183
 5184            s0 += s12 * 666643;
 5185            s1 += s12 * 470296;
 5186            s2 += s12 * 654183;
 5187            s3 -= s12 * 997805;
 5188            s4 += s12 * 136657;
 5189            s5 -= s12 * 683901;
 5190            s12 = 0;
 191
 15192            carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
 15193            carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
 15194            carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
 15195            carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
 15196            carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
 15197            carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
 15198            carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
 15199            carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
 15200            carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
 15201            carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
 15202            carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
 15203            carry11 = s11 >> 21; s12 += carry11; s11 -= carry11 << 21;
 204
 5205            s0 += s12 * 666643;
 5206            s1 += s12 * 470296;
 5207            s2 += s12 * 654183;
 5208            s3 -= s12 * 997805;
 5209            s4 += s12 * 136657;
 5210            s5 -= s12 * 683901;
 5211            s12 = 0;
 212
 15213            carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 << 21;
 15214            carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 << 21;
 15215            carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 << 21;
 15216            carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 << 21;
 15217            carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 << 21;
 15218            carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 << 21;
 15219            carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 << 21;
 15220            carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 << 21;
 15221            carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 << 21;
 15222            carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 << 21;
 15223            carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 << 21;
 224
 225            unchecked
 5226            {
 5227                s[0] = (byte)(s0 >> 0);
 5228                s[1] = (byte)(s0 >> 8);
 5229                s[2] = (byte)((s0 >> 16) | (s1 << 5));
 5230                s[3] = (byte)(s1 >> 3);
 5231                s[4] = (byte)(s1 >> 11);
 5232                s[5] = (byte)((s1 >> 19) | (s2 << 2));
 5233                s[6] = (byte)(s2 >> 6);
 5234                s[7] = (byte)((s2 >> 14) | (s3 << 7));
 5235                s[8] = (byte)(s3 >> 1);
 5236                s[9] = (byte)(s3 >> 9);
 5237                s[10] = (byte)((s3 >> 17) | (s4 << 4));
 5238                s[11] = (byte)(s4 >> 4);
 5239                s[12] = (byte)(s4 >> 12);
 5240                s[13] = (byte)((s4 >> 20) | (s5 << 1));
 5241                s[14] = (byte)(s5 >> 7);
 5242                s[15] = (byte)((s5 >> 15) | (s6 << 6));
 5243                s[16] = (byte)(s6 >> 2);
 5244                s[17] = (byte)(s6 >> 10);
 5245                s[18] = (byte)((s6 >> 18) | (s7 << 3));
 5246                s[19] = (byte)(s7 >> 5);
 5247                s[20] = (byte)(s7 >> 13);
 5248                s[21] = (byte)(s8 >> 0);
 5249                s[22] = (byte)(s8 >> 8);
 5250                s[23] = (byte)((s8 >> 16) | (s9 << 5));
 5251                s[24] = (byte)(s9 >> 3);
 5252                s[25] = (byte)(s9 >> 11);
 5253                s[26] = (byte)((s9 >> 19) | (s10 << 2));
 5254                s[27] = (byte)(s10 >> 6);
 5255                s[28] = (byte)((s10 >> 14) | (s11 << 7));
 5256                s[29] = (byte)(s11 >> 1);
 5257                s[30] = (byte)(s11 >> 9);
 5258                s[31] = (byte)(s11 >> 17);
 5259            }
 5260        }
 261
 262    }
 263}