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.
88 lines
1.9 KiB
88 lines
1.9 KiB
8 months ago
|
#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
|