Skip to content

Commit 41c26ef

Browse files
committed
Updated TableGen2 to use IdAASigningCertificateV2 oid
1 parent 3661f95 commit 41c26ef

File tree

2 files changed

+97
-3
lines changed

2 files changed

+97
-3
lines changed

crypto/src/tsp/TimeStampTokenGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,9 +372,9 @@ public TableGen2(SignerInfoGenerator infoGen, EssCertIDv2 essCertID)
372372
public Asn1.Cms.AttributeTable GetAttributes(IDictionary parameters)
373373
{
374374
Asn1.Cms.AttributeTable tab = infoGen.signedGen.GetAttributes(parameters);
375-
if (tab[PkcsObjectIdentifiers.IdAASigningCertificate] == null)
375+
if (tab[PkcsObjectIdentifiers.IdAASigningCertificateV2] == null)
376376
{
377-
return tab.Add(PkcsObjectIdentifiers.IdAASigningCertificate, new SigningCertificateV2(essCertID));
377+
return tab.Add(PkcsObjectIdentifiers.IdAASigningCertificateV2, new SigningCertificateV2(essCertID));
378378
}
379379
return tab;
380380
}

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

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,16 @@
22
using System.Collections;
33

44
using NUnit.Framework;
5-
5+
using Org.BouncyCastle.Asn1;
66
using Org.BouncyCastle.Asn1.Cmp;
77
using Org.BouncyCastle.Asn1.Cms;
8+
using Org.BouncyCastle.Asn1.Ess;
9+
using Org.BouncyCastle.Asn1.Nist;
10+
using Org.BouncyCastle.Asn1.Oiw;
811
using Org.BouncyCastle.Asn1.Pkcs;
12+
using Org.BouncyCastle.Cms;
913
using Org.BouncyCastle.Crypto;
14+
using Org.BouncyCastle.Crypto.Operators;
1015
using Org.BouncyCastle.Crypto.Parameters;
1116
using Org.BouncyCastle.Math;
1217
using Org.BouncyCastle.Utilities;
@@ -21,17 +26,22 @@ public class TspTest
2126
private static AsymmetricKeyParameter privateKey;
2227
private static X509Certificate cert;
2328
private static IX509Store certs;
29+
30+
2431

2532
static TspTest()
2633
{
2734
string signDN = "O=Bouncy Castle, C=AU";
2835
AsymmetricCipherKeyPair signKP = TspTestUtil.MakeKeyPair();
2936
X509Certificate signCert = TspTestUtil.MakeCACertificate(signKP, signDN, signKP, signDN);
37+
3038

3139
string origDN = "CN=Eric H. Echidna, [email protected], O=Bouncy Castle, C=AU";
3240
AsymmetricCipherKeyPair origKP = TspTestUtil.MakeKeyPair();
3341
privateKey = origKP.Private;
3442

43+
44+
3545
cert = TspTestUtil.MakeCertificate(origKP, origDN, signKP, signDN);
3646

3747
IList certList = new ArrayList();
@@ -544,5 +554,89 @@ public void TestNoNonce()
544554

545555
Assert.AreEqual(0, certificates.Count);
546556
}
557+
558+
[Test]
559+
public void TestBasicSha256()
560+
{
561+
562+
var sInfoGenerator = makeInfoGenerator(privateKey, cert, TspAlgorithms.Sha256, null, null);
563+
TimeStampTokenGenerator tsTokenGen = new TimeStampTokenGenerator(
564+
sInfoGenerator,
565+
Asn1DigestFactory.Get(NistObjectIdentifiers.IdSha256),new DerObjectIdentifier("1.2"),true);
566+
567+
568+
tsTokenGen.SetCertificates(certs);
569+
570+
TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator();
571+
TimeStampRequest request = reqGen.Generate(TspAlgorithms.Sha256, new byte[32]);
572+
573+
Assert.IsFalse(request.CertReq);
574+
575+
TimeStampResponseGenerator tsRespGen = new TimeStampResponseGenerator(tsTokenGen, TspAlgorithms.Allowed);
576+
577+
TimeStampResponse tsResp = tsRespGen.Generate(request, BigInteger.ValueOf(23), DateTime.UtcNow);
578+
579+
tsResp = new TimeStampResponse(tsResp.GetEncoded());
580+
581+
TimeStampToken tsToken = tsResp.TimeStampToken;
582+
583+
tsToken.Validate(cert);
584+
585+
TimeStampTokenInfo tstInfo = tsToken.TimeStampInfo;
586+
587+
AttributeTable table = tsToken.SignedAttributes;
588+
589+
var r = table.Get(PkcsObjectIdentifiers.IdAASigningCertificateV2);
590+
Assert.NotNull(r);
591+
Assert.AreEqual(PkcsObjectIdentifiers.IdAASigningCertificateV2, r.AttrType);
592+
var set = r.AttrValues;
593+
SigningCertificateV2 sCert = SigningCertificateV2.GetInstance(set[0]);
594+
595+
var issSerNum = sCert.GetCerts()[0].IssuerSerial;
596+
597+
Assert.AreEqual(cert.SerialNumber, issSerNum.Serial.Value);
598+
599+
}
600+
601+
internal static SignerInfoGenerator makeInfoGenerator(
602+
AsymmetricKeyParameter key,
603+
X509Certificate cert,
604+
string digestOID,
605+
606+
Asn1.Cms.AttributeTable signedAttr,
607+
Asn1.Cms.AttributeTable unsignedAttr)
608+
{
609+
610+
611+
TspUtil.ValidateCertificate(cert);
612+
613+
//
614+
// Add the ESSCertID attribute
615+
//
616+
IDictionary signedAttrs;
617+
if (signedAttr != null)
618+
{
619+
signedAttrs = signedAttr.ToDictionary();
620+
}
621+
else
622+
{
623+
signedAttrs = Platform.CreateHashtable();
624+
}
625+
626+
627+
628+
string digestName = CmsSignedHelper.Instance.GetDigestAlgName(digestOID);
629+
string signatureName = digestName + "with" + CmsSignedHelper.Instance.GetEncryptionAlgName(CmsSignedHelper.Instance.GetEncOid(key, digestOID));
630+
631+
Asn1SignatureFactory sigfact = new Asn1SignatureFactory(signatureName, key);
632+
return new SignerInfoGeneratorBuilder()
633+
.WithSignedAttributeGenerator(
634+
new DefaultSignedAttributeTableGenerator(
635+
new Asn1.Cms.AttributeTable(signedAttrs)))
636+
.WithUnsignedAttributeGenerator(
637+
new SimpleAttributeTableGenerator(unsignedAttr))
638+
.Build(sigfact, cert);
639+
}
640+
547641
}
548642
}

0 commit comments

Comments
 (0)