Skip to content

Commit a1ee07b

Browse files
committed
Add an1.x509.Validity
1 parent 5eff71f commit a1ee07b

File tree

7 files changed

+157
-99
lines changed

7 files changed

+157
-99
lines changed

core/src/main/java/org/bouncycastle/asn1/x509/Certificate.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ public X500Name getIssuer()
9494
return tbsCert.getIssuer();
9595
}
9696

97+
public Validity getValidity()
98+
{
99+
return tbsCert.getValidity();
100+
}
101+
97102
public Time getStartDate()
98103
{
99104
return tbsCert.getStartDate();

core/src/main/java/org/bouncycastle/asn1/x509/TBSCertificate.java

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class TBSCertificate
4141
ASN1Integer serialNumber;
4242
AlgorithmIdentifier signature;
4343
X500Name issuer;
44-
Time startDate, endDate;
44+
Validity validity;
4545
X500Name subject;
4646
SubjectPublicKeyInfo subjectPublicKeyInfo;
4747
ASN1BitString issuerUniqueId;
@@ -110,20 +110,8 @@ else if (!version.hasValue(2))
110110

111111
signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqStart + 2));
112112
issuer = X500Name.getInstance(seq.getObjectAt(seqStart + 3));
113-
114-
//
115-
// before and after dates
116-
//
117-
ASN1Sequence dates = (ASN1Sequence)seq.getObjectAt(seqStart + 4);
118-
119-
startDate = Time.getInstance(dates.getObjectAt(0));
120-
endDate = Time.getInstance(dates.getObjectAt(1));
121-
113+
validity = Validity.getInstance(seq.getObjectAt(seqStart + 4));
122114
subject = X500Name.getInstance(seq.getObjectAt(seqStart + 5));
123-
124-
//
125-
// public key info.
126-
//
127115
subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(seqStart + 6));
128116

129117
int extras = seq.size() - (seqStart + 6) - 1;
@@ -183,14 +171,19 @@ public X500Name getIssuer()
183171
return issuer;
184172
}
185173

174+
public Validity getValidity()
175+
{
176+
return validity;
177+
}
178+
186179
public Time getStartDate()
187180
{
188-
return startDate;
181+
return validity.getNotBefore();
189182
}
190183

191184
public Time getEndDate()
192185
{
193-
return endDate;
186+
return validity.getNotAfter();
194187
}
195188

196189
public X500Name getSubject()
@@ -243,21 +236,8 @@ public ASN1Primitive toASN1Primitive()
243236
v.add(serialNumber);
244237
v.add(signature);
245238
v.add(issuer);
246-
247-
//
248-
// before and after dates
249-
//
250-
v.add(new DERSequence(startDate, endDate));
251-
252-
if (subject != null)
253-
{
254-
v.add(subject);
255-
}
256-
else
257-
{
258-
v.add(new DERSequence());
259-
}
260-
239+
v.add(validity);
240+
v.add(subject);
261241
v.add(subjectPublicKeyInfo);
262242

263243
// Note: implicit tag

core/src/main/java/org/bouncycastle/asn1/x509/TBSCertificateStructure.java

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class TBSCertificateStructure
4040
ASN1Integer serialNumber;
4141
AlgorithmIdentifier signature;
4242
X500Name issuer;
43-
Time startDate, endDate;
43+
Validity validity;
4444
X500Name subject;
4545
SubjectPublicKeyInfo subjectPublicKeyInfo;
4646
ASN1BitString issuerUniqueId;
@@ -93,20 +93,8 @@ public TBSCertificateStructure(
9393

9494
signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqStart + 2));
9595
issuer = X500Name.getInstance(seq.getObjectAt(seqStart + 3));
96-
97-
//
98-
// before and after dates
99-
//
100-
ASN1Sequence dates = (ASN1Sequence)seq.getObjectAt(seqStart + 4);
101-
102-
startDate = Time.getInstance(dates.getObjectAt(0));
103-
endDate = Time.getInstance(dates.getObjectAt(1));
104-
96+
validity = Validity.getInstance(seq.getObjectAt(seqStart + 4));
10597
subject = X500Name.getInstance(seq.getObjectAt(seqStart + 5));
106-
107-
//
108-
// public key info.
109-
//
11098
subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(seqStart + 6));
11199

112100
for (int extras = seq.size() - (seqStart + 6) - 1; extras > 0; extras--)
@@ -152,14 +140,19 @@ public X500Name getIssuer()
152140
return issuer;
153141
}
154142

143+
public Validity getValidity()
144+
{
145+
return validity;
146+
}
147+
155148
public Time getStartDate()
156149
{
157-
return startDate;
150+
return validity.getNotBefore();
158151
}
159152

160153
public Time getEndDate()
161154
{
162-
return endDate;
155+
return validity.getNotAfter();
163156
}
164157

165158
public X500Name getSubject()

core/src/main/java/org/bouncycastle/asn1/x509/V1TBSCertificateGenerator.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class V1TBSCertificateGenerator
2929
ASN1Integer serialNumber;
3030
AlgorithmIdentifier signature;
3131
X500Name issuer;
32+
Validity validity;
3233
Time startDate, endDate;
3334
X500Name subject;
3435
SubjectPublicKeyInfo subjectPublicKeyInfo;
@@ -64,28 +65,33 @@ public void setIssuer(
6465
this.issuer = issuer;
6566
}
6667

67-
public void setStartDate(
68-
Time startDate)
68+
public void setValidity(Validity validity)
6969
{
70+
this.validity = validity;
71+
this.startDate = null;
72+
this.endDate = null;
73+
}
74+
75+
public void setStartDate(Time startDate)
76+
{
77+
this.validity = null;
7078
this.startDate = startDate;
7179
}
7280

73-
public void setStartDate(
74-
ASN1UTCTime startDate)
81+
public void setStartDate(ASN1UTCTime startDate)
7582
{
76-
this.startDate = new Time(startDate);
83+
setStartDate(new Time(startDate));
7784
}
7885

79-
public void setEndDate(
80-
Time endDate)
86+
public void setEndDate(Time endDate)
8187
{
88+
this.validity = null;
8289
this.endDate = endDate;
8390
}
8491

85-
public void setEndDate(
86-
ASN1UTCTime endDate)
92+
public void setEndDate(ASN1UTCTime endDate)
8793
{
88-
this.endDate = new Time(endDate);
94+
setEndDate(new Time(endDate));
8995
}
9096

9197
/**
@@ -111,9 +117,9 @@ public void setSubjectPublicKeyInfo(
111117

112118
public TBSCertificate generateTBSCertificate()
113119
{
114-
if ((serialNumber == null) || (signature == null)
115-
|| (issuer == null) || (startDate == null) || (endDate == null)
116-
|| (subject == null) || (subjectPublicKeyInfo == null))
120+
if ((serialNumber == null) || (signature == null) || (issuer == null) ||
121+
(validity == null && (startDate == null || endDate == null)) ||
122+
(subject == null) || (subjectPublicKeyInfo == null))
117123
{
118124
throw new IllegalStateException("not all mandatory fields set in V1 TBScertificate generator");
119125
}
@@ -124,14 +130,8 @@ public TBSCertificate generateTBSCertificate()
124130
seq.add(serialNumber);
125131
seq.add(signature);
126132
seq.add(issuer);
127-
128-
//
129-
// before and after dates
130-
//
131-
seq.add(new DERSequence(startDate, endDate));
132-
133+
seq.add(validity != null ? validity : new Validity(startDate, endDate));
133134
seq.add(subject);
134-
135135
seq.add(subjectPublicKeyInfo);
136136

137137
return TBSCertificate.getInstance(new DERSequence(seq));

core/src/main/java/org/bouncycastle/asn1/x509/V3TBSCertificateGenerator.java

Lines changed: 25 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class V3TBSCertificateGenerator
3434
ASN1Integer serialNumber;
3535
AlgorithmIdentifier signature;
3636
X500Name issuer;
37+
Validity validity;
3738
Time startDate, endDate;
3839
X500Name subject;
3940
SubjectPublicKeyInfo subjectPublicKeyInfo;
@@ -73,31 +74,36 @@ public void setIssuer(
7374
{
7475
this.issuer = issuer;
7576
}
76-
77-
public void setStartDate(
78-
ASN1UTCTime startDate)
77+
78+
public void setValidity(Validity validity)
7979
{
80-
this.startDate = new Time(startDate);
80+
this.validity = validity;
81+
this.startDate = null;
82+
this.endDate = null;
8183
}
8284

83-
public void setStartDate(
84-
Time startDate)
85+
public void setStartDate(Time startDate)
8586
{
87+
this.validity = null;
8688
this.startDate = startDate;
8789
}
8890

89-
public void setEndDate(
90-
ASN1UTCTime endDate)
91+
public void setStartDate(ASN1UTCTime startDate)
9192
{
92-
this.endDate = new Time(endDate);
93+
setStartDate(new Time(startDate));
9394
}
9495

95-
public void setEndDate(
96-
Time endDate)
96+
public void setEndDate(Time endDate)
9797
{
98+
this.validity = null;
9899
this.endDate = endDate;
99100
}
100101

102+
public void setEndDate(ASN1UTCTime endDate)
103+
{
104+
setEndDate(new Time(endDate));
105+
}
106+
101107
/**
102108
* @deprecated use X500Name method
103109
*/
@@ -162,9 +168,9 @@ public ASN1Sequence generatePreTBSCertificate()
162168
{
163169
throw new IllegalStateException("signature field should not be set in PreTBSCertificate");
164170
}
165-
if ((serialNumber == null)
166-
|| (issuer == null) || (startDate == null) || (endDate == null)
167-
|| (subject == null && !altNamePresentAndCritical) || (subjectPublicKeyInfo == null))
171+
if ((serialNumber == null) || (issuer == null) ||
172+
(validity == null && (startDate == null || endDate == null)) ||
173+
(subject == null && !altNamePresentAndCritical) || (subjectPublicKeyInfo == null))
168174
{
169175
throw new IllegalStateException("not all mandatory fields set in V3 TBScertificate generator");
170176
}
@@ -185,21 +191,8 @@ private ASN1Sequence generateTBSStructure()
185191
}
186192

187193
v.add(issuer);
188-
189-
//
190-
// before and after dates
191-
//
192-
v.add(new DERSequence(startDate, endDate));
193-
194-
if (subject != null)
195-
{
196-
v.add(subject);
197-
}
198-
else
199-
{
200-
v.add(new DERSequence());
201-
}
202-
194+
v.add(validity != null ? validity : new Validity(startDate, endDate));
195+
v.add(subject != null ? subject : X500Name.getInstance(new DERSequence()));
203196
v.add(subjectPublicKeyInfo);
204197

205198
if (issuerUniqueID != null)
@@ -222,9 +215,9 @@ private ASN1Sequence generateTBSStructure()
222215

223216
public TBSCertificate generateTBSCertificate()
224217
{
225-
if ((serialNumber == null) || (signature == null)
226-
|| (issuer == null) || (startDate == null) || (endDate == null)
227-
|| (subject == null && !altNamePresentAndCritical) || (subjectPublicKeyInfo == null))
218+
if ((serialNumber == null) || (signature == null) || (issuer == null) ||
219+
(validity == null && (startDate == null || endDate == null)) ||
220+
(subject == null && !altNamePresentAndCritical) || (subjectPublicKeyInfo == null))
228221
{
229222
throw new IllegalStateException("not all mandatory fields set in V3 TBScertificate generator");
230223
}

0 commit comments

Comments
 (0)