@@ -21,6 +21,7 @@ You should have received a copy of the GNU Affero General Public License
2121along with this program. If not, see <https://www.gnu.org/licenses/>.
2222*/
2323using System ;
24+ using System . Collections . Generic ;
2425using iText . Bouncycastleconnector ;
2526using iText . Commons . Bouncycastle ;
2627using iText . Commons . Bouncycastle . Cert ;
@@ -76,7 +77,7 @@ public virtual void ValidLatestSignatureTest() {
7677 using ( PdfDocument document = new PdfDocument ( new PdfReader ( SOURCE_FOLDER + "validDoc.pdf" ) ) ) {
7778 certificateRetriever . SetTrustedCertificates ( JavaCollectionsUtil . SingletonList ( rootCert ) ) ;
7879 AddRevDataClients ( ) ;
79- SignatureValidator signatureValidator = builder . BuildSignatureValidator ( ) ;
80+ SignatureValidator signatureValidator = builder . BuildSignatureValidator ( document ) ;
8081 report = signatureValidator . ValidateLatestSignature ( document ) ;
8182 }
8283 AssertValidationReport . AssertThat ( report , ( a ) => a . HasStatus ( ValidationReport . ValidationResult . VALID ) . HasLogItems
@@ -98,8 +99,8 @@ public virtual void ShortValidityCertsWithOcspTest() {
9899 using ( PdfDocument document = new PdfDocument ( new PdfReader ( SOURCE_FOLDER + "shortValidityCertsWithOcsp.pdf"
99100 ) ) ) {
100101 certificateRetriever . SetTrustedCertificates ( JavaUtil . ArraysAsList ( rootCert , tsRootCert ) ) ;
101- SignatureValidator signatureValidator = builder . BuildSignatureValidator ( ) ;
102- report = signatureValidator . ValidateSignatures ( document ) ;
102+ SignatureValidator signatureValidator = builder . BuildSignatureValidator ( document ) ;
103+ report = signatureValidator . ValidateSignatures ( ) ;
103104 }
104105 // ocsp validation date is wrong but why
105106 AssertValidationReport . AssertThat ( report , ( a ) => a . HasStatus ( ValidationReport . ValidationResult . VALID ) . HasLogItem
@@ -127,8 +128,8 @@ public virtual void ShortValidityCertsWithCrlTest() {
127128 using ( PdfDocument document = new PdfDocument ( new PdfReader ( SOURCE_FOLDER + "shortValidityCertsWithCrl.pdf"
128129 ) ) ) {
129130 certificateRetriever . SetTrustedCertificates ( JavaUtil . ArraysAsList ( rootCert , tsRootCert ) ) ;
130- SignatureValidator signatureValidator = builder . BuildSignatureValidator ( ) ;
131- report = signatureValidator . ValidateSignatures ( document ) ;
131+ SignatureValidator signatureValidator = builder . BuildSignatureValidator ( document ) ;
132+ report = signatureValidator . ValidateSignatures ( ) ;
132133 }
133134 AssertValidationReport . AssertThat ( report , ( a ) => a . HasStatus ( ValidationReport . ValidationResult . VALID ) . HasLogItem
134135 ( ( al ) => al . WithCheckName ( DocumentRevisionsValidator . DOC_MDP_CHECK ) . WithMessage ( DocumentRevisionsValidator
@@ -141,6 +142,40 @@ public virtual void ShortValidityCertsWithCrlTest() {
141142 ) . WithMessage ( CertificateChainValidator . CERTIFICATE_TRUSTED , ( i ) => tsRootCert . GetSubjectDN ( ) ) ) ) ;
142143 }
143144
145+ [ NUnit . Framework . Test ]
146+ public virtual void ValidateMultipleDocumentsTest ( ) {
147+ String rootCertName = CERTS_SRC + "short_validity_root_cert.pem" ;
148+ String tsRootCertName = CERTS_SRC + "ts_root_cert.pem" ;
149+ IX509Certificate rootCert = ( IX509Certificate ) PemFileHelper . ReadFirstChain ( rootCertName ) [ 0 ] ;
150+ IX509Certificate tsRootCert = ( IX509Certificate ) PemFileHelper . ReadFirstChain ( tsRootCertName ) [ 0 ] ;
151+ // We need to set infinite freshness for first timestamp validation. Otherwise, test will fail.
152+ builder . GetProperties ( ) . SetFreshness ( ValidatorContexts . Of ( ValidatorContext . CRL_VALIDATOR ) , CertificateSources
153+ . Of ( CertificateSource . TIMESTAMP ) , TimeBasedContexts . Of ( TimeBasedContext . PRESENT ) , TimeSpan . FromDays ( 999999
154+ ) ) ;
155+ using ( PdfDocument document = new PdfDocument ( new PdfReader ( SOURCE_FOLDER + "shortValidityCertsWithCrl.pdf"
156+ ) ) ) {
157+ certificateRetriever . SetTrustedCertificates ( JavaUtil . ArraysAsList ( rootCert , tsRootCert ) ) ;
158+ SignatureValidator signatureValidator = builder . BuildSignatureValidator ( document ) ;
159+ signatureValidator . ValidateSignatures ( ) ;
160+ }
161+ using ( PdfDocument document_1 = new PdfDocument ( new PdfReader ( SOURCE_FOLDER + "shortValidityCertsWithOcsp.pdf"
162+ ) ) ) {
163+ certificateRetriever . SetTrustedCertificates ( JavaUtil . ArraysAsList ( rootCert , tsRootCert ) ) ;
164+ SignatureValidator signatureValidator = builder . BuildSignatureValidator ( document_1 ) ;
165+ signatureValidator . ValidateSignatures ( ) ;
166+ }
167+ IList < ICrlClient > crlClients = builder . GetProperties ( ) . GetCrlClients ( ) ;
168+ IList < IOcspClient > ocspClients = builder . GetProperties ( ) . GetOcspClients ( ) ;
169+ NUnit . Framework . Assert . AreEqual ( 1 , crlClients . Count ) ;
170+ NUnit . Framework . Assert . AreEqual ( 1 , ocspClients . Count ) ;
171+ NUnit . Framework . Assert . IsTrue ( crlClients [ 0 ] is ValidationCrlClient ) ;
172+ NUnit . Framework . Assert . IsTrue ( ocspClients [ 0 ] is ValidationOcspClient ) ;
173+ ValidationCrlClient validationCrlClient = ( ValidationCrlClient ) crlClients [ 0 ] ;
174+ ValidationOcspClient validationOcspClient = ( ValidationOcspClient ) ocspClients [ 0 ] ;
175+ NUnit . Framework . Assert . AreEqual ( 2 , validationCrlClient . GetCrls ( ) . Count ) ;
176+ NUnit . Framework . Assert . AreEqual ( 2 , validationOcspClient . GetResponses ( ) . Count ) ;
177+ }
178+
144179 [ NUnit . Framework . Test ]
145180 public virtual void RetrieveRevocationDataFromTheSignatureContainerTest ( ) {
146181 String rootCertName = CERTS_SRC + "rootRsa.pem" ;
@@ -154,8 +189,8 @@ public virtual void RetrieveRevocationDataFromTheSignatureContainerTest() {
154189 using ( PdfDocument document = new PdfDocument ( new PdfReader ( SOURCE_FOLDER + "revDataInTheSignatureContainer.pdf"
155190 ) ) ) {
156191 certificateRetriever . SetTrustedCertificates ( JavaCollectionsUtil . SingletonList ( rootCert ) ) ;
157- SignatureValidator signatureValidator = builder . BuildSignatureValidator ( ) ;
158- report = signatureValidator . ValidateSignatures ( document ) ;
192+ SignatureValidator signatureValidator = builder . BuildSignatureValidator ( document ) ;
193+ report = signatureValidator . ValidateSignatures ( ) ;
159194 }
160195 AssertValidationReport . AssertThat ( report , ( a ) => a . HasStatus ( ValidationReport . ValidationResult . VALID ) . HasNumberOfLogs
161196 ( 4 ) . HasNumberOfFailures ( 0 ) . HasLogItem ( ( al ) => al . WithCheckName ( SignatureValidator . SIGNATURE_VERIFICATION
@@ -181,8 +216,8 @@ public virtual void RetrieveRevocationDataStoredInTheSignerInfoTest() {
181216 using ( PdfDocument document = new PdfDocument ( new PdfReader ( SOURCE_FOLDER + "revDataInTheSignerInfo.pdf" ) )
182217 ) {
183218 certificateRetriever . SetTrustedCertificates ( JavaCollectionsUtil . SingletonList ( rootCert ) ) ;
184- SignatureValidator signatureValidator = builder . BuildSignatureValidator ( ) ;
185- report = signatureValidator . ValidateSignatures ( document ) ;
219+ SignatureValidator signatureValidator = builder . BuildSignatureValidator ( document ) ;
220+ report = signatureValidator . ValidateSignatures ( ) ;
186221 }
187222 AssertValidationReport . AssertThat ( report , ( a ) => a . HasStatus ( ValidationReport . ValidationResult . VALID ) . HasNumberOfLogs
188223 ( 6 ) . HasNumberOfFailures ( 0 ) . HasLogItem ( ( al ) => al . WithCheckName ( SignatureValidator . SIGNATURE_VERIFICATION
@@ -213,7 +248,7 @@ public virtual void LatestSignatureIsTimestampTest() {
213248 parameters . SetRevocationOnlineFetching ( ValidatorContexts . All ( ) , CertificateSources . All ( ) , TimeBasedContexts
214249 . All ( ) , SignatureValidationProperties . OnlineFetching . NEVER_FETCH ) . SetFreshness ( ValidatorContexts . All ( )
215250 , CertificateSources . All ( ) , TimeBasedContexts . All ( ) , TimeSpan . FromDays ( - 2 ) ) ;
216- SignatureValidator signatureValidator = builder . BuildSignatureValidator ( ) ;
251+ SignatureValidator signatureValidator = builder . BuildSignatureValidator ( document ) ;
217252 report = signatureValidator . ValidateLatestSignature ( document ) ;
218253 }
219254 AssertValidationReport . AssertThat ( report , ( a ) => a . HasNumberOfFailures ( 0 ) . HasNumberOfLogs ( 3 ) . HasLogItems ( 2
@@ -229,7 +264,7 @@ public virtual void CertificatesNotInLatestSignatureTest() {
229264 IX509Certificate rootCert = ( IX509Certificate ) certificateChain [ 2 ] ;
230265 ValidationReport report ;
231266 using ( PdfDocument document = new PdfDocument ( new PdfReader ( SOURCE_FOLDER + "validDocWithoutChain.pdf" ) ) ) {
232- SignatureValidator signatureValidator = builder . BuildSignatureValidator ( ) ;
267+ SignatureValidator signatureValidator = builder . BuildSignatureValidator ( document ) ;
233268 certificateRetriever . SetTrustedCertificates ( JavaCollectionsUtil . SingletonList ( rootCert ) ) ;
234269 parameters . SetRevocationOnlineFetching ( ValidatorContexts . All ( ) , CertificateSources . All ( ) , TimeBasedContexts
235270 . All ( ) , SignatureValidationProperties . OnlineFetching . NEVER_FETCH ) . SetFreshness ( ValidatorContexts . All ( )
@@ -255,7 +290,7 @@ public virtual void CertificatesNotInLatestSignatureButSetAsKnownTest() {
255290 certificateRetriever . SetTrustedCertificates ( JavaCollectionsUtil . SingletonList ( rootCert ) ) ;
256291 certificateRetriever . AddKnownCertificates ( JavaCollectionsUtil . SingletonList ( intermediateCert ) ) ;
257292 AddRevDataClients ( ) ;
258- SignatureValidator signatureValidator = builder . BuildSignatureValidator ( ) ;
293+ SignatureValidator signatureValidator = builder . BuildSignatureValidator ( document ) ;
259294 report = signatureValidator . ValidateLatestSignature ( document ) ;
260295 }
261296 AssertValidationReport . AssertThat ( report , ( a ) => a . HasStatus ( ValidationReport . ValidationResult . VALID ) . HasLogItems
@@ -270,7 +305,7 @@ public virtual void RootIsNotTrustedInLatestSignatureTest() {
270305 IX509Certificate rootCert = ( IX509Certificate ) certificateChain [ 2 ] ;
271306 ValidationReport report ;
272307 using ( PdfDocument document = new PdfDocument ( new PdfReader ( SOURCE_FOLDER + "validDoc.pdf" ) ) ) {
273- SignatureValidator signatureValidator = builder . BuildSignatureValidator ( ) ;
308+ SignatureValidator signatureValidator = builder . BuildSignatureValidator ( document ) ;
274309 parameters . SetRevocationOnlineFetching ( ValidatorContexts . All ( ) , CertificateSources . All ( ) , TimeBasedContexts
275310 . All ( ) , SignatureValidationProperties . OnlineFetching . NEVER_FETCH ) . SetFreshness ( ValidatorContexts . All ( )
276311 , CertificateSources . All ( ) , TimeBasedContexts . All ( ) , TimeSpan . FromDays ( - 2 ) ) ;
@@ -293,8 +328,8 @@ public virtual void ValidateMultipleSignaturesUsingLastKnownPoETest() {
293328 ) ) ) {
294329 SignatureValidator signatureValidator = new ValidatorChainBuilder ( ) . WithTrustedCertificates ( JavaUtil . ArraysAsList
295330 ( trustedCerts ) ) . WithRevocationDataValidator ( new MockRevocationDataValidator ( ) ) . BuildSignatureValidator
296- ( ) ;
297- ValidationReport report = signatureValidator . ValidateSignatures ( document ) ;
331+ ( document ) ;
332+ ValidationReport report = signatureValidator . ValidateSignatures ( ) ;
298333 AssertValidationReport . AssertThat ( report , ( r ) => r . HasStatus ( ValidationReport . ValidationResult . VALID ) . HasNumberOfLogs
299334 ( 5 ) . HasNumberOfFailures ( 0 ) . HasLogItem ( ( l ) => l . WithCheckName ( SignatureValidator . SIGNATURE_VERIFICATION
300335 ) . WithMessage ( SignatureValidator . VALIDATING_SIGNATURE_NAME , ( p ) => "timestampSig1" ) ) . HasLogItem ( ( l ) =>
@@ -311,8 +346,9 @@ public virtual void StopAfterTimestampChainValidationFailureTest() {
311346 using ( PdfDocument document = new PdfDocument ( new PdfReader ( SOURCE_FOLDER + "validDocWithTimestamp.pdf" ) ) ) {
312347 SignatureValidator signatureValidator = new ValidatorChainBuilder ( ) . WithSignatureValidationProperties ( new
313348 SignatureValidationProperties ( ) . SetContinueAfterFailure ( ValidatorContexts . All ( ) , CertificateSources . All
314- ( ) , false ) ) . WithRevocationDataValidator ( new MockRevocationDataValidator ( ) ) . BuildSignatureValidator ( ) ;
315- ValidationReport report = signatureValidator . ValidateSignatures ( document ) ;
349+ ( ) , false ) ) . WithRevocationDataValidator ( new MockRevocationDataValidator ( ) ) . BuildSignatureValidator ( document
350+ ) ;
351+ ValidationReport report = signatureValidator . ValidateSignatures ( ) ;
316352 AssertValidationReport . AssertThat ( report , ( r ) => r . HasStatus ( ValidationReport . ValidationResult . INDETERMINATE
317353 ) . HasNumberOfLogs ( 3 ) . HasNumberOfFailures ( 2 ) . HasLogItem ( ( l ) => l . WithCheckName ( SignatureValidator . SIGNATURE_VERIFICATION
318354 ) . WithMessage ( SignatureValidator . VALIDATING_SIGNATURE_NAME , ( p ) => "Signature1" ) ) . HasLogItems ( 2 , ( l ) =>
0 commit comments