Skip to content

Commit 51c851b

Browse files
authored
Try #225:
2 parents 8b17c8f + 25316b0 commit 51c851b

File tree

13 files changed

+382
-363
lines changed

13 files changed

+382
-363
lines changed

.travis.yml

+8-9
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,26 @@ branches:
88
- master
99
language: rust
1010
os: linux
11-
dist: xenial
11+
dist: focal
1212
addons:
1313
apt:
14+
sources:
15+
- sourceline: "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-11 main"
16+
key_url: "https://apt.llvm.org/llvm-snapshot.gpg.key"
1417
packages:
15-
- llvm-3.8-dev
16-
- libclang-3.8-dev
17-
- clang-3.8
18+
- clang-11
1819
- cmake
1920
rust:
2021
- stable
2122
- beta
2223
- nightly
23-
- nightly-2019-07-01
24-
- nightly-2019-10-28
24+
- nightly-2021-03-25
2525
env:
2626
global:
2727
- RUST_BACKTRACE=1
2828
# Pinned to this particular nightly version because of core_io. This can be
2929
# re-pinned whenever core_io is updated to the latest nightly.
30-
- CORE_IO_NIGHTLY=nightly-2019-07-01
31-
- SGX_NIGHTLY=nightly-2019-10-28
32-
- LLVM_CONFIG_PATH=llvm-config-3.8
30+
- CORE_IO_NIGHTLY=nightly-2021-03-25
31+
- SGX_NIGHTLY=nightly-2021-03-25
3332
script:
3433
- ./ct.sh

ct.sh

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ if [ $TRAVIS_RUST_VERSION = "stable" ] || [ $TRAVIS_RUST_VERSION = "beta" ] || [
2222
cargo test --features pkcs12_rc2
2323
cargo test --features force_aesni_support
2424
cargo test --features dsa
25+
# without these, tests marked with tokio::test do not run, but report OK.
26+
cargo test --features=std,threading,tokio,tokio/net,tokio/io-util,tokio/macros,tokio/rt
2527

2628
elif [ $TRAVIS_RUST_VERSION = $CORE_IO_NIGHTLY ]; then
2729
cargo +$CORE_IO_NIGHTLY test --no-default-features --features core_io,rdrand,time,custom_time,custom_gmtime_r

mbedtls/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ tokio = { version = "0.3", optional = true }
3636
rs-libc = "0.1.0"
3737

3838
[dependencies.mbedtls-sys-auto]
39-
version = "2.25.2"
39+
version = "2.28.0"
4040
default-features = false
4141
features = ["custom_printf", "trusted_cert_callback"]
4242

@@ -92,7 +92,7 @@ required-features = ["std"]
9292
[[test]]
9393
name = "async_session"
9494
path = "tests/async_session.rs"
95-
required-features = ["std", "threading", "tokio", "tokio/net", "tokio/io-util", "tokio/macros"]
95+
required-features = ["std", "threading", "tokio", "tokio/net", "tokio/io-util", "tokio/macros", "tokio/rt"]
9696

9797
[[test]]
9898
name = "client_server"

mbedtls/src/bignum/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ impl Mpi {
173173
mpi_write_string(
174174
&self.inner,
175175
radix,
176-
buf.as_mut_ptr() as *mut i8,
176+
buf.as_mut_ptr() as *mut _,
177177
buf.len(),
178178
&mut olen,
179179
)

mbedtls/src/pk/mod.rs

+26-14
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ extern "C" fn alloc_custom_pk_ctx() -> *mut c_void {
111111
}
112112

113113
unsafe extern "C" fn free_custom_pk_ctx(p: *mut c_void) {
114-
Box::from_raw(p as *mut CustomPkContext);
114+
let _ = Box::from_raw(p as *mut CustomPkContext);
115115
}
116116

117117
extern "C" fn custom_pk_can_do(_t: u32) -> i32 {
@@ -129,7 +129,7 @@ const CUSTOM_PK_INFO: pk_info_t = {
129129
sign_func: None,
130130
verify_func: None,
131131
get_bitlen: None,
132-
name: b"\0" as *const u8 as *const i8,
132+
name: b"\0" as *const u8 as *const _,
133133
ctx_alloc_func: Some(alloc_custom_pk_ctx),
134134
ctx_free_func: Some(free_custom_pk_ctx),
135135
}
@@ -953,7 +953,7 @@ impl Pk {
953953
#[cfg(test)]
954954
mod tests {
955955
use super::*;
956-
use crate::hash::Type;
956+
use crate::hash::{Type, MdInfo};
957957
use crate::pk::Type as PkType;
958958

959959
// This is test data that must match library output *exactly*
@@ -1155,7 +1155,7 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
11551155
fn rsa_sign_verify_pkcs1v15() {
11561156
let mut pk =
11571157
Pk::generate_rsa(&mut crate::test_support::rand::test_rng(), 2048, 0x10001).unwrap();
1158-
let data = b"SIGNATURE TEST SIGNATURE TEST SI";
1158+
let data = b"SIGNATURE TEST SIGNATURE TEST SIGNATURE TEST SIGNATURE TEST SIGN";
11591159
let mut signature = vec![0u8; (pk.len() + 7) / 8];
11601160

11611161
let digests = [
@@ -1171,24 +1171,30 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
11711171
Type::Ripemd,
11721172
];
11731173

1174-
for digest in &digests {
1174+
for &digest in &digests {
1175+
let data = if let Some(md @ MdInfo { .. }) = digest.into() {
1176+
&data[..md.size()]
1177+
} else {
1178+
&data[..]
1179+
};
1180+
11751181
let len = pk
11761182
.sign(
1177-
*digest,
1183+
digest,
11781184
data,
11791185
&mut signature,
11801186
&mut crate::test_support::rand::test_rng(),
11811187
)
11821188
.unwrap();
1183-
pk.verify(*digest, data, &signature[0..len]).unwrap();
1189+
pk.verify(digest, data, &signature[0..len]).unwrap();
11841190
}
11851191
}
11861192

11871193
#[test]
11881194
fn rsa_sign_verify_pss() {
11891195
let mut pk =
11901196
Pk::generate_rsa(&mut crate::test_support::rand::test_rng(), 2048, 0x10001).unwrap();
1191-
let data = b"SIGNATURE TEST SIGNATURE TEST SI";
1197+
let data = b"SIGNATURE TEST SIGNATURE TEST SIGNATURE TEST SIGNATURE TEST SIGN";
11921198
let mut signature = vec![0u8; (pk.len() + 7) / 8];
11931199

11941200
let digests = [
@@ -1204,15 +1210,21 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
12041210
Type::Ripemd,
12051211
];
12061212

1207-
for digest in &digests {
1213+
for &digest in &digests {
1214+
let data = if let Some(md @ MdInfo { .. }) = digest.into() {
1215+
&data[..md.size()]
1216+
} else {
1217+
&data[..]
1218+
};
1219+
12081220
pk.set_options(Options::Rsa {
1209-
padding: RsaPadding::Pkcs1V21 { mgf: *digest },
1221+
padding: RsaPadding::Pkcs1V21 { mgf: digest },
12101222
});
12111223

1212-
if *digest == Type::None {
1224+
if digest == Type::None {
12131225
assert!(pk
12141226
.sign(
1215-
*digest,
1227+
digest,
12161228
data,
12171229
&mut signature,
12181230
&mut crate::test_support::rand::test_rng()
@@ -1221,13 +1233,13 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
12211233
} else {
12221234
let len = pk
12231235
.sign(
1224-
*digest,
1236+
digest,
12251237
data,
12261238
&mut signature,
12271239
&mut crate::test_support::rand::test_rng(),
12281240
)
12291241
.unwrap();
1230-
pk.verify(*digest, data, &signature[0..len]).unwrap();
1242+
pk.verify(digest, data, &signature[0..len]).unwrap();
12311243
}
12321244
}
12331245
}

mbedtls/src/pkcs12/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,7 @@ impl BERDecodable for EncryptedData {
356356

357357
// EncryptedContentInfo from PKCS7 see RFC 2315 section 10.1
358358
#[derive(Debug, Clone)]
359+
#[allow(dead_code)]
359360
struct EncryptedContentInfo {
360361
content_type: ObjectIdentifier,
361362
encryption_algo: AlgorithmIdentifier,
@@ -458,6 +459,7 @@ enum Pkcs12BagSet {
458459
}
459460

460461
#[derive(Debug, Clone)]
462+
#[allow(dead_code)]
461463
struct SafeBag {
462464
bag_id: ObjectIdentifier,
463465
bag_value: Pkcs12BagSet,

mbedtls/src/x509/certificate.rs

+11-3
Original file line numberDiff line numberDiff line change
@@ -940,17 +940,25 @@ cYp0bH/RcPTC0Z+ZaqSWMtfxRrk63MJQF9EXpDCdvQRcTMD9D85DJrMKn8aumq0M
940940
let mut c_int2 = Certificate::from_pem(C_INT2.as_bytes()).unwrap();
941941
let mut c_root = Certificate::from_pem(C_ROOT.as_bytes()).unwrap();
942942

943+
let mut err_str = String::new();
943944
{
944945
let mut chain = List::from(&mut c_leaf);
945946
chain.push_back(&mut c_int1);
946947

947948
// incomplete chain
948-
let err = LinkedCertificate::verify((&mut chain).into(), &mut c_root, None).unwrap_err();
949-
assert_eq!(err, Error::X509CertVerifyFailed);
949+
let res = LinkedCertificate::verify((&mut chain).into(), &mut c_root, Some(&mut err_str));
950+
if let Err(ref err) = res {
951+
eprintln!("Testing incomplete chain, err_info: {}, err: {:?}", err_str, err);
952+
}
953+
assert_eq!(res, Err(Error::X509CertVerifyFailed));
950954

951955
// try again after fixing the chain
952956
chain.push_back(&mut c_int2);
953-
LinkedCertificate::verify((&mut chain).into(), &mut c_root, None).unwrap();
957+
let res = LinkedCertificate::verify((&mut chain).into(), &mut c_root, Some(&mut err_str));
958+
if let Err(ref err) = res {
959+
eprintln!("Testing fixed chain, err_info: {}, err: {:?}", err_str, err);
960+
}
961+
assert_eq!(res, Ok(()));
954962
}
955963

956964
#[cfg(feature = "std")]

mbedtls/src/x509/mod.rs

-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ pub use self::profile::Profile;
2828
use mbedtls_sys::*;
2929
use mbedtls_sys::types::raw_types::c_uint;
3030
bitflags! {
31-
#[doc(inline)]
3231
pub struct KeyUsage: c_uint {
3332
const DIGITAL_SIGNATURE = X509_KU_DIGITAL_SIGNATURE as c_uint;
3433
const NON_REPUDIATION = X509_KU_NON_REPUDIATION as c_uint;
@@ -43,7 +42,6 @@ bitflags! {
4342
}
4443

4544
bitflags! {
46-
#[doc(inline)]
4745
pub struct VerifyError: u32 {
4846
const CERT_BAD_KEY = X509_BADCERT_BAD_KEY as u32;
4947
const CERT_BAD_MD = X509_BADCERT_BAD_MD as u32;

mbedtls/tests/data/chain-int1.crt

+26-38
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,27 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIGzzCCBLegAwIBAgIQZoWHPbepRCfYecs3K24LwjANBgkqhkiG9w0BAQsFADBg
3-
MQswCQYDVQQGEwJOTDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMTEw
4-
LwYDVQQDDChTdGFhdCBkZXIgTmVkZXJsYW5kZW4gRVYgSW50ZXJtZWRpYWlyIENB
5-
MB4XDTE1MDMwNTAwMDAwMFoXDTIyMTIwNTIzNTk1OVowUjELMAkGA1UEBhMCTkwx
6-
HjAcBgNVBAoMFVF1b1ZhZGlzIFRydXN0bGluayBCVjEjMCEGA1UEAwwaUXVvVmFk
7-
aXMgUEtJb3ZlcmhlaWQgRVYgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
8-
AoICAQDbVZ64lpUM4W3Y99gDgvHNhmKSbILLYyLJ1Aws+DklXLkTnrjYhe1tZ6ev
9-
q+mf7Q9K+kHmbi85g02yGgGD1/6NRs1PePkykoZ7NbZysLvemGcBAG1Qu1xM7V5g
10-
Xu4iXJNr2MWQ03ey8l4UeKIlPLXlNNBR9y5+eD2p66oXIzxs9oglIt/lfazMpgBv
11-
OfYjwRY6ZwVIkCga1QM7HaafTKKBXY6dF9NlkMbEjMLr4ZtkmD11lHIAeTWi+nDA
12-
QlPp7m1CcPcNhgs0EfHUZ16uxyMysEFncdIuGxdLPYBM92/Dk0Fdf6IKZJ/DUHg9
13-
Rxk1nU5Lg/hAy+IDw39Ph90XOIQNVL/FY3dNijwvrSOOw1GOc+nBPsgwakq12FMK
14-
3KPZePpiSvz4cExS+UkAoKL+R6m9t5Y5R/iyyP0vUqiHwzwS0d0EICORfIBuc/5h
15-
KqPoGiMkDdAHDLW7sryMHxow8jHrtKX4AKhYOYLx8+ICQVPVlESiZJmBpQpeFCCX
16-
lNV8KYLOlzLlToK3jQnYEJHYSBAyMxw8qOrUBeAeUVGEKWGiEExV1QvINqY2Je8/
17-
sGzxCTywh7U6eanhk3kBSjm7XEtUaZRgWESu8XT/2Prx8nwo7Qg2ceZt7GyFoRC3
18-
lkjninibjU/FVLNxVDzoJWVluwMLfQ/q/e8Ypqv2qA7PeG14yQIDAQABo4IBkTCC
19-
AY0wEgYDVR0TAQH/BAgwBgEB/wIBADBGBgNVHR8EPzA9MDugOaA3hjVodHRwOi8v
20-
Y3JsLnBraW92ZXJoZWlkLm5sL0VWSW50ZXJtZWRpYWlyTGF0ZXN0Q1JMLmNybDAO
21-
BgNVHQ8BAf8EBAMCAQYwQAYDVR0gBDkwNzA1BglghBABh2sBAgcwKDAmBggrBgEF
22-
BQcCARYaaHR0cHM6Ly9jcHMucGtpb3ZlcmhlaWQubmwwHQYDVR0OBBYEFJT/524L
23-
qW/j4ZFZyghezbfFCDxpMB8GA1UdIwQYMBaAFCWA69ifpsMRQTfHeFmIHmnvsdPq
24-
MCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwkwdAYIKwYB
25-
BQUHAQEEaDBmMCYGCCsGAQUFBzABhhpodHRwOi8vb2NzcC5wa2lvdmVyaGVpZC5u
26-
bDA8BggrBgEFBQcwAoYwaHR0cHM6Ly9jZXJ0LnBraW92ZXJoZWlkLm5sL0VWSW50
27-
ZXJtZWRpYWlyQ0EuY2VyMA0GCSqGSIb3DQEBCwUAA4ICAQBG13UeK3Vqtf6oKaKq
28-
rWB4eq/vW0cXwwha4dt/pZvbctUIVh8bmI7MUG3Y+aRijIGX9VVRFcHHtZpf3agl
29-
mmTC0A81m9OdS7E4fOeDNkobQVbn1QIf/w4sY+IWL+lz0Zz+WYYI6t0HdbKB+lM2
30-
PqQ+gyn59z5D6Y9dH4Ad5PTGSIMb/KBuYtIjybOEs2ojSkjQjY+gP+FWQ4sT23Bx
31-
5krw9DfQ0P7AYqiiwJxeUJQakJnVKGPvi+klNo8Bz8pRcNIlcKeP8rcThtSlc2Pq
32-
S0HnUdPMh2xMXLz2a86D5CUIePQ8bUFlHcDD/ZbkOwlS7b32Ir9VlFTcGislMew+
33-
FcfI9HSxxDDUIgvYoidUCfNTGtdlm5BrrojsWlbHmqkeIZjw2cAot7TBx2HPOht6
34-
x7F1nqYu67hgkaKkSPzcmpPPxJm4Zij4sAtlWbkbm4go51II3llIyYZ9oU14lwnh
35-
majXgGrGjne8ImxgwDwiRGC9ncLOaecRiJ8N4yFvQagHh0wjAybA5de5BdgleTht
36-
8TtMnGOu0nrokTg3mxTl6M/X6E2lX/5SCW3aDpUvZxdDxr3K+OeueN3qRXAMG3dm
37-
3IjbWjDBFOP7sARzw7Mh9OjqOWhuZyBpFrw+WsNp76RiOuhKrowBv2GrdP1ISC4h
38-
K9QIuNKeITRwULvrY75Z565vAg==
39-
-----END CERTIFICATE-----
2+
MIIEkjCCA3qgAwIBAgITBn+USionzfP6wq4rAfkI7rnExjANBgkqhkiG9w0BAQsF
3+
ADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNj
4+
b3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4x
5+
OzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1
6+
dGhvcml0eSAtIEcyMB4XDTE1MDUyNTEyMDAwMFoXDTM3MTIzMTAxMDAwMFowOTEL
7+
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv
8+
b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj
9+
ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM
10+
9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw
11+
IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6
12+
VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L
13+
93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm
14+
jgSubJrIqg0CAwEAAaOCATEwggEtMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/
15+
BAQDAgGGMB0GA1UdDgQWBBSEGMyFNOy8DJSULghZnMeyEE4KCDAfBgNVHSMEGDAW
16+
gBScXwDfqgHXMCs4iKK4bUqc8hGRgzB4BggrBgEFBQcBAQRsMGowLgYIKwYBBQUH
17+
MAGGImh0dHA6Ly9vY3NwLnJvb3RnMi5hbWF6b250cnVzdC5jb20wOAYIKwYBBQUH
18+
MAKGLGh0dHA6Ly9jcnQucm9vdGcyLmFtYXpvbnRydXN0LmNvbS9yb290ZzIuY2Vy
19+
MD0GA1UdHwQ2MDQwMqAwoC6GLGh0dHA6Ly9jcmwucm9vdGcyLmFtYXpvbnRydXN0
20+
LmNvbS9yb290ZzIuY3JsMBEGA1UdIAQKMAgwBgYEVR0gADANBgkqhkiG9w0BAQsF
21+
AAOCAQEAYjdCXLwQtT6LLOkMm2xF4gcAevnFWAu5CIw+7bMlPLVvUOTNNWqnkzSW
22+
MiGpSESrnO09tKpzbeR/FoCJbM8oAxiDR3mjEH4wW6w7sGDgd9QIpuEdfF7Au/ma
23+
eyKdpwAJfqxGF4PcnCZXmTA5YpaP7dreqsXMGz7KQ2hsVxa81Q4gLv7/wmpdLqBK
24+
bRRYh5TmOTFffHPLkIhqhBGWJ6bt2YFGpn6jcgAKUj6DiAdjd4lpFw85hdKrCEVN
25+
0FE6/V1dN2RMfjCyVSRCnTawXZwXgWHxyvkQAiSr6w10kY17RSlQOYiypok1JR4U
26+
akcjMS9cmvqtmg5iUaQqqcT5NJ0hGA==
27+
-----END CERTIFICATE-----

mbedtls/tests/data/chain-int2.crt

+25-37
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,26 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIGtjCCBJ6gAwIBAgIEAJiY6DANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO
3-
TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh
4-
dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xNDAyMjcxMDEzMzNaFw0y
5-
MjEyMDYyMzAwMDBaMGAxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg
6-
TmVkZXJsYW5kZW4xMTAvBgNVBAMMKFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBJ
7-
bnRlcm1lZGlhaXIgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC5
8-
Rzy6N7i3d9dae5wh792y9H+4DvtSgoZFO9PdtH+EXv1eGzfSmibssm+Z/azvJCSe
9-
6UsfgCJDuznSHJs65he19XqqsOEnZtmlpb1YzHIKYLQs6KNoh2Nlfhl8X1KTrmNl
10-
so19ltcC26uqzERSKe+poM20JOjItX3UHacawphbHSvRDg9ksMyw9v3RHim2hZUu
11-
AaPNRnKI0QHIdF3cNldy7h/qY7tZj5FDKOSyz3Yl0bt/3XgzUoEQqq6SZZcqvgLN
12-
41gsretJvEoTmg1pZ2LLrhVFLaGwW3NWZ139NVsw2Vc/6gX9t7FRkJZIu21C9o6x
13-
EC2agJ98DjvDqJ6tpqdmmpbZYnRijAHApDYcdqiOOeJjshO0MU3Qr0T6fOdFeEgC
14-
2MuTGrFmgqWuOM89zh6MTa5dGlpAY1cdAY114BsFxzbSgylhE2PowjHWt9qZDBP+
15-
mFR0sY0KWJfKHUPAoNdlQpsuQxBaqIKYPzVrpBKAbKRt2ieHWh+oN2ml552Fj/Db
16-
naTN7eg9WxZkaRYkXIBFHBlcI6VRD5od7DwFE72Tg3kdKY76DPE7GJqoJOWRtAPd
17-
n0h2qTjWDZlb/Vi2GfAFlKwbv/NEBcPOxZvT1cX6U+QjJNfxxpl+tDhSKcJC0nQS
18-
gRgaWIdthEB7p95mHCnd+aPyaxr7THNWnrunmcgeCQIDAQABo4IBfjCCAXowDwYD
19-
VR0TAQH/BAUwAwEB/zBABgNVHSAEOTA3MDUGCWCEEAGHawECBzAoMCYGCCsGAQUF
20-
BwIBFhpodHRwczovL2Nwcy5wa2lvdmVyaGVpZC5ubDAiBgNVHREEGzAZpBcwFTET
21-
MBEGA1UEAwwKUEtJbzQwOTYtMTBxBggrBgEFBQcBAQRlMGMwLAYIKwYBBQUHMAGG
22-
IGh0dHA6Ly9ldnJvb3RvY3NwLnBraW92ZXJoZWlkLm5sMDMGCCsGAQUFBzAChido
23-
dHRwOi8vY2VydC5wa2lvdmVyaGVpZC5ubC9FVlJvb3RDQS5jZXIwDgYDVR0PAQH/
24-
BAQDAgEGMB8GA1UdIwQYMBaAFP6rAJCYniT8qcwaivsnuL8wbqg7MD4GA1UdHwQ3
25-
MDUwM6AxoC+GLWh0dHA6Ly9jcmwucGtpb3ZlcmhlaWQubmwvRVZSb290TGF0ZXN0
26-
Q1JMLmNybDAdBgNVHQ4EFgQUJYDr2J+mwxFBN8d4WYgeae+x0+owDQYJKoZIhvcN
27-
AQELBQADggIBADBPL5cBEhj13IZtpnvYecm6p+vyfDKElr5zsIcodEp3NPNQp3Jr
28-
Hu0gO7Kend+bLK9TbP+SSEnqrDzA+2shxvrPbYu1K/5z7T2AVpegXJ/RlXIijU5H
29-
MJB3njUik533OSQmHVp9M0ukMGTbkqeG11vH3l0TvF5IstSXebwXc2882B5LcVSw
30-
mJsDNNb6OlIBZcOJ8YosHg/68fgSmYYBvfzqCXTpHQxrYJY54JSauudrgMYE1dFw
31-
Fcx9qAl9uCsRF3MqkccNfIlp04fPc25CysKYrRH68bbMSa89Y40Pbm0U8T+wWXa9
32-
NuH4a1WMdC96cQRnKlKbtxqeaCC+0timmFwFrkzj7Umg8DTNMfWHQL2ZquHJpeL5
33-
RrvhBoG5DyWGnmPJIMwEvLyT6rmMHzvbeJRqyGZ/WCOWPUheH4YL3TElhNOww/H8
34-
toqa0ywsdQN9vQJHla6ZpIFYFhU+TBFleTznoqXAAcuq6uElZq2eT9pQuYtezcTw
35-
vBbcuO/Rg1/MaaCW3wg4MlJ8mOpKk8i/pWNqQ87yCbfKNbJtmlqVDslhugKYTqGy
36-
1yj/aNVFFpI4gbEUXFC7qiu3pQK3tX77Fx66dK8S+Ni8HuaUVfIXJD15durfhGe0
37-
RpNCkC7QKfTKpoXoS8wr26lvWCCPtghUMuXUzRvqKm7aF0JepBqDK9x/
38-
-----END CERTIFICATE-----
2+
MIIEdTCCA12gAwIBAgIJAKcOSkw0grd/MA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
3+
BAYTAlVTMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTIw
4+
MAYDVQQLEylTdGFyZmllbGQgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
5+
eTAeFw0wOTA5MDIwMDAwMDBaFw0zNDA2MjgxNzM5MTZaMIGYMQswCQYDVQQGEwJV
6+
UzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTElMCMGA1UE
7+
ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjE7MDkGA1UEAxMyU3RhcmZp
8+
ZWxkIFNlcnZpY2VzIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEi
9+
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVDDrEKvlO4vW+GZdfjohTsR8/
10+
y8+fIBNtKTrID30892t2OGPZNmCom15cAICyL1l/9of5JUOG52kbUpqQ4XHj2C0N
11+
Tm/2yEnZtvMaVq4rtnQU68/7JuMauh2WLmo7WJSJR1b/JaCTcFOD2oR0FMNnngRo
12+
Ot+OQFodSk7PQ5E751bWAHDLUu57fa4657wx+UX2wmDPE1kCK4DMNEffud6QZW0C
13+
zyyRpqbn3oUYSXxmTqM6bam17jQuug0DuDPfR+uxa40l2ZvOgdFFRjKWcIfeAg5J
14+
Q4W2bHO7ZOphQazJ1FTfhy/HIrImzJ9ZVGif/L4qL8RVHHVAYBeFAlU5i38FAgMB
15+
AAGjgfAwge0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0O
16+
BBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMB8GA1UdIwQYMBaAFL9ft9HO3R+G9FtV
17+
rNzXEMIOqYjnME8GCCsGAQUFBwEBBEMwQTAcBggrBgEFBQcwAYYQaHR0cDovL28u
18+
c3MyLnVzLzAhBggrBgEFBQcwAoYVaHR0cDovL3guc3MyLnVzL3guY2VyMCYGA1Ud
19+
HwQfMB0wG6AZoBeGFWh0dHA6Ly9zLnNzMi51cy9yLmNybDARBgNVHSAECjAIMAYG
20+
BFUdIAAwDQYJKoZIhvcNAQELBQADggEBACMd44pXyn3pF3lM8R5V/cxTbj5HD9/G
21+
VfKyBDbtgB9TxF00KGu+x1X8Z+rLP3+QsjPNG1gQggL4+C/1E2DUBc7xgQjB3ad1
22+
l08YuW3e95ORCLp+QCztweq7dp4zBncdDQh/U90bZKuCJ/Fp1U1ervShw3WnWEQt
23+
8jxwmKy6abaVd38PMV4s/KCHOkdp8Hlf9BRUpJVeEXgSYCfOn8J3/yNTd126/+pZ
24+
59vPr5KW7ySaNRB6nJHGDn2Z9j8Z3/VyVOEVqQdZe4O/Ui5GjLIAZHYcSNPYeehu
25+
VsyuLAOQ1xk4meTKCRlb/weWsKh/NEnfVqn3sF/tM+2MR7cwA130A4w=
26+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)