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)); }