7198416: CertificateIssuerName and CertificateSubjectName are redundant

Reviewed-by: mullan
This commit is contained in:
Jason Uh 2012-11-08 12:51:25 -05:00 committed by Sean Mullan
parent 5d67e2bbb1
commit fdfd7968f7
10 changed files with 77 additions and 85 deletions

View file

@ -39,7 +39,6 @@ import java.security.*;
import sun.security.timestamp.*; import sun.security.timestamp.*;
import sun.security.util.*; import sun.security.util.*;
import sun.security.x509.AlgorithmId; import sun.security.x509.AlgorithmId;
import sun.security.x509.CertificateIssuerName;
import sun.security.x509.X509CertImpl; import sun.security.x509.X509CertImpl;
import sun.security.x509.X509CertInfo; import sun.security.x509.X509CertInfo;
import sun.security.x509.X509CRLImpl; import sun.security.x509.X509CRLImpl;
@ -712,8 +711,8 @@ public class PKCS7 {
X509CertInfo tbsCert = X509CertInfo tbsCert =
new X509CertInfo(cert.getTBSCertificate()); new X509CertInfo(cert.getTBSCertificate());
certIssuerName = (Principal) certIssuerName = (Principal)
tbsCert.get(CertificateIssuerName.NAME + "." + tbsCert.get(X509CertInfo.ISSUER + "." +
CertificateIssuerName.DN_NAME); X509CertInfo.DN_NAME);
} catch (Exception e) { } catch (Exception e) {
// error generating X500Name object from the cert's // error generating X500Name object from the cert's
// issuer DN, leave name as is. // issuer DN, leave name as is.

View file

@ -2259,9 +2259,9 @@ class SignatureFile {
X509CertInfo tbsCert = new X509CertInfo tbsCert = new
X509CertInfo(certChain[0].getTBSCertificate()); X509CertInfo(certChain[0].getTBSCertificate());
issuerName = (Principal) issuerName = (Principal)
tbsCert.get(CertificateIssuerName.NAME + "." + tbsCert.get(X509CertInfo.ISSUER + "." +
CertificateIssuerName.DN_NAME); X509CertInfo.DN_NAME);
} }
BigInteger serial = certChain[0].getSerialNumber(); BigInteger serial = certChain[0].getSerialNumber();
String signatureAlgorithm; String signatureAlgorithm;

View file

@ -258,10 +258,10 @@ public final class CertAndKeyGen {
AlgorithmId algID = AlgorithmId.get(sigAlg); AlgorithmId algID = AlgorithmId.get(sigAlg);
info.set(X509CertInfo.ALGORITHM_ID, info.set(X509CertInfo.ALGORITHM_ID,
new CertificateAlgorithmId(algID)); new CertificateAlgorithmId(algID));
info.set(X509CertInfo.SUBJECT, new CertificateSubjectName(myname)); info.set(X509CertInfo.SUBJECT, myname);
info.set(X509CertInfo.KEY, new CertificateX509Key(publicKey)); info.set(X509CertInfo.KEY, new CertificateX509Key(publicKey));
info.set(X509CertInfo.VALIDITY, interval); info.set(X509CertInfo.VALIDITY, interval);
info.set(X509CertInfo.ISSUER, new CertificateIssuerName(myname)); info.set(X509CertInfo.ISSUER, myname);
if (ext != null) info.set(X509CertInfo.EXTENSIONS, ext); if (ext != null) info.set(X509CertInfo.EXTENSIONS, ext);
cert = new X509CertImpl(info); cert = new X509CertImpl(info);

View file

@ -1145,7 +1145,7 @@ public final class Main {
X509CertInfo signerCertInfo = (X509CertInfo)signerCertImpl.get( X509CertInfo signerCertInfo = (X509CertInfo)signerCertImpl.get(
X509CertImpl.NAME + "." + X509CertImpl.INFO); X509CertImpl.NAME + "." + X509CertImpl.INFO);
X500Name issuer = (X500Name)signerCertInfo.get(X509CertInfo.SUBJECT + "." + X500Name issuer = (X500Name)signerCertInfo.get(X509CertInfo.SUBJECT + "." +
CertificateSubjectName.DN_NAME); X509CertInfo.DN_NAME);
Date firstDate = getStartDate(startDate); Date firstDate = getStartDate(startDate);
Date lastDate = new Date(); Date lastDate = new Date();
@ -1170,7 +1170,7 @@ public final class Main {
info.set(X509CertInfo.ALGORITHM_ID, info.set(X509CertInfo.ALGORITHM_ID,
new CertificateAlgorithmId( new CertificateAlgorithmId(
AlgorithmId.get(sigAlgName))); AlgorithmId.get(sigAlgName)));
info.set(X509CertInfo.ISSUER, new CertificateIssuerName(issuer)); info.set(X509CertInfo.ISSUER, issuer);
BufferedReader reader = new BufferedReader(new InputStreamReader(in)); BufferedReader reader = new BufferedReader(new InputStreamReader(in));
boolean canRead = false; boolean canRead = false;
@ -1193,8 +1193,8 @@ public final class Main {
PKCS10 req = new PKCS10(rawReq); PKCS10 req = new PKCS10(rawReq);
info.set(X509CertInfo.KEY, new CertificateX509Key(req.getSubjectPublicKeyInfo())); info.set(X509CertInfo.KEY, new CertificateX509Key(req.getSubjectPublicKeyInfo()));
info.set(X509CertInfo.SUBJECT, new CertificateSubjectName( info.set(X509CertInfo.SUBJECT,
dname==null?req.getSubjectName():new X500Name(dname))); dname==null?req.getSubjectName():new X500Name(dname));
CertificateExtensions reqex = null; CertificateExtensions reqex = null;
Iterator<PKCS10Attribute> attrs = req.getAttributes().getAttributes().iterator(); Iterator<PKCS10Attribute> attrs = req.getAttributes().getAttributes().iterator();
while (attrs.hasNext()) { while (attrs.hasNext()) {
@ -1234,7 +1234,7 @@ public final class Main {
X509CertInfo signerCertInfo = (X509CertInfo)signerCertImpl.get( X509CertInfo signerCertInfo = (X509CertInfo)signerCertImpl.get(
X509CertImpl.NAME + "." + X509CertImpl.INFO); X509CertImpl.NAME + "." + X509CertImpl.INFO);
X500Name owner = (X500Name)signerCertInfo.get(X509CertInfo.SUBJECT + "." + X500Name owner = (X500Name)signerCertInfo.get(X509CertInfo.SUBJECT + "." +
CertificateSubjectName.DN_NAME); X509CertInfo.DN_NAME);
Date firstDate = getStartDate(startDate); Date firstDate = getStartDate(startDate);
Date lastDate = (Date) firstDate.clone(); Date lastDate = (Date) firstDate.clone();
@ -2405,16 +2405,16 @@ public final class Main {
if (dname == null) { if (dname == null) {
// Get the owner name from the certificate // Get the owner name from the certificate
owner = (X500Name)certInfo.get(X509CertInfo.SUBJECT + "." + owner = (X500Name)certInfo.get(X509CertInfo.SUBJECT + "." +
CertificateSubjectName.DN_NAME); X509CertInfo.DN_NAME);
} else { } else {
// Use the owner name specified at the command line // Use the owner name specified at the command line
owner = new X500Name(dname); owner = new X500Name(dname);
certInfo.set(X509CertInfo.SUBJECT + "." + certInfo.set(X509CertInfo.SUBJECT + "." +
CertificateSubjectName.DN_NAME, owner); X509CertInfo.DN_NAME, owner);
} }
// Make issuer same as owner (self-signed!) // Make issuer same as owner (self-signed!)
certInfo.set(X509CertInfo.ISSUER + "." + certInfo.set(X509CertInfo.ISSUER + "." +
CertificateIssuerName.DN_NAME, owner); X509CertInfo.DN_NAME, owner);
// The inner and outer signature algorithms have to match. // The inner and outer signature algorithms have to match.
// The way we achieve that is really ugly, but there seems to be no // The way we achieve that is really ugly, but there seems to be no

View file

@ -96,12 +96,10 @@ public class X509CertImpl extends X509Certificate implements DerEncoder {
*/ */
// x509.info.subject.dname // x509.info.subject.dname
public static final String SUBJECT_DN = NAME + DOT + INFO + DOT + public static final String SUBJECT_DN = NAME + DOT + INFO + DOT +
X509CertInfo.SUBJECT + DOT + X509CertInfo.SUBJECT + DOT + X509CertInfo.DN_NAME;
CertificateSubjectName.DN_NAME;
// x509.info.issuer.dname // x509.info.issuer.dname
public static final String ISSUER_DN = NAME + DOT + INFO + DOT + public static final String ISSUER_DN = NAME + DOT + INFO + DOT +
X509CertInfo.ISSUER + DOT + X509CertInfo.ISSUER + DOT + X509CertInfo.DN_NAME;
CertificateIssuerName.DN_NAME;
// x509.info.serialNumber.number // x509.info.serialNumber.number
public static final String SERIAL_ID = NAME + DOT + INFO + DOT + public static final String SERIAL_ID = NAME + DOT + INFO + DOT +
X509CertInfo.SERIAL_NUMBER + DOT + X509CertInfo.SERIAL_NUMBER + DOT +
@ -890,9 +888,8 @@ public class X509CertImpl extends X509Certificate implements DerEncoder {
if (info == null) if (info == null)
return null; return null;
try { try {
Principal subject = (Principal)info.get( Principal subject = (Principal)info.get(X509CertInfo.SUBJECT + DOT +
CertificateSubjectName.NAME + DOT + X509CertInfo.DN_NAME);
CertificateSubjectName.DN_NAME);
return subject; return subject;
} catch (Exception e) { } catch (Exception e) {
return null; return null;
@ -910,8 +907,8 @@ public class X509CertImpl extends X509Certificate implements DerEncoder {
} }
try { try {
X500Principal subject = (X500Principal)info.get( X500Principal subject = (X500Principal)info.get(
CertificateSubjectName.NAME + DOT + X509CertInfo.SUBJECT + DOT +
CertificateSubjectName.DN_PRINCIPAL); "x500principal");
return subject; return subject;
} catch (Exception e) { } catch (Exception e) {
return null; return null;
@ -927,9 +924,8 @@ public class X509CertImpl extends X509Certificate implements DerEncoder {
if (info == null) if (info == null)
return null; return null;
try { try {
Principal issuer = (Principal)info.get( Principal issuer = (Principal)info.get(X509CertInfo.ISSUER + DOT +
CertificateIssuerName.NAME + DOT + X509CertInfo.DN_NAME);
CertificateIssuerName.DN_NAME);
return issuer; return issuer;
} catch (Exception e) { } catch (Exception e) {
return null; return null;
@ -947,8 +943,8 @@ public class X509CertImpl extends X509Certificate implements DerEncoder {
} }
try { try {
X500Principal issuer = (X500Principal)info.get( X500Principal issuer = (X500Principal)info.get(
CertificateIssuerName.NAME + DOT + X509CertInfo.ISSUER + DOT +
CertificateIssuerName.DN_PRINCIPAL); "x500principal");
return issuer; return issuer;
} catch (Exception e) { } catch (Exception e) {
return null; return null;

View file

@ -68,12 +68,13 @@ public class X509CertInfo implements CertAttrSet<String> {
public static final String IDENT = "x509.info"; public static final String IDENT = "x509.info";
// Certificate attribute names // Certificate attribute names
public static final String NAME = "info"; public static final String NAME = "info";
public static final String DN_NAME = "dname";
public static final String VERSION = CertificateVersion.NAME; public static final String VERSION = CertificateVersion.NAME;
public static final String SERIAL_NUMBER = CertificateSerialNumber.NAME; public static final String SERIAL_NUMBER = CertificateSerialNumber.NAME;
public static final String ALGORITHM_ID = CertificateAlgorithmId.NAME; public static final String ALGORITHM_ID = CertificateAlgorithmId.NAME;
public static final String ISSUER = CertificateIssuerName.NAME; public static final String ISSUER = "issuer";
public static final String SUBJECT = "subject";
public static final String VALIDITY = CertificateValidity.NAME; public static final String VALIDITY = CertificateValidity.NAME;
public static final String SUBJECT = CertificateSubjectName.NAME;
public static final String KEY = CertificateX509Key.NAME; public static final String KEY = CertificateX509Key.NAME;
public static final String ISSUER_ID = "issuerID"; public static final String ISSUER_ID = "issuerID";
public static final String SUBJECT_ID = "subjectID"; public static final String SUBJECT_ID = "subjectID";
@ -83,9 +84,9 @@ public class X509CertInfo implements CertAttrSet<String> {
protected CertificateVersion version = new CertificateVersion(); protected CertificateVersion version = new CertificateVersion();
protected CertificateSerialNumber serialNum = null; protected CertificateSerialNumber serialNum = null;
protected CertificateAlgorithmId algId = null; protected CertificateAlgorithmId algId = null;
protected CertificateIssuerName issuer = null; protected X500Name issuer = null;
protected X500Name subject = null;
protected CertificateValidity interval = null; protected CertificateValidity interval = null;
protected CertificateSubjectName subject = null;
protected CertificateX509Key pubKey = null; protected CertificateX509Key pubKey = null;
// X509.v2 & v3 extensions // X509.v2 & v3 extensions
@ -399,11 +400,7 @@ public class X509CertInfo implements CertAttrSet<String> {
break; break;
case ATTR_ISSUER: case ATTR_ISSUER:
if (suffix == null) { setIssuer(val);
setIssuer(val);
} else {
issuer.set(suffix, val);
}
break; break;
case ATTR_VALIDITY: case ATTR_VALIDITY:
@ -415,11 +412,7 @@ public class X509CertInfo implements CertAttrSet<String> {
break; break;
case ATTR_SUBJECT: case ATTR_SUBJECT:
if (suffix == null) { setSubject(val);
setSubject(val);
} else {
subject.set(suffix, val);
}
break; break;
case ATTR_KEY: case ATTR_KEY:
@ -493,11 +486,7 @@ public class X509CertInfo implements CertAttrSet<String> {
} }
break; break;
case (ATTR_ISSUER): case (ATTR_ISSUER):
if (suffix == null) { issuer = null;
issuer = null;
} else {
issuer.delete(suffix);
}
break; break;
case (ATTR_VALIDITY): case (ATTR_VALIDITY):
if (suffix == null) { if (suffix == null) {
@ -507,11 +496,7 @@ public class X509CertInfo implements CertAttrSet<String> {
} }
break; break;
case (ATTR_SUBJECT): case (ATTR_SUBJECT):
if (suffix == null) { subject = null;
subject = null;
} else {
subject.delete(suffix);
}
break; break;
case (ATTR_KEY): case (ATTR_KEY):
if (suffix == null) { if (suffix == null) {
@ -571,13 +556,13 @@ public class X509CertInfo implements CertAttrSet<String> {
if (suffix == null) { if (suffix == null) {
return(subject); return(subject);
} else { } else {
return(subject.get(suffix)); return(getX500Name(suffix, false));
} }
case (ATTR_ISSUER): case (ATTR_ISSUER):
if (suffix == null) { if (suffix == null) {
return(issuer); return(issuer);
} else { } else {
return(issuer.get(suffix)); return(getX500Name(suffix, true));
} }
case (ATTR_KEY): case (ATTR_KEY):
if (suffix == null) { if (suffix == null) {
@ -617,6 +602,21 @@ public class X509CertInfo implements CertAttrSet<String> {
return null; return null;
} }
/*
* Get the Issuer or Subject name
*/
private Object getX500Name(String name, boolean getIssuer)
throws IOException {
if (name.equalsIgnoreCase(X509CertInfo.DN_NAME)) {
return getIssuer ? issuer : subject;
} else if (name.equalsIgnoreCase("x500principal")) {
return getIssuer ? issuer.asX500Principal()
: subject.asX500Principal();
} else {
throw new IOException("Attribute name not recognized.");
}
}
/* /*
* This routine unmarshals the certificate information. * This routine unmarshals the certificate information.
*/ */
@ -646,9 +646,8 @@ public class X509CertInfo implements CertAttrSet<String> {
algId = new CertificateAlgorithmId(in); algId = new CertificateAlgorithmId(in);
// Issuer name // Issuer name
issuer = new CertificateIssuerName(in); issuer = new X500Name(in);
X500Name issuerDN = (X500Name)issuer.get(CertificateIssuerName.DN_NAME); if (issuer.isEmpty()) {
if (issuerDN.isEmpty()) {
throw new CertificateParsingException( throw new CertificateParsingException(
"Empty issuer DN not allowed in X509Certificates"); "Empty issuer DN not allowed in X509Certificates");
} }
@ -657,10 +656,9 @@ public class X509CertInfo implements CertAttrSet<String> {
interval = new CertificateValidity(in); interval = new CertificateValidity(in);
// subject name // subject name
subject = new CertificateSubjectName(in); subject = new X500Name(in);
X500Name subjectDN = (X500Name)subject.get(CertificateSubjectName.DN_NAME);
if ((version.compare(CertificateVersion.V1) == 0) && if ((version.compare(CertificateVersion.V1) == 0) &&
subjectDN.isEmpty()) { subject.isEmpty()) {
throw new CertificateParsingException( throw new CertificateParsingException(
"Empty subject DN not allowed in v1 certificate"); "Empty subject DN not allowed in v1 certificate");
} }
@ -712,13 +710,12 @@ public class X509CertInfo implements CertAttrSet<String> {
/* /*
* Verify if X.509 V3 Certificate is compliant with RFC 3280. * Verify if X.509 V3 Certificate is compliant with RFC 3280.
*/ */
private void verifyCert(CertificateSubjectName subject, private void verifyCert(X500Name subject,
CertificateExtensions extensions) CertificateExtensions extensions)
throws CertificateParsingException, IOException { throws CertificateParsingException, IOException {
// if SubjectName is empty, check for SubjectAlternativeNameExtension // if SubjectName is empty, check for SubjectAlternativeNameExtension
X500Name subjectDN = (X500Name)subject.get(CertificateSubjectName.DN_NAME); if (subject.isEmpty()) {
if (subjectDN.isEmpty()) {
if (extensions == null) { if (extensions == null) {
throw new CertificateParsingException("X.509 Certificate is " + throw new CertificateParsingException("X.509 Certificate is " +
"incomplete: subject field is empty, and certificate " + "incomplete: subject field is empty, and certificate " +
@ -859,11 +856,11 @@ public class X509CertInfo implements CertAttrSet<String> {
* @exception CertificateException on invalid data. * @exception CertificateException on invalid data.
*/ */
private void setIssuer(Object val) throws CertificateException { private void setIssuer(Object val) throws CertificateException {
if (!(val instanceof CertificateIssuerName)) { if (!(val instanceof X500Name)) {
throw new CertificateException( throw new CertificateException(
"Issuer class type invalid."); "Issuer class type invalid.");
} }
issuer = (CertificateIssuerName)val; issuer = (X500Name)val;
} }
/** /**
@ -887,11 +884,11 @@ public class X509CertInfo implements CertAttrSet<String> {
* @exception CertificateException on invalid data. * @exception CertificateException on invalid data.
*/ */
private void setSubject(Object val) throws CertificateException { private void setSubject(Object val) throws CertificateException {
if (!(val instanceof CertificateSubjectName)) { if (!(val instanceof X500Name)) {
throw new CertificateException( throw new CertificateException(
"Subject class type invalid."); "Subject class type invalid.");
} }
subject = (CertificateSubjectName)val; subject = (X500Name)val;
} }
/** /**

View file

@ -86,9 +86,9 @@ AlgorithmId</td>
<td>issuer</td> <td>issuer</td>
<td>x509.info.issuer<br> <td>x509.info.issuer<br>
x509.info.issuer.dname</td> x509.info.issuer.dname</td>
<td>CertificateIssuerName.IDENT<br> <td>none<br>
X509CertImpl.ISSUER_DN</td> X509CertImpl.ISSUER_DN</td>
<td>CertificateIssuerName<br> <td>X500Name<br>
X500Name</td> X500Name</td>
</tr> </tr>
<tr> <tr>
@ -109,9 +109,9 @@ java.util.Date</td>
<td>subject</td> <td>subject</td>
<td>x509.info.subject<br> <td>x509.info.subject<br>
x509.info.subject.dname</td> x509.info.subject.dname</td>
<td>CertificateSubjectName.IDENT<br> <td>none<br>
X509CertImpl.SUBJECT_DN</td> X509CertImpl.SUBJECT_DN</td>
<td>CertificateSubjectName<br> <td>X500Name<br>
X500Name</td> X500Name</td>
</tr> </tr>
<tr> <tr>
@ -127,18 +127,18 @@ X509Key</td>
<td>issuerUniqueID</td> <td>issuerUniqueID</td>
<td>x509.info.issuerID<br> <td>x509.info.issuerID<br>
x509.info.issuerID.id</td> x509.info.issuerID.id</td>
<td>CertificateIssuerUniqueIdentity.IDENT<br> <td>none<br>
none</td> none</td>
<td>CertificateIssuerUniqueIdentity<br> <td>UniqueIdentity<br>
UniqueIdentity</td> UniqueIdentity</td>
</tr> </tr>
<tr> <tr>
<td>subjectUniqueID</td> <td>subjectUniqueID</td>
<td>x509.info.subjectID<br> <td>x509.info.subjectID<br>
x509.info.subjectID.id</td> x509.info.subjectID.id</td>
<td>CertificateSubjectUniqueIdentity.IDENT<br> <td>none<br>
none</td> none</td>
<td>CertificateSubjectUniqueIdentity<br> <td>UniqueIdentity<br>
UniqueIdentity</td> UniqueIdentity</td>
</tr> </tr>
<tr> <tr>

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -54,8 +54,8 @@ public class GenKeyStore {
certInfo.set(X509CertInfo.VERSION, new CertificateVersion(CertificateVersion.V1)); certInfo.set(X509CertInfo.VERSION, new CertificateVersion(CertificateVersion.V1));
certInfo.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(1)); certInfo.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(1));
certInfo.set(X509CertInfo.ALGORITHM_ID, new CertificateAlgorithmId(algID)); certInfo.set(X509CertInfo.ALGORITHM_ID, new CertificateAlgorithmId(algID));
certInfo.set(X509CertInfo.SUBJECT, new CertificateSubjectName(name)); certInfo.set(X509CertInfo.SUBJECT, name);
certInfo.set(X509CertInfo.ISSUER, new CertificateIssuerName(name)); certInfo.set(X509CertInfo.ISSUER, name);
certInfo.set(X509CertInfo.KEY, new CertificateX509Key(publicKey)); certInfo.set(X509CertInfo.KEY, new CertificateX509Key(publicKey));
certInfo.set(X509CertInfo.VALIDITY, new CertificateValidity(date, date)); certInfo.set(X509CertInfo.VALIDITY, new CertificateValidity(date, date));

View file

@ -57,7 +57,7 @@ public class BigCRL {
X509CertInfo signerCertInfo = (X509CertInfo)signerCertImpl.get( X509CertInfo signerCertInfo = (X509CertInfo)signerCertImpl.get(
X509CertImpl.NAME + "." + X509CertImpl.INFO); X509CertImpl.NAME + "." + X509CertImpl.INFO);
X500Name owner = (X500Name)signerCertInfo.get(X509CertInfo.SUBJECT + "." X500Name owner = (X500Name)signerCertInfo.get(X509CertInfo.SUBJECT + "."
+ CertificateSubjectName.DN_NAME); + X509CertInfo.DN_NAME);
Date date = new Date(); Date date = new Date();
PrivateKey privateKey = (PrivateKey) PrivateKey privateKey = (PrivateKey)

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -54,8 +54,8 @@ public class GenKeyStore {
certInfo.set(X509CertInfo.VERSION, new CertificateVersion(CertificateVersion.V1)); certInfo.set(X509CertInfo.VERSION, new CertificateVersion(CertificateVersion.V1));
certInfo.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(1)); certInfo.set(X509CertInfo.SERIAL_NUMBER, new CertificateSerialNumber(1));
certInfo.set(X509CertInfo.ALGORITHM_ID, new CertificateAlgorithmId(algID)); certInfo.set(X509CertInfo.ALGORITHM_ID, new CertificateAlgorithmId(algID));
certInfo.set(X509CertInfo.SUBJECT, new CertificateSubjectName(name)); certInfo.set(X509CertInfo.SUBJECT, name);
certInfo.set(X509CertInfo.ISSUER, new CertificateIssuerName(name)); certInfo.set(X509CertInfo.ISSUER, name);
certInfo.set(X509CertInfo.KEY, new CertificateX509Key(publicKey)); certInfo.set(X509CertInfo.KEY, new CertificateX509Key(publicKey));
certInfo.set(X509CertInfo.VALIDITY, new CertificateValidity(date, date)); certInfo.set(X509CertInfo.VALIDITY, new CertificateValidity(date, date));