Skip to content

Commit df061f5

Browse files
committed
allowed for null policy OID
1 parent 196bbb0 commit df061f5

File tree

2 files changed

+69
-11
lines changed

2 files changed

+69
-11
lines changed

crypto/src/tsp/TimeStampTokenGenerator.cs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.IO;
44
using System.Text;
55
using Org.BouncyCastle.Asn1;
6+
using Org.BouncyCastle.Asn1.Cmp;
67
using Org.BouncyCastle.Asn1.Cms;
78
using Org.BouncyCastle.Asn1.Ess;
89
using Org.BouncyCastle.Asn1.Oiw;
@@ -31,7 +32,7 @@ public class TimeStampTokenGenerator
3132
private int accuracyMicros = -1;
3233
private bool ordering = false;
3334
private GeneralName tsa = null;
34-
private String tsaPolicyOID;
35+
private DerObjectIdentifier tsaPolicyOID;
3536

3637
private IX509Store x509Certs;
3738
private IX509Store x509Crls;
@@ -68,7 +69,7 @@ public TimeStampTokenGenerator(
6869

6970
this.signerInfoGenerator = signerInfoGen;
7071
this.digestCalculator = digestCalculator;
71-
this.tsaPolicyOID = tsaPolicy.Id;
72+
this.tsaPolicyOID = tsaPolicy;
7273

7374
if (signerInfoGenerator.certificate == null)
7475
{
@@ -138,12 +139,8 @@ public TimeStampTokenGenerator(
138139
Asn1.Cms.AttributeTable unsignedAttr) : this(
139140
makeInfoGenerator(key, cert, digestOID, signedAttr, unsignedAttr),
140141
Asn1DigestFactory.Get(OiwObjectIdentifiers.IdSha1),
141-
tsaPolicyOID != null?new DerObjectIdentifier(tsaPolicyOID):null, false)
142+
tsaPolicyOID != null ? new DerObjectIdentifier(tsaPolicyOID):null, false)
142143
{
143-
144-
this.tsaPolicyOID = tsaPolicyOID;
145-
146-
147144
}
148145

149146

@@ -261,7 +258,7 @@ public TimeStampToken Generate(
261258
}
262259

263260

264-
public TimeStampToken Generate(
261+
public TimeStampToken Generate(
265262
TimeStampRequest request,
266263
BigInteger serialNumber,
267264
DateTime genTime, X509Extensions additionalExtensions)
@@ -306,13 +303,17 @@ public TimeStampToken Generate(
306303
{
307304
nonce = new DerInteger(request.Nonce);
308305
}
309-
310-
DerObjectIdentifier tsaPolicy = new DerObjectIdentifier(tsaPolicyOID);
306+
307+
DerObjectIdentifier tsaPolicy = tsaPolicyOID;
311308
if (request.ReqPolicy != null)
312309
{
313310
tsaPolicy = new DerObjectIdentifier(request.ReqPolicy);
314311
}
315312

313+
if (tsaPolicy == null)
314+
{
315+
throw new TspValidationException("request contains no policy", PkiFailureInfo.UnacceptedPolicy);
316+
}
316317

317318
X509Extensions respExtensions = request.Extensions;
318319
if (additionalExtensions != null)
@@ -344,7 +345,8 @@ public TimeStampToken Generate(
344345
if (resolution != Resolution.R_SECONDS)
345346
{
346347
generalizedTime = new DerGeneralizedTime(createGeneralizedTime(genTime));
347-
} else
348+
}
349+
else
348350
{
349351
generalizedTime = new DerGeneralizedTime(genTime);
350352
}

crypto/test/src/tsp/test/TSPTest.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,62 @@ public void TestBadPolicy()
297297
}
298298
}
299299

300+
[Test]
301+
public void TestNullPolicy()
302+
{
303+
// null in request and token generator - should fail
304+
TimeStampTokenGenerator tsTokenGen = new TimeStampTokenGenerator(
305+
privateKey, cert, TspAlgorithms.Sha1, null);
306+
307+
tsTokenGen.SetCertificates(certs);
308+
309+
TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator();
310+
311+
TimeStampRequest request = reqGen.Generate(TspAlgorithms.Sha1, new byte[20]);
312+
313+
TimeStampResponseGenerator tsRespGen = new TimeStampResponseGenerator(tsTokenGen, TspAlgorithms.Allowed, null);
314+
315+
TimeStampResponse tsResp = tsRespGen.Generate(request, BigInteger.ValueOf(23), DateTime.UtcNow);
316+
317+
tsResp = new TimeStampResponse(tsResp.GetEncoded());
318+
319+
TimeStampToken tsToken = tsResp.TimeStampToken;
320+
321+
if (tsToken != null)
322+
{
323+
Assert.Fail("badPolicy - token not null.");
324+
}
325+
326+
PkiFailureInfo failInfo = tsResp.GetFailInfo();
327+
328+
if (failInfo == null)
329+
{
330+
Assert.Fail("badPolicy - failInfo set to null.");
331+
}
332+
333+
if (failInfo.IntValue != PkiFailureInfo.UnacceptedPolicy)
334+
{
335+
Assert.Fail("badPolicy - wrong failure info returned.");
336+
}
337+
338+
// request specifies policy, token generator doesn't - should work
339+
reqGen = new TimeStampRequestGenerator();
340+
341+
reqGen.SetReqPolicy("1.1");
342+
343+
request = reqGen.Generate(TspAlgorithms.Sha1, new byte[20]);
344+
345+
tsRespGen = new TimeStampResponseGenerator(tsTokenGen, TspAlgorithms.Allowed, null);
346+
347+
tsResp = tsRespGen.Generate(request, BigInteger.ValueOf(24), DateTime.UtcNow);
348+
349+
tsResp = new TimeStampResponse(tsResp.GetEncoded());
350+
351+
tsToken = tsResp.TimeStampToken;
352+
353+
Assert.AreEqual(tsToken.TimeStampInfo.Policy, "1.1"); // policy should be picked up off request
354+
}
355+
300356
[Test]
301357
public void TestCertReq()
302358
{

0 commit comments

Comments
 (0)