8007483: attributes are ignored when loading keys from a PKCS12 keystore
authorvinnie
Tue, 05 Feb 2013 14:25:47 +0000
changeset 15538 02e547c0b530
parent 15537 cca8fab7313a
child 15539 226821a52d28
child 15642 5d93957f4749
8007483: attributes are ignored when loading keys from a PKCS12 keystore Reviewed-by: mullan
jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java
jdk/test/sun/security/pkcs12/StorePasswordTest.java
--- a/jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java	Tue Feb 05 12:36:32 2013 +0100
+++ b/jdk/src/share/classes/sun/security/pkcs12/PKCS12KeyStore.java	Tue Feb 05 14:25:47 2013 +0000
@@ -1116,7 +1116,7 @@
         if (privateKeyCount > 0 || secretKeyCount > 0) {
 
             if (debug != null) {
-                debug.println("Storing " + privateKeyCount +
+                debug.println("Storing " + (privateKeyCount + secretKeyCount) +
                     " protected key(s) in a PKCS#7 data content-type");
             }
 
@@ -2122,6 +2122,7 @@
                 SecretKeyEntry kEntry = new SecretKeyEntry();
                 kEntry.protectedSecretKey = secretValue.getOctetString();
                 bagItem = kEntry;
+                secretKeyCount++;
             } else {
 
                 if (debug != null) {
@@ -2220,6 +2221,10 @@
                 if (bagItem instanceof PrivateKeyEntry) {
                     keyList.add((PrivateKeyEntry) entry);
                 }
+                if (entry.attributes == null) {
+                    entry.attributes = new HashSet<>();
+                }
+                entry.attributes.addAll(attributes);
                 if (alias == null) {
                    alias = getUnfriendlyName();
                 }
--- a/jdk/test/sun/security/pkcs12/StorePasswordTest.java	Tue Feb 05 12:36:32 2013 +0100
+++ b/jdk/test/sun/security/pkcs12/StorePasswordTest.java	Tue Feb 05 14:25:47 2013 +0000
@@ -51,8 +51,12 @@
         keystore.load(null, null);
 
         // Set entry
+        Set<KeyStore.Entry.Attribute> attrs = new HashSet<>();
+        attrs.add(new PKCS12Attribute("1.3.5.7.9", "printable1"));
+        attrs.add(new PKCS12Attribute("2.4.6.8.10", "1F:2F:3F:4F:5F"));
+        int originalAttrCount = attrs.size() + 2;
         keystore.setEntry(ALIAS,
-            new KeyStore.SecretKeyEntry(convertPassword(USER_PASSWORD)),
+            new KeyStore.SecretKeyEntry(convertPassword(USER_PASSWORD), attrs),
                 new KeyStore.PasswordProtection(PASSWORD));
 
         try (FileOutputStream outStream = new FileOutputStream(KEYSTORE)) {
@@ -69,7 +73,12 @@
 
         KeyStore.Entry entry = keystore.getEntry(ALIAS,
             new KeyStore.PasswordProtection(PASSWORD));
-        System.out.println("Retrieved entry: " + entry);
+        int attrCount = entry.getAttributes().size();
+        System.out.println("Retrieved entry with " + attrCount + " attrs: " +
+            entry);
+        if (attrCount != originalAttrCount) {
+            throw new Exception("Failed to recover all the entry attributes");
+        }
 
         SecretKey key = (SecretKey) keystore.getKey(ALIAS, PASSWORD);
         SecretKeyFactory factory =