blob: 1f208981d1fb685a535c0b21d9c48e78ab402cd0 [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2007 The University of Manchester
*
* Modifications to the initial code base are copyright of their
* respective authors, or their employers as appropriate.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
******************************************************************************/
package net.sf.taverna.t2.workbench.ui.credentialmanager;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.math.BigInteger;
import java.util.HashMap;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.JSeparator;
import java.util.ArrayList;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import javax.security.auth.x500.X500Principal;
import net.sf.taverna.t2.security.credentialmanager.CMException;
import net.sf.taverna.t2.security.credentialmanager.CMX509Util;
//import org.apache.log4j.Logger;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.DERBitString;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.misc.NetscapeCertType;
/**
* Displays the details of a X.509 certificate.
*
* @author Alex Nenadic
*/
@SuppressWarnings("serial")
public class ViewCertDetailsDialog
extends JDialog
{
// Logger
//private static Logger logger = Logger.getLogger(ViewCertDetailsDialog.class);
// Stores certificate to display
private X509Certificate cert;
// Stores list of serviceURLs to display
private ArrayList<String> serviceURLs;
/**
* Creates new ViewCertDetailsDialog dialog where the parent is a frame.
*/
public ViewCertDetailsDialog(JFrame parent, String title, boolean modal,
X509Certificate crt, ArrayList<String> serviceURLs)
throws CMException
{
super(parent, title, modal);
this.cert = crt;
this.serviceURLs = serviceURLs;
initComponents();
}
/**
* Creates new ViewCertDetailsDialog dialog where the parent is a dialog.
*/
public ViewCertDetailsDialog(JDialog parent, String title, boolean modal,
X509Certificate crt, ArrayList<String> urlList)
throws CMException
{
super(parent, title, modal);
cert = crt;
serviceURLs = urlList;
initComponents();
}
/**
* Initialise the dialog's GUI components.
*
* @throws CMException A problem was encountered getting the
* certificates' details
*/
private void initComponents()
throws CMException
{
// Certificate details:
// Grid Bag Constraints templates for labels (column 1) and
// values (column 2) of certificate details
GridBagConstraints gbcLabel = new GridBagConstraints();
gbcLabel.gridx = 0;
gbcLabel.ipadx = 20;
gbcLabel.gridwidth = 1;
gbcLabel.gridheight = 1;
gbcLabel.insets = new Insets(2, 15, 2, 2);
gbcLabel.anchor = GridBagConstraints.LINE_START;
GridBagConstraints gbcValue = new GridBagConstraints();
gbcValue.gridx = 1;
gbcValue.gridwidth = 1;
gbcValue.gridheight = 1;
gbcValue.insets = new Insets(2, 5, 2, 2);
gbcValue.anchor = GridBagConstraints.LINE_START;
// Netscape Certificate Type non-critical extension (if any)
// defines the intended uses of the certificate - to make it look like
// firefox's view certificate dialog
byte[] intendedUses = cert.getExtensionValue("2.16.840.1.113730.1.1"); //Netscape Certificate Type OID/*
JLabel jlIntendedUses = null;
JTextField jtfIntendedUsesValue = null;
JPanel jpUses = null;
GridBagConstraints gbc_jpUses = null;
if (intendedUses != null)
{
jlIntendedUses = new JLabel("This certificate has been approved for the following uses:");
jlIntendedUses.setFont(new Font(null, Font.BOLD, 11));
jlIntendedUses.setBorder(new EmptyBorder(5,5,5,5));
jtfIntendedUsesValue = new JTextField(45);
jtfIntendedUsesValue.setText(getIntendedUses(intendedUses));
jtfIntendedUsesValue.setEditable(false);
jtfIntendedUsesValue.setFont(new Font(null, Font.PLAIN, 11));
jpUses = new JPanel(new BorderLayout());
jpUses.add(jlIntendedUses, BorderLayout.NORTH);
jpUses.add(jtfIntendedUsesValue, BorderLayout.CENTER);
JSeparator jsp = new JSeparator(JSeparator.HORIZONTAL);
jpUses.add(jsp, BorderLayout.SOUTH);
gbc_jpUses = (GridBagConstraints) gbcLabel.clone();
gbc_jpUses.gridy = 0;
gbc_jpUses.gridwidth = 2; //takes two columns
gbc_jpUses.insets = new Insets(5, 5, 5, 5);//has slightly bigger insets
}
//Issued To
JLabel jlIssuedTo = new JLabel("Issued To");
jlIssuedTo.setFont(new Font(null, Font.BOLD, 11));
GridBagConstraints gbc_jlIssuedTo = (GridBagConstraints) gbcLabel.clone();
gbc_jlIssuedTo.gridy = 1;
gbc_jlIssuedTo.gridwidth = 2; //takes two columns
gbc_jlIssuedTo.insets = new Insets(5, 5, 5, 5);//has slightly bigger insets
// Distinguished Name (DN)
String sDN = cert.getSubjectX500Principal().getName(X500Principal.RFC2253);
CMX509Util util = new CMX509Util();
util.parseDN(sDN);
// Extract the CN, O, OU and EMAILADDRESS fields
String sCN = util.getCN();
String sOrg = util.getO();
String sOU = util.getOU();
//String sEMAILADDRESS = CMX509Util.getEmilAddress();
// Common Name (CN)
JLabel jlCN = new JLabel("Common Name (CN)");
jlCN.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlCN = (GridBagConstraints) gbcLabel.clone();
gbc_jlCN.gridy = 2;
JLabel jlCNValue = new JLabel(sCN);
jlCNValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlCNValue = (GridBagConstraints) gbcValue.clone();
gbc_jlCNValue.gridy = 2;
// Organisation (O)
JLabel jlOrg = new JLabel("Organisation (O)");
jlOrg.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlOrg = (GridBagConstraints) gbcLabel.clone();
gbc_jlOrg.gridy = 3;
JLabel jlOrgValue = new JLabel(sOrg);
jlOrgValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlOrgValue = (GridBagConstraints) gbcValue.clone();
gbc_jlOrgValue.gridy = 3;
// Organisation Unit (OU)
JLabel jlOU = new JLabel("Organisation Unit (OU)");
jlOU.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlOU = (GridBagConstraints) gbcLabel.clone();
gbc_jlOU.gridy = 4;
JLabel jlOUValue = new JLabel(sOU);
jlOUValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlOUValue = (GridBagConstraints) gbcValue.clone();
gbc_jlOUValue.gridy = 4;
// E-mail Address
//JLabel jlEmail = new JLabel("E-mail Address");
//jlEmail.setFont(new Font(null, Font.PLAIN, 11));
//GridBagConstraints gbc_jlEmail = (GridBagConstraints) gbcLabel.clone();
//gbc_jlEmail.gridy = 5;
//JLabel jlEmailValue = new JLabel(sEMAILADDRESS);
//jlEmailValue.setFont(new Font(null, Font.PLAIN, 11));
//GridBagConstraints gbc_jlEmailValue = (GridBagConstraints) gbcValue.clone();
//gbc_jlEmailValue.gridy = 5;
// Serial Number
JLabel jlSN = new JLabel("Serial Number");
jlSN.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlSN = (GridBagConstraints) gbcLabel.clone();
gbc_jlSN.gridy = 6;
JLabel jlSNValue = new JLabel();
// Get the hexadecimal serial number
StringBuffer strBuff = new StringBuffer (new BigInteger(1,
cert.getSerialNumber().toByteArray()).toString(16).toUpperCase());
// Place colons at every two hexadecimal characters
if (strBuff.length() > 2) {
for (int iCnt = 2; iCnt < strBuff.length(); iCnt += 3) {
strBuff.insert(iCnt, ':');
}
}
jlSNValue.setText(strBuff.toString());
jlSNValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlSNValue = (GridBagConstraints) gbcValue.clone();
gbc_jlSNValue.gridy = 6;
// Version
JLabel jlVersion = new JLabel("Version");
jlVersion.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlVersion = (GridBagConstraints) gbcLabel.clone();
gbc_jlVersion.gridy = 7;
JLabel jlVersionValue = new JLabel(Integer.toString(cert.getVersion()));
jlVersionValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlVersionValue = (GridBagConstraints) gbcValue.clone();
gbc_jlVersionValue.gridy = 7;
// Issued By
JLabel jlIssuedBy = new JLabel("Issued By");
jlIssuedBy.setFont(new Font(null, Font.BOLD, 11));
GridBagConstraints gbc_jlIssuedBy = (GridBagConstraints) gbcLabel.clone();
gbc_jlIssuedBy.gridy = 8;
gbc_jlIssuedBy.gridwidth = 2; //takes two columns
gbc_jlIssuedBy.insets = new Insets(5, 5, 5, 5);//has slightly bigger insets
// Distinguished Name (DN)
String iDN = cert.getIssuerX500Principal().getName(X500Principal.RFC2253);
util.parseDN(iDN);
// Extract the CN, O and OU fields
String iCN = util.getCN();
String iOrg = util.getO();
String iOU = util.getOU();
// Common Name (CN)
JLabel jlICN = new JLabel("Common Name (CN)");
jlICN.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlICN = (GridBagConstraints) gbcLabel.clone();
gbc_jlICN.gridy = 9;
JLabel jlICNValue = new JLabel(iCN);
jlICNValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlICNValue = (GridBagConstraints) gbcValue.clone();
gbc_jlICNValue.gridy = 9;
// Organisation (O)
JLabel jlIOrg = new JLabel("Organisation (O)");
jlIOrg.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIOrg = (GridBagConstraints) gbcLabel.clone();
gbc_jlIOrg.gridy = 10;
JLabel jlIOrgValue = new JLabel(iOrg);
jlIOrgValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIOrgValue = (GridBagConstraints) gbcValue.clone();
gbc_jlIOrgValue.gridy = 10;
// Organisation Unit (OU)
JLabel jlIOU = new JLabel("Organisation Unit (OU)");
jlIOU.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIOU = (GridBagConstraints) gbcLabel.clone();
gbc_jlIOU.gridy = 11;
JLabel jlIOUValue = new JLabel(iOU);
jlIOUValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIOUValue = (GridBagConstraints) gbcValue.clone();
gbc_jlIOUValue.gridy = 11;
// Validity
JLabel jlValidity = new JLabel("Validity");
jlValidity.setFont(new Font(null, Font.BOLD, 11));
GridBagConstraints gbc_jlValidity = (GridBagConstraints) gbcLabel.clone();
gbc_jlValidity.gridy = 12;
gbc_jlValidity.gridwidth = 2; //takes two columns
gbc_jlValidity.insets = new Insets(5, 5, 5, 5);//has slightly bigger insets
//Issued On
JLabel jlIssuedOn = new JLabel("Issued On");
jlIssuedOn.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIssuedOn = (GridBagConstraints) gbcLabel.clone();
gbc_jlIssuedOn.gridy = 13;
JLabel jlIssuedOnValue = new JLabel(cert.getNotBefore().toString());
jlIssuedOnValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlIssuedOnValue = (GridBagConstraints) gbcValue.clone();
gbc_jlIssuedOnValue.gridy = 13;
// Expires On
JLabel jlExpiresOn = new JLabel("Expires On");
jlExpiresOn.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlExpiresOn = (GridBagConstraints) gbcLabel.clone();
gbc_jlExpiresOn.gridy = 14;
JLabel jlExpiresOnValue = new JLabel(cert.getNotAfter().toString());
jlExpiresOnValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlExpiresOnValue = (GridBagConstraints) gbcValue.clone();
gbc_jlExpiresOnValue.gridy = 14;
// Fingerprints
byte[] bCert;
try {
bCert = cert.getEncoded();
}
catch (CertificateEncodingException ex) {
throw new CMException(
"Could not get the encoded form of the certificate.",
ex);
}
JLabel jlFingerprints = new JLabel("Fingerprints");
jlFingerprints.setFont(new Font(null, Font.BOLD, 11));
GridBagConstraints gbc_jlFingerprints = (GridBagConstraints) gbcLabel.clone();
gbc_jlFingerprints.gridy = 15;
gbc_jlFingerprints.gridwidth = 2; //takes two columns
gbc_jlFingerprints.insets = new Insets(5, 5, 5, 5);//has slightly bigger insets
// SHA-1 Fingerprint
JLabel jlSHA1Fingerprint = new JLabel("SHA1 Fingerprint");
jlSHA1Fingerprint.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlSHA1Fingerprint = (GridBagConstraints) gbcLabel.clone();
gbc_jlSHA1Fingerprint.gridy = 16;
JLabel jlSHA1FingerprintValue = new JLabel(getMessageDigest(bCert, "SHA1"));
jlSHA1FingerprintValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlSHA1FingerprintValue = (GridBagConstraints) gbcValue.clone();
gbc_jlSHA1FingerprintValue.gridy = 16;
// MD5 Fingerprint
JLabel jlMD5Fingerprint = new JLabel("MD5 Fingerprint");
jlMD5Fingerprint.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlMD5Fingerprint = (GridBagConstraints) gbcLabel.clone();
gbc_jlMD5Fingerprint.gridy = 17;
JLabel jlMD5FingerprintValue = new JLabel(getMessageDigest(bCert, "MD5"));
jlMD5FingerprintValue.setFont(new Font(null, Font.PLAIN, 11));
GridBagConstraints gbc_jlMD5FingerprintValue = (GridBagConstraints) gbcValue.clone();
gbc_jlMD5FingerprintValue.gridy = 17;
// Empty label to add a bit space at the bottom of the panel
// to make it look like firefox's view certificate dialog
JLabel jlEmpty = new JLabel("");
GridBagConstraints gbc_jlEmpty = (GridBagConstraints) gbcLabel.clone();
gbc_jlEmpty.gridy = 18;
gbc_jlEmpty.gridwidth = 2; //takes two columns
gbc_jlEmpty.ipady = 40;
JPanel jpCertificate = new JPanel(new GridBagLayout());
jpCertificate.setBorder(new CompoundBorder(
new EmptyBorder(15, 15, 15, 15), new EtchedBorder()));
if (intendedUses != null){
jpCertificate.add(jpUses, gbc_jpUses);
}
jpCertificate.add(jlIssuedTo, gbc_jlIssuedTo); // Issued To
jpCertificate.add(jlCN, gbc_jlCN);
jpCertificate.add(jlCNValue, gbc_jlCNValue);
jpCertificate.add(jlOrg, gbc_jlOrg);
jpCertificate.add(jlOrgValue, gbc_jlOrgValue);
jpCertificate.add(jlOU, gbc_jlOU);
jpCertificate.add(jlOUValue, gbc_jlOUValue);
//jpCertificate.add(jlEmail, gbc_jlEmail);
//jpCertificate.add(jlEmailValue, gbc_jlEmailValue);
jpCertificate.add(jlSN, gbc_jlSN);
jpCertificate.add(jlSNValue, gbc_jlSNValue);
jpCertificate.add(jlVersion, gbc_jlVersion);
jpCertificate.add(jlVersionValue, gbc_jlVersionValue);
jpCertificate.add(jlIssuedBy, gbc_jlIssuedBy); //Issued By
jpCertificate.add(jlICN, gbc_jlICN);
jpCertificate.add(jlICNValue, gbc_jlICNValue);
jpCertificate.add(jlIOrg, gbc_jlIOrg);
jpCertificate.add(jlIOrgValue, gbc_jlIOrgValue);
jpCertificate.add(jlIOU, gbc_jlIOU);
jpCertificate.add(jlIOUValue, gbc_jlIOUValue);
jpCertificate.add(jlValidity, gbc_jlValidity); //Validity
jpCertificate.add(jlIssuedOn, gbc_jlIssuedOn);
jpCertificate.add(jlIssuedOnValue, gbc_jlIssuedOnValue);
jpCertificate.add(jlExpiresOn, gbc_jlExpiresOn);
jpCertificate.add(jlExpiresOnValue, gbc_jlExpiresOnValue);
jpCertificate.add(jlFingerprints, gbc_jlFingerprints); //Fingerprints
jpCertificate.add(jlSHA1Fingerprint, gbc_jlSHA1Fingerprint);
jpCertificate.add(jlSHA1FingerprintValue, gbc_jlSHA1FingerprintValue);
jpCertificate.add(jlMD5Fingerprint, gbc_jlMD5Fingerprint);
jpCertificate.add(jlMD5FingerprintValue, gbc_jlMD5FingerprintValue);
jpCertificate.add(jlEmpty, gbc_jlEmpty); //Empty label to get some vertical space on the frame
// List of serviceURLs
JPanel jpURLs = null; // Panel to hold the URL list
if (serviceURLs!=null){ //if service serviceURLs are not null (even if empty - show empty list)
jpURLs = new JPanel(new BorderLayout());
jpURLs.setBorder(new CompoundBorder(
new EmptyBorder(0, 15, 0, 15), new EtchedBorder()));
// Label
JLabel jlServiceURLs = new JLabel ("Service URLs this key pair will be used for:");
jlServiceURLs.setFont(new Font(null, Font.BOLD, 11));
jlServiceURLs.setBorder(new EmptyBorder(5,5,5,5));
// New empty service serviceURLs list
DefaultListModel jltModel = new DefaultListModel();
JList jltServiceURLs = new JList(jltModel);
for (String url : serviceURLs){
jltModel.addElement(url);
}
jltServiceURLs.setVisibleRowCount(5); //don't show more than 5 otherwise the window is too big
// Scroll pane for service serviceURLs
JScrollPane jspServiceURLs = new JScrollPane(jltServiceURLs,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jspServiceURLs.getViewport().setBackground(jltServiceURLs.getBackground());
jpURLs.add(jlServiceURLs, BorderLayout.NORTH);
jpURLs.add(jspServiceURLs, BorderLayout.CENTER);
// Put it on the main content pane
getContentPane().add(jpURLs, BorderLayout.CENTER);
}
// OK button
JPanel jpOK = new JPanel(new FlowLayout(FlowLayout.CENTER));
final JButton jbOK = new JButton("OK");
jbOK.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
okPressed();
}
});
jpOK.add(jbOK);
// Put it all together (panel with URL list is already added, if it was not null)
getContentPane().add(jpCertificate, BorderLayout.NORTH);
getContentPane().add(jpOK, BorderLayout.SOUTH);
// Resizing wreaks havoc
setResizable(false);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
closeDialog();
}
});
getRootPane().setDefaultButton(jbOK);
pack();
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
jbOK.requestFocus();
}
});
}
/**
* Get the digest of a message as a formatted String.
*
* @param bMessage The message to digest
* @param digestType The message digest algorithm
* @return The message digest
* @throws CMException If there was a problem generating the message
* digest
*/
public static String getMessageDigest(byte[] bMessage,
String digestType)
throws CMException
{
// Create message digest object using the supplied algorithm
MessageDigest messageDigest;
try {
messageDigest = MessageDigest.getInstance(digestType);
}
catch (NoSuchAlgorithmException ex) {
throw new CMException("Failed to create message digest.", ex);
}
// Create raw message digest
byte[] bFingerPrint = messageDigest.digest(bMessage);
// Place the raw message digest into a StringBuffer as a Hex number
StringBuffer strBuff = new StringBuffer(
new BigInteger(1, bFingerPrint).toString(16).toUpperCase());
// Odd number of characters so add in a padding "0"
if ((strBuff.length() % 2) != 0) {
strBuff.insert(0, '0');
}
// Place colons at every two hex characters
if (strBuff.length() > 2) {
for (int iCnt = 2; iCnt < strBuff.length(); iCnt += 3) {
strBuff.insert(iCnt, ':');
}
}
// Return the formatted message digest
return strBuff.toString();
}
/**
* Gets the intended certificate uses, i.e. Netscape Certificate Type extension (2.16.840.1.113730.1.1)
* value as a string
* @param value Extension value as a DER-encoded OCTET string
* @return Extension value as a string
*/
private String getIntendedUses(byte[] value)
{
// Netscape Certificate Types (2.16.840.1.113730.1.1)
int[] INTENDED_USES = new int[] {
NetscapeCertType.sslClient,
NetscapeCertType.sslServer,
NetscapeCertType.smime,
NetscapeCertType.objectSigning,
NetscapeCertType.reserved,
NetscapeCertType.sslCA,
NetscapeCertType.smimeCA,
NetscapeCertType.objectSigningCA,
};
// Netscape Certificate Type strings (2.16.840.1.113730.1.1)
HashMap<String, String> INTENDED_USES_STRINGS = new HashMap<String, String> ();
INTENDED_USES_STRINGS.put("128", "SSL Client");
INTENDED_USES_STRINGS.put("64", "SSL Server");
INTENDED_USES_STRINGS.put("32", "S/MIME");
INTENDED_USES_STRINGS.put("16", "Object Signing");
INTENDED_USES_STRINGS.put("8", "Reserved");
INTENDED_USES_STRINGS.put("4", "SSL CA");
INTENDED_USES_STRINGS.put("2", "S/MIME CA");
INTENDED_USES_STRINGS.put("1", "Object Signing CA");
// Get octet string from extension value
ASN1OctetString fromByteArray = new DEROctetString(value);
byte[] octets = fromByteArray.getOctets();
DERBitString fromByteArray2 = new DERBitString(octets);
int val = new NetscapeCertType(fromByteArray2).intValue();
StringBuffer strBuff = new StringBuffer();
for (int i = 0, len = INTENDED_USES.length; i < len; i++) {
int use = INTENDED_USES[i];
if ((val & use) == use) {
strBuff.append(INTENDED_USES_STRINGS.get(String.valueOf(use))+", \n");
}
}
// remove the last ", \n" from the end of the buffer
String str = strBuff.toString();
str = str.substring(0, str.length()-3);
return str;
}
/**
* OK button pressed.
*/
private void okPressed()
{
closeDialog();
}
/**
* Closes the View Certificate Entry dialog.
*/
private void closeDialog()
{
setVisible(false);
dispose();
}
}