package org.bouncycastle.asn1.x509;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.DERInteger;
import org.bouncycastle.asn1.DERObjectIdentifier;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERGeneralizedTime;
import org.bouncycastle.asn1.DERBitString;
import org.bouncycastle.asn1.DERSet;
/**
* Generator for Version 2 AttributeCertificateInfo
* <pre>
* AttributeCertificateInfo ::= SEQUENCE {
* version AttCertVersion -- version is v2,
* holder Holder,
* issuer AttCertIssuer,
* signature AlgorithmIdentifier,
* serialNumber CertificateSerialNumber,
* attrCertValidityPeriod AttCertValidityPeriod,
* attributes SEQUENCE OF Attribute,
* issuerUniqueID UniqueIdentifier OPTIONAL,
* extensions Extensions OPTIONAL
* }
* </pre>
*
*/
public class V2AttributeCertificateInfoGenerator
{
private DERInteger version;
private Holder holder;
private AttCertIssuer issuer;
private AlgorithmIdentifier signature;
private DERInteger serialNumber;
private AttCertValidityPeriod attrCertValidityPeriod;
private ASN1EncodableVector attributes;
private DERBitString issuerUniqueID;
private X509Extensions extensions;
private DERGeneralizedTime startDate, endDate;
public V2AttributeCertificateInfoGenerator()
{
this.version = new DERInteger(1);
attributes = new ASN1EncodableVector();
}
public void setHolder(Holder holder)
{
this.holder = holder;
}
public void addAttribute(String oid, ASN1Encodable value)
{
attributes.add(new Attribute(new DERObjectIdentifier(oid), new DERSet(value)));
}
/**
* @param attribute
*/
public void addAttribute(Attribute attribute)
{
attributes.add(attribute);
}
public void setSerialNumber(
DERInteger serialNumber)
{
this.serialNumber = serialNumber;
}
public void setSignature(
AlgorithmIdentifier signature)
{
this.signature = signature;
}
public void setIssuer(
AttCertIssuer issuer)
{
this.issuer = issuer;
}
public void setStartDate(
DERGeneralizedTime startDate)
{
this.startDate = startDate;
}
public void setEndDate(
DERGeneralizedTime endDate)
{
this.endDate = endDate;
}
public void setIssuerUniqueID(
DERBitString issuerUniqueID)
{
this.issuerUniqueID = issuerUniqueID;
}
public void setExtensions(
X509Extensions extensions)
{
this.extensions = extensions;
}
public AttributeCertificateInfo generateAttributeCertificateInfo()
{
if ((serialNumber == null) || (signature == null)
|| (issuer == null) || (startDate == null) || (endDate == null)
|| (holder == null) || (attributes == null))
{
throw new IllegalStateException("not all mandatory fields set in V2 AttributeCertificateInfo generator");
}
ASN1EncodableVector v = new ASN1EncodableVector();
v.add(version);
v.add(holder);
v.add(issuer);
v.add(signature);
v.add(serialNumber);
//
// before and after dates => AttCertValidityPeriod
//
AttCertValidityPeriod validity = new AttCertValidityPeriod(startDate, endDate);
v.add(validity);
// Attributes
v.add(new DERSequence(attributes));
if (issuerUniqueID != null)
{
v.add(issuerUniqueID);
}
if (extensions != null)
{
v.add(extensions);
}
return new AttributeCertificateInfo(new DERSequence(v));
}
}