示例#1
0
        public void ToByteArrayTest()
        {
            ECDomainParameters domain = ECDomains.GetDomainParameter(ECDomainNames.secp192r1);
            ECGroup            group  = domain.Group;
            ECPoint            p      = domain.Group.FiniteField.GetInfinityPoint(group);
            ECPoint            g      = domain.G.Export();

            byte[] tmp = p.ToByteArray(true);
            Assert.IsTrue(tmp.Length == 1, "#1");
            Assert.IsTrue(tmp[0] == 0, "#2");
            p = new ECPoint(group, tmp);
            Assert.IsTrue(p.IsInifinity(), "#3");

            tmp = domain.G.ToByteArray(false);
            Assert.IsTrue(tmp.Length == ((domain.Bits >> 3) + ((domain.Bits & 7) == 0 ? 0 : 1)) * 2 + 1, "#4");
            p = new ECPoint(group, tmp).Export();
            Assert.IsTrue(p.X.CompareTo(g.X) == 0, "#5");
            Assert.IsTrue(p.Y.CompareTo(g.Y) == 0, "#6");

            tmp = domain.G.ToByteArray(true);
            Assert.IsTrue(tmp.Length == ((domain.Bits >> 3) + ((domain.Bits & 7) == 0 ? 0 : 1)) + 1, "#7");
            p = new ECPoint(group, tmp).Export();
            Assert.IsTrue(p.X.CompareTo(g.X) == 0, "#8");
            Assert.IsTrue(p.Y.CompareTo(g.Y) == 0, "#9");
        }
示例#2
0
        public virtual ECPoint ExportECPoint(Number x, Number y, Number z, ECGroup group)
        {
            if (z.IsOne())
            {
                return(new ECPoint(group, x, y, z));
            }
            Number iz = Invert(z);
            Number z2 = Multiply(iz, iz);

            return(new ECPoint(group, Multiply(x, z2), Multiply(y, Multiply(z2, iz)), Number.One));
        }
 public static GroupElement CreateGroupElement(Group Gq, string value)
 {
     if (Gq is SubgroupGroup)
     {
         return(Gq.CreateGroupElement(HexToBytes(value)));
     }
     else
     {
         ECGroup  ecGq  = Gq as ECGroup;
         string[] point = value.Split(',');
         return(ecGq.CreateGroupElement(HexToBytes(point[0]), HexToBytes(point[1])));
     }
 }
示例#4
0
        void PointCompressTest(int bits, ECGroup group, ECPoint p, int repeats, string name)
        {
            int bytes = (bits >> 3) + ((bits & 7) == 0 ? 0 : 1) + 1;

            for (int i = 0; i < repeats; i++)
            {
                byte[] tmp = p.ToByteArray(true);
                Assert.IsTrue(tmp.Length == bytes, name + " #1");
                ECPoint x  = new ECPoint(group, tmp).Export();
                ECPoint p2 = p.Export();
                Assert.IsTrue(x.X.CompareTo(p2.X) == 0, name + " #2");
                Assert.IsTrue(x.Y.CompareTo(p2.Y) == 0, name + " #3");
                p = p.Multiply(Number.CreateRandomElement(group.P));
            }
        }
示例#5
0
        public override ECPoint ExportECPoint(Number x, Number y, Number z, ECGroup group)
        {
            if (montOne == null)
            {
                montOne = ToElement(Number.One);
            }
            if (z.CompareTo(montOne) == 0)
            {
                return(new ECPoint(group, Multiply(x, Number.One), Multiply(y, Number.One), Number.One));
            }

            Number izm = Invert(z);
            Number iz  = Multiply(izm, Number.One);
            Number z2  = Multiply(iz, izm);

            return(new ECPoint(group, Multiply(x, z2), Multiply(y, (Multiply(z2, izm))), Number.One));
        }
示例#6
0
 public override ECPoint GetInfinityPoint(ECGroup group)
 {
     return(new ECPoint(group, PADDED_ZERO, PADDED_ZERO, PADDED_ZERO));
 }
示例#7
0
 public virtual ECPoint GetInfinityPoint(ECGroup group)
 {
     return(new ECPoint(group, Number.Zero, Number.Zero, Number.Zero));
 }