Skip to content

Commit 222f499

Browse files
committed
Make verify_for_name a bit more ergonomic; add a smoketest.
1 parent 4a2a921 commit 222f499

File tree

4 files changed

+21
-2
lines changed

4 files changed

+21
-2
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ include = [
3838
"src/name.rs",
3939
"src/name/dns_name.rs",
4040
"src/name/ip_address.rs",
41+
"src/name/name.rs",
4142
"src/name/verify.rs",
4243
"src/signed_data.rs",
4344
"src/time.rs",

src/end_entity.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ impl<'a> EndEntityCert<'a> {
140140
}
141141

142142
/// Verifies that the certificate is valid for the given DNS host name.
143-
pub fn verify_for_name(&self, name: Name) -> Result<(), Error> {
144-
match name {
143+
pub fn verify_for_name<'n>(&self, name: impl Into<Name<'n>>) -> Result<(), Error> {
144+
match name.into() {
145145
Name::DnsName(dns_name) => name::verify_cert_dns_name(&self, dns_name),
146146
}
147147
}

src/name/name.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,10 @@ pub enum Name<'a> {
2121
/// A DNS name.
2222
DnsName(DnsNameRef<'a>),
2323
}
24+
25+
impl<'a> From<DnsNameRef<'a>> for Name<'a> {
26+
#[inline]
27+
fn from(name: DnsNameRef<'a>) -> Self {
28+
Self::DnsName(name)
29+
}
30+
}

tests/integration.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1414

1515
use core::convert::TryFrom;
16+
1617
extern crate webpki;
18+
use webpki::Error;
1719

1820
static ALL_SIGALGS: &[&webpki::SignatureAlgorithm] = &[
1921
&webpki::ECDSA_P256_SHA256,
@@ -51,6 +53,15 @@ pub fn netflix() {
5153
Ok(()),
5254
cert.verify_is_valid_tls_server_cert(ALL_SIGALGS, &anchors, &[inter], time)
5355
);
56+
57+
let name = webpki::DnsNameRef::try_from_ascii_str("netflix.com").unwrap();
58+
assert_eq!(Ok(()), cert.verify_for_name(name));
59+
60+
let wrong_name = webpki::DnsNameRef::try_from_ascii_str("netflix.co").unwrap();
61+
assert_eq!(
62+
Err(Error::CertNotValidForName),
63+
cert.verify_for_name(wrong_name)
64+
);
5465
}
5566

5667
#[test]

0 commit comments

Comments
 (0)