12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- #pragma warning disable
- using System;
- using Best.HTTP.SecureProtocol.Org.BouncyCastle.Security;
- namespace Best.HTTP.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(nameof(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(CryptoServicesRegistrar.GetSecureRandom(), defaultStrength));
- }
- return EngineGenerateKey();
- }
- protected virtual byte[] EngineGenerateKey()
- {
- return SecureRandom.GetNextBytes(random, strength);
- }
- }
- }
- #pragma warning restore
- #endif
|