Esempio n. 1
0
        //constructor
        public Rand()
        {
            int length = (int)(rand.NextDouble() * 2.0d + 1.0d);

            for (int i = 0; i < length; i++)
            {
                generator.AddSeedMaterial(seed.GenerateSeed(128, false));
            }
        }
Esempio n. 2
0
        public static AsymmetricCipherKeyPair GetRSAKeyPairFromSeed(string rsaSeed, int rsaKeySize = 4096, CoinType coinType = CoinType.Stratis)
        {
            byte[] binaryRsaSeed = System.Text.Encoding.ASCII.GetBytes(rsaSeed);

            // apply SHAKE-256
            var digest     = new Org.BouncyCastle.Crypto.Digests.SkeinDigest(256, 4096);
            int digestSize = digest.GetDigestSize();

            digest.BlockUpdate(binaryRsaSeed, 0, binaryRsaSeed.Length);

            byte[] rsaSeedDigest = new byte[4096 / 8];
            digest.DoFinal(rsaSeedDigest, 0);


            var randomSeedGenerator = System.Security.Cryptography.RandomNumberGenerator.Create();

            byte[] seed = new byte[rsaKeySize / 8];
            randomSeedGenerator.GetBytes(seed);

            VmpcRandomGenerator randomGenerator = new VmpcRandomGenerator();

            randomGenerator.AddSeedMaterial(seed);

            //CryptoApiRandomGenerator randomGenerator = new CryptoApiRandomGenerator();
            var secureRandom            = new SecureRandom(randomGenerator);
            var keyGenerationParameters = new KeyGenerationParameters(secureRandom, rsaKeySize);

            var privateKeyBasedRsaKeyPairGenerator = new SeedBasedDeterministicRsaKeyPairGenerator();

            privateKeyBasedRsaKeyPairGenerator.Init(keyGenerationParameters, rsaSeedDigest);
            var result = privateKeyBasedRsaKeyPairGenerator.GenerateKeyPair();

            return(result);
        }
Esempio n. 3
0
        private static SecureRandom GetSeededSecureRandom()
        {
            var buffer = new byte[32];

            using (var cryptoRandom = RandomNumberGenerator.Create())
            {
                cryptoRandom.GetBytes(buffer);
            }
            var randomGenerator = new VmpcRandomGenerator();

            randomGenerator.AddSeedMaterial(buffer);
            SecureRandom random = new SecureRandom(randomGenerator);

            return(random);
        }