/* Import.java -- import command. Copyright (C) 2004 Free Software Foundation, Inc. This file is part of GNU Crypto. GNU Crypto is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Crypto is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package gnu.crypto.tool.keytool; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.cert.CertificateFactory; import javax.security.auth.callback.Callback; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; class Import extends Command { // Constructors. // ------------------------------------------------------------------------- Import (Command previous) { super (previous); } // Instance methods. // ------------------------------------------------------------------------- public void run() throws Exception { KeyStore store = null; CertificateFactory cert = null; if (provider != null) { store = KeyStore.getInstance (storeType, provider); cert = CertificateFactory.getInstance (certType, provider); } else { store = KeyStore.getInstance (storeType); cert = CertificateFactory.getInstance (certType); } NameCallback aliasIn = new NameCallback ("alias: ", alias); PasswordCallback pass = new PasswordCallback ("keystore password: ", false); Callback[] cb = null; if (alias.equals (DEFAULT_ALIAS)) cb = new Callback[] { aliasIn, pass }; else cb = new Callback[] { pass }; handler.handle (cb); if (storeFile.equals ("-")) { if (verbose > 0) println ("Loading keystore from standard input"); store.load (System.in, pass.getPassword()); } else if (noKeystore || !new File (storeFile).exists()) { if (verbose > 0) println ("Creating new keystore"); store.load (null, null); } else { if (verbose > 0) println ("Loading keystore from " + storeFile); FileInputStream in = new FileInputStream (storeFile); store.load (in, pass.getPassword()); in.close(); } String alias = this.alias; if (alias.equals (DEFAULT_ALIAS)) alias = aliasIn.getName(); if (verbose > 0) println ("Loading " + certType + " certificate from " + (file == null ? "standard input" : file)); InputStream certIn = null; if (file == null) certIn = System.in; else certIn = new FileInputStream (file); store.setCertificateEntry (alias, cert.generateCertificate (certIn)); if (noKeystore) { if (verbose > 0) println ("No keystore. Not writing output."); return; } OutputStream out = null; if (outFile != null) out = (outFile.equals ("-") ? (OutputStream) System.out : (OutputStream) new FileOutputStream (outFile)); else out = (storeFile.equals ("-") ? (OutputStream) System.out : (OutputStream) new FileOutputStream (storeFile)); if (verbose > 0) println ("Writing keystore to " + (out == System.out ? "standard output" : (outFile == null ? storeFile : outFile))); store.store (out, pass.getPassword()); if (out != System.out) { out.flush(); out.close(); } } public String toString() { return "import"; } }