< Summary

Information
Class: Renci.SshNet.Security.Org.BouncyCastle.Math.Raw.Nat
Assembly: Renci.SshNet
File(s): \home\appveyor\projects\ssh-net\src\Renci.SshNet\Security\BouncyCastle\math\raw\Nat.cs
Line coverage
11%
Covered lines: 108
Uncovered lines: 794
Coverable lines: 902
Total lines: 1153
Line coverage: 11.9%
Branch coverage
12%
Covered branches: 30
Total branches: 244
Branch coverage: 12.2%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
Add(...)100%2100%
Add33At(...)0%20%
Add33At(...)0%20%
Add33To(...)0%20%
Add33To(...)0%20%
AddBothTo(...)0%20%
AddBothTo(...)0%20%
AddDWordAt(...)0%20%
AddDWordAt(...)0%20%
AddDWordTo(...)0%20%
AddDWordTo(...)0%20%
AddTo(...)100%2100%
AddTo(...)0%20%
AddWordAt(...)0%20%
AddWordAt(...)0%20%
AddWordTo(...)0%20%
AddWordTo(...)0%20%
CAdd(...)0%20%
CMov(...)0%20%
CMov(...)0%20%
Copy(...)100%10%
Copy(...)100%1100%
Copy(...)100%10%
Create(...)100%1100%
Create64(...)100%10%
Dec(...)0%40%
Dec(...)0%60%
DecAt(...)0%40%
DecAt(...)0%40%
Eq(...)0%40%
FromBigInteger(...)66.66%692.3%
GetBit(...)0%60%
Gte(...)83.33%690.9%
Inc(...)0%40%
Inc(...)0%60%
IncAt(...)0%40%
IncAt(...)0%40%
IsOne(...)83.33%683.33%
IsZero(...)16.66%641.66%
Mul(...)0%20%
Mul(...)0%20%
Mul(...)0%20%
MulAddTo(...)0%20%
MulAddTo(...)0%20%
Mul31BothAdd(...)0%20%
MulWord(...)0%20%
MulWord(...)0%20%
MulWordAddTo(...)0%20%
MulWordDwordAddAt(...)0%20%
ShiftDownBit(...)100%2100%
ShiftDownBit(...)0%20%
ShiftDownBit(...)0%20%
ShiftDownBit(...)0%20%
ShiftDownBits(...)75%4100%
ShiftDownBits(...)0%40%
ShiftDownBits(...)0%40%
ShiftDownBits(...)0%40%
ShiftDownWord(...)0%20%
ShiftUpBit(...)0%20%
ShiftUpBit(...)0%20%
ShiftUpBit(...)0%20%
ShiftUpBit(...)0%20%
ShiftUpBit64(...)0%20%
ShiftUpBits(...)0%40%
ShiftUpBits(...)0%40%
ShiftUpBits64(...)0%40%
ShiftUpBits(...)0%40%
ShiftUpBits(...)0%40%
ShiftUpBits64(...)0%40%
Square(...)0%40%
Square(...)0%40%
SquareWordAdd(...)0%20%
SquareWordAdd(...)0%20%
Sub(...)0%20%
Sub(...)0%20%
Sub33At(...)0%20%
Sub33At(...)0%20%
Sub33From(...)0%20%
Sub33From(...)0%20%
SubBothFrom(...)0%20%
SubBothFrom(...)0%20%
SubDWordAt(...)0%20%
SubDWordAt(...)0%20%
SubDWordFrom(...)0%20%
SubDWordFrom(...)0%20%
SubFrom(...)100%2100%
SubFrom(...)0%20%
SubWordAt(...)0%20%
SubWordAt(...)0%20%
SubWordFrom(...)0%20%
SubWordFrom(...)0%20%
ToBigInteger(...)100%4100%
Zero(...)0%20%

File(s)

\home\appveyor\projects\ssh-net\src\Renci.SshNet\Security\BouncyCastle\math\raw\Nat.cs

#LineLine coverage
 1using System;
 2using System.Diagnostics;
 3
 4using Renci.SshNet.Security.Org.BouncyCastle.Crypto.Utilities;
 5
 6namespace Renci.SshNet.Security.Org.BouncyCastle.Math.Raw
 7{
 8    internal abstract class Nat
 9    {
 10        private const ulong M = 0xFFFFFFFFUL;
 11
 12        public static uint Add(int len, uint[] x, uint[] y, uint[] z)
 1513        {
 1514            ulong c = 0;
 39215            for (int i = 0; i < len; ++i)
 18116            {
 18117                c += (ulong)x[i] + y[i];
 18118                z[i] = (uint)c;
 18119                c >>= 32;
 18120            }
 1521            return (uint)c;
 1522        }
 23
 24        public static uint Add33At(int len, uint x, uint[] z, int zPos)
 025        {
 026            Debug.Assert(zPos <= (len - 2));
 027            ulong c = (ulong)z[zPos + 0] + x;
 028            z[zPos + 0] = (uint)c;
 029            c >>= 32;
 030            c += (ulong)z[zPos + 1] + 1;
 031            z[zPos + 1] = (uint)c;
 032            c >>= 32;
 033            return c == 0 ? 0 : IncAt(len, z, zPos + 2);
 034        }
 35
 36        public static uint Add33At(int len, uint x, uint[] z, int zOff, int zPos)
 037        {
 038            Debug.Assert(zPos <= (len - 2));
 039            ulong c = (ulong)z[zOff + zPos] + x;
 040            z[zOff + zPos] = (uint)c;
 041            c >>= 32;
 042            c += (ulong)z[zOff + zPos + 1] + 1;
 043            z[zOff + zPos + 1] = (uint)c;
 044            c >>= 32;
 045            return c == 0 ? 0 : IncAt(len, z, zOff, zPos + 2);
 046        }
 47
 48        public static uint Add33To(int len, uint x, uint[] z)
 049        {
 050            ulong c = (ulong)z[0] + x;
 051            z[0] = (uint)c;
 052            c >>= 32;
 053            c += (ulong)z[1] + 1;
 054            z[1] = (uint)c;
 055            c >>= 32;
 056            return c == 0 ? 0 : IncAt(len, z, 2);
 057        }
 58
 59        public static uint Add33To(int len, uint x, uint[] z, int zOff)
 060        {
 061            ulong c = (ulong)z[zOff + 0] + x;
 062            z[zOff + 0] = (uint)c;
 063            c >>= 32;
 064            c += (ulong)z[zOff + 1] + 1;
 065            z[zOff + 1] = (uint)c;
 066            c >>= 32;
 067            return c == 0 ? 0 : IncAt(len, z, zOff, 2);
 068        }
 69
 70        public static uint AddBothTo(int len, uint[] x, uint[] y, uint[] z)
 071        {
 072            ulong c = 0;
 073            for (int i = 0; i < len; ++i)
 074            {
 075                c += (ulong)x[i] + y[i] + z[i];
 076                z[i] = (uint)c;
 077                c >>= 32;
 078            }
 079            return (uint)c;
 080        }
 81
 82        public static uint AddBothTo(int len, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff)
 083        {
 084            ulong c = 0;
 085            for (int i = 0; i < len; ++i)
 086            {
 087                c += (ulong)x[xOff + i] + y[yOff + i] + z[zOff + i];
 088                z[zOff + i] = (uint)c;
 089                c >>= 32;
 090            }
 091            return (uint)c;
 092        }
 93
 94        public static uint AddDWordAt(int len, ulong x, uint[] z, int zPos)
 095        {
 096            Debug.Assert(zPos <= (len - 2));
 097            ulong c = (ulong)z[zPos + 0] + (x & M);
 098            z[zPos + 0] = (uint)c;
 099            c >>= 32;
 0100            c += (ulong)z[zPos + 1] + (x >> 32);
 0101            z[zPos + 1] = (uint)c;
 0102            c >>= 32;
 0103            return c == 0 ? 0 : IncAt(len, z, zPos + 2);
 0104        }
 105
 106        public static uint AddDWordAt(int len, ulong x, uint[] z, int zOff, int zPos)
 0107        {
 0108            Debug.Assert(zPos <= (len - 2));
 0109            ulong c = (ulong)z[zOff + zPos] + (x & M);
 0110            z[zOff + zPos] = (uint)c;
 0111            c >>= 32;
 0112            c += (ulong)z[zOff + zPos + 1] + (x >> 32);
 0113            z[zOff + zPos + 1] = (uint)c;
 0114            c >>= 32;
 0115            return c == 0 ? 0 : IncAt(len, z, zOff, zPos + 2);
 0116        }
 117
 118        public static uint AddDWordTo(int len, ulong x, uint[] z)
 0119        {
 0120            ulong c = (ulong)z[0] + (x & M);
 0121            z[0] = (uint)c;
 0122            c >>= 32;
 0123            c += (ulong)z[1] + (x >> 32);
 0124            z[1] = (uint)c;
 0125            c >>= 32;
 0126            return c == 0 ? 0 : IncAt(len, z, 2);
 0127        }
 128
 129        public static uint AddDWordTo(int len, ulong x, uint[] z, int zOff)
 0130        {
 0131            ulong c = (ulong)z[zOff + 0] + (x & M);
 0132            z[zOff + 0] = (uint)c;
 0133            c >>= 32;
 0134            c += (ulong)z[zOff + 1] + (x >> 32);
 0135            z[zOff + 1] = (uint)c;
 0136            c >>= 32;
 0137            return c == 0 ? 0 : IncAt(len, z, zOff, 2);
 0138        }
 139
 140        public static uint AddTo(int len, uint[] x, uint[] z)
 2759141        {
 2759142            ulong c = 0;
 71716143            for (int i = 0; i < len; ++i)
 33099144            {
 33099145                c += (ulong)x[i] + z[i];
 33099146                z[i] = (uint)c;
 33099147                c >>= 32;
 33099148            }
 2759149            return (uint)c;
 2759150        }
 151
 152        public static uint AddTo(int len, uint[] x, int xOff, uint[] z, int zOff)
 0153        {
 0154            ulong c = 0;
 0155            for (int i = 0; i < len; ++i)
 0156            {
 0157                c += (ulong)x[xOff + i] + z[zOff + i];
 0158                z[zOff + i] = (uint)c;
 0159                c >>= 32;
 0160            }
 0161            return (uint)c;
 0162        }
 163
 164        public static uint AddWordAt(int len, uint x, uint[] z, int zPos)
 0165        {
 0166            Debug.Assert(zPos <= (len - 1));
 0167            ulong c = (ulong)x + z[zPos];
 0168            z[zPos] = (uint)c;
 0169            c >>= 32;
 0170            return c == 0 ? 0 : IncAt(len, z, zPos + 1);
 0171        }
 172
 173        public static uint AddWordAt(int len, uint x, uint[] z, int zOff, int zPos)
 0174        {
 0175            Debug.Assert(zPos <= (len - 1));
 0176            ulong c = (ulong)x + z[zOff + zPos];
 0177            z[zOff + zPos] = (uint)c;
 0178            c >>= 32;
 0179            return c == 0 ? 0 : IncAt(len, z, zOff, zPos + 1);
 0180        }
 181
 182        public static uint AddWordTo(int len, uint x, uint[] z)
 0183        {
 0184            ulong c = (ulong)x + z[0];
 0185            z[0] = (uint)c;
 0186            c >>= 32;
 0187            return c == 0 ? 0 : IncAt(len, z, 1);
 0188        }
 189
 190        public static uint AddWordTo(int len, uint x, uint[] z, int zOff)
 0191        {
 0192            ulong c = (ulong)x + z[zOff];
 0193            z[zOff] = (uint)c;
 0194            c >>= 32;
 0195            return c == 0 ? 0 : IncAt(len, z, zOff, 1);
 0196        }
 197
 198        public static uint CAdd(int len, int mask, uint[] x, uint[] y, uint[] z)
 0199        {
 0200            uint MASK = (uint)-(mask & 1);
 201
 0202            ulong c = 0;
 0203            for (int i = 0; i < len; ++i)
 0204            {
 0205                c += (ulong)x[i] + (y[i] & MASK);
 0206                z[i] = (uint)c;
 0207                c >>= 32;
 0208            }
 0209            return (uint)c;
 0210        }
 211
 212        public static void CMov(int len, int mask, uint[] x, int xOff, uint[] z, int zOff)
 0213        {
 0214            uint MASK = (uint)-(mask & 1);
 215
 0216            for (int i = 0; i < len; ++i)
 0217            {
 0218                uint z_i = z[zOff + i], diff = z_i ^ x[xOff + i];
 0219                z_i ^= (diff & MASK);
 0220                z[zOff + i] = z_i;
 0221            }
 222
 223            //uint half = 0x55555555U, rest = half << (-(int)MASK);
 224
 225            //for (int i = 0; i < len; ++i)
 226            //{
 227            //    uint z_i = z[zOff + i], diff = z_i ^ x[xOff + i];
 228            //    z_i ^= (diff & half);
 229            //    z_i ^= (diff & rest);
 230            //    z[zOff + i] = z_i;
 231            //}
 0232        }
 233
 234        public static void CMov(int len, int mask, int[] x, int xOff, int[] z, int zOff)
 0235        {
 0236            mask = -(mask & 1);
 237
 0238            for (int i = 0; i < len; ++i)
 0239            {
 0240                int z_i = z[zOff + i], diff = z_i ^ x[xOff + i];
 0241                z_i ^= (diff & mask);
 0242                z[zOff + i] = z_i;
 0243            }
 244
 245            //int half = 0x55555555, rest = half << (-mask);
 246
 247            //for (int i = 0; i < len; ++i)
 248            //{
 249            //    int z_i = z[zOff + i], diff = z_i ^ x[xOff + i];
 250            //    z_i ^= (diff & half);
 251            //    z_i ^= (diff & rest);
 252            //    z[zOff + i] = z_i;
 253            //}
 0254        }
 255
 256        public static void Copy(int len, uint[] x, uint[] z)
 0257        {
 0258            Array.Copy(x, 0, z, 0, len);
 0259        }
 260
 261        public static uint[] Copy(int len, uint[] x)
 66262        {
 66263            uint[] z = new uint[len];
 66264            Array.Copy(x, 0, z, 0, len);
 66265            return z;
 66266        }
 267
 268        public static void Copy(int len, uint[] x, int xOff, uint[] z, int zOff)
 0269        {
 0270            Array.Copy(x, xOff, z, zOff, len);
 0271        }
 272
 273        public static uint[] Create(int len)
 174274        {
 174275            return new uint[len];
 174276        }
 277
 278        public static ulong[] Create64(int len)
 0279        {
 0280            return new ulong[len];
 0281        }
 282
 283        public static int Dec(int len, uint[] z)
 0284        {
 0285            for (int i = 0; i < len; ++i)
 0286            {
 0287                if (--z[i] != uint.MaxValue)
 0288                {
 0289                    return 0;
 290                }
 0291            }
 0292            return -1;
 0293        }
 294
 295        public static int Dec(int len, uint[] x, uint[] z)
 0296        {
 0297            int i = 0;
 0298            while (i < len)
 0299            {
 0300                uint c = x[i] - 1;
 0301                z[i] = c;
 0302                ++i;
 0303                if (c != uint.MaxValue)
 0304                {
 0305                    while (i < len)
 0306                    {
 0307                        z[i] = x[i];
 0308                        ++i;
 0309                    }
 0310                    return 0;
 311                }
 0312            }
 0313            return -1;
 0314        }
 315
 316        public static int DecAt(int len, uint[] z, int zPos)
 0317        {
 0318            Debug.Assert(zPos <= len);
 0319            for (int i = zPos; i < len; ++i)
 0320            {
 0321                if (--z[i] != uint.MaxValue)
 0322                {
 0323                    return 0;
 324                }
 0325            }
 0326            return -1;
 0327        }
 328
 329        public static int DecAt(int len, uint[] z, int zOff, int zPos)
 0330        {
 0331            Debug.Assert(zPos <= len);
 0332            for (int i = zPos; i < len; ++i)
 0333            {
 0334                if (--z[zOff + i] != uint.MaxValue)
 0335                {
 0336                    return 0;
 337                }
 0338            }
 0339            return -1;
 0340        }
 341
 342        public static bool Eq(int len, uint[] x, uint[] y)
 0343        {
 0344            for (int i = len - 1; i >= 0; --i)
 0345            {
 0346                if (x[i] != y[i])
 0347                {
 0348                    return false;
 349                }
 0350            }
 0351            return true;
 0352        }
 353
 354        public static uint[] FromBigInteger(int bits, BigInteger x)
 75355        {
 75356            if (x.SignValue < 0 || x.BitLength > bits)
 0357                throw new ArgumentException();
 358
 75359            int len = (bits + 31) >> 5;
 75360            uint[] z = Create(len);
 75361            int i = 0;
 1000362            while (x.SignValue != 0)
 925363            {
 925364                z[i++] = (uint)x.IntValue;
 925365                x = x.ShiftRight(32);
 925366            }
 75367            return z;
 75368        }
 369
 370        public static uint GetBit(uint[] x, int bit)
 0371        {
 0372            if (bit == 0)
 0373            {
 0374                return x[0] & 1;
 375            }
 0376            int w = bit >> 5;
 0377            if (w < 0 || w >= x.Length)
 0378            {
 0379                return 0;
 380            }
 0381            int b = bit & 31;
 0382            return (x[w] >> b) & 1;
 0383        }
 384
 385        public static bool Gte(int len, uint[] x, uint[] y)
 8947386        {
 130330387            for (int i = len - 1; i >= 0; --i)
 65165388            {
 130330389                uint x_i = x[i], y_i = y[i];
 65165390                if (x_i < y_i)
 4554391                    return false;
 60611392                if (x_i > y_i)
 4393393                    return true;
 56218394            }
 0395            return true;
 8947396        }
 397
 398        public static uint Inc(int len, uint[] z)
 0399        {
 0400            for (int i = 0; i < len; ++i)
 0401            {
 0402                if (++z[i] != uint.MinValue)
 0403                {
 0404                    return 0;
 405                }
 0406            }
 0407            return 1;
 0408        }
 409
 410        public static uint Inc(int len, uint[] x, uint[] z)
 0411        {
 0412            int i = 0;
 0413            while (i < len)
 0414            {
 0415                uint c = x[i] + 1;
 0416                z[i] = c;
 0417                ++i;
 0418                if (c != 0)
 0419                {
 0420                    while (i < len)
 0421                    {
 0422                        z[i] = x[i];
 0423                        ++i;
 0424                    }
 0425                    return 0;
 426                }
 0427            }
 0428            return 1;
 0429        }
 430
 431        public static uint IncAt(int len, uint[] z, int zPos)
 0432        {
 0433            Debug.Assert(zPos <= len);
 0434            for (int i = zPos; i < len; ++i)
 0435            {
 0436                if (++z[i] != uint.MinValue)
 0437                {
 0438                    return 0;
 439                }
 0440            }
 0441            return 1;
 0442        }
 443
 444        public static uint IncAt(int len, uint[] z, int zOff, int zPos)
 0445        {
 0446            Debug.Assert(zPos <= len);
 0447            for (int i = zPos; i < len; ++i)
 0448            {
 0449                if (++z[zOff + i] != uint.MinValue)
 0450                {
 0451                    return 0;
 452                }
 0453            }
 0454            return 1;
 0455        }
 456
 457        public static bool IsOne(int len, uint[] x)
 9013458        {
 9013459            if (x[0] != 1)
 8980460            {
 8980461                return false;
 462            }
 814463            for (int i = 1; i < len; ++i)
 374464            {
 374465                if (x[i] != 0)
 0466                {
 0467                    return false;
 468                }
 374469            }
 33470            return true;
 9013471        }
 472
 473        public static bool IsZero(int len, uint[] x)
 33474        {
 33475            if (x[0] != 0)
 33476            {
 33477                return false;
 478            }
 0479            for (int i = 1; i < len; ++i)
 0480            {
 0481                if (x[i] != 0)
 0482                {
 0483                    return false;
 484                }
 0485            }
 0486            return true;
 33487        }
 488
 489        public static void Mul(int len, uint[] x, uint[] y, uint[] zz)
 0490        {
 0491            zz[len] = MulWord(len, x[0], y, zz);
 492
 0493            for (int i = 1; i < len; ++i)
 0494            {
 0495                zz[i + len] = MulWordAddTo(len, x[i], y, 0, zz, i);
 0496            }
 0497        }
 498
 499        public static void Mul(int len, uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff)
 0500        {
 0501            zz[zzOff + len] = MulWord(len, x[xOff], y, yOff, zz, zzOff);
 502
 0503            for (int i = 1; i < len; ++i)
 0504            {
 0505                zz[zzOff + i + len] = MulWordAddTo(len, x[xOff + i], y, yOff, zz, zzOff + i);
 0506            }
 0507        }
 508
 509        public static void Mul(uint[] x, int xOff, int xLen, uint[] y, int yOff, int yLen, uint[] zz, int zzOff)
 0510        {
 0511            zz[zzOff + yLen] = MulWord(yLen, x[xOff], y, yOff, zz, zzOff);
 512
 0513            for (int i = 1; i < xLen; ++i)
 0514            {
 0515                zz[zzOff + i + yLen] = MulWordAddTo(yLen, x[xOff + i], y, yOff, zz, zzOff + i);
 0516            }
 0517        }
 518
 519        public static uint MulAddTo(int len, uint[] x, uint[] y, uint[] zz)
 0520        {
 0521            ulong zc = 0;
 0522            for (int i = 0; i < len; ++i)
 0523            {
 0524                ulong c = MulWordAddTo(len, x[i], y, 0, zz, i) & M;
 0525                c += zc + (zz[i + len] & M);
 0526                zz[i + len] = (uint)c;
 0527                zc = c >> 32;
 0528            }
 0529            return (uint)zc;
 0530        }
 531
 532        public static uint MulAddTo(int len, uint[] x, int xOff, uint[] y, int yOff, uint[] zz, int zzOff)
 0533        {
 0534            ulong zc = 0;
 0535            for (int i = 0; i < len; ++i)
 0536            {
 0537                ulong c = MulWordAddTo(len, x[xOff + i], y, yOff, zz, zzOff) & M;
 0538                c += zc + (zz[zzOff + len] & M);
 0539                zz[zzOff + len] = (uint)c;
 0540                zc = c >> 32;
 0541                ++zzOff;
 0542            }
 0543            return (uint)zc;
 0544        }
 545
 546        public static uint Mul31BothAdd(int len, uint a, uint[] x, uint b, uint[] y, uint[] z, int zOff)
 0547        {
 0548            ulong c = 0, aVal = (ulong)a, bVal = (ulong)b;
 0549            int i = 0;
 550            do
 0551            {
 0552                c += aVal * x[i] + bVal * y[i] + z[zOff + i];
 0553                z[zOff + i] = (uint)c;
 0554                c >>= 32;
 0555            }
 0556            while (++i < len);
 0557            return (uint)c;
 0558        }
 559
 560        public static uint MulWord(int len, uint x, uint[] y, uint[] z)
 0561        {
 0562            ulong c = 0, xVal = (ulong)x;
 0563            int i = 0;
 564            do
 0565            {
 0566                c += xVal * y[i];
 0567                z[i] = (uint)c;
 0568                c >>= 32;
 0569            }
 0570            while (++i < len);
 0571            return (uint)c;
 0572        }
 573
 574        public static uint MulWord(int len, uint x, uint[] y, int yOff, uint[] z, int zOff)
 0575        {
 0576            ulong c = 0, xVal = (ulong)x;
 0577            int i = 0;
 578            do
 0579            {
 0580                c += xVal * y[yOff + i];
 0581                z[zOff + i] = (uint)c;
 0582                c >>= 32;
 0583            }
 0584            while (++i < len);
 0585            return (uint)c;
 0586        }
 587
 588        public static uint MulWordAddTo(int len, uint x, uint[] y, int yOff, uint[] z, int zOff)
 0589        {
 0590            ulong c = 0, xVal = (ulong)x;
 0591            int i = 0;
 592            do
 0593            {
 0594                c += xVal * y[yOff + i] + z[zOff + i];
 0595                z[zOff + i] = (uint)c;
 0596                c >>= 32;
 0597            }
 0598            while (++i < len);
 0599            return (uint)c;
 0600        }
 601
 602        public static uint MulWordDwordAddAt(int len, uint x, ulong y, uint[] z, int zPos)
 0603        {
 0604            Debug.Assert(zPos <= (len - 3));
 0605            ulong c = 0, xVal = (ulong)x;
 0606            c += xVal * (uint)y + z[zPos + 0];
 0607            z[zPos + 0] = (uint)c;
 0608            c >>= 32;
 0609            c += xVal * (y >> 32) + z[zPos + 1];
 0610            z[zPos + 1] = (uint)c;
 0611            c >>= 32;
 0612            c += (ulong)z[zPos + 2];
 0613            z[zPos + 2] = (uint)c;
 0614            c >>= 32;
 0615            return c == 0 ? 0 : IncAt(len, z, zPos + 3);
 0616        }
 617
 618        public static uint ShiftDownBit(int len, uint[] z, uint c)
 17909619        {
 17909620            int i = len;
 257148621            while (--i >= 0)
 239239622            {
 239239623                uint next = z[i];
 239239624                z[i] = (next >> 1) | (c << 31);
 239239625                c = next;
 239239626            }
 17909627            return c << 31;
 17909628        }
 629
 630        public static uint ShiftDownBit(int len, uint[] z, int zOff, uint c)
 0631        {
 0632            int i = len;
 0633            while (--i >= 0)
 0634            {
 0635                uint next = z[zOff + i];
 0636                z[zOff + i] = (next >> 1) | (c << 31);
 0637                c = next;
 0638            }
 0639            return c << 31;
 0640        }
 641
 642        public static uint ShiftDownBit(int len, uint[] x, uint c, uint[] z)
 0643        {
 0644            int i = len;
 0645            while (--i >= 0)
 0646            {
 0647                uint next = x[i];
 0648                z[i] = (next >> 1) | (c << 31);
 0649                c = next;
 0650            }
 0651            return c << 31;
 0652        }
 653
 654        public static uint ShiftDownBit(int len, uint[] x, int xOff, uint c, uint[] z, int zOff)
 0655        {
 0656            int i = len;
 0657            while (--i >= 0)
 0658            {
 0659                uint next = x[xOff + i];
 0660                z[zOff + i] = (next >> 1) | (c << 31);
 0661                c = next;
 0662            }
 0663            return c << 31;
 0664        }
 665
 666        public static uint ShiftDownBits(int len, uint[] z, int bits, uint c)
 8963667        {
 8963668            Debug.Assert(bits > 0 && bits < 32);
 8963669            int i = len;
 72762670            while (--i >= 0)
 63799671            {
 63799672                uint next = z[i];
 63799673                z[i] = (next >> bits) | (c << -bits);
 63799674                c = next;
 63799675            }
 8963676            return c << -bits;
 8963677        }
 678
 679        public static uint ShiftDownBits(int len, uint[] z, int zOff, int bits, uint c)
 0680        {
 0681            Debug.Assert(bits > 0 && bits < 32);
 0682            int i = len;
 0683            while (--i >= 0)
 0684            {
 0685                uint next = z[zOff + i];
 0686                z[zOff + i] = (next >> bits) | (c << -bits);
 0687                c = next;
 0688            }
 0689            return c << -bits;
 0690        }
 691
 692        public static uint ShiftDownBits(int len, uint[] x, int bits, uint c, uint[] z)
 0693        {
 0694            Debug.Assert(bits > 0 && bits < 32);
 0695            int i = len;
 0696            while (--i >= 0)
 0697            {
 0698                uint next = x[i];
 0699                z[i] = (next >> bits) | (c << -bits);
 0700                c = next;
 0701            }
 0702            return c << -bits;
 0703        }
 704
 705        public static uint ShiftDownBits(int len, uint[] x, int xOff, int bits, uint c, uint[] z, int zOff)
 0706        {
 0707            Debug.Assert(bits > 0 && bits < 32);
 0708            int i = len;
 0709            while (--i >= 0)
 0710            {
 0711                uint next = x[xOff + i];
 0712                z[zOff + i] = (next >> bits) | (c << -bits);
 0713                c = next;
 0714            }
 0715            return c << -bits;
 0716        }
 717
 718        public static uint ShiftDownWord(int len, uint[] z, uint c)
 0719        {
 0720            int i = len;
 0721            while (--i >= 0)
 0722            {
 0723                uint next = z[i];
 0724                z[i] = c;
 0725                c = next;
 0726            }
 0727            return c;
 0728        }
 729
 730        public static uint ShiftUpBit(int len, uint[] z, uint c)
 0731        {
 0732            for (int i = 0; i < len; ++i)
 0733            {
 0734                uint next = z[i];
 0735                z[i] = (next << 1) | (c >> 31);
 0736                c = next;
 0737            }
 0738            return c >> 31;
 0739        }
 740
 741        public static uint ShiftUpBit(int len, uint[] z, int zOff, uint c)
 0742        {
 0743            for (int i = 0; i < len; ++i)
 0744            {
 0745                uint next = z[zOff + i];
 0746                z[zOff + i] = (next << 1) | (c >> 31);
 0747                c = next;
 0748            }
 0749            return c >> 31;
 0750        }
 751
 752        public static uint ShiftUpBit(int len, uint[] x, uint c, uint[] z)
 0753        {
 0754            for (int i = 0; i < len; ++i)
 0755            {
 0756                uint next = x[i];
 0757                z[i] = (next << 1) | (c >> 31);
 0758                c = next;
 0759            }
 0760            return c >> 31;
 0761        }
 762
 763        public static uint ShiftUpBit(int len, uint[] x, int xOff, uint c, uint[] z, int zOff)
 0764        {
 0765            for (int i = 0; i < len; ++i)
 0766            {
 0767                uint next = x[xOff + i];
 0768                z[zOff + i] = (next << 1) | (c >> 31);
 0769                c = next;
 0770            }
 0771            return c >> 31;
 0772        }
 773
 774        public static ulong ShiftUpBit64(int len, ulong[] x, int xOff, ulong c, ulong[] z, int zOff)
 0775        {
 0776            for (int i = 0; i < len; ++i)
 0777            {
 0778                ulong next = x[xOff + i];
 0779                z[zOff + i] = (next << 1) | (c >> 63);
 0780                c = next;
 0781            }
 0782            return c >> 63;
 0783        }
 784
 785        public static uint ShiftUpBits(int len, uint[] z, int bits, uint c)
 0786        {
 0787            Debug.Assert(bits > 0 && bits < 32);
 0788            for (int i = 0; i < len; ++i)
 0789            {
 0790                uint next = z[i];
 0791                z[i] = (next << bits) | (c >> -bits);
 0792                c = next;
 0793            }
 0794            return c >> -bits;
 0795        }
 796
 797        public static uint ShiftUpBits(int len, uint[] z, int zOff, int bits, uint c)
 0798        {
 0799            Debug.Assert(bits > 0 && bits < 32);
 0800            for (int i = 0; i < len; ++i)
 0801            {
 0802                uint next = z[zOff + i];
 0803                z[zOff + i] = (next << bits) | (c >> -bits);
 0804                c = next;
 0805            }
 0806            return c >> -bits;
 0807        }
 808
 809        public static ulong ShiftUpBits64(int len, ulong[] z, int zOff, int bits, ulong c)
 0810        {
 0811            Debug.Assert(bits > 0 && bits < 64);
 0812            for (int i = 0; i < len; ++i)
 0813            {
 0814                ulong next = z[zOff + i];
 0815                z[zOff + i] = (next << bits) | (c >> -bits);
 0816                c = next;
 0817            }
 0818            return c >> -bits;
 0819        }
 820
 821        public static uint ShiftUpBits(int len, uint[] x, int bits, uint c, uint[] z)
 0822        {
 0823            Debug.Assert(bits > 0 && bits < 32);
 0824            for (int i = 0; i < len; ++i)
 0825            {
 0826                uint next = x[i];
 0827                z[i] = (next << bits) | (c >> -bits);
 0828                c = next;
 0829            }
 0830            return c >> -bits;
 0831        }
 832
 833        public static uint ShiftUpBits(int len, uint[] x, int xOff, int bits, uint c, uint[] z, int zOff)
 0834        {
 0835            Debug.Assert(bits > 0 && bits < 32);
 0836            for (int i = 0; i < len; ++i)
 0837            {
 0838                uint next = x[xOff + i];
 0839                z[zOff + i] = (next << bits) | (c >> -bits);
 0840                c = next;
 0841            }
 0842            return c >> -bits;
 0843        }
 844
 845        public static ulong ShiftUpBits64(int len, ulong[] x, int xOff, int bits, ulong c, ulong[] z, int zOff)
 0846        {
 0847            Debug.Assert(bits > 0 && bits < 64);
 0848            for (int i = 0; i < len; ++i)
 0849            {
 0850                ulong next = x[xOff + i];
 0851                z[zOff + i] = (next << bits) | (c >> -bits);
 0852                c = next;
 0853            }
 0854            return c >> -bits;
 0855        }
 856
 857        public static void Square(int len, uint[] x, uint[] zz)
 0858        {
 0859            int extLen = len << 1;
 0860            uint c = 0;
 0861            int j = len, k = extLen;
 862            do
 0863            {
 0864                ulong xVal = (ulong)x[--j];
 0865                ulong p = xVal * xVal;
 0866                zz[--k] = (c << 31) | (uint)(p >> 33);
 0867                zz[--k] = (uint)(p >> 1);
 0868                c = (uint)p;
 0869            }
 0870            while (j > 0);
 871
 0872            for (int i = 1; i < len; ++i)
 0873            {
 0874                c = SquareWordAdd(x, i, zz);
 0875                AddWordAt(extLen, c, zz, i << 1);
 0876            }
 877
 0878            ShiftUpBit(extLen, zz, x[0] << 31);
 0879        }
 880
 881        public static void Square(int len, uint[] x, int xOff, uint[] zz, int zzOff)
 0882        {
 0883            int extLen = len << 1;
 0884            uint c = 0;
 0885            int j = len, k = extLen;
 886            do
 0887            {
 0888                ulong xVal = (ulong)x[xOff + --j];
 0889                ulong p = xVal * xVal;
 0890                zz[zzOff + --k] = (c << 31) | (uint)(p >> 33);
 0891                zz[zzOff + --k] = (uint)(p >> 1);
 0892                c = (uint)p;
 0893            }
 0894            while (j > 0);
 895
 0896            for (int i = 1; i < len; ++i)
 0897            {
 0898                c = SquareWordAdd(x, xOff, i, zz, zzOff);
 0899                AddWordAt(extLen, c, zz, zzOff, i << 1);
 0900            }
 901
 0902            ShiftUpBit(extLen, zz, zzOff, x[xOff] << 31);
 0903        }
 904
 905        public static uint SquareWordAdd(uint[] x, int xPos, uint[] z)
 0906        {
 0907            ulong c = 0, xVal = (ulong)x[xPos];
 0908            int i = 0;
 909            do
 0910            {
 0911                c += xVal * x[i] + z[xPos + i];
 0912                z[xPos + i] = (uint)c;
 0913                c >>= 32;
 0914            }
 0915            while (++i < xPos);
 0916            return (uint)c;
 0917        }
 918
 919        public static uint SquareWordAdd(uint[] x, int xOff, int xPos, uint[] z, int zOff)
 0920        {
 0921            ulong c = 0, xVal = (ulong)x[xOff + xPos];
 0922            int i = 0;
 923            do
 0924            {
 0925                c += xVal * (x[xOff + i] & M) + (z[xPos + zOff] & M);
 0926                z[xPos + zOff] = (uint)c;
 0927                c >>= 32;
 0928                ++zOff;
 0929            }
 0930            while (++i < xPos);
 0931            return (uint)c;
 0932        }
 933
 934        public static int Sub(int len, uint[] x, uint[] y, uint[] z)
 0935        {
 0936            long c = 0;
 0937            for (int i = 0; i < len; ++i)
 0938            {
 0939                c += (long)x[i] - y[i];
 0940                z[i] = (uint)c;
 0941                c >>= 32;
 0942            }
 0943            return (int)c;
 0944        }
 945
 946        public static int Sub(int len, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff)
 0947        {
 0948            long c = 0;
 0949            for (int i = 0; i < len; ++i)
 0950            {
 0951                c += (long)x[xOff + i] - y[yOff + i];
 0952                z[zOff + i] = (uint)c;
 0953                c >>= 32;
 0954            }
 0955            return (int)c;
 0956        }
 957        public static int Sub33At(int len, uint x, uint[] z, int zPos)
 0958        {
 0959            Debug.Assert(zPos <= (len - 2));
 0960            long c = (long)z[zPos + 0] - x;
 0961            z[zPos + 0] = (uint)c;
 0962            c >>= 32;
 0963            c += (long)z[zPos + 1] - 1;
 0964            z[zPos + 1] = (uint)c;
 0965            c >>= 32;
 0966            return c == 0 ? 0 : DecAt(len, z, zPos + 2);
 0967        }
 968
 969        public static int Sub33At(int len, uint x, uint[] z, int zOff, int zPos)
 0970        {
 0971            Debug.Assert(zPos <= (len - 2));
 0972            long c = (long)z[zOff + zPos] - x;
 0973            z[zOff + zPos] = (uint)c;
 0974            c >>= 32;
 0975            c += (long)z[zOff + zPos + 1] - 1;
 0976            z[zOff + zPos + 1] = (uint)c;
 0977            c >>= 32;
 0978            return c == 0 ? 0 : DecAt(len, z, zOff, zPos + 2);
 0979        }
 980
 981        public static int Sub33From(int len, uint x, uint[] z)
 0982        {
 0983            long c = (long)z[0] - x;
 0984            z[0] = (uint)c;
 0985            c >>= 32;
 0986            c += (long)z[1] - 1;
 0987            z[1] = (uint)c;
 0988            c >>= 32;
 0989            return c == 0 ? 0 : DecAt(len, z, 2);
 0990        }
 991
 992        public static int Sub33From(int len, uint x, uint[] z, int zOff)
 0993        {
 0994            long c = (long)z[zOff + 0] - x;
 0995            z[zOff + 0] = (uint)c;
 0996            c >>= 32;
 0997            c += (long)z[zOff + 1] - 1;
 0998            z[zOff + 1] = (uint)c;
 0999            c >>= 32;
 01000            return c == 0 ? 0 : DecAt(len, z, zOff, 2);
 01001        }
 1002
 1003        public static int SubBothFrom(int len, uint[] x, uint[] y, uint[] z)
 01004        {
 01005            long c = 0;
 01006            for (int i = 0; i < len; ++i)
 01007            {
 01008                c += (long)z[i] - x[i] - y[i];
 01009                z[i] = (uint)c;
 01010                c >>= 32;
 01011            }
 01012            return (int)c;
 01013        }
 1014
 1015        public static int SubBothFrom(int len, uint[] x, int xOff, uint[] y, int yOff, uint[] z, int zOff)
 01016        {
 01017            long c = 0;
 01018            for (int i = 0; i < len; ++i)
 01019            {
 01020                c += (long)z[zOff + i] - x[xOff + i] - y[yOff + i];
 01021                z[zOff + i] = (uint)c;
 01022                c >>= 32;
 01023            }
 01024            return (int)c;
 01025        }
 1026
 1027        public static int SubDWordAt(int len, ulong x, uint[] z, int zPos)
 01028        {
 01029            Debug.Assert(zPos <= (len - 2));
 01030            long c = (long)z[zPos + 0] - (long)(x & M);
 01031            z[zPos + 0] = (uint)c;
 01032            c >>= 32;
 01033            c += (long)z[zPos + 1] - (long)(x >> 32);
 01034            z[zPos + 1] = (uint)c;
 01035            c >>= 32;
 01036            return c == 0 ? 0 : DecAt(len, z, zPos + 2);
 01037        }
 1038
 1039        public static int SubDWordAt(int len, ulong x, uint[] z, int zOff, int zPos)
 01040        {
 01041            Debug.Assert(zPos <= (len - 2));
 01042            long c = (long)z[zOff + zPos] - (long)(x & M);
 01043            z[zOff + zPos] = (uint)c;
 01044            c >>= 32;
 01045            c += (long)z[zOff + zPos + 1] - (long)(x >> 32);
 01046            z[zOff + zPos + 1] = (uint)c;
 01047            c >>= 32;
 01048            return c == 0 ? 0 : DecAt(len, z,  zOff, zPos + 2);
 01049        }
 1050
 1051        public static int SubDWordFrom(int len, ulong x, uint[] z)
 01052        {
 01053            long c = (long)z[0] - (long)(x & M);
 01054            z[0] = (uint)c;
 01055            c >>= 32;
 01056            c += (long)z[1] - (long)(x >> 32);
 01057            z[1] = (uint)c;
 01058            c >>= 32;
 01059            return c == 0 ? 0 : DecAt(len, z, 2);
 01060        }
 1061
 1062        public static int SubDWordFrom(int len, ulong x, uint[] z, int zOff)
 01063        {
 01064            long c = (long)z[zOff + 0] - (long)(x & M);
 01065            z[zOff + 0] = (uint)c;
 01066            c >>= 32;
 01067            c += (long)z[zOff + 1] - (long)(x >> 32);
 01068            z[zOff + 1] = (uint)c;
 01069            c >>= 32;
 01070            return c == 0 ? 0 : DecAt(len, z, zOff, 2);
 01071        }
 1072
 1073        public static int SubFrom(int len, uint[] x, uint[] z)
 206871074        {
 206871075            long c = 0;
 5875041076            for (int i = 0; i < len; ++i)
 2730651077            {
 2730651078                c += (long)z[i] - x[i];
 2730651079                z[i] = (uint)c;
 2730651080                c >>= 32;
 2730651081            }
 206871082            return (int)c;
 206871083        }
 1084
 1085        public static int SubFrom(int len, uint[] x, int xOff, uint[] z, int zOff)
 01086        {
 01087            long c = 0;
 01088            for (int i = 0; i < len; ++i)
 01089            {
 01090                c += (long)z[zOff + i] - x[xOff + i];
 01091                z[zOff + i] = (uint)c;
 01092                c >>= 32;
 01093            }
 01094            return (int)c;
 01095        }
 1096
 1097        public static int SubWordAt(int len, uint x, uint[] z, int zPos)
 01098        {
 01099            Debug.Assert(zPos <= (len - 1));
 01100            long c = (long)z[zPos] - x;
 01101            z[zPos] = (uint)c;
 01102            c >>= 32;
 01103            return c == 0 ? 0 : DecAt(len, z, zPos + 1);
 01104        }
 1105
 1106        public static int SubWordAt(int len, uint x, uint[] z, int zOff, int zPos)
 01107        {
 01108            Debug.Assert(zPos <= (len - 1));
 01109            long c = (long)z[zOff + zPos] - x;
 01110            z[zOff + zPos] = (uint)c;
 01111            c >>= 32;
 01112            return c == 0 ? 0 : DecAt(len, z, zOff, zPos + 1);
 01113        }
 1114
 1115        public static int SubWordFrom(int len, uint x, uint[] z)
 01116        {
 01117            long c = (long)z[0] - x;
 01118            z[0] = (uint)c;
 01119            c >>= 32;
 01120            return c == 0 ? 0 : DecAt(len, z, 1);
 01121        }
 1122
 1123        public static int SubWordFrom(int len, uint x, uint[] z, int zOff)
 01124        {
 01125            long c = (long)z[zOff + 0] - x;
 01126            z[zOff + 0] = (uint)c;
 01127            c >>= 32;
 01128            return c == 0 ? 0 : DecAt(len, z, zOff, 1);
 01129        }
 1130
 1131        public static BigInteger ToBigInteger(int len, uint[] x)
 331132        {
 331133            byte[] bs = new byte[len << 2];
 8801134            for (int i = 0; i < len; ++i)
 4071135            {
 4071136                uint x_i = x[i];
 4071137                if (x_i != 0)
 4071138                {
 4071139                    Pack.UInt32_To_BE(x_i, bs, (len - 1 - i) << 2);
 4071140                }
 4071141            }
 331142            return new BigInteger(1, bs);
 331143        }
 1144
 1145        public static void Zero(int len, uint[] z)
 01146        {
 01147            for (int i = 0; i < len; ++i)
 01148            {
 01149                z[i] = 0;
 01150            }
 01151        }
 1152    }
 1153}

Methods/Properties

Add(System.Int32,System.UInt32[],System.UInt32[],System.UInt32[])
Add33At(System.Int32,System.UInt32,System.UInt32[],System.Int32)
Add33At(System.Int32,System.UInt32,System.UInt32[],System.Int32,System.Int32)
Add33To(System.Int32,System.UInt32,System.UInt32[])
Add33To(System.Int32,System.UInt32,System.UInt32[],System.Int32)
AddBothTo(System.Int32,System.UInt32[],System.UInt32[],System.UInt32[])
AddBothTo(System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
AddDWordAt(System.Int32,System.UInt64,System.UInt32[],System.Int32)
AddDWordAt(System.Int32,System.UInt64,System.UInt32[],System.Int32,System.Int32)
AddDWordTo(System.Int32,System.UInt64,System.UInt32[])
AddDWordTo(System.Int32,System.UInt64,System.UInt32[],System.Int32)
AddTo(System.Int32,System.UInt32[],System.UInt32[])
AddTo(System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
AddWordAt(System.Int32,System.UInt32,System.UInt32[],System.Int32)
AddWordAt(System.Int32,System.UInt32,System.UInt32[],System.Int32,System.Int32)
AddWordTo(System.Int32,System.UInt32,System.UInt32[])
AddWordTo(System.Int32,System.UInt32,System.UInt32[],System.Int32)
CAdd(System.Int32,System.Int32,System.UInt32[],System.UInt32[],System.UInt32[])
CMov(System.Int32,System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
CMov(System.Int32,System.Int32,System.Int32[],System.Int32,System.Int32[],System.Int32)
Copy(System.Int32,System.UInt32[],System.UInt32[])
Copy(System.Int32,System.UInt32[])
Copy(System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
Create(System.Int32)
Create64(System.Int32)
Dec(System.Int32,System.UInt32[])
Dec(System.Int32,System.UInt32[],System.UInt32[])
DecAt(System.Int32,System.UInt32[],System.Int32)
DecAt(System.Int32,System.UInt32[],System.Int32,System.Int32)
Eq(System.Int32,System.UInt32[],System.UInt32[])
FromBigInteger(System.Int32,Renci.SshNet.Security.Org.BouncyCastle.Math.BigInteger)
GetBit(System.UInt32[],System.Int32)
Gte(System.Int32,System.UInt32[],System.UInt32[])
Inc(System.Int32,System.UInt32[])
Inc(System.Int32,System.UInt32[],System.UInt32[])
IncAt(System.Int32,System.UInt32[],System.Int32)
IncAt(System.Int32,System.UInt32[],System.Int32,System.Int32)
IsOne(System.Int32,System.UInt32[])
IsZero(System.Int32,System.UInt32[])
Mul(System.Int32,System.UInt32[],System.UInt32[],System.UInt32[])
Mul(System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
Mul(System.UInt32[],System.Int32,System.Int32,System.UInt32[],System.Int32,System.Int32,System.UInt32[],System.Int32)
MulAddTo(System.Int32,System.UInt32[],System.UInt32[],System.UInt32[])
MulAddTo(System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
Mul31BothAdd(System.Int32,System.UInt32,System.UInt32[],System.UInt32,System.UInt32[],System.UInt32[],System.Int32)
MulWord(System.Int32,System.UInt32,System.UInt32[],System.UInt32[])
MulWord(System.Int32,System.UInt32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
MulWordAddTo(System.Int32,System.UInt32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
MulWordDwordAddAt(System.Int32,System.UInt32,System.UInt64,System.UInt32[],System.Int32)
ShiftDownBit(System.Int32,System.UInt32[],System.UInt32)
ShiftDownBit(System.Int32,System.UInt32[],System.Int32,System.UInt32)
ShiftDownBit(System.Int32,System.UInt32[],System.UInt32,System.UInt32[])
ShiftDownBit(System.Int32,System.UInt32[],System.Int32,System.UInt32,System.UInt32[],System.Int32)
ShiftDownBits(System.Int32,System.UInt32[],System.Int32,System.UInt32)
ShiftDownBits(System.Int32,System.UInt32[],System.Int32,System.Int32,System.UInt32)
ShiftDownBits(System.Int32,System.UInt32[],System.Int32,System.UInt32,System.UInt32[])
ShiftDownBits(System.Int32,System.UInt32[],System.Int32,System.Int32,System.UInt32,System.UInt32[],System.Int32)
ShiftDownWord(System.Int32,System.UInt32[],System.UInt32)
ShiftUpBit(System.Int32,System.UInt32[],System.UInt32)
ShiftUpBit(System.Int32,System.UInt32[],System.Int32,System.UInt32)
ShiftUpBit(System.Int32,System.UInt32[],System.UInt32,System.UInt32[])
ShiftUpBit(System.Int32,System.UInt32[],System.Int32,System.UInt32,System.UInt32[],System.Int32)
ShiftUpBit64(System.Int32,System.UInt64[],System.Int32,System.UInt64,System.UInt64[],System.Int32)
ShiftUpBits(System.Int32,System.UInt32[],System.Int32,System.UInt32)
ShiftUpBits(System.Int32,System.UInt32[],System.Int32,System.Int32,System.UInt32)
ShiftUpBits64(System.Int32,System.UInt64[],System.Int32,System.Int32,System.UInt64)
ShiftUpBits(System.Int32,System.UInt32[],System.Int32,System.UInt32,System.UInt32[])
ShiftUpBits(System.Int32,System.UInt32[],System.Int32,System.Int32,System.UInt32,System.UInt32[],System.Int32)
ShiftUpBits64(System.Int32,System.UInt64[],System.Int32,System.Int32,System.UInt64,System.UInt64[],System.Int32)
Square(System.Int32,System.UInt32[],System.UInt32[])
Square(System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
SquareWordAdd(System.UInt32[],System.Int32,System.UInt32[])
SquareWordAdd(System.UInt32[],System.Int32,System.Int32,System.UInt32[],System.Int32)
Sub(System.Int32,System.UInt32[],System.UInt32[],System.UInt32[])
Sub(System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
Sub33At(System.Int32,System.UInt32,System.UInt32[],System.Int32)
Sub33At(System.Int32,System.UInt32,System.UInt32[],System.Int32,System.Int32)
Sub33From(System.Int32,System.UInt32,System.UInt32[])
Sub33From(System.Int32,System.UInt32,System.UInt32[],System.Int32)
SubBothFrom(System.Int32,System.UInt32[],System.UInt32[],System.UInt32[])
SubBothFrom(System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
SubDWordAt(System.Int32,System.UInt64,System.UInt32[],System.Int32)
SubDWordAt(System.Int32,System.UInt64,System.UInt32[],System.Int32,System.Int32)
SubDWordFrom(System.Int32,System.UInt64,System.UInt32[])
SubDWordFrom(System.Int32,System.UInt64,System.UInt32[],System.Int32)
SubFrom(System.Int32,System.UInt32[],System.UInt32[])
SubFrom(System.Int32,System.UInt32[],System.Int32,System.UInt32[],System.Int32)
SubWordAt(System.Int32,System.UInt32,System.UInt32[],System.Int32)
SubWordAt(System.Int32,System.UInt32,System.UInt32[],System.Int32,System.Int32)
SubWordFrom(System.Int32,System.UInt32,System.UInt32[])
SubWordFrom(System.Int32,System.UInt32,System.UInt32[],System.Int32)
ToBigInteger(System.Int32,System.UInt32[])
Zero(System.Int32,System.UInt32[])