📄 policysigningdialog.java
字号:
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 + -