BitCoinClient.Program.RandomSeedReg C# (CSharp) Method

RandomSeedReg() public static method

public static RandomSeedReg ( ) : void
return void
        public static void RandomSeedReg()
        {
            RandomSeed();

            RegistryKey rk = Registry.PerformanceData;
            string[] names = rk.GetSubKeyNames();

            MemoryStream stream = new MemoryStream();
            BinaryWriter bw = new BinaryWriter(stream);
            foreach (string name in names)
            {
                string val = rk.GetValue(name).ToString();
                bw.Write(name);
                bw.Write(val);
            }
            byte[] data = stream.ToArray();
            //OpenSSL.RAND_add(data, data.Length, 1.5);
            OpenSSL.Core.Random.Add(data, data.Length / 100);
            bw.Close();
        }

Usage Example

        public static OpenSSL.Crypto.EC.Key GenerateKey()
        {
            Program.RandomSeedReg();

            OpenSSL.Crypto.EC.Key key = OpenSSL.Crypto.EC.Key.FromCurveName(OpenSSL.Core.Objects.NID.secp256k1);

            // SetSecretBytes
            {
                OpenSSL.Core.BigNumber padBN = OpenSSL.Core.BigNumber.FromArray(OpenSSL.Core.Random.Bytes(32));
                //byte[] data = new byte[32];
                //for (int i = 0; i < data.Length; i++)
                //    data[i] = 0x3f;
                //OpenSSL.Core.BigNumber padBN = OpenSSL.Core.BigNumber.FromArray(data);

                // RegenerateKey
                {
                    OpenSSL.Crypto.EC.Point pubPt = new OpenSSL.Crypto.EC.Point(key.Group);
                    pubPt.Multiply(padBN, null, null, new OpenSSL.Core.BigNumber.Context());
                    key.SetPrivateKey(padBN);
                    key.SetPublicKey(pubPt);
                }
                padBN.Clear();
            }

            key.SetConversionForm(OpenSSL.Crypto.EC.Point.PointConversionForm.Compressed);
            //byte[] pubBytes = key.GetPublicBytes();
            return(key);
        }