From 56097088484b920a42876ec0b55f745a75530419 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Wed, 17 Jan 2024 19:36:29 +0100 Subject: [PATCH] Updated rustls_pemfile --- Cargo.lock | 22 +++++++++++++++++++--- Cargo.toml | 2 +- src/base/cert_utils.rs | 15 +++++++-------- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 51d4639..2faca6c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1444,7 +1444,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "rustls 0.21.10", - "rustls-pemfile", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", @@ -1557,7 +1557,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", - "rustls-pemfile", + "rustls-pemfile 1.0.4", "schannel", "security-framework", ] @@ -1571,6 +1571,22 @@ dependencies = [ "base64 0.21.7", ] +[[package]] +name = "rustls-pemfile" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e4980fa29e4c4b212ffb3db068a564cbf560e51d3944b7c88bd8bf5bec64f4" +dependencies = [ + "base64 0.21.7", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9d979b3ce68192e42760c7810125eb6cf2ea10efae545a156063e61f314e2a" + [[package]] name = "rustls-webpki" version = "0.101.7" @@ -1821,7 +1837,7 @@ dependencies = [ "rand", "reqwest", "rustls 0.20.9", - "rustls-pemfile", + "rustls-pemfile 2.0.0", "serde", "tokio", "tokio-tungstenite", diff --git a/Cargo.toml b/Cargo.toml index 08964e1..1b30419 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ tokio-tungstenite = { version = "0.18.0", features = ["__rustls-tls", "rustls-tl urlencoding = "2.1.3" hyper-rustls = { version = "0.23.2", features = ["rustls-native-certs"] } bytes = "1.5.0" -rustls-pemfile = "1.0.4" +rustls-pemfile = "2.0.0" rustls = { version = "0.20.7", features = ["dangerous_configuration"] } [dev-dependencies] diff --git a/src/base/cert_utils.rs b/src/base/cert_utils.rs index 9dac6c9..c63de97 100644 --- a/src/base/cert_utils.rs +++ b/src/base/cert_utils.rs @@ -2,16 +2,15 @@ use std::error::Error; use std::io::{Cursor, ErrorKind}; use rustls::{Certificate, PrivateKey}; -use rustls_pemfile::{read_one, Item}; +use rustls_pemfile::Item; /// Parse PEM certificates bytes into a [`rustls::Certificate`] structure /// /// An error is returned if not any certificate could be found pub fn parse_pem_certificates(certs: &[u8]) -> Result, Box> { - let certs = rustls_pemfile::certs(&mut Cursor::new(certs))? - .into_iter() - .map(Certificate) - .collect::>(); + let certs = rustls_pemfile::certs(&mut Cursor::new(certs)) + .map(|c| c.map(|c| Certificate(c.to_vec()))) + .collect::, _>>()?; if certs.is_empty() { Err(std::io::Error::new( @@ -26,7 +25,7 @@ pub fn parse_pem_certificates(certs: &[u8]) -> Result, Box Result> { - let key = match read_one(&mut Cursor::new(privkey))? { + let key = match rustls_pemfile::read_one(&mut Cursor::new(privkey))? { None => { Err(std::io::Error::new( ErrorKind::Other, @@ -34,8 +33,8 @@ pub fn parse_pem_private_key(privkey: &[u8]) -> Result key, - Some(Item::RSAKey(key)) => key, + Some(Item::Pkcs8Key(key)) => key.secret_pkcs8_der().to_vec(), + Some(Item::Pkcs1Key(key)) => key.secret_pkcs1_der().to_vec(), _ => { Err(std::io::Error::new( ErrorKind::Other,