SecurityTools.java revision 2437:905aa8122624
1184989Srafan/*
266963Speter * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
3176187Srafan * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
466963Speter *
566963Speter * This code is free software; you can redistribute it and/or modify it
666963Speter * under the terms of the GNU General Public License version 2 only, as
766963Speter * published by the Free Software Foundation.
866963Speter *
966963Speter * This code is distributed in the hope that it will be useful, but WITHOUT
1066963Speter * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1166963Speter * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1266963Speter * version 2 for more details (a copy is included in the LICENSE file that
1366963Speter * accompanied this code).
1466963Speter *
1566963Speter * You should have received a copy of the GNU General Public License version
1666963Speter * 2 along with this work; if not, write to the Free Software Foundation,
1766963Speter * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1866963Speter *
1966963Speter * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2066963Speter * or visit www.oracle.com if you need additional information or have any
2166963Speter * questions.
2266963Speter */
2366963Speter
2466963Speterpackage jdk.test.lib;
2566963Speter
2666963Speterimport java.util.ArrayList;
2766963Speterimport java.util.Collections;
2866963Speterimport java.util.List;
2966963Speterimport jdk.test.lib.process.OutputAnalyzer;
3066963Speterimport jdk.test.lib.process.ProcessTools;
3166963Speter
3266963Speterpublic class SecurityTools {
3366963Speter
3466963Speter    public static final String NO_ALIAS = null;
3566963Speter
3666963Speter    // keytool
3766963Speter
3897049Speter    public static OutputAnalyzer keytool(List<String> options)
3997049Speter            throws Throwable {
4066963Speter
4166963Speter        JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("keytool")
4266963Speter                .addVMArg("-Duser.language=en")
4366963Speter                .addVMArg("-Duser.country=US");
4466963Speter        for (String option : options) {
4566963Speter            if (option.startsWith("-J")) {
46166124Srafan                launcher.addVMArg(option.substring(2));
47166124Srafan            } else {
4866963Speter                launcher.addToolArg(option);
49176187Srafan            }
50176187Srafan        }
5166963Speter        return ProcessTools.executeCommand(launcher.getCommand());
5266963Speter    }
5366963Speter
54166124Srafan    public static OutputAnalyzer keytool(String options) throws Throwable {
5566963Speter        return keytool(options.split("\\s+"));
56166124Srafan    }
57166124Srafan
5866963Speter    public static OutputAnalyzer keytool(String... options) throws Throwable {
5966963Speter        return keytool(List.of(options));
6066963Speter    }
61166124Srafan
6297049Speter    // jarsigner
63184989Srafan
64176187Srafan    public static OutputAnalyzer jarsigner(String jar, String alias,
6566963Speter            List<String> options) throws Throwable {
6666963Speter        JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("jarsigner")
67166124Srafan                .addVMArg("-Duser.language=en")
68166124Srafan                .addVMArg("-Duser.country=US");
6966963Speter        for (String option : options) {
7066963Speter            if (option.startsWith("-J")) {
7166963Speter                launcher.addVMArg(option.substring(2));
72174993Srafan            } else {
7366963Speter                launcher.addToolArg(option);
7466963Speter            }
75166124Srafan        }
76166124Srafan        launcher.addToolArg(jar);
7766963Speter        if (alias != null) {
7866963Speter            launcher.addToolArg(alias);
7966963Speter        }
8066963Speter        return ProcessTools.executeCommand(launcher.getCommand());
8166963Speter    }
82166124Srafan
8366963Speter    public static OutputAnalyzer jarsigner(String jar, String alias,
8466963Speter            String options) throws Throwable {
8566963Speter
8666963Speter        return jarsigner(jar, alias, options.split("\\s+"));
8766963Speter    }
88166124Srafan
89166124Srafan    public static OutputAnalyzer jarsigner(String jar, String alias,
90166124Srafan            String... options) throws Throwable {
91184989Srafan
92184989Srafan        return jarsigner(jar, alias, List.of(options));
93166124Srafan    }
9466963Speter
9566963Speter    public static OutputAnalyzer sign(String jar, String alias, String... options)
96166124Srafan            throws Throwable {
97166124Srafan
9866963Speter        return jarsigner(jar, alias,
9966963Speter                mergeOptions("-J-Djava.security.egd=file:/dev/./urandom", options));
10066963Speter    }
10166963Speter
10266963Speter    public static OutputAnalyzer verify(String jar, String... options)
103166124Srafan            throws Throwable {
104166124Srafan
105166124Srafan        return jarsigner(jar, NO_ALIAS, mergeOptions("-verify", options));
10666963Speter    }
10766963Speter
10866963Speter    // helper methods
10966963Speter
11066963Speter    private static List<String> mergeOptions(
111166124Srafan            String firstOption, String... secondPart) {
112166124Srafan
11366963Speter        return mergeOptions(List.of(firstOption), secondPart);
11466963Speter    }
11566963Speter
116166124Srafan    private static List<String> mergeOptions(
11766963Speter            List<String> firstPart, String... secondPart) {
11866963Speter
11966963Speter        List<String> options = new ArrayList<>(firstPart);
12066963Speter        Collections.addAll(options, secondPart);
121166124Srafan        return options;
122166124Srafan    }
12366963Speter}
12466963Speter
12566963Speter