/** * generate an X509 certificate, based on the current issuer and subject, using the passed in * provider for the signing and the supplied source of randomness, if required. */ public X509AttributeCertificate generate(PrivateKey key, String provider, SecureRandom random) throws CertificateEncodingException, IllegalStateException, NoSuchProviderException, NoSuchAlgorithmException, SignatureException, InvalidKeyException { if (!extGenerator.isEmpty()) { acInfoGen.setExtensions(extGenerator.generate()); } AttributeCertificateInfo acInfo = acInfoGen.generateAttributeCertificateInfo(); ASN1EncodableVector v = new ASN1EncodableVector(); v.add(acInfo); v.add(sigAlgId); try { v.add( new DERBitString( X509Util.calculateSignature( sigOID, signatureAlgorithm, provider, key, random, acInfo))); return new X509V2AttributeCertificate(new AttributeCertificate(new DERSequence(v))); } catch (IOException e) { throw new ExtCertificateEncodingException("constructed invalid certificate", e); } }
/** reset the generator */ public void reset() { acInfoGen = new V2AttributeCertificateInfoGenerator(); extGenerator.reset(); }
/** * add a given extension field for the standard extensions tag The value parameter becomes the * contents of the octet string associated with the extension. */ public void addExtension(String oid, boolean critical, byte[] value) { extGenerator.addExtension(new DERObjectIdentifier(oid), critical, value); }
/** * add a given extension field for the standard extensions tag * * @throws IOException */ public void addExtension(String oid, boolean critical, ASN1Encodable value) throws IOException { extGenerator.addExtension(new DERObjectIdentifier(oid), critical, value); }