< prev index next >

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11SecretKeyFactory.java

Print this page

        

@@ -147,15 +147,21 @@
             if (p11Key.token == token) {
                 if (extraAttrs != null) {
                     Session session = null;
                     try {
                         session = token.getObjSession();
-                        long newKeyID = token.p11.C_CopyObject(session.id(),
+                        p11Key.incNativeKeyRef();
+                        long newKeyID;
+                        try {
+                            newKeyID = token.p11.C_CopyObject(session.id(),
                                 p11Key.keyID, extraAttrs);
+                        } finally {
+                            p11Key.decNativeKeyRef();
+                        }
                         p11Key = (P11Key) (P11Key.secretKey(session,
                                 newKeyID, p11Key.algorithm, p11Key.keyLength,
-                                extraAttrs));
+                                extraAttrs, true));
                     } catch (PKCS11Exception p11e) {
                         throw new InvalidKeyException
                                 ("Cannot duplicate the PKCS11 key", p11e);
                     } finally {
                         token.releaseSession(session);

@@ -262,11 +268,11 @@
             attributes = token.getAttributes
                 (O_IMPORT, CKO_SECRET_KEY, keyType, attributes);
             session = token.getObjSession();
             long keyID = token.p11.C_CreateObject(session.id(), attributes);
             P11Key p11Key = (P11Key)P11Key.secretKey
-                (session, keyID, algorithm, keyLength, attributes);
+                (session, keyID, algorithm, keyLength, attributes, true);
             return p11Key;
         } catch (PKCS11Exception e) {
             throw new InvalidKeyException("Could not create key", e);
         } finally {
             token.releaseSession(session);
< prev index next >