/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.sdklib.internal.build; import com.android.annotations.Nullable; import com.android.sdklib.internal.build.DebugKeyProvider.IKeyGenOutput; import com.android.sdklib.internal.build.DebugKeyProvider.KeytoolException; import com.android.utils.GrabProcessOutput; import com.android.utils.GrabProcessOutput.IProcessOutput; import com.android.utils.GrabProcessOutput.Wait; import java.io.File; import java.io.IOException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableEntryException; import java.security.cert.CertificateException; import java.util.ArrayList; /** * A Helper to create new keystore/key. * * @deprecated Use Android-Builder instead */ @Deprecated public final class KeystoreHelper { /** * Creates a new store * @param osKeyStorePath the location of the store * @param storeType an optional keystore type, or <code>null</code> if the default is to * be used. * @param output an optional {@link IKeyGenOutput} object to get the stdout and stderr * of the keytool process call. * @throws KeyStoreException * @throws NoSuchAlgorithmException * @throws CertificateException * @throws UnrecoverableEntryException * @throws IOException * @throws KeytoolException */ public static boolean createNewStore( String osKeyStorePath, String storeType, String storePassword, String alias, String keyPassword, String description, int validityYears, final IKeyGenOutput output) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, UnrecoverableEntryException, IOException, KeytoolException { // get the executable name of keytool depending on the platform. String os = System.getProperty("os.name"); String keytoolCommand; if (os.startsWith("Windows")) { keytoolCommand = "keytool.exe"; } else { keytoolCommand = "keytool"; } String javaHome = System.getProperty("java.home"); if (javaHome != null && !javaHome.isEmpty()) { keytoolCommand = javaHome + File.separator + "bin" + File.separator + keytoolCommand; } // create the command line to call key tool to build the key with no user input. ArrayList<String> commandList = new ArrayList<String>(); commandList.add(keytoolCommand); commandList.add("-genkey"); commandList.add("-alias"); commandList.add(alias); commandList.add("-keyalg"); commandList.add("RSA"); commandList.add("-dname"); commandList.add(description); commandList.add("-validity"); commandList.add(Integer.toString(validityYears * 365)); commandList.add("-keypass"); commandList.add(keyPassword); commandList.add("-keystore"); commandList.add(osKeyStorePath); commandList.add("-storepass"); commandList.add(storePassword); if (storeType != null) { commandList.add("-storetype"); commandList.add(storeType); } String[] commandArray = commandList.toArray(new String[commandList.size()]); // launch the command line process int result = 0; try { Process process = Runtime.getRuntime().exec(commandArray); result = GrabProcessOutput.grabProcessOutput( process, Wait.WAIT_FOR_READERS, new IProcessOutput() { @Override public void out(@Nullable String line) { if (line != null) { if (output != null) { output.out(line); } else { System.out.println(line); } } } @Override public void err(@Nullable String line) { if (line != null) { if (output != null) { output.err(line); } else { System.err.println(line); } } } }); } catch (Exception e) { // create the command line as one string for debugging purposes StringBuilder builder = new StringBuilder(); boolean firstArg = true; for (String arg : commandArray) { boolean hasSpace = arg.indexOf(' ') != -1; if (firstArg == true) { firstArg = false; } else { builder.append(' '); } if (hasSpace) { builder.append('"'); } builder.append(arg); if (hasSpace) { builder.append('"'); } } throw new KeytoolException("Failed to create key: " + e.getMessage(), javaHome, builder.toString()); } if (result != 0) { return false; } return true; } }