gui.ExtensionsPopup.java Source code

Java tutorial

Introduction

Here is the source code for gui.ExtensionsPopup.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package gui;

import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.asn1.x509.Extension;
import org.bouncycastle.asn1.x509.GeneralName;
import org.bouncycastle.asn1.x509.GeneralNames;
import org.bouncycastle.asn1.x509.GeneralNamesBuilder;

/**
 *
 * @author Mita
 */
public class ExtensionsPopup extends javax.swing.JFrame {

    /**
     * Creates new form ExportPopup
     */
    public ExtensionsPopup(MainWindow parent, ExtensionsGUI extensions) {
        this.parentFrame = parent;
        this.extensions = extensions;

        initComponents();
        myInitComponents();

        loadExtensions();
    }

    /**
     * This method is called from within the constructor to initialize the form. WARNING: Do NOT
     * modify this code. The content of this method is always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        extensionsPanel = new javax.swing.JPanel();
        chooseExtensionsLabel = new javax.swing.JLabel();
        okButton = new javax.swing.JButton();
        basicConstraintsCheckBox = new javax.swing.JCheckBox();
        issuerAltNameCheckBox = new javax.swing.JCheckBox();
        keyUsageCheckBox = new javax.swing.JCheckBox();
        extensionsSeparator1 = new javax.swing.JSeparator();
        basicConstraintsPanel = new javax.swing.JPanel();
        basicConstraintsLabel = new javax.swing.JLabel();
        basicConstraintsCriticalCheckBox = new javax.swing.JCheckBox();
        basicConstraintsCACheckBox = new javax.swing.JCheckBox();
        depthOfCertificateChainTextField = new javax.swing.JTextField();
        depthOfCertChainLabel = new javax.swing.JLabel();
        extensionsSeparator2 = new javax.swing.JSeparator();
        keyUsagePanel = new javax.swing.JPanel();
        keyUsageLabel = new javax.swing.JLabel();
        keyUsageCriticalCheckBox = new javax.swing.JCheckBox();
        digitalSignatureCheckBox = new javax.swing.JCheckBox();
        nonRepudiationCheckBox = new javax.swing.JCheckBox();
        keyEnciphermentCheckBox = new javax.swing.JCheckBox();
        dataEnciphermentCheckBox = new javax.swing.JCheckBox();
        keyAgreementCheckBox = new javax.swing.JCheckBox();
        keyCertSignCheckBox = new javax.swing.JCheckBox();
        cRLSignCheckBox = new javax.swing.JCheckBox();
        encipherOnlyCheckBox = new javax.swing.JCheckBox();
        decipherOnlyCheckBox = new javax.swing.JCheckBox();
        extensionsSeparator3 = new javax.swing.JSeparator();
        issuerAltNamePanel = new javax.swing.JPanel();
        issuerAltNameLabel = new javax.swing.JLabel();
        issuerAltNameCriticalCheckBox = new javax.swing.JCheckBox();
        issuerAltNameScrollPanel = new javax.swing.JScrollPane();
        issuerAltNameTextArea = new javax.swing.JTextArea();
        issuerAltNameComboBox = new javax.swing.JComboBox<>();
        clearIssuerAltNameButton = new javax.swing.JButton();
        addIssuerAltNameButton = new javax.swing.JButton();
        issuerAltNameTextField = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Extensions");
        setAlwaysOnTop(true);
        setResizable(false);

        extensionsPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        chooseExtensionsLabel.setText("Choose the extensions you want in your certificate:");

        okButton.setText("OK");
        okButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                okButtonActionPerformed(evt);
            }
        });

        basicConstraintsCheckBox.setText("Basic Constraints");
        basicConstraintsCheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                basicConstraintsCheckBoxActionPerformed(evt);
            }
        });

        issuerAltNameCheckBox.setText("Issuer Alternative Name");
        issuerAltNameCheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                issuerAltNameCheckBoxActionPerformed(evt);
            }
        });

        keyUsageCheckBox.setText("Key Usage");
        keyUsageCheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                keyUsageCheckBoxActionPerformed(evt);
            }
        });

        basicConstraintsLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        basicConstraintsLabel.setText("Basic Constraints:");

        basicConstraintsCriticalCheckBox.setText("Critical Extension");

        basicConstraintsCACheckBox.setText("CA");
        basicConstraintsCACheckBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                basicConstraintsCACheckBoxActionPerformed(evt);
            }
        });

        depthOfCertChainLabel.setText("Depth of certificate chain:");

        javax.swing.GroupLayout basicConstraintsPanelLayout = new javax.swing.GroupLayout(basicConstraintsPanel);
        basicConstraintsPanel.setLayout(basicConstraintsPanelLayout);
        basicConstraintsPanelLayout.setHorizontalGroup(
                basicConstraintsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(basicConstraintsPanelLayout.createSequentialGroup().addContainerGap()
                                .addGroup(basicConstraintsPanelLayout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(basicConstraintsLabel)
                                        .addGroup(basicConstraintsPanelLayout.createSequentialGroup()
                                                .addGap(10, 10, 10).addComponent(basicConstraintsCACheckBox)))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(basicConstraintsPanelLayout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(basicConstraintsCriticalCheckBox)
                                        .addGroup(basicConstraintsPanelLayout.createSequentialGroup()
                                                .addComponent(depthOfCertChainLabel)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(depthOfCertificateChainTextField,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 160,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE)))
                                .addContainerGap(33, Short.MAX_VALUE)));
        basicConstraintsPanelLayout.setVerticalGroup(basicConstraintsPanelLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(basicConstraintsPanelLayout.createSequentialGroup().addContainerGap()
                        .addGroup(basicConstraintsPanelLayout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(basicConstraintsLabel).addComponent(basicConstraintsCriticalCheckBox))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(basicConstraintsPanelLayout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(basicConstraintsCACheckBox)
                                .addComponent(depthOfCertificateChainTextField,
                                        javax.swing.GroupLayout.PREFERRED_SIZE, 29,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(depthOfCertChainLabel))
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));

        keyUsageLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        keyUsageLabel.setText("Key Usage:");

        keyUsageCriticalCheckBox.setText("Critical Extension");

        digitalSignatureCheckBox.setText("Digital signature");

        nonRepudiationCheckBox.setText("Non repudiation");

        keyEnciphermentCheckBox.setText("Key encipherment");

        dataEnciphermentCheckBox.setText("Data encipherment");

        keyAgreementCheckBox.setText("Key agreement");

        keyCertSignCheckBox.setText("keyCertSign");

        cRLSignCheckBox.setText("cRLSign");

        encipherOnlyCheckBox.setText("Encipher only");

        decipherOnlyCheckBox.setText("Decipher only");

        javax.swing.GroupLayout keyUsagePanelLayout = new javax.swing.GroupLayout(keyUsagePanel);
        keyUsagePanel.setLayout(keyUsagePanelLayout);
        keyUsagePanelLayout.setHorizontalGroup(
                keyUsagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(keyUsagePanelLayout.createSequentialGroup().addGap(10, 10, 10)
                                .addGroup(keyUsagePanelLayout
                                        .createParallelGroup(
                                                javax.swing.GroupLayout.Alignment.LEADING)
                                        .addGroup(
                                                keyUsagePanelLayout.createSequentialGroup().addGap(10, 10, 10)
                                                        .addGroup(keyUsagePanelLayout
                                                                .createParallelGroup(
                                                                        javax.swing.GroupLayout.Alignment.LEADING)
                                                                .addComponent(digitalSignatureCheckBox)
                                                                .addComponent(dataEnciphermentCheckBox)
                                                                .addComponent(cRLSignCheckBox))
                                                        .addGap(18, 18, 18)
                                                        .addGroup(keyUsagePanelLayout
                                                                .createParallelGroup(
                                                                        javax.swing.GroupLayout.Alignment.LEADING)
                                                                .addComponent(nonRepudiationCheckBox)
                                                                .addComponent(keyAgreementCheckBox)
                                                                .addComponent(encipherOnlyCheckBox))
                                                        .addGap(18, 18, 18)
                                                        .addGroup(keyUsagePanelLayout
                                                                .createParallelGroup(
                                                                        javax.swing.GroupLayout.Alignment.LEADING)
                                                                .addComponent(keyEnciphermentCheckBox)
                                                                .addComponent(keyCertSignCheckBox)
                                                                .addComponent(decipherOnlyCheckBox)))
                                        .addGroup(keyUsagePanelLayout.createSequentialGroup()
                                                .addComponent(keyUsageLabel).addGap(18, 18, 18)
                                                .addComponent(keyUsageCriticalCheckBox)))
                                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
        keyUsagePanelLayout.setVerticalGroup(keyUsagePanelLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(keyUsagePanelLayout.createSequentialGroup().addContainerGap()
                        .addGroup(
                                keyUsagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                        .addComponent(keyUsageLabel).addComponent(keyUsageCriticalCheckBox))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(keyUsagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                                .addComponent(digitalSignatureCheckBox).addComponent(nonRepudiationCheckBox)
                                .addComponent(keyEnciphermentCheckBox))
                        .addGap(11, 11, 11)
                        .addGroup(keyUsagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                                .addComponent(dataEnciphermentCheckBox).addComponent(keyAgreementCheckBox)
                                .addComponent(keyCertSignCheckBox))
                        .addGap(11, 11, 11)
                        .addGroup(keyUsagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                                .addComponent(cRLSignCheckBox).addComponent(encipherOnlyCheckBox)
                                .addComponent(decipherOnlyCheckBox))
                        .addContainerGap()));

        issuerAltNameLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        issuerAltNameLabel.setText("Issuer Alternative Name:");

        issuerAltNameCriticalCheckBox.setText("Critical Extension");

        issuerAltNameTextArea.setEditable(false);
        issuerAltNameTextArea.setColumns(20);
        issuerAltNameTextArea.setRows(5);
        issuerAltNameScrollPanel.setViewportView(issuerAltNameTextArea);

        issuerAltNameComboBox.setModel(new javax.swing.DefaultComboBoxModel<>(
                new String[] { "Other Name", "RFC822 Name", "DNS Name", "x400 Address", "Directory Name",
                        "EDI Party Name", "URI", "IP Address", "Registered ID" }));

        clearIssuerAltNameButton.setText("Clear");
        clearIssuerAltNameButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                clearIssuerAltNameButtonActionPerformed(evt);
            }
        });

        addIssuerAltNameButton.setText("Add");
        addIssuerAltNameButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addIssuerAltNameButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout issuerAltNamePanelLayout = new javax.swing.GroupLayout(issuerAltNamePanel);
        issuerAltNamePanel.setLayout(issuerAltNamePanelLayout);
        issuerAltNamePanelLayout.setHorizontalGroup(
                issuerAltNamePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                        javax.swing.GroupLayout.Alignment.TRAILING,
                        issuerAltNamePanelLayout.createSequentialGroup().addGroup(issuerAltNamePanelLayout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addGroup(issuerAltNamePanelLayout.createSequentialGroup().addContainerGap()
                                        .addGroup(issuerAltNamePanelLayout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                                .addComponent(issuerAltNameComboBox,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE, 131,
                                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addComponent(issuerAltNameLabel,
                                                        javax.swing.GroupLayout.Alignment.LEADING))
                                        .addGap(18, 18, 18)
                                        .addGroup(issuerAltNamePanelLayout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                .addComponent(issuerAltNameCriticalCheckBox)
                                                .addGroup(issuerAltNamePanelLayout.createSequentialGroup()
                                                        .addComponent(issuerAltNameTextField)
                                                        .addPreferredGap(
                                                                javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                                        .addComponent(addIssuerAltNameButton)
                                                        .addPreferredGap(
                                                                javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                        .addComponent(clearIssuerAltNameButton))))
                                .addGroup(issuerAltNamePanelLayout.createSequentialGroup().addGap(20, 20, 20)
                                        .addComponent(issuerAltNameScrollPanel)))
                                .addGap(20, 20, 20)));

        issuerAltNamePanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
                new java.awt.Component[] { addIssuerAltNameButton, clearIssuerAltNameButton });

        issuerAltNamePanelLayout.setVerticalGroup(issuerAltNamePanelLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(issuerAltNamePanelLayout.createSequentialGroup().addContainerGap()
                        .addGroup(issuerAltNamePanelLayout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(issuerAltNameLabel).addComponent(issuerAltNameCriticalCheckBox))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(issuerAltNamePanelLayout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(issuerAltNameComboBox, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(clearIssuerAltNameButton).addComponent(addIssuerAltNameButton)
                                .addComponent(issuerAltNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(10, 10, 10).addComponent(issuerAltNameScrollPanel,
                                javax.swing.GroupLayout.PREFERRED_SIZE, 183, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap()));

        issuerAltNamePanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {
                addIssuerAltNameButton, clearIssuerAltNameButton, issuerAltNameComboBox, issuerAltNameTextField });

        javax.swing.GroupLayout extensionsPanelLayout = new javax.swing.GroupLayout(extensionsPanel);
        extensionsPanel.setLayout(extensionsPanelLayout);
        extensionsPanelLayout.setHorizontalGroup(extensionsPanelLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, extensionsPanelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(extensionsPanelLayout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(extensionsSeparator3)
                                .addComponent(keyUsagePanel, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(extensionsSeparator2)
                                .addComponent(basicConstraintsPanel, javax.swing.GroupLayout.Alignment.LEADING,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        Short.MAX_VALUE)
                                .addComponent(extensionsSeparator1)
                                .addGroup(javax.swing.GroupLayout.Alignment.LEADING,
                                        extensionsPanelLayout.createSequentialGroup().addGroup(extensionsPanelLayout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                .addComponent(chooseExtensionsLabel)
                                                .addGroup(extensionsPanelLayout.createSequentialGroup()
                                                        .addGap(10, 10, 10).addComponent(basicConstraintsCheckBox)
                                                        .addGap(18, 18, 18).addComponent(keyUsageCheckBox)
                                                        .addGap(18, 18, 18).addComponent(issuerAltNameCheckBox)))
                                                .addGap(0, 0, Short.MAX_VALUE))
                                .addComponent(issuerAltNamePanel, javax.swing.GroupLayout.Alignment.LEADING,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                                        Short.MAX_VALUE))
                        .addContainerGap())
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, extensionsPanelLayout.createSequentialGroup()
                        .addGap(207, 207, 207).addComponent(okButton).addGap(206, 206, 206)));
        extensionsPanelLayout.setVerticalGroup(extensionsPanelLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(extensionsPanelLayout.createSequentialGroup().addGap(4, 4, 4)
                        .addComponent(chooseExtensionsLabel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(extensionsPanelLayout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(basicConstraintsCheckBox).addComponent(keyUsageCheckBox)
                                .addComponent(issuerAltNameCheckBox))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(extensionsSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(basicConstraintsPanel, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(extensionsSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 2,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(keyUsagePanel, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(extensionsSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(issuerAltNamePanel, javax.swing.GroupLayout.DEFAULT_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(okButton).addContainerGap()));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(extensionsPanel, javax.swing.GroupLayout.DEFAULT_SIZE,
                        javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
        layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(
                extensionsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                Short.MAX_VALUE));

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
        saveExtensions();
        dispose();
    }//GEN-LAST:event_okButtonActionPerformed

    private void basicConstraintsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_basicConstraintsCheckBoxActionPerformed
        if (basicConstraintsCheckBox.isSelected()) {
            basicConstraintsPanel.setVisible(true);
            extensionsSeparator2.setVisible(true);
        } else {
            basicConstraintsPanel.setVisible(false);
            extensionsSeparator2.setVisible(false);
        }
    }//GEN-LAST:event_basicConstraintsCheckBoxActionPerformed

    private void keyUsageCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_keyUsageCheckBoxActionPerformed
        if (keyUsageCheckBox.isSelected()) {
            keyUsagePanel.setVisible(true);
            extensionsSeparator3.setVisible(true);
        } else {
            keyUsagePanel.setVisible(false);
            extensionsSeparator3.setVisible(false);
        }
    }//GEN-LAST:event_keyUsageCheckBoxActionPerformed

    private void issuerAltNameCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_issuerAltNameCheckBoxActionPerformed
        if (issuerAltNameCheckBox.isSelected()) {
            issuerAltNamePanel.setVisible(true);
        } else {
            issuerAltNamePanel.setVisible(false);
        }
    }//GEN-LAST:event_issuerAltNameCheckBoxActionPerformed

    private void basicConstraintsCACheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_basicConstraintsCACheckBoxActionPerformed
        if (basicConstraintsCACheckBox.isSelected()) {
            depthOfCertChainLabel.setVisible(true);
            depthOfCertificateChainTextField.setVisible(true);

        } else {
            depthOfCertChainLabel.setVisible(false);
            depthOfCertificateChainTextField.setVisible(false);
        }
    }//GEN-LAST:event_basicConstraintsCACheckBoxActionPerformed

    private void clearIssuerAltNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearIssuerAltNameButtonActionPerformed
        issuerAltNameTextArea.setText("");
        generalNamesBuilder = new GeneralNamesBuilder();
    }//GEN-LAST:event_clearIssuerAltNameButtonActionPerformed

    private void addIssuerAltNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addIssuerAltNameButtonActionPerformed
        String extension = issuerAltNameTextField.getText();
        issuerAltNameTextField.setText("");
        if (!extension.isEmpty()) {
            String extName = (String) issuerAltNameComboBox.getSelectedItem();
            try {
                switch (extName) {
                case "Other Name":
                    generalNamesBuilder.addName(new GeneralName(GeneralName.otherName, extension));
                    break;
                case "RFC822 Name":
                    generalNamesBuilder.addName(new GeneralName(GeneralName.rfc822Name, extension));
                    break;
                case "DNS Name":
                    generalNamesBuilder.addName(new GeneralName(GeneralName.dNSName, extension));
                    break;
                case "x400 Address":
                    generalNamesBuilder.addName(new GeneralName(GeneralName.x400Address, extension));
                    break;
                case "Directory Name":
                    generalNamesBuilder
                            .addName(new GeneralName(GeneralName.directoryName, new X500Name(extension)));
                    break;
                case "EDI Party Name":
                    generalNamesBuilder.addName(new GeneralName(GeneralName.ediPartyName, extension));
                    break;
                case "URI":
                    generalNamesBuilder.addName(new GeneralName(GeneralName.uniformResourceIdentifier, extension));
                    break;
                case "IP Address":
                    generalNamesBuilder.addName(new GeneralName(GeneralName.iPAddress, extension));
                    break;
                case "Registered ID":
                    generalNamesBuilder.addName(new GeneralName(GeneralName.registeredID, extension));
                    break;
                }
            } catch (Exception e) {
                JOptionPane.showMessageDialog(this, Errors.EXTENSION_INVALID_FORMAT, "Error",
                        JOptionPane.ERROR_MESSAGE);
                return;
            }

            issuerAltNameTextArea.append(extName + ": " + extension + "\n");
        }
    }//GEN-LAST:event_addIssuerAltNameButtonActionPerformed

    private void myInitComponents() {
        screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        frameSize = this.getSize();
        leftCornerAnchor = new Point((int) (screenSize.width / 2 - frameSize.width / 2),
                (int) (screenSize.height / 2 - frameSize.height / 2));
        setLocation(leftCornerAnchor);

        generalNamesBuilder = new GeneralNamesBuilder();

        basicConstraintsPanel.setVisible(false);
        keyUsagePanel.setVisible(false);
        issuerAltNamePanel.setVisible(false);
        depthOfCertChainLabel.setVisible(false);
        depthOfCertificateChainTextField.setVisible(false);
        depthOfCertificateChainTextField.setText("0");
        extensionsSeparator2.setVisible(false);
        extensionsSeparator3.setVisible(false);
    }

    private void loadExtensions() {
        if (extensions.extensions[0]) {
            basicConstraintsCheckBox.setSelected(true);
            basicConstraintsPanel.setVisible(true);
            if (extensions.critical[0]) {
                basicConstraintsCriticalCheckBox.setSelected(true);
            }
            if (extensions.basicConstrCA) {
                basicConstraintsCACheckBox.setSelected(true);
                depthOfCertChainLabel.setVisible(true);
                depthOfCertificateChainTextField.setVisible(true);
                depthOfCertificateChainTextField.setText(extensions.basicConstrDepthOfCertChain);
            }
        }
        if (extensions.extensions[1]) {
            keyUsageCheckBox.setSelected(true);
            keyUsagePanel.setVisible(true);
            if (extensions.critical[1]) {
                keyUsageCriticalCheckBox.setSelected(true);
            }

            if (extensions.keyUsage[0]) {
                digitalSignatureCheckBox.setSelected(true);
            }
            if (extensions.keyUsage[1]) {
                nonRepudiationCheckBox.setSelected(true);
            }
            if (extensions.keyUsage[2]) {
                keyEnciphermentCheckBox.setSelected(true);
            }
            if (extensions.keyUsage[3]) {
                dataEnciphermentCheckBox.setSelected(true);
            }
            if (extensions.keyUsage[4]) {
                keyAgreementCheckBox.setSelected(true);
            }
            if (extensions.keyUsage[5]) {
                keyCertSignCheckBox.setSelected(true);
            }
            if (extensions.keyUsage[6]) {
                cRLSignCheckBox.setSelected(true);
            }
            if (extensions.keyUsage[7]) {
                encipherOnlyCheckBox.setSelected(true);
            }
            if (extensions.keyUsage[8]) {
                decipherOnlyCheckBox.setSelected(true);
            }
        }
        if (extensions.extensions[2]) {
            issuerAltNameCheckBox.setSelected(true);
            issuerAltNamePanel.setVisible(true);
            if (extensions.critical[2]) {
                issuerAltNameCriticalCheckBox.setSelected(true);
            }

            issuerAltNameTextArea.setText(extensions.issuerAltNamesString);

        }
        if (extensions.extensions[0]) {
            extensionsSeparator2.setVisible(true);
        }
        if (extensions.extensions[1]) {
            extensionsSeparator3.setVisible(true);
        }
    }

    private void saveExtensions() {
        extensions.clearAll();

        if (basicConstraintsCheckBox.isSelected()) {
            extensions.extensions[0] = true;
            if (basicConstraintsCriticalCheckBox.isSelected()) {
                extensions.critical[0] = true;
            }
            if (basicConstraintsCACheckBox.isSelected()) {
                extensions.basicConstrCA = true;
                try {
                    Integer.parseInt(depthOfCertificateChainTextField.getText());
                } catch (NumberFormatException e) {
                    JOptionPane.showMessageDialog(this, Errors.INVALID_NUMBER_FORMAT + " " + Errors.INVALID_DEPTH,
                            "Error", JOptionPane.ERROR_MESSAGE);
                    parentFrame.setStatus(Errors.INVALID_NUMBER_FORMAT + " " + Errors.INVALID_DEPTH, Errors.COLOR);
                    return;
                }
                extensions.basicConstrDepthOfCertChain = depthOfCertificateChainTextField.getText();
            }
        }

        if (keyUsageCheckBox.isSelected()) {
            extensions.extensions[1] = true;
            if (keyUsageCriticalCheckBox.isSelected()) {
                extensions.critical[1] = true;
            }

            if (digitalSignatureCheckBox.isSelected()) {
                extensions.keyUsage[0] = true;
            }
            if (nonRepudiationCheckBox.isSelected()) {
                extensions.keyUsage[1] = true;
            }
            if (keyEnciphermentCheckBox.isSelected()) {
                extensions.keyUsage[2] = true;
            }
            if (dataEnciphermentCheckBox.isSelected()) {
                extensions.keyUsage[3] = true;
            }
            if (keyAgreementCheckBox.isSelected()) {
                extensions.keyUsage[4] = true;
            }
            if (keyCertSignCheckBox.isSelected()) {
                extensions.keyUsage[5] = true;
            }
            if (cRLSignCheckBox.isSelected()) {
                extensions.keyUsage[6] = true;
            }
            if (encipherOnlyCheckBox.isSelected()) {
                extensions.keyUsage[7] = true;
            }
            if (decipherOnlyCheckBox.isSelected()) {
                extensions.keyUsage[8] = true;
            }
        }

        if (issuerAltNameCheckBox.isSelected()) {
            extensions.extensions[2] = true;
            if (issuerAltNameCriticalCheckBox.isSelected()) {
                extensions.critical[2] = true;
            }

            if (!"".equals(issuerAltNameTextArea.getText())) {
                GeneralNames generalNames = generalNamesBuilder.build();
                try {
                    extensions.issuerAltNames = new Extension(Extension.issuerAlternativeName,
                            issuerAltNameCriticalCheckBox.isSelected(), generalNames.getEncoded());
                } catch (IOException ex) {
                    JOptionPane.showMessageDialog(this, Errors.EXTENSIONS_ERROR, "Error",
                            JOptionPane.ERROR_MESSAGE);
                    parentFrame.setStatus(Errors.EXTENSIONS_ERROR, Errors.COLOR);
                }
            }
            extensions.issuerAltNamesString = issuerAltNameTextArea.getText();
        }
    }

    private Dimension screenSize;
    private Dimension frameSize;
    private Point leftCornerAnchor;

    private final MainWindow parentFrame;
    private final ExtensionsGUI extensions;

    private GeneralNamesBuilder generalNamesBuilder;

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton addIssuerAltNameButton;
    private javax.swing.JCheckBox basicConstraintsCACheckBox;
    private javax.swing.JCheckBox basicConstraintsCheckBox;
    private javax.swing.JCheckBox basicConstraintsCriticalCheckBox;
    private javax.swing.JLabel basicConstraintsLabel;
    private javax.swing.JPanel basicConstraintsPanel;
    private javax.swing.JCheckBox cRLSignCheckBox;
    private javax.swing.JLabel chooseExtensionsLabel;
    private javax.swing.JButton clearIssuerAltNameButton;
    private javax.swing.JCheckBox dataEnciphermentCheckBox;
    private javax.swing.JCheckBox decipherOnlyCheckBox;
    private javax.swing.JLabel depthOfCertChainLabel;
    private javax.swing.JTextField depthOfCertificateChainTextField;
    private javax.swing.JCheckBox digitalSignatureCheckBox;
    private javax.swing.JCheckBox encipherOnlyCheckBox;
    private javax.swing.JPanel extensionsPanel;
    private javax.swing.JSeparator extensionsSeparator1;
    private javax.swing.JSeparator extensionsSeparator2;
    private javax.swing.JSeparator extensionsSeparator3;
    private javax.swing.JCheckBox issuerAltNameCheckBox;
    private javax.swing.JComboBox<String> issuerAltNameComboBox;
    private javax.swing.JCheckBox issuerAltNameCriticalCheckBox;
    private javax.swing.JLabel issuerAltNameLabel;
    private javax.swing.JPanel issuerAltNamePanel;
    private javax.swing.JScrollPane issuerAltNameScrollPanel;
    private javax.swing.JTextArea issuerAltNameTextArea;
    private javax.swing.JTextField issuerAltNameTextField;
    private javax.swing.JCheckBox keyAgreementCheckBox;
    private javax.swing.JCheckBox keyCertSignCheckBox;
    private javax.swing.JCheckBox keyEnciphermentCheckBox;
    private javax.swing.JCheckBox keyUsageCheckBox;
    private javax.swing.JCheckBox keyUsageCriticalCheckBox;
    private javax.swing.JLabel keyUsageLabel;
    private javax.swing.JPanel keyUsagePanel;
    private javax.swing.JCheckBox nonRepudiationCheckBox;
    private javax.swing.JButton okButton;
    // End of variables declaration//GEN-END:variables
}