test/jdk/sun/security/tools/keytool/StorePasswords.java
author xuelei
Mon, 25 Jun 2018 13:41:39 -0700
changeset 50768 68fa3d4026ea
parent 47216 71c04702a3d5
child 54521 8de62c4af8c7
permissions -rw-r--r--
8196584: TLS 1.3 Implementation Reviewed-by: ascarpino, coffeys, dfuchs, jjiang, jnimeh, mullan, rhalade, ssahoo, valeriep, weijun, wetmore, xuelei Contributed-by: Adam Petcher <adam.petcher@oracle.com>, Amanda Jiang <amanda.jiang@oracle.com>, Anthony Scarpino <anthony.scarpino@oracle.com>, Bradford Wetmore <bradford.wetmore@oracle.com>, Jamil Nimeh <jamil.j.nimeh@oracle.com>, John Jiang <sha.jiang@oracle.com>, Rajan Halade <rajan.halade@oracle.com>, Sibabrata Sahoo <sibabrata.sahoo@oracle.com>, Valerie Peng <valerie.peng@oracle.com>, Weijun Wang <weijun.wang@oracle.com>, Xuelei Fan <xuelei.fan@oracle.com>
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20516
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
     1
/*
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
     2
 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
     4
 *
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
     7
 * published by the Free Software Foundation.
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
     8
 *
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    13
 * accompanied this code).
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    14
 *
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    18
 *
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    21
 * questions.
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    22
 */
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    23
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    24
/*
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    25
 * @test
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    26
 * @bug 8008296
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    27
 * @summary Store and retrieve user passwords using PKCS#12 keystore
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    28
 */
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    29
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    30
import java.io.*;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    31
import java.security.*;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    32
import java.util.*;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    33
import javax.crypto.*;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    34
import javax.crypto.spec.*;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    35
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    36
/*
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    37
 * Store and retrieve passwords protected by a selection of PBE algorithms,
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    38
 * using a PKCS#12 keystore.
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    39
 */
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    40
public class StorePasswords {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    41
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    42
    private static final String[] PBE_ALGORITHMS = new String[] {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    43
        "default PBE algorithm",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    44
        "PBEWithMD5AndDES",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    45
        "PBEWithSHA1AndDESede",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    46
        "PBEWithSHA1AndRC2_40",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    47
        "PBEWithSHA1AndRC2_128",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    48
        "PBEWithSHA1AndRC4_40",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    49
        "PBEWithSHA1AndRC4_128",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    50
        "PBEWithHmacSHA1AndAES_128",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    51
        "PBEWithHmacSHA224AndAES_128",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    52
        "PBEWithHmacSHA256AndAES_128",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    53
        "PBEWithHmacSHA384AndAES_128",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    54
        "PBEWithHmacSHA512AndAES_128",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    55
        "PBEWithHmacSHA1AndAES_256",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    56
        "PBEWithHmacSHA224AndAES_256",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    57
        "PBEWithHmacSHA256AndAES_256",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    58
        "PBEWithHmacSHA384AndAES_256",
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    59
        "PBEWithHmacSHA512AndAES_256"
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    60
    };
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    61
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    62
    private static final String KEYSTORE = "mykeystore.p12";
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    63
    private static final char[] KEYSTORE_PWD = "changeit".toCharArray();
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    64
    private static final char[] ENTRY_PWD = "protectit".toCharArray();
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    65
    private static final char[] USER_PWD = "hello1".toCharArray();
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    66
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    67
    public static void main(String[] args) throws Exception {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    68
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    69
        new File(KEYSTORE).delete();
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    70
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    71
        int storeCount = store();
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    72
        int recoverCount = recover();
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    73
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    74
        if (recoverCount != storeCount) {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    75
            throw new Exception("Stored " + storeCount + " user passwords, " +
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    76
                "recovered " + recoverCount + " user passwords");
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    77
        }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    78
        System.out.println("\nStored " + storeCount + " user passwords, " +
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    79
            "recovered " + recoverCount + " user passwords");
20879
05811931e266 8026233: test/sun/security/tools/keytool/StorePasswords.java needs to clean up files
juh
parents: 20516
diff changeset
    80
05811931e266 8026233: test/sun/security/tools/keytool/StorePasswords.java needs to clean up files
juh
parents: 20516
diff changeset
    81
        new File(KEYSTORE).delete();
20516
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    82
    }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    83
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    84
    private static int store() throws Exception {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    85
        int count = 0;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    86
        // Load an empty PKCS#12 keystore
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    87
        KeyStore keystore = KeyStore.getInstance("PKCS12");
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    88
        System.out.println("\nLoading PKCS#12 keystore...");
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    89
        keystore.load(null, null);
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    90
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    91
        // Derive a PBE key from the password
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    92
        PBEKeySpec keySpec = new PBEKeySpec(USER_PWD);
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    93
        SecretKeyFactory factory = SecretKeyFactory.getInstance("PBE");
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    94
        SecretKey key = factory.generateSecret(keySpec);
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    95
        PBEParameterSpec specWithEightByteSalt =
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    96
            new PBEParameterSpec("NaClNaCl".getBytes(), 1024);
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    97
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    98
        // Store the user password in a keystore entry (for each algorithm)
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
    99
        for (String algorithm : PBE_ALGORITHMS) {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   100
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   101
            try {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   102
                System.out.println("Storing user password '" +
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   103
                    new String(USER_PWD) + "' (protected by " + algorithm +
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   104
                    ")");
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   105
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   106
                if (algorithm.equals("default PBE algorithm")) {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   107
                     keystore.setKeyEntry(
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   108
                         "this entry is protected by " + algorithm, key,
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   109
                         ENTRY_PWD, null);
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   110
                } else {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   111
                    keystore.setEntry(
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   112
                        "this entry is protected by " + algorithm,
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   113
                        new KeyStore.SecretKeyEntry(key),
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   114
                        new KeyStore.PasswordProtection(ENTRY_PWD, algorithm,
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   115
                            null));
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   116
                }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   117
                count++;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   118
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   119
            } catch (KeyStoreException e) {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   120
                Throwable inner = e.getCause();
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   121
                if (inner instanceof UnrecoverableKeyException) {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   122
                    Throwable inner2 = inner.getCause();
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   123
                    if (inner2 instanceof InvalidAlgorithmParameterException) {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   124
                        System.out.println("...re-trying due to: " +
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   125
                            inner2.getMessage());
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   126
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   127
                        // Some PBE algorithms demand an 8-byte salt
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   128
                        keystore.setEntry(
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   129
                            "this entry is protected by " + algorithm,
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   130
                            new KeyStore.SecretKeyEntry(key),
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   131
                            new KeyStore.PasswordProtection(ENTRY_PWD,
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   132
                                algorithm, specWithEightByteSalt));
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   133
                        count++;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   134
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   135
                    } else if (inner2  instanceof InvalidKeyException) {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   136
                        System.out.println("...skipping due to: " +
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   137
                            inner2.getMessage());
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   138
                        // Unsupported crypto keysize
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   139
                        continue;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   140
                    }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   141
                } else {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   142
                    throw e;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   143
                }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   144
            }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   145
        }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   146
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   147
        // Store the PKCS#12 keystore
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   148
        System.out.println("Storing PKCS#12 keystore to: " + KEYSTORE);
20879
05811931e266 8026233: test/sun/security/tools/keytool/StorePasswords.java needs to clean up files
juh
parents: 20516
diff changeset
   149
        try (FileOutputStream out = new FileOutputStream(KEYSTORE)) {
05811931e266 8026233: test/sun/security/tools/keytool/StorePasswords.java needs to clean up files
juh
parents: 20516
diff changeset
   150
            keystore.store(out, KEYSTORE_PWD);
05811931e266 8026233: test/sun/security/tools/keytool/StorePasswords.java needs to clean up files
juh
parents: 20516
diff changeset
   151
        }
20516
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   152
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   153
        return count;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   154
    }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   155
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   156
    private static int recover() throws Exception {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   157
        int count = 0;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   158
        // Load the PKCS#12 keystore
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   159
        KeyStore keystore = KeyStore.getInstance("PKCS12");
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   160
        System.out.println("\nLoading PKCS#12 keystore from: " + KEYSTORE);
20879
05811931e266 8026233: test/sun/security/tools/keytool/StorePasswords.java needs to clean up files
juh
parents: 20516
diff changeset
   161
        try (FileInputStream in = new FileInputStream(KEYSTORE)) {
05811931e266 8026233: test/sun/security/tools/keytool/StorePasswords.java needs to clean up files
juh
parents: 20516
diff changeset
   162
            keystore.load(in, KEYSTORE_PWD);
05811931e266 8026233: test/sun/security/tools/keytool/StorePasswords.java needs to clean up files
juh
parents: 20516
diff changeset
   163
        }
20516
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   164
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   165
        SecretKey key;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   166
        SecretKeyFactory factory;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   167
        PBEKeySpec keySpec;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   168
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   169
        // Retrieve each user password from the keystore
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   170
        for (String algorithm : PBE_ALGORITHMS) {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   171
            key = (SecretKey) keystore.getKey("this entry is protected by " +
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   172
                algorithm, ENTRY_PWD);
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   173
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   174
            if (key != null) {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   175
                count++;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   176
                factory = SecretKeyFactory.getInstance(key.getAlgorithm());
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   177
                keySpec =
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   178
                    (PBEKeySpec) factory.getKeySpec(key, PBEKeySpec.class);
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   179
                char[] pwd = keySpec.getPassword();
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   180
                System.out.println("Recovered user password '" +
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   181
                     new String(pwd) + "' (protected by " + algorithm + ")");
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   182
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   183
                if (!Arrays.equals(USER_PWD, pwd)) {
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   184
                    throw new Exception("Failed to recover the user password " +
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   185
                        "protected by " + algorithm);
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   186
                }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   187
            }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   188
        }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   189
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   190
        return count;
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   191
    }
fa2edce67c48 8008296: keytool utility doesn't support '-importpassword' command
vinnie
parents:
diff changeset
   192
}