private static bool TrySqrt(uint[] nc, uint[] r, uint[] t)
        {
            uint[] d1 = Nat224.Create();
            Nat224.Copy(r, d1);
            uint[] e1 = Nat224.Create();
            e1[0] = 1;
            uint[] f1 = Nat224.Create();
            RP(nc, d1, e1, f1, t);

            uint[] d0 = Nat224.Create();
            uint[] e0 = Nat224.Create();

            for (int k = 1; k < 96; ++k)
            {
                Nat224.Copy(d1, d0);
                Nat224.Copy(e1, e0);

                RS(d1, e1, f1, t);

                if (Nat224.IsZero(d1))
                {
                    SecP224R1Field.Inv(e0, t);
                    SecP224R1Field.Multiply(t, d0, t);
                    return(true);
                }
            }

            return(false);
        }
 public override ECFieldElement Invert()
 {
     //return new SecP224R1FieldElement(ToBigInteger().ModInverse(Q));
     uint[] z = Nat224.Create();
     SecP224R1Field.Inv(x, z);
     return(new SecP224R1FieldElement(z));
 }
 public override ECFieldElement Divide(ECFieldElement b)
 {
     //return Multiply(b.Invert());
     uint[] z = Nat224.Create();
     SecP224R1Field.Inv(((SecP224R1FieldElement)b).x, z);
     SecP224R1Field.Multiply(z, x, z);
     return(new SecP224R1FieldElement(z));
 }