Index: modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/spec/EllipticCurveTest.java
===================================================================
--- modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/spec/EllipticCurveTest.java (revision 421552)
+++ modules/security/src/test/api/java/org/apache/harmony/security/tests/java/security/spec/EllipticCurveTest.java (working copy)
@@ -466,6 +466,18 @@
}
/**
+ * Regression for Harmony-731
+ *
+ */
+ public final void testEllipticCurveECFieldBigIntegerBigInteger05() {
+ EllipticCurve ec = new EllipticCurve(new testECField(), BigInteger
+ .valueOf(4L), BigInteger.ONE);
+ assertEquals("incorrect a", ec.getA(), BigInteger.valueOf(4L));
+ assertEquals("incorrect b", ec.getB(), BigInteger.ONE);
+ assertEquals("incorrect size", ec.getField().getFieldSize(), 2);
+ }
+
+ /**
* Test for getB() method
* Assertion: returns coefficient b
* Test preconditions: ECFieldF2m instance
@@ -672,6 +684,12 @@
// Private stuff
//
+ class testECField implements ECField {
+ public int getFieldSize() {
+ return 2;
+ }
+ }
+
/**
* EllipticCurve subclass for testing purposes
*
Index: modules/security/src/main/java/common/java/security/spec/EllipticCurve.java
===================================================================
--- modules/security/src/main/java/common/java/security/spec/EllipticCurve.java (revision 421552)
+++ modules/security/src/main/java/common/java/security/spec/EllipticCurve.java (working copy)
@@ -65,8 +65,9 @@
this.seed = new byte[seed.length];
System.arraycopy(seed, 0, this.seed, 0, this.seed.length);
}
- // check parameters
+ // check parameters for ECFieldFp and ECFieldF2m.
// Check invariant: a and b must be in the field.
+ // Check conditions for custom ECField are not specified.
if (this.field instanceof ECFieldFp) {
BigInteger p = ((ECFieldFp)this.field).getP();
if (this.a.signum() < 0 ||
@@ -78,7 +79,7 @@
throw new IllegalArgumentException(
"the a is not in the field");
}
- } else {
+ } else if (this.field instanceof ECFieldF2m) {
int fieldSizeInBits = this.field.getFieldSize();
if (!(this.a.bitLength() <= fieldSizeInBits)) {
throw new IllegalArgumentException("the a is not in the field");