Skip to content

Commit 52e685d

Browse files
committed
Use new rustls-pki-types PEM API
1 parent 3b2df50 commit 52e685d

File tree

5 files changed

+24
-51
lines changed

5 files changed

+24
-51
lines changed

Cargo.lock

Lines changed: 4 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ rust-version = "1.63"
1313
exclude = ["/.github", "/examples", "/scripts"]
1414

1515
[dependencies]
16-
rustls = { version = "0.23.5", default-features = false, features = ["std"] }
16+
rustls = { version = "0.23.15", default-features = false, features = ["std"] }
1717
tokio = "1.0"
1818

1919
[features]
@@ -31,6 +31,5 @@ argh = "0.1.1"
3131
futures-util = "0.3.1"
3232
lazy_static = "1.1"
3333
rcgen = { version = "0.13", features = ["pem"] }
34-
rustls-pemfile = "2"
3534
tokio = { version = "1.0", features = ["full"] }
3635
webpki-roots = "0.26"

examples/client.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
use std::error::Error as StdError;
2-
use std::fs::File;
32
use std::io;
4-
use std::io::BufReader;
53
use std::net::ToSocketAddrs;
64
use std::path::PathBuf;
75
use std::sync::Arc;
86

97
use argh::FromArgs;
10-
use rustls::pki_types::ServerName;
8+
use rustls::pki_types::pem::PemObject;
9+
use rustls::pki_types::{CertificateDer, ServerName};
1110
use tokio::io::{copy, split, stdin as tokio_stdin, stdout as tokio_stdout, AsyncWriteExt};
1211
use tokio::net::TcpStream;
1312
use tokio_rustls::{rustls, TlsConnector};
@@ -45,8 +44,7 @@ async fn main() -> Result<(), Box<dyn StdError + Send + Sync + 'static>> {
4544

4645
let mut root_cert_store = rustls::RootCertStore::empty();
4746
if let Some(cafile) = &options.cafile {
48-
let mut pem = BufReader::new(File::open(cafile)?);
49-
for cert in rustls_pemfile::certs(&mut pem) {
47+
for cert in CertificateDer::pem_file_iter(&cafile)? {
5048
root_cert_store.add(cert?)?;
5149
}
5250
} else {

examples/server.rs

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
use std::fs::File;
2-
use std::io::{self, BufReader, ErrorKind};
1+
use std::io;
32
use std::net::ToSocketAddrs;
4-
use std::path::{Path, PathBuf};
5-
use std::sync::Arc;
3+
use std::path::PathBuf;
4+
65
use std::error::Error as StdError;
6+
use std::sync::Arc;
77

88
use argh::FromArgs;
9+
use rustls::pki_types::pem::PemObject;
910
use rustls::pki_types::{CertificateDer, PrivateKeyDer};
10-
use rustls_pemfile::{certs, private_key};
1111
use tokio::io::{copy, sink, split, AsyncWriteExt};
1212
use tokio::net::TcpListener;
1313
use tokio_rustls::{rustls, TlsAcceptor};
@@ -32,19 +32,6 @@ struct Options {
3232
echo_mode: bool,
3333
}
3434

35-
fn load_certs(path: &Path) -> io::Result<Vec<CertificateDer<'static>>> {
36-
certs(&mut BufReader::new(File::open(path)?)).collect()
37-
}
38-
39-
fn load_key(path: &Path) -> io::Result<PrivateKeyDer<'static>> {
40-
Ok(private_key(&mut BufReader::new(File::open(path)?))
41-
.unwrap()
42-
.ok_or(io::Error::new(
43-
ErrorKind::Other,
44-
"no private key found".to_string(),
45-
))?)
46-
}
47-
4835
#[tokio::main]
4936
async fn main() -> Result<(), Box<dyn StdError + Send + Sync + 'static>> {
5037
let options: Options = argh::from_env();
@@ -54,8 +41,8 @@ async fn main() -> Result<(), Box<dyn StdError + Send + Sync + 'static>> {
5441
.to_socket_addrs()?
5542
.next()
5643
.ok_or_else(|| io::Error::from(io::ErrorKind::AddrNotAvailable))?;
57-
let certs = load_certs(&options.cert)?;
58-
let key = load_key(&options.key)?;
44+
let certs = CertificateDer::pem_file_iter(&options.cert)?.collect::<Result<Vec<_>, _>>()?;
45+
let key = PrivateKeyDer::from_pem_file(&options.key)?;
5946
let flag_echo = options.echo_mode;
6047

6148
let config = rustls::ServerConfig::builder()

tests/utils.rs

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
mod utils {
2-
use std::io::{BufReader, Cursor, IoSlice};
2+
use std::io::IoSlice;
33

4-
use rustls::{ClientConfig, RootCertStore, ServerConfig};
5-
use rustls_pemfile::{certs, private_key};
4+
use rustls::{
5+
pki_types::{pem::PemObject, CertificateDer, PrivateKeyDer},
6+
ClientConfig, RootCertStore, ServerConfig,
7+
};
68
use tokio::io::{self, AsyncWrite, AsyncWriteExt};
79

810
#[allow(dead_code)]
@@ -16,20 +18,17 @@ mod utils {
1618
// A private key corresponding to the end-entity server certificate in CHAIN.
1719
const EE_KEY: &str = include_str!("certs/end.key");
1820

19-
let cert = certs(&mut BufReader::new(Cursor::new(CHAIN)))
20-
.map(|result| result.unwrap())
21-
.collect();
22-
let key = private_key(&mut BufReader::new(Cursor::new(EE_KEY)))
23-
.unwrap()
21+
let cert = CertificateDer::pem_slice_iter(CHAIN.as_bytes())
22+
.collect::<Result<Vec<_>, _>>()
2423
.unwrap();
24+
let key = PrivateKeyDer::from_pem_slice(EE_KEY.as_bytes()).unwrap();
2525
let sconfig = ServerConfig::builder()
2626
.with_no_client_auth()
2727
.with_single_cert(cert, key.into())
2828
.unwrap();
2929

3030
let mut client_root_cert_store = RootCertStore::empty();
31-
let mut roots = BufReader::new(Cursor::new(ROOT));
32-
for root in certs(&mut roots) {
31+
for root in CertificateDer::pem_slice_iter(ROOT.as_bytes()) {
3332
client_root_cert_store.add(root.unwrap()).unwrap();
3433
}
3534

0 commit comments

Comments
 (0)