From 47ca835c207ce507c3ec53f9fc21af72c5f215ec Mon Sep 17 00:00:00 2001
From: strawberry <strawberry@puppygock.gay>
Date: Fri, 23 Aug 2024 19:29:36 -0400
Subject: [PATCH] initialise default TLS crypto provider with aws_lc_rs
 manually

we use ring for hashing state and ruma, and reqwest/rustls defaults
to aws_lc_rs, so we have to manually pick which one. there doesn't
seem to be a way to just use one for some reason, so lets just use
the new aws_lc_rs.

Signed-off-by: strawberry <strawberry@puppygock.gay>
---
 Cargo.lock              | 22 ++++++++++++----------
 Cargo.toml              |  3 +++
 src/core/Cargo.toml     |  1 +
 src/router/Cargo.toml   |  1 +
 src/router/serve/tls.rs |  4 ++++
 5 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index a0675640e..ef18182c7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -484,9 +484,9 @@ dependencies = [
 
 [[package]]
 name = "cc"
-version = "1.1.13"
+version = "1.1.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48"
+checksum = "50d2eb3cd3d1bf4529e31c215ee6f93ec5a3d536d9f578f93d9d33ee19562932"
 dependencies = [
  "jobserver",
  "libc",
@@ -708,6 +708,7 @@ dependencies = [
  "reqwest",
  "ring",
  "ruma",
+ "rustls 0.23.12",
  "sanitize-filename",
  "serde",
  "serde_json",
@@ -767,6 +768,7 @@ dependencies = [
  "hyper-util",
  "log",
  "ruma",
+ "rustls 0.23.12",
  "sd-notify",
  "sentry",
  "sentry-tower",
@@ -1946,9 +1948,9 @@ dependencies = [
 
 [[package]]
 name = "lazy-regex"
-version = "3.2.0"
+version = "3.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "576c8060ecfdf2e56995cf3274b4f2d71fa5e4fa3607c1c0b63c10180ee58741"
+checksum = "8d8e41c97e6bc7ecb552016274b99fbb5d035e8de288c582d9b933af6677bfda"
 dependencies = [
  "lazy-regex-proc_macros",
  "once_cell",
@@ -1957,9 +1959,9 @@ dependencies = [
 
 [[package]]
 name = "lazy-regex-proc_macros"
-version = "3.2.0"
+version = "3.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9efb9e65d4503df81c615dc33ff07042a9408ac7f26b45abee25566f7fbfd12c"
+checksum = "76e1d8b05d672c53cb9c7b920bbba8783845ae4f0b076e02a3db1d02c81b4163"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2806,9 +2808,9 @@ dependencies = [
 
 [[package]]
 name = "quote"
-version = "1.0.36"
+version = "1.0.37"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
 dependencies = [
  "proc-macro2",
 ]
@@ -3591,9 +3593,9 @@ dependencies = [
 
 [[package]]
 name = "serde_json"
-version = "1.0.125"
+version = "1.0.127"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed"
+checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad"
 dependencies = [
  "itoa",
  "memchr",
diff --git a/Cargo.toml b/Cargo.toml
index 304572055..a9269d087 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -128,6 +128,9 @@ features = [
     "catch-panic",
 ]
 
+[workspace.dependencies.rustls]
+version = "0.23.12"
+
 [workspace.dependencies.reqwest]
 version = "0.12.7"
 default-features = false
diff --git a/src/core/Cargo.toml b/src/core/Cargo.toml
index f6cd5171b..2e2b05813 100644
--- a/src/core/Cargo.toml
+++ b/src/core/Cargo.toml
@@ -82,6 +82,7 @@ regex.workspace = true
 reqwest.workspace = true
 ring.workspace = true
 ruma.workspace = true
+rustls.workspace = true
 sanitize-filename.workspace = true
 serde_json.workspace = true
 serde_regex.workspace = true
diff --git a/src/router/Cargo.toml b/src/router/Cargo.toml
index 52535ecfc..2f85ffb77 100644
--- a/src/router/Cargo.toml
+++ b/src/router/Cargo.toml
@@ -62,6 +62,7 @@ http.workspace = true
 hyper.workspace = true
 hyper-util.workspace = true
 ruma.workspace = true
+rustls.workspace = true
 sentry.optional = true
 sentry-tower.optional = true
 sentry-tower.workspace = true
diff --git a/src/router/serve/tls.rs b/src/router/serve/tls.rs
index 109e14d87..174a511f4 100644
--- a/src/router/serve/tls.rs
+++ b/src/router/serve/tls.rs
@@ -18,6 +18,10 @@ pub(super) async fn serve(
 	let certs = &tls.certs;
 	let key = &tls.key;
 
+	// we use ring for ruma and hashing state, but aws-lc-rs is the new default.
+	// without this, TLS mode will panic.
+	_ = rustls::crypto::aws_lc_rs::default_provider().install_default();
+
 	debug!("Using direct TLS. Certificate path {certs} and certificate private key path {key}",);
 	info!(
 		"Note: It is strongly recommended that you use a reverse proxy instead of running conduwuit directly with TLS."
-- 
GitLab