Package: rust-tonic

I hope to update rust-rustls-pemfile to version 2 soon. I have prepared
a patch for rust-tonic.

Unfortunately, the rust-tonic package can't be built in a clean sid
environment right now due to a dependency on an old version of axum.
but I tested in an environment with the axum package from trixie and
it built and passed tests succesfully.
diff -Nru rust-tonic-0.10.2+dfsg/debian/changelog 
rust-tonic-0.10.2+dfsg/debian/changelog
--- rust-tonic-0.10.2+dfsg/debian/changelog     2025-02-19 18:57:45.000000000 
+0000
+++ rust-tonic-0.10.2+dfsg/debian/changelog     2025-02-25 03:13:13.000000000 
+0000
@@ -1,3 +1,10 @@
+rust-tonic (0.10.2+dfsg-12.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Add patch for rustls-pemfile 2.
+
+ -- Peter Michael Green <plugw...@debian.org>  Tue, 25 Feb 2025 03:13:13 +0000
+
 rust-tonic (0.10.2+dfsg-12) unstable; urgency=medium
 
   * skip checking test max_message_send_size,
diff -Nru rust-tonic-0.10.2+dfsg/debian/control 
rust-tonic-0.10.2+dfsg/debian/control
--- rust-tonic-0.10.2+dfsg/debian/control       2025-02-19 15:21:54.000000000 
+0000
+++ rust-tonic-0.10.2+dfsg/debian/control       2025-02-25 02:19:08.000000000 
+0000
@@ -34,7 +34,7 @@
  librust-rand-0.8+default-dev,
  librust-rustls-0.21+default-dev,
  librust-rustls-native-certs-0.6+default-dev,
- librust-rustls-pemfile-1+default-dev,
+ librust-rustls-pemfile-2+default-dev,
  librust-static-assertions-1+default-dev,
  librust-syn-2+default-dev,
  librust-tokio-1+default-dev,
@@ -111,7 +111,7 @@
  librust-prost-0.12+default-dev,
  librust-rustls-0.21+default-dev,
  librust-rustls-native-certs-0.6+default-dev,
- librust-rustls-pemfile-1+default-dev,
+ librust-rustls-pemfile-2+default-dev,
  librust-tokio-1+default-dev,
  librust-tokio-1+macros-dev,
  librust-tokio-1+net-dev,
diff -Nru rust-tonic-0.10.2+dfsg/debian/patches/2006_rustls-pemfile.patch 
rust-tonic-0.10.2+dfsg/debian/patches/2006_rustls-pemfile.patch
--- rust-tonic-0.10.2+dfsg/debian/patches/2006_rustls-pemfile.patch     
1970-01-01 00:00:00.000000000 +0000
+++ rust-tonic-0.10.2+dfsg/debian/patches/2006_rustls-pemfile.patch     
2025-02-25 03:10:29.000000000 +0000
@@ -0,0 +1,164 @@
+Description: update rustls-pemfile to version 2
+ changes in tonic crate were based on
+ 
https://github.com/hyperium/tonic/commit/23106dd76882a4ffbf2d3ac59c9c403518e429c9
+
+ changes in example crate were based on 
+ 
https://github.com/hyperium/tonic/commit/32c91838122eaaab076b2c4606751a680afe5b46
+ which was squash-merged as part of
+ 
https://github.com/hyperium/tonic/commit/9c1f2f9402d97cfa4c9d9065b5af2fb99d2ef521
+
+ changes in both crates were adapted for use with the debian packaged version 
of
+ tonic by Peter Michael green.
+Author: Peter Michael Green <plugw...@debian.org>
+Author: Ivan Krivosheev <py.krivosh...@gmail.com>
+Author: Alex Rudy <git...@alexrudy.net>
+Author: tottoto <tottoto...@gmail.com>
+Forwarded: not-needed
+Last-Update: 2025-02-25
+
+Index: rust-tonic-0.10.2+dfsg/examples/Cargo.toml
+===================================================================
+--- rust-tonic-0.10.2+dfsg.orig/examples/Cargo.toml
++++ rust-tonic-0.10.2+dfsg/examples/Cargo.toml
+@@ -332,7 +332,7 @@ bytes = { version = "1", optional = true
+ h2 = { version = ">= 0.3, <= 0.4", optional = true }
+ tokio-rustls = { version = "0.24.0", optional = true }
+ hyper-rustls = { version = "0.24.0", features = ["http2"], optional = true }
+-rustls-pemfile = { version = "1", optional = true }
++rustls-pemfile = { version = "2", optional = true }
+ tower-http = { version = "0.4", optional = true }
+ 
+ [build-dependencies]
+Index: rust-tonic-0.10.2+dfsg/tonic/Cargo.toml
+===================================================================
+--- rust-tonic-0.10.2+dfsg.orig/tonic/Cargo.toml
++++ rust-tonic-0.10.2+dfsg/tonic/Cargo.toml
+@@ -73,7 +73,7 @@ axum = {version = "0.6.9", default_featu
+ 
+ # rustls
+ async-stream = { version = "0.3", optional = true }
+-rustls-pemfile = { version = "1.0", optional = true }
++rustls-pemfile = { version = "2.0", optional = true }
+ rustls-native-certs = { version = "0.6.3", optional = true }
+ tokio-rustls = { version = "0.24.1", optional = true }
+ rustls = { version = "0.21.7", optional = true }
+Index: rust-tonic-0.10.2+dfsg/tonic/src/transport/service/tls.rs
+===================================================================
+--- rust-tonic-0.10.2+dfsg.orig/tonic/src/transport/service/tls.rs
++++ rust-tonic-0.10.2+dfsg/tonic/src/transport/service/tls.rs
+@@ -179,9 +179,9 @@ mod rustls_keys {
+     ) -> Result<PrivateKey, crate::Error> {
+         while let Ok(Some(item)) = rustls_pemfile::read_one(&mut cursor) {
+             match item {
+-                rustls_pemfile::Item::RSAKey(key)
+-                | rustls_pemfile::Item::PKCS8Key(key)
+-                | rustls_pemfile::Item::ECKey(key) => return 
Ok(PrivateKey(key)),
++                rustls_pemfile::Item::Pkcs1Key(key) => return 
Ok(PrivateKey(key.secret_pkcs1_der().to_vec())),
++                rustls_pemfile::Item::Pkcs8Key(key) => return 
Ok(PrivateKey(key.secret_pkcs8_der().to_vec())),
++                rustls_pemfile::Item::Sec1Key(key)  => return 
Ok(PrivateKey(key.secret_sec1_der().to_vec())),
+                 _ => continue,
+             }
+         }
+@@ -193,36 +193,29 @@ mod rustls_keys {
+     pub(crate) fn load_identity(
+         identity: Identity,
+     ) -> Result<(Vec<Certificate>, PrivateKey), crate::Error> {
+-        let cert = {
+-            let mut cert = std::io::Cursor::new(identity.cert.as_ref());
+-            match rustls_pemfile::certs(&mut cert) {
+-                Ok(certs) => certs.into_iter().map(Certificate).collect(),
+-                Err(_) => return 
Err(Box::new(TlsError::CertificateParseError)),
+-            }
+-        };
++        let cert = rustls_pemfile::certs(&mut Cursor::new(identity.cert))
++            .map(|result| result.map(|cert| Certificate(cert.to_vec())))
++            .collect::<Result<Vec<_>, _>>()
++            .map_err(|_| TlsError::CertificateParseError)?;
+ 
+-        let key = {
+-            let key = std::io::Cursor::new(identity.key.as_ref());
+-            match load_rustls_private_key(key) {
+-                Ok(key) => key,
+-                Err(e) => {
+-                    return Err(e);
+-                }
+-            }
++        let Ok(Some(key)) = rustls_pemfile::private_key(&mut 
Cursor::new(identity.key)) else {
++            return Err(Box::new(TlsError::PrivateKeyParseError));
+         };
+ 
+-        Ok((cert, key))
++        Ok((cert, PrivateKey(key.secret_der().to_vec())))
+     }
+ 
+     pub(crate) fn add_certs_from_pem(
+         mut certs: Cursor<&[u8]>,
+         roots: &mut RootCertStore,
+     ) -> Result<(), crate::Error> {
+-        let (_, ignored) = 
roots.add_parsable_certificates(&rustls_pemfile::certs(&mut certs)?);
+-        match ignored == 0 {
+-            true => Ok(()),
+-            false => Err(Box::new(TlsError::CertificateParseError)),
++
++        for cert in rustls_pemfile::certs(&mut 
certs).collect::<Result<Vec<_>, _>>()? {
++            roots
++                .add(&Certificate(cert.to_vec()))
++                .map_err(|_| TlsError::CertificateParseError)?;
+         }
++        Ok(())
+     }
+ }
+ 
+Index: rust-tonic-0.10.2+dfsg/examples/src/tls_rustls/client.rs
+===================================================================
+--- rust-tonic-0.10.2+dfsg.orig/examples/src/tls_rustls/client.rs
++++ rust-tonic-0.10.2+dfsg/examples/src/tls_rustls/client.rs
+@@ -19,7 +19,7 @@ async fn main() -> Result<(), Box<dyn st
+     let mut roots = RootCertStore::empty();
+ 
+     let mut buf = std::io::BufReader::new(&fd);
+-    let certs = rustls_pemfile::certs(&mut buf)?;
++    let certs = rustls_pemfile::certs(&mut buf).collect::<Result<Vec<_>, 
_>>()?;
+     roots.add_parsable_certificates(&certs);
+ 
+     let tls = ClientConfig::builder()
+Index: rust-tonic-0.10.2+dfsg/examples/src/tls_rustls/server.rs
+===================================================================
+--- rust-tonic-0.10.2+dfsg.orig/examples/src/tls_rustls/server.rs
++++ rust-tonic-0.10.2+dfsg/examples/src/tls_rustls/server.rs
+@@ -19,19 +19,21 @@ async fn main() -> Result<(), Box<dyn st
+     let certs = {
+         let fd = std::fs::File::open(data_dir.join("tls/server.pem"))?;
+         let mut buf = std::io::BufReader::new(&fd);
+-        rustls_pemfile::certs(&mut buf)?
++        rustls_pemfile::certs(&mut buf).collect::<Result<Vec<_>, _>>()?
+             .into_iter()
+-            .map(Certificate)
++            .map(|cert| Certificate(cert.to_vec()))
+             .collect()
+     };
+     let key = {
+         let fd = std::fs::File::open(data_dir.join("tls/server.key"))?;
+         let mut buf = std::io::BufReader::new(&fd);
+-        rustls_pemfile::pkcs8_private_keys(&mut buf)?
++        let key = rustls_pemfile::pkcs8_private_keys(&mut buf)
+             .into_iter()
+-            .map(PrivateKey)
+             .next()
+-            .unwrap()
++            .unwrap()?
++            .clone_key();
++
++        key
+ 
+         // let key = std::fs::read(data_dir.join("tls/server.key"))?;
+         // PrivateKey(key)
+@@ -40,7 +42,7 @@ async fn main() -> Result<(), Box<dyn st
+     let mut tls = ServerConfig::builder()
+         .with_safe_defaults()
+         .with_no_client_auth()
+-        .with_single_cert(certs, key)?;
++        .with_single_cert(certs, 
PrivateKey(key.secret_pkcs8_der().to_vec()))?;
+     tls.alpn_protocols = vec![b"h2".to_vec()];
+ 
+     let server = EchoServer::default();
diff -Nru rust-tonic-0.10.2+dfsg/debian/patches/series 
rust-tonic-0.10.2+dfsg/debian/patches/series
--- rust-tonic-0.10.2+dfsg/debian/patches/series        2025-02-19 
15:21:54.000000000 +0000
+++ rust-tonic-0.10.2+dfsg/debian/patches/series        2025-02-25 
01:47:50.000000000 +0000
@@ -6,3 +6,4 @@
 2003_no_bench.patch
 2004_no_warp.patch
 2005_no_interop.patch
+2006_rustls-pemfile.patch

Reply via email to