internal FPoint AddS(FPoint b) { if (this.IsInfinity) { return(b); } if (b.IsInfinity) { return(this); } FieldElement x2 = (FieldElement)b.X; FieldElement y2 = (FieldElement)b.Y; if (this.x.Equals(x2)) { if (this.y.Equals(y2)) { return((FPoint)this.Twice()); } return((FPoint)this.curve.Infinity); } ECFieldElement xSum = this.x.Add(x2); FieldElement lambda = (FieldElement)(this.y.Add(y2)).Divide(xSum); FieldElement x3 = (FieldElement)lambda.Square().Add(lambda).Add(xSum).Add(this.curve.A); FieldElement y3 = (FieldElement)lambda.Multiply(this.x.Add(x3)).Add(x3).Add(this.y); return(new FPoint(curve, x3, y3)); }
static FieldElement halfTrace(FieldElement x) { int m = 163; FieldElement t = x; for (int i = 1; i <= ((m - 1) / 2); i++) { t = (FieldElement)t.Square().Square().Add(x); } return(t); }
static FieldElement trace(FieldElement x) { int m = 163; FieldElement t = x; for (int i = 1; i < m; i++) { t = (FieldElement)t.Square().Add(x); } return(t); }