/** * Copyright 2003-2016 SSHTOOLS Limited. All Rights Reserved. * * For product documentation visit https://www.sshtools.com/ * * This file is part of J2SSH Maverick. * * J2SSH Maverick is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * J2SSH Maverick 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 J2SSH Maverick. If not, see <http://www.gnu.org/licenses/>. */ package com.sshtools.publickey; import java.io.IOException; import com.sshtools.ssh.SshException; import com.sshtools.ssh.components.ComponentManager; import com.sshtools.ssh.components.SshKeyPair; /** * <p> * Generate public/private key pairs. * </p> * <p> * To generate a new pair use the following code <blockquote> * * <pre> * SshKeyPair pair = SshKeyPairGenerator.generateKeyPair( * SshKeyPairGenerator.SSH2_RSA, 1024); * </pre> * * </blockquote> To create formatted key file for the public key use: * <blockquote> * * <pre> * SshPublicKeyFile pubfile = SshPublicKeyFileFactory.create(pair.getPublicKey(), * "Some comment", SshPublicKeyFileFactory.OPENSSH_FORMAT); * FileOutputStream fout = new FileOutputStream("mykey.pub"); * fout.write(pubfile.getFormattedKey()); * fout.close(); * </pre> * * <blockquote> To create a formatted, encrypted private key file use: * <blockquote> * * <pre> * SshPrivateKeyFile prvfile = SshPrivateKeyFileFactory.create(pair, * "my passphrase", "Some comment", * SshPrivateKeyFileFactory.OPENSSH_FORMAT); * FileOutputStream fout = new FileOutputStream("mykey"); * fout.write(prvfile.getFormattedKey()); * fout.close(); * </pre> * * <blockquote> * </p> * * @author Lee David Painter */ public class SshKeyPairGenerator { public static final String SSH1_RSA = "rsa1"; public static final String SSH2_RSA = "ssh-rsa"; public static final String SSH2_DSA = "ssh-dss"; /** * Generates a new key pair. * * @param algorithm * @param bits * @return SshKeyPair * @throws IOException */ public static SshKeyPair generateKeyPair(String algorithm, int bits) throws IOException, SshException { if (!SSH2_RSA.equalsIgnoreCase(algorithm) && !SSH2_DSA.equalsIgnoreCase(algorithm)) { throw new IOException(algorithm + " is not a supported key algorithm!"); } SshKeyPair pair = new SshKeyPair(); if (SSH2_RSA.equalsIgnoreCase(algorithm)) { pair = ComponentManager.getInstance().generateRsaKeyPair(bits); } else { pair = ComponentManager.getInstance().generateDsaKeyPair(bits); } return pair; } }