package org.cagrid.gaards.pki.tools;
import java.io.File;
import java.security.KeyPair;
import java.security.KeyStore;
import java.security.Provider;
import java.security.Security;
import java.security.cert.X509Certificate;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import org.bouncycastle.asn1.x509.X509Name;
import org.cagrid.gaards.pki.CertUtil;
import org.cagrid.gaards.pki.KeyUtil;
/**
* @author <A href="mailto:langella@bmi.osu.edu">Stephen Langella </A>
* @author <A href="mailto:oster@bmi.osu.edu">Scott Oster </A>
* @author <A href="mailto:hastings@bmi.osu.edu">Shannon Hastings </A>
* @version $Id: ArgumentManagerTable.java,v 1.2 2004/10/15 16:35:16 langella
* Exp $
*/
public class AntGenerateEracomCA {
public static void main(String[] args) {
try {
String alias = args[0];
String dn = args[1];
String daysValid = args[2];
int slot = Integer.valueOf(args[3]).intValue();
String password = args[4];
String dir = args[5];
Provider provider = (Provider) Class.forName(
"au.com.eracom.crypto.provider.slot" + slot + ".ERACOMProvider").newInstance();
Security.addProvider(provider);
KeyStore keyStore = KeyStore.getInstance("CRYPTOKI", provider.getName());
keyStore.load(null, password.toCharArray());
KeyPair root = KeyUtil.generateRSAKeyPair2048(provider.getName());
int days = Integer.valueOf(daysValid).intValue();
while (days <= 0) {
System.err.println("Days Valid must be >0");
System.exit(1);
}
GregorianCalendar date = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
date.add(Calendar.MINUTE, -5);
Date start = new Date(date.getTimeInMillis());
date.add(Calendar.MINUTE, 5);
date.add(Calendar.DAY_OF_MONTH, days);
Date end = new Date(date.getTimeInMillis());
X509Certificate cert = CertUtil.generateCACertificate(provider.getName(), new X509Name(dn), start, end,
root, "SHA1WithRSA");
keyStore.setKeyEntry(alias, root.getPrivate(), null, new X509Certificate[]{cert});
String hash = CertUtil.getHashCode(cert);
File certFile = new File(dir + File.separator + hash + ".0");
File policyFile = new File(dir + File.separator + hash + ".signing_policy");
CertUtil.writeCertificate(cert, certFile);
CertUtil.writeSigningPolicy(cert, policyFile);
System.out.println("Successfully created the CA certificate:");
System.out.println(dn);
System.out.println("CA certificate valid till:");
System.out.println(cert.getNotAfter());
System.out.println("The CA certificate and private key were written to slot " + slot + " on the HSM.");
System.out.println("The CA certificate was written to the file: " + certFile.getAbsolutePath());
System.out.println("The CA signing policy was written to the file: " + policyFile.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}