| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- #pragma warning disable
- using System;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Asn1;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Math;
- namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters
- {
- public class DHPublicKeyParameters
- : DHKeyParameters
- {
- private static BigInteger Validate(BigInteger y, DHParameters dhParams)
- {
- if (y == null)
- throw new ArgumentNullException("y");
- // TLS check
- if (y.CompareTo(BigInteger.Two) < 0 || y.CompareTo(dhParams.P.Subtract(BigInteger.Two)) > 0)
- throw new ArgumentException("invalid DH public key", "y");
- // we can't validate without Q.
- if (dhParams.Q != null
- && !y.ModPow(dhParams.Q, dhParams.P).Equals(BigInteger.One))
- {
- throw new ArgumentException("y value does not appear to be in correct group", "y");
- }
- return y;
- }
- private readonly BigInteger y;
- public DHPublicKeyParameters(
- BigInteger y,
- DHParameters parameters)
- : base(false, parameters)
- {
- this.y = Validate(y, parameters);
- }
- public DHPublicKeyParameters(
- BigInteger y,
- DHParameters parameters,
- DerObjectIdentifier algorithmOid)
- : base(false, parameters, algorithmOid)
- {
- this.y = Validate(y, parameters);
- }
- public virtual BigInteger Y
- {
- get { return y; }
- }
- public override bool Equals(
- object obj)
- {
- if (obj == this)
- return true;
- DHPublicKeyParameters other = obj as DHPublicKeyParameters;
- if (other == null)
- return false;
- return Equals(other);
- }
- protected bool Equals(
- DHPublicKeyParameters other)
- {
- return y.Equals(other.y) && base.Equals(other);
- }
- public override int GetHashCode()
- {
- return y.GetHashCode() ^ base.GetHashCode();
- }
- }
- }
- #pragma warning restore
- #endif
|