123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- using System;
- using Org.BouncyCastle.Security;
- namespace 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);
- }
- }
- }
- #endif
|