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();
        }
Beispiel #2
0
        public void Execute(string[] args)
        {
            try
            {
                options.ParseArguments(args);
            }
            catch (Exception)
            {
                Usage();
                return;
            }

            string infile = this.options.GetString("infile");
            BIO    bin    = Program.GetInFile(options.GetString("infile"));

            DH     dh;
            string inform = this.options["inform"] as string;

            if (inform == "PEM")
            {
                dh = DH.FromParametersPEM(bin);
            }
            else if (inform == "DER")
            {
                dh = DH.FromParametersDER(bin);
            }
            else
            {
                Usage();
                return;
            }

            if (this.options.IsSet("text"))
            {
                Console.WriteLine(dh);
            }

            if (this.options.IsSet("check"))
            {
                DH.CheckCode check = dh.Check();
                if ((check & DH.CheckCode.NotSuitableGenerator) != 0)
                {
                    Console.WriteLine("the g value is not a generator");
                }
                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 a safe prime");
                }
                if ((check & DH.CheckCode.UnableToCheckGenerator) != 0)
                {
                    Console.WriteLine("unable to check the generator value");
                }
                if (check == 0)
                {
                    Console.WriteLine("DH parameters appear to be ok");
                }
            }

            if (this.options.IsSet("code"))
            {
                Console.WriteLine("-code is currently not implemented.");
            }

            if (!this.options.IsSet("noout"))
            {
                string outfile = this.options["outfile"] as string;
                BIO    bout;
                bool   outmem = false;
                if (string.IsNullOrEmpty(outfile))
                {
                    bout   = BIO.MemoryBuffer();
                    outmem = true;
                }
                else
                {
                    bout = BIO.File(outfile, "w");
                }

                string outform = this.options["outform"] as string;
                if (outform == "DER")
                {
                    dh.WriteParametersDER(bout);
                }
                else if (outform == "PEM")
                {
                    dh.WriteParametersPEM(bout);
                }
                else
                {
                    Usage();
                    return;
                }

                if (outmem)
                {
                    Stream cout = Console.OpenStandardOutput();
                    ArraySegment <byte> segment = bout.ReadBytes((int)bout.NumberWritten);
                    cout.Write(segment.Array, segment.Offset, segment.Count);
                }
            }
        }