diff options
author | Peter Dettman <peter.dettman@bouncycastle.org> | 2022-10-23 16:01:11 +0700 |
---|---|---|
committer | Peter Dettman <peter.dettman@bouncycastle.org> | 2022-10-23 16:01:11 +0700 |
commit | 584ada5e755ef20e9b2824f11b034afaf32b3fda (patch) | |
tree | cf11582bcb5990c3f74b71e074d9665378c3564b /crypto/src/security | |
parent | VMPC refactoring (diff) | |
download | BouncyCastle.NET-ed25519-584ada5e755ef20e9b2824f11b034afaf32b3fda.tar.xz |
Change BigInteger arbitrary random source
Diffstat (limited to 'crypto/src/security')
-rw-r--r-- | crypto/src/security/SecureRandom.cs | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/crypto/src/security/SecureRandom.cs b/crypto/src/security/SecureRandom.cs index 10b837b03..53e5be069 100644 --- a/crypto/src/security/SecureRandom.cs +++ b/crypto/src/security/SecureRandom.cs @@ -27,18 +27,7 @@ namespace Org.BouncyCastle.Security DigestRandomGenerator prng = new DigestRandomGenerator(digest); if (autoSeed) { - prng.AddSeedMaterial(NextCounterValue()); - - int seedLength = digest.GetDigestSize(); -#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER - Span<byte> seed = seedLength <= 128 - ? stackalloc byte[seedLength] - : new byte[seedLength]; -#else - byte[] seed = new byte[seedLength]; -#endif - Master.NextBytes(seed); - prng.AddSeedMaterial(seed); + AutoSeed(prng, digest.GetDigestSize()); } return prng; } @@ -103,6 +92,14 @@ namespace Org.BouncyCastle.Security this.generator = generator; } + public SecureRandom(IRandomGenerator generator, int autoSeedLengthInBytes) + : base(0) + { + AutoSeed(generator, autoSeedLengthInBytes); + + this.generator = generator; + } + public virtual byte[] GenerateSeed(int length) { return GetNextBytes(Master, length); @@ -246,5 +243,20 @@ namespace Org.BouncyCastle.Security NextBytes(bytes); return (long)Pack.BE_To_UInt64(bytes); } + + private static void AutoSeed(IRandomGenerator generator, int seedLength) + { + generator.AddSeedMaterial(NextCounterValue()); + +#if NETCOREAPP2_1_OR_GREATER || NETSTANDARD2_1_OR_GREATER + Span<byte> seed = seedLength <= 128 + ? stackalloc byte[seedLength] + : new byte[seedLength]; +#else + byte[] seed = new byte[seedLength]; +#endif + Master.NextBytes(seed); + generator.AddSeedMaterial(seed); + } } } |