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(); }
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); } } }