Skip to content

Commit 5719241

Browse files
authored
Merge branch 'master' into remove-core-io
2 parents 5c112b7 + 1027689 commit 5719241

File tree

7 files changed

+120
-11
lines changed

7 files changed

+120
-11
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mbedtls/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mbedtls"
3-
version = "0.8.2"
3+
version = "0.9.0"
44
authors = ["Jethro Beekman <[email protected]>"]
55
build = "build.rs"
66
edition = "2018"

mbedtls/src/x509/certificate.rs

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use crate::hash::Type as MdType;
2121
use crate::pk::Pk;
2222
use crate::private::UnsafeFrom;
2323
use crate::rng::Random;
24-
use crate::x509::{self, Time, VerifyCallback};
24+
use crate::x509::{self, Crl, Time, VerifyCallback};
2525

2626
extern "C" {
2727
pub(crate) fn forward_mbedtls_calloc(n: mbedtls_sys::types::size_t, size: mbedtls_sys::types::size_t) -> *mut mbedtls_sys::types::raw_types::c_void;
@@ -226,6 +226,7 @@ impl Certificate {
226226
fn verify_ex<F>(
227227
chain: &MbedtlsList<Certificate>,
228228
trust_ca: &MbedtlsList<Certificate>,
229+
ca_crl: Option<&mut Crl>,
229230
err_info: Option<&mut String>,
230231
cb: Option<F>,
231232
) -> Result<()>
@@ -243,7 +244,7 @@ impl Certificate {
243244
x509_crt_verify(
244245
chain.inner_ffi_mut(),
245246
trust_ca.inner_ffi_mut(),
246-
::core::ptr::null_mut(),
247+
ca_crl.map_or(::core::ptr::null_mut(), |crl| crl.handle_mut()),
247248
::core::ptr::null(),
248249
&mut flags,
249250
f_vrfy,
@@ -269,21 +270,23 @@ impl Certificate {
269270
pub fn verify(
270271
chain: &MbedtlsList<Certificate>,
271272
trust_ca: &MbedtlsList<Certificate>,
273+
ca_crl: Option<&mut Crl>,
272274
err_info: Option<&mut String>,
273275
) -> Result<()> {
274-
Self::verify_ex(chain, trust_ca, err_info, None::<&dyn VerifyCallback>)
276+
Self::verify_ex(chain, trust_ca, ca_crl, err_info, None::<&dyn VerifyCallback>)
275277
}
276278

277279
pub fn verify_with_callback<F>(
278280
chain: &MbedtlsList<Certificate>,
279281
trust_ca: &MbedtlsList<Certificate>,
282+
ca_crl: Option<&mut Crl>,
280283
err_info: Option<&mut String>,
281284
cb: F,
282285
) -> Result<()>
283286
where
284287
F: VerifyCallback + 'static,
285288
{
286-
Self::verify_ex(chain, trust_ca, err_info, Some(cb))
289+
Self::verify_ex(chain, trust_ca, ca_crl, err_info, Some(cb))
287290
}
288291
}
289292

@@ -1014,7 +1017,7 @@ cYp0bH/RcPTC0Z+ZaqSWMtfxRrk63MJQF9EXpDCdvQRcTMD9D85DJrMKn8aumq0M
10141017
chain.push(c_leaf.clone());
10151018
chain.push(c_int1.clone());
10161019

1017-
let err = Certificate::verify(&chain, &mut c_root, None).unwrap_err();
1020+
let err = Certificate::verify(&chain, &mut c_root, None, None).unwrap_err();
10181021
assert_eq!(err, Error::X509CertVerifyFailed);
10191022

10201023
// try again after fixing the chain
@@ -1028,8 +1031,8 @@ cYp0bH/RcPTC0Z+ZaqSWMtfxRrk63MJQF9EXpDCdvQRcTMD9D85DJrMKn8aumq0M
10281031
Ok(())
10291032
};
10301033

1031-
Certificate::verify(&chain, &mut c_root, None).unwrap();
1032-
let res = Certificate::verify_with_callback(&chain, &mut c_root, Some(&mut err_str), verify_callback);
1034+
Certificate::verify(&chain, &mut c_root, None, None).unwrap();
1035+
let res = Certificate::verify_with_callback(&chain, &mut c_root, None, Some(&mut err_str), verify_callback);
10331036

10341037
match res {
10351038
Ok(()) => (),
@@ -1043,15 +1046,15 @@ cYp0bH/RcPTC0Z+ZaqSWMtfxRrk63MJQF9EXpDCdvQRcTMD9D85DJrMKn8aumq0M
10431046
chain.push(c_int1.clone());
10441047
chain.push(c_int2.clone());
10451048

1046-
Certificate::verify(&chain, &mut c_root, None).unwrap();
1049+
Certificate::verify(&chain, &mut c_root, None, None).unwrap();
10471050

10481051
let verify_callback = |_crt: &Certificate, _depth: i32, verify_flags: &mut VerifyError| {
10491052
verify_flags.remove(VerifyError::CERT_EXPIRED);
10501053
Ok(())
10511054
};
10521055

10531056
let mut err_str = String::new();
1054-
let res = Certificate::verify_with_callback(&chain, &mut c_root, Some(&mut err_str), verify_callback);
1057+
let res = Certificate::verify_with_callback(&chain, &mut c_root, None, Some(&mut err_str), verify_callback);
10551058

10561059
match res {
10571060
Ok(()) => (),
@@ -1443,4 +1446,44 @@ cYp0bH/RcPTC0Z+ZaqSWMtfxRrk63MJQF9EXpDCdvQRcTMD9D85DJrMKn8aumq0M
14431446
assert!(crate::tests::TestTrait::<dyn Sync, MbedtlsBox<Certificate>>::new().impls_trait(), "MbedtlsBox<Certificate> should be Sync");
14441447
assert!(crate::tests::TestTrait::<dyn Sync, MbedtlsList<Certificate>>::new().impls_trait(), "MbedtlsList<Certificate> should be Sync");
14451448
}
1449+
1450+
#[test]
1451+
fn empty_crl_test() {
1452+
const C_CERT: &'static str = concat!(include_str!("../../tests/data/certificate.crt"), "\0");
1453+
const C_ROOT: &'static str = concat!(include_str!("../../tests/data/root.crt"), "\0");
1454+
const C_CRL: &'static [u8] = include_bytes!("../../tests/data/root.empty.crl");
1455+
1456+
let mut certs = MbedtlsList::new();
1457+
certs.push(Certificate::from_pem(&C_CERT.as_bytes()).unwrap());
1458+
let mut roots = MbedtlsList::new();
1459+
roots.push(Certificate::from_pem(&C_ROOT.as_bytes()).unwrap());
1460+
1461+
assert!(Certificate::verify(&certs, &roots, None, None).is_ok());
1462+
1463+
let mut crl = Crl::new();
1464+
crl.push_from_der(C_CRL).unwrap();
1465+
assert!(Certificate::verify(&certs, &roots, Some(&mut crl), None).is_ok());
1466+
}
1467+
1468+
#[test]
1469+
fn revoked_cert_crl_test() {
1470+
const C_CERT: &'static str = concat!(include_str!("../../tests/data/certificate.crt"), "\0");
1471+
const C_ROOT: &'static str = concat!(include_str!("../../tests/data/root.crt"), "\0");
1472+
const C_CRL: &'static [u8] = include_bytes!("../../tests/data/root.revoked.crl");
1473+
1474+
let mut certs = MbedtlsList::new();
1475+
certs.push(Certificate::from_pem(&C_CERT.as_bytes()).unwrap());
1476+
let mut roots = MbedtlsList::new();
1477+
roots.push(Certificate::from_pem(&C_ROOT.as_bytes()).unwrap());
1478+
1479+
let mut crl = Crl::new();
1480+
crl.push_from_der(C_CRL).unwrap();
1481+
1482+
let mut err = String::new();
1483+
assert_eq!(
1484+
Certificate::verify(&certs, &roots, Some(&mut crl), Some(&mut err)).unwrap_err(),
1485+
Error::X509CertVerifyFailed
1486+
);
1487+
assert_eq!(err, "The certificate has been revoked (is on a CRL)\n");
1488+
}
14461489
}

mbedtls/tests/data/certificate.crt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
-----BEGIN CERTIFICATE-----
2+
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
34+
-----END CERTIFICATE-----

mbedtls/tests/data/root.crt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFezCCA2OgAwIBAgIJAMc0/p4v7aKUMA0GCSqGSIb3DQEBCwUAMFMxCzAJBgNV
3+
BAYTAkJFMRcwFQYDVQQIDA5WbGFhbXMtQnJhYmFudDEZMBcGA1UECgwQQ2VydGlm
4+
aWNhdGVzLmluYzEQMA4GA1UEAwwHUm9vdCBDQTAgFw0yMDA2MTIxMTUyMzVaGA8y
5+
MTIwMDUxOTExNTIzNVowUzELMAkGA1UEBhMCQkUxFzAVBgNVBAgMDlZsYWFtcy1C
6+
cmFiYW50MRkwFwYDVQQKDBBDZXJ0aWZpY2F0ZXMuaW5jMRAwDgYDVQQDDAdSb290
7+
IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAywObiGKXKi1O735I
8+
JNHzYduXmnTJUmIASXWMab61ebjGCD38f1gFl6f6x8jAl0zZpijQA7b1/q1GCWIJ
9+
7ODG4D/R3VHletlxBkNP/3pxq84kdohGtwtf+qIsHXjND7u5fC0jensklFG14EGE
10+
CTTRceSPXpv7H9qO0eaBoNWjY3y5T8ZXK1HakEJJjiDXtPgybRZDN1FsG6w71zED
11+
Lqvjvee7VAuOtCwl6R9Veq6buRPAASC9MlpRIuQJLo4lcVBEO5HIx2Ji4+SV+w6e
12+
m5XfXCPPwGGazL2b64BGicL3ZsrsKEC+ogXrcvLD47Rvag3k6Km4sOvsRtkloKol
13+
8kjaf2LUyNh/VW1wPq6l6WkUuYyDKUeuHD7C5yBysrXJcwjE4P0JAiDQuNXzW8oA
14+
2khYidgK4qTMCvLO4RlWiZxS/+xrp3yquXmxTFm61/vPJQUDK2g6vqiOV5wKIewa
15+
zZGVpHqdS7PenQZ1cIKVkEOI7NdPWU2MqS8QL9A/7dRfAC8nI4fp6bsuZwjQbwKH
16+
gufmJ8XdKzOzpITIihwkdIJnzka9JSLsAdEFHCwfQpzwRqpn0KbIBoRXk0FszEYO
17+
vfzwUcIGJW+tUIrrwIQhhIvB6qVeTJn4lzgpsCo10PMXPDc9Zt9BS6J6EP2k9KVp
18+
T0fgq12G9LtWX3UAs1hExkHrEpECAwEAAaNQME4wHQYDVR0OBBYEFESWpzE/jHgr
19+
0hd8gRsnmvqtYSsFMB8GA1UdIwQYMBaAFESWpzE/jHgr0hd8gRsnmvqtYSsFMAwG
20+
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBABxR8KEu4RFLdrC+QLAumBG4
21+
9Agcc2e2VUHkWEZlRsBGzr9MBC3jfhTld06hLl7QO2HVuxlOdHfvWr621QQIckB9
22+
cBNmoGKghnIF78IM044+GAYc3/TzhVLyjd9JKFtB6hfR1S0254zO/RdquQoH8DSP
23+
C5XmfnnQ3fA6AC/yIImRaN0oEfFTMt7tiri6UndTgvRVSEm2blvydsnKXMpxNQz3
24+
s424ZJSIoUv+d1Gm/7phB3yPltcleQSylV+Fsw29L63iTFEnagwgAOcfWYNBUvrj
25+
13UvI0EoYjwEA1y6e/9XH89OU7Rtgo81n7//KuDglwKA9PggAiYZ/o1u6540uqg1
26+
2GX727xJlShdW7hJtGxSF6CQUBzXMXcXYxnXBXHPUsY7vnWb/7ex5o1OIw6Msdp2
27+
xiRUVuMOTkwxAvi/z81oe11P1pE1p3ySuk9O87ebc2T5dYyYlZXQTymzAAgY4mVH
28+
LYFfrcdObyy47yiURbVR2T1bZQ8Q7ehN1qb02wMPNk3mFrnLFNQRM3/lmfPVZeUU
29+
5ACuqvooW4ieLrPcFfKhGblrDsnDhY7xngHeBi+QNMmqTqYR+skUGhxRX6VLsTlC
30+
1wrBd8pUeMJU6Oj30KYop9xgWhGfrgkn8Z/C3LLC4C6mjUx6AU7mXPI3UqxZ2Z83
31+
uv5959EBeVGwRDi6WT8u
32+
-----END CERTIFICATE-----

mbedtls/tests/data/root.empty.crl

690 Bytes
Binary file not shown.

mbedtls/tests/data/root.revoked.crl

712 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)