⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 policysigningdialog.java

📁 一个完整的XACML工程,学习XACML技术的好例子!
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        jCHAfter.addChangeListener(new ChangeListener() {
           public void stateChanged(ChangeEvent e) {
               boolean status = !jCHAfter.isSelected();
               textAfterDate.setEnabled(status);
               spinnerAfterH.setEnabled(status);
               spinnerAfterM.setEnabled(status);
               spinnerAfterS.setEnabled(status);
               bAfterChooser.setEnabled(status);
                 }
           });

        pData.add("North",pPublication);
        pData.add("West",pBefore);
        pData.add("East",pAfter);

        JButton accept = new JButton("Sign and Publish");
        JButton cancel = new JButton("Cancel");

        accept.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                if (signAndPublish())
                    setVisible(false);
            }
        });

        cancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                setVisible(false);
            }
        });

        pButtons.add(accept);
        pButtons.add(cancel);


        Container cnt = this.getContentPane();
        cnt.setLayout(new java.awt.BorderLayout());
        cnt.add("North",pData);
        cnt.add("South",pButtons);
    }

    public void setPolicy(String p) {
        xmlPolicy = p;
    }

    public void interact() {
        this.pack();
        this.setModal(true);
        centerDialog();
        this.show();
    }

    private boolean signAndPublish() {
        String before = "";
        String after = "";

        try {
            if (!jCHBefore.isSelected())
                new SimpleDateFormat("yyyy.MM.dd").parse(textBeforeDate.getText());
            if (!jCHAfter.isSelected())
                new SimpleDateFormat("yyyy.MM.dd").parse(textAfterDate.getText());
        } catch (ParseException e) {
            JOptionPane.showMessageDialog(jf,e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
            return false;
        }
        if (!jCHBefore.isSelected()) {
            before = textBeforeDate.getText() + " " + spinnerBeforeH.getValue() + ":" + spinnerBeforeM.getValue()
                    + ":" + spinnerBeforeS.getValue();
        }
        if (!jCHAfter.isSelected()) {
            after = after +  textAfterDate.getText() + " " +
                 spinnerAfterH.getValue() + ":" +  spinnerAfterM.getValue() + ":" +
                 spinnerAfterS.getValue();
        }

        try {
            MessageDigest md = MessageDigest.getInstance("SHA");
            BigInteger bi = new BigInteger(md.digest(new java.util.GregorianCalendar().getTime().toString().getBytes())); // SHA-1 digest of the current date and time is pretty random, as the policy is issued by humans
            java.math.BigInteger ACSerialNumber = new java.math.BigInteger((bi.abs().toString(16)).substring(0,14),16);

            issrg.ac.Generalized_Time btt = null ;
            issrg.ac.Generalized_Time att = null;
            if (!jCHBefore.isSelected())
                    btt = issrg.acm.Util.buildGeneralizedTime(before);
            if (!jCHAfter.isSelected())
                    att = issrg.acm.Util.buildGeneralizedTime(after);
            issrg.ac.AttCertValidityPeriod validity_period = new issrg.ac.AttCertValidityPeriod(btt,att);

            //WE NEED TO INCLUDE THE POLICY HERE!!!
            PMIXMLPolicy policy = new PMIXMLPolicy(xmlPolicy);
            issrg.ac.Attribute attr = new issrg.ac.Attribute(PMIXMLPolicy.PMI_XML_POLICY_ATTRIBUTE_OID,policy);
            Vector attributes = new Vector();
            attributes.add(attr);

            issrg.ac.Extensions extensions = new issrg.ac.Extensions(new Vector());
            issrg.ac.AttCertIssuer issuer;

            SimpleSigningUtility signingUtility = new SimpleSigningUtility();

            try {
                signingUtility.login(jf, env);

                java.security.cert.X509Certificate signerPKC = signingUtility.getVerificationCertificate();

                String subjectDN;

                if (signerPKC instanceof iaik.x509.X509Certificate) {
                    try {
                        subjectDN = ((iaik.asn1.structures.Name) signerPKC.getSubjectDN()).getRFC2253String();
                    } catch (iaik.utils.RFC2253NameParserException rnpe) {
                        throw new issrg.acm.ACCreationException("Failed to decode DNs", rnpe);
                    }
                } else {
                    subjectDN = signerPKC.getSubjectDN().getName();
                }

                iaik.asn1.structures.GeneralNames hn = issrg.ac.Util.buildGeneralNames(subjectDN);

                issrg.ac.V2Form signer = new issrg.ac.V2Form(hn, null, null);

                issuer = new issrg.ac.AttCertIssuer(null, signer);

                issrg.ac.Holder holder = new issrg.ac.Holder(null, hn, null);

                byte[] bt = signerPKC.getSigAlgParams();
                ASN1Object algParams = bt == null ? null : iaik.asn1.DerCoder.decode(bt);
                AlgorithmID signatureAlg = new AlgorithmID(new iaik.asn1.ObjectID(signerPKC.getSigAlgOID()), algParams);

                issrg.ac.AttributeCertificateInfo aci = new issrg.ac.AttributeCertificateInfo(
                        new issrg.ac.AttCertVersion(issrg.ac.AttCertVersion.V2),
                        holder,
                        issuer,
                        signatureAlg,
                        ACSerialNumber,
                        validity_period,
                        attributes,
                        null,
                        extensions
                );

                AttributeCertificate cert = null;

                //HASH VALUE FOR THE SERIAL NUMBER


                byte[] b = aci.getEncoded();

                try {
                    cert = new issrg.ac.AttributeCertificate(
                            aci,
                            signatureAlg,
                            new BIT_STRING(signingUtility.sign(b)));
                    //getEncoded();
                } catch (Throwable e) {
                    throw new issrg.acm.ACCreationException(e.getMessage(), e);
                } finally {
                    signingUtility.logout(null, env);
                }

                if (cert != null) {
                    issrg.acm.SavingUtility su = null;
                    if (jRBfile.isSelected()) {
                        su = new issrg.acm.DiskSavingUtility();
                    }
                    else {
                        su = new issrg.acm.extensions.LDAPSavingUtility();
                    }

                    boolean redo;
                    do {
                        redo = false;
                        try {
                            env.put(issrg.acm.EnvironmentalVariables.HOLDER_NAME_STRING, subjectDN);
                            su.save(jf, cert.getEncoded(),env);
                        } catch (issrg.acm.ACCreationException acce) {
                            issrg.utils.Util.bewail(acce.getMessage(), acce, this);
                            redo = javax.swing.JOptionPane.showConfirmDialog(this,
                                    "Try to save again?", "Confirm",
                                    javax.swing.JOptionPane.OK_CANCEL_OPTION) ==
                                    javax.swing.JOptionPane.OK_OPTION;
                        }
                    } while (redo);
                }

            } catch (iaik.asn1.CodingException ce) {
                throw new issrg.acm.ACCreationException(ce.getMessage(), ce);
            } catch (issrg.security.SecurityException se) {
                throw new issrg.acm.ACCreationException(se.getMessage(), se);
            }
        }
        catch (Exception ge) {
            JOptionPane.showMessageDialog(jf,ge.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
            return false;
        }

        return true;
    }

    public void setLDAPParameters(String server, String login) {
        env.put(LDAPSavingUtility.LDAP_SAVING_UTILITY_LDAP_PROVIDER,server);
        env.put(LDAPSavingUtility.LDAP_SAVING_UTILITY_LOGIN,login);
    }

    protected void centerDialog() {
        Dimension screenSize = this.getToolkit().getScreenSize();
        Dimension size = this.getSize();
        screenSize.height = screenSize.height / 2;
        screenSize.width = screenSize.width / 2;
        size.height = size.height / 2;
        size.width = size.width / 2;
        int y = screenSize.height - size.height;
        int x = screenSize.width - size.width;
        this.setLocation(x, y);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -