MqvPrivateParameters.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters
  5. {
  6. public class MqvPrivateParameters
  7. : ICipherParameters
  8. {
  9. private readonly ECPrivateKeyParameters staticPrivateKey;
  10. private readonly ECPrivateKeyParameters ephemeralPrivateKey;
  11. private readonly ECPublicKeyParameters ephemeralPublicKey;
  12. public MqvPrivateParameters(
  13. ECPrivateKeyParameters staticPrivateKey,
  14. ECPrivateKeyParameters ephemeralPrivateKey)
  15. : this(staticPrivateKey, ephemeralPrivateKey, null)
  16. {
  17. }
  18. public MqvPrivateParameters(
  19. ECPrivateKeyParameters staticPrivateKey,
  20. ECPrivateKeyParameters ephemeralPrivateKey,
  21. ECPublicKeyParameters ephemeralPublicKey)
  22. {
  23. if (staticPrivateKey == null)
  24. throw new ArgumentNullException("staticPrivateKey");
  25. if (ephemeralPrivateKey == null)
  26. throw new ArgumentNullException("ephemeralPrivateKey");
  27. ECDomainParameters parameters = staticPrivateKey.Parameters;
  28. if (!parameters.Equals(ephemeralPrivateKey.Parameters))
  29. throw new ArgumentException("Static and ephemeral private keys have different domain parameters");
  30. if (ephemeralPublicKey == null)
  31. {
  32. ephemeralPublicKey = new ECPublicKeyParameters(
  33. parameters.G.Multiply(ephemeralPrivateKey.D),
  34. parameters);
  35. }
  36. else if (!parameters.Equals(ephemeralPublicKey.Parameters))
  37. {
  38. throw new ArgumentException("Ephemeral public key has different domain parameters");
  39. }
  40. this.staticPrivateKey = staticPrivateKey;
  41. this.ephemeralPrivateKey = ephemeralPrivateKey;
  42. this.ephemeralPublicKey = ephemeralPublicKey;
  43. }
  44. public virtual ECPrivateKeyParameters StaticPrivateKey
  45. {
  46. get { return staticPrivateKey; }
  47. }
  48. public virtual ECPrivateKeyParameters EphemeralPrivateKey
  49. {
  50. get { return ephemeralPrivateKey; }
  51. }
  52. public virtual ECPublicKeyParameters EphemeralPublicKey
  53. {
  54. get { return ephemeralPublicKey; }
  55. }
  56. }
  57. }
  58. #pragma warning restore
  59. #endif