You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.1 KiB
74 lines
2.1 KiB
#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 |
|
{ |
|
public class CryptoApiEntropySourceProvider |
|
: IEntropySourceProvider |
|
{ |
|
private readonly RandomNumberGenerator mRng; |
|
private readonly bool mPredictionResistant; |
|
|
|
public CryptoApiEntropySourceProvider() |
|
: this(RandomNumberGenerator.Create(), true) |
|
{ |
|
} |
|
|
|
public CryptoApiEntropySourceProvider(RandomNumberGenerator rng, bool isPredictionResistant) |
|
{ |
|
if (rng == null) |
|
throw new ArgumentNullException("rng"); |
|
|
|
mRng = rng; |
|
mPredictionResistant = isPredictionResistant; |
|
} |
|
|
|
public IEntropySource Get(int bitsRequired) |
|
{ |
|
return new CryptoApiEntropySource(mRng, mPredictionResistant, bitsRequired); |
|
} |
|
|
|
private class CryptoApiEntropySource |
|
: IEntropySource |
|
{ |
|
private readonly RandomNumberGenerator mRng; |
|
private readonly bool mPredictionResistant; |
|
private readonly int mEntropySize; |
|
|
|
internal CryptoApiEntropySource(RandomNumberGenerator rng, bool predictionResistant, int entropySize) |
|
{ |
|
this.mRng = rng; |
|
this.mPredictionResistant = predictionResistant; |
|
this.mEntropySize = entropySize; |
|
} |
|
|
|
#region IEntropySource Members |
|
|
|
bool IEntropySource.IsPredictionResistant |
|
{ |
|
get { return mPredictionResistant; } |
|
} |
|
|
|
byte[] IEntropySource.GetEntropy() |
|
{ |
|
byte[] result = new byte[(mEntropySize + 7) / 8]; |
|
mRng.GetBytes(result); |
|
return result; |
|
} |
|
|
|
int IEntropySource.EntropySize |
|
{ |
|
get { return mEntropySize; } |
|
} |
|
|
|
#endregion |
|
} |
|
} |
|
} |
|
|
|
#endif |
|
#pragma warning restore |
|
#endif
|
|
|