package org.cagrid.gaards.pki.tools;
import java.io.File;
import java.security.cert.X509Certificate;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
import org.cagrid.gaards.pki.CertUtil;
import org.cagrid.gaards.pki.SecurityUtil;
public class ConvertCAFileNameToHash {
public static final String CERTIFICATE_IN = "c";
public static final String CERTIFICATE_IN_FULL = "cert";
public static final String HELP_OPT = "h";
public static final String HELP_OPT_FULL = "help";
public static void main(String[] args) {
SecurityUtil.init();
Options options = new Options();
Option help = new Option(HELP_OPT, HELP_OPT_FULL, false,
"Prints this message.");
Option in = new Option(CERTIFICATE_IN, CERTIFICATE_IN_FULL, true,
"Path to the certificate you wish to rename to use a hash filename.");
in.setRequired(true);
options.addOption(help);
options.addOption(in);
try {
CommandLineParser parser = new PosixParser();
CommandLine line = parser.parse(options, args);
if (line.hasOption(HELP_OPT)) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp(ConvertCAFileNameToHash.class.getName(),
options);
System.exit(0);
} else {
try {
File f = new File(line.getOptionValue(CERTIFICATE_IN));
X509Certificate cert = CertUtil.loadCertificate("BC", f);
String hash = CertUtil.getHashCode(cert);
File dir = f.getParentFile();
if(dir==null){
dir = new File(".");
}
File hashFile = new File(dir.getAbsolutePath()
+ File.separator + hash + ".0");
CertUtil.writeCertificate(cert, hashFile);
System.out.println("Wrote hash certificate to: "
+ hashFile.getAbsolutePath());
File signingPolicy = new File(dir.getAbsolutePath()
+ File.separator + hash + ".signing_policy");
CertUtil.writeSigningPolicy(cert, signingPolicy);
System.out.println("Wrote hash signing policy to: "
+ signingPolicy.getAbsolutePath());
} catch (Exception ex) {
ex.printStackTrace();
}
}
} catch (ParseException exp) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp(ConvertCAFileNameToHash.class.getName(),
options);
System.exit(1);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}