/* * Decompiled with CFR 0.152. * * Could not load the following classes: * com.tridium.crypto.core.cert.CertUtils * com.tridium.crypto.core.cert.NPKCS10CertificationRequest * com.tridium.crypto.core.cert.NSigningParameters * com.tridium.crypto.core.cert.NX509Certificate * com.tridium.crypto.core.cert.NX509CertificateEntry * com.tridium.crypto.core.cert.NX509Extension * com.tridium.crypto.core.util.FriendlyPemReader * com.tridium.platform.ui.util.CommandUtil * com.tridium.ui.theme.custom.nss.StyleUtils * com.tridium.workbench.fieldeditors.BAbsTimeFE * javax.baja.file.BAbstractFile * javax.baja.file.FileUtil * javax.baja.file.IFileFilter * javax.baja.gx.BImage * javax.baja.naming.BOrd * javax.baja.security.crypto.CertManagerFactory * javax.baja.security.crypto.ICryptoManagerEx * javax.baja.security.crypto.IKeyStore * javax.baja.sys.Action * javax.baja.sys.BAbsTime * javax.baja.sys.BComponent * javax.baja.sys.BIcon * javax.baja.sys.BValue * javax.baja.sys.Clock * javax.baja.sys.Slot * javax.baja.sys.Sys * javax.baja.sys.Type * javax.baja.ui.BButton * javax.baja.ui.BDialog * javax.baja.ui.BLabel * javax.baja.ui.BTextDropDown * javax.baja.ui.BTextField * javax.baja.ui.BWidget * javax.baja.ui.Command * javax.baja.ui.CommandArtifact * javax.baja.ui.enums.BButtonStyle * javax.baja.ui.enums.BHalign * javax.baja.ui.event.BWidgetEvent * javax.baja.ui.event.BWindowEvent * javax.baja.ui.file.BFileChooser * javax.baja.ui.file.ExtFileFilter * javax.baja.ui.pane.BBorderPane * javax.baja.ui.pane.BConstrainedPane * javax.baja.ui.pane.BEdgePane * javax.baja.ui.pane.BGridPane * javax.baja.ui.pane.BScrollPane * javax.baja.ui.style.IStylable * javax.baja.ui.util.UiLexicon * javax.baja.ui.wizard.BWizardHeader * javax.baja.util.Lexicon * org.bouncycastle.openssl.PEMParser * org.bouncycastle.openssl.PEMWriter * org.bouncycastle.pkcs.PKCS10CertificationRequest * org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequest */ package com.tridium.platcrypto.ui; import com.tridium.crypto.core.cert.CertUtils; import com.tridium.crypto.core.cert.NPKCS10CertificationRequest; import com.tridium.crypto.core.cert.NSigningParameters; import com.tridium.crypto.core.cert.NX509Certificate; import com.tridium.crypto.core.cert.NX509CertificateEntry; import com.tridium.crypto.core.cert.NX509Extension; import com.tridium.crypto.core.util.FriendlyPemReader; import com.tridium.platcrypto.ui.BCertsTable; import com.tridium.platcrypto.ui.BCryptoDialog; import com.tridium.platcrypto.ui.BPasswordField; import com.tridium.platcrypto.ui.BX509ExtensionPane; import com.tridium.platform.ui.util.CommandUtil; import com.tridium.ui.theme.custom.nss.StyleUtils; import com.tridium.workbench.fieldeditors.BAbsTimeFE; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.security.PrivateKey; import java.security.UnrecoverableKeyException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Date; import java.util.Enumeration; import java.util.List; import javax.baja.file.BAbstractFile; import javax.baja.file.FileUtil; import javax.baja.file.IFileFilter; import javax.baja.gx.BImage; import javax.baja.naming.BOrd; import javax.baja.security.crypto.CertManagerFactory; import javax.baja.security.crypto.ICryptoManagerEx; import javax.baja.security.crypto.IKeyStore; import javax.baja.sys.Action; import javax.baja.sys.BAbsTime; import javax.baja.sys.BComponent; import javax.baja.sys.BIcon; import javax.baja.sys.BValue; import javax.baja.sys.Clock; import javax.baja.sys.Slot; import javax.baja.sys.Sys; import javax.baja.sys.Type; import javax.baja.ui.BButton; import javax.baja.ui.BDialog; import javax.baja.ui.BLabel; import javax.baja.ui.BTextDropDown; import javax.baja.ui.BTextField; import javax.baja.ui.BWidget; import javax.baja.ui.Command; import javax.baja.ui.CommandArtifact; import javax.baja.ui.enums.BButtonStyle; import javax.baja.ui.enums.BHalign; import javax.baja.ui.event.BWidgetEvent; import javax.baja.ui.event.BWindowEvent; import javax.baja.ui.file.BFileChooser; import javax.baja.ui.file.ExtFileFilter; import javax.baja.ui.pane.BBorderPane; import javax.baja.ui.pane.BConstrainedPane; import javax.baja.ui.pane.BEdgePane; import javax.baja.ui.pane.BGridPane; import javax.baja.ui.pane.BScrollPane; import javax.baja.ui.style.IStylable; import javax.baja.ui.util.UiLexicon; import javax.baja.ui.wizard.BWizardHeader; import javax.baja.util.Lexicon; import org.bouncycastle.openssl.PEMParser; import org.bouncycastle.openssl.PEMWriter; import org.bouncycastle.pkcs.PKCS10CertificationRequest; import org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequest; /* * Illegal identifiers - consider using --renameillegalidents true */ public class BCertificateSignerDialog extends BCryptoDialog { public static final Action cancelButtonPressed = BCertificateSignerDialog.newAction((int)0, (BValue)new BWidgetEvent(), null); public static final Type TYPE; static Lexicon lex; static final BImage logo; private static final BImage open; ICryptoManagerEx mgr; IKeyStore store; private BTextField csrFileText; BButton openBtn; private BLabel subject; private BLabel subjectDN; private BLabel keyAlg; private BLabel keySize; private BLabel sigAlg; private BLabel sigSize; private BLabel verified; BGridPane csrPane; BEdgePane csrPropPane; BEdgePane extensionsPane; private BAbsTimeFE notBeforeFE; private BAbsTimeFE notAfterFE; private BX509ExtensionPane extensionPane; private BTextDropDown ca; private BPasswordField caPassword; NPKCS10CertificationRequest csr; String baseFileName; private BAbsTime notBefore; private BAbsTime notAfter; private BButton okButton; protected BButton cancelButton; static /* synthetic */ Class class$com$tridium$platcrypto$ui$BCertificateSignerDialog; public void cancelButtonPressed(BWidgetEvent bWidgetEvent) { this.invoke(cancelButtonPressed, (BValue)bWidgetEvent, null); } public Type getType() { return TYPE; } public static void show(BWidget bWidget) throws Exception { BCertificateSignerDialog bCertificateSignerDialog = new BCertificateSignerDialog(bWidget); bCertificateSignerDialog.setBoundsCenteredOnOwner(); bCertificateSignerDialog.setResizable(false); bCertificateSignerDialog.open(); } protected BWidget buildHeader() { return new BWizardHeader(logo, lex.getText("cert.signer.dialog.title"), lex.getText("cert.signer.dialog.info")); } protected BWidget buildBody() { BGridPane bGridPane = new BGridPane(1); bGridPane.setStretchColumn(0); bGridPane.setColumnAlign(BHalign.fill); BEdgePane bEdgePane = new BEdgePane(); bEdgePane.setTop((BWidget)new BLabel(lex.getText("cert.signer.dialog.selectcsr") + ':', BHalign.left)); BGridPane bGridPane2 = new BGridPane(2); this.csrFileText = new BTextField("", 60, false); bGridPane2.add(null, (BValue)this.csrFileText); this.openBtn = new BButton((Command)new OpenCsrCommand()); this.openBtn.setButtonStyle(BButtonStyle.toolBar); bGridPane2.add(null, (BValue)this.openBtn); bEdgePane.setCenter((BWidget)bGridPane2); bGridPane.add(null, (BValue)bEdgePane); this.csrPane = new BGridPane(1); this.csrPane.setVisible(false); this.csrPane.setStretchColumn(0); this.csrPane.setColumnAlign(BHalign.fill); this.csrPane.setRowGap(7.0); this.csrPropPane = new BEdgePane(); BEdgePane bEdgePane2 = new BEdgePane(); bEdgePane2.setLeft((BWidget)new BLabel(lex.getText("cert.dialog.properties") + ':')); this.csrPropPane.setTop((BWidget)bEdgePane2); BGridPane bGridPane3 = new BGridPane(2); bGridPane3.setStretchColumn(1); bGridPane3.setColorRows(true); StyleUtils.addStyleClass((IStylable)bGridPane3, (String)"scrolled"); bGridPane3.setColumnAlign(BHalign.left); BCertificateSignerDialog.addPaddedLabelRow(bGridPane3, "cert.field.subject", this.subject); BCertificateSignerDialog.addPaddedLabelRow(bGridPane3, "cert.field.subjectDn", this.subjectDN); BCertificateSignerDialog.addPaddedLabelRow(bGridPane3, "cert.field.keyAlgorithm", this.keyAlg); BCertificateSignerDialog.addPaddedLabelRow(bGridPane3, "cert.field.keySize", this.keySize); BCertificateSignerDialog.addPaddedLabelRow(bGridPane3, "cert.field.signatureAlgorithm", this.sigAlg); BCertificateSignerDialog.addPaddedLabelRow(bGridPane3, "cert.field.signatureSize", this.sigSize); BCertificateSignerDialog.addPaddedLabelRow(bGridPane3, "cert.field.verify", this.verified); BScrollPane bScrollPane = new BScrollPane((BWidget)bGridPane3); BConstrainedPane bConstrainedPane = new BConstrainedPane((BWidget)bScrollPane, 500.0, 150.0); this.csrPropPane.setCenter((BWidget)bConstrainedPane); this.csrPane.add(null, (BValue)this.csrPropPane); this.extensionsPane = new BEdgePane(); this.extensionsPane.setVisible(false); BEdgePane bEdgePane3 = new BEdgePane(); bEdgePane3.setLeft((BWidget)new BLabel(lex.getText("cert.dialog.extensions") + ':')); this.extensionsPane.setTop((BWidget)bEdgePane3); this.extensionPane = new BX509ExtensionPane(); bScrollPane = new BScrollPane((BWidget)this.extensionPane); BConstrainedPane bConstrainedPane2 = new BConstrainedPane((BWidget)bScrollPane, 500.0, 150.0); this.extensionsPane.setCenter((BWidget)bConstrainedPane2); this.csrPane.add(null, (BValue)this.extensionsPane); bGridPane.add(null, (BValue)this.csrPane); BEdgePane bEdgePane4 = new BEdgePane(); BGridPane bGridPane4 = new BGridPane(2); bGridPane4.setRowGap(7.0); this.notBeforeFE = new BAbsTimeFE(this.notBefore); BCertificateSignerDialog.addLabelRow(bGridPane4, "cert.field.notBefore", (BValue)this.notBeforeFE); this.notAfterFE = new BAbsTimeFE(this.notAfter); BCertificateSignerDialog.addLabelRow(bGridPane4, "cert.field.notAfter", (BValue)this.notAfterFE); this.ca = new BTextDropDown(this.getCaAliases(), 30, false); BCertificateSignerDialog.addLabelRow(bGridPane4, "cert.signer.dialog.caalias", (BValue)this.ca); this.caPassword = new BPasswordField("", 20); BCertificateSignerDialog.addLabelRow(bGridPane4, "cert.signer.dialog.capassword", (BValue)this.caPassword); bEdgePane4.setLeft((BWidget)bGridPane4); bGridPane.add(null, (BValue)bEdgePane4); bGridPane.setRowGap(7.0); return bGridPane; } private static final void addLabelRow(BGridPane bGridPane, String string, BValue bValue) { BCertificateSignerDialog.addRow(bGridPane, (BWidget)new BLabel(lex.getText(string) + ':'), bValue); } private static final void addPaddedLabelRow(BGridPane bGridPane, String string, BLabel bLabel) { BCertificateSignerDialog.addRow(bGridPane, BCertificateSignerDialog.createPaddedLabel(lex.getText(string)), (BValue)BCertificateSignerDialog.createPaddedLabel(bLabel)); } private static final void addRow(BGridPane bGridPane, BWidget bWidget, BValue bValue) { bGridPane.add(null, (BValue)bWidget); bGridPane.add(null, bValue); } protected BWidget buildButtons() { BGridPane bGridPane = new BGridPane(2); bGridPane.setColumnAlign(BHalign.fill); bGridPane.setUniformColumnWidth(true); this.okButton = new BButton(UiLexicon.bajaui().getText("dialog.ok")); bGridPane.add(null, (BValue)this.okButton); this.linkTo("linkA", (BComponent)this.okButton, (Slot)BButton.actionPerformed, (Slot)okButtonPressed); this.okButton.setEnabled(true); this.cancelButton = new BButton(UiLexicon.bajaui().getText("dialog.cancel")); bGridPane.add(null, (BValue)this.cancelButton); this.linkTo("linkB", (BComponent)this.cancelButton, (Slot)BButton.actionPerformed, (Slot)cancelButtonPressed); this.cancelButton.setEnabled(true); return new BBorderPane((BWidget)bGridPane, 7.0, 0.0, 0.0, 0.0); } private final List getCaAliases() { ArrayList arrayList = new ArrayList(); try { Enumeration enumeration = this.store.aliases(); while (enumeration.hasMoreElements()) { String string = (String)enumeration.nextElement(); if (!this.store.isKeyEntry(string)) continue; X509Certificate x509Certificate = this.store.getCertificate(string); if (x509Certificate != null && x509Certificate.getBasicConstraints() != -1) { arrayList.add(string); continue; } if (x509Certificate == null || x509Certificate.getKeyUsage() == null || !x509Certificate.getKeyUsage()[5]) continue; arrayList.add(string); } } catch (Exception exception) { exception.printStackTrace(); } return arrayList; } public void doOkButtonPressed(BWidgetEvent bWidgetEvent) { try { X509Certificate[] x509CertificateArray; String string = this.ca.getText(); String string2 = this.caPassword.getText(); X509Certificate x509Certificate = this.store.getCertificate(string); PrivateKey privateKey = (PrivateKey)this.store.getKey(string, string2.toCharArray()); NX509CertificateEntry nX509CertificateEntry = NX509CertificateEntry.make(null, (X509Certificate[])new X509Certificate[]{x509Certificate}, (PrivateKey)privateKey); Date date = new Date(((BAbsTime)this.notBeforeFE.saveValue()).getMillis()); Date date2 = new Date(((BAbsTime)this.notAfterFE.saveValue()).getMillis()); NSigningParameters nSigningParameters = NSigningParameters.make((Date)date, (Date)date2); int n = 0; while (n < this.extensionPane.getExtensionCount()) { if (this.extensionPane.isSelected(n)) { x509CertificateArray = this.extensionPane.getExtension(n); nSigningParameters.addExtension((NX509Extension)x509CertificateArray); } ++n; } NX509Certificate nX509Certificate = CertUtils.signCertificate((NPKCS10CertificationRequest)this.csr, (NX509CertificateEntry)nX509CertificateEntry, (NSigningParameters)nSigningParameters); x509CertificateArray = this.store.getCertificateChain(string); NX509Certificate[] nX509CertificateArray = new NX509Certificate[x509CertificateArray.length + 1]; nX509CertificateArray[0] = nX509Certificate; int n2 = 0; while (n2 < x509CertificateArray.length) { nX509CertificateArray[n2 + 1] = NX509Certificate.make((X509Certificate)x509CertificateArray[n2]); ++n2; } BFileChooser bFileChooser = BFileChooser.makeSave((BWidget)this.getOwner()); bFileChooser.addFilter((IFileFilter)new ExtFileFilter(lex.getText("cert.extension.info"), "pem,p12,crt,cer,cert")); bFileChooser.setTitle(lex.getText("cert.signer.save.title")); bFileChooser.setDefaultFileName(this.baseFileName + ".pem"); bFileChooser.setCurrentDirectory(BOrd.make((String)("file:/" + BCertsTable.getCertsDirectoryPath()))); BOrd bOrd = bFileChooser.show(); if (bOrd == null) { return; } BAbstractFile bAbstractFile = (BAbstractFile)bOrd.get(); if (bAbstractFile != null) { PEMWriter pEMWriter = new PEMWriter((Writer)new OutputStreamWriter(bAbstractFile.getOutputStream())); int n3 = 0; while (n3 < nX509CertificateArray.length) { pEMWriter.writeObject((Object)nX509CertificateArray[n3].getCertificate()); ++n3; } pEMWriter.close(); } this.close(); } catch (UnrecoverableKeyException unrecoverableKeyException) { this.badPassword(); } catch (Exception exception) { exception.printStackTrace(); this.close(); } } private final void badPassword() { this.caPassword.getModel().setText(""); BDialog.error((BWidget)this, (String)lex.getText("cert.signer.dialog.password.error.title"), (Object)lex.getText("cert.signer.dialog.password.error.message")); } public void doCancelButtonPressed(BWidgetEvent bWidgetEvent) { this.close(); } public void windowClosing(BWindowEvent bWindowEvent) { this.close(); } static /* synthetic */ Class class(String string, boolean bl) { try { Class clazz = Class.forName(string); if (!bl) { clazz = clazz.getComponentType(); } return clazz; } catch (ClassNotFoundException classNotFoundException) { throw new NoClassDefFoundError(classNotFoundException.getMessage()); } } private final /* synthetic */ void this() { this.subject = new BLabel(""); this.subjectDN = new BLabel(""); this.keyAlg = new BLabel(""); this.keySize = new BLabel(""); this.sigAlg = new BLabel(""); this.sigSize = new BLabel(""); this.verified = new BLabel(""); this.baseFileName = null; this.notBefore = BAbsTime.now(); this.notAfter = BAbsTime.make((long)(Clock.millis() + 63072000000L)); } public BCertificateSignerDialog() throws UnsupportedOperationException { this.this(); throw new UnsupportedOperationException(); } public BCertificateSignerDialog(BWidget bWidget) throws Exception { this(bWidget, lex.getText("cert.signer.dialog.title")); } public BCertificateSignerDialog(BWidget bWidget, String string) throws Exception { super(bWidget, string); this.this(); this.mgr = CertManagerFactory.getInstanceEx(); this.store = this.mgr.getKeyStore(); this.setContent(this.buildDialog()); this.setDefaultButton(this.okButton); } static { Class clazz = class$com$tridium$platcrypto$ui$BCertificateSignerDialog; if (clazz == null) { clazz = class$com$tridium$platcrypto$ui$BCertificateSignerDialog = BCertificateSignerDialog.class("[Lcom.tridium.platcrypto.ui.BCertificateSignerDialog;", false); } TYPE = Sys.loadType((Class)clazz); lex = Lexicon.make((String)"platCrypto"); logo = BImage.make((String)lex.get("cert.green.x32.icon", "module://icons/x32/lock.png")); open = BImage.make((BIcon)BIcon.std((String)"open.png")); } /* * Illegal identifiers - consider using --renameillegalidents true */ protected class OpenCsrCommand extends Command { /* * Enabled aggressive block sorting * Enabled unnecessary exception pruning * Enabled aggressive exception aggregation */ public CommandArtifact doInvoke() { try { BFileChooser bFileChooser = BFileChooser.makeOpen((BWidget)this.getOwner()); bFileChooser.addFilter((IFileFilter)new ExtFileFilter(lex.getText("csr.extension.info"), "csr")); bFileChooser.setTitle(lex.getText("cert.signer.csr.select")); bFileChooser.setCurrentDirectory(BOrd.make((String)("file:/" + BCertsTable.getCertsDirectoryPath()))); BOrd bOrd = bFileChooser.show(); if (bOrd == null) { return null; } BAbstractFile bAbstractFile = (BAbstractFile)bOrd.get(); if (bAbstractFile == null) return null; InputStreamReader inputStreamReader = new InputStreamReader(bAbstractFile.getInputStream()); FriendlyPemReader friendlyPemReader = new FriendlyPemReader((Reader)inputStreamReader); PEMParser pEMParser = new PEMParser((Reader)friendlyPemReader); try { Object object = pEMParser.readObject(); if (object != null) { if (object instanceof PKCS10CertificationRequest) { PKCS10CertificationRequest pKCS10CertificationRequest = (PKCS10CertificationRequest)object; JcaPKCS10CertificationRequest jcaPKCS10CertificationRequest = new JcaPKCS10CertificationRequest(pKCS10CertificationRequest.getEncoded()); BCertificateSignerDialog.this.csr = NPKCS10CertificationRequest.make((JcaPKCS10CertificationRequest)jcaPKCS10CertificationRequest); BCertificateSignerDialog.this.csrFileText.setText(bAbstractFile.toPathString()); BCertificateSignerDialog.this.baseFileName = FileUtil.getBase((String)bAbstractFile.getFileName()); BCertificateSignerDialog.this.subject.setText(BCertificateSignerDialog.this.csr.getSubject()); BCertificateSignerDialog.this.subjectDN.setText(BCertificateSignerDialog.this.csr.getSubjectDN().toString()); BCertificateSignerDialog.this.keyAlg.setText(BCertificateSignerDialog.this.csr.getKeyAlgorithm()); BCertificateSignerDialog.this.keySize.setText("" + BCertificateSignerDialog.this.csr.getKeySize()); BCertificateSignerDialog.this.sigAlg.setText(BCertificateSignerDialog.this.csr.getSignatureAlgorithm()); BCertificateSignerDialog.this.sigSize.setText("" + BCertificateSignerDialog.this.csr.getSignatureSize()); BCertificateSignerDialog.this.verified.setText("" + BCertificateSignerDialog.this.csr.verify()); BCertificateSignerDialog.this.csrPane.setVisible(true); BCertificateSignerDialog.this.extensionPane.setExtensions(BCertificateSignerDialog.this.csr.getExtensions(), true); if (BCertificateSignerDialog.this.extensionPane.getExtensionCount() > 0) { BCertificateSignerDialog.this.extensionsPane.setVisible(true); } else { BCertificateSignerDialog.this.extensionsPane.setVisible(false); } BCertificateSignerDialog.this.setBoundsCenteredOnOwner(); } else { BDialog.warning((BWidget)this.getOwner(), (String)lex.getText("csr.selection.error.title"), (Object)lex.getText("csr.selection.error.msg", new Object[]{bAbstractFile.getFileName()})); } } Object var8_13 = null; } catch (Throwable throwable) { Object var8_12 = null; try { pEMParser.close(); throw throwable; } catch (Exception exception) {} throw throwable; } try {} catch (Exception exception) { return null; } pEMParser.close(); return null; } catch (Exception exception) { CommandUtil.error((Command)this, (Throwable)exception); } return null; } public OpenCsrCommand() { super((BWidget)BCertificateSignerDialog.this, null, open, null, null); } } }