MqvPrivateParameters.cs 2.3 KB

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