Example usage for org.bouncycastle.openssl MiscPEMGenerator MiscPEMGenerator

List of usage examples for org.bouncycastle.openssl MiscPEMGenerator MiscPEMGenerator

Introduction

In this page you can find the example usage for org.bouncycastle.openssl MiscPEMGenerator MiscPEMGenerator.

Prototype

public MiscPEMGenerator(Object o) 

Source Link

Usage

From source file:com.foilen.smalltools.crypt.bouncycastle.cert.RSACertificate.java

License:Open Source License

/**
 * Save the certificate in a PEM writer.
 *
 * @param writer/*from  ww  w  . j  ava 2s  .  com*/
 *            the writer. Will be closed at the end
 */
public void saveCertificatePem(Writer writer) {
    AssertTools.assertNotNull(certificateHolder, "The certificate is not set");
    PemWriter pemWriter = null;
    try {
        pemWriter = new PemWriter(writer);
        PemObjectGenerator pemObjectGenerator = new MiscPEMGenerator(certificateHolder);
        pemWriter.writeObject(pemObjectGenerator);
    } catch (Exception e) {
        throw new SmallToolsException("Could not save cert", e);
    } finally {
        CloseableTools.close(pemWriter);
    }
}

From source file:org.apache.zookeeper.server.quorum.QuorumSSLTest.java

License:Apache License

private void buildCRL(X509Certificate x509Certificate, String crlPath) throws Exception {
    X509v2CRLBuilder builder = new JcaX509v2CRLBuilder(x509Certificate.getIssuerX500Principal(), certStartTime);
    builder.addCRLEntry(x509Certificate.getSerialNumber(), certStartTime, CRLReason.cACompromise);
    builder.setNextUpdate(certEndTime);/* w w w . ja  v  a 2  s .  c o m*/
    builder.addExtension(Extension.authorityKeyIdentifier, false,
            new JcaX509ExtensionUtils().createAuthorityKeyIdentifier(rootCertificate));
    builder.addExtension(Extension.cRLNumber, false, new CRLNumber(new BigInteger("1000")));

    X509CRLHolder cRLHolder = builder.build(contentSigner);

    PemWriter pemWriter = new PemWriter(new FileWriter(crlPath));
    pemWriter.writeObject(new MiscPEMGenerator(cRLHolder));
    pemWriter.flush();
    pemWriter.close();
}

From source file:org.cryptoworkshop.ximix.console.applet.CommandApplet.java

License:Apache License

public void init() {
    if (Security.getProvider("BC") == null) {
        Security.addProvider(new BouncyCastleProvider());
    }//from ww  w  .ja va2s.c om

    final URL mixnetConf = getConfURL();
    final URL trustCa = getCaURL();

    JPanel topPanel = new JPanel();
    topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.X_AXIS));

    JPanel uploadPanel = new JPanel();

    uploadPanel.setBorder(BorderFactory.createTitledBorder("Upload Source Directory"));

    JButton uploadBrowseButton = new JButton("...");

    final JTextField uploadDirField = new JTextField(20);
    final XimixRegistrar adminRegistrar;

    try {
        PEMParser pemParser = new PEMParser(new InputStreamReader(trustCa.openStream()));

        trustAnchor = new JcaX509CertificateConverter().setProvider("BC")
                .getCertificate((X509CertificateHolder) pemParser.readObject());

        adminRegistrar = XimixRegistrarFactory.createAdminServiceRegistrar(mixnetConf.openStream(),
                new EventNotifier() {
                    @Override
                    public void notify(Level level, Throwable throwable) {
                        System.err.print(level + " " + throwable.getMessage());
                        throwable.printStackTrace(System.err);
                    }

                    @Override
                    public void notify(Level level, Object detail) {
                        System.err.println(level + " " + detail.toString());
                    }

                    @Override
                    public void notify(Level level, Object detail, Throwable throwable) {
                        System.err.println(level + " " + detail.toString());
                        throwable.printStackTrace(System.err);
                    }
                });
    } catch (Exception e) {
        throw new IllegalStateException("Can't parse trust anchor.", e);
    }

    uploadBrowseButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            JFileChooser chooser = new JFileChooser();

            chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

            int result = chooser.showDialog(CommandApplet.this, "Select");

            if (result == JFileChooser.APPROVE_OPTION) {
                uploadDirField.setText(chooser.getSelectedFile().getAbsolutePath());
            }
        }
    });

    uploadPanel.add(uploadDirField);

    uploadPanel.add(uploadBrowseButton);

    JPanel downloadPanel = new JPanel();

    downloadPanel.setBorder(BorderFactory.createTitledBorder("Download Directory"));

    JButton downloadBrowseButton = new JButton("...");

    final JTextField downloadDirField = new JTextField(20);

    downloadBrowseButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            JFileChooser chooser = new JFileChooser();

            chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

            int result = chooser.showDialog(CommandApplet.this, "Select");

            if (result == JFileChooser.APPROVE_OPTION) {
                downloadDirField.setText(chooser.getSelectedFile().getAbsolutePath());
            }
        }
    });

    downloadPanel.add(downloadDirField);
    downloadPanel.add(downloadBrowseButton);

    JPanel tablePanel = new JPanel();
    tablePanel.setLayout(new BoxLayout(tablePanel, BoxLayout.Y_AXIS));

    JPanel topTablePanel = new JPanel();
    topTablePanel.setLayout(new BoxLayout(topTablePanel, BoxLayout.X_AXIS));

    final JTextField shufflePlan = new JTextField(30);

    final EventNotifier eventNotifier = new EventNotifier() {
        @Override
        public void notify(Level level, Throwable throwable) {
            System.err.print(level + " " + throwable.getMessage());
            throwable.printStackTrace(System.err);
        }

        @Override
        public void notify(Level level, Object detail) {
            System.err.println(level + " " + detail.toString());
        }

        @Override
        public void notify(Level level, Object detail, Throwable throwable) {
            System.err.println(level + " " + detail.toString());
            throwable.printStackTrace(System.err);
        }
    };

    final JTable boardTable = new JTable(new BoardTableModel());

    JButton candidateMapBrowseButton = new JButton("...");

    final JTextField configField = new JTextField(20);

    candidateMapBrowseButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            JFileChooser chooser = new JFileChooser();

            chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

            int result = chooser.showDialog(CommandApplet.this, "Select");

            if (result == JFileChooser.APPROVE_OPTION) {
                configField.setText(chooser.getSelectedFile().getAbsolutePath());
            }
        }
    });

    JButton uploadButton = new JButton("Do Upload");

    final URL finalMixnetConf = mixnetConf;
    uploadButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            String dirName = uploadDirField.getText().trim();

            if (dirName.length() > 0) {
                Thread taskThread = new Thread(new FullUploadTask((BoardTableModel) boardTable.getModel(),
                        dirName, finalMixnetConf, eventNotifier));

                taskThread.setPriority(Thread.NORM_PRIORITY);

                taskThread.start();
            } else {
                JOptionPane.showMessageDialog(SwingUtilities.windowForComponent(CommandApplet.this),
                        "Please enter an upload source directory.", "Missing Field Error",
                        JOptionPane.ERROR_MESSAGE);
                return;
            }

        }
    });

    topTablePanel.add(uploadButton);

    JPanel shufflePanel = new JPanel(new FlowLayout(FlowLayout.LEFT));

    shufflePanel.add(new JLabel("Shuffle Plan:"));
    shufflePanel.add(shufflePlan);

    topTablePanel.add(shufflePanel);

    final JTextField keyID = new JTextField(15);
    JTextField threshold = new JTextField(3);

    keyID.setText("ECENCKEY");
    threshold.setText("4");

    JButton shuffleButton = new JButton("Shuffle and Download Selected");

    shuffleButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            String planStr = shufflePlan.getText().trim();
            String dirName = downloadDirField.getText().trim();
            String configName = configField.getText().trim();

            if (dirName.length() == 0) {
                JOptionPane.showMessageDialog(SwingUtilities.windowForComponent(CommandApplet.this),
                        "Please enter a download directory.", "Missing Field Error", JOptionPane.ERROR_MESSAGE);
                return;
            }

            if (configName.length() == 0) {
                JOptionPane.showMessageDialog(SwingUtilities.windowForComponent(CommandApplet.this),
                        "Please enter a candidate configuration file name.", "Missing Field Error",
                        JOptionPane.ERROR_MESSAGE);
                return;
            }

            if (planStr.length() > 0) {
                String[] plan = planStr.split(",");

                for (int i = 0; i != plan.length; i++) {
                    plan[i] = plan[i].trim();
                    if (plan[i].length() == 0) {
                        JOptionPane.showMessageDialog(SwingUtilities.windowForComponent(CommandApplet.this),
                                "Empty node name found.", "Syntax Error", JOptionPane.ERROR_MESSAGE);
                        return;
                    }
                }

                Thread taskThread = new Thread(new FullShuffleTask(new File(dirName), keyID.getText().trim(),
                        (BoardTableModel) boardTable.getModel(), plan, finalMixnetConf,
                        configField.getText().trim(), eventNotifier));

                taskThread.setPriority(Thread.NORM_PRIORITY);

                taskThread.start();
            } else {
                JOptionPane.showMessageDialog(SwingUtilities.windowForComponent(CommandApplet.this),
                        "Please enter a shuffle plan.", "Missing Field Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    });

    JPanel downloadControlPanel = new JPanel();
    downloadControlPanel.setLayout(new BoxLayout(downloadControlPanel, BoxLayout.Y_AXIS));

    JPanel downloadKeyPanel = new JPanel();
    downloadKeyPanel.setLayout(new BoxLayout(downloadKeyPanel, BoxLayout.X_AXIS));

    JButton exportButton = new JButton("Export Key");

    exportButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            JFileChooser chooser = new JFileChooser();

            chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

            int result = chooser.showDialog(CommandApplet.this, "Save");

            if (result == JFileChooser.APPROVE_OPTION) {
                try {
                    KeyService keyService = adminRegistrar.connect(KeyService.class);

                    byte[] encPubKey = keyService.fetchPublicKey(keyID.getText().trim());

                    PEMWriter pWrt = new PEMWriter(new FileWriter(chooser.getSelectedFile().getAbsolutePath()));

                    pWrt.writeObject(new MiscPEMGenerator(SubjectPublicKeyInfo.getInstance(encPubKey)));

                    pWrt.close();

                    keyService.shutdown();
                } catch (Exception e) {
                    // TODO:
                    e.printStackTrace();
                }

            }
        }
    });

    JPanel keyIDPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
    keyIDPanel.add(new JLabel("Key ID: "));
    keyIDPanel.add(keyID);

    JPanel thresholdPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
    thresholdPanel.add(new JLabel("Threshold"));
    thresholdPanel.add(threshold);

    downloadKeyPanel.add(keyIDPanel);
    downloadKeyPanel.add(thresholdPanel);
    downloadKeyPanel.add(exportButton);

    JPanel candidateMapPanel = new JPanel();
    candidateMapPanel.add(new JLabel("Candidate Config: "));

    candidateMapPanel.add(configField);
    candidateMapPanel.add(candidateMapBrowseButton);

    JPanel downloadButtonPanel = new JPanel();
    downloadButtonPanel.setLayout(new BoxLayout(downloadButtonPanel, BoxLayout.X_AXIS));

    final JButton selectAllButton = new JButton("Select All");

    selectAllButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            BoardTableModel tableModel = (BoardTableModel) boardTable.getModel();

            if (selectAllButton.getText().startsWith("Sele")) {
                selectAllButton.setText("Deselect All");
                for (BoardEntry entry : tableModel.getEntries()) {
                    entry.setSelected(true);
                }
            } else {
                selectAllButton.setText("Select All");
                for (BoardEntry entry : tableModel.getEntries()) {
                    entry.setSelected(false);
                }
            }
        }
    });
    downloadButtonPanel.add(selectAllButton);
    downloadButtonPanel.add(shuffleButton);

    downloadControlPanel.add(downloadKeyPanel);
    downloadControlPanel.add(candidateMapPanel);
    downloadControlPanel.add(downloadButtonPanel);

    topTablePanel.add(downloadControlPanel);
    topTablePanel.add(Box.createHorizontalGlue());

    boardTable.getTableHeader().setPreferredSize(
            new Dimension(boardTable.getColumnModel().getTotalColumnWidth(), boardTable.getRowHeight(0) * 2));

    tablePanel.add(topTablePanel);
    tablePanel.add(new JScrollPane(boardTable));

    JPanel basePanel = new JPanel();

    basePanel.setLayout(new BoxLayout(basePanel, BoxLayout.Y_AXIS));

    topPanel.add(uploadPanel);
    topPanel.add(Box.createHorizontalGlue());
    topPanel.add(downloadPanel);

    basePanel.add(topPanel);
    basePanel.add(tablePanel);

    try {
        MonitorService monitor = adminRegistrar.connect(MonitorService.class);

        monitor.addBulletinBoardListener(new NetworkBoardListener() {
            @Override
            public void boardChanged(String boardName, BoardDetail boardDetail) {
                BoardTableModel tableModel = (BoardTableModel) boardTable.getModel();

                BoardEntry entry = tableModel.getEntry(boardName, boardDetail.getHost(),
                        boardDetail.getBackupHost());

                entry.setMessageCount(boardDetail.getMessageCount());
            }
        });
    } catch (RegistrarServiceException e) {
        // TODO:
        e.printStackTrace();
    }

    this.getContentPane().add(basePanel);
}

From source file:org.eclipse.milo.opcua.stack.core.util.CertificateUtil.java

License:Open Source License

/**
 * Get a PEM-encoded String containing a PKCS #10 certificate signing request.
 *
 * @param csr the {@link X509Certificate} to request signing for.
 * @return a PEM-encoded String containing a PKCS #10 CSR.
 * @throws IOException if creating the signing request fails for any reason.
 *//*from   w  w w.jav a 2s .  c  o m*/
public static String getCsrPem(PKCS10CertificationRequest csr) throws IOException {
    StringWriter stringWriter = new StringWriter();

    try (PemWriter pemWriter = new PemWriter(stringWriter)) {
        pemWriter.writeObject(new MiscPEMGenerator(csr));
        pemWriter.flush();
    }

    return stringWriter.toString();
}

From source file:org.springframework.cloud.context.encrypt.EncryptorFactory.java

License:Apache License

private String normalizePem(String data) {
    PEMKeyPair pemKeyPair = null;/*from w  w  w  .j a v  a  2s .c o m*/
    try (PEMParser pemParser = new PEMParser(new StringReader(data))) {
        pemKeyPair = (PEMKeyPair) pemParser.readObject();
        PrivateKeyInfo privateKeyInfo = pemKeyPair.getPrivateKeyInfo();

        StringWriter textWriter = new StringWriter();
        try (PemWriter pemWriter = new PemWriter(textWriter)) {
            PemObjectGenerator pemObjectGenerator = new MiscPEMGenerator(privateKeyInfo);

            pemWriter.writeObject(pemObjectGenerator);
            pemWriter.flush();
            return textWriter.toString();
        }
    } catch (IOException e) {
        throw new RuntimeException(e.getMessage(), e);
    }
}

From source file:org.wildfly.extension.elytron.TlsTestCase.java

License:Apache License

private static void createTemporaryCRLFile(X509CRLHolder crlHolder, File outputFile) throws Exception {
    try (PemWriter output = new PemWriter(new OutputStreamWriter(new FileOutputStream(outputFile)))) {
        output.writeObject(new MiscPEMGenerator(crlHolder));
    }/*  w  w  w  .  j  a  va  2  s.  com*/
}

From source file:org.wildfly.security.ssl.SSLAuthenticationTest.java

License:Open Source License

private static void createKeyStores(File ladybirdFile, File scarabFile, File dungFile, File fireflyFile,
        File beetlesFile, File trustFile, File shortwingedFile, File roveFile, File caBlankPemCrl,
        File icaBlankPemCrl, File blankBlankPemCrl, File fireflyRevokedPemCrl, File icaRevokedPemCrl)
        throws Exception {
    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

    X500Principal issuerDN = new X500Principal(
            "CN=Elytron CA, ST=Elytron, C=UK, EMAILADDRESS=elytron@wildfly.org, O=Root Certificate Authority");
    X500Principal intermediateIssuerDN = new X500Principal(
            "CN=Elytron ICA, ST=Elytron, C=UK, O=Intermediate Certificate Authority");
    X500Principal ladybirdDN = new X500Principal("OU=Elytron, O=Elytron, C=UK, ST=Elytron, CN=Ladybird");
    X500Principal scarabDN = new X500Principal("OU=Elytron, O=Elytron, C=UK, ST=Elytron, CN=Scarab");
    X500Principal dungDN = new X500Principal("OU=Elytron, O=Elytron, C=UK, ST=Elytron, CN=Dung");
    X500Principal fireflyDN = new X500Principal("OU=Elytron, O=Elytron, C=UK, ST=Elytron, CN=Firefly");
    X500Principal roveDN = new X500Principal("OU=Elytron, O=Elytron, C=UK, ST=Elytron, CN=Rove");

    KeyStore ladybirdKeyStore = loadKeyStore();
    KeyStore scarabKeyStore = loadKeyStore();
    KeyStore dungKeyStore = loadKeyStore();
    KeyStore fireflyKeyStore = loadKeyStore();
    KeyStore beetlesKeyStore = loadKeyStore();
    KeyStore trustStore = loadKeyStore();
    KeyStore shortwingedKeyStore = loadKeyStore();
    KeyStore roveKeyStore = loadKeyStore();

    // Generates the issuer certificate and adds it to the keystores
    SelfSignedX509CertificateAndSigningKey issuerSelfSignedX509CertificateAndSigningKey = SelfSignedX509CertificateAndSigningKey
            .builder().setDn(issuerDN).setKeyAlgorithmName("RSA").setSignatureAlgorithmName("SHA1withRSA")
            .addExtension(false, "BasicConstraints", "CA:true,pathlen:2147483647").build();
    X509Certificate issuerCertificate = issuerSelfSignedX509CertificateAndSigningKey.getSelfSignedCertificate();
    ladybirdKeyStore.setCertificateEntry("ca", issuerCertificate);
    scarabKeyStore.setCertificateEntry("ca", issuerCertificate);
    dungKeyStore.setCertificateEntry("ca", issuerCertificate);
    fireflyKeyStore.setCertificateEntry("ca", issuerCertificate);
    trustStore.setCertificateEntry("mykey", issuerCertificate);

    // Generates the intermediate issuer certificate
    KeyPair intermediateIssuerKeys = keyPairGenerator.generateKeyPair();
    PrivateKey intermediateIssuerSigningKey = intermediateIssuerKeys.getPrivate();
    PublicKey intermediateIssuerPublicKey = intermediateIssuerKeys.getPublic();

    X509Certificate intermediateIssuerCertificate = new X509CertificateBuilder().setIssuerDn(issuerDN)
            .setSubjectDn(intermediateIssuerDN).setSignatureAlgorithmName("SHA1withRSA")
            .setSigningKey(issuerSelfSignedX509CertificateAndSigningKey.getSigningKey())
            .setPublicKey(intermediateIssuerPublicKey).setSerialNumber(new BigInteger("6"))
            .addExtension(new BasicConstraintsExtension(false, true, 0)).build();

    // Generates certificate and keystore for Ladybird
    KeyPair ladybirdKeys = keyPairGenerator.generateKeyPair();
    PrivateKey ladybirdSigningKey = ladybirdKeys.getPrivate();
    PublicKey ladybirdPublicKey = ladybirdKeys.getPublic();

    X509Certificate ladybirdCertificate = new X509CertificateBuilder().setIssuerDn(issuerDN)
            .setSubjectDn(ladybirdDN).setSignatureAlgorithmName("SHA1withRSA")
            .setSigningKey(issuerSelfSignedX509CertificateAndSigningKey.getSigningKey())
            .setPublicKey(ladybirdPublicKey).setSerialNumber(new BigInteger("3"))
            .addExtension(new BasicConstraintsExtension(false, false, -1)).build();
    ladybirdKeyStore.setKeyEntry("ladybird", ladybirdSigningKey, PASSWORD,
            new X509Certificate[] { ladybirdCertificate, issuerCertificate });

    // Generates certificate and keystore for Scarab
    KeyPair scarabKeys = keyPairGenerator.generateKeyPair();
    PrivateKey scarabSigningKey = scarabKeys.getPrivate();
    PublicKey scarabPublicKey = scarabKeys.getPublic();

    X509Certificate scarabCertificate = new X509CertificateBuilder().setIssuerDn(issuerDN)
            .setSubjectDn(scarabDN).setSignatureAlgorithmName("SHA1withRSA")
            .setSigningKey(issuerSelfSignedX509CertificateAndSigningKey.getSigningKey())
            .setPublicKey(scarabPublicKey).setSerialNumber(new BigInteger("4"))
            .addExtension(new BasicConstraintsExtension(false, false, -1)).build();
    scarabKeyStore.setKeyEntry("scarab", scarabSigningKey, PASSWORD,
            new X509Certificate[] { scarabCertificate, issuerCertificate });

    // Generates certificate and keystore for Dung
    KeyPair dungKeys = keyPairGenerator.generateKeyPair();
    PrivateKey dungSigningKey = dungKeys.getPrivate();
    PublicKey dungPublicKey = dungKeys.getPublic();

    X509Certificate dungCertificate = new X509CertificateBuilder().setIssuerDn(issuerDN).setSubjectDn(dungDN)
            .setSignatureAlgorithmName("SHA1withRSA")
            .setSigningKey(issuerSelfSignedX509CertificateAndSigningKey.getSigningKey())
            .setPublicKey(dungPublicKey).setSerialNumber(new BigInteger("2"))
            .addExtension(new BasicConstraintsExtension(false, false, -1)).build();
    dungKeyStore.setKeyEntry("dung", dungSigningKey, PASSWORD,
            new X509Certificate[] { dungCertificate, issuerCertificate });

    // Generates certificate and keystore for Firefly
    KeyPair fireflyKeys = keyPairGenerator.generateKeyPair();
    PrivateKey fireflySigningKey = fireflyKeys.getPrivate();
    PublicKey fireflyPublicKey = fireflyKeys.getPublic();

    X509Certificate fireflyCertificate = new X509CertificateBuilder().setIssuerDn(issuerDN)
            .setSubjectDn(fireflyDN).setSignatureAlgorithmName("SHA1withRSA")
            .setSigningKey(issuerSelfSignedX509CertificateAndSigningKey.getSigningKey())
            .setPublicKey(fireflyPublicKey).setSerialNumber(new BigInteger("1"))
            .addExtension(new BasicConstraintsExtension(false, false, -1)).build();
    fireflyKeyStore.setKeyEntry("firefly", fireflySigningKey, PASSWORD,
            new X509Certificate[] { fireflyCertificate, issuerCertificate });

    // Generates certificate and keystore for Rove
    KeyPair roveKeys = keyPairGenerator.generateKeyPair();
    PrivateKey roveSigningKey = roveKeys.getPrivate();
    PublicKey rovePublicKey = roveKeys.getPublic();

    X509Certificate roveCertificate = new X509CertificateBuilder().setIssuerDn(intermediateIssuerDN)
            .setSubjectDn(roveDN).setSignatureAlgorithmName("SHA256withRSA")
            .setSigningKey(intermediateIssuerSigningKey).setPublicKey(rovePublicKey)
            .setSerialNumber(new BigInteger("100"))
            .addExtension(new BasicConstraintsExtension(false, false, -1)).build();
    roveKeyStore.setKeyEntry("rove", roveSigningKey, PASSWORD,
            new X509Certificate[] { roveCertificate, intermediateIssuerCertificate, issuerCertificate });

    // Adds trusted certs for beetles
    beetlesKeyStore.setCertificateEntry("ladybird", ladybirdCertificate);
    beetlesKeyStore.setCertificateEntry("scarab", scarabCertificate);
    beetlesKeyStore.setCertificateEntry("dung", dungCertificate);
    beetlesKeyStore.setCertificateEntry("firefly", fireflyCertificate);

    // Adds trusted cert for shortwinged
    shortwingedKeyStore.setCertificateEntry("rove", roveCertificate);

    // Used for all CRLs
    Calendar calendar = Calendar.getInstance();
    Date currentDate = calendar.getTime();
    calendar.add(Calendar.YEAR, 1);
    Date nextYear = calendar.getTime();
    calendar.add(Calendar.YEAR, -1);
    calendar.add(Calendar.SECOND, -30);
    Date revokeDate = calendar.getTime();

    // Creates the CRL for ca/crl/blank.pem
    X509v2CRLBuilder caBlankCrlBuilder = new X509v2CRLBuilder(
            convertSunStyleToBCStyle(intermediateIssuerCertificate.getIssuerDN()), currentDate);
    X509CRLHolder caBlankCrlHolder = caBlankCrlBuilder.setNextUpdate(nextYear)
            .build(new JcaContentSignerBuilder("SHA1withRSA").setProvider("BC")
                    .build(issuerSelfSignedX509CertificateAndSigningKey.getSigningKey()));

    // Creates the CRL for ica/crl/blank.pem
    X509v2CRLBuilder icaBlankCrlBuilder = new X509v2CRLBuilder(convertSunStyleToBCStyle(intermediateIssuerDN),
            currentDate);/*w ww .j ava 2  s  .  c om*/
    X509CRLHolder icaBlankCrlHolder = icaBlankCrlBuilder.setNextUpdate(nextYear).build(
            new JcaContentSignerBuilder("SHA256withRSA").setProvider("BC").build(intermediateIssuerSigningKey));

    // Creates the CRL for firefly-revoked.pem
    X509v2CRLBuilder fireflyRevokedCrlBuilder = new X509v2CRLBuilder(
            convertSunStyleToBCStyle(issuerCertificate.getSubjectDN()), currentDate);
    fireflyRevokedCrlBuilder.addCRLEntry(new BigInteger("1"), revokeDate, CRLReason.unspecified);
    X509CRLHolder fireflyRevokedCrlHolder = fireflyRevokedCrlBuilder.setNextUpdate(nextYear)
            .build(new JcaContentSignerBuilder("SHA1withRSA").setProvider("BC")
                    .build(issuerSelfSignedX509CertificateAndSigningKey.getSigningKey()));

    // Creates the CRL for ica-revoked.pem
    X509v2CRLBuilder icaRevokedCrlBuilder = new X509v2CRLBuilder(
            convertSunStyleToBCStyle(issuerCertificate.getSubjectDN()), currentDate);
    icaRevokedCrlBuilder.addCRLEntry(new BigInteger("6"), revokeDate, CRLReason.unspecified);
    X509CRLHolder icaRevokedCrlHolder = icaRevokedCrlBuilder.setNextUpdate(nextYear)
            .build(new JcaContentSignerBuilder("SHA1withRSA").setProvider("BC")
                    .build(issuerSelfSignedX509CertificateAndSigningKey.getSigningKey()));

    // Create the temporary files
    createTemporaryKeyStoreFile(ladybirdKeyStore, ladybirdFile, PASSWORD);
    createTemporaryKeyStoreFile(scarabKeyStore, scarabFile, PASSWORD);
    createTemporaryKeyStoreFile(dungKeyStore, dungFile, PASSWORD);
    createTemporaryKeyStoreFile(fireflyKeyStore, fireflyFile, PASSWORD);
    createTemporaryKeyStoreFile(beetlesKeyStore, beetlesFile, PASSWORD);
    createTemporaryKeyStoreFile(trustStore, trustFile, PASSWORD);
    createTemporaryKeyStoreFile(shortwingedKeyStore, shortwingedFile, PASSWORD);
    createTemporaryKeyStoreFile(roveKeyStore, roveFile, PASSWORD);

    PemWriter caBlankCrlOutput = new PemWriter(new OutputStreamWriter(new FileOutputStream(caBlankPemCrl)));
    PemWriter icaBlankCrlOutput = new PemWriter(new OutputStreamWriter(new FileOutputStream(icaBlankPemCrl)));
    PemWriter blankBlankCrlOutput = new PemWriter(
            new OutputStreamWriter(new FileOutputStream(blankBlankPemCrl)));
    PemWriter fireflyRevokedCrlOutput = new PemWriter(
            new OutputStreamWriter(new FileOutputStream(fireflyRevokedPemCrl)));
    PemWriter icaRevokedCrlOutput = new PemWriter(
            new OutputStreamWriter(new FileOutputStream(icaRevokedPemCrl)));

    caBlankCrlOutput.writeObject(new MiscPEMGenerator(caBlankCrlHolder));
    icaBlankCrlOutput.writeObject(new MiscPEMGenerator(icaBlankCrlHolder));
    blankBlankCrlOutput.writeObject(new MiscPEMGenerator(icaBlankCrlHolder));
    blankBlankCrlOutput.writeObject(new MiscPEMGenerator(caBlankCrlHolder));
    fireflyRevokedCrlOutput.writeObject(new MiscPEMGenerator(fireflyRevokedCrlHolder));
    icaRevokedCrlOutput.writeObject(new MiscPEMGenerator(icaRevokedCrlHolder));

    caBlankCrlOutput.close();
    icaBlankCrlOutput.close();
    blankBlankCrlOutput.close();
    fireflyRevokedCrlOutput.close();
    icaRevokedCrlOutput.close();
}