예제 #1
0
        public void Execute(string[] args)
        {
            OpenSSL.Core.Random.Seed(rnd_seed);

            BigNumber.GeneratorHandler cb = new BigNumber.GeneratorHandler(this.OnStatus);
            DH a = new DH(64, DH.Generator5, cb, Console.Out);

            DH.CheckCode check = a.Check();
            if ((check & DH.CheckCode.CheckP_NotPrime) != 0)
            {
                Console.WriteLine("p value is not prime");
            }
            if ((check & DH.CheckCode.CheckP_NotSafePrime) != 0)
            {
                Console.WriteLine("p value is not safe prime");
            }
            if ((check & DH.CheckCode.UnableToCheckGenerator) != 0)
            {
                Console.WriteLine("unable to check the generator value");
            }
            if ((check & DH.CheckCode.NotSuitableGenerator) != 0)
            {
                Console.WriteLine("the g value is not a generator");
            }

            Console.WriteLine();
            Console.WriteLine("p    ={0}", a.P);
            Console.WriteLine("g    ={0}", a.G);

            DH b = new DH(a.P, a.G);

            a.NoExpConstantTime = false;
            b.NoExpConstantTime = true;

            a.GenerateKeys();
            Console.WriteLine("pri 1={0}", a.PrivateKey);
            Console.WriteLine("pub 1={0}", a.PublicKey);

            b.GenerateKeys();
            Console.WriteLine("pri 2={0}", b.PrivateKey);
            Console.WriteLine("pub 2={0}", b.PublicKey);

            byte[] aout = a.ComputeKey(b.PublicKey);
            string astr = BitConverter.ToString(aout);

            Console.WriteLine("key1 ={0}", astr);

            byte[] bout = b.ComputeKey(a.PublicKey);
            string bstr = BitConverter.ToString(bout);

            Console.WriteLine("key2 ={0}", bstr);

            if (aout.Length < 4 || astr != bstr)
            {
                throw new Exception("Error in DH routines");
            }

            a.Dispose();
            b.Dispose();
        }