Skip to content

Commit 4d8c501

Browse files
committed
Prepare for .net bouncy castle update
DEVSIX-7701
1 parent c76aa6b commit 4d8c501

File tree

10 files changed

+106
-27
lines changed

10 files changed

+106
-27
lines changed

commons/src/main/java/com/itextpdf/commons/utils/DateTimeUtil.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,22 @@ public static Date addDaysToDate(Date date, int days) {
153153
return cal.getTime();
154154
}
155155

156+
/**
157+
* Adds the specified amount of years to the given date.
158+
*
159+
* @param date the specified date to add
160+
* @param years the amount of years to be added
161+
*
162+
* @return a {@link Date} object representing the calendar's time value (millisecond
163+
* offset from the Epoch)
164+
*/
165+
public static Date addYearsToDate(Date date, int years) {
166+
Calendar cal = new GregorianCalendar();
167+
cal.setTime(date);
168+
cal.add(Calendar.YEAR, years);
169+
return cal.getTime();
170+
}
171+
156172
/**
157173
* Parses passing date with default yyyy-MM-dd pattern.
158174
*

commons/src/test/java/com/itextpdf/commons/utils/DateTimeUtilTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ This file is part of the iText (R) project.
2727

2828
import java.util.Calendar;
2929
import java.util.Date;
30+
import java.util.GregorianCalendar;
31+
3032
import org.junit.Assert;
3133
import org.junit.Test;
3234
import org.junit.experimental.categories.Category;
@@ -87,4 +89,24 @@ public void parseDateAndGetRelativeTimeTest() {
8789

8890
Assert.assertEquals(1588636800000d - offset, relativeTime, ZERO_DELTA);
8991
}
92+
93+
@Test
94+
public void addYearPositiveValueTest () {
95+
GregorianCalendar originalDate = new GregorianCalendar(2000 + 1900, 1, 1);
96+
originalDate.getTime();
97+
98+
Date newDate = DateTimeUtil.addYearsToDate(originalDate.getTime(), 5);
99+
100+
Assert.assertEquals(2005, newDate.getYear());
101+
}
102+
103+
@Test
104+
public void addYearNegativeValueTest () {
105+
GregorianCalendar originalDate = new GregorianCalendar(2000 + 1900, 1, 1);
106+
originalDate.getTime();
107+
108+
Date newDate = DateTimeUtil.addYearsToDate(originalDate.getTime(), -3);
109+
110+
Assert.assertEquals(1997, newDate.getYear());
111+
}
90112
}

sharpenConfiguration.xml

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,14 @@
152152
<file path="com/itextpdf/bouncycastle/asn1/ASN1IntegerBC.java"/>
153153
<file path="com/itextpdf/bouncycastle/asn1/ASN1OctetStringBC.java"/>
154154
<file path="com/itextpdf/bouncycastle/asn1/ASN1TaggedObjectBC.java"/>
155+
<file path="com/itextpdf/bouncycastle/asn1/ASN1OutputStreamBC.java"/>
155156
<file path="com/itextpdf/bouncycastle/asn1/ocsp/BasicOCSPResponseBC.java"/>
156157
<file path="com/itextpdf/bouncycastle/asn1/ocsp/OCSPResponseBC.java"/>
157158
<file path="com/itextpdf/bouncycastle/asn1/pcks/PrivateKeyInfoBC.java"/>
158159
<file path="com/itextpdf/bouncycastle/asn1/pkcs/PrivateKeyInfoBC.java"/>
159160
<file path="com/itextpdf/bouncycastle/asn1/pcks/RSASSAPSSParamsBC.java"/>
160161
<file path="com/itextpdf/bouncycastle/asn1/pkcs/RSASSAPSSParamsBC.java"/>
162+
<file path="com/itextpdf/bouncycastle/asn1/util/ASN1DumpBC.java"/>
161163
<file path="com/itextpdf/bouncycastle/asn1/x500/X500NameBC.java"/>
162164
<file path="com/itextpdf/bouncycastle/asn1/x509/ExtensionBC.java"/>
163165
<file path="com/itextpdf/bouncycastle/asn1/x509/ExtensionsBC.java"/>
@@ -214,6 +216,7 @@
214216
<file path="com/itextpdf/bouncycastlefips/asn1/ASN1IntegerBCFips.java"/>
215217
<file path="com/itextpdf/bouncycastlefips/asn1/ASN1OctetStringBCFips.java"/>
216218
<file path="com/itextpdf/bouncycastlefips/asn1/ASN1SequenceBCFips.java"/>
219+
<file path="com/itextpdf/bouncycastlefips/asn1/ASN1OutputStreamBCFips.java"/>
217220
<file path="com/itextpdf/bouncycastlefips/asn1/ocsp/BasicOCSPResponseBCFips.java"/>
218221
<file path="com/itextpdf/bouncycastlefips/asn1/ocsp/OCSPResponseBCFips.java"/>
219222
<file path="com/itextpdf/bouncycastlefips/asn1/pcks/PrivateKeyInfoBCFips.java"/>
@@ -449,6 +452,9 @@
449452
<file path="com/itextpdf/signatures/RSASSAPSSMechanismParams.java"/>
450453
<file path="com/itextpdf/signatures/sign/RSASSAPSSTest.java"/>
451454
</fileset>
455+
<fileset reason="Date and DateTime UTC time constructors difference in Java and .NET">
456+
<file path="com/itextpdf/signatures/testutils/TimeTestUtil.java"/>
457+
</fileset>
452458
<file path="com/itextpdf/signatures/testutils/SignTestPortUtil.java"/>
453459
<file path="com/itextpdf/signatures/testutils/X509MockCertificate.java"/>
454460
<file path="com/itextpdf/signatures/testutils/builder/TestCrlBuilder.java"/>
@@ -472,6 +478,10 @@
472478
<fileset reason="Different implementation on .NET and java">
473479
<file path="com/itextpdf/signatures/sign/IsoSignatureExtensionsRoundtripTest.java"/>
474480
<file path="com/itextpdf/signatures/sign/PdfPadesSignerLevelsTest.java"/>
481+
<file path="com/itextpdf/signatures/sign/LtvSigTest.java"/>
482+
<file path="com/itextpdf/signatures/sign/PdfPadesSignerLevelsTest.java"/>
483+
<file path="com/itextpdf/signatures/sign/PadesSignatureLevelTest.java"/>
484+
<file path="com/itextpdf/signatures/sign/TimestampSigTest.java"/>
475485
</fileset>
476486
<fileset reason=".pem files reading logic is different in java and .net">
477487
<file path="com/itextpdf/signatures/testutils/PemFileHelper.java"/>
@@ -562,6 +572,22 @@
562572
<file path="com/itextpdf/signatures/sign/LtvSigTest/cmp_ltvEnabledSingleSignatureTest01.pdf"/>
563573
<file path="com/itextpdf/signatures/sign/PadesSignatureLevelTest/cmp_padesSignatureLevelTTest01.pdf"/>
564574
<file path="com/itextpdf/signatures/sign/PadesSignatureLevelTest/cmp_padesSignatureLevelLTATest01.pdf"/>
575+
<file path="com/itextpdf/signatures/sign/LtvSigTest/cmp_ltvEnabledTest01.pdf"/>
576+
<file path="com/itextpdf/signatures/sign/PadesSigTest/cmp_padesEccSigTest01.pdf"/>
577+
<file path="com/itextpdf/signatures/sign/PadesSigTest/cmp_padesEpesProfileTest01.pdf"/>
578+
<file path="com/itextpdf/signatures/sign/PadesSigTest/cmp_padesRsaSigTest01.pdf"/>
579+
<file path="com/itextpdf/signatures/sign/PadesSigTest/cmp_padesRsaSigTestWithChain01.pdf"/>
580+
<file path="com/itextpdf/signatures/sign/PadesSigTest/cmp_signaturePolicyInfoUnavailableUrl_signed.pdf"/>
581+
<file path="com/itextpdf/signatures/sign/PadesSigTest/helloWorldDoc.pdf"/>
582+
<file path="com/itextpdf/signatures/sign/PadesSigTest/templateForSignDeferred.pdf"/>
583+
<file path="com/itextpdf/signatures/sign/PadesSignatureLevelTest/cmp_padesSignatureLevelBTest01.pdf"/>
584+
<file path="com/itextpdf/signatures/sign/PadesSignatureLevelTest/cmp_padesSignatureLevelLTTest01.pdf"/>
585+
<file path="com/itextpdf/signatures/sign/PadesSignatureLevelTest/helloWorldDoc.pdf"/>
586+
<file path="com/itextpdf/signatures/sign/PadesSignatureLevelTest/signedPAdES-LT.pdf"/>
587+
<file path="com/itextpdf/signatures/sign/PadesSignatureLevelTest/signedPAdES-T.pdf"/>
588+
<file path="com/itextpdf/signatures/sign/PdfPadesSignerLevelsTest/cmp_padesSignatureLevelBTest1.pdf"/>
589+
<file path="com/itextpdf/signatures/sign/PdfPadesSignerLevelsTest/cmp_padesSignatureLevelBTest2.pdf"/>
590+
<file path="com/itextpdf/signatures/sign/PdfPadesSignerLevelsTest/cmp_padesSignatureLevelBTest3.pdf"/>
565591
<file path="com/itextpdf/signatures/sign/PdfPadesSignerLevelsTest/cmp_padesSignatureLevelLTATest1.pdf"/>
566592
<file path="com/itextpdf/signatures/sign/PdfPadesSignerLevelsTest/cmp_padesSignatureLevelLTATest2.pdf"/>
567593
<file path="com/itextpdf/signatures/sign/PdfPadesSignerLevelsTest/cmp_padesSignatureLevelLTATest3.pdf"/>
@@ -607,4 +633,4 @@
607633
</resources>
608634
</module>
609635
</overwritten>
610-
</configuration>
636+
</configuration>

sign/src/test/java/com/itextpdf/signatures/testutils/TimeTestUtil.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,21 @@ This file is part of the iText (R) project.
2222
*/
2323
package com.itextpdf.signatures.testutils;
2424

25+
import java.util.Date;
26+
2527
public class TimeTestUtil {
2628
private static final int MILLIS_IN_DAY = 86_400_000;
2729

2830
// This method is used to trim the hours of the day, so that two dates could be compared
2931
// with a day accuracy. We need such a method since in .NET the signing DateTime extracted
3032
// from the signature depends on the current time zone set on the machine.
31-
// TODO DEVSIX-5812 Remove the method alongside the utility class once the issue is fixed
33+
// TODO DEVSIX-5812 Remove the method
3234
public static long getFullDaysMillis(double millis) {
3335
return (long) millis / MILLIS_IN_DAY;
3436
}
37+
38+
/**
39+
* A date time value to be used in test instead of current date time to get consistent results
40+
*/
41+
public static Date TEST_DATE_TIME = new Date(950537642000L); // Feb 14, 2000 14:14:02 UTC
3542
}

sign/src/test/java/com/itextpdf/signatures/testutils/builder/TestCrlBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ This file is part of the iText (R) project.
2929
import com.itextpdf.commons.bouncycastle.operator.AbstractOperatorCreationException;
3030
import com.itextpdf.commons.bouncycastle.operator.IContentSigner;
3131
import com.itextpdf.commons.utils.DateTimeUtil;
32+
import com.itextpdf.signatures.testutils.TimeTestUtil;
3233

3334
import java.io.IOException;
3435
import java.security.PrivateKey;
@@ -43,7 +44,7 @@ public class TestCrlBuilder {
4344

4445
private final PrivateKey issuerPrivateKey;
4546
private final IX509v2CRLBuilder crlBuilder;
46-
private Date nextUpdate = DateTimeUtil.addDaysToDate(DateTimeUtil.getCurrentTimeDate(), 30);
47+
private Date nextUpdate = DateTimeUtil.addDaysToDate(TimeTestUtil.TEST_DATE_TIME, 30);
4748

4849
public TestCrlBuilder(X509Certificate issuerCert, PrivateKey issuerPrivateKey, Date thisUpdate)
4950
throws CertificateEncodingException, IOException {

sign/src/test/java/com/itextpdf/signatures/testutils/builder/TestOcspResponseBuilder.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ This file is part of the iText (R) project.
3636
import com.itextpdf.commons.bouncycastle.operator.AbstractOperatorCreationException;
3737
import com.itextpdf.commons.bouncycastle.operator.IContentSigner;
3838
import com.itextpdf.commons.utils.DateTimeUtil;
39+
import com.itextpdf.signatures.testutils.TimeTestUtil;
3940

4041
import java.io.IOException;
4142
import java.security.PrivateKey;
@@ -54,8 +55,8 @@ public class TestOcspResponseBuilder {
5455
private X509Certificate issuerCert;
5556
private PrivateKey issuerPrivateKey;
5657
private ICertificateStatus certificateStatus;
57-
private Calendar thisUpdate = DateTimeUtil.getCurrentTimeCalendar();
58-
private Calendar nextUpdate = DateTimeUtil.getCurrentTimeCalendar();
58+
private Calendar thisUpdate = DateTimeUtil.getCalendar(TimeTestUtil.TEST_DATE_TIME);
59+
private Calendar nextUpdate = DateTimeUtil.getCalendar(TimeTestUtil.TEST_DATE_TIME);
5960

6061
public TestOcspResponseBuilder(X509Certificate issuerCert, PrivateKey issuerPrivateKey,
6162
ICertificateStatus certificateStatus) throws CertificateEncodingException, IOException {
@@ -110,7 +111,7 @@ public IBasicOCSPResp makeOcspResponseObject(byte[] requestBytes) throws Certifi
110111
nextUpdate.getTime(), FACTORY.createNullExtensions());
111112
}
112113

113-
Date time = DateTimeUtil.getCurrentTimeDate();
114+
Date time = TimeTestUtil.TEST_DATE_TIME;
114115

115116
IX509CertificateHolder[] chain = {FACTORY.createJcaX509CertificateHolder(issuerCert)};
116117
IContentSigner signer = FACTORY.createJcaContentSignerBuilder(SIGN_ALG).setProvider(FACTORY.getProviderName())

sign/src/test/java/com/itextpdf/signatures/testutils/client/TestCrlClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ This file is part of the iText (R) project.
2525
import com.itextpdf.commons.utils.DateTimeUtil;
2626
import com.itextpdf.kernel.exceptions.PdfException;
2727
import com.itextpdf.signatures.ICrlClient;
28+
import com.itextpdf.signatures.testutils.TimeTestUtil;
2829
import com.itextpdf.signatures.testutils.builder.TestCrlBuilder;
2930

3031
import java.io.IOException;
@@ -52,7 +53,7 @@ public TestCrlClient addBuilderForCertIssuer(TestCrlBuilder crlBuilder) {
5253

5354
public TestCrlClient addBuilderForCertIssuer(X509Certificate issuerCert, PrivateKey issuerPrivateKey)
5455
throws CertificateEncodingException, IOException {
55-
Date yesterday = DateTimeUtil.addDaysToDate(DateTimeUtil.getCurrentTimeDate(), -1);
56+
Date yesterday = DateTimeUtil.addDaysToDate(TimeTestUtil.TEST_DATE_TIME, -1);
5657
crlBuilders.add(new TestCrlBuilder(issuerCert, issuerPrivateKey, yesterday));
5758
return this;
5859
}

sign/src/test/java/com/itextpdf/signatures/verify/CrlVerifierTest.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ This file is part of the iText (R) project.
3131
import com.itextpdf.signatures.VerificationException;
3232
import com.itextpdf.signatures.testutils.PemFileHelper;
3333
import com.itextpdf.signatures.testutils.SignTestPortUtil;
34+
import com.itextpdf.signatures.testutils.TimeTestUtil;
3435
import com.itextpdf.signatures.testutils.builder.TestCrlBuilder;
3536
import com.itextpdf.signatures.testutils.client.TestCrlClient;
3637
import com.itextpdf.test.ExtendedITextTest;
@@ -67,7 +68,7 @@ public void validCrl01() throws GeneralSecurityException, IOException, AbstractP
6768
String caCertP12FileName = certsSrc + "rootRsa.pem";
6869
X509Certificate caCert = (X509Certificate) PemFileHelper.readFirstChain(caCertP12FileName)[0];
6970
PrivateKey caPrivateKey = PemFileHelper.readFirstKey(caCertP12FileName, password);
70-
TestCrlBuilder crlBuilder = new TestCrlBuilder(caCert, caPrivateKey, DateTimeUtil.addDaysToDate(DateTimeUtil.getCurrentTimeDate(), -1));
71+
TestCrlBuilder crlBuilder = new TestCrlBuilder(caCert, caPrivateKey, DateTimeUtil.addDaysToDate(TimeTestUtil.TEST_DATE_TIME, -1));
7172
Assert.assertTrue(verifyTest(crlBuilder));
7273
}
7374

@@ -77,11 +78,11 @@ public void invalidRevokedCrl01()
7778
String caCertP12FileName = certsSrc + "rootRsa.pem";
7879
X509Certificate caCert = (X509Certificate) PemFileHelper.readFirstChain(caCertP12FileName)[0];
7980
PrivateKey caPrivateKey = PemFileHelper.readFirstKey(caCertP12FileName, password);
80-
TestCrlBuilder crlBuilder = new TestCrlBuilder(caCert, caPrivateKey, DateTimeUtil.addDaysToDate(DateTimeUtil.getCurrentTimeDate(), -1));
81+
TestCrlBuilder crlBuilder = new TestCrlBuilder(caCert, caPrivateKey, DateTimeUtil.addDaysToDate(TimeTestUtil.TEST_DATE_TIME, -1));
8182

8283
String checkCertFileName = certsSrc + "signCertRsa01.pem";
8384
X509Certificate checkCert = (X509Certificate) PemFileHelper.readFirstChain(checkCertFileName)[0];
84-
crlBuilder.addCrlEntry(checkCert, DateTimeUtil.addDaysToDate(DateTimeUtil.getCurrentTimeDate(), -40),
85+
crlBuilder.addCrlEntry(checkCert, DateTimeUtil.addDaysToDate(TimeTestUtil.TEST_DATE_TIME, -40),
8586
FACTORY.createCRLReason().getKeyCompromise());
8687

8788
Assert.assertThrows(VerificationException.class, () -> verifyTest(crlBuilder));
@@ -93,8 +94,8 @@ public void invalidOutdatedCrl01()
9394
String caCertP12FileName = certsSrc + "rootRsa.pem";
9495
X509Certificate caCert = (X509Certificate) PemFileHelper.readFirstChain(caCertP12FileName)[0];
9596
PrivateKey caPrivateKey = PemFileHelper.readFirstKey(caCertP12FileName, password);
96-
TestCrlBuilder crlBuilder = new TestCrlBuilder(caCert, caPrivateKey, DateTimeUtil.addDaysToDate(DateTimeUtil.getCurrentTimeDate(), -2));
97-
crlBuilder.setNextUpdate(DateTimeUtil.addDaysToDate(DateTimeUtil.getCurrentTimeDate(), -1));
97+
TestCrlBuilder crlBuilder = new TestCrlBuilder(caCert, caPrivateKey, DateTimeUtil.addDaysToDate(TimeTestUtil.TEST_DATE_TIME, -2));
98+
crlBuilder.setNextUpdate(DateTimeUtil.addDaysToDate(TimeTestUtil.TEST_DATE_TIME, -1));
9899

99100
Assert.assertFalse(verifyTest(crlBuilder));
100101
}
@@ -113,7 +114,7 @@ private boolean verifyTest(TestCrlBuilder crlBuilder) throws GeneralSecurityExce
113114
for (byte[] crlBytes : crlBytesCollection) {
114115
X509CRL crl = (X509CRL) SignTestPortUtil.parseCrlFromStream(new ByteArrayInputStream(crlBytes));
115116
CRLVerifier verifier = new CRLVerifier(null, null);
116-
verify = verifier.verify(crl, checkCert, caCert, DateTimeUtil.getCurrentTimeDate());
117+
verify = verifier.verify(crl, checkCert, caCert, TimeTestUtil.TEST_DATE_TIME);
117118
break;
118119
}
119120
return verify;

0 commit comments

Comments
 (0)