public override ECPoint Twice() { if (base.IsInfinity) { return(this); } ECCurve curve = Curve; ECFieldElement rawXCoord = base.RawXCoord; if (!rawXCoord.IsZero) { switch (curve.CoordinateSystem) { case 0: { ECFieldElement rawYCoord2 = base.RawYCoord; ECFieldElement eCFieldElement11 = rawYCoord2.Divide(rawXCoord).Add(rawXCoord); ECFieldElement x = eCFieldElement11.Square().Add(eCFieldElement11).Add(curve.A); ECFieldElement y = rawXCoord.SquarePlusProduct(x, eCFieldElement11.AddOne()); return(new F2mPoint(curve, x, y, base.IsCompressed)); } case 1: { ECFieldElement rawYCoord3 = base.RawYCoord; ECFieldElement eCFieldElement12 = base.RawZCoords[0]; bool isOne2 = eCFieldElement12.IsOne; ECFieldElement eCFieldElement13 = (!isOne2) ? rawXCoord.Multiply(eCFieldElement12) : rawXCoord; ECFieldElement b3 = (!isOne2) ? rawYCoord3.Multiply(eCFieldElement12) : rawYCoord3; ECFieldElement eCFieldElement14 = rawXCoord.Square(); ECFieldElement eCFieldElement15 = eCFieldElement14.Add(b3); ECFieldElement eCFieldElement16 = eCFieldElement13; ECFieldElement eCFieldElement17 = eCFieldElement16.Square(); ECFieldElement eCFieldElement18 = eCFieldElement15.Add(eCFieldElement16); ECFieldElement eCFieldElement19 = eCFieldElement18.MultiplyPlusProduct(eCFieldElement15, eCFieldElement17, curve.A); ECFieldElement x2 = eCFieldElement16.Multiply(eCFieldElement19); ECFieldElement y2 = eCFieldElement14.Square().MultiplyPlusProduct(eCFieldElement16, eCFieldElement19, eCFieldElement18); ECFieldElement eCFieldElement20 = eCFieldElement16.Multiply(eCFieldElement17); return(new F2mPoint(curve, x2, y2, new ECFieldElement[1] { eCFieldElement20 }, base.IsCompressed)); } case 6: { ECFieldElement rawYCoord = base.RawYCoord; ECFieldElement eCFieldElement = base.RawZCoords[0]; bool isOne = eCFieldElement.IsOne; ECFieldElement eCFieldElement2 = (!isOne) ? rawYCoord.Multiply(eCFieldElement) : rawYCoord; ECFieldElement eCFieldElement3 = (!isOne) ? eCFieldElement.Square() : eCFieldElement; ECFieldElement a = curve.A; ECFieldElement eCFieldElement4 = (!isOne) ? a.Multiply(eCFieldElement3) : a; ECFieldElement eCFieldElement5 = rawYCoord.Square().Add(eCFieldElement2).Add(eCFieldElement4); if (eCFieldElement5.IsZero) { return(new F2mPoint(curve, eCFieldElement5, curve.B.Sqrt(), base.IsCompressed)); } ECFieldElement eCFieldElement6 = eCFieldElement5.Square(); ECFieldElement eCFieldElement7 = (!isOne) ? eCFieldElement5.Multiply(eCFieldElement3) : eCFieldElement5; ECFieldElement b = curve.B; ECFieldElement eCFieldElement9; if (b.BitLength < curve.FieldSize >> 1) { ECFieldElement eCFieldElement8 = rawYCoord.Add(rawXCoord).Square(); ECFieldElement b2 = (!b.IsOne) ? eCFieldElement4.SquarePlusProduct(b, eCFieldElement3.Square()) : eCFieldElement4.Add(eCFieldElement3).Square(); eCFieldElement9 = eCFieldElement8.Add(eCFieldElement5).Add(eCFieldElement3).Multiply(eCFieldElement8) .Add(b2) .Add(eCFieldElement6); if (a.IsZero) { eCFieldElement9 = eCFieldElement9.Add(eCFieldElement7); } else if (!a.IsOne) { eCFieldElement9 = eCFieldElement9.Add(a.AddOne().Multiply(eCFieldElement7)); } } else { ECFieldElement eCFieldElement10 = (!isOne) ? rawXCoord.Multiply(eCFieldElement) : rawXCoord; eCFieldElement9 = eCFieldElement10.SquarePlusProduct(eCFieldElement5, eCFieldElement2).Add(eCFieldElement6).Add(eCFieldElement7); } return(new F2mPoint(curve, eCFieldElement6, eCFieldElement9, new ECFieldElement[1] { eCFieldElement7 }, base.IsCompressed)); } default: throw new InvalidOperationException("unsupported coordinate system"); } } return(curve.Infinity); }
protected override bool SatisfiesCurveEquation() { //IL_0167: Unknown result type (might be due to invalid IL or missing references) ECCurve curve = Curve; ECFieldElement rawXCoord = base.RawXCoord; ECFieldElement rawYCoord = base.RawYCoord; ECFieldElement eCFieldElement = curve.A; ECFieldElement eCFieldElement2 = curve.B; int coordinateSystem = curve.CoordinateSystem; ECFieldElement eCFieldElement5; ECFieldElement eCFieldElement4; if (coordinateSystem == 6) { ECFieldElement eCFieldElement3 = base.RawZCoords[0]; bool isOne = eCFieldElement3.IsOne; if (rawXCoord.IsZero) { eCFieldElement4 = rawYCoord.Square(); eCFieldElement5 = eCFieldElement2; if (!isOne) { ECFieldElement b = eCFieldElement3.Square(); eCFieldElement5 = eCFieldElement5.Multiply(b); } } else { ECFieldElement eCFieldElement6 = rawYCoord; ECFieldElement eCFieldElement7 = rawXCoord.Square(); if (isOne) { eCFieldElement4 = eCFieldElement6.Square().Add(eCFieldElement6).Add(eCFieldElement); eCFieldElement5 = eCFieldElement7.Square().Add(eCFieldElement2); } else { ECFieldElement eCFieldElement8 = eCFieldElement3.Square(); ECFieldElement y = eCFieldElement8.Square(); eCFieldElement4 = eCFieldElement6.Add(eCFieldElement3).MultiplyPlusProduct(eCFieldElement6, eCFieldElement, eCFieldElement8); eCFieldElement5 = eCFieldElement7.SquarePlusProduct(eCFieldElement2, y); } eCFieldElement4 = eCFieldElement4.Multiply(eCFieldElement7); } } else { eCFieldElement4 = rawYCoord.Add(rawXCoord).Multiply(rawYCoord); switch (coordinateSystem) { case 1: { ECFieldElement eCFieldElement9 = base.RawZCoords[0]; if (!eCFieldElement9.IsOne) { ECFieldElement b2 = eCFieldElement9.Square(); ECFieldElement b3 = eCFieldElement9.Multiply(b2); eCFieldElement4 = eCFieldElement4.Multiply(eCFieldElement9); eCFieldElement = eCFieldElement.Multiply(eCFieldElement9); eCFieldElement2 = eCFieldElement2.Multiply(b3); } break; } default: throw new InvalidOperationException("unsupported coordinate system"); case 0: break; } eCFieldElement5 = rawXCoord.Add(eCFieldElement).Multiply(rawXCoord.Square()).Add(eCFieldElement2); } return(eCFieldElement4.Equals(eCFieldElement5)); }
public override ECPoint Twice() { ECFieldElement element26; ECFieldElement element27; ECFieldElement element29; if (base.IsInfinity) { return(this); } ECCurve curve = this.Curve; ECFieldElement rawXCoord = base.RawXCoord; if (rawXCoord.IsZero) { return(curve.Infinity); } switch (curve.CoordinateSystem) { case 0: { ECFieldElement b = base.RawYCoord.Divide(rawXCoord).Add(rawXCoord); ECFieldElement x = b.Square().Add(b).Add(curve.A); return(new F2mPoint(curve, x, rawXCoord.SquarePlusProduct(x, b.AddOne()), base.IsCompressed)); } case 1: { ECFieldElement rawYCoord = base.RawYCoord; ECFieldElement b = base.RawZCoords[0]; bool isOne = b.IsOne; ECFieldElement element8 = !isOne?rawXCoord.Multiply(b) : rawXCoord; ECFieldElement element9 = !isOne?rawYCoord.Multiply(b) : rawYCoord; ECFieldElement element10 = rawXCoord.Square(); ECFieldElement element11 = element10.Add(element9); ECFieldElement element12 = element8; ECFieldElement x = element12.Square(); ECFieldElement y = element11.Add(element12); ECFieldElement element15 = y.MultiplyPlusProduct(element11, x, curve.A); ECFieldElement element16 = element12.Multiply(element15); ECFieldElement element17 = element10.Square().MultiplyPlusProduct(element12, element15, y); ECFieldElement element18 = element12.Multiply(x); return(new F2mPoint(curve, element16, element17, new ECFieldElement[] { element18 }, base.IsCompressed)); } case 6: { ECFieldElement element31; ECFieldElement rawYCoord = base.RawYCoord; ECFieldElement b = base.RawZCoords[0]; bool isOne = b.IsOne; ECFieldElement element21 = !isOne?rawYCoord.Multiply(b) : rawYCoord; ECFieldElement element22 = !isOne?b.Square() : b; ECFieldElement a = curve.A; ECFieldElement element24 = !isOne?a.Multiply(element22) : a; ECFieldElement x = rawYCoord.Square().Add(element21).Add(element24); if (x.IsZero) { return(new F2mPoint(curve, x, curve.B.Sqrt(), base.IsCompressed)); } element26 = x.Square(); element27 = !isOne?x.Multiply(element22) : x; ECFieldElement element28 = curve.B; if (element28.BitLength >= (curve.FieldSize >> 1)) { ECFieldElement element32 = !isOne?rawXCoord.Multiply(b) : rawXCoord; element29 = element32.SquarePlusProduct(x, element21).Add(element26).Add(element27); break; } ECFieldElement element30 = rawYCoord.Add(rawXCoord).Square(); if (element28.IsOne) { element31 = element24.Add(element22).Square(); } else { element31 = element24.SquarePlusProduct(element28, element22.Square()); } element29 = element30.Add(x).Add(element22).Multiply(element30).Add(element31).Add(element26); if (a.IsZero) { element29 = element29.Add(element27); } else if (!a.IsOne) { element29 = element29.Add(a.AddOne().Multiply(element27)); } break; } default: throw new InvalidOperationException("unsupported coordinate system"); } return(new F2mPoint(curve, element26, element29, new ECFieldElement[] { element27 }, base.IsCompressed)); }
protected override bool SatisfiesCurveEquation() { ECFieldElement element5; ECFieldElement element6; ECCurve curve = this.Curve; ECFieldElement rawXCoord = base.RawXCoord; ECFieldElement rawYCoord = base.RawYCoord; ECFieldElement a = curve.A; ECFieldElement b = curve.B; int coordinateSystem = curve.CoordinateSystem; if (coordinateSystem == 6) { ECFieldElement element7 = base.RawZCoords[0]; bool isOne = element7.IsOne; if (rawXCoord.IsZero) { element5 = rawYCoord.Square(); element6 = b; if (!isOne) { ECFieldElement element8 = element7.Square(); element6 = element6.Multiply(element8); } } else { ECFieldElement element9 = rawYCoord; ECFieldElement element10 = rawXCoord.Square(); if (isOne) { element5 = element9.Square().Add(element9).Add(a); element6 = element10.Square().Add(b); } else { ECFieldElement y = element7.Square(); ECFieldElement element12 = y.Square(); element5 = element9.Add(element7).MultiplyPlusProduct(element9, a, y); element6 = element10.SquarePlusProduct(b, element12); } element5 = element5.Multiply(element10); } } else { element5 = rawYCoord.Add(rawXCoord).Multiply(rawYCoord); if (coordinateSystem != 0) { if (coordinateSystem != 1) { throw new InvalidOperationException("unsupported coordinate system"); } ECFieldElement element13 = base.RawZCoords[0]; if (!element13.IsOne) { ECFieldElement element14 = element13.Square(); ECFieldElement element15 = element13.Multiply(element14); element5 = element5.Multiply(element13); a = a.Multiply(element13); b = b.Multiply(element15); } } element6 = rawXCoord.Add(a).Multiply(rawXCoord.Square()).Add(b); } return(element5.Equals(element6)); }
public override ECPoint Twice() { if (base.IsInfinity) { return(this); } ECCurve curve = this.Curve; ECFieldElement rawXCoord = base.RawXCoord; if (rawXCoord.IsZero) { return(curve.Infinity); } int coordinateSystem = curve.CoordinateSystem; int num = coordinateSystem; switch (num) { case 0: { ECFieldElement rawYCoord = base.RawYCoord; ECFieldElement eCFieldElement = rawYCoord.Divide(rawXCoord).Add(rawXCoord); ECFieldElement x = eCFieldElement.Square().Add(eCFieldElement).Add(curve.A); ECFieldElement y = rawXCoord.SquarePlusProduct(x, eCFieldElement.AddOne()); return(new F2mPoint(curve, x, y, base.IsCompressed)); } case 1: { ECFieldElement rawYCoord2 = base.RawYCoord; ECFieldElement eCFieldElement2 = base.RawZCoords[0]; bool isOne = eCFieldElement2.IsOne; ECFieldElement eCFieldElement3 = isOne ? rawXCoord : rawXCoord.Multiply(eCFieldElement2); ECFieldElement b = isOne ? rawYCoord2 : rawYCoord2.Multiply(eCFieldElement2); ECFieldElement eCFieldElement4 = rawXCoord.Square(); ECFieldElement eCFieldElement5 = eCFieldElement4.Add(b); ECFieldElement eCFieldElement6 = eCFieldElement3; ECFieldElement eCFieldElement7 = eCFieldElement6.Square(); ECFieldElement eCFieldElement8 = eCFieldElement5.Add(eCFieldElement6); ECFieldElement eCFieldElement9 = eCFieldElement8.MultiplyPlusProduct(eCFieldElement5, eCFieldElement7, curve.A); ECFieldElement x2 = eCFieldElement6.Multiply(eCFieldElement9); ECFieldElement y2 = eCFieldElement4.Square().MultiplyPlusProduct(eCFieldElement6, eCFieldElement9, eCFieldElement8); ECFieldElement eCFieldElement10 = eCFieldElement6.Multiply(eCFieldElement7); return(new F2mPoint(curve, x2, y2, new ECFieldElement[] { eCFieldElement10 }, base.IsCompressed)); } default: { if (num != 6) { throw new InvalidOperationException("unsupported coordinate system"); } ECFieldElement rawYCoord3 = base.RawYCoord; ECFieldElement eCFieldElement11 = base.RawZCoords[0]; bool isOne2 = eCFieldElement11.IsOne; ECFieldElement eCFieldElement12 = isOne2 ? rawYCoord3 : rawYCoord3.Multiply(eCFieldElement11); ECFieldElement eCFieldElement13 = isOne2 ? eCFieldElement11 : eCFieldElement11.Square(); ECFieldElement a = curve.A; ECFieldElement eCFieldElement14 = isOne2 ? a : a.Multiply(eCFieldElement13); ECFieldElement eCFieldElement15 = rawYCoord3.Square().Add(eCFieldElement12).Add(eCFieldElement14); if (eCFieldElement15.IsZero) { return(new F2mPoint(curve, eCFieldElement15, curve.B.Sqrt(), base.IsCompressed)); } ECFieldElement eCFieldElement16 = eCFieldElement15.Square(); ECFieldElement eCFieldElement17 = isOne2 ? eCFieldElement15 : eCFieldElement15.Multiply(eCFieldElement13); ECFieldElement b2 = curve.B; ECFieldElement eCFieldElement19; if (b2.BitLength < curve.FieldSize >> 1) { ECFieldElement eCFieldElement18 = rawYCoord3.Add(rawXCoord).Square(); ECFieldElement b3; if (b2.IsOne) { b3 = eCFieldElement14.Add(eCFieldElement13).Square(); } else { b3 = eCFieldElement14.SquarePlusProduct(b2, eCFieldElement13.Square()); } eCFieldElement19 = eCFieldElement18.Add(eCFieldElement15).Add(eCFieldElement13).Multiply(eCFieldElement18).Add(b3).Add(eCFieldElement16); if (a.IsZero) { eCFieldElement19 = eCFieldElement19.Add(eCFieldElement17); } else if (!a.IsOne) { eCFieldElement19 = eCFieldElement19.Add(a.AddOne().Multiply(eCFieldElement17)); } } else { ECFieldElement eCFieldElement20 = isOne2 ? rawXCoord : rawXCoord.Multiply(eCFieldElement11); eCFieldElement19 = eCFieldElement20.SquarePlusProduct(eCFieldElement15, eCFieldElement12).Add(eCFieldElement16).Add(eCFieldElement17); } return(new F2mPoint(curve, eCFieldElement16, eCFieldElement19, new ECFieldElement[] { eCFieldElement17 }, base.IsCompressed)); } } }