Exemplo n.º 1
0
        public static void Add(uint[] x, uint[] y, uint[] z)
        {
            uint c = Nat256.Add(x, y, z);

            if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P)))
            {
                Nat256.AddDWord(PInv, z, 0);
            }
        }
Exemplo n.º 2
0
 public static uint[] FromBigInteger(BigInteger x)
 {
     uint[] z = Nat256.FromBigInteger(x);
     if (z[7] == P7 && Nat256.Gte(z, P))
     {
         Nat256.AddDWord(PInv, z, 0);
     }
     return(z);
 }
Exemplo n.º 3
0
        public static void Twice(uint[] x, uint[] z)
        {
            uint c = Nat256.ShiftUpBit(x, 0, z);

            if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P)))
            {
                Nat256.AddDWord(PInv, z, 0);
            }
        }
Exemplo n.º 4
0
        public static void Twice(uint[] x, uint[] z)
        {
            uint c = Nat256.ShiftUpBit(x, 0, z);

            if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P)))
            {
                Nat256.Sub(z, P, z);
            }
        }
Exemplo n.º 5
0
 public static uint[] FromBigInteger(BigInteger x)
 {
     uint[] numArray = Nat256.FromBigInteger(x);
     if ((numArray[7] == uint.MaxValue) && Nat256.Gte(numArray, P))
     {
         Nat256.SubFrom(P, numArray);
     }
     return(numArray);
 }
Exemplo n.º 6
0
        public static void Reduce(uint[] xx, uint[] z)
        {
            ulong y = Nat256.Mul33Add(977u, xx, 8, xx, 0, z, 0);

            if (Nat256.Mul33DWordAdd(977u, y, z, 0) != 0u || (z[7] == 4294967295u && Nat256.Gte(z, SecP256K1Field.P)))
            {
                Nat.Add33To(8, 977u, z);
            }
        }
Exemplo n.º 7
0
 public static uint[] FromBigInteger(BigInteger x)
 {
     uint[] array = Nat256.FromBigInteger(x);
     if (array[7] == uint.MaxValue && Nat256.Gte(array, P))
     {
         Nat256.SubFrom(P, array);
     }
     return(array);
 }
Exemplo n.º 8
0
        public static void Add(uint[] x, uint[] y, uint[] z)
        {
            uint c = Nat256.Add(x, y, z);

            if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P)))
            {
                AddPInvTo(z);
            }
        }
Exemplo n.º 9
0
 public static uint[] FromBigInteger(BigInteger x)
 {
     uint[] array = Nat256.FromBigInteger(x);
     if (array[7] == 4294967295u && Nat256.Gte(array, SecP256K1Field.P))
     {
         Nat256.SubFrom(SecP256K1Field.P, array);
     }
     return(array);
 }
Exemplo n.º 10
0
        public static void MultiplyAddToExt(uint[] x, uint[] y, uint[] zz)
        {
            uint c = Nat128.MulAddTo(x, y, zz);

            if (c != 0 || (zz[7] >= PExt7 && Nat256.Gte(zz, PExt)))
            {
                Nat.AddTo(PExtInv.Length, PExtInv, zz);
            }
        }
Exemplo n.º 11
0
        public static void Twice(uint[] x, uint[] z)
        {
            uint c = Nat.ShiftUpBit(8, x, 0, z);

            if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P)))
            {
                Nat.Add33To(8, PInv33, z);
            }
        }
Exemplo n.º 12
0
 public static uint[] FromBigInteger(BigInteger x)
 {
     uint[] z = Nat256.FromBigInteger(x);
     while (Nat256.Gte(z, P))
     {
         Nat256.SubFrom(P, z);
     }
     return(z);
 }
Exemplo n.º 13
0
        public static void AddOne(uint[] x, uint[] z)
        {
            uint c = Nat.Inc(8, x, z);

            if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P)))
            {
                Nat.Add33To(8, PInv33, z);
            }
        }
Exemplo n.º 14
0
        public static void AddExt(uint[] xx, uint[] yy, uint[] zz)
        {
            uint c = Nat256.Add(xx, yy, zz);

            if (c != 0 || (zz[7] >= PExt7 && Nat256.Gte(zz, PExt)))
            {
                Nat.AddTo(PExtInv.Length, PExtInv, zz);
            }
        }
Exemplo n.º 15
0
 public static uint[] FromBigInteger(BigInteger x)
 {
     uint[] z = Nat256.FromBigInteger(x);
     if (z[7] == P7 && Nat256.Gte(z, P))
     {
         Nat256.SubFrom(P, z);
     }
     return(z);
 }
Exemplo n.º 16
0
 public static void Add(uint[] x, uint[] y, uint[] z)
 {
     Nat256.Add(x, y, z);
     if (Nat256.Gte(z, P))
     {
         Nat256.AddWord(PInv, z, 0);
         z[7] &= P7;
     }
 }
Exemplo n.º 17
0
 public static void Twice(uint[] x, uint[] z)
 {
     Nat256.ShiftUpBit(x, 0, z);
     if (Nat256.Gte(z, P))
     {
         Nat256.AddWord(PInv, z, 0);
         z[7] &= P7;
     }
 }
Exemplo n.º 18
0
        public static void AddOne(uint[] x, uint[] z)
        {
            Nat256.Copy(x, z);
            uint c = Nat256.Inc(z, 0);

            if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P)))
            {
                Nat256.Sub(z, P, z);
            }
        }
Exemplo n.º 19
0
 public static void AddOne(uint[] x, uint[] z)
 {
     Nat256.Copy(x, z);
     Nat256.Inc(z, 0);
     if (Nat256.Gte(z, P))
     {
         Nat256.AddWord(PInv, z, 0);
         z[7] &= P7;
     }
 }
Exemplo n.º 20
0
        public static void Reduce32(uint x, uint[] z)
        {
            uint c = Nat256.Mul33WordAdd(PInv33, x, z, 0);

            Debug.Assert(c == 0 || c == 1);

            if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P)))
            {
                Nat256.AddDWord(PInv, z, 0);
            }
        }
Exemplo n.º 21
0
        public static void Reduce(uint[] xx, uint[] z)
        {
            ulong cc = Nat256.Mul33Add(PInv33, xx, 8, xx, 0, z, 0);
            uint  c  = Nat256.Mul33DWordAdd(PInv33, cc, z, 0);

            Debug.Assert(c == 0 || c == 1);

            if (c != 0 || (z[7] == P7 && Nat256.Gte(z, P)))
            {
                Nat.Add33To(8, PInv33, z);
            }
        }
Exemplo n.º 22
0
        public static void Reduce32(uint x, uint[] z)
        {
            long cc = 0;

            if (x != 0)
            {
                long xx08 = x;

                cc  += (long)z[0] + xx08;
                z[0] = (uint)cc;
                cc >>= 32;
                if (cc != 0)
                {
                    cc  += (long)z[1];
                    z[1] = (uint)cc;
                    cc >>= 32;
                    cc  += (long)z[2];
                    z[2] = (uint)cc;
                    cc >>= 32;
                }
                cc  += (long)z[3] - xx08;
                z[3] = (uint)cc;
                cc >>= 32;
                if (cc != 0)
                {
                    cc  += (long)z[4];
                    z[4] = (uint)cc;
                    cc >>= 32;
                    cc  += (long)z[5];
                    z[5] = (uint)cc;
                    cc >>= 32;
                }
                cc  += (long)z[6] - xx08;
                z[6] = (uint)cc;
                cc >>= 32;
                cc  += (long)z[7] + xx08;
                z[7] = (uint)cc;
                cc >>= 32;

                Debug.Assert(cc == 0 || cc == 1);
            }

            if (cc != 0 || (z[7] == P7 && Nat256.Gte(z, P)))
            {
                AddPInvTo(z);
            }
        }
Exemplo n.º 23
0
        public static void Reduce(uint[] xx, uint[] z)
        {
            Debug.Assert(xx[15] >> 30 == 0);

            uint xx07 = xx[7];

            Nat.ShiftUpBit(8, xx, 8, xx07, z, 0);
            uint c   = Nat256.MulByWordAddTo(PInv, xx, z) << 1;
            uint z07 = z[7];

            z[7] = z07 & P7;
            c   += (z07 >> 31) - (xx07 >> 31);
            Nat.AddWordTo(8, c * PInv, z);
            if (Nat256.Gte(z, P))
            {
                AddPInvTo(z);
            }
        }
Exemplo n.º 24
0
        public static void Reduce32(uint x, uint[] z)
        {
            long num = 0L;

            if (x != 0)
            {
                long num2 = x;
                num  = ((long)((ulong)num)) + (z[0] + num2);
                z[0] = (uint)num;
                num  = num >> 0x20;
                if (num != 0L)
                {
                    num += z[1];
                    z[1] = (uint)num;
                    num  = num >> 0x20;
                    num += z[2];
                    z[2] = (uint)num;
                    num  = num >> 0x20;
                }
                num  = ((long)((ulong)num)) + (z[3] - num2);
                z[3] = (uint)num;
                num  = num >> 0x20;
                if (num != 0L)
                {
                    num += z[4];
                    z[4] = (uint)num;
                    num  = num >> 0x20;
                    num += z[5];
                    z[5] = (uint)num;
                    num  = num >> 0x20;
                }
                num  = ((long)((ulong)num)) + (z[6] - num2);
                z[6] = (uint)num;
                num  = num >> 0x20;
                num  = ((long)((ulong)num)) + (z[7] + num2);
                z[7] = (uint)num;
                num  = num >> 0x20;
            }
            if ((num != 0L) || ((z[7] == uint.MaxValue) && Nat256.Gte(z, P)))
            {
                AddPInvTo(z);
            }
        }
Exemplo n.º 25
0
        public static void Reduce32(uint x, uint[] z)
        {
            long num = 0L;

            if (x != 0u)
            {
                long num2 = (long)((ulong)x);
                num  += (long)((ulong)z[0] + (ulong)num2);
                z[0]  = (uint)num;
                num >>= 32;
                if (num != 0L)
                {
                    num  += (long)((ulong)z[1]);
                    z[1]  = (uint)num;
                    num >>= 32;
                    num  += (long)((ulong)z[2]);
                    z[2]  = (uint)num;
                    num >>= 32;
                }
                num  += (long)((ulong)z[3] - (ulong)num2);
                z[3]  = (uint)num;
                num >>= 32;
                if (num != 0L)
                {
                    num  += (long)((ulong)z[4]);
                    z[4]  = (uint)num;
                    num >>= 32;
                    num  += (long)((ulong)z[5]);
                    z[5]  = (uint)num;
                    num >>= 32;
                }
                num  += (long)((ulong)z[6] - (ulong)num2);
                z[6]  = (uint)num;
                num >>= 32;
                num  += (long)((ulong)z[7] + (ulong)num2);
                z[7]  = (uint)num;
                num >>= 32;
            }
            if (num != 0L || (z[7] == 4294967295u && Nat256.Gte(z, SecP256R1Field.P)))
            {
                SecP256R1Field.AddPInvTo(z);
            }
        }
Exemplo n.º 26
0
        public static void Reduce32(uint x, uint[] z)
        {
            long num = 0L;

            if (x != 0)
            {
                long num2 = x;
                num  += z[0] + num2;
                z[0]  = (uint)num;
                num >>= 32;
                if (num != 0L)
                {
                    num  += z[1];
                    z[1]  = (uint)num;
                    num >>= 32;
                    num  += z[2];
                    z[2]  = (uint)num;
                    num >>= 32;
                }
                num  += z[3] - num2;
                z[3]  = (uint)num;
                num >>= 32;
                if (num != 0L)
                {
                    num  += z[4];
                    z[4]  = (uint)num;
                    num >>= 32;
                    num  += z[5];
                    z[5]  = (uint)num;
                    num >>= 32;
                }
                num  += z[6] - num2;
                z[6]  = (uint)num;
                num >>= 32;
                num  += z[7] + num2;
                z[7]  = (uint)num;
                num >>= 32;
            }
            if (num != 0L || (z[7] == uint.MaxValue && Nat256.Gte(z, P)))
            {
                AddPInvTo(z);
            }
        }
Exemplo n.º 27
0
        public static void Reduce32(uint x, uint[] z)
        {
            long xx08 = x;

            long cc = 0;

            cc  += (long)z[0] + xx08;
            z[0] = (uint)cc;
            cc >>= 32;
            cc  += (long)z[1];
            z[1] = (uint)cc;
            cc >>= 32;
            cc  += (long)z[2];
            z[2] = (uint)cc;
            cc >>= 32;
            cc  += (long)z[3] - xx08;
            z[3] = (uint)cc;
            cc >>= 32;
            cc  += (long)z[4];
            z[4] = (uint)cc;
            cc >>= 32;
            cc  += (long)z[5];
            z[5] = (uint)cc;
            cc >>= 32;
            cc  += (long)z[6] - xx08;
            z[6] = (uint)cc;
            cc >>= 32;
            cc  += (long)z[7] + xx08;
            z[7] = (uint)cc;
            cc >>= 32;

            if (cc != 0 || (z[7] == P7 && Nat256.Gte(z, P)))
            {
                Nat256.Sub(z, P, z);
            }
        }
Exemplo n.º 28
0
 public static void Reduce32(uint x, uint[] z)
 {
     if ((x != 0 && Nat256.Mul33WordAdd(977u, x, z, 0) != 0) || (z[7] == uint.MaxValue && Nat256.Gte(z, P)))
     {
         Nat.Add33To(8, 977u, z);
     }
 }
Exemplo n.º 29
0
        public static void Reduce(uint[] xx, uint[] z)
        {
            ulong y = Nat256.Mul33Add(0x3d1, xx, 8, xx, 0, z, 0);

            if ((Nat256.Mul33DWordAdd(0x3d1, y, z, 0) != 0) || ((z[7] == uint.MaxValue) && Nat256.Gte(z, P)))
            {
                Nat.Add33To(8, 0x3d1, z);
            }
        }
Exemplo n.º 30
0
 public static void Reduce32(uint x, uint[] z)
 {
     if (((x != 0) && (Nat256.Mul33WordAdd(0x3d1, x, z, 0) != 0)) || ((z[7] == uint.MaxValue) && Nat256.Gte(z, P)))
     {
         Nat.Add33To(8, 0x3d1, z);
     }
 }