--- old/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11ECKeyFactory.java 2018-06-04 19:27:20.889682267 -0300 +++ new/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11ECKeyFactory.java 2018-06-04 19:27:20.734681165 -0300 @@ -253,7 +253,7 @@ session = token.getObjSession(); long keyID = token.p11.C_CreateObject(session.id(), attributes); return P11Key.publicKey - (session, keyID, "EC", params.getCurve().getField().getFieldSize(), attributes); + (session, keyID, "EC", params.getCurve().getField().getFieldSize(), attributes, true); } finally { token.releaseSession(session); } @@ -276,7 +276,7 @@ session = token.getObjSession(); long keyID = token.p11.C_CreateObject(session.id(), attributes); return P11Key.privateKey - (session, keyID, "EC", params.getCurve().getField().getFieldSize(), attributes); + (session, keyID, "EC", params.getCurve().getField().getFieldSize(), attributes, true); } finally { token.releaseSession(session); } @@ -290,7 +290,12 @@ new CK_ATTRIBUTE(CKA_EC_POINT), new CK_ATTRIBUTE(CKA_EC_PARAMS), }; - 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(); + } try { ECParameterSpec params = decodeParameters(attributes[1].getByteArray()); ECPoint point = decodePoint(attributes[0].getByteArray(), params.getCurve()); @@ -312,7 +317,12 @@ new CK_ATTRIBUTE(CKA_VALUE), new CK_ATTRIBUTE(CKA_EC_PARAMS), }; - 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(); + } try { ECParameterSpec params = decodeParameters(attributes[1].getByteArray()); return keySpec.cast(