00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030  
00031 package org.objectweb.proactive.ext.security.gui;
00032 
00033 import java.awt.BorderLayout;
00034 import java.awt.event.ActionListener;
00035 import java.awt.event.WindowAdapter;
00036 import java.awt.event.WindowEvent;
00037 import java.io.File;
00038 import java.io.FileInputStream;
00039 import java.io.FileNotFoundException;
00040 import java.io.FileOutputStream;
00041 import java.io.IOException;
00042 import java.security.InvalidKeyException;
00043 import java.security.KeyPair;
00044 import java.security.KeyStore;
00045 import java.security.KeyStoreException;
00046 import java.security.NoSuchAlgorithmException;
00047 import java.security.NoSuchProviderException;
00048 import java.security.PrivateKey;
00049 import java.security.SignatureException;
00050 import java.security.UnrecoverableKeyException;
00051 import java.security.cert.Certificate;
00052 import java.security.cert.CertificateException;
00053 import java.security.cert.CertificateFactory;
00054 import java.security.cert.X509Certificate;
00055 import java.util.Enumeration;
00056 import java.util.Vector;
00057 
00058 import javax.swing.BoxLayout;
00059 import javax.swing.ButtonGroup;
00060 import javax.swing.JButton;
00061 import javax.swing.JFileChooser;
00062 import javax.swing.JFrame;
00063 import javax.swing.JLabel;
00064 import javax.swing.JMenu;
00065 import javax.swing.JMenuBar;
00066 import javax.swing.JMenuItem;
00067 import javax.swing.JOptionPane;
00068 import javax.swing.JPanel;
00069 import javax.swing.JRadioButton;
00070 import javax.swing.JScrollPane;
00071 import javax.swing.JTable;
00072 import javax.swing.JTextField;
00073 import javax.swing.JTextPane;
00074 import javax.swing.table.DefaultTableModel;
00075 
00076 import org.objectweb.proactive.ext.security.CertTools;
00077 import org.objectweb.proactive.ext.security.KeyTools;
00078 import org.objectweb.proactive.ext.security.SecurityConstants;
00079 
00080 
00085 public class ProActiveCertificateGeneratorGUI extends JFrame
00086     implements ActionListener {
00087     private String[] jTableColumnName = { "Entity Id", "DN" };
00088     private int KEYSTORE_APPLICATION = 1;
00089     private int KEYSTORE_ENTITY = 2;
00090     private int currentKeyStoreType;
00091     private javax.swing.JPanel jContentPane = null;
00092     private JLabel jLabel = null;
00093     private JTextPane jTextPanePublicKey = null;
00094     private JLabel jLabel1 = null;
00095     private JTextPane jTextPanePrivateKey = null;
00096     private JButton jButton = null;
00097     private KeyPair currentKeyPair = null;
00098 
00099     
00100     private KeyStore currentKeyStore = null;
00101     private JScrollPane jScrollPane = null;
00102     private JLabel jLabel2 = null;
00103     private JTextField jTextFieldDistinguishedName = null;
00104     private JLabel jLabel3 = null;
00105     private JTextField jTextFieldValidity = null;
00106     JFileChooser fc = new JFileChooser();
00107     private JMenuBar jJMenuBar = null;
00108     private JMenu jMenu = null;
00109     private JMenuItem jMenuItemLoadCertificate = null;
00110     private JPanel jContentPane1 = null;
00111     private JFrame jFrameSubCertificate = null; 
00112     private JLabel jLabel4 = null;
00113     private JLabel jLabel5 = null;
00114     private JTextField jTextFieldSubCertificate = null;
00115     private JPanel jPanel = null;
00116     private JButton jButton1 = null;
00117     private JButton jButtonSubCertificateOk = null;
00118     private KeyStore subKeyStore = null;
00119     private JButton jButton3 = null;
00120     private JMenu jMenu1 = null;
00121     private JMenuItem jMenuItem = null;
00122     private JTable jTable = null;
00123     private JScrollPane jScrollPane1 = null;
00124     private JLabel jLabel6 = null;
00125     private JTextField jTextFieldPath = null;
00126     private JMenuItem jMenuItemSubCert = null;
00127     private JLabel jLabel7 = null;
00128     private JMenuItem jMenuSaveCert = null;
00129     private String lastOpenedDir = null;
00130     private JScrollPane jScrollPane2 = null;
00131     private JMenuItem jMenuItemAppCert = null;
00132     private JRadioButton jRadioButtonApplicationCertType = null;
00133     private JRadioButton jRadioButton1EntityCertType = null;
00134     private JLabel jLabel8 = null;
00135     private JLabel jLabel9 = null;
00136     private JLabel jLabel10 = null;
00137     private ButtonGroup bgCertificateType = new ButtonGroup();
00138 
00142     public ProActiveCertificateGeneratorGUI() {
00143         super();
00144         setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
00145         addWindowListener(new WindowAdapter() {
00146                 public void windowClosing(WindowEvent e) {
00147                     System.exit(0);
00148                 }
00149             });
00150         initialize();
00151     }
00152 
00158     private void initialize() {
00159         this.setJMenuBar(getJJMenuBar());
00160         this.setSize(685, 476);
00161         this.setContentPane(getJContentPane());
00162         this.setTitle("ProActive Certificate Generator");
00163     }
00164 
00170     private javax.swing.JPanel getJContentPane() {
00171         if (jContentPane == null) {
00172             jLabel10 = new JLabel();
00173             jLabel9 = new JLabel();
00174             jLabel8 = new JLabel();
00175             jLabel7 = new JLabel();
00176             jLabel6 = new JLabel();
00177             jLabel = new JLabel();
00178             jLabel3 = new JLabel();
00179             jLabel2 = new JLabel();
00180             jLabel1 = new JLabel();
00181             jContentPane = new javax.swing.JPanel();
00182             jContentPane.setLayout(null);
00183             jLabel.setBounds(16, 125, 96, 26);
00184             jLabel.setText("Public key :");
00185             jLabel.setComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
00186             jLabel1.setBounds(29, 225, 81, 30);
00187             jLabel1.setText("Private key :");
00188             jLabel1.setComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
00189             jLabel2.setBounds(10, 357, 134, 24);
00190             jLabel2.setText("Subjet DN :");
00191             jLabel2.setComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
00192             jLabel3.setBounds(11, 396, 132, 21);
00193             jLabel3.setText("Validity (in days):");
00194             jLabel3.setComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
00195             jLabel6.setBounds(20, 9, 93, 25);
00196             jLabel6.setText("File :");
00197             jLabel6.setComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
00198             jLabel7.setBounds(393, 78, 249, 29);
00199             jLabel7.setText("Certificate chain :");
00200             jLabel8.setBounds(154, 43, 77, 21);
00201             jLabel8.setText("application");
00202             jLabel9.setBounds(289, 44, 83, 23);
00203             jLabel9.setText("Entity");
00204             jLabel10.setBounds(16, 44, 106, 22);
00205             jLabel10.setText("Certificate Type");
00206             jContentPane.add(jLabel, null);
00207             jContentPane.add(jLabel1, null);
00208             jContentPane.add(getJButton(), null);
00209             jContentPane.add(getJScrollPane(), null);
00210             jContentPane.add(jLabel2, null);
00211             jContentPane.add(getJTextFieldDistinguishedName(), null);
00212             jContentPane.add(jLabel3, null);
00213             jContentPane.add(getJTextFieldValidity(), null);
00214             jContentPane.add(getJButton3(), null);
00215             jContentPane.add(getJScrollPane1(), null);
00216             jContentPane.add(jLabel6, null);
00217             jContentPane.add(getJTextFieldPath(), null);
00218             jContentPane.add(jLabel7, null);
00219             jContentPane.add(getJScrollPane2(), null);
00220             jContentPane.add(getJRadioButtonApplicationCertType(), null);
00221             jContentPane.add(getJRadioButton1EntityCertType(), null);
00222             jContentPane.add(jLabel8, null);
00223             jContentPane.add(jLabel9, null);
00224             jContentPane.add(jLabel10, null);
00225             bgCertificateType.add(getJRadioButtonApplicationCertType());
00226             bgCertificateType.add(getJRadioButton1EntityCertType());
00227         }
00228         return jContentPane;
00229     }
00230 
00236     private JTextPane getJTextPanePublicKey() {
00237         if (jTextPanePublicKey == null) {
00238             jTextPanePublicKey = new JTextPane();
00239             jTextPanePublicKey.setEditable(false);
00240         }
00241         return jTextPanePublicKey;
00242     }
00243 
00249     private JTextPane getJTextPanePrivateKey() {
00250         if (jTextPanePrivateKey == null) {
00251             jTextPanePrivateKey = new JTextPane();
00252             jTextPanePrivateKey.setEditable(false);
00253         }
00254         return jTextPanePrivateKey;
00255     }
00256 
00262     private JButton getJButton() {
00263         if (jButton == null) {
00264             jButton = new JButton("Generate Key Pair");
00265             jButton.setBounds(181, 319, 171, 24);
00266             jButton.addActionListener(new java.awt.event.ActionListener() {
00267                     public void actionPerformed(java.awt.event.ActionEvent e) {
00268                         currentKeyPair = CertTools.keyPair(512);
00269                         jTextPanePrivateKey.setText(currentKeyPair.getPrivate()
00270                                                                   .toString());
00271                         jTextPanePublicKey.setText(currentKeyPair.getPublic()
00272                                                                  .toString());
00273                     }
00274                 });
00275         }
00276         return jButton;
00277     }
00278 
00284     private JScrollPane getJScrollPane() {
00285         if (jScrollPane == null) {
00286             jScrollPane = new JScrollPane();
00287             jScrollPane.setBounds(125, 121, 208, 90);
00288             jScrollPane.setViewportView(getJTextPanePublicKey());
00289         }
00290         return jScrollPane;
00291     }
00292 
00298     private JTextField getJTextFieldDistinguishedName() {
00299         if (jTextFieldDistinguishedName == null) {
00300             jTextFieldDistinguishedName = new JTextField();
00301             jTextFieldDistinguishedName.setBounds(149, 360, 321, 24);
00302         }
00303         return jTextFieldDistinguishedName;
00304     }
00305 
00311     private JTextField getJTextFieldValidity() {
00312         if (jTextFieldValidity == null) {
00313             jTextFieldValidity = new JTextField();
00314             jTextFieldValidity.setBounds(248, 385, 67, 24);
00315             jTextFieldValidity.setText("360");
00316         }
00317         return jTextFieldValidity;
00318     }
00319 
00320     public void actionPerformed(java.awt.event.ActionEvent ev) {
00321         if (ev.getSource() == jMenuSaveCert) {
00322             if (currentKeyPair == null) {
00323                 JOptionPane.showMessageDialog(this,
00324                     "No RSA key !\n you have to generate a key pair prior to saving the certificate into a file",
00325                     "Certificate Warning", JOptionPane.WARNING_MESSAGE);
00326                 return;
00327             }
00328 
00329             try {
00330                 CertificateFactory cf = CertificateFactory.getInstance("X.509",
00331                         "BC");
00332 
00333                 String dnEntry = jTextFieldDistinguishedName.getText();
00334 
00335                 X509Certificate certificate = CertTools.genSelfCert(dnEntry,
00336                         Integer.parseInt(getJTextFieldValidity().getText()) * 3600 * 24,
00337                         null, currentKeyPair.getPrivate(),
00338                         currentKeyPair.getPublic(), true);
00339 
00340                 System.out.println("ddd" + dnEntry);
00341 
00342                 currentKeyStore = KeyTools.createP12(SecurityConstants.KEYSTORE_ENTITY_PATH,
00343                         currentKeyPair.getPrivate(), certificate,
00344                         (Certificate[]) null);
00345 
00346                 JFileChooser fc = new JFileChooser(lastOpenedDir);
00347 
00348                 
00349                 
00350                 int returnVal = fc.showOpenDialog(ProActiveCertificateGeneratorGUI.this);
00351 
00352                 if (returnVal == JFileChooser.APPROVE_OPTION) {
00353                     File file = fc.getSelectedFile();
00354                     lastOpenedDir = file.getCanonicalPath();
00355                     
00356                     currentKeyStore.store(new FileOutputStream(file),
00357                         "ha".toCharArray());
00358                     System.out.println("writing: " + file.getName() + ".");
00359                 } else {
00360                     System.out.println("Open command cancelled by user.");
00361                 }
00362             } catch (CertificateException e1) {
00363                 e1.printStackTrace();
00364             } catch (NoSuchProviderException e1) {
00365                 e1.printStackTrace();
00366             } catch (InvalidKeyException e) {
00367                 e.printStackTrace();
00368             } catch (NumberFormatException e) {
00369                 e.printStackTrace();
00370             } catch (NoSuchAlgorithmException e) {
00371                 e.printStackTrace();
00372             } catch (SignatureException e) {
00373                 e.printStackTrace();
00374             } catch (KeyStoreException e) {
00375                 e.printStackTrace();
00376             } catch (FileNotFoundException e) {
00377                 e.printStackTrace();
00378             } catch (IOException e) {
00379                 e.printStackTrace();
00380             } catch (Exception e) {
00381                 e.printStackTrace();
00382             }
00383         }
00384         
00385         else if (ev.getSource() == jMenuItemLoadCertificate) {
00386             File f = null;
00387 
00388             JFileChooser fc = new JFileChooser(lastOpenedDir);
00389 
00390             
00391             
00392             int returnVal = fc.showOpenDialog(ProActiveCertificateGeneratorGUI.this);
00393 
00394             if (returnVal == JFileChooser.APPROVE_OPTION) {
00395                 File file = fc.getSelectedFile();
00396                 try {
00397                     lastOpenedDir = file.getCanonicalPath();
00398                 } catch (IOException e) {
00399                     e.printStackTrace();
00400                 }
00401                 loadCertificateFile(file);
00402             } else {
00403                 System.out.println("Open command cancelled by user.");
00404             }
00405         }
00406         
00407         else if (ev.getSource() == jMenuItemSubCert) {
00408             if (currentKeyStore == null) {
00409                 JOptionPane.showMessageDialog(this,
00410                     "No current certificate !\n you have to load or create one before generating an sub certificate",
00411                     "Certificate Warning", JOptionPane.WARNING_MESSAGE);
00412             } else {
00413                 getJTextFieldSubCertificate().setText(jTextFieldDistinguishedName.getText());
00414                 getJFrameSubCertificate().setVisible(true);
00415             }
00416         } else if (ev.getSource() == jButtonSubCertificateOk) {
00417             try {
00418                 CertificateFactory cf = CertificateFactory.getInstance("X.509",
00419                         "BC");
00420 
00421                 KeyPair subKeyPair = CertTools.keyPair(512);
00422 
00423                 X509Certificate subCertificate = CertTools.genCert(jTextFieldSubCertificate.getText(),
00424                         Long.parseLong(getJTextFieldValidity().getText()) * 3600 * 24,
00425                         null, subKeyPair.getPrivate(), subKeyPair.getPublic(),
00426                         true,
00427                         ((X509Certificate) currentKeyStore.getCertificate(
00428                             SecurityConstants.KEYSTORE_ENTITY_PATH)).getSubjectDN()
00429                          .toString(), currentKeyPair.getPrivate(),
00430                         ((X509Certificate) currentKeyStore.getCertificate(
00431                             SecurityConstants.KEYSTORE_ENTITY_PATH)).getPublicKey());
00432 
00433                 System.out.println("->" + jTextFieldSubCertificate.getText());
00434 
00435                 subKeyStore = KeyStore.getInstance("PKCS12", "BC");
00436 
00437                 subKeyStore = KeyTools.createP12(SecurityConstants.KEYSTORE_ENTITY_PATH,
00438                         subKeyPair.getPrivate(), subCertificate,
00439                         currentKeyStore.getCertificateChain(
00440                             SecurityConstants.KEYSTORE_ENTITY_PATH));
00441 
00442                 JFileChooser fc = new JFileChooser(lastOpenedDir);
00443 
00444                 
00445                 
00446                 int returnVal = fc.showOpenDialog(ProActiveCertificateGeneratorGUI.this);
00447 
00448                 if (returnVal == JFileChooser.APPROVE_OPTION) {
00449                     File file = fc.getSelectedFile();
00450                     lastOpenedDir = file.getCanonicalPath();
00451                     
00452                     subKeyStore.store(new FileOutputStream(file),
00453                         "ha".toCharArray());
00454                     System.out.println("writing: " + file.getName() + ".");
00455                 } else {
00456                     System.out.println("Open command cancelled by user.");
00457                 }
00458             } catch (CertificateException e1) {
00459                 e1.printStackTrace();
00460             } catch (NoSuchProviderException e1) {
00461                 e1.printStackTrace();
00462             } catch (InvalidKeyException e) {
00463                 e.printStackTrace();
00464             } catch (NumberFormatException e) {
00465                 e.printStackTrace();
00466             } catch (NoSuchAlgorithmException e) {
00467                 e.printStackTrace();
00468             } catch (SignatureException e) {
00469                 e.printStackTrace();
00470             } catch (Exception e) {
00471                 e.printStackTrace();
00472             }
00473         }
00474         
00475         else if (ev.getSource() == jMenuItemAppCert) {
00476             if (currentKeyStore == null) {
00477                 JOptionPane.showMessageDialog(this,
00478                     "No current certificate !\n you have to load or create one before generating an application certificate",
00479                     "Certificate Warning", JOptionPane.WARNING_MESSAGE);
00480             } else {
00481                 JOptionPane.showMessageDialog(this,
00482                     "No current certificate !\n you have to load or create one before generating an application certificate",
00483                     "Certificate Warning", JOptionPane.WARNING_MESSAGE);
00484 
00485                 try {
00486                     String reponse;
00487                     String message = "Enter a name for the application certificate \nIt could be the name of the application";
00488                     reponse = JOptionPane.showInputDialog(this, message);
00489 
00490                     CertificateFactory cf = CertificateFactory.getInstance("X.509",
00491                             "BC");
00492 
00493                     KeyPair subKeyPair = CertTools.keyPair(512);
00494 
00495                     X509Certificate subCertificate = CertTools.genCert(reponse,
00496                             Long.parseLong(getJTextFieldValidity().getText()) * 360,
00497                             null, subKeyPair.getPrivate(),
00498                             subKeyPair.getPublic(), true,
00499                             ((X509Certificate) currentKeyStore.getCertificate(
00500                                 SecurityConstants.KEYSTORE_ENTITY_PATH)).getSubjectDN()
00501                              .toString(), currentKeyPair.getPrivate(),
00502                             ((X509Certificate) currentKeyStore.getCertificate(
00503                                 SecurityConstants.KEYSTORE_ENTITY_PATH)).getPublicKey());
00504 
00505                     System.out.println("->" + reponse);
00506 
00507                     subKeyStore = KeyStore.getInstance("PKCS12", "BC");
00508 
00509                     subKeyStore = KeyTools.createP12(SecurityConstants.KEYSTORE_APPLICATION_PATH,
00510                             subKeyPair.getPrivate(), subCertificate,
00511                             currentKeyStore.getCertificateChain(
00512                                 SecurityConstants.KEYSTORE_ENTITY_PATH));
00513 
00514                     JFileChooser fc = new JFileChooser(lastOpenedDir);
00515 
00516                     
00517                     
00518                     int returnVal = fc.showOpenDialog(ProActiveCertificateGeneratorGUI.this);
00519 
00520                     if (returnVal == JFileChooser.APPROVE_OPTION) {
00521                         File file = fc.getSelectedFile();
00522                         lastOpenedDir = file.getCanonicalPath();
00523                         
00524                         subKeyStore.store(new FileOutputStream(file),
00525                             "ha".toCharArray());
00526                         System.out.println("writing: " + file.getName() + ".");
00527                     } else {
00528                         System.out.println("Open command cancelled by user.");
00529                     }
00530                 } catch (CertificateException e1) {
00531                     e1.printStackTrace();
00532                 } catch (NoSuchProviderException e1) {
00533                     e1.printStackTrace();
00534                 } catch (InvalidKeyException e) {
00535                     e.printStackTrace();
00536                 } catch (NumberFormatException e) {
00537                     e.printStackTrace();
00538                 } catch (NoSuchAlgorithmException e) {
00539                     e.printStackTrace();
00540                 } catch (SignatureException e) {
00541                     e.printStackTrace();
00542                 } catch (Exception e) {
00543                     e.printStackTrace();
00544                 }
00545             }
00546         } else if (ev.getSource() == jButton3) {
00547             try {
00548                 KeyTools.getCertChain(currentKeyStore,
00549                     SecurityConstants.KEYSTORE_ENTITY_PATH);
00550             } catch (KeyStoreException e) {
00551                 e.printStackTrace();
00552             }
00553         }
00554     }
00555 
00561     private JMenuBar getJJMenuBar() {
00562         if (jJMenuBar == null) {
00563             jJMenuBar = new JMenuBar();
00564             jJMenuBar.add(getJMenu());
00565             jJMenuBar.add(getJMenu1());
00566         }
00567         return jJMenuBar;
00568     }
00569 
00575     private JMenu getJMenu() {
00576         if (jMenu == null) {
00577             jMenu = new JMenu();
00578             jMenu.setName("File");
00579             jMenu.setText("File");
00580             jMenu.add(getJMenuItem());
00581         }
00582         return jMenu;
00583     }
00584 
00590     private JMenuItem getJMenuItemLoadCertificate() {
00591         if (jMenuItemLoadCertificate == null) {
00592             jMenuItemLoadCertificate = new JMenuItem();
00593             jMenuItemLoadCertificate.setText("Load Certificate");
00594             jMenuItemLoadCertificate.addActionListener(this);
00595         }
00596         return jMenuItemLoadCertificate;
00597     }
00598 
00604     private JPanel getJContentPane1() {
00605         if (jContentPane1 == null) {
00606             jContentPane1 = new JPanel();
00607             jLabel4 = new JLabel("sub Certificate Generator");
00608             jLabel5 = new JLabel("Sub certificate DN");
00609             jContentPane1.setLayout(new BorderLayout());
00610             jLabel4.setText("JLabel");
00611             jLabel5.setText("JLabel");
00612             jContentPane1.add(jLabel4, java.awt.BorderLayout.NORTH);
00613             jContentPane1.add(jLabel5, java.awt.BorderLayout.WEST);
00614             jContentPane1.add(getJTextFieldSubCertificate(),
00615                 java.awt.BorderLayout.CENTER);
00616             jContentPane1.add(getJPanel(), java.awt.BorderLayout.SOUTH);
00617         }
00618         return jContentPane1;
00619     }
00620 
00626     private JFrame getJFrameSubCertificate() {
00627         if (jFrameSubCertificate == null) {
00628             jFrameSubCertificate = new JFrame();
00629             jFrameSubCertificate.setContentPane(getJContentPane1());
00630             jFrameSubCertificate.setSize(379, 150);
00631             jFrameSubCertificate.setTitle("jFrameSubCertificate");
00632         }
00633         return jFrameSubCertificate;
00634     }
00635 
00641     private JTextField getJTextFieldSubCertificate() {
00642         if (jTextFieldSubCertificate == null) {
00643             jTextFieldSubCertificate = new JTextField();
00644         }
00645         return jTextFieldSubCertificate;
00646     }
00647 
00653     private JPanel getJPanel() {
00654         if (jPanel == null) {
00655             jPanel = new JPanel();
00656             jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.X_AXIS));
00657             jPanel.setComponentOrientation(java.awt.ComponentOrientation.RIGHT_TO_LEFT);
00658             jPanel.add(getJButton1(), null);
00659             jPanel.add(getJButtonSubCertificateOk(), null);
00660         }
00661         return jPanel;
00662     }
00663 
00669     private JButton getJButton1() {
00670         if (jButton1 == null) {
00671             jButton1 = new JButton();
00672             jButton1.setText("Cancel");
00673         }
00674         return jButton1;
00675     }
00676 
00682     private JButton getJButtonSubCertificateOk() {
00683         if (jButtonSubCertificateOk == null) {
00684             jButtonSubCertificateOk = new JButton();
00685             jButtonSubCertificateOk.addActionListener(this);
00686             jButtonSubCertificateOk.setText("Ok");
00687         }
00688         return jButtonSubCertificateOk;
00689     }
00690 
00696     private JButton getJButton3() {
00697         if (jButton3 == null) {
00698             jButton3 = new JButton("");
00699             jButton3.addActionListener(this);
00700             jButton3.setBounds(514, 391, 141, 25);
00701             jButton3.setText("Display as text");
00702         }
00703         return jButton3;
00704     }
00705 
00711     private JMenu getJMenu1() {
00712         if (jMenu1 == null) {
00713             jMenu1 = new JMenu();
00714             jMenu1.setText("Certificate");
00715             jMenu1.add(getJMenuItemLoadCertificate());
00716             jMenu1.add(getJMenuItemSubCert());
00717             jMenu1.add(getJMenuItemAppCert());
00718             jMenu1.add(getJMenuSaveCert());
00719         }
00720         return jMenu1;
00721     }
00722 
00728     private JMenuItem getJMenuItem() {
00729         if (jMenuItem == null) {
00730             jMenuItem = new JMenuItem();
00731             jMenuItem.setText("Quit");
00732             jMenuItem.addActionListener(new java.awt.event.ActionListener() {
00733                     public void actionPerformed(java.awt.event.ActionEvent e) {
00734                         System.exit(0);
00735                     }
00736                 });
00737         }
00738         return jMenuItem;
00739     }
00740 
00746     private JTable getJTable() {
00747         if (jTable == null) {
00748             jTable = new JTable(new DefaultTableModel(jTableColumnName, 0));
00749         }
00750         return jTable;
00751     }
00752 
00758     private JScrollPane getJScrollPane1() {
00759         if (jScrollPane1 == null) {
00760             jScrollPane1 = new JScrollPane();
00761             jScrollPane1.setBounds(392, 112, 249, 183);
00762             jScrollPane1.setViewportView(getJTable());
00763         }
00764         return jScrollPane1;
00765     }
00766 
00772     private JTextField getJTextFieldPath() {
00773         if (jTextFieldPath == null) {
00774             jTextFieldPath = new JTextField();
00775             jTextFieldPath.setBounds(119, 8, 520, 25);
00776             jTextFieldPath.setEditable(false);
00777         }
00778         return jTextFieldPath;
00779     }
00780 
00786     private JMenuItem getJMenuItemSubCert() {
00787         if (jMenuItemSubCert == null) {
00788             jMenuItemSubCert = new JMenuItem();
00789             jMenuItemSubCert.setText("create sub certificate");
00790             jMenuItemSubCert.setToolTipText(
00791                 "create a certificate signed by current certificate");
00792             jMenuItemSubCert.addActionListener(this);
00793         }
00794         return jMenuItemSubCert;
00795     }
00796 
00802     private JMenuItem getJMenuSaveCert() {
00803         if (jMenuSaveCert == null) {
00804             jMenuSaveCert = new JMenuItem();
00805             jMenuSaveCert.setText("Save");
00806             jMenuSaveCert.setToolTipText(
00807                 "Save current certificate into a pkcs12 file");
00808             jMenuSaveCert.addActionListener(this);
00809         }
00810         return jMenuSaveCert;
00811     }
00812 
00813     protected void loadCertificateFile(File file) {
00814         try {
00815             currentKeyStore = KeyStore.getInstance("PKCS12", "BC");
00816             Certificate[] chain = null;
00817             X509Certificate certificate = null;
00818 
00819             jTextFieldPath.setText(file.getAbsoluteFile().toURI().toString());
00820 
00821             
00822             System.out.println("Opening: " + file.getName() + ".");
00823             currentKeyStore.load(new FileInputStream(file), "ha".toCharArray());
00824 
00825             Enumeration e = currentKeyStore.aliases();
00826 
00827             System.out.println("--------------");
00828             for (; e.hasMoreElements();) {
00829                 System.out.println(e.nextElement());
00830             }
00831             System.out.println("--------------");
00832 
00833             
00834             if (currentKeyStore.getCertificate(
00835                         SecurityConstants.KEYSTORE_APPLICATION_PATH) != null) {
00836                 getJRadioButtonApplicationCertType().setSelected(true);
00837                 System.out.println("cert type " + KEYSTORE_APPLICATION);
00838                 currentKeyStoreType = KEYSTORE_APPLICATION;
00839                 chain = currentKeyStore.getCertificateChain(SecurityConstants.KEYSTORE_APPLICATION_PATH);
00840                 certificate = ((X509Certificate) currentKeyStore.getCertificate(SecurityConstants.KEYSTORE_APPLICATION_PATH));
00841                 currentKeyPair = new KeyPair(certificate.getPublicKey(),
00842                         (PrivateKey) currentKeyStore.getKey(
00843                             SecurityConstants.KEYSTORE_APPLICATION_PATH, null));
00844             } else {
00845                 getJRadioButton1EntityCertType().setSelected(true);
00846                 System.out.println("cert type " + KEYSTORE_ENTITY);
00847                 currentKeyStoreType = KEYSTORE_ENTITY;
00848                 chain = currentKeyStore.getCertificateChain(SecurityConstants.KEYSTORE_ENTITY_PATH);
00849                 certificate = ((X509Certificate) currentKeyStore.getCertificate(SecurityConstants.KEYSTORE_ENTITY_PATH));
00850 
00851                 currentKeyPair = new KeyPair(certificate.getPublicKey(),
00852                         (PrivateKey) currentKeyStore.getKey(
00853                             SecurityConstants.KEYSTORE_ENTITY_PATH, null));
00854             }
00855 
00856             System.out.println(currentKeyStore + " chain length : " +
00857                 chain.length + " ++" + certificate.getSubjectDN());
00858 
00859             jTextFieldDistinguishedName.setText(certificate.getSubjectDN()
00860                                                            .toString());
00861             jTextPanePrivateKey.setText(currentKeyPair.getPrivate().toString());
00862             jTextPanePublicKey.setText(currentKeyPair.getPublic().toString());
00863 
00864             DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
00865 
00866             
00867             for (int i = 0; i < tableModel.getRowCount(); i++) {
00868                 tableModel.removeRow(i);
00869             }
00870             for (int i = 1; i < chain.length; i++) {
00871                 Vector<String> v = new Vector<String>();
00872                 v.addElement(new Integer(i).toString());
00873                 v.addElement(((X509Certificate) chain[i]).getSubjectDN()
00874                               .toString());
00875                 tableModel.addRow(v);
00876             }
00877         } catch (KeyStoreException e) {
00878             e.printStackTrace();
00879         } catch (NoSuchProviderException e) {
00880             e.printStackTrace();
00881         } catch (NoSuchAlgorithmException e) {
00882             e.printStackTrace();
00883         } catch (CertificateException e) {
00884             e.printStackTrace();
00885         } catch (FileNotFoundException e) {
00886             e.printStackTrace();
00887         } catch (IOException e) {
00888             e.printStackTrace();
00889         } catch (UnrecoverableKeyException e) {
00890             e.printStackTrace();
00891         }
00892     }
00893 
00899     private JScrollPane getJScrollPane2() {
00900         if (jScrollPane2 == null) {
00901             jScrollPane2 = new JScrollPane();
00902             jScrollPane2.setBounds(127, 219, 207, 94);
00903             jScrollPane2.setViewportView(getJTextPanePrivateKey());
00904         }
00905         return jScrollPane2;
00906     }
00907 
00913     private JMenuItem getJMenuItemAppCert() {
00914         if (jMenuItemAppCert == null) {
00915             jMenuItemAppCert = new JMenuItem();
00916             jMenuItemAppCert.setToolTipText("Create an application certificate");
00917             jMenuItemAppCert.setText("Create an app cert");
00918             jMenuItemAppCert.addActionListener(this);
00919         }
00920         return jMenuItemAppCert;
00921     }
00922 
00928     private JRadioButton getJRadioButtonApplicationCertType() {
00929         if (jRadioButtonApplicationCertType == null) {
00930             jRadioButtonApplicationCertType = new JRadioButton();
00931             jRadioButtonApplicationCertType.setBounds(128, 44, 21, 21);
00932             jRadioButtonApplicationCertType.setEnabled(true);
00933         }
00934         return jRadioButtonApplicationCertType;
00935     }
00936 
00942     private JRadioButton getJRadioButton1EntityCertType() {
00943         if (jRadioButton1EntityCertType == null) {
00944             jRadioButton1EntityCertType = new JRadioButton();
00945 
00946             jRadioButton1EntityCertType.setBounds(255, 44, 21, 21);
00947             jRadioButton1EntityCertType.setEnabled(true);
00948         }
00949         return jRadioButton1EntityCertType;
00950     }
00951 
00952     public static void main(String[] args) {
00953     }
00954 }