88 lines
1.9 KiB
C#
88 lines
1.9 KiB
C#
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
|
|
#pragma warning disable
|
|
using System;
|
|
|
|
using BestHTTP.SecureProtocol.Org.BouncyCastle.Security;
|
|
|
|
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto
|
|
{
|
|
/**
|
|
* The base class for symmetric, or secret, cipher key generators.
|
|
*/
|
|
public class CipherKeyGenerator
|
|
{
|
|
protected internal SecureRandom random;
|
|
protected internal int strength;
|
|
private bool uninitialised = true;
|
|
private int defaultStrength;
|
|
|
|
public CipherKeyGenerator()
|
|
{
|
|
}
|
|
|
|
internal CipherKeyGenerator(
|
|
int defaultStrength)
|
|
{
|
|
if (defaultStrength < 1)
|
|
throw new ArgumentException("strength must be a positive value", "defaultStrength");
|
|
|
|
this.defaultStrength = defaultStrength;
|
|
}
|
|
|
|
public int DefaultStrength
|
|
{
|
|
get { return defaultStrength; }
|
|
}
|
|
|
|
/**
|
|
* initialise the key generator.
|
|
*
|
|
* @param param the parameters to be used for key generation
|
|
*/
|
|
public void Init(
|
|
KeyGenerationParameters parameters)
|
|
{
|
|
if (parameters == null)
|
|
throw new ArgumentNullException("parameters");
|
|
|
|
this.uninitialised = false;
|
|
|
|
engineInit(parameters);
|
|
}
|
|
|
|
protected virtual void engineInit(
|
|
KeyGenerationParameters parameters)
|
|
{
|
|
this.random = parameters.Random;
|
|
this.strength = (parameters.Strength + 7) / 8;
|
|
}
|
|
|
|
/**
|
|
* Generate a secret key.
|
|
*
|
|
* @return a byte array containing the key value.
|
|
*/
|
|
public byte[] GenerateKey()
|
|
{
|
|
if (uninitialised)
|
|
{
|
|
if (defaultStrength < 1)
|
|
throw new InvalidOperationException("Generator has not been initialised");
|
|
|
|
uninitialised = false;
|
|
|
|
engineInit(new KeyGenerationParameters(new SecureRandom(), defaultStrength));
|
|
}
|
|
|
|
return engineGenerateKey();
|
|
}
|
|
|
|
protected virtual byte[] engineGenerateKey()
|
|
{
|
|
return SecureRandom.GetNextBytes(random, strength);
|
|
}
|
|
}
|
|
}
|
|
#pragma warning restore
|
|
#endif
|