summary refs log tree commit diff
path: root/crypto/src/crypto/agreement/ECDHCBasicAgreement.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/crypto/agreement/ECDHCBasicAgreement.cs')
-rw-r--r--crypto/src/crypto/agreement/ECDHCBasicAgreement.cs10
1 files changed, 7 insertions, 3 deletions
diff --git a/crypto/src/crypto/agreement/ECDHCBasicAgreement.cs b/crypto/src/crypto/agreement/ECDHCBasicAgreement.cs

index e1c572373..89be7061e 100644 --- a/crypto/src/crypto/agreement/ECDHCBasicAgreement.cs +++ b/crypto/src/crypto/agreement/ECDHCBasicAgreement.cs
@@ -52,11 +52,15 @@ namespace Org.BouncyCastle.Crypto.Agreement { ECPublicKeyParameters pub = (ECPublicKeyParameters) pubKey; ECDomainParameters parameters = pub.Parameters; - ECPoint P = pub.Q.Multiply(parameters.H.Multiply(key.D)); - // if ( p.IsInfinity ) throw new Exception("Invalid public key"); + BigInteger hd = parameters.H.Multiply(key.D).Mod(parameters.N); - return P.X.ToBigInteger(); + ECPoint P = pub.Q.Multiply(hd).Normalize(); + + if (P.IsInfinity) + throw new InvalidOperationException("Infinity is not a valid agreement value for ECDHC"); + + return P.AffineXCoord.ToBigInteger(); } } }