DesKeyGenerator.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using Best.HTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters;
  5. namespace Best.HTTP.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(KeyGenerationParameters parameters)
  26. {
  27. base.EngineInit(parameters);
  28. if (strength == 0 || strength == (56 / 8))
  29. {
  30. strength = DesParameters.DesKeyLength;
  31. }
  32. else if (strength != DesParameters.DesKeyLength)
  33. {
  34. throw new ArgumentException(
  35. "DES key must be " + (DesParameters.DesKeyLength * 8) + " bits long.");
  36. }
  37. }
  38. protected override byte[] EngineGenerateKey()
  39. {
  40. byte[] newKey = new byte[DesParameters.DesKeyLength];
  41. do
  42. {
  43. random.NextBytes(newKey);
  44. DesParameters.SetOddParity(newKey);
  45. }
  46. while (DesParameters.IsWeakKey(newKey, 0));
  47. return newKey;
  48. }
  49. }
  50. }
  51. #pragma warning restore
  52. #endif