public void TestClone() { var p = new CurvePoint(5, 5); var q = p.Clone(); Assert.AreNotSame(p, q); Assert.AreEqual(p, q); }
public void TestAddDoublePoint() { var curve = TestCurveParameters.WeierstrassParameters.Equation; var p = new CurvePoint(5, 5); var other = p.Clone(); var expectedQ = new CurvePoint(15, 14); var q = curve.Add(p, other); Assert.AreEqual(expectedQ, q); }
public void TestEquals() { var p = new CurvePoint(11, 0); var q = new CurvePoint(3, 4); Assert.AreEqual(p, p, "same"); Assert.AreEqual(p, p.Clone(), "equal"); Assert.AreEqual(CurvePoint.PointAtInfinity, CurvePoint.PointAtInfinity, "at inf"); Assert.AreNotEqual(p, q, "not equal"); Assert.AreNotEqual(q, p, "not equal reversed"); }
public void TestAreNegationsFalseForEqualPoint() { var equation = new Mock <CurveEquation>( BigPrime.CreateWithoutChecks(23), BigInteger.Zero, BigInteger.One ) { CallBase = true }; var testElement = new CurvePoint(5, 5); var otherElement = testElement.Clone(); Assert.IsFalse(equation.Object.AreNegations(testElement, otherElement)); }
/// <inheritdoc/> public override CurvePoint Add(CurvePoint left, CurvePoint right) { BigInteger x1 = left.X; BigInteger x2 = right.X; BigInteger y1 = left.Y; BigInteger y2 = right.Y; BigInteger lambda; if (left.Equals(right)) { lambda = Field.Mod((3 * Field.Square(x1) + 2 * A * x1 + 1) * Field.InvertMult(2 * B * y1)); } else { lambda = Field.Mod((y2 - y1) * Field.InvertMult(x2 - x1)); } BigInteger x3 = Field.Mod(B * Field.Square(lambda) - x1 - x2 - A); BigInteger y3 = Field.Mod(lambda * (x1 - x3) - y1); CurvePoint result = CurvePoint.PointAtInfinity; bool pointsAreNegations = AreNegations(left, right); if (left.IsAtInfinity && right.IsAtInfinity) { result = CurvePoint.PointAtInfinity; } if (left.IsAtInfinity && !right.IsAtInfinity) { result = right.Clone(); } if (right.IsAtInfinity && !left.IsAtInfinity) { result = left.Clone(); } if (!left.IsAtInfinity && !right.IsAtInfinity && pointsAreNegations) { result = CurvePoint.PointAtInfinity; } if (!left.IsAtInfinity && !right.IsAtInfinity && !pointsAreNegations) { result = new CurvePoint(x3, y3); } return(result); }