DesKeyGenerator.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters;
  5. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators
  6. {
  7. public class DesKeyGenerator
  8. : CipherKeyGenerator
  9. {
  10. public DesKeyGenerator()
  11. {
  12. }
  13. internal DesKeyGenerator(
  14. int defaultStrength)
  15. : base(defaultStrength)
  16. {
  17. }
  18. /**
  19. * initialise the key generator - if strength is set to zero
  20. * the key generated will be 64 bits in size, otherwise
  21. * strength can be 64 or 56 bits (if you don't count the parity bits).
  22. *
  23. * @param param the parameters to be used for key generation
  24. */
  25. protected override void engineInit(
  26. KeyGenerationParameters parameters)
  27. {
  28. base.engineInit(parameters);
  29. if (strength == 0 || strength == (56 / 8))
  30. {
  31. strength = DesParameters.DesKeyLength;
  32. }
  33. else if (strength != DesParameters.DesKeyLength)
  34. {
  35. throw new ArgumentException(
  36. "DES key must be " + (DesParameters.DesKeyLength * 8) + " bits long.");
  37. }
  38. }
  39. protected override byte[] engineGenerateKey()
  40. {
  41. byte[] newKey = new byte[DesParameters.DesKeyLength];
  42. do
  43. {
  44. random.NextBytes(newKey);
  45. DesParameters.SetOddParity(newKey);
  46. }
  47. while (DesParameters.IsWeakKey(newKey, 0));
  48. return newKey;
  49. }
  50. }
  51. }
  52. #pragma warning restore
  53. #endif