Skip to content

Commit c26f2e2

Browse files
rnijvelddavidv1992
authored andcommitted
Remove rustls-pemfile usage
1 parent 13428e0 commit c26f2e2

File tree

7 files changed

+73
-52
lines changed

7 files changed

+73
-52
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ pps-time = "0.2.3"
4949

5050
# TLS
5151
rustls23 = { package = "rustls", version = "0.23.16", features = ["logging", "std", "tls12"] }
52-
rustls-pemfile2 = { package = "rustls-pemfile", version = "2.0" }
53-
rustls-pki-types = "1.10"
5452
rustls-platform-verifier = "0.5.0"
5553
tokio-rustls = { version = "0.26.0", features = ["logging", "tls12"] } # testing only
5654

ntp-proto/Cargo.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ rand.workspace = true
2727
tracing.workspace = true
2828
serde.workspace = true
2929
rustls23.workspace = true
30-
rustls-pki-types.workspace = true
31-
rustls-pemfile2.workspace = true
3230
rustls-platform-verifier.workspace = true
3331
arbitrary = { workspace = true, optional = true }
3432
aead.workspace = true

ntp-proto/src/tls_utils.rs

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,41 @@ mod rustls23_shim {
8989
pub use rustls_platform_verifier::Verifier as PlatformVerifier;
9090

9191
pub mod pemfile {
92-
pub use rustls_pemfile2::certs;
93-
pub use rustls_pemfile2::pkcs8_private_keys;
94-
pub use rustls_pemfile2::private_key;
92+
use rustls23::pki_types::{
93+
pem::PemObject, CertificateDer, PrivateKeyDer, PrivatePkcs8KeyDer,
94+
};
95+
96+
pub fn certs(
97+
rd: &mut dyn std::io::BufRead,
98+
) -> impl Iterator<Item = Result<CertificateDer<'static>, std::io::Error>> + '_ {
99+
CertificateDer::pem_reader_iter(rd).map(|item| {
100+
item.map_err(|err| match err {
101+
rustls23::pki_types::pem::Error::Io(error) => error,
102+
_ => std::io::Error::new(std::io::ErrorKind::InvalidInput, err.to_string()),
103+
})
104+
})
105+
}
106+
107+
pub fn private_key(
108+
rd: &mut dyn std::io::BufRead,
109+
) -> Result<PrivateKeyDer<'static>, std::io::Error> {
110+
PrivateKeyDer::from_pem_reader(rd).map_err(|err| match err {
111+
rustls23::pki_types::pem::Error::Io(error) => error,
112+
_ => std::io::Error::new(std::io::ErrorKind::InvalidInput, err.to_string()),
113+
})
114+
}
115+
116+
pub fn pkcs8_private_keys(
117+
rd: &mut dyn std::io::BufRead,
118+
) -> impl Iterator<Item = Result<PrivatePkcs8KeyDer<'static>, std::io::Error>> + '_
119+
{
120+
PrivatePkcs8KeyDer::pem_reader_iter(rd).map(|item| {
121+
item.map_err(|err| match err {
122+
rustls23::pki_types::pem::Error::Io(error) => error,
123+
_ => std::io::Error::new(std::io::ErrorKind::InvalidInput, err.to_string()),
124+
})
125+
})
126+
}
95127
}
96128

97129
pub trait CloneKeyShim {}

ntpd/src/daemon/keyexchange.rs

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,7 @@ async fn run_nts_ke(
137137
}
138138

139139
let private_key =
140-
ntp_proto::tls_utils::pemfile::private_key(&mut std::io::BufReader::new(private_key_file))?
141-
.ok_or(io_error("could not parse private key"))?;
140+
ntp_proto::tls_utils::pemfile::private_key(&mut std::io::BufReader::new(private_key_file))?;
142141

143142
key_exchange_server(keyset, nts_ke_config, cert_chain, pool_certs, private_key).await
144143
}
@@ -630,33 +629,23 @@ mod tests {
630629
#[test]
631630
fn parse_private_keys() {
632631
let input = include_bytes!("../../test-keys/end.key");
633-
let _ = ntp_proto::tls_utils::pemfile::private_key(&mut input.as_slice())
634-
.unwrap()
635-
.unwrap();
632+
let _ = ntp_proto::tls_utils::pemfile::private_key(&mut input.as_slice()).unwrap();
636633

637634
let input = include_bytes!("../../test-keys/testca.key");
638-
let _ = ntp_proto::tls_utils::pemfile::private_key(&mut input.as_slice())
639-
.unwrap()
640-
.unwrap();
635+
let _ = ntp_proto::tls_utils::pemfile::private_key(&mut input.as_slice()).unwrap();
641636

642637
// openssl does no longer seem to want to generate this format
643638
// so we use https://github.com/rustls/pemfile/blob/main/tests/data/rsa1024.pkcs1.pem
644639
let input = include_bytes!("../../test-keys/rsa_key.pem");
645-
let _ = ntp_proto::tls_utils::pemfile::private_key(&mut input.as_slice())
646-
.unwrap()
647-
.unwrap();
640+
let _ = ntp_proto::tls_utils::pemfile::private_key(&mut input.as_slice()).unwrap();
648641

649642
// openssl ecparam -name prime256v1 -genkey -noout -out ec_key.pem
650643
let input = include_bytes!("../../test-keys/ec_key.pem");
651-
let _ = ntp_proto::tls_utils::pemfile::private_key(&mut input.as_slice())
652-
.unwrap()
653-
.unwrap();
644+
let _ = ntp_proto::tls_utils::pemfile::private_key(&mut input.as_slice()).unwrap();
654645

655646
// openssl genpkey -algorithm EC -out pkcs8_key.pem -pkeyopt ec_paramgen_curve:prime256v1
656647
let input = include_bytes!("../../test-keys/pkcs8_key.pem");
657-
let _ = ntp_proto::tls_utils::pemfile::private_key(&mut input.as_slice())
658-
.unwrap()
659-
.unwrap();
648+
let _ = ntp_proto::tls_utils::pemfile::private_key(&mut input.as_slice()).unwrap();
660649
}
661650

662651
#[tokio::test]
@@ -958,9 +947,8 @@ mod tests {
958947
certificates_from_bufread(BufReader::new(Cursor::new(cc))).unwrap();
959948

960949
let pk = include_bytes!("../../test-keys/end.key");
961-
let private_key = ntp_proto::tls_utils::pemfile::private_key(&mut pk.as_slice())
962-
.unwrap()
963-
.unwrap();
950+
let private_key =
951+
ntp_proto::tls_utils::pemfile::private_key(&mut pk.as_slice()).unwrap();
964952

965953
let config = build_server_config(certificate_chain, private_key).unwrap();
966954

@@ -993,9 +981,7 @@ mod tests {
993981
let certificate_chain = certificates_from_bufread(BufReader::new(Cursor::new(cc)))?;
994982

995983
let pk = include_bytes!("../../test-keys/end.key");
996-
let private_key = ntp_proto::tls_utils::pemfile::private_key(&mut pk.as_slice())
997-
.unwrap()
998-
.unwrap();
984+
let private_key = ntp_proto::tls_utils::pemfile::private_key(&mut pk.as_slice()).unwrap();
999985

1000986
let config = build_server_config(certificate_chain, private_key).unwrap();
1001987
let pool_certs = Arc::<[_]>::from(vec![]);

nts-pool-ke/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ toml.workspace = true
1919
tracing.workspace = true
2020
tracing-subscriber = { version = "0.3.0", default-features = false, features = ["std", "fmt", "ansi"] }
2121
rustls23.workspace = true
22-
rustls-pemfile2.workspace = true
2322
rustls-platform-verifier.workspace = true
2423
serde.workspace = true
2524
ntp-proto = { workspace = true }

nts-pool-ke/src/lib.rs

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#[cfg(feature = "unstable_nts-pool")]
22
mod condcompile {
33
extern crate rustls23 as rustls;
4-
extern crate rustls_pemfile2 as rustls_pemfile;
54

65
mod cli;
76
mod config;
@@ -21,6 +20,7 @@ mod condcompile {
2120
pki_types::{CertificateDer, ServerName},
2221
version::TLS13,
2322
};
23+
use rustls23::pki_types::pem::PemObject;
2424
use rustls_platform_verifier::Verifier;
2525
use tokio::{
2626
io::{AsyncReadExt, AsyncWriteExt},
@@ -153,16 +153,36 @@ mod condcompile {
153153
})?;
154154

155155
let certificate_authority: Arc<[rustls::pki_types::CertificateDer]> =
156-
rustls_pemfile::certs(&mut std::io::BufReader::new(certificate_authority_file))
157-
.collect::<std::io::Result<Arc<[rustls::pki_types::CertificateDer]>>>()?;
156+
rustls::pki_types::CertificateDer::pem_reader_iter(&mut std::io::BufReader::new(
157+
certificate_authority_file,
158+
))
159+
.map(|item| {
160+
item.map_err(|err| match err {
161+
rustls::pki_types::pem::Error::Io(error) => error,
162+
_ => std::io::Error::new(std::io::ErrorKind::InvalidInput, err.to_string()),
163+
})
164+
})
165+
.collect::<std::io::Result<Arc<[rustls::pki_types::CertificateDer]>>>()?;
158166

159167
let certificate_chain: Vec<rustls::pki_types::CertificateDer> =
160-
rustls_pemfile::certs(&mut std::io::BufReader::new(certificate_chain_file))
161-
.collect::<std::io::Result<Vec<rustls::pki_types::CertificateDer>>>()?;
162-
163-
let private_key =
164-
rustls_pemfile::private_key(&mut std::io::BufReader::new(private_key_file))?
165-
.ok_or(io_error("could not parse private key"))?;
168+
rustls::pki_types::CertificateDer::pem_reader_iter(&mut std::io::BufReader::new(
169+
certificate_chain_file,
170+
))
171+
.map(|item| {
172+
item.map_err(|err| match err {
173+
rustls::pki_types::pem::Error::Io(error) => error,
174+
_ => std::io::Error::new(std::io::ErrorKind::InvalidInput, err.to_string()),
175+
})
176+
})
177+
.collect::<std::io::Result<Vec<rustls::pki_types::CertificateDer>>>()?;
178+
179+
let private_key = rustls::pki_types::PrivateKeyDer::from_pem_reader(
180+
&mut std::io::BufReader::new(private_key_file),
181+
)
182+
.map_err(|err| match err {
183+
rustls::pki_types::pem::Error::Io(error) => error,
184+
_ => std::io::Error::new(std::io::ErrorKind::InvalidInput, err.to_string()),
185+
})?;
166186

167187
pool_key_exchange_server(
168188
nts_pool_ke_config.listen,

0 commit comments

Comments
 (0)