com.sshtools.publickey.SshKeyPairGenerator Maven / Gradle / Ivy
The newest version!
/**
* 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 .
*/
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;
/**
*
* Generate public/private key pairs.
*
*
* To generate a new pair use the following code
*
*
* SshKeyPair pair = SshKeyPairGenerator.generateKeyPair(
* SshKeyPairGenerator.SSH2_RSA, 1024);
*
*
*
To create formatted key file for the public key use:
*
*
*
* SshPublicKeyFile pubfile = SshPublicKeyFileFactory.create(pair.getPublicKey(),
* "Some comment", SshPublicKeyFileFactory.OPENSSH_FORMAT);
* FileOutputStream fout = new FileOutputStream("mykey.pub");
* fout.write(pubfile.getFormattedKey());
* fout.close();
*
*
* To create a formatted, encrypted private key file use:
*
*
*
* SshPrivateKeyFile prvfile = SshPrivateKeyFileFactory.create(pair,
* "my passphrase", "Some comment",
* SshPrivateKeyFileFactory.OPENSSH_FORMAT);
* FileOutputStream fout = new FileOutputStream("mykey");
* fout.write(prvfile.getFormattedKey());
* fout.close();
*
*
*
*
*
* @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;
}
}