--- old/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11DHKeyFactory.java 2018-06-04 19:27:18.547665617 -0300 +++ new/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11DHKeyFactory.java 2018-06-04 19:27:18.313663954 -0300 @@ -184,7 +184,7 @@ session = token.getObjSession(); long keyID = token.p11.C_CreateObject(session.id(), attributes); return P11Key.publicKey - (session, keyID, "DH", p.bitLength(), attributes); + (session, keyID, "DH", p.bitLength(), attributes, true); } finally { token.releaseSession(session); } @@ -206,7 +206,7 @@ session = token.getObjSession(); long keyID = token.p11.C_CreateObject(session.id(), attributes); return P11Key.privateKey - (session, keyID, "DH", p.bitLength(), attributes); + (session, keyID, "DH", p.bitLength(), attributes, true); } finally { token.releaseSession(session); } @@ -221,7 +221,12 @@ new CK_ATTRIBUTE(CKA_PRIME), new CK_ATTRIBUTE(CKA_BASE), }; - token.p11.C_GetAttributeValue(session[0].id(), key.keyID, attributes); + key.incNativeKeyRef(); + try { + token.p11.C_GetAttributeValue(session[0].id(), key.keyID, attributes); + } finally { + key.decNativeKeyRef(); + } KeySpec spec = new DHPublicKeySpec( attributes[0].getBigInteger(), attributes[1].getBigInteger(), @@ -243,7 +248,12 @@ new CK_ATTRIBUTE(CKA_PRIME), new CK_ATTRIBUTE(CKA_BASE), }; - token.p11.C_GetAttributeValue(session[0].id(), key.keyID, attributes); + key.incNativeKeyRef(); + try { + token.p11.C_GetAttributeValue(session[0].id(), key.keyID, attributes); + } finally { + key.decNativeKeyRef(); + } KeySpec spec = new DHPrivateKeySpec( attributes[0].getBigInteger(), attributes[1].getBigInteger(),