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