Skip to content

Commit 745f316

Browse files
committed
take rustls 0.23.14+, use pki-types for PEM
Sets the minimum rustls version to 0.23.14 to ensure pki-types 1.10 is re-exported. This is the version that added the PEM decoder bits that allow removing a dependency on rustls-pemfile.
1 parent dd72bd1 commit 745f316

File tree

6 files changed

+26
-40
lines changed

6 files changed

+26
-40
lines changed

Cargo.lock

Lines changed: 0 additions & 17 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
@@ -14,5 +14,4 @@ env_logger = "0.10"
1414
log = "0.4"
1515
openssl-probe = "0.1"
1616
openssl-sys = "0.9"
17-
rustls = "0.23"
18-
rustls-pemfile = "2"
17+
rustls = "0.23.14"

src/entry.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ use openssl_sys::{
1414
OPENSSL_malloc, TLSEXT_NAMETYPE_host_name, BIGNUM, EVP_CIPHER_CTX, EVP_PKEY, HMAC_CTX,
1515
OPENSSL_NPN_NEGOTIATED, OPENSSL_NPN_NO_OVERLAP, X509, X509_STORE, X509_STORE_CTX,
1616
};
17-
use rustls::pki_types::{CertificateDer, PrivatePkcs8KeyDer};
17+
use rustls::pki_types::pem::PemObject;
18+
use rustls::pki_types::{CertificateDer, PrivateKeyDer, PrivatePkcs8KeyDer};
1819

1920
use crate::bio::{Bio, BIO, BIO_METHOD};
2021
use crate::callbacks::SslCallbackContext;
@@ -462,12 +463,12 @@ pub(crate) fn use_cert_chain_file(file_name: &str) -> Result<Vec<CertificateDer<
462463
};
463464

464465
let mut chain = Vec::new();
465-
for cert in rustls_pemfile::certs(&mut file_reader) {
466+
for cert in CertificateDer::pem_reader_iter(&mut file_reader) {
466467
let cert = match cert {
467468
Ok(cert) => cert,
468469
Err(err) => {
469470
log::trace!("Failed to parse {file_name:?}: {err:?}");
470-
return Err(Error::from_io(err));
471+
return Err(Error::from_pem(err));
471472
}
472473
};
473474

@@ -507,15 +508,11 @@ pub(crate) fn use_private_key_file(file_name: &str, file_type: c_int) -> Result<
507508
Err(err) => return Err(Error::from_io(err)),
508509
};
509510

510-
match rustls_pemfile::private_key(&mut file_reader) {
511-
Ok(Some(key)) => key,
512-
Ok(None) => {
513-
log::trace!("No keys found in {file_name:?}");
514-
return Err(Error::bad_data("pem file"));
515-
}
511+
match PrivateKeyDer::from_pem_reader(&mut file_reader) {
512+
Ok(key) => key,
516513
Err(err) => {
517514
log::trace!("Failed to read {file_name:?}: {err:?}");
518-
return Err(Error::from_io(err));
515+
return Err(Error::from_pem(err));
519516
}
520517
}
521518
}

src/error.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use core::ptr;
33
use std::ffi::CString;
44

55
use openssl_sys::{ERR_new, ERR_set_error, ERR_RFLAGS_OFFSET, ERR_RFLAG_FATAL};
6+
use rustls::pki_types::pem;
67
use rustls::AlertDescription;
78

89
// See openssl/err.h for the source of these magic numbers.
@@ -100,6 +101,14 @@ impl Error {
100101
}
101102
}
102103

104+
pub fn from_pem(err: pem::Error) -> Self {
105+
Self {
106+
lib: Lib::User,
107+
reason: Reason::OperationFailed,
108+
string: Some(err.to_string()),
109+
}
110+
}
111+
103112
pub fn from_io(err: std::io::Error) -> Self {
104113
match err.kind() {
105114
std::io::ErrorKind::WouldBlock => Self {

src/evp_pkey.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -329,11 +329,13 @@ mod tests {
329329
use super::*;
330330
use std::io::Cursor;
331331

332+
use rustls::pki_types::pem::PemObject;
333+
use rustls::pki_types::{CertificateDer, PrivateKeyDer};
334+
332335
#[test]
333336
fn supports_rsaencryption_keys() {
334337
let der =
335-
rustls_pemfile::private_key(&mut &include_bytes!("../test-ca/rsa/server.key")[..])
336-
.unwrap()
338+
PrivateKeyDer::from_pem_reader(&mut &include_bytes!("../test-ca/rsa/server.key")[..])
337339
.unwrap();
338340
let key = EvpPkey::new_from_der_bytes(der).unwrap();
339341
println!("{key:?}");
@@ -391,15 +393,10 @@ mod tests {
391393
let key_der = std::fs::read(key_path).unwrap();
392394
let cert_der = std::fs::read(cert_path).unwrap();
393395

394-
let key_der = rustls_pemfile::private_key(&mut Cursor::new(key_der))
395-
.unwrap()
396-
.unwrap();
396+
let key_der = PrivateKeyDer::from_pem_reader(&mut Cursor::new(&key_der)).unwrap();
397397
let key = EvpPkey::new_from_der_bytes(key_der).unwrap();
398398

399-
let cert_der = rustls_pemfile::certs(&mut Cursor::new(cert_der))
400-
.next()
401-
.unwrap()
402-
.unwrap();
399+
let cert_der = CertificateDer::from_pem_reader(&mut Cursor::new(cert_der)).unwrap();
403400
let parsed_cert = rustls::server::ParsedCertificate::try_from(&cert_der).unwrap();
404401

405402
let cert_spki = parsed_cert.subject_public_key_info();

src/x509.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use openssl_sys::{
88
OPENSSL_sk_push, OPENSSL_sk_value, X509_STORE_free, X509_STORE_new, X509_free, OPENSSL_STACK,
99
X509, X509_STORE,
1010
};
11+
use rustls::pki_types::pem::PemObject;
1112
use rustls::pki_types::CertificateDer;
1213

1314
use crate::error::Error;
@@ -273,12 +274,12 @@ pub(crate) fn load_certs<'a>(
273274
Err(err) => return Err(Error::from_io(err).raise()),
274275
};
275276

276-
for cert in rustls_pemfile::certs(&mut file_reader) {
277+
for cert in CertificateDer::pem_reader_iter(&mut file_reader) {
277278
match cert {
278279
Ok(cert) => certs.push(cert),
279280
Err(err) => {
280281
log::trace!("Failed to parse {file_name:?}: {err:?}");
281-
return Err(Error::from_io(err).raise());
282+
return Err(Error::from_pem(err).raise());
282283
}
283284
};
284285
}

0 commit comments

Comments
 (0)