1
10package org.jstk.cert.ca;
11
12import java.security.cert.Certificate;
13import java.security.cert.X509Certificate;
14import java.security.cert.CertPath;
15import java.security.cert.CertificateFactory;
16import java.security.PrivateKey;
17import java.math.BigInteger;
18import java.io.FileInputStream;
19import java.io.BufferedInputStream;
20
21public class CADatabase {
22 public final static String recordSeparator = "|";
23 public final static String escapedRecordSeparator = "\\|";
24
25 private CADatabaseSpi spi;
26 private String type;
27
28 protected CADatabase(CADatabaseSpi spi, String type){
29 this.spi = spi;
30 this.type = type;
31 }
32
33 public static CADatabase getInstance(String type, CADatabaseParams params)
34 throws CADatabaseException {
35 if (params instanceof FileBasedCADatabaseParams)
36 return new CADatabase(new FileBasedCADatabase((FileBasedCADatabaseParams)params), type);
37 throw new CADatabaseException("CADatabaseParams not supported: " + params.getClass());
38 }
39
40 public IssuedCerts getIssuedCerts(){
41 return spi.getIssuedCerts();
42 }
43
44 public RevokedCerts getRevokedCerts(){
45 return spi.getRevokedCerts();
46 }
47
48 public Certificate getCACert(){
49 return spi.getCACert();
50 }
51
52 public CertPath getCACertPath(){
53 return spi.getCACertPath();
54 }
55
56 public PrivateKey getCAPrivateKey(){
57 return spi.getCAPrivateKey();
58 }
59
60 public BigInteger nextSerialNumber() throws CADatabaseException {
61 return spi.nextSerialNumber();
62 }
63
64 public static void main(String[] args) throws Exception {
65 if (args.length != 2){
66 System.out.println("Usage:: java CADatabase {add|revoke} <cert_file>");
67 return;
68 }
69 String cmd = args[0];
70 String certFileName = args[1];
71 FileInputStream fis = new FileInputStream(certFileName);
72 BufferedInputStream bis = new BufferedInputStream(fis);
73 CertificateFactory cf = CertificateFactory.getInstance("X.509");
74 X509Certificate cert = (X509Certificate)cf.generateCertificate(bis);
75
76 FileBasedCADatabaseParams fbParams = new FileBasedCADatabaseParams("cadir");
77 CADatabase cadb = CADatabase.getInstance("file", fbParams);
78 if (cmd.equals("add")){
79 cadb.getIssuedCerts().add(cert);
80 System.out.println("Added to Issued Certs: " + cert.getSerialNumber());
81 } else if (cmd.equals("revoke")){
82 cadb.getRevokedCerts().add(cert);
83 System.out.println("Added to Revoked Certs: " + cert.getSerialNumber());
84 }
85 }
86}
87
88