Skip to content

Commit 1102018

Browse files
committed
Support ocsp archive cutoff extension
DEVSIX-8353
1 parent 7d1b55e commit 1102018

File tree

22 files changed

+255
-274
lines changed

22 files changed

+255
-274
lines changed

bouncy-castle-adapter/src/main/java/com/itextpdf/bouncycastle/BouncyCastleFactory.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,18 @@ public IExtensions createExtensions(IExtension extension) {
10201020
return new ExtensionsBC(extension);
10211021
}
10221022

1023+
/**
1024+
* {@inheritDoc}
1025+
*/
1026+
@Override
1027+
public IExtensions createExtensions(IExtension[] extensions) {
1028+
Extension[] exts = new Extension[extensions.length];
1029+
for (int i = 0; i < extensions.length; ++i) {
1030+
exts[i] = ((ExtensionBC) extensions[i]).getExtension();
1031+
}
1032+
return new ExtensionsBC(new Extensions(exts));
1033+
}
1034+
10231035
/**
10241036
* {@inheritDoc}
10251037
*/

bouncy-castle-adapter/src/main/java/com/itextpdf/bouncycastle/asn1/ocsp/OCSPObjectIdentifiersBC.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public class OCSPObjectIdentifiersBC implements IOCSPObjectIdentifiers {
4444
private static final IASN1ObjectIdentifier ID_PKIX_OCSP_NOCHECK =
4545
new ASN1ObjectIdentifierBC(OCSPObjectIdentifiers.id_pkix_ocsp_nocheck);
4646

47+
private static final IASN1ObjectIdentifier ID_PKIX_OCSP_ARCHIVE_CUTOFF =
48+
new ASN1ObjectIdentifierBC(OCSPObjectIdentifiers.id_pkix_ocsp_archive_cutoff);
49+
4750
private final OCSPObjectIdentifiers ocspObjectIdentifiers;
4851

4952
/**
@@ -97,6 +100,14 @@ public IASN1ObjectIdentifier getIdPkixOcspNoCheck() {
97100
return ID_PKIX_OCSP_NOCHECK;
98101
}
99102

103+
/**
104+
* {@inheritDoc}
105+
*/
106+
@Override
107+
public IASN1ObjectIdentifier getIdPkixOcspArchiveCutoff() {
108+
return ID_PKIX_OCSP_ARCHIVE_CUTOFF;
109+
}
110+
100111
/**
101112
* Indicates whether some other object is "equal to" this one. Compares wrapped objects.
102113
*/

bouncy-castle-adapter/src/main/java/com/itextpdf/bouncycastle/cert/ocsp/BasicOCSPRespBC.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,12 @@ This file is part of the iText (R) project.
2222
*/
2323
package com.itextpdf.bouncycastle.cert.ocsp;
2424

25+
import com.itextpdf.bouncycastle.asn1.ASN1EncodableBC;
26+
import com.itextpdf.bouncycastle.asn1.ASN1ObjectIdentifierBC;
2527
import com.itextpdf.bouncycastle.cert.X509CertificateHolderBC;
2628
import com.itextpdf.bouncycastle.operator.ContentVerifierProviderBC;
29+
import com.itextpdf.commons.bouncycastle.asn1.IASN1Encodable;
30+
import com.itextpdf.commons.bouncycastle.asn1.IASN1ObjectIdentifier;
2731
import com.itextpdf.commons.bouncycastle.cert.IX509CertificateHolder;
2832
import com.itextpdf.commons.bouncycastle.cert.ocsp.IBasicOCSPResp;
2933
import com.itextpdf.commons.bouncycastle.cert.ocsp.ISingleResp;
@@ -32,6 +36,8 @@ This file is part of the iText (R) project.
3236
import java.io.IOException;
3337
import java.util.Date;
3438
import java.util.Objects;
39+
40+
import org.bouncycastle.asn1.x509.Extension;
3541
import org.bouncycastle.cert.X509CertificateHolder;
3642
import org.bouncycastle.cert.ocsp.BasicOCSPResp;
3743
import org.bouncycastle.cert.ocsp.OCSPException;
@@ -119,6 +125,16 @@ public Date getProducedAt() {
119125
return basicOCSPResp.getProducedAt();
120126
}
121127

128+
/**
129+
* {@inheritDoc}
130+
*/
131+
@Override
132+
public IASN1Encodable getExtensionParsedValue(IASN1ObjectIdentifier objectIdentifier) {
133+
Extension extension =
134+
basicOCSPResp.getExtension(((ASN1ObjectIdentifierBC) objectIdentifier).getASN1ObjectIdentifier());
135+
return new ASN1EncodableBC(extension == null ? null : extension.getParsedValue());
136+
}
137+
122138
/**
123139
* Indicates whether some other object is "equal to" this one. Compares wrapped objects.
124140
*/

bouncy-castle-connector/src/main/java/com/itextpdf/bouncycastleconnector/BouncyCastleDefaultFactory.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,11 @@ public IExtensions createExtensions(IExtension extension) {
519519
throw new UnsupportedOperationException(BouncyCastleLogMessageConstant.BOUNCY_CASTLE_DEPENDENCY_MUST_PRESENT);
520520
}
521521

522+
@Override
523+
public IExtensions createExtensions(IExtension[] extension) {
524+
throw new UnsupportedOperationException(BouncyCastleLogMessageConstant.BOUNCY_CASTLE_DEPENDENCY_MUST_PRESENT);
525+
}
526+
522527
@Override
523528
public IExtensions createNullExtensions() {
524529
throw new UnsupportedOperationException(BouncyCastleLogMessageConstant.BOUNCY_CASTLE_DEPENDENCY_MUST_PRESENT);

bouncy-castle-fips-adapter/src/main/java/com/itextpdf/bouncycastlefips/BouncyCastleFipsFactory.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,6 +1030,18 @@ public IExtensions createExtensions(IExtension extension) {
10301030
return new ExtensionsBCFips(extension);
10311031
}
10321032

1033+
/**
1034+
* {@inheritDoc}
1035+
*/
1036+
@Override
1037+
public IExtensions createExtensions(IExtension[] extensions) {
1038+
Extension[] exts = new Extension[extensions.length];
1039+
for (int i = 0; i < extensions.length; ++i) {
1040+
exts[i] = ((ExtensionBCFips) extensions[i]).getExtension();
1041+
}
1042+
return new ExtensionsBCFips(new Extensions(exts));
1043+
}
1044+
10331045
/**
10341046
* {@inheritDoc}
10351047
*/

bouncy-castle-fips-adapter/src/main/java/com/itextpdf/bouncycastlefips/asn1/ocsp/OCSPObjectIdentifiersBCFips.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@ public class OCSPObjectIdentifiersBCFips implements IOCSPObjectIdentifiers {
4141
private static final IASN1ObjectIdentifier ID_PKIX_OCSP_NONCE =
4242
new ASN1ObjectIdentifierBCFips(OCSPObjectIdentifiers.id_pkix_ocsp_nonce);
4343

44-
4544
private static final IASN1ObjectIdentifier ID_PKIX_OCSP_NOCHECK =
4645
new ASN1ObjectIdentifierBCFips(OCSPObjectIdentifiers.id_pkix_ocsp_nocheck);
4746

47+
private static final IASN1ObjectIdentifier ID_PKIX_OCSP_ARCHIVE_CUTOFF =
48+
new ASN1ObjectIdentifierBCFips(OCSPObjectIdentifiers.id_pkix_ocsp_archive_cutoff);
49+
4850
private final OCSPObjectIdentifiers ocspObjectIdentifiers;
4951

5052
/**
@@ -98,6 +100,14 @@ public IASN1ObjectIdentifier getIdPkixOcspNoCheck() {
98100
return ID_PKIX_OCSP_NOCHECK;
99101
}
100102

103+
/**
104+
* {@inheritDoc}
105+
*/
106+
@Override
107+
public IASN1ObjectIdentifier getIdPkixOcspArchiveCutoff() {
108+
return ID_PKIX_OCSP_ARCHIVE_CUTOFF;
109+
}
110+
101111
/**
102112
* Indicates whether some other object is "equal to" this one. Compares wrapped objects.
103113
*/

bouncy-castle-fips-adapter/src/main/java/com/itextpdf/bouncycastlefips/cert/ocsp/BasicOCSPRespBCFips.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,12 @@ This file is part of the iText (R) project.
2222
*/
2323
package com.itextpdf.bouncycastlefips.cert.ocsp;
2424

25+
import com.itextpdf.bouncycastlefips.asn1.ASN1EncodableBCFips;
26+
import com.itextpdf.bouncycastlefips.asn1.ASN1ObjectIdentifierBCFips;
2527
import com.itextpdf.bouncycastlefips.cert.X509CertificateHolderBCFips;
2628
import com.itextpdf.bouncycastlefips.operator.ContentVerifierProviderBCFips;
29+
import com.itextpdf.commons.bouncycastle.asn1.IASN1Encodable;
30+
import com.itextpdf.commons.bouncycastle.asn1.IASN1ObjectIdentifier;
2731
import com.itextpdf.commons.bouncycastle.cert.IX509CertificateHolder;
2832
import com.itextpdf.commons.bouncycastle.cert.ocsp.IBasicOCSPResp;
2933
import com.itextpdf.commons.bouncycastle.cert.ocsp.ISingleResp;
@@ -32,6 +36,8 @@ This file is part of the iText (R) project.
3236
import java.io.IOException;
3337
import java.util.Date;
3438
import java.util.Objects;
39+
40+
import org.bouncycastle.asn1.x509.Extension;
3541
import org.bouncycastle.cert.X509CertificateHolder;
3642
import org.bouncycastle.cert.ocsp.BasicOCSPResp;
3743
import org.bouncycastle.cert.ocsp.OCSPException;
@@ -118,6 +124,16 @@ public Date getProducedAt() {
118124
return basicOCSPResp.getProducedAt();
119125
}
120126

127+
/**
128+
* {@inheritDoc}
129+
*/
130+
@Override
131+
public IASN1Encodable getExtensionParsedValue(IASN1ObjectIdentifier objectIdentifier) {
132+
Extension extension =
133+
basicOCSPResp.getExtension(((ASN1ObjectIdentifierBCFips) objectIdentifier).getASN1ObjectIdentifier());
134+
return new ASN1EncodableBCFips(extension == null ? null : extension.getParsedValue());
135+
}
136+
121137
/**
122138
* Indicates whether some other object is "equal to" this one. Compares wrapped objects.
123139
*/

commons/src/main/java/com/itextpdf/commons/bouncycastle/IBouncyCastleFactory.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,15 @@ IJcaX509CertificateHolder createJcaX509CertificateHolder(X509Certificate certifi
806806
*/
807807
IExtensions createExtensions(IExtension extension);
808808

809+
/**
810+
* Create extensions wrapper from extension wrapper.
811+
*
812+
* @param extensions array of the extension wrappers to create extensions wrapper from
813+
*
814+
* @return created extensions wrapper
815+
*/
816+
IExtensions createExtensions(IExtension[] extensions);
817+
809818
/**
810819
* Create extensions wrapper for {@code null} value.
811820
*

commons/src/main/java/com/itextpdf/commons/bouncycastle/asn1/ocsp/IOCSPObjectIdentifiers.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,11 @@ public interface IOCSPObjectIdentifiers {
4949
* @return OCSPObjectIdentifiers.id_pkix_ocsp_nocheck wrapper.
5050
*/
5151
IASN1ObjectIdentifier getIdPkixOcspNoCheck();
52+
53+
/**
54+
* Gets {@code id_pkix_ocsp_archive_cutoff} constant for the wrapped OCSPObjectIdentifiers.
55+
*
56+
* @return OCSPObjectIdentifiers.id_pkix_ocsp_archive_cutoff wrapper.
57+
*/
58+
IASN1ObjectIdentifier getIdPkixOcspArchiveCutoff();
5259
}

commons/src/main/java/com/itextpdf/commons/bouncycastle/cert/ocsp/IBasicOCSPResp.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ This file is part of the iText (R) project.
2222
*/
2323
package com.itextpdf.commons.bouncycastle.cert.ocsp;
2424

25+
import com.itextpdf.commons.bouncycastle.asn1.IASN1Encodable;
26+
import com.itextpdf.commons.bouncycastle.asn1.IASN1ObjectIdentifier;
2527
import com.itextpdf.commons.bouncycastle.cert.IX509CertificateHolder;
2628
import com.itextpdf.commons.bouncycastle.operator.IContentVerifierProvider;
2729

@@ -73,4 +75,14 @@ public interface IBasicOCSPResp {
7375
* @return produced at date.
7476
*/
7577
Date getProducedAt();
78+
79+
/**
80+
* Gets parsed value of the extension retrieved using actual {@code getExtension} method
81+
* for the wrapped BasicOCSPResp object.
82+
*
83+
* @param objectIdentifier extension object identifier
84+
*
85+
* @return wrapped extension parsed value.
86+
*/
87+
IASN1Encodable getExtensionParsedValue(IASN1ObjectIdentifier objectIdentifier);
7688
}

0 commit comments

Comments
 (0)