diff options
author | Sergio Giro <sgiro@google.com> | 2016-01-27 20:40:41 +0000 |
---|---|---|
committer | Sergio Giro <sgiro@google.com> | 2016-01-28 15:30:59 +0000 |
commit | 80261dd2d1824bb3862e90e77a5412d56ad88b1f (patch) | |
tree | d89e670054247d0a050ac1b0d9a7918cbe3498d6 /bcprov/src/main/java/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java | |
parent | 9be78fe4c709f1e585b5ed7e99b21084045b7fba (diff) | |
download | android_external_bouncycastle-80261dd2d1824bb3862e90e77a5412d56ad88b1f.tar.gz android_external_bouncycastle-80261dd2d1824bb3862e90e77a5412d56ad88b1f.tar.bz2 android_external_bouncycastle-80261dd2d1824bb3862e90e77a5412d56ad88b1f.zip |
bouncycastle: Android tree with upstream code for version 1.50
Android tree as of c0d8909a6c6a4ac075a9dee7ac1fe6baff34acc0
Change-Id: I8d381554d6edec32aae8ff5bab5d5314f0954440
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java')
-rw-r--r-- | bcprov/src/main/java/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java b/bcprov/src/main/java/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java index 12b8405..28140df 100644 --- a/bcprov/src/main/java/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java +++ b/bcprov/src/main/java/org/bouncycastle/crypto/agreement/ECDHCBasicAgreement.java @@ -47,12 +47,18 @@ public class ECDHCBasicAgreement public BigInteger calculateAgreement( CipherParameters pubKey) { - ECPublicKeyParameters pub = (ECPublicKeyParameters)pubKey; - ECDomainParameters params = pub.getParameters(); - ECPoint P = pub.getQ().multiply(params.getH().multiply(key.getD())); + ECPublicKeyParameters pub = (ECPublicKeyParameters)pubKey; + ECDomainParameters params = pub.getParameters(); - // if (p.isInfinity()) throw new RuntimeException("Invalid public key"); + BigInteger hd = params.getH().multiply(key.getD()).mod(params.getN()); - return P.getX().toBigInteger(); + ECPoint P = pub.getQ().multiply(hd).normalize(); + + if (P.isInfinity()) + { + throw new IllegalStateException("Infinity is not a valid agreement value for ECDHC"); + } + + return P.getAffineXCoord().toBigInteger(); } } |