1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
package org.bouncycastle.asn1.x509;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1GeneralizedTime;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.DERBitString;
import org.bouncycastle.asn1.DERSequence;
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 ASN1Integer version;
private Holder holder;
private AttCertIssuer issuer;
private AlgorithmIdentifier signature;
private ASN1Integer serialNumber;
private ASN1EncodableVector attributes;
private DERBitString issuerUniqueID;
private Extensions extensions;
// Note: validity period start/end dates stored directly
//private AttCertValidityPeriod attrCertValidityPeriod;
private ASN1GeneralizedTime startDate, endDate;
public V2AttributeCertificateInfoGenerator()
{
this.version = new ASN1Integer(1);
attributes = new ASN1EncodableVector();
}
public void setHolder(Holder holder)
{
this.holder = holder;
}
public void addAttribute(String oid, ASN1Encodable value)
{
attributes.add(new Attribute(new ASN1ObjectIdentifier(oid), new DERSet(value)));
}
/**
* @param attribute
*/
public void addAttribute(Attribute attribute)
{
attributes.add(attribute);
}
public void setSerialNumber(
ASN1Integer serialNumber)
{
this.serialNumber = serialNumber;
}
public void setSignature(
AlgorithmIdentifier signature)
{
this.signature = signature;
}
public void setIssuer(
AttCertIssuer issuer)
{
this.issuer = issuer;
}
public void setStartDate(
ASN1GeneralizedTime startDate)
{
this.startDate = startDate;
}
public void setEndDate(
ASN1GeneralizedTime endDate)
{
this.endDate = endDate;
}
public void setIssuerUniqueID(
DERBitString issuerUniqueID)
{
this.issuerUniqueID = issuerUniqueID;
}
/**
* @deprecated use method taking Extensions
* @param extensions
*/
public void setExtensions(
X509Extensions extensions)
{
this.extensions = Extensions.getInstance(extensions.toASN1Primitive());
}
public void setExtensions(
Extensions 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 AttributeCertificateInfo.getInstance(new DERSequence(v));
}
}
|