2
2
using System . Collections ;
3
3
4
4
using NUnit . Framework ;
5
-
5
+ using Org . BouncyCastle . Asn1 ;
6
6
using Org . BouncyCastle . Asn1 . Cmp ;
7
7
using Org . BouncyCastle . Asn1 . Cms ;
8
+ using Org . BouncyCastle . Asn1 . Ess ;
9
+ using Org . BouncyCastle . Asn1 . Nist ;
10
+ using Org . BouncyCastle . Asn1 . Oiw ;
8
11
using Org . BouncyCastle . Asn1 . Pkcs ;
12
+ using Org . BouncyCastle . Cms ;
9
13
using Org . BouncyCastle . Crypto ;
14
+ using Org . BouncyCastle . Crypto . Operators ;
10
15
using Org . BouncyCastle . Crypto . Parameters ;
11
16
using Org . BouncyCastle . Math ;
12
17
using Org . BouncyCastle . Utilities ;
@@ -21,17 +26,22 @@ public class TspTest
21
26
private static AsymmetricKeyParameter privateKey ;
22
27
private static X509Certificate cert ;
23
28
private static IX509Store certs ;
29
+
30
+
24
31
25
32
static TspTest ( )
26
33
{
27
34
string signDN = "O=Bouncy Castle, C=AU" ;
28
35
AsymmetricCipherKeyPair signKP = TspTestUtil . MakeKeyPair ( ) ;
29
36
X509Certificate signCert = TspTestUtil . MakeCACertificate ( signKP , signDN , signKP , signDN ) ;
37
+
30
38
31
39
string origDN = "CN=Eric H. Echidna, [email protected] , O=Bouncy Castle, C=AU" ;
32
40
AsymmetricCipherKeyPair origKP = TspTestUtil . MakeKeyPair ( ) ;
33
41
privateKey = origKP . Private ;
34
42
43
+
44
+
35
45
cert = TspTestUtil . MakeCertificate ( origKP , origDN , signKP , signDN ) ;
36
46
37
47
IList certList = new ArrayList ( ) ;
@@ -544,5 +554,89 @@ public void TestNoNonce()
544
554
545
555
Assert . AreEqual ( 0 , certificates . Count ) ;
546
556
}
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
+
547
641
}
548
642
}
0 commit comments