public static void Twice(uint[] x, uint[] z)
 {
     if (Nat.ShiftUpBit(6, x, 0u, z) != 0 || (z[5] == uint.MaxValue && Nat192.Gte(z, P)))
     {
         AddPInvTo(z);
     }
 }
 public static void Add(uint[] x, uint[] y, uint[] z)
 {
     if (Nat192.Add(x, y, z) != 0 || (z[5] == uint.MaxValue && Nat192.Gte(z, P)))
     {
         AddPInvTo(z);
     }
 }
Exemple #3
0
        public static void Reduce32(uint x, uint[] z)
        {
            ulong cc = 0;

            if (x != 0)
            {
                cc  += (ulong)z[0] + x;
                z[0] = (uint)cc;
                cc >>= 32;
                if (cc != 0)
                {
                    cc  += (ulong)z[1];
                    z[1] = (uint)cc;
                    cc >>= 32;
                }
                cc  += (ulong)z[2] + x;
                z[2] = (uint)cc;
                cc >>= 32;

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

            if ((cc != 0 && Nat.IncAt(6, z, 3) != 0) ||
                (z[5] == P5 && Nat192.Gte(z, P)))
            {
                AddPInvTo(z);
            }
        }
 public static void AddOne(uint[] x, uint[] z)
 {
     if (Nat.Inc(6, x, z) != 0 || (z[5] == uint.MaxValue && Nat192.Gte(z, P)))
     {
         Nat.Add33To(6, 4553u, z);
     }
 }
 public static void AddOne(uint[] x, uint[] z)
 {
     if (Nat.Inc(6, x, z) != 0 || (z[5] == uint.MaxValue && Nat192.Gte(z, P)))
     {
         AddPInvTo(z);
     }
 }
Exemple #6
0
 public static void Reduce32(uint x, uint[] z)
 {
     if ((x != 0 && Nat192.Mul33WordAdd(PInv33, x, z, 0) != 0) ||
         (z[5] == P5 && Nat192.Gte(z, P)))
     {
         Nat.Add33To(6, PInv33, z);
     }
 }
 public static uint[] FromBigInteger(BigInteger x)
 {
     uint[] array = Nat192.FromBigInteger(x);
     if (array[5] == uint.MaxValue && Nat192.Gte(array, P))
     {
         Nat192.SubFrom(P, array);
     }
     return(array);
 }
Exemple #8
0
 public static uint[] FromBigInteger(BigInteger x)
 {
     uint[] z = Nat192.FromBigInteger(x);
     if (z[5] == P5 && Nat192.Gte(z, P))
     {
         Nat192.SubFrom(P, z);
     }
     return(z);
 }
Exemple #9
0
        public static void AddOne(uint[] x, uint[] z)
        {
            uint c = Nat.Inc(6, x, z);

            if (c != 0 || (z[5] == P5 && Nat192.Gte(z, P)))
            {
                Nat.Add33To(6, PInv33, z);
            }
        }
    public static void Reduce(uint[] xx, uint[] z)
    {
        ulong y = Nat192.Mul33Add(4553u, xx, 6, xx, 0, z, 0);

        if (Nat192.Mul33DWordAdd(4553u, y, z, 0) != 0 || (z[5] == uint.MaxValue && Nat192.Gte(z, P)))
        {
            Nat.Add33To(6, 4553u, z);
        }
    }
Exemple #11
0
        public static void Add(uint[] x, uint[] y, uint[] z)
        {
            uint c = Nat192.Add(x, y, z);

            if (c != 0 || (z[5] == P5 && Nat192.Gte(z, P)))
            {
                AddPInvTo(z);
            }
        }
Exemple #12
0
        public static void Twice(uint[] x, uint[] z)
        {
            uint c = Nat.ShiftUpBit(6, x, 0, z);

            if (c != 0 || (z[5] == P5 && Nat192.Gte(z, P)))
            {
                Nat.Add33To(6, PInv33, z);
            }
        }
    public static void Reduce(uint[] xx, uint[] z)
    {
        ulong num  = xx[6];
        ulong num2 = xx[7];
        ulong num3 = xx[8];
        ulong num4 = xx[9];
        ulong num5 = xx[10];
        ulong num6 = xx[11];
        ulong num7 = num + num5;
        ulong num8 = num2 + num6;
        ulong num9 = 0uL;

        num9 += xx[0] + num7;
        uint num10 = (uint)num9;

        num9 >>= 32;
        num9  += xx[1] + num8;
        z[1]   = (uint)num9;
        num9 >>= 32;
        num7  += num3;
        num8  += num4;
        num9  += xx[2] + num7;
        ulong num11 = (uint)num9;

        num9 >>= 32;
        num9  += xx[3] + num8;
        z[3]   = (uint)num9;
        num9 >>= 32;
        num7  -= num;
        num8  -= num2;
        num9  += xx[4] + num7;
        z[4]   = (uint)num9;
        num9 >>= 32;
        num9  += xx[5] + num8;
        z[5]   = (uint)num9;
        num9 >>= 32;
        num11 += num9;
        num9  += num10;
        z[0]   = (uint)num9;
        num9 >>= 32;
        if (num9 != 0)
        {
            num9  += z[1];
            z[1]   = (uint)num9;
            num11 += num9 >> 32;
        }
        z[2] = (uint)num11;
        num9 = num11 >> 32;
        if ((num9 != 0 && Nat.IncAt(6, z, 3) != 0) || (z[5] == uint.MaxValue && Nat192.Gte(z, P)))
        {
            AddPInvTo(z);
        }
    }
Exemple #14
0
        public static void Reduce(uint[] xx, uint[] z)
        {
            ulong cc = Nat192.Mul33Add(PInv33, xx, 6, xx, 0, z, 0);
            uint  c  = Nat192.Mul33DWordAdd(PInv33, cc, z, 0);

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

            if (c != 0 || (z[5] == P5 && Nat192.Gte(z, P)))
            {
                Nat.Add33To(6, PInv33, z);
            }
        }
    public static void Reduce32(uint x, uint[] z)
    {
        ulong num = 0uL;

        if (x != 0)
        {
            num   = (ulong)((long)num + ((long)z[0] + (long)x));
            z[0]  = (uint)num;
            num >>= 32;
            if (num != 0)
            {
                num  += z[1];
                z[1]  = (uint)num;
                num >>= 32;
            }
            num   = (ulong)((long)num + ((long)z[2] + (long)x));
            z[2]  = (uint)num;
            num >>= 32;
        }
        if ((num != 0 && Nat.IncAt(6, z, 3) != 0) || (z[5] == uint.MaxValue && Nat192.Gte(z, P)))
        {
            AddPInvTo(z);
        }
    }
Exemple #16
0
        public static void Reduce(uint[] xx, uint[] z)
        {
            ulong xx06 = xx[6], xx07 = xx[7], xx08 = xx[8];
            ulong xx09 = xx[9], xx10 = xx[10], xx11 = xx[11];

            ulong t0 = xx06 + xx10;
            ulong t1 = xx07 + xx11;

            ulong cc = 0;

            cc += (ulong)xx[0] + t0;
            uint z0 = (uint)cc;

            cc >>= 32;
            cc  += (ulong)xx[1] + t1;
            z[1] = (uint)cc;
            cc >>= 32;

            t0 += xx08;
            t1 += xx09;

            cc += (ulong)xx[2] + t0;
            ulong z2 = (uint)cc;

            cc >>= 32;
            cc  += (ulong)xx[3] + t1;
            z[3] = (uint)cc;
            cc >>= 32;

            t0 -= xx06;
            t1 -= xx07;

            cc  += (ulong)xx[4] + t0;
            z[4] = (uint)cc;
            cc >>= 32;
            cc  += (ulong)xx[5] + t1;
            z[5] = (uint)cc;
            cc >>= 32;

            z2 += cc;

            cc  += z0;
            z[0] = (uint)cc;
            cc >>= 32;
            if (cc != 0)
            {
                cc  += z[1];
                z[1] = (uint)cc;
                z2  += cc >> 32;
            }
            z[2] = (uint)z2;
            cc   = z2 >> 32;

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

            if ((cc != 0 && Nat.IncAt(6, z, 3) != 0) ||
                (z[5] == P5 && Nat192.Gte(z, P)))
            {
                AddPInvTo(z);
            }
        }
 public static void Reduce32(uint x, uint[] z)
 {
     if ((x != 0 && Nat192.Mul33WordAdd(4553u, x, z, 0) != 0) || (z[5] == uint.MaxValue && Nat192.Gte(z, P)))
     {
         Nat.Add33To(6, 4553u, z);
     }
 }