001package org.apache.commons.ssl.org.bouncycastle.asn1.x509; 002 003import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Encodable; 004import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1EncodableVector; 005import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1GeneralizedTime; 006import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1Integer; 007import org.apache.commons.ssl.org.bouncycastle.asn1.ASN1ObjectIdentifier; 008import org.apache.commons.ssl.org.bouncycastle.asn1.DERBitString; 009import org.apache.commons.ssl.org.bouncycastle.asn1.DERSequence; 010import org.apache.commons.ssl.org.bouncycastle.asn1.DERSet; 011 012/** 013 * Generator for Version 2 AttributeCertificateInfo 014 * <pre> 015 * AttributeCertificateInfo ::= SEQUENCE { 016 * version AttCertVersion -- version is v2, 017 * holder Holder, 018 * issuer AttCertIssuer, 019 * signature AlgorithmIdentifier, 020 * serialNumber CertificateSerialNumber, 021 * attrCertValidityPeriod AttCertValidityPeriod, 022 * attributes SEQUENCE OF Attribute, 023 * issuerUniqueID UniqueIdentifier OPTIONAL, 024 * extensions Extensions OPTIONAL 025 * } 026 * </pre> 027 * 028 */ 029public class V2AttributeCertificateInfoGenerator 030{ 031 private ASN1Integer version; 032 private Holder holder; 033 private AttCertIssuer issuer; 034 private AlgorithmIdentifier signature; 035 private ASN1Integer serialNumber; 036 private ASN1EncodableVector attributes; 037 private DERBitString issuerUniqueID; 038 private Extensions extensions; 039 040 // Note: validity period start/end dates stored directly 041 //private AttCertValidityPeriod attrCertValidityPeriod; 042 private ASN1GeneralizedTime startDate, endDate; 043 044 public V2AttributeCertificateInfoGenerator() 045 { 046 this.version = new ASN1Integer(1); 047 attributes = new ASN1EncodableVector(); 048 } 049 050 public void setHolder(Holder holder) 051 { 052 this.holder = holder; 053 } 054 055 public void addAttribute(String oid, ASN1Encodable value) 056 { 057 attributes.add(new Attribute(new ASN1ObjectIdentifier(oid), new DERSet(value))); 058 } 059 060 /** 061 * @param attribute 062 */ 063 public void addAttribute(Attribute attribute) 064 { 065 attributes.add(attribute); 066 } 067 068 public void setSerialNumber( 069 ASN1Integer serialNumber) 070 { 071 this.serialNumber = serialNumber; 072 } 073 074 public void setSignature( 075 AlgorithmIdentifier signature) 076 { 077 this.signature = signature; 078 } 079 080 public void setIssuer( 081 AttCertIssuer issuer) 082 { 083 this.issuer = issuer; 084 } 085 086 public void setStartDate( 087 ASN1GeneralizedTime startDate) 088 { 089 this.startDate = startDate; 090 } 091 092 public void setEndDate( 093 ASN1GeneralizedTime endDate) 094 { 095 this.endDate = endDate; 096 } 097 098 public void setIssuerUniqueID( 099 DERBitString issuerUniqueID) 100 { 101 this.issuerUniqueID = issuerUniqueID; 102 } 103 104 /** 105 * @deprecated use method taking Extensions 106 * @param extensions 107 */ 108 public void setExtensions( 109 X509Extensions extensions) 110 { 111 this.extensions = Extensions.getInstance(extensions.toASN1Primitive()); 112 } 113 114 public void setExtensions( 115 Extensions extensions) 116 { 117 this.extensions = extensions; 118 } 119 120 public AttributeCertificateInfo generateAttributeCertificateInfo() 121 { 122 if ((serialNumber == null) || (signature == null) 123 || (issuer == null) || (startDate == null) || (endDate == null) 124 || (holder == null) || (attributes == null)) 125 { 126 throw new IllegalStateException("not all mandatory fields set in V2 AttributeCertificateInfo generator"); 127 } 128 129 ASN1EncodableVector v = new ASN1EncodableVector(); 130 131 v.add(version); 132 v.add(holder); 133 v.add(issuer); 134 v.add(signature); 135 v.add(serialNumber); 136 137 // 138 // before and after dates => AttCertValidityPeriod 139 // 140 AttCertValidityPeriod validity = new AttCertValidityPeriod(startDate, endDate); 141 v.add(validity); 142 143 // Attributes 144 v.add(new DERSequence(attributes)); 145 146 if (issuerUniqueID != null) 147 { 148 v.add(issuerUniqueID); 149 } 150 151 if (extensions != null) 152 { 153 v.add(extensions); 154 } 155 156 return AttributeCertificateInfo.getInstance(new DERSequence(v)); 157 } 158}