12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- #pragma warning disable
- #if !(NETCF_1_0 || PORTABLE || NETFX_CORE)
- using System;
- using System.Security.Cryptography;
- namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Prng
- {
- /// <summary>
- /// Uses RandomNumberGenerator.Create() to get randomness generator
- /// </summary>
- public class CryptoApiRandomGenerator
- : IRandomGenerator
- {
- private readonly RandomNumberGenerator rndProv;
- public CryptoApiRandomGenerator()
- : this(RandomNumberGenerator.Create())
- {
- }
- public CryptoApiRandomGenerator(RandomNumberGenerator rng)
- {
- this.rndProv = rng;
- }
- #region IRandomGenerator Members
- public virtual void AddSeedMaterial(byte[] seed)
- {
- // We don't care about the seed
- }
- public virtual void AddSeedMaterial(long seed)
- {
- // We don't care about the seed
- }
- public virtual void NextBytes(byte[] bytes)
- {
- rndProv.GetBytes(bytes);
- }
- public virtual void NextBytes(byte[] bytes, int start, int len)
- {
- if (start < 0)
- throw new ArgumentException("Start offset cannot be negative", "start");
- if (bytes.Length < (start + len))
- throw new ArgumentException("Byte array too small for requested offset and length");
- if (bytes.Length == len && start == 0)
- {
- NextBytes(bytes);
- }
- else
- {
- byte[] tmpBuf = new byte[len];
- NextBytes(tmpBuf);
- Array.Copy(tmpBuf, 0, bytes, start, len);
- }
- }
- #endregion
- }
- }
- #endif
- #pragma warning restore
- #endif
|