KeyFactory kFact = KeyFactory.getInstance("RSA", "BC");
privKey = kFact.generatePrivate(privKeySpec);
pubKey = kFact.generatePublic(pubKeySpec);
X509V2AttributeCertificateGenerator gen = new X509V2AttributeCertificateGenerator();
gen.addAttribute(attrs[0]);
gen.setHolder(aCert.getHolder());
gen.setIssuer(aCert.getIssuer());
gen.setNotBefore(new Date(System.currentTimeMillis() - 50000));
gen.setNotAfter(new Date(System.currentTimeMillis() + 50000));
gen.setSerialNumber(aCert.getSerialNumber());
gen.setSignatureAlgorithm("SHA1WithRSAEncryption");
aCert = gen.generateCertificate(privKey, "BC");
aCert.checkValidity();
aCert.verify(pubKey, "BC");
// as the issuer is the same this should still work (even though it is not
// technically correct
certs = store.getCertificates(aCert.getIssuer());
if (certs.size() != 1 || !certs.contains(sCert))
{
fail("sCert not found by issuer");
}
attrs = aCert.getAttributes("1.3.6.1.4.1.6760.8.1.1");
if (attrs == null || attrs.length != 1)
{
fail("attribute not found");
}
//
// reencode test
//
aCert = new X509V2AttributeCertificate(aCert.getEncoded());
aCert.verify(pubKey, "BC");
AttributeCertificateIssuer issuer = aCert.getIssuer();
Principal[] principals = issuer.getPrincipals();
//
// test holder
//
AttributeCertificateHolder holder = aCert.getHolder();
if (holder.getEntityNames() == null)
{
fail("entity names not set");
}
if (holder.getSerialNumber() != null)
{
fail("holder serial number set when none expected");
}
if (holder.getIssuer() != null)
{
fail("holder issuer set when none expected");
}
principals = holder.getEntityNames();
if (!principals[0].toString().equals("C=US, O=vt, OU=Class 2, OU=Virginia Tech User, CN=Markus Lorch (mlorch), EMAILADDRESS=mlorch@vt.edu"))
{
fail("principal[0] for entity names don't match");
}
//
// extension test
//
if (aCert.hasUnsupportedCriticalExtension())
{
fail("unsupported extensions found with no extensions");
}
gen.addExtension("1.1", true, new DEROctetString(new byte[10]));
gen.addExtension("2.2", false, new DEROctetString(new byte[20]));
aCert = gen.generateCertificate(privKey, "BC");
Set exts = aCert.getCriticalExtensionOIDs();
if (exts.size() != 1 || !exts.contains("1.1"))
{