1 /*
2  * @(#) $Id: CADatabase.java,v 1.2 2003/07/08 08:13:52 pankaj Exp $
3  *
4  * Copyright (c) 2002-03 by Pankaj Kumar (http://www.pankaj-k.net). 
5  * All rights reserved.
6  *
7  * The license governing the use of this file can be found in the 
8  * root directory of the containing software.
9  */
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