예제 #1
0
 public static void Subtract(uint[] x, uint[] y, uint[] z)
 {
     if (Nat256.Sub(x, y, z) != 0)
     {
         Nat.Sub33From(8, 0x3d1, z);
     }
 }
예제 #2
0
 public static void Subtract(uint[] x, uint[] y, uint[] z)
 {
     if (Nat256.Sub(x, y, z) != 0)
     {
         SubPInvFrom(z);
     }
 }
예제 #3
0
        public static void Subtract(uint[] x, uint[] y, uint[] z)
        {
            int c = Nat256.Sub(x, y, z);

            if (c != 0)
            {
                Nat.Sub33From(8, PInv33, z);
            }
        }
예제 #4
0
        public static void Subtract(uint[] x, uint[] y, uint[] z)
        {
            int num = Nat256.Sub(x, y, z);

            if (num != 0)
            {
                Nat.Sub33From(8, 977u, z);
            }
        }
예제 #5
0
 public static void Negate(uint[] x, uint[] z)
 {
     if (Nat256.IsZero(x))
     {
         Nat256.Zero(z);
         return;
     }
     Nat256.Sub(SecP256K1Field.P, x, z);
 }
예제 #6
0
 public static uint[] FromBigInteger(BigInteger x)
 {
     uint[] z = Nat256.FromBigInteger(x);
     if (z[7] == P7 && Nat256.Gte(z, P))
     {
         Nat256.Sub(z, P, z);
     }
     return(z);
 }
예제 #7
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);
            }
        }
예제 #8
0
        public static void Subtract(uint[] x, uint[] y, uint[] z)
        {
            int c = Nat256.Sub(x, y, z);

            if (c != 0)
            {
                Nat256.Add(z, P, z);
            }
        }
예제 #9
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.Sub(z, P, z);
            }
        }
예제 #10
0
        public static void Subtract(uint[] x, uint[] y, uint[] z)
        {
            int num = Nat256.Sub(x, y, z);

            if (num != 0)
            {
                SecP256R1Field.SubPInvFrom(z);
            }
        }
예제 #11
0
        public static void Subtract(uint[] x, uint[] y, uint[] z)
        {
            int c = Nat256.Sub(x, y, z);

            if (c != 0)
            {
                Nat256.SubDWord(PInv, z);
            }
        }
예제 #12
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);
            }
        }
예제 #13
0
 public static void Negate(uint[] x, uint[] z)
 {
     if (Nat256.IsZero(x))
     {
         Nat256.Zero(z);
     }
     else
     {
         Nat256.Sub(P, x, z);
     }
 }
예제 #14
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);
            }
        }