diff options
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java')
-rw-r--r-- | bcprov/src/main/java/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java b/bcprov/src/main/java/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java index c0066568..5786ee36 100644 --- a/bcprov/src/main/java/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java +++ b/bcprov/src/main/java/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java @@ -5,6 +5,9 @@ import java.math.BigInteger; public class DSAPublicKeyParameters extends DSAKeyParameters { + private static final BigInteger ONE = BigInteger.valueOf(1); + private static final BigInteger TWO = BigInteger.valueOf(2); + private BigInteger y; public DSAPublicKeyParameters( @@ -13,9 +16,27 @@ public class DSAPublicKeyParameters { super(false, params); - this.y = y; + this.y = validate(y, params); } + private BigInteger validate(BigInteger y, DSAParameters params) + { + if (params != null) + { + if (TWO.compareTo(y) <= 0 && params.getP().subtract(TWO).compareTo(y) >= 0 + && ONE.equals(y.modPow(params.getQ(), params.getP()))) + { + return y; + } + + throw new IllegalArgumentException("y value does not appear to be in correct group"); + } + else + { + return y; // we can't validate without params, fortunately we can't use the key either... + } + } + public BigInteger getY() { return y; |