summaryrefslogtreecommitdiff
path: root/bcprov/src/main/java/org/bouncycastle/crypto/params/DSAPublicKeyParameters.java
diff options
context:
space:
mode:
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.java23
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;