Exemple #1
0
        public void TestIsElementTrue()
        {
            var prime = BigPrime.CreateWithoutChecks(11);
            var field = new BigIntegerField(prime);

            Assert.IsTrue(field.IsElement(7));
        }
Exemple #2
0
        public void TestIsSafeElementForNeutralElementCofactorOne()
        {
            var groupAlgebra = new MultiplicativeGroupAlgebra(BigPrime.CreateWithoutChecks(11), BigPrime.CreateWithoutChecks(10), 2);

            Assert.That(groupAlgebra.IsPotentialElement(groupAlgebra.NeutralElement));
            Assert.That(!groupAlgebra.IsSafeElement(groupAlgebra.NeutralElement));
        }
Exemple #3
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
                );
        }
Exemple #4
0
        public void TestIsElementFalse(int value)
        {
            var prime = BigPrime.CreateWithoutChecks(11);
            var field = new BigIntegerField(prime);

            Assert.IsFalse(field.IsElement(new BigInteger(value)));
        }
 public CurveParametersTests()
 {
     equationMock = new Mock <CurveEquation>(
         BigPrime.CreateWithoutChecks(11),
         new BigInteger(2),
         new BigInteger(-3)
         );
 }
 public void SetUpAlgebra()
 {
     groupAlgebra = new MultiplicativeGroupAlgebra(
         prime: BigPrime.CreateWithoutChecks(23),
         order: BigPrime.CreateWithoutChecks(11),
         generator: 2
         );
 }
Exemple #7
0
        public void TestConstructor()
        {
            var prime = BigPrime.CreateWithoutChecks(11);
            var field = new BigIntegerField(prime);

            Assert.AreEqual(prime, field.Modulo);
            Assert.AreEqual(1, field.ElementByteLength);
        }
        public void TestEqualsFalseForOtherAlgebra()
        {
            var curve      = TestCurveParameters.WeierstrassParameters.Equation;
            var otherCurve = new WeierstrassCurveEquation(prime: BigPrime.CreateWithoutChecks(11), 0, 0);

            bool result = curve.Equals(otherCurve);

            Assert.IsFalse(result);
        }
Exemple #9
0
        public void TestPowRejectsNegativeExponent()
        {
            var prime = BigPrime.CreateWithoutChecks(11);
            var field = new BigIntegerField(prime);

            Assert.Throws <ArgumentException>(
                () => field.Pow(5, -1)
                );
        }
Exemple #10
0
 public void SetUpAlgebra()
 {
     groupAlgebra = new MultiplicativeGroupAlgebra(
         prime: BigPrime.CreateWithoutChecks(23),
         order: BigPrime.CreateWithoutChecks(11),
         generator: 2
         );
     // group elements: 1,  2,  3,  4,  6,  8,  9, 12, 13, 16, 18
 }
Exemple #11
0
        public void TestModReciprocal()
        {
            var numberRaw = 7652;
            var modulo    = BigPrime.CreateWithoutChecks(89237);
            var number    = new BigNumber(numberRaw);
            var expected  = number.ModExp(new BigNumber(modulo - 2), new BigNumber(modulo));
            var result    = number.ModReciprocal(new BigNumber(modulo));

            Assert.That(result.Equals(expected));
        }
Exemple #12
0
        public void TestSquare()
        {
            var prime = BigPrime.CreateWithoutChecks(11);
            var field = new BigIntegerField(prime);

            var result   = field.Square(5);
            var expected = new BigInteger(3);

            Assert.AreEqual(expected, result);
        }
Exemple #13
0
        public void TestEqualsFalseForOtherAlgebra()
        {
            var otherAlgebra = new MultiplicativeGroupAlgebra(
                BigPrime.CreateWithoutChecks(2 * 53 + 1),
                BigPrime.CreateWithoutChecks(53),
                4
                );

            Assert.IsFalse(groupAlgebra !.Equals(otherAlgebra));
        }
Exemple #14
0
        public void TestMod(int value, int expectedRaw)
        {
            var prime = BigPrime.CreateWithoutChecks(11);
            var field = new BigIntegerField(prime);

            var result   = field.Mod(value);
            var expected = new BigInteger(expectedRaw);

            Assert.AreEqual(expected, result);
        }
Exemple #15
0
        public void TestComputeSecurityLevel()
        {
            var mod = BigPrime.CreateWithoutChecks(BigInteger.One << 2047);

            Assert.AreEqual(115, MultiplicativeGroupAlgebra.ComputeSecurityLevel(mod, mod));

            var smallOrder = BigPrime.CreateWithoutChecks(new BigInteger(4));

            Assert.AreEqual(2 * NumberLength.GetLength(smallOrder).InBits, MultiplicativeGroupAlgebra.ComputeSecurityLevel(mod, smallOrder));
        }
        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());
        }
Exemple #17
0
        public void TestInvertMult()
        {
            var prime = BigPrime.CreateWithoutChecks(11);
            var field = new BigIntegerField(prime);

            var result   = field.InvertMult(5);
            var expected = new BigInteger(9);

            Assert.AreEqual(expected, result);
            Assert.AreEqual(BigInteger.One, field.Mod(result * 5));
        }
        public void TestEqualsFalseForUnrelatedObject()
        {
            var equationMock = new Mock <CurveEquation>(
                BigPrime.CreateWithoutChecks(23),
                BigInteger.Zero, BigInteger.One
                )
            {
                CallBase = true
            };

            Assert.IsFalse(equationMock.Object.Equals(new object()));
        }
Exemple #19
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
         );
 }
Exemple #20
0
        public void TestComputePrimeLengthForSecurityLevel()
        {
            // dominated by NFS
            var l = MultiplicativeGroupAlgebra.ComputePrimeLengthForSecurityLevel(100);
            var p = BigPrime.CreateWithoutChecks(BigInteger.One << (l.InBits - 1));
            var s = MultiplicativeGroupAlgebra.ComputeSecurityLevel(p, p);

            Assert.AreEqual(100, s);

            // dominated by Pollard Rho
            l = MultiplicativeGroupAlgebra.ComputePrimeLengthForSecurityLevel(1);
            Assert.AreEqual(2, l.InBits);
        }
Exemple #21
0
        public void TestProperties()
        {
            var generator      = new BigInteger(2);
            var neutralElement = BigInteger.One;
            var modulo         = BigPrime.CreateWithoutChecks(23);
            var order          = BigPrime.CreateWithoutChecks(11);
            var cofactor       = new BigInteger(2);

            Assert.AreEqual(neutralElement, groupAlgebra !.NeutralElement, "verifying neutral element");
            Assert.AreEqual(generator, groupAlgebra !.Generator, "verifying generator");
            Assert.AreEqual(order, groupAlgebra !.Order, "verifying order");
            Assert.AreEqual(modulo, groupAlgebra !.Prime, "verifying modulo");
            Assert.AreEqual(cofactor, groupAlgebra !.Cofactor, "verifying cofactor");
        }
        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);
        }
        public void TestAreNegationsTrueForPointAtInfinity()
        {
            var equation = new Mock <CurveEquation>(
                BigPrime.CreateWithoutChecks(23),
                BigInteger.Zero, BigInteger.One
                )
            {
                CallBase = true
            };

            var testElement  = CurvePoint.PointAtInfinity;
            var otherElement = testElement.Clone();

            Assert.IsTrue(equation.Object.AreNegations(testElement, otherElement));
        }
        public void TestAreNegationsTrueForNegation()
        {
            var equation = new Mock <CurveEquation>(
                BigPrime.CreateWithoutChecks(23),
                BigInteger.Zero, BigInteger.One
                )
            {
                CallBase = true
            };

            var testElement  = new CurvePoint(5, 5);
            var otherElement = equation.Object.Negate(testElement);

            Assert.IsTrue(equation.Object.AreNegations(testElement, otherElement));
        }
        public void TestNegateForPointAtInfinity()
        {
            var equation = new Mock <CurveEquation>(
                BigPrime.CreateWithoutChecks(23),
                BigInteger.Zero, BigInteger.One
                )
            {
                CallBase = true
            };

            var testElement = CurvePoint.PointAtInfinity;
            var expected    = CurvePoint.PointAtInfinity;

            var result = equation.Object.Negate(testElement);

            Assert.AreEqual(expected, result);
        }
        public void TestDiffieHellmanWithMultiplicativeGroup()
        {
            string primeHex = @"0
                FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
                29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
                EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
                E485B576 625E7EC6 F44C42E9 A63A3620 FFFFFFFF FFFFFFFF";

            BigPrime prime = BigPrime.CreateWithoutChecks(
                BigInteger.Parse(Regex.Replace(primeHex, @"\s+", ""), NumberStyles.AllowHexSpecifier)
                );
            BigPrime  order     = BigPrime.CreateWithoutChecks((prime - 1) / 2);
            BigNumber generator = new BigNumber(4);

            var algebra = new MultiplicativeGroupAlgebra(prime, order, generator);
            var group   = new CryptoGroup <SecureBigNumber, BigNumber>(algebra);

            CompactCryptoGroupAlgebra.DiffieHellmanIntegrationTests.DoDiffieHellman(group);
        }
        public void TestEqualsTrue()
        {
            var equationMock = new Mock <CurveEquation>(
                BigPrime.CreateWithoutChecks(23),
                BigInteger.Zero, BigInteger.One
                )
            {
                CallBase = true
            };

            var otherMock = new Mock <CurveEquation>(
                BigPrime.CreateWithoutChecks(23),
                BigInteger.Zero, BigInteger.One
                )
            {
                CallBase = true
            };

            Assert.IsTrue(equationMock.Object.Equals(otherMock.Object));
        }
        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);
        }