Skip to content

Commit ba236a9

Browse files
authored
fix failed to validate PKCS7 #188 (#189)
If CMSSignedData fails, try PEMParser.
1 parent c618801 commit ba236a9

File tree

8 files changed

+268
-19
lines changed

8 files changed

+268
-19
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Fixed
11+
12+
- [fj-doc-val-p7m] failed to validate PKCS7 : unknown tag 31 encountered <https://github.com/fugerit-org/fj-doc/issues/188>
13+
1014
## [8.7.5] - 2024-08-29
1115

1216
### Changed

fj-doc-val-p7m/src/main/java/org/fugerit/java/doc/val/p7m/P7MUtils.java

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,76 @@
11
package org.fugerit.java.doc.val.p7m;
22

3-
import java.io.ByteArrayInputStream;
4-
import java.io.IOException;
5-
import java.io.InputStream;
6-
import java.io.OutputStream;
3+
import java.io.*;
74

5+
import lombok.extern.slf4j.Slf4j;
6+
import org.bouncycastle.asn1.ASN1Sequence;
7+
import org.bouncycastle.asn1.cms.CMSObjectIdentifiers;
8+
import org.bouncycastle.asn1.cms.ContentInfo;
9+
import org.bouncycastle.asn1.cms.SignedData;
810
import org.bouncycastle.cms.CMSException;
911
import org.bouncycastle.cms.CMSProcessable;
1012
import org.bouncycastle.cms.CMSSignedData;
13+
import org.bouncycastle.openssl.PEMParser;
14+
import org.fugerit.java.core.cfg.ConfigRuntimeException;
1115
import org.fugerit.java.core.io.StreamIO;
1216

17+
@Slf4j
1318
public class P7MUtils {
1419

1520
private P7MUtils() {}
16-
17-
public static void extractContent( InputStream p7mContent, OutputStream contentStream ) throws CMSException, IOException {
18-
CMSSignedData csd = new CMSSignedData( p7mContent );
19-
CMSProcessable cmsContent = csd.getSignedContent();
21+
22+
public static void checkContentInfo(ContentInfo ci) throws CMSException {
23+
if ( ci == null ) {
24+
throw new CMSException( "null ContentInfo" );
25+
} else if (!ci.getContentType().equals(CMSObjectIdentifiers.signedData)) {
26+
throw new CMSException("not SignedData");
27+
}
28+
}
29+
30+
public static void extractContentPEMParser( byte[] data, OutputStream contentStream ) throws CMSException, IOException {
31+
String in = new String(data);
32+
try ( PEMParser pp = new PEMParser(new StringReader(in) ) ) {
33+
ContentInfo ci = (ContentInfo) pp.readObject();
34+
checkContentInfo( ci ); // check ContentInfo integrity
35+
SignedData sd = SignedData.getInstance(ci.getContent());
36+
byte[] encoded = ((ASN1Sequence) sd.getCertificates().getObjects().nextElement()).getEncoded();
37+
log.info( "validation ok! :{}", encoded.length );
38+
contentStream.write( encoded );
39+
}
40+
}
41+
42+
public static void extractContentCMSSignedDataProcess(CMSProcessable cmsContent, OutputStream contentStream) throws CMSException, IOException {
2043
if ( cmsContent != null ) {
2144
byte[] content = (byte[])cmsContent.getContent();
2245
try ( ByteArrayInputStream is = new ByteArrayInputStream( content ) ) {
2346
StreamIO.pipeStream(is, contentStream, StreamIO.MODE_CLOSE_BOTH);
2447
}
48+
} else {
49+
throw new CMSException( "null CMSProcessable" );
50+
}
51+
}
52+
53+
public static void extractContentCMSSignedData( byte[] data, OutputStream contentStream ) throws CMSException, IOException {
54+
CMSSignedData csd = new CMSSignedData( data );
55+
CMSProcessable cmsContent = csd.getSignedContent();
56+
extractContentCMSSignedDataProcess( cmsContent, contentStream );
57+
}
58+
59+
public static void extractContent( InputStream p7mContent, OutputStream contentStream ) throws CMSException, IOException {
60+
byte[] data = StreamIO.readBytes( p7mContent );
61+
try {
62+
extractContentCMSSignedData( data, contentStream );
63+
} catch (CMSException e) {
64+
log.warn("failed extractContentCMSSignedData(), try PEMParser(), size:{} (error:{})", data.length, e.toString() );
65+
extractContentPEMParser( data, contentStream );
66+
}
67+
}
68+
69+
public static byte[] extractContent( InputStream p7mContent ) throws CMSException, IOException {
70+
try (ByteArrayOutputStream buffer = new ByteArrayOutputStream()) {
71+
extractContent( p7mContent, buffer );
72+
buffer.flush();
73+
return buffer.toByteArray();
2574
}
2675
}
2776

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package org.fugerit.java.doc.val.p7m;
22

3-
import java.io.InputStream;
4-
5-
import org.bouncycastle.cms.CMSSignedData;
3+
import lombok.extern.slf4j.Slf4j;
64
import org.fugerit.java.doc.val.core.DocTypeValidationResult;
75
import org.fugerit.java.doc.val.core.DocTypeValidator;
86
import org.fugerit.java.doc.val.core.basic.AbstractDocTypeValidator;
97

8+
import java.io.InputStream;
9+
10+
@Slf4j
1011
public class P7MValidator extends AbstractDocTypeValidator {
1112

1213
public static final String EXTENSION = "P7M";
@@ -18,10 +19,10 @@ public class P7MValidator extends AbstractDocTypeValidator {
1819
public P7MValidator() {
1920
super( MIME_TYPE, EXTENSION );
2021
}
21-
22+
2223
@Override
2324
public DocTypeValidationResult validate(InputStream is) {
24-
return this.validationHelper( () -> new CMSSignedData( is ) );
25+
return this.validationHelper(() -> P7MUtils.extractContent( is ) );
2526
}
26-
27+
2728
}

fj-doc-val-p7m/src/test/java/test/org/fugerit/java/doc/val/p7m/TestExtractContentP7M.java

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package test.org.fugerit.java.doc.val.p7m;
22

3-
import java.io.ByteArrayOutputStream;
4-
import java.io.File;
5-
import java.io.FileInputStream;
3+
import java.io.*;
64

5+
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
6+
import org.bouncycastle.asn1.cms.CMSObjectIdentifiers;
7+
import org.bouncycastle.asn1.cms.ContentInfo;
78
import org.bouncycastle.cms.CMSException;
9+
import org.bouncycastle.openssl.PEMParser;
810
import org.fugerit.java.core.function.SafeFunction;
911
import org.fugerit.java.core.io.FileIO;
12+
import org.fugerit.java.core.io.StreamIO;
13+
import org.fugerit.java.core.lang.helpers.ClassHelper;
1014
import org.fugerit.java.doc.val.p7m.P7MUtils;
1115
import org.junit.Assert;
1216
import org.junit.Test;
@@ -15,7 +19,30 @@
1519

1620
@Slf4j
1721
public class TestExtractContentP7M {
18-
22+
23+
@Test
24+
public void testDataProcess() throws IOException {
25+
Assert.assertThrows( CMSException.class , () -> P7MUtils.extractContentCMSSignedDataProcess( null, null ) ) ;
26+
}
27+
28+
@Test
29+
public void testContentInfo() throws IOException {
30+
Assert.assertThrows( CMSException.class , () -> P7MUtils.checkContentInfo( null ) ) ;
31+
try (InputStream is = ClassHelper.loadFromDefaultClassLoader( "sample/pkcs7_test_ok1.p7m" ) ) {
32+
String in = new String(StreamIO.readBytes( is ));
33+
try ( PEMParser pp = new PEMParser(new StringReader(in) ) ) {
34+
ContentInfo ciTest = (ContentInfo) pp.readObject();
35+
ContentInfo ci = new ContentInfo( ciTest.getContentType(), ciTest.getContent() ){
36+
@Override
37+
public ASN1ObjectIdentifier getContentType() {
38+
return CMSObjectIdentifiers.authenticatedData;
39+
}
40+
};
41+
Assert.assertThrows( CMSException.class , () -> P7MUtils.checkContentInfo( ci ) ) ;
42+
}
43+
}
44+
}
45+
1946
@Test
2047
public void testP7MKo() {
2148
Assert.assertThrows( CMSException.class , () -> {

fj-doc-val-p7m/src/test/java/test/org/fugerit/java/doc/val/p7m/TestP7MValidator.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,23 @@ public void testPNGAsP7M() {
2222
boolean ok = this.worker(FACADE, "png_as_p7m.p7m", false );
2323
Assert.assertTrue( ok );
2424
}
25-
25+
26+
@Test
27+
public void testPkcs7Ok1() {
28+
boolean ok = this.worker(FACADE, "pkcs7_test_ok1.p7m", true );
29+
Assert.assertTrue( ok );
30+
}
31+
32+
@Test
33+
public void testPkcs7Ok2() {
34+
boolean ok = this.worker(FACADE, "pkcs7_test_ok2.p7m", true );
35+
Assert.assertTrue( ok );
36+
}
37+
38+
@Test
39+
public void testPkcs7Ko1() {
40+
boolean ok = this.worker(FACADE, "pkcs7_test_ko1.p7m", false );
41+
Assert.assertTrue( ok );
42+
}
43+
2644
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
-----BEGIN PKCS7-----
2+
MIIIzwYJKoZIhvcNAQcCoIIIwDCCCLwCAQExDzANBglghkgBZQMEAgEFADALBgkq
3+
hkiG9w0BBwGgggZbMIIGVzCCBT+gAwIBAgIELhJ2QDANBgkqhkiG9w0BAQUFADCB
4+
mDELMAkGA1UEBhMCREUxEDAOBgNVBAoMB1NpZW1lbnMxETAPBgNVBAUTCFpaWlpa
5+
WlkyMTowOAYDVQQLDDFDb3B5cmlnaHQgKEMpIFNpZW1lbnMgQUcgMjAxMyBBbGwg
6+
UmlnaHRzIFJlc2VydmVkMSgwJgYDVQQDDB9TaWVtZW5zIElzc3VpbmcgQ0EgRUUg
7+
QXV0aCAyMDEzMB4XDTE0MDcxODEzNTcwM1oXDTE3MDcxODEzNTcwM1owYzERMA8G
8+
A1UEBRMIWjAwMzBBTUgxDzANBgNVBCoMBkFsZXhleTERMA8GA1UEBAwIU2Vkb3lr
9+
aW4xEDAOBgNVBAoMB1NpZW1lbnMxGDAWBgNVBAMMD1NlZG95a2luIEFsZXhleTCC
10+
ASAwCwYJKoZIhvcNAQEBA4IBDwAwggEKAoIBAQCKahNgWzDPSnOwba2ljWQb8Lni
11+
uvAGZHEvdd5zm8H7Kw56WMxdixKHoKSChXWf1zGE3RZAsQOdHOpcgiqnRF2xLe2l
12+
LjCLoE9sC4DfUVD4mKe3kcxtnsxkoLc1A/3QXJSOzpk7rPJeqehmuj06yCtPjpdF
13+
Gmtf4bkskiQuK8u4RJfnmzffWQppd2Ld+u8tLxQKyHnZtOnPyYQGRQJXJKhruDnn
14+
LonlveVXKzEzmo88E5udB+/6jDWDfuyfKHMFyOhk80qGeYDOYQHxiq/PJbAyQU6X
15+
PONbfsCgILKxx7uHaBlhNALxjFZSeNNtfg0bx82O1DoJEcWcOjZQtQMuNUjvAgMB
16+
AAGjggLdMIIC2TAdBgNVHQ4EFgQUE5jDSnfWWnlUWMKztQ6zYfgohUkwUwYDVR0R
17+
BEwwSqArBgorBgEEAYI3FAIDoB0MG2FsZXhleS5zZWRveWtpbkBzaWVtZW5zLmNv
18+
bYEbYWxleGV5LnNlZG95a2luQHNpZW1lbnMuY29tMA4GA1UdDwEB/wQEAwIHgDCC
19+
AQQGCCsGAQUFBwEBBIH3MIH0MDIGCCsGAQUFBzAChiZodHRwOi8vYWguc2llbWVu
20+
cy5jb20vcGtpP1paWlpaWlkyLmNydDBBBggrBgEFBQcwAoY1bGRhcDovL2FsLnNp
21+
ZW1lbnMubmV0L0NOPVpaWlpaWlkyLEw9UEtJP2NBQ2VydGlmaWNhdGUwSQYIKwYB
22+
BQUHMAKGPWxkYXA6Ly9hbC5zaWVtZW5zLmNvbS9DTj1aWlpaWlpZMixvPVRydXN0
23+
Y2VudGVyP2NBQ2VydGlmaWNhdGUwMAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLnBr
24+
aS1zZXJ2aWNlcy5zaWVtZW5zLmNvbTAfBgNVHSMEGDAWgBTelD9Lal9YThQYyUbX
25+
FDnCnCE8KTAMBgNVHRMBAf8EAjAAMBoGA1UdIAQTMBEwDwYNKwYBBAGhaQcCAgMB
26+
ATCBygYDVR0fBIHCMIG/MIG8oIG5oIG2hiZodHRwOi8vY2guc2llbWVucy5jb20v
27+
cGtpP1paWlpaWlkyLmNybIZBbGRhcDovL2NsLnNpZW1lbnMubmV0L0NOPVpaWlpa
28+
WlkyLEw9UEtJP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3SGSWxkYXA6Ly9jbC5z
29+
aWVtZW5zLmNvbS9DTj1aWlpaWlpZMixvPVRydXN0Y2VudGVyP2NlcnRpZmljYXRl
30+
UmV2b2NhdGlvbkxpc3QwMwYDVR0lBCwwKgYIKwYBBQUHAwIGCCsGAQUFBwMEBgor
31+
BgEEAYI3FAICBggrBgEFBQgCAjANBgkqhkiG9w0BAQUFAAOCAQEAmzrYxmkRuSPM
32+
itK0rnR98BXlnB88ldVXjyz+rjHg9QghoZ5+8u7wHnxMSXida4XvYbhN5maUQs3D
33+
dWebvXP6CXt/OErVgYHlEAT8d5iqvin7/6eEgS0ge9DOxD2Rv+LYltPmAsjgxUS/
34+
0MecbUJpyBct6mDNfPI7riCu+mCcw6v9OKLWnXTIZsV9Z/WqaFbqVeJ5wo1+MUGW
35+
CGrDVkn7XnCKAQN8xEEO+Dq/TSVyv8tlDUzWps1yb3l9cYDc030s5AwFXa99v76p
36+
YJUZ08qQsieXOrs3qyQxMalM/Y042N17bwf9XkGT6iKN8o8U0YS1Vkaz8iroBRKk
37+
iA2pRNN4AjGCAjgwggI0AgEBMIGhMIGYMQswCQYDVQQGEwJERTEQMA4GA1UECgwH
38+
U2llbWVuczERMA8GA1UEBRMIWlpaWlpaWTIxOjA4BgNVBAsMMUNvcHlyaWdodCAo
39+
QykgU2llbWVucyBBRyAyMDEzIEFsbCBSaWdodHMgUmVzZXJ2ZWQxKDAmBgNVBAMM
40+
H1NpZW1lbnMgSXNzdWluZyBDQSBFRSBBdXRoIDIwMTMCBC4SdkAwDQYJYIZIAWUD
41+
BAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEP
42+
Fw0xNzA1MDMxNDI3NTFaMC8GCSqGSIb3DQEJBDEiBCBCA/fR9wGftKzKFZRuIDJV
43+
bYiaHzsDteoUoUL55kMrYDANBgkqhkiG9w0BAQEFAASCAQA6HtP3xr36VLj+WMao
44+
PRrszLfMJTE7lKIX3Vjybj2W3yj4qanPamZBb4KyEDIvQA8r65j4dbzcDePoFsRB
45+
5eYRnfB/djuXPAZdL9xdFMH3iRzfcseSFXulZ8FrG/9cuqDQkYVIx/Fk43yLtlpx
46+
OncVG3vZVW306yKQLu7Tsy+/GEkNDBMt6akqNPWp+9zqQTj7TaCXg7qr7mTlSStZ
47+
E15USoAOelisALpwPdizvfaJOqP03IobwDXMfRaCjzEANVl/M3woL1sNLu6BtuMe
48+
mAdls8tnJWDF+wpD4Y256Dso4FvDe2iK923jNElzq4iyc6ZosqGORS3nTh/1FQyp
49+
g
50+
-----END PKCS7-----
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
-----BEGIN PKCS7-----
2+
MIIIzwYJKoZIhvcNAQcCoIIIwDCCCLwCAQExDzANBglghkgBZQMEAgEFADALBgkq
3+
hkiG9w0BBwGgggZbMIIGVzCCBT+gAwIBAgIELhJ2QDANBgkqhkiG9w0BAQUFADCB
4+
mDELMAkGA1UEBhMCREUxEDAOBgNVBAoMB1NpZW1lbnMxETAPBgNVBAUTCFpaWlpa
5+
WlkyMTowOAYDVQQLDDFDb3B5cmlnaHQgKEMpIFNpZW1lbnMgQUcgMjAxMyBBbGwg
6+
UmlnaHRzIFJlc2VydmVkMSgwJgYDVQQDDB9TaWVtZW5zIElzc3VpbmcgQ0EgRUUg
7+
QXV0aCAyMDEzMB4XDTE0MDcxODEzNTcwM1oXDTE3MDcxODEzNTcwM1owYzERMA8G
8+
A1UEBRMIWjAwMzBBTUgxDzANBgNVBCoMBkFsZXhleTERMA8GA1UEBAwIU2Vkb3lr
9+
aW4xEDAOBgNVBAoMB1NpZW1lbnMxGDAWBgNVBAMMD1NlZG95a2luIEFsZXhleTCC
10+
ASAwCwYJKoZIhvcNAQEBA4IBDwAwggEKAoIBAQCKahNgWzDPSnOwba2ljWQb8Lni
11+
uvAGZHEvdd5zm8H7Kw56WMxdixKHoKSChXWf1zGE3RZAsQOdHOpcgiqnRF2xLe2l
12+
LjCLoE9sC4DfUVD4mKe3kcxtnsxkoLc1A/3QXJSOzpk7rPJeqehmuj06yCtPjpdF
13+
Gmtf4bkskiQuK8u4RJfnmzffWQppd2Ld+u8tLxQKyHnZtOnPyYQGRQJXJKhruDnn
14+
LonlveVXKzEzmo88E5udB+/6jDWDfuyfKHMFyOhk80qGeYDOYQHxiq/PJbAyQU6X
15+
PONbfsCgILKxx7uHaBlhNALxjFZSeNNtfg0bx82O1DoJEcWcOjZQtQMuNUjvAgMB
16+
AAGjggLdMIIC2TAdBgNVHQ4EFgQUE5jDSnfWWnlUWMKztQ6zYfgohUkwUwYDVR0R
17+
BEwwSqArBgorBgEEAYI3FAIDoB0MG2FsZXhleS5zZWRveWtpbkBzaWVtZW5zLmNv
18+
bYEbYWxleGV5LnNlZG95a2luQHNpZW1lbnMuY29tMA4GA1UdDwEB/wQEAwIHgDCC
19+
AQQGCCsGAQUFBwEBBIH3MIH0MDIGCCsGAQUFBzAChiZodHRwOi8vYWguc2llbWVu
20+
cy5jb20vcGtpP1paWlpaWlkyLmNydDBBBggrBgEFBQcwAoY1bGRhcDovL2FsLnNp
21+
ZW1lbnMubmV0L0NOPVpaWlpaWlkyLEw9UEtJP2NBQ2VydGlmaWNhdGUwSQYIKwYB
22+
BQUHMAKGPWxkYXA6Ly9hbC5zaWVtZW5zLmNvbS9DTj1aWlpaWlpZMixvPVRydXN0
23+
Y2VudGVyP2NBQ2VydGlmaWNhdGUwMAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLnBr
24+
aS1zZXJ2aWNlcy5zaWVtZW5zLmNvbTAfBgNVHSMEGDAWgBTelD9Lal9YThQYyUbX
25+
FDnCnCE8KTAMBgNVHRMBAf8EAjAAMBoGA1UdIAQTMBEwDwYNKwYBBAGhaQcCAgMB
26+
ATCBygYDVR0fBIHCMIG/MIG8oIG5oIG2hiZodHRwOi8vY2guc2llbWVucy5jb20v
27+
cGtpP1paWlpaWlkyLmNybIZBbGRhcDovL2NsLnNpZW1lbnMubmV0L0NOPVpaWlpa
28+
WlkyLEw9UEtJP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3SGSWxkYXA6Ly9jbC5z
29+
aWVtZW5zLmNvbS9DTj1aWlpaWlpZMixvPVRydXN0Y2VudGVyP2NlcnRpZmljYXRl
30+
UmV2b2NhdGlvbkxpc3QwMwYDVR0lBCwwKgYIKwYBBQUHAwIGCCsGAQUFBwMEBgor
31+
BgEEAYI3FAICBggrBgEFBQgCAjANBgkqhkiG9w0BAQUFAAOCAQEAmzrYxmkRuSPM
32+
itK0rnR98BXlnB88ldVXjyz+rjHg9QghoZ5+8u7wHnxMSXida4XvYbhN5maUQs3D
33+
dWebvXP6CXt/OErVgYHlEAT8d5iqvin7/6eEgS0ge9DOxD2Rv+LYltPmAsjgxUS/
34+
0MecbUJpyBct6mDNfPI7riCu+mCcw6v9OKLWnXTIZsV9Z/WqaFbqVeJ5wo1+MUGW
35+
CGrDVkn7XnCKAQN8xEEO+Dq/TSVyv8tlDUzWps1yb3l9cYDc030s5AwFXa99v76p
36+
YJUZ08qQsieXOrs3qyQxMalM/Y042N17bwf9XkGT6iKN8o8U0YS1Vkaz8iroBRKk
37+
iA2pRNN4AjGCAjgwggI0AgEBMIGhMIGYMQswCQYDVQQGEwJERTEQMA4GA1UECgwH
38+
U2llbWVuczERMA8GA1UEBRMIWlpaWlpaWTIxOjA4BgNVBAsMMUNvcHlyaWdodCAo
39+
QykgU2llbWVucyBBRyAyMDEzIEFsbCBSaWdodHMgUmVzZXJ2ZWQxKDAmBgNVBAMM
40+
H1NpZW1lbnMgSXNzdWluZyBDQSBFRSBBdXRoIDIwMTMCBC4SdkAwDQYJYIZIAWUD
41+
BAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEP
42+
Fw0xNzA1MDMxNDI3NTFaMC8GCSqGSIb3DQEJBDEiBCBCA/fR9wGftKzKFZRuIDJV
43+
bYiaHzsDteoUoUL55kMrYDANBgkqhkiG9w0BAQEFAASCAQA6HtP3xr36VLj+WMao
44+
PRrszLfMJTE7lKIX3Vjybj2W3yj4qanPamZBb4KyEDIvQA8r65j4dbzcDePoFsRB
45+
5eYRnfB/djuXPAZdL9xdFMH3iRzfcseSFXulZ8FrG/9cuqDQkYVIx/Fk43yLtlpx
46+
OncVG3vZVW306yKQLu7Tsy+/GEkNDBMt6akqNPWp+9zqQTj7TaCXg7qr7mTlSStZ
47+
E15USoAOelisALpwPdizvfaJOqP03IobwDXMfRaCjzEANVl/M3woL1sNLu6BtuMe
48+
mAdls8tnJWDF+wpD4Y256Dso4FvDe2iK923jNElzq4iyc6ZosqGORS3nTh/1FQyp
49+
gkC1
50+
-----END PKCS7-----
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
-----BEGIN PKCS7-----
2+
MIIIzwYJKoZIhvcNAQcCoIIIwDCCCLwCAQExDzANBglghkgBZQMEAgEFADALBgkq
3+
hkiG9w0BBwGgggZbMIIGVzCCBT+gAwIBAgIELhJ2QDANBgkqhkiG9w0BAQUFADCB
4+
mDELMAkGA1UEBhMCREUxEDAOBgNVBAoMB1NpZW1lbnMxETAPBgNVBAUTCFpaWlpa
5+
WlkyMTowOAYDVQQLDDFDb3B5cmlnaHQgKEMpIFNpZW1lbnMgQUcgMjAxMyBBbGwg
6+
UmlnaHRzIFJlc2VydmVkMSgwJgYDVQQDDB9TaWVtZW5zIElzc3VpbmcgQ0EgRUUg
7+
QXV0aCAyMDEzMB4XDTE0MDcxODEzNTcwM1oXDTE3MDcxODEzNTcwM1owYzERMA8G
8+
A1UEBRMIWjAwMzBBTUgxDzANBgNVBCoMBkFsZXhleTERMA8GA1UEBAwIU2Vkb3lr
9+
aW4xEDAOBgNVBAoMB1NpZW1lbnMxGDAWBgNVBAMMD1NlZG95a2luIEFsZXhleTCC
10+
ASAwCwYJKoZIhvcNAQEBA4IBDwAwggEKAoIBAQCKahNgWzDPSnOwba2ljWQb8Lni
11+
uvAGZHEvdd5zm8H7Kw56WMxdixKHoKSChXWf1zGE3RZAsQOdHOpcgiqnRF2xLe2l
12+
LjCLoE9sC4DfUVD4mKe3kcxtnsxkoLc1A/3QXJSOzpk7rPJeqehmuj06yCtPjpdF
13+
Gmtf4bkskiQuK8u4RJfnmzffWQppd2Ld+u8tLxQKyHnZtOnPyYQGRQJXJKhruDnn
14+
LonlveVXKzEzmo88E5udB+/6jDWDfuyfKHMFyOhk80qGeYDOYQHxiq/PJbAyQU6X
15+
PONbfsCgILKxx7uHaBlhNALxjFZSeNNtfg0bx82O1DoJEcWcOjZQtQMuNUjvAgMB
16+
AAGjggLdMIIC2TAdBgNVHQ4EFgQUE5jDSnfWWnlUWMKztQ6zYfgohUkwUwYDVR0R
17+
BEwwSqArBgorBgEEAYI3FAIDoB0MG2FsZXhleS5zZWRveWtpbkBzaWVtZW5zLmNv
18+
bYEbYWxleGV5LnNlZG95a2luQHNpZW1lbnMuY29tMA4GA1UdDwEB/wQEAwIHgDCC
19+
AQQGCCsGAQUFBwEBBIH3MIH0MDIGCCsGAQUFBzAChiZodHRwOi8vYWguc2llbWVu
20+
cy5jb20vcGtpP1paWlpaWlkyLmNydDBBBggrBgEFBQcwAoY1bGRhcDovL2FsLnNp
21+
ZW1lbnMubmV0L0NOPVpaWlpaWlkyLEw9UEtJP2NBQ2VydGlmaWNhdGUwSQYIKwYB
22+
BQUHMAKGPWxkYXA6Ly9hbC5zaWVtZW5zLmNvbS9DTj1aWlpaWlpZMixvPVRydXN0
23+
Y2VudGVyP2NBQ2VydGlmaWNhdGUwMAYIKwYBBQUHMAGGJGh0dHA6Ly9vY3NwLnBr
24+
aS1zZXJ2aWNlcy5zaWVtZW5zLmNvbTAfBgNVHSMEGDAWgBTelD9Lal9YThQYyUbX
25+
FDnCnCE8KTAMBgNVHRMBAf8EAjAAMBoGA1UdIAQTMBEwDwYNKwYBBAGhaQcCAgMB
26+
ATCBygYDVR0fBIHCMIG/MIG8oIG5oIG2hiZodHRwOi8vY2guc2llbWVucy5jb20v
27+
cGtpP1paWlpaWlkyLmNybIZBbGRhcDovL2NsLnNpZW1lbnMubmV0L0NOPVpaWlpa
28+
WlkyLEw9UEtJP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3SGSWxkYXA6Ly9jbC5z
29+
aWVtZW5zLmNvbS9DTj1aWlpaWlpZMixvPVRydXN0Y2VudGVyP2NlcnRpZmljYXRl
30+
UmV2b2NhdGlvbkxpc3QwMwYDVR0lBCwwKgYIKwYBBQUHAwIGCCsGAQUFBwMEBgor
31+
BgEEAYI3FAICBggrBgEFBQgCAjANBgkqhkiG9w0BAQUFAAOCAQEAmzrYxmkRuSPM
32+
itK0rnR98BXlnB88ldVXjyz+rjHg9QghoZ5+8u7wHnxMSXida4XvYbhN5maUQs3D
33+
dWebvXP6CXt/OErVgYHlEAT8d5iqvin7/6eEgS0ge9DOxD2Rv+LYltPmAsjgxUS/
34+
0MecbUJpyBct6mDNfPI7riCu+mCcw6v9OKLWnXTIZsV9Z/WqaFbqVeJ5wo1+MUGW
35+
CGrDVkn7XnCKAQN8xEEO+Dq/TSVyv8tlDUzWps1yb3l9cYDc030s5AwFXa99v76p
36+
YJUZ08qQsieXOrs3qyQxMalM/Y042N17bwf9XkGT6iKN8o8U0YS1Vkaz8iroBRKk
37+
iA2pRNN4AjGCAjgwggI0AgEBMIGhMIGYMQswCQYDVQQGEwJERTEQMA4GA1UECgwH
38+
U2llbWVuczERMA8GA1UEBRMIWlpaWlpaWTIxOjA4BgNVBAsMMUNvcHlyaWdodCAo
39+
QykgU2llbWVucyBBRyAyMDEzIEFsbCBSaWdodHMgUmVzZXJ2ZWQxKDAmBgNVBAMM
40+
H1NpZW1lbnMgSXNzdWluZyBDQSBFRSBBdXRoIDIwMTMCBC4SdkAwDQYJYIZIAWUD
41+
BAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEP
42+
Fw0xNzA1MDMxNDI3NTFaMC8GCSqGSIb3DQEJBDEiBCBCA/fR9wGftKzKFZRuIDJV
43+
bYiaHzsDteoUoUL55kMrYDANBgkqhkiG9w0BAQEFAASCAQA6HtP3xr36VLj+WMao
44+
PRrszLfMJTE7lKIX3Vjybj2W3yj4qanPamZBb4KyEDIvQA8r65j4dbzcDePoFsRB
45+
5eYRnfB/djuXPAZdL9xdFMH3iRzfcseSFXulZ8FrG/9cuqDQkYVIx/Fk43yLtlpx
46+
OncVG3vZVW306yKQLu7Tsy+/GEkNDBMt6akqNPWp+9zqQTj7TaCXg7qr7mTlSStZ
47+
E15USoAOelisALpwPdizvfaJOqP03IobwDXMfRaCjzEANVl/M3woL1sNLu6BtuMe
48+
mAdls8tnJWDF+wpD4Y256Dso4FvDe2iK923jNElzq4iyc6ZosqGORS3nTh/1FQyp
49+
gkC1
50+
-----END PKCS7-----

0 commit comments

Comments
 (0)