Beispiel #1
0
        public CurveGroupAlgebraTests()
        {
            curveEquationMock = new Mock <CurveEquation>(
                BigPrime.CreateWithoutChecks(23),
                BigInteger.Zero,
                BigInteger.One
                )
            {
                CallBase = true
            };
            curveParameters = new CurveParameters(
                curveEquation: curveEquationMock.Object,
                generator: TestCurveParameters.WeierstrassParameters.Generator,
                order: TestCurveParameters.WeierstrassParameters.Order,
                cofactor: TestCurveParameters.WeierstrassParameters.Cofactor
                );

            largeCurveEquationMock = new Mock <CurveEquation>(
                BigPrime.CreateWithoutChecks(18392027),
                BigInteger.Zero,
                BigInteger.One
                )
            {
                CallBase = true
            };                      // 25 bits prime
            largeParameters = new CurveParameters(
                curveEquation: largeCurveEquationMock.Object,
                generator: new CurvePoint(),
                order: BigPrime.CreateWithoutChecks(2),
                cofactor: BigInteger.One
                );
        }
        public void TestEqualsIsFalseForUnrelatedObject()
        {
            var             order      = BigPrime.CreateWithoutChecks(7);
            var             cofactor   = new BigInteger(2);
            var             generator  = CurvePoint.PointAtInfinity;
            CurveParameters parameters = new CurveParameters(
                equationMock.Object, generator, order, cofactor
                );

            Assert.AreNotEqual(parameters, new object());
        }
 /// <summary>
 /// Initializes a new instance of <see cref="XOnlyMontgomeryCurveAlgebra"/>
 /// with given curve parameters.
 /// </summary>
 /// <param name="parameters">The parameters of the elliptic curve.</param>
 public XOnlyMontgomeryCurveAlgebra(CurveParameters parameters)
     : base(
         parameters.Generator.X,
         parameters.Order,
         parameters.Cofactor,
         BigInteger.Zero,
         NumberLength.GetLength(parameters.Equation.Field.Modulo).InBits
         )
 {
     _parameters = parameters;
     _aConstant  = Field.Mod((_parameters.Equation.A + 2) * Field.InvertMult(4));
 }
Beispiel #4
0
 public XOnlyMontgomeryCurveAlgebraTests()
 {
     largeParameters = new CurveParameters(
         curveEquation: new MontgomeryCurveEquation(
             prime: BigPrime.CreateWithoutChecks(18392027),     // 25 bits
             a: 0, b: 0
             ),
         generator: CurvePoint.PointAtInfinity,
         order: BigPrime.CreateWithoutChecks(3),
         cofactor: 1
         );
 }
        public void TestInvalidElementRejectedAsGenerator()
        {
            var             invalidGenerator  = new CurvePoint(16, 1);
            CurveParameters invalidParameters = new CurveParameters(
                curveEquation: TestCurveParameters.WeierstrassParameters.Equation,
                generator: invalidGenerator,
                order: curveParameters.Order,
                cofactor: curveParameters.Cofactor
                );

            Assert.Throws <ArgumentException>(
                () => new CurveGroupAlgebra(invalidParameters)
                );
        }
Beispiel #6
0
        public void TestIsElementForPointAtInfinityCofactorOne()
        {
            var parameters = new CurveParameters(
                curveParameters.Equation,
                curveParameters.Generator,
                curveParameters.Order,
                BigInteger.One
                );
            var curve = new CurveGroupAlgebra(parameters);

            curveEquationMock.Setup(eq => eq.Add(It.IsAny <CurvePoint>(), It.IsAny <CurvePoint>())).Returns(CurvePoint.PointAtInfinity);
            Assert.IsTrue(curve.IsPotentialElement(CurvePoint.PointAtInfinity), "IsPotentialElement not true for point at infinity!");
            Assert.IsFalse(curve.IsSafeElement(CurvePoint.PointAtInfinity), "IsSafeElement not false for point at infinity!");
        }
        public void TestEqualsIsTrueForEqualObjects()
        {
            var             order      = BigPrime.CreateWithoutChecks(7);
            var             cofactor   = new BigInteger(2);
            var             generator  = CurvePoint.PointAtInfinity;
            CurveParameters parameters = new CurveParameters(
                equationMock.Object, generator, order, cofactor
                );

            CurveParameters otherParameters = new CurveParameters(
                equationMock.Object, generator, order, cofactor
                );

            Assert.AreEqual(parameters, otherParameters);
        }
Beispiel #8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CurveGroupAlgebra"/> class.
 /// </summary>
 /// <param name="parameters">The parameters of the elliptic curve.</param>
 public CurveGroupAlgebra(CurveParameters parameters)
     : base(
         parameters.Generator,
         parameters.Order,
         parameters.Cofactor,
         CurvePoint.PointAtInfinity,
         2 * NumberLength.GetLength(parameters.Equation.Field.Modulo).InBits
         )
 {
     _curveEquation = parameters.Equation;
     if (!IsSafeElement(Generator))
     {
         throw new ArgumentException("The point given as generator is " +
                                     "not a valid point on the curve.", nameof(parameters));
     }
 }
        public void TestEqualsIsFalseForDifferentObjects()
        {
            var equation = equationMock.Object;

            equationMock.Reset();
            equationMock.Setup(eq => eq.Equals(It.IsAny <CurveEquation>())).Returns(false);

            var             order      = BigPrime.CreateWithoutChecks(7);
            var             cofactor   = new BigInteger(2);
            var             generator  = CurvePoint.PointAtInfinity;
            CurveParameters parameters = new CurveParameters(
                equation, generator, order, cofactor
                );

            CurveParameters otherParameters = new CurveParameters(
                equation, generator, order, cofactor
                );

            Assert.AreNotEqual(parameters, otherParameters);

            equationMock.Reset();
            equationMock.Setup(eq => eq.Equals(It.IsAny <CurveEquation>())).Returns(true);

            otherParameters = new CurveParameters(
                equation, new CurvePoint(1, 1), order, cofactor
                );
            Assert.AreNotEqual(parameters, otherParameters);

            otherParameters = new CurveParameters(
                equation, generator, BigPrime.CreateWithoutChecks(3), cofactor
                );
            Assert.AreNotEqual(parameters, otherParameters);

            otherParameters = new CurveParameters(
                equation, generator, order, BigInteger.One
                );
            Assert.AreNotEqual(parameters, otherParameters);
        }
 /// <summary>
 /// Creates a <see cref="CryptoGroup{BigInteger, BigInteger}" /> instance using a <see cref="XOnlyMontgomeryCurveAlgebra" />
 /// instance with the given <see cref="CurveParameters"/>.
 /// </summary>
 /// <param name="parameters">The parameters of the elliptic curve.</param>
 public static CryptoGroup <BigInteger, BigInteger> CreateCryptoGroup(CurveParameters parameters)
 {
     return(new CryptoGroup <BigInteger, BigInteger>(
                new XOnlyMontgomeryCurveAlgebra(parameters)
                ));
 }
Beispiel #11
0
 /// <summary>
 /// Creates a <see cref="CryptoGroup{BigInteger, CurvePoint}" /> instance using a <see cref="CurveGroupAlgebra" />
 /// instance with the given <see cref="CurveParameters"/>.
 /// </summary>
 /// <param name="parameters">The parameters of the elliptic curve.</param>
 public static CryptoGroup <BigInteger, CurvePoint> CreateCryptoGroup(CurveParameters parameters)
 {
     return(new CryptoGroup <BigInteger, CurvePoint>(new CurveGroupAlgebra(parameters)));
 }