From cc1703592e2ccbf12d84ca5642d0e6ba709ded96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LAGACHE?= Date: Wed, 9 Sep 2026 11:57:56 +0200 Subject: [PATCH] poc --- .github/workflows/windows-release.yml | 15 ---- Cargo.lock | 68 +------------------ Cargo.toml | 3 +- .../storage/providers/azure_blob/helpers.rs | 15 ++-- 4 files changed, 11 insertions(+), 90 deletions(-) diff --git a/.github/workflows/windows-release.yml b/.github/workflows/windows-release.yml index 5945754..bd8a582 100644 --- a/.github/workflows/windows-release.yml +++ b/.github/workflows/windows-release.yml @@ -44,21 +44,6 @@ jobs: - name: Cache cargo build uses: Swatinem/rust-cache@v2 - - name: Cache vcpkg installed packages - uses: actions/cache@v4 - with: - path: C:\vcpkg\installed - key: vcpkg-openssl-x64-windows-v1 - - - name: Install OpenSSL (x64) via vcpkg - shell: pwsh - run: | - # windows-latest ships vcpkg preinstalled; the install is a no-op when the - # package is restored from cache. - & "$env:VCPKG_INSTALLATION_ROOT\vcpkg.exe" install openssl:x64-windows - 'VCPKG_ROOT=C:\vcpkg' | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - 'OPENSSL_DIR=C:\vcpkg\installed\x64-windows' | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - - name: Build (cargo release) shell: pwsh run: cargo build --release --bin app diff --git a/Cargo.lock b/Cargo.lock index 5eb1b6c..9405e27 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1707,21 +1707,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.2" @@ -3245,32 +3230,6 @@ dependencies = [ "portable-atomic", ] -[[package]] -name = "openssl" -version = "0.10.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "951c002c75e16ea2c65b8c7e4d3d51d5530d8dfa7d060b4776828c88cfb18ecf" -dependencies = [ - "bitflags 2.11.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "openssl-probe" version = "0.1.6" @@ -3283,18 +3242,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" -[[package]] -name = "openssl-sys" -version = "0.9.112" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d55af3b3e226502be1526dfdba67ab0e9c96fc293004e79576b2b9edb0dbdb" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "opentelemetry" version = "0.32.0" @@ -3478,12 +3425,6 @@ dependencies = [ "spki", ] -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - [[package]] name = "plain" version = "0.2.3" @@ -3528,13 +3469,13 @@ dependencies = [ "google-cloud-auth", "google-cloud-storage", "hex", + "hmac 0.12.1", "hyper 1.10.1", "log", "mockall", "mongodb", "oauth2", "once_cell", - "openssl", "percent-encoding", "postgres", "rand 0.9.2", @@ -3542,6 +3483,7 @@ dependencies = [ "reqwest 0.13.4", "serde", "serde_json", + "sha2 0.10.9", "tar", "tempfile", "testcontainers", @@ -5567,12 +5509,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.5" diff --git a/Cargo.toml b/Cargo.toml index 65d9cc2..9bd74bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,8 @@ anyhow = "1.0.100" tokio = { version = "1.49.0", features = ["rt", "rt-multi-thread", "macros", "fs"] } async-trait = "0.1.89" tempfile = "3.24.0" -openssl = "0.10.75" +hmac = "0.12" +sha2 = "0.10" hex = "0.4.3" flate2 = "1.1.5" tar = "0.4.44" diff --git a/src/services/storage/providers/azure_blob/helpers.rs b/src/services/storage/providers/azure_blob/helpers.rs index ab6551e..d4a8da1 100644 --- a/src/services/storage/providers/azure_blob/helpers.rs +++ b/src/services/storage/providers/azure_blob/helpers.rs @@ -2,9 +2,8 @@ use anyhow::{Context as _, Result, anyhow}; use base64::Engine; use base64::engine::general_purpose::STANDARD; use chrono::{Duration, Utc}; -use openssl::hash::MessageDigest; -use openssl::pkey::PKey; -use openssl::sign::Signer; +use hmac::{Hmac, Mac}; +use sha2::Sha256; use url::Url; use azure_core::http::RequestContent; use azure_storage_blob::clients::{BlobClient, BlockBlobClient}; @@ -36,12 +35,12 @@ impl SasResource { pub(crate) const SAS_VERSION: &str = "2022-11-02"; +type HmacSha256 = Hmac; + pub(crate) fn hmac_sha256_b64(key: &[u8], data: &str) -> Result { - let pkey = PKey::hmac(key).context("hmac key")?; - let mut signer = Signer::new(MessageDigest::sha256(), &pkey).context("signer")?; - signer.update(data.as_bytes()).context("signer update")?; - let sig = signer.sign_to_vec().context("sign")?; - Ok(STANDARD.encode(sig)) + let mut mac = HmacSha256::new_from_slice(key).context("hmac key")?; + mac.update(data.as_bytes()); + Ok(STANDARD.encode(mac.finalize().into_bytes())) } pub fn build_service_sas(