diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 684210a..5d1f901 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -2,9 +2,9 @@ name: Docker Image CI on: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] + branches: ["main"] env: REGISTRY: ghcr.io @@ -31,9 +31,9 @@ jobs: - name: Build Binaries run: | # Build x86 - cross build --release --target x86_64-unknown-linux-gnu + cross build --release --target x86_64-unknown-linux-gnu --features aws-lc-bindgen # Build ARM64 - cross build --release --target aarch64-unknown-linux-gnu + cross build --release --target aarch64-unknown-linux-gnu --features aws-lc-bindgen # Organize binaries for Docker Packaging mkdir -p bin/amd64 bin/arm64 diff --git a/Cargo.toml b/Cargo.toml index 04d2038..7b8e90b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ categories = ["network-programming", "multimedia"] opus = ["dep:opusic-sys"] default = ["opus"] not_vad = [] +aws-lc-bindgen = ["aws-lc-rs/bindgen"] [dependencies] opusic-sys = { version = "0.5.8", optional = true } @@ -30,7 +31,7 @@ axum = { version = "0.8.7", features = ["ws", "tokio", "multipart"] } tower-http = { version = "0.6.2", features = ["fs", "trace"] } bytes = "1" futures = "0.3.31" -rustls = { version = "0.23.36", features = ["ring"] } +rustls = "0.23.36" dotenvy = "0.15.7" clap = { version = "4.5.54", features = ["derive"] } chrono = { version = "0.4.42", features = ["serde"] } @@ -71,7 +72,6 @@ nnnoiseless = "0.5.2" hound = "3.5.1" get_if_addrs = "0.5.3" http = "1.4.0" -ring = "0.17.14" urlencoding = "2.1.3" base64 = "0.22.1" url = "2.5.8" @@ -80,7 +80,7 @@ realfft = "3.3" rmp3 = "0.3" tempfile = "3.24.0" # Workaround for cross-compilation - generate bindings at compile time -#aws-lc-rs = { version = "1", features = ["bindgen"] } +aws-lc-rs = "1" [dev-dependencies] tempfile = "3.23.0" diff --git a/src/main.rs b/src/main.rs index db6f863..b3cd326 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,7 +27,7 @@ pub async fn index() -> impl IntoResponse { #[tokio::main] async fn main() -> Result<()> { - rustls::crypto::ring::default_provider() + rustls::crypto::aws_lc_rs::default_provider() .install_default() .expect("Failed to install rustls crypto provider"); diff --git a/src/synthesis/tencent_cloud.rs b/src/synthesis/tencent_cloud.rs index 81670c6..d01c257 100644 --- a/src/synthesis/tencent_cloud.rs +++ b/src/synthesis/tencent_cloud.rs @@ -2,13 +2,13 @@ use super::{SynthesisClient, SynthesisOption, SynthesisType}; use crate::synthesis::{Subtitle, SynthesisEvent}; use anyhow::Result; use async_trait::async_trait; +use aws_lc_rs::hmac; use base64::{Engine, prelude::BASE64_STANDARD}; use chrono::Duration; use futures::{ SinkExt, Stream, StreamExt, future, stream::{self, BoxStream, SplitSink}, }; -use ring::hmac; use serde::{Deserialize, Serialize}; use std::sync::Arc; use tokio::{ diff --git a/src/synthesis/tencent_cloud_basic.rs b/src/synthesis/tencent_cloud_basic.rs index 34d9232..01f707f 100644 --- a/src/synthesis/tencent_cloud_basic.rs +++ b/src/synthesis/tencent_cloud_basic.rs @@ -2,6 +2,7 @@ use super::{SynthesisClient, SynthesisOption, SynthesisType}; use crate::synthesis::{SynthesisEvent, tencent_cloud::TencentSubtitle}; use anyhow::Result; use async_trait::async_trait; +use aws_lc_rs::hmac; use base64::{Engine, prelude::BASE64_STANDARD}; use bytes::Bytes; use futures::{ @@ -9,7 +10,6 @@ use futures::{ stream::{self, BoxStream}, }; use rand::Rng; -use ring::hmac; use serde::Deserialize; use tokio::sync::mpsc; use tokio_stream::wrappers::UnboundedReceiverStream; diff --git a/src/synthesis/tests.rs b/src/synthesis/tests.rs index 7e7b3fe..50c9736 100644 --- a/src/synthesis/tests.rs +++ b/src/synthesis/tests.rs @@ -153,7 +153,8 @@ fn get_deepgram_credentials() -> Option { #[tokio::test] async fn test_tencent_cloud_tts() { // Initialize crypto provider - rustls::crypto::CryptoProvider::install_default(rustls::crypto::ring::default_provider()).ok(); + rustls::crypto::CryptoProvider::install_default(rustls::crypto::aws_lc_rs::default_provider()) + .ok(); let (secret_id, secret_key, app_id) = match get_tencent_credentials() { Some(creds) => creds, @@ -194,7 +195,8 @@ async fn test_tencent_cloud_tts() { #[tokio::test] async fn test_aliyun_tts() { // Initialize crypto provider - rustls::crypto::CryptoProvider::install_default(rustls::crypto::ring::default_provider()).ok(); + rustls::crypto::CryptoProvider::install_default(rustls::crypto::aws_lc_rs::default_provider()) + .ok(); let api_key = match get_aliyun_credentials() { Some(key) => key, @@ -227,7 +229,8 @@ async fn test_aliyun_tts() { #[tokio::test] async fn test_deepgram_tts() { - rustls::crypto::CryptoProvider::install_default(rustls::crypto::ring::default_provider()).ok(); + rustls::crypto::CryptoProvider::install_default(rustls::crypto::aws_lc_rs::default_provider()) + .ok(); let api_key = match get_deepgram_credentials() { Some(key) => key, diff --git a/src/transcription/tencent_cloud.rs b/src/transcription/tencent_cloud.rs index 63419f4..0c734e7 100644 --- a/src/transcription/tencent_cloud.rs +++ b/src/transcription/tencent_cloud.rs @@ -6,12 +6,12 @@ use crate::transcription::{ use anyhow::{Result, anyhow}; use async_trait::async_trait; use audio_codec::{Sample, samples_to_bytes}; +use aws_lc_rs::hmac; use base64::{Engine, prelude::BASE64_STANDARD}; use chrono; use futures::{SinkExt, StreamExt}; use http::{Request, StatusCode, Uri}; use rand::random; -use ring::hmac; use serde::{Deserialize, Serialize}; use std::future::Future; use std::pin::Pin; diff --git a/src/transcription/tests.rs b/src/transcription/tests.rs index 2580d6f..8af7e2a 100644 --- a/src/transcription/tests.rs +++ b/src/transcription/tests.rs @@ -8,7 +8,7 @@ use crate::{ }; use dotenvy::dotenv; use once_cell::sync::OnceCell; -use rustls::crypto::ring::default_provider; +use rustls::crypto::aws_lc_rs::default_provider; use std::{collections::HashMap, env}; use tokio::time::{Duration, timeout};