--- old/test/jdk/sun/security/ec/xec/TestXDH.java 2018-07-09 11:09:06.241960999 -0400 +++ new/test/jdk/sun/security/ec/xec/TestXDH.java 2018-07-09 11:09:05.889785000 -0400 @@ -23,7 +23,7 @@ /* * @test - * @bug 8171277 + * @bug 8171277 8206915 * @summary Test XDH key agreement * @library /test/lib * @build jdk.test.lib.Convert @@ -66,15 +66,17 @@ throws Exception { KeyPairGenerator kpg = KeyPairGenerator.getInstance(name); + AlgorithmParameterSpec paramSpec = null; if (param instanceof Integer) { kpg.initialize((Integer) param); } else if (param instanceof String) { - kpg.initialize(new NamedParameterSpec((String) param)); + paramSpec = new NamedParameterSpec((String) param); + kpg.initialize(paramSpec); } KeyPair kp = kpg.generateKeyPair(); KeyAgreement ka = KeyAgreement.getInstance(name); - ka.init(kp.getPrivate()); + ka.init(kp.getPrivate(), paramSpec); ka.doPhase(kp.getPublic(), true); byte[] secret = ka.generateSecret(); @@ -96,6 +98,16 @@ throw new RuntimeException("Arrays not equal"); } + // make sure generateSecret() resets the state to after init() + try { + ka.generateSecret(); + throw new RuntimeException("generateSecret does not reset state"); + } catch (IllegalStateException ex) { + // do nothing---this is expected + } + ka.doPhase(pubKey, true); + ka.generateSecret(); + // test with XDH key specs XECPublicKeySpec xdhPublic = kf.getKeySpec(kp.getPublic(), XECPublicKeySpec.class);