Skip to content

Commit 2a0657a

Browse files
committed
Time-Stamp Protocol (RFC 3161)
Implementation in wolfCrypt OpenSSL compatibility layer in wolfSSL Added tests, certificates, examples.
1 parent ac01707 commit 2a0657a

66 files changed

Lines changed: 18064 additions & 66 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/no-malloc.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,14 @@ jobs:
7474
"--enable-curve448", "--enable-mlkem", "--enable-staticmemory",
7575
"CFLAGS=-DWOLFSSL_NO_MALLOC -pedantic -Wdeclaration-after-statement -Wnull-dereference -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"],
7676
"check": false,
77+
"run": [["./wolfcrypt/test/testwolfcrypt"]]},
78+
{"name": "tps-staticmemory", "minutes": 0.8,
79+
"configure": ["--enable-ecc", "--enable-rsa", "--enable-keygen",
80+
"--enable-ed25519", "--enable-curve25519", "--enable-ed448",
81+
"--enable-curve448", "--enable-mlkem", "--enable-tsp",
82+
"--enable-staticmemory",
83+
"CFLAGS=-DWOLFSSL_NO_MALLOC -pedantic -Wdeclaration-after-statement -Wnull-dereference -DTEST_LIBWOLFSSL_SOURCES_INCLUSION_SEQUENCE"],
84+
"check": false,
7785
"run": [["./wolfcrypt/test/testwolfcrypt"]]}
7886
]
7987
EOF

.github/workflows/os-check.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,37 @@ jobs:
306306
{"name": "pkcs7", "minutes": 1.3,
307307
"comment": "PKCS#7 without RSA-PSS",
308308
"configure": ["--enable-pkcs7"]},
309+
{"name": "tsp", "minutes": 1.3,
310+
"comment": "Time-Stamp Protocol",
311+
"configure": ["--enable-tsp"]},
312+
{"name": "tsp-openssl", "minutes": 1.3,
313+
"comment": "Time-Stamp Protocol with OpenSSL compat",
314+
"configure": ["--enable-tsp", "--enable-opensslall"]},
315+
{"name": "tsp-no-ecc", "minutes": 1.3,
316+
"comment": "Time-Stamp Protocol without ECC",
317+
"configure": ["--enable-tsp", "--disable-ecc"]},
318+
{"name": "tsp-no-rsa", "minutes": 1.3,
319+
"comment": "Time-Stamp Protocol without RSA",
320+
"configure": ["--enable-tsp", "--disable-rsa"]},
321+
{"name": "tsp-smallstack", "minutes": 1.3,
322+
"comment": "Time-Stamp Protocol Small Stack",
323+
"configure": ["--enable-tsp", "CPPFLAGS=-DWOLFSSL_SMALL_STACK"]},
324+
{"name": "tsp-min-hash-str", "minutes": 1.3,
325+
"comment": "Time-Stamp Protocol Minimum 128-bit hash strength",
326+
"configure": ["--enable-tsp",
327+
"CPPFLAGS=-DWC_TSP_MIN_HASH_STRENGTH_BITS=128"]},
328+
{"name": "tsp-requester", "minutes": 1.3,
329+
"comment": "Time-Stamp Protocol Requester",
330+
"configure": ["--enable-tsp", "--enable-opensslall",
331+
"CPPFLAGS=-DWOLFSSL_TSP_REQUESTER"]},
332+
{"name": "tsp-responder", "minutes": 1.3,
333+
"comment": "Time-Stamp Protocol Responder",
334+
"configure": ["--enable-tsp", "--enable-opensslall",
335+
"CPPFLAGS=-DWOLFSSL_TSP_RESPONDER"]},
336+
{"name": "tsp-verifier", "minutes": 1.3,
337+
"comment": "Time-Stamp Protocol Verifier",
338+
"configure": ["--enable-tsp", "--enable-opensslall",
339+
"CPPFLAGS=-DWOLFSSL_TSP_VERIFIER"]},
309340
{"name": "no-tls-cryptocb-aesgcm-setkey-free", "minutes": 1.3,
310341
"configure": ["--disable-tls", "--enable-cryptocb", "--enable-aesgcm",
311342
"CPPFLAGS=-DWOLF_CRYPTO_CB_AES_SETKEY -DWOLF_CRYPTO_CB_FREE"]},

CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2021,6 +2021,9 @@ endif()
20212021
set(WOLFSSL_PKCS7_HELP_STRING "Enable PKCS7 (default: disabled)")
20222022
add_option(WOLFSSL_PKCS7 ${WOLFSSL_PKCS7_HELP_STRING} "no" "yes;no")
20232023

2024+
set(WOLFSSL_TSP_HELP_STRING "Enable RFC 3161 Time-Stamp Protocol (default: disabled)")
2025+
add_option(WOLFSSL_TSP ${WOLFSSL_TSP_HELP_STRING} "no" "yes;no")
2026+
20242027
set(WOLFSSL_TPM_HELP_STRING "Enable wolfTPM options (default: disabled)")
20252028
add_option(WOLFSSL_TPM ${WOLFSSL_TPM_HELP_STRING} "no" "yes;no")
20262029

@@ -2412,6 +2415,12 @@ if(WOLFSSL_AESCFB)
24122415
endif()
24132416

24142417

2418+
if(WOLFSSL_TSP)
2419+
list(APPEND WOLFSSL_DEFINITIONS "-DWOLFSSL_TSP")
2420+
# Requires PKCS7 for time-stamp token creation and verification
2421+
override_cache(WOLFSSL_PKCS7 "yes")
2422+
endif()
2423+
24152424
if(WOLFSSL_PKCS7)
24162425
list(APPEND WOLFSSL_DEFINITIONS "-DHAVE_PKCS7")
24172426
override_cache(WOLFSSL_AESKEYWRAP "yes")
@@ -2965,6 +2974,8 @@ if(WOLFSSL_EXAMPLES)
29652974
tests/api/test_asn.c
29662975
tests/api/test_pkcs7.c
29672976
tests/api/test_pkcs12.c
2977+
tests/api/test_tsp.c
2978+
tests/api/test_ossl_tsp.c
29682979
tests/api/test_pwdbased.c
29692980
tests/api/test_ossl_asn1.c
29702981
tests/api/test_ossl_bio.c

certs/include.am

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ EXTRA_DIST += \
3737
certs/client-ca-cert.pem \
3838
certs/dh2048.pem \
3939
certs/server-cert.pem \
40+
certs/tsa-bad-ku-cert.pem \
41+
certs/tsa-extra-eku-cert.pem \
42+
certs/tsa-chain-cert.pem \
43+
certs/tsa-chain-key.pem \
44+
certs/tsa-cert.pem \
45+
certs/tsa-ecc-cert.pem \
46+
certs/tsa-ecc-key.pem \
47+
certs/tsa-key.pem \
4048
certs/server-ecc.pem \
4149
certs/server-ecc-self.pem \
4250
certs/server-ecc-comp.pem \
@@ -119,6 +127,14 @@ EXTRA_DIST += \
119127
certs/ecc-keyPub.der \
120128
certs/server-key.der \
121129
certs/server-cert.der \
130+
certs/tsa-key.der \
131+
certs/tsa-cert.der \
132+
certs/tsa-ecc-key.der \
133+
certs/tsa-ecc-cert.der \
134+
certs/tsa-bad-ku-cert.der \
135+
certs/tsa-extra-eku-cert.der \
136+
certs/tsa-chain-cert.der \
137+
certs/tsa-chain-key.der \
122138
certs/server-ecc-comp.der \
123139
certs/server-ecc.der \
124140
certs/server-ecc-self.der \

certs/renewcerts.sh

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@
3939
# aia/multi-aia-cert.pem
4040
# aia/overflow-aia-cert.pem
4141
# sia/timestamping-sia-cert.pem
42+
# tsa-cert.pem
43+
# tsa-cert.der
44+
# tsa-ecc-cert.pem
45+
# tsa-ecc-cert.der
46+
# tsa-bad-ku-cert.pem
47+
# tsa-bad-ku-cert.der
48+
# tsa-extra-eku-cert.pem
49+
# tsa-extra-eku-cert.der
50+
# tsa-chain-cert.pem
51+
# tsa-chain-cert.der
4252
# updates the following crls:
4353
# crl/cliCrl.pem
4454
# crl/crl.pem
@@ -216,6 +226,112 @@ run_renewcerts(){
216226
echo "End of section"
217227
echo "---------------------------------------------------------------------"
218228

229+
############################################################
230+
######## update the self-signed (2048-bit) tsa-cert.pem ###
231+
############################################################
232+
echo "Updating 2048-bit tsa-cert.pem"
233+
echo ""
234+
openssl req -new -key tsa-key.pem -config ./renewcerts/wolfssl.cnf -nodes -subj "/C=US/ST=Montana/L=Bozeman/O=wolfSSL/OU=TSA-2048/CN=www.wolfssl.com/emailAddress=info@wolfssl.com" -out tsa-cert.csr
235+
check_result $? "Step 1"
236+
237+
openssl x509 -req -in tsa-cert.csr -days 1000 -extfile ./renewcerts/wolfssl.cnf -extensions tsa_cert -signkey tsa-key.pem -out tsa-cert.pem
238+
check_result $? "Step 2"
239+
rm tsa-cert.csr
240+
241+
openssl x509 -in tsa-cert.pem -text > tmp.pem
242+
check_result $? "Step 3"
243+
mv tmp.pem tsa-cert.pem
244+
245+
openssl x509 -in tsa-cert.pem -outform der -out tsa-cert.der
246+
check_result $? "Step 4"
247+
echo "End of section"
248+
echo "---------------------------------------------------------------------"
249+
250+
############################################################
251+
## update the intermediate-issued tsa-chain-cert.pem ######
252+
############################################################
253+
echo "Updating 2048-bit tsa-chain-cert.pem"
254+
echo ""
255+
openssl req -new -key tsa-chain-key.pem -config ./renewcerts/wolfssl.cnf -nodes -subj "/C=US/ST=Montana/L=Bozeman/O=wolfSSL/OU=TSA-chain-2048/CN=www.wolfssl.com/emailAddress=info@wolfssl.com" -out tsa-chain-cert.csr
256+
check_result $? "Step 1"
257+
258+
openssl x509 -req -in tsa-chain-cert.csr -days 1000 -extfile ./renewcerts/wolfssl.cnf -extensions tsa_cert -CA intermediate/ca-int-cert.pem -CAkey intermediate/ca-int-key.pem -CAcreateserial -out tsa-chain-cert.pem
259+
check_result $? "Step 2"
260+
rm tsa-chain-cert.csr
261+
rm -f intermediate/ca-int-cert.srl
262+
263+
openssl x509 -in tsa-chain-cert.pem -text > tmp.pem
264+
check_result $? "Step 3"
265+
mv tmp.pem tsa-chain-cert.pem
266+
267+
openssl x509 -in tsa-chain-cert.pem -outform der -out tsa-chain-cert.der
268+
check_result $? "Step 4"
269+
echo "End of section"
270+
echo "---------------------------------------------------------------------"
271+
272+
############################################################
273+
########## update the self-signed tsa-ecc-cert.pem ########
274+
############################################################
275+
echo "Updating tsa-ecc-cert.pem"
276+
echo ""
277+
openssl req -new -key tsa-ecc-key.pem -config ./renewcerts/wolfssl.cnf -nodes -subj "/C=US/ST=Montana/L=Bozeman/O=wolfSSL/OU=TSA-ECC/CN=www.wolfssl.com/emailAddress=info@wolfssl.com" -out tsa-ecc-cert.csr
278+
check_result $? "Step 1"
279+
280+
openssl x509 -req -in tsa-ecc-cert.csr -days 1000 -extfile ./renewcerts/wolfssl.cnf -extensions tsa_cert -signkey tsa-ecc-key.pem -out tsa-ecc-cert.pem
281+
check_result $? "Step 2"
282+
rm tsa-ecc-cert.csr
283+
284+
openssl x509 -in tsa-ecc-cert.pem -text > tmp.pem
285+
check_result $? "Step 3"
286+
mv tmp.pem tsa-ecc-cert.pem
287+
288+
openssl x509 -in tsa-ecc-cert.pem -outform der -out tsa-ecc-cert.der
289+
check_result $? "Step 4"
290+
echo "End of section"
291+
echo "---------------------------------------------------------------------"
292+
293+
############################################################
294+
## update the self-signed (2048-bit) tsa-bad-ku-cert.pem ##
295+
############################################################
296+
echo "Updating 2048-bit tsa-bad-ku-cert.pem"
297+
echo ""
298+
openssl req -new -key tsa-key.pem -config ./renewcerts/wolfssl.cnf -nodes -subj "/C=US/ST=Montana/L=Bozeman/O=wolfSSL/OU=TSA-bad-ku-2048/CN=www.wolfssl.com/emailAddress=info@wolfssl.com" -out tsa-bad-ku-cert.csr
299+
check_result $? "Step 1"
300+
301+
openssl x509 -req -in tsa-bad-ku-cert.csr -days 1000 -extfile ./renewcerts/wolfssl.cnf -extensions tsa_bad_ku_cert -signkey tsa-key.pem -out tsa-bad-ku-cert.pem
302+
check_result $? "Step 2"
303+
rm tsa-bad-ku-cert.csr
304+
305+
openssl x509 -in tsa-bad-ku-cert.pem -text > tmp.pem
306+
check_result $? "Step 3"
307+
mv tmp.pem tsa-bad-ku-cert.pem
308+
309+
openssl x509 -in tsa-bad-ku-cert.pem -outform der -out tsa-bad-ku-cert.der
310+
check_result $? "Step 4"
311+
echo "End of section"
312+
echo "---------------------------------------------------------------------"
313+
314+
###############################################################
315+
## update the self-signed (2048-bit) tsa-extra-eku-cert.pem ##
316+
###############################################################
317+
echo "Updating 2048-bit tsa-extra-eku-cert.pem"
318+
echo ""
319+
openssl req -new -key tsa-key.pem -config ./renewcerts/wolfssl.cnf -nodes -subj "/C=US/ST=Montana/L=Bozeman/O=wolfSSL/OU=TSA-extra-eku-2048/CN=www.wolfssl.com/emailAddress=info@wolfssl.com" -out tsa-extra-eku-cert.csr
320+
check_result $? "Step 1"
321+
322+
openssl x509 -req -in tsa-extra-eku-cert.csr -days 1000 -extfile ./renewcerts/wolfssl.cnf -extensions tsa_extra_eku_cert -signkey tsa-key.pem -out tsa-extra-eku-cert.pem
323+
check_result $? "Step 2"
324+
rm tsa-extra-eku-cert.csr
325+
326+
openssl x509 -in tsa-extra-eku-cert.pem -text > tmp.pem
327+
check_result $? "Step 3"
328+
mv tmp.pem tsa-extra-eku-cert.pem
329+
330+
openssl x509 -in tsa-extra-eku-cert.pem -outform der -out tsa-extra-eku-cert.der
331+
check_result $? "Step 4"
332+
echo "End of section"
333+
echo "---------------------------------------------------------------------"
334+
219335
############################################################
220336
#### update the self-signed (1024-bit) client-cert.pem #####
221337
############################################################

certs/renewcerts/wolfssl.cnf

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,3 +452,30 @@ DNS.1 = www.example.org
452452
URI.1 = https://www.wolfssl.com/
453453
otherName.2 = 2.16.840.1.101.3.6.6;FORMAT:HEX,OCT:D1:38:10:D8:28:AF:2C:10:84:35:15:A1:68:58:28:AF:02:10:86:A2:84:E7:39:C3:EB
454454

455+
456+
# TSA certificate extensions - RFC 3161 time-stamping only
457+
[ tsa_cert ]
458+
subjectKeyIdentifier = hash
459+
authorityKeyIdentifier = keyid:always,issuer:always
460+
basicConstraints = CA:false
461+
subjectAltName = DNS:tsa.wolfssl.com
462+
keyUsage = critical, digitalSignature
463+
extendedKeyUsage = critical, timeStamping
464+
465+
# TSA certificate extensions with wrong key usage - for failure testing
466+
[ tsa_bad_ku_cert ]
467+
subjectKeyIdentifier = hash
468+
authorityKeyIdentifier = keyid:always,issuer:always
469+
basicConstraints = CA:false
470+
keyUsage = critical, keyEncipherment
471+
extendedKeyUsage = critical, timeStamping
472+
473+
# TSA certificate extensions with an extra (non-timeStamping) extended key
474+
# usage - for failure testing. The extra purpose is an unrecognized OID so the
475+
# time-stamping bit is still the only one set; rejection relies on the count.
476+
[ tsa_extra_eku_cert ]
477+
subjectKeyIdentifier = hash
478+
authorityKeyIdentifier = keyid:always,issuer:always
479+
basicConstraints = CA:false
480+
keyUsage = critical, digitalSignature
481+
extendedKeyUsage = critical, timeStamping, 1.3.6.1.4.1.99999.1

certs/tsa-bad-ku-cert.der

1.24 KB
Binary file not shown.

certs/tsa-bad-ku-cert.pem

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
Certificate:
2+
Data:
3+
Version: 3 (0x2)
4+
Serial Number:
5+
7d:ef:e7:fe:70:74:73:af:df:71:6b:d3:ba:fb:d0:4b:a3:50:26:d3
6+
Signature Algorithm: sha256WithRSAEncryption
7+
Issuer: C=US, ST=Montana, L=Bozeman, O=wolfSSL, OU=TSA-bad-ku-2048, CN=www.wolfssl.com, emailAddress=info@wolfssl.com
8+
Validity
9+
Not Before: Jun 4 20:35:37 2026 GMT
10+
Not After : Feb 28 20:35:37 2029 GMT
11+
Subject: C=US, ST=Montana, L=Bozeman, O=wolfSSL, OU=TSA-bad-ku-2048, CN=www.wolfssl.com, emailAddress=info@wolfssl.com
12+
Subject Public Key Info:
13+
Public Key Algorithm: rsaEncryption
14+
Public-Key: (2048 bit)
15+
Modulus:
16+
00:93:74:96:f0:0c:fd:d7:2a:5a:a0:a1:6e:b4:63:
17+
b7:f4:e6:8b:77:8f:49:f7:a9:0c:b3:3d:5a:60:a8:
18+
b8:67:75:b8:d0:ce:ba:ce:65:e5:64:a2:d0:c8:d0:
19+
2c:5b:a8:a5:d3:3f:2c:46:07:e6:b1:b7:a5:65:f8:
20+
9f:89:e1:93:bc:49:cd:55:fd:9b:a1:1e:1e:f7:99:
21+
07:4a:1c:c8:b6:88:a2:5e:77:a5:3f:79:2f:d3:43:
22+
41:f6:cf:ff:78:30:89:12:b1:0c:3f:f5:2f:62:e6:
23+
71:33:02:70:d9:42:1b:e4:07:9c:9d:c7:5e:5b:4e:
24+
93:8f:6b:0e:fe:5b:7e:02:6f:8d:e8:7d:e9:aa:1d:
25+
12:f2:6b:a4:55:61:59:e0:3a:38:b0:14:41:9d:bb:
26+
c6:e0:6a:9d:35:a8:08:f2:3c:29:b9:a7:b2:38:47:
27+
f6:70:1a:b8:d2:d5:c9:48:f0:ee:60:1d:14:77:8a:
28+
2c:38:90:29:7f:42:e4:dd:92:0a:8d:03:88:44:0a:
29+
f0:b6:14:bd:e5:11:50:94:26:fb:3e:ab:17:69:3d:
30+
a6:45:c7:ad:86:41:66:e6:53:e5:dc:d8:4a:04:c7:
31+
af:fb:a7:df:99:77:57:d9:25:7c:67:73:3d:ee:60:
32+
f3:63:2d:68:0f:97:da:68:d5:3d:e5:06:92:82:dd:
33+
90:25
34+
Exponent: 65537 (0x10001)
35+
X509v3 extensions:
36+
X509v3 Subject Key Identifier:
37+
C0:19:81:BB:D6:3D:BB:41:E8:22:1A:08:50:AD:57:FB:E5:B5:EA:9D
38+
X509v3 Authority Key Identifier:
39+
keyid:C0:19:81:BB:D6:3D:BB:41:E8:22:1A:08:50:AD:57:FB:E5:B5:EA:9D
40+
DirName:/C=US/ST=Montana/L=Bozeman/O=wolfSSL/OU=TSA-bad-ku-2048/CN=www.wolfssl.com/emailAddress=info@wolfssl.com
41+
serial:7D:EF:E7:FE:70:74:73:AF:DF:71:6B:D3:BA:FB:D0:4B:A3:50:26:D3
42+
X509v3 Basic Constraints:
43+
CA:FALSE
44+
X509v3 Key Usage: critical
45+
Key Encipherment
46+
X509v3 Extended Key Usage: critical
47+
Time Stamping
48+
Signature Algorithm: sha256WithRSAEncryption
49+
Signature Value:
50+
1c:b5:98:0a:98:28:90:9f:7c:ff:d9:d4:3b:92:3d:b3:7c:d6:
51+
9b:b4:88:59:0d:cd:58:7a:6a:ad:f0:6f:f3:ed:5e:57:d7:14:
52+
3e:64:50:1c:11:33:ab:62:09:f1:8f:58:15:93:25:20:ed:f3:
53+
cb:ed:a3:d2:21:7c:c2:02:14:fa:61:cf:20:13:8a:6b:f1:95:
54+
81:94:e8:d7:fd:24:13:fb:87:e3:2c:fb:4e:d7:ce:46:ab:fd:
55+
21:bc:93:b8:0d:88:2a:76:b6:02:f9:ef:58:fc:36:b5:11:5a:
56+
07:62:0d:a3:1a:e6:77:a7:28:b2:0e:c6:b1:a4:66:52:99:11:
57+
90:11:4a:d7:98:e5:9f:b1:e7:99:fe:a6:66:66:5e:1e:52:bb:
58+
b8:e7:bd:e9:95:d4:03:47:de:c7:cd:f7:58:67:af:12:57:28:
59+
33:a7:34:ef:74:2f:6c:67:43:29:6d:57:80:b4:2d:67:21:2a:
60+
52:41:97:1d:2d:af:2c:c7:1f:c8:20:6d:9a:79:82:f7:a6:3b:
61+
97:5b:1a:bc:f4:2a:d9:df:a6:45:db:a2:c1:83:5a:39:ef:f9:
62+
6f:f7:14:42:30:0f:52:71:6e:6b:05:19:ca:51:4e:a0:f1:4a:
63+
ba:6f:95:46:3d:ea:1a:ab:e3:37:bd:30:ba:b9:b5:30:fd:97:
64+
e4:7a:49:d4
65+
-----BEGIN CERTIFICATE-----
66+
MIIE8zCCA9ugAwIBAgIUfe/n/nB0c6/fcWvTuvvQS6NQJtMwDQYJKoZIhvcNAQEL
67+
BQAwgZgxCzAJBgNVBAYTAlVTMRAwDgYDVQQIDAdNb250YW5hMRAwDgYDVQQHDAdC
68+
b3plbWFuMRAwDgYDVQQKDAd3b2xmU1NMMRgwFgYDVQQLDA9UU0EtYmFkLWt1LTIw
69+
NDgxGDAWBgNVBAMMD3d3dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5m
70+
b0B3b2xmc3NsLmNvbTAeFw0yNjA2MDQyMDM1MzdaFw0yOTAyMjgyMDM1MzdaMIGY
71+
MQswCQYDVQQGEwJVUzEQMA4GA1UECAwHTW9udGFuYTEQMA4GA1UEBwwHQm96ZW1h
72+
bjEQMA4GA1UECgwHd29sZlNTTDEYMBYGA1UECwwPVFNBLWJhZC1rdS0yMDQ4MRgw
73+
FgYDVQQDDA93d3cud29sZnNzbC5jb20xHzAdBgkqhkiG9w0BCQEWEGluZm9Ad29s
74+
ZnNzbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCTdJbwDP3X
75+
KlqgoW60Y7f05ot3j0n3qQyzPVpgqLhndbjQzrrOZeVkotDI0CxbqKXTPyxGB+ax
76+
t6Vl+J+J4ZO8Sc1V/ZuhHh73mQdKHMi2iKJed6U/eS/TQ0H2z/94MIkSsQw/9S9i
77+
5nEzAnDZQhvkB5ydx15bTpOPaw7+W34Cb43ofemqHRLya6RVYVngOjiwFEGdu8bg
78+
ap01qAjyPCm5p7I4R/ZwGrjS1clI8O5gHRR3iiw4kCl/QuTdkgqNA4hECvC2FL3l
79+
EVCUJvs+qxdpPaZFx62GQWbmU+Xc2EoEx6/7p9+Zd1fZJXxncz3uYPNjLWgPl9po
80+
1T3lBpKC3ZAlAgMBAAGjggExMIIBLTAdBgNVHQ4EFgQUwBmBu9Y9u0HoIhoIUK1X
81+
++W16p0wgdgGA1UdIwSB0DCBzYAUwBmBu9Y9u0HoIhoIUK1X++W16p2hgZ6kgZsw
82+
gZgxCzAJBgNVBAYTAlVTMRAwDgYDVQQIDAdNb250YW5hMRAwDgYDVQQHDAdCb3pl
83+
bWFuMRAwDgYDVQQKDAd3b2xmU1NMMRgwFgYDVQQLDA9UU0EtYmFkLWt1LTIwNDgx
84+
GDAWBgNVBAMMD3d3dy53b2xmc3NsLmNvbTEfMB0GCSqGSIb3DQEJARYQaW5mb0B3
85+
b2xmc3NsLmNvbYIUfe/n/nB0c6/fcWvTuvvQS6NQJtMwCQYDVR0TBAIwADAOBgNV
86+
HQ8BAf8EBAMCBSAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDQYJKoZIhvcNAQEL
87+
BQADggEBABy1mAqYKJCffP/Z1DuSPbN81pu0iFkNzVh6aq3wb/PtXlfXFD5kUBwR
88+
M6tiCfGPWBWTJSDt88vto9IhfMICFPphzyATimvxlYGU6Nf9JBP7h+Ms+07Xzkar
89+
/SG8k7gNiCp2tgL571j8NrURWgdiDaMa5nenKLIOxrGkZlKZEZARSteY5Z+x55n+
90+
pmZmXh5Su7jnvemV1ANH3sfN91hnrxJXKDOnNO90L2xnQyltV4C0LWchKlJBlx0t
91+
ryzHH8ggbZp5gvemO5dbGrz0KtnfpkXbosGDWjnv+W/3FEIwD1JxbmsFGcpRTqDx
92+
SrpvlUY96hqr4ze9MLq5tTD9l+R6SdQ=
93+
-----END CERTIFICATE-----

certs/tsa-cert.der

1.25 KB
Binary file not shown.

0 commit comments

Comments
 (0)