[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1109009: unblock: rust-sequoia-octopus-librnp/1.11.1-1



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package rust-sequoia-octopus-librnp.

[ Reason ]
It fixes a remote denial of service attack, see #1109001.

[ Impact ]
a thunderbird user can be DOSed with an email.

[ Tests ]
upstream CI tests, the package only has smoke autopkgtests atm.

[ Risks ]
not really, surely this could introduce some bug, but that would be
limited to it's users.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing

[ Other info ]
There's quite some noise from debcargo in the diff, apologies for that. debian/patches
is unchanged (just refreshed), the changes are only in src/

$ debdiff rust-sequoia-octopus-librnp_1.11.0-1.dsc rust-sequoia-octopus-librnp_1.11.1-1.dsc|diffstat
 .cargo_vcs_info.json               |    2 +-
 Cargo.lock                         |   35 ++++++++++++++++++++++++-----------
 Cargo.toml                         |   16 +++++++++++++---
 Cargo.toml.orig                    |   13 +++++++++++--
 debian/changelog                   |    8 ++++++++
 debian/control                     |    2 +-
 debian/control.debcargo.hint       |   14 +++++++-------
 debian/patches/drop-windows.patch  |   10 +++++++++-
 debian/tests/control.debcargo.hint |   28 ++++++++++++++--------------
 src/dump_packets.rs                |   10 +++++++++-
 src/dump_packets/dump.rs           |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 src/lib.rs                         |   38 +++++++++++++++++++++++++++++++-------
 12 files changed, 179 insertions(+), 50 deletions(-)

& thanks for your work on trixie!

unblock rust-sequoia-octopus-librnp/1.11.1-1


-- 
cheers,
	Holger

 ⢀⣴⠾⠻⢶⣦⠀
 ⣾⠁⢠⠒⠀⣿⡁  holger@(debian|reproducible-builds|layer-acht).org
 ⢿⡄⠘⠷⠚⠋⠀  OpenPGP: B8BF54137B09D35CF026FE9D 091AB856069AAA1C
 ⠈⠳⣄

Never waste a crisis.
diff -Nru rust-sequoia-octopus-librnp-1.11.0/Cargo.lock rust-sequoia-octopus-librnp-1.11.1/Cargo.lock
--- rust-sequoia-octopus-librnp-1.11.0/Cargo.lock	1970-01-01 01:00:01.000000000 +0100
+++ rust-sequoia-octopus-librnp-1.11.1/Cargo.lock	1970-01-01 01:00:01.000000000 +0100
@@ -1,6 +1,6 @@
 # This file is automatically @generated by Cargo.
 # It is not intended for manual editing.
-version = 3
+version = 4
 
 [[package]]
 name = "addr2line"
@@ -482,9 +482,9 @@
 
 [[package]]
 name = "crossbeam-channel"
-version = "0.5.14"
+version = "0.5.15"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471"
+checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
 dependencies = [
  "crossbeam-utils",
 ]
@@ -1576,6 +1576,17 @@
 ]
 
 [[package]]
+name = "io-uring"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
 name = "ipconfig"
 version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
@@ -2081,9 +2092,9 @@
 
 [[package]]
 name = "openssl"
-version = "0.10.71"
+version = "0.10.73"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd"
+checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8"
 dependencies = [
  "bitflags",
  "cfg-if",
@@ -2113,9 +2124,9 @@
 
 [[package]]
 name = "openssl-sys"
-version = "0.9.106"
+version = "0.9.109"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd"
+checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571"
 dependencies = [
  "cc",
  "libc",
@@ -2747,7 +2758,7 @@
 
 [[package]]
 name = "sequoia-octopus-librnp"
-version = "1.11.0"
+version = "1.11.1"
 dependencies = [
  "anyhow",
  "chrono",
@@ -2771,7 +2782,7 @@
  "serde",
  "serde_json",
  "tempfile",
- "thiserror 2.0.12",
+ "thiserror 1.0.69",
  "tokio",
  "vergen",
 ]
@@ -3223,15 +3234,17 @@
 
 [[package]]
 name = "tokio"
-version = "1.44.0"
+version = "1.46.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a"
+checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17"
 dependencies = [
  "backtrace",
  "bytes",
+ "io-uring",
  "libc",
  "mio",
  "pin-project-lite",
+ "slab",
  "socket2",
  "tokio-macros",
  "windows-sys 0.52.0",
diff -Nru rust-sequoia-octopus-librnp-1.11.0/Cargo.toml rust-sequoia-octopus-librnp-1.11.1/Cargo.toml
--- rust-sequoia-octopus-librnp-1.11.0/Cargo.toml	1970-01-01 01:00:01.000000000 +0100
+++ rust-sequoia-octopus-librnp-1.11.1/Cargo.toml	1970-01-01 01:00:01.000000000 +0100
@@ -11,9 +11,9 @@
 
 [package]
 edition = "2021"
-rust-version = "1.79"
+rust-version = "1.85"
 name = "sequoia-octopus-librnp"
-version = "1.11.0"
+version = "1.11.1"
 authors = [
     "Justus Winter <justus@sequoia-pgp.org>",
     "Neal H. Walfield <neal@sequoia-pgp.org>",
@@ -165,7 +165,9 @@
 [dependencies.tokio]
 version = "1"
 
-[build-dependencies.vergen]
+[build-dependencies]
+
+[target."cfg(not(windows))".build-dependencies.vergen]
 version = "8"
 features = [
     "git",
@@ -176,3 +178,11 @@
 [target."cfg(windows)".dependencies.rusqlite]
 version = ">=0.24, <0.32"
 features = ["bundled"]
+
+[target."cfg(windows)".build-dependencies.vergen]
+version = "8"
+features = [
+    "git",
+    "gitcl",
+]
+default-features = false
diff -Nru rust-sequoia-octopus-librnp-1.11.0/Cargo.toml.orig rust-sequoia-octopus-librnp-1.11.1/Cargo.toml.orig
--- rust-sequoia-octopus-librnp-1.11.0/Cargo.toml.orig	2006-07-24 03:21:28.000000000 +0200
+++ rust-sequoia-octopus-librnp-1.11.1/Cargo.toml.orig	2006-07-24 03:21:28.000000000 +0200
@@ -1,7 +1,7 @@
 [package]
 name = "sequoia-octopus-librnp"
 description = "Reimplementation of RNP's interface using Sequoia for use with Thunderbird"
-version = "1.11.0"
+version = "1.11.1"
 authors = [
     "Justus Winter <justus@sequoia-pgp.org>",
     "Neal H. Walfield <neal@sequoia-pgp.org>",
@@ -16,7 +16,7 @@
 license = "LGPL-2.0-or-later"
 edition = "2021"
 build = "build.rs"
-rust-version = "1.79"
+rust-version = "1.85"
 
 [badges]
 gitlab = { repository = "sequoia-pgp/sequoia-octopus-librnp" }
@@ -52,6 +52,15 @@
 rusqlite = { version = ">=0.24, <0.32", features = ["bundled"] }
 
 [build-dependencies]
+
+[target.'cfg(windows)'.build-dependencies]
+# Use the git command line tool to get the version.
+# https://docs.rs/vergen/8.3.2/vergen/index.html
+vergen = { version = "8", default-features = false, features = ["git", "gitcl"] }
+
+[target.'cfg(not(windows))'.build-dependencies]
+# Use the git library to get the version.
+# https://docs.rs/vergen/8.3.2/vergen/index.html
 vergen = { version = "8", default-features = false, features = ["git", "git2"] }
 
 [lib]
diff -Nru rust-sequoia-octopus-librnp-1.11.0/.cargo_vcs_info.json rust-sequoia-octopus-librnp-1.11.1/.cargo_vcs_info.json
--- rust-sequoia-octopus-librnp-1.11.0/.cargo_vcs_info.json	1970-01-01 01:00:01.000000000 +0100
+++ rust-sequoia-octopus-librnp-1.11.1/.cargo_vcs_info.json	1970-01-01 01:00:01.000000000 +0100
@@ -1,6 +1,6 @@
 {
   "git": {
-    "sha1": "1064b5d4771a4c6f958d57276e799a6401b8b3fa"
+    "sha1": "2c903a4df4366ba3bbfcccd29cca68fe67735b8f"
   },
   "path_in_vcs": ""
 }
\ Kein Zeilenumbruch am Dateiende.
diff -Nru rust-sequoia-octopus-librnp-1.11.0/debian/changelog rust-sequoia-octopus-librnp-1.11.1/debian/changelog
--- rust-sequoia-octopus-librnp-1.11.0/debian/changelog	2025-03-31 12:25:52.000000000 +0200
+++ rust-sequoia-octopus-librnp-1.11.1/debian/changelog	2025-07-09 14:49:09.000000000 +0200
@@ -1,3 +1,11 @@
+rust-sequoia-octopus-librnp (1.11.1-1) unstable; urgency=medium
+
+  * Package sequoia-octopus-librnp 1.11.1 from crates.io using debcargo 2.7.8
+    - Closes: #1109001.
+    - refresh patches.
+
+ -- Holger Levsen <holger@debian.org>  Wed, 09 Jul 2025 14:49:09 +0200
+
 rust-sequoia-octopus-librnp (1.11.0-1) unstable; urgency=medium
 
   * Package sequoia-octopus-librnp 1.11.0 from crates.io using debcargo 2.7.8
diff -Nru rust-sequoia-octopus-librnp-1.11.0/debian/control rust-sequoia-octopus-librnp-1.11.1/debian/control
--- rust-sequoia-octopus-librnp-1.11.0/debian/control	2025-03-31 12:25:52.000000000 +0200
+++ rust-sequoia-octopus-librnp-1.11.1/debian/control	2025-07-09 14:49:09.000000000 +0200
@@ -4,7 +4,7 @@
 Build-Depends: debhelper-compat (= 13),
  dh-sequence-cargo
 Build-Depends-Arch: cargo:native <!nocheck>,
- rustc:native (>= 1.79) <!nocheck>,
+ rustc:native (>= 1.85) <!nocheck>,
  libstd-rust-dev <!nocheck>,
  librust-anyhow-1+default-dev <!nocheck>,
  librust-buffered-reader-1+default-dev <!nocheck>,
diff -Nru rust-sequoia-octopus-librnp-1.11.0/debian/control.debcargo.hint rust-sequoia-octopus-librnp-1.11.1/debian/control.debcargo.hint
--- rust-sequoia-octopus-librnp-1.11.0/debian/control.debcargo.hint	2025-03-31 12:25:52.000000000 +0200
+++ rust-sequoia-octopus-librnp-1.11.1/debian/control.debcargo.hint	2025-07-09 14:49:09.000000000 +0200
@@ -4,7 +4,7 @@
 Build-Depends: debhelper-compat (= 13),
  dh-sequence-cargo
 Build-Depends-Arch: cargo:native <!nocheck>,
- rustc:native (>= 1.79) <!nocheck>,
+ rustc:native (>= 1.85) <!nocheck>,
  libstd-rust-dev <!nocheck>,
  librust-anyhow-1+default-dev <!nocheck>,
  librust-chrono-0.4+default-dev <!nocheck>,
@@ -108,11 +108,11 @@
  librust-sequoia-octopus-librnp-1.11+crypto-nettle-dev (= ${binary:Version}),
  librust-sequoia-octopus-librnp-1.11+crypto-openssl-dev (= ${binary:Version}),
  librust-sequoia-octopus-librnp-1.11+default-dev (= ${binary:Version}),
- librust-sequoia-octopus-librnp-1.11.0-dev (= ${binary:Version}),
- librust-sequoia-octopus-librnp-1.11.0+crypto-botan-dev (= ${binary:Version}),
- librust-sequoia-octopus-librnp-1.11.0+crypto-botan2-dev (= ${binary:Version}),
- librust-sequoia-octopus-librnp-1.11.0+crypto-nettle-dev (= ${binary:Version}),
- librust-sequoia-octopus-librnp-1.11.0+crypto-openssl-dev (= ${binary:Version}),
- librust-sequoia-octopus-librnp-1.11.0+default-dev (= ${binary:Version})
+ librust-sequoia-octopus-librnp-1.11.1-dev (= ${binary:Version}),
+ librust-sequoia-octopus-librnp-1.11.1+crypto-botan-dev (= ${binary:Version}),
+ librust-sequoia-octopus-librnp-1.11.1+crypto-botan2-dev (= ${binary:Version}),
+ librust-sequoia-octopus-librnp-1.11.1+crypto-nettle-dev (= ${binary:Version}),
+ librust-sequoia-octopus-librnp-1.11.1+crypto-openssl-dev (= ${binary:Version}),
+ librust-sequoia-octopus-librnp-1.11.1+default-dev (= ${binary:Version})
 Description: Reimplementation of librnp for Thunderbird by Sequoia - Rust source code
  Source code for Debianized Rust crate "sequoia-octopus-librnp"
diff -Nru rust-sequoia-octopus-librnp-1.11.0/debian/patches/drop-windows.patch rust-sequoia-octopus-librnp-1.11.1/debian/patches/drop-windows.patch
--- rust-sequoia-octopus-librnp-1.11.0/debian/patches/drop-windows.patch	2025-03-31 12:25:52.000000000 +0200
+++ rust-sequoia-octopus-librnp-1.11.1/debian/patches/drop-windows.patch	2025-07-09 14:49:09.000000000 +0200
@@ -8,7 +8,7 @@
 ===================================================================
 --- sequoia-octopus-librnp.orig/Cargo.toml
 +++ sequoia-octopus-librnp/Cargo.toml
-@@ -172,7 +172,3 @@ features = [
+@@ -174,15 +174,3 @@ features = [
      "git2",
  ]
  default-features = false
@@ -16,3 +16,11 @@
 -[target."cfg(windows)".dependencies.rusqlite]
 -version = ">=0.24, <0.32"
 -features = ["bundled"]
+-
+-[target."cfg(windows)".build-dependencies.vergen]
+-version = "8"
+-features = [
+-    "git",
+-    "gitcl",
+-]
+-default-features = false
diff -Nru rust-sequoia-octopus-librnp-1.11.0/debian/tests/control.debcargo.hint rust-sequoia-octopus-librnp-1.11.1/debian/tests/control.debcargo.hint
--- rust-sequoia-octopus-librnp-1.11.0/debian/tests/control.debcargo.hint	2025-03-31 12:25:52.000000000 +0200
+++ rust-sequoia-octopus-librnp-1.11.1/debian/tests/control.debcargo.hint	2025-07-09 14:49:09.000000000 +0200
@@ -1,34 +1,34 @@
-Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.0 --all-targets --all-features
+Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.1 --all-targets --all-features
 Features: test-name=rust-sequoia-octopus-librnp:@
-Depends: dh-cargo (>= 31), rustc (>= 1.79), @
+Depends: dh-cargo (>= 31), rustc (>= 1.85), @
 Restrictions: allow-stderr, skip-not-installable
 
-Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.0 --all-targets --no-default-features --features crypto-botan
+Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.1 --all-targets --no-default-features --features crypto-botan
 Features: test-name=librust-sequoia-octopus-librnp-dev:crypto-botan
-Depends: dh-cargo (>= 31), rustc (>= 1.79), @
+Depends: dh-cargo (>= 31), rustc (>= 1.85), @
 Restrictions: allow-stderr, skip-not-installable
 
-Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.0 --all-targets --no-default-features --features crypto-botan2
+Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.1 --all-targets --no-default-features --features crypto-botan2
 Features: test-name=librust-sequoia-octopus-librnp-dev:crypto-botan2
-Depends: dh-cargo (>= 31), rustc (>= 1.79), @
+Depends: dh-cargo (>= 31), rustc (>= 1.85), @
 Restrictions: allow-stderr, skip-not-installable
 
-Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.0 --all-targets --no-default-features --features crypto-nettle
+Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.1 --all-targets --no-default-features --features crypto-nettle
 Features: test-name=librust-sequoia-octopus-librnp-dev:crypto-nettle
-Depends: dh-cargo (>= 31), rustc (>= 1.79), @
+Depends: dh-cargo (>= 31), rustc (>= 1.85), @
 Restrictions: allow-stderr, skip-not-installable
 
-Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.0 --all-targets --no-default-features --features crypto-openssl
+Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.1 --all-targets --no-default-features --features crypto-openssl
 Features: test-name=librust-sequoia-octopus-librnp-dev:crypto-openssl
-Depends: dh-cargo (>= 31), rustc (>= 1.79), @
+Depends: dh-cargo (>= 31), rustc (>= 1.85), @
 Restrictions: allow-stderr, skip-not-installable
 
-Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.0 --all-targets
+Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.1 --all-targets
 Features: test-name=librust-sequoia-octopus-librnp-dev:default
-Depends: dh-cargo (>= 31), rustc (>= 1.79), @
+Depends: dh-cargo (>= 31), rustc (>= 1.85), @
 Restrictions: allow-stderr, skip-not-installable
 
-Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.0 --all-targets --no-default-features
+Test-Command: /usr/share/cargo/bin/cargo-auto-test sequoia-octopus-librnp 1.11.1 --all-targets --no-default-features
 Features: test-name=librust-sequoia-octopus-librnp-dev:
-Depends: dh-cargo (>= 31), rustc (>= 1.79), @
+Depends: dh-cargo (>= 31), rustc (>= 1.85), @
 Restrictions: allow-stderr, skip-not-installable
diff -Nru rust-sequoia-octopus-librnp-1.11.0/src/dump_packets/dump.rs rust-sequoia-octopus-librnp-1.11.1/src/dump_packets/dump.rs
--- rust-sequoia-octopus-librnp-1.11.0/src/dump_packets/dump.rs	2006-07-24 03:21:28.000000000 +0200
+++ rust-sequoia-octopus-librnp-1.11.1/src/dump_packets/dump.rs	2006-07-24 03:21:28.000000000 +0200
@@ -106,12 +106,20 @@
 #[allow(clippy::redundant_pattern_matching)]
 pub fn dump<W>(input: &mut (dyn io::Read + Sync + Send),
                output: &mut dyn io::Write,
+               max_decompressed_literal_data: Option<usize>,
                mpis: bool, hex: bool,
                sk: Option<&SessionKey>,
                width: W)
                -> Result<Kind>
     where W: Into<Option<usize>>
 {
+    rnp_function!(dump, crate::TRACE);
+
+    // If no limit is supplied, stop after 100 MB.
+    let max_decompressed_literal_data
+        = max_decompressed_literal_data.unwrap_or(100 * 1024 * 1024);
+    let mut saw_decompression_packet = false;
+
     let mut ppr
         = self::openpgp::parse::PacketParserBuilder::from_reader(input)?;
 
@@ -145,14 +153,55 @@
                 skesks.push(p.clone());
                 vec![]
             },
+            Packet::CompressedData(_) => {
+                t!("Encountered compressed data packet.  \
+                    Activating zip bomb protection.");
+                saw_decompression_packet = true;
+                Vec::new()
+            }
             Packet::Literal(_) => {
                 let mut prefix = vec![0; 40];
                 let n = pp.read(&mut prefix)?;
-                vec![
+                let summary = vec![
                     format!("Content: {:?}{}",
                             String::from_utf8_lossy(&prefix[..n]),
                             if n == prefix.len() { "..." } else { "" }),
-                ]
+                ];
+
+                if saw_decompression_packet {
+                    // Protect against a possible zip bomb.
+                    t!("Zip bomb protection activated.  Will abort after \
+                        reading more than {} bytes of literal data.",
+                       max_decompressed_literal_data);
+
+                    const BUFFER_SIZE: usize = 1024 * 1024;
+                    let mut buffer = vec![0; BUFFER_SIZE];
+                    let mut literal_data_read = prefix.len();
+                    while literal_data_read <= max_decompressed_literal_data {
+                        let remaining
+                            = max_decompressed_literal_data - literal_data_read + 1;
+
+                        let read = pp.read(
+                            &mut buffer[..remaining.min(BUFFER_SIZE)])?;
+                        if read == 0 {
+                            // EOF.
+                            break;
+                        }
+
+                        literal_data_read += read;
+                    }
+                    t!("Read {} bytes of literal data",
+                       literal_data_read);
+
+                    if literal_data_read > max_decompressed_literal_data {
+                        t!("Zip bomb detected");
+                        return Err(crate::Error::BadParameters.into());
+                    } else {
+                        t!("No zip bomb detected");
+                    }
+                }
+
+                summary
             },
             Packet::SEIP(ref s) => {
 		let version = s.version();
diff -Nru rust-sequoia-octopus-librnp-1.11.0/src/dump_packets.rs rust-sequoia-octopus-librnp-1.11.1/src/dump_packets.rs
--- rust-sequoia-octopus-librnp-1.11.0/src/dump_packets.rs	2006-07-24 03:21:28.000000000 +0200
+++ rust-sequoia-octopus-librnp-1.11.1/src/dump_packets.rs	2006-07-24 03:21:28.000000000 +0200
@@ -30,7 +30,15 @@
     // Key grips are a proprietary GnuPG extension.  No.
     let _dump_grip = flags & RNP_DUMP_GRIP > 0;
 
-    rnp_try_or!(dump::dump(input, output, dump_mpis, dump_hex, None, None),
+    let max_decompressed_literal_data
+        = if let RnpOutput::Buf((_buf, Some(max))) = output {
+            Some(*max)
+        } else {
+            None
+        };
+
+    rnp_try_or!(dump::dump(input, output, max_decompressed_literal_data,
+                           dump_mpis, dump_hex, None, None),
                 RNP_ERROR_GENERIC);
     rnp_success!()
 }
diff -Nru rust-sequoia-octopus-librnp-1.11.0/src/lib.rs rust-sequoia-octopus-librnp-1.11.1/src/lib.rs
--- rust-sequoia-octopus-librnp-1.11.0/src/lib.rs	2006-07-24 03:21:28.000000000 +0200
+++ rust-sequoia-octopus-librnp-1.11.1/src/lib.rs	2006-07-24 03:21:28.000000000 +0200
@@ -32,10 +32,12 @@
         UserID,
     },
     policy::{
+        HashAlgoSecurity,
         NullPolicy,
         StandardPolicy,
     },
     serialize::Serialize,
+    types::HashAlgorithm,
 };
 
 /// Controls tracing.
@@ -169,12 +171,12 @@
     plaintext_cache: recombine::PlaintextCache,
 }
 
-type RnpPasswordCb = unsafe extern fn(*mut RnpContext,
-                                      *mut c_void,
-                                      *const RnpKey,
-                                      *const c_char,
-                                      *mut c_char,
-                                      size_t) -> bool;
+type RnpPasswordCb = unsafe extern "C" fn(*mut RnpContext,
+                                          *mut c_void,
+                                          *const RnpKey,
+                                          *const c_char,
+                                          *mut c_char,
+                                          size_t) -> bool;
 
 #[no_mangle] pub unsafe extern "C"
 fn rnp_ffi_create(ctx: *mut *mut RnpContext,
@@ -252,7 +254,29 @@
     if let Err(e) = policy.parse_default_config() {
         global_warn!("Reading crypto policy: {}", e);
     }
-    let policy = policy.build();
+    let mut policy = policy.build();
+
+    // Thunderbird checks that MD5 and SHA-1 for self-signatures are
+    // disabled and refuses to fully initialize RNP otherwise.  Meet
+    // its expectations.
+
+    let now = std::time::SystemTime::now();
+    for (algo, prop) in [
+        (HashAlgorithm::MD5, HashAlgoSecurity::CollisionResistance),
+        (HashAlgorithm::MD5, HashAlgoSecurity::SecondPreImageResistance),
+        (HashAlgorithm::SHA1, HashAlgoSecurity::CollisionResistance),
+    ]
+    {
+        let cutoff = policy.hash_cutoff(algo, prop);
+        t!("{} for {:?}: {:?}", algo, prop, cutoff);
+        if cutoff.unwrap_or(now) >= now {
+            warn!("Your crypto policy enables {} in contexts where {:?} is \
+                   needed ({:?}).  Unconditionally rejecting it.",
+                  algo, prop, cutoff);
+            policy.reject_hash_property_at(
+                algo, prop, std::time::UNIX_EPOCH);
+        }
+    }
 
     *ctx = Box::into_raw(Box::new(RnpContext {
         policy: Arc::new(RwLock::new(policy)),

Attachment: signature.asc
Description: PGP signature


Reply to: