package org.ovirt.engine.core.utils.hostinstall;
import java.security.KeyPair;
import java.security.KeyStore;
import java.util.ArrayList;
import java.util.List;
import org.apache.sshd.common.keyprovider.AbstractKeyPairProvider;
import java.util.logging.Logger;
public class KeystoreKeyPairProvider extends AbstractKeyPairProvider {
private static final Logger LOG = Logger.getLogger(KeystoreKeyPairProvider.class.getName());
private String[] files;
private String password;
private String alias;
public KeystoreKeyPairProvider() {
}
public KeystoreKeyPairProvider(String[] files) {
this.files = files;
}
public KeystoreKeyPairProvider(String[] files, String pass, String alias) {
this.files = files;
this.password = pass;
this.alias = alias;
}
public String[] getFiles() {
return files;
}
public void setFiles(String[] files) {
this.files = files;
}
public String getPassword() {
return password;
}
public void setPassword(String pass) {
this.password = pass;
}
public String getAlias() {
return this.alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
public KeyPair[] loadKeys() {
List<KeyPair> keys = new ArrayList<KeyPair>();
for (int i = 0; i < files.length; i++) {
KeyStore ks = null;
char[] pass = null;
java.io.FileInputStream fis = null;
try {
ks = KeyStore.getInstance("JKS");
// get user password and file input stream
pass = this.password.toCharArray();
fis = new java.io.FileInputStream(files[i]);
ks.load(fis, pass);
fis.close();
} catch (Exception e1) {
System.out.println("E1:" + e1);
}
try {
fis.close();
} catch (Exception a) {
}
fis = null;
try {
KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(this.alias,
new KeyStore.PasswordProtection(pass));
keys.add(new KeyPair(ks.getCertificate(this.alias).getPublicKey(), pkEntry.getPrivateKey()));
} catch (Exception e1) {
LOG.severe(String.format("Unable to read key %s: %s", files[i], e1));
System.out.println("E1:" + e1);
} finally {
ks = null;
}
}
return keys.toArray(new KeyPair[keys.size()]);
}
}