diff --git a/src/share/classes/sun/security/ec/ECParameters.java b/src/share/classes/sun/security/ec/ECParameters.java index 56037ada9390439704a22799ea1545a736a75405..62031c9340a49e42de629fbda43f12488baa3998 100644 --- a/src/share/classes/sun/security/ec/ECParameters.java +++ b/src/share/classes/sun/security/ec/ECParameters.java @@ -87,8 +87,10 @@ public final class ECParameters extends AlgorithmParametersSpi { if ((data.length == 0) || (data[0] != 4)) { throw new IOException("Only uncompressed point format supported"); } - int n = data.length / 2; - if (n > ((curve.getField().getFieldSize() + 7 ) >> 3)) { + // Per ANSI X9.62, an encoded point is a 1 byte type followed by + // ceiling(log base 2 field-size / 8) bytes of x and the same of y. + int n = (data.length - 1) / 2; + if (n != ((curve.getField().getFieldSize() + 7 ) >> 3)) { throw new IOException("Point does not match field size"); } byte[] xb = new byte[n];