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 3f4be7c..003a938 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1777,21 +1777,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" @@ -3433,31 +3418,6 @@ dependencies = [ "portable-atomic", ] -[[package]] -name = "openssl" -version = "0.10.81" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" -dependencies = [ - "bitflags 2.13.2", - "cfg-if", - "foreign-types", - "libc", - "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 2.0.119", -] - [[package]] name = "openssl-probe" version = "0.1.6" @@ -3470,18 +3430,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" -[[package]] -name = "openssl-sys" -version = "0.9.117" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "opentelemetry" version = "0.32.0" @@ -3719,13 +3667,13 @@ dependencies = [ "google-cloud-auth", "google-cloud-storage", "hex", + "hmac 0.12.1", "hyper 1.11.1", "log", "mockall", "mongodb", "oauth2", "once_cell", - "openssl", "percent-encoding", "postgres", "rand 0.9.5", @@ -3733,6 +3681,7 @@ dependencies = [ "reqwest 0.13.5", "serde", "serde_json", + "sha2 0.10.9", "tar", "tempfile", "testcontainers", @@ -5818,12 +5767,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 bbd68ff..13d36b3 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", "process", "io-util"] } 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/docker-compose.yml b/docker-compose.yml index 7ef5c4f..699ed22 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,17 +12,17 @@ services: - ./databases.json:/config/config.json #- ./databases.toml:/config/config.toml - /var/run/docker.sock:/var/run/docker.sock - # - cargo-target:/app/target +# - cargo-target:/app/target - databases_sqlite-data:/sqlite-data/workspace/data - ./scripts/sqlite/test-db:/sqlite-data-2/workspace/data - # - /bigdisk:/scratch +# - /bigdisk:/scratch environment: APP_ENV: development LOG: debug TZ: "Europe/Paris" - # TMPDIR: /scratch - EDGE_KEY: "eyJzZXJ2ZXJVcmwiOiJodHRwOi8vbG9jYWxob3N0Ojg4ODciLCJhZ2VudElkIjoiNmQ1YTdjNDctZDhjMS00ZjFlLTlhYWEtODkzNzBkMGZjZGVhIiwibWFzdGVyS2V5QjY0IjoiQlhWM1hvbEM2NTZTVjdkTmdjV1BHUWxrKytycExJNmxHRGk3Q1BCNWllbz0ifQ==" -# CHUNK_SIZE_MB: "1" +# TMPDIR: /scratch + EDGE_KEY: "eyJzZXJ2ZXJVcmwiOiJodHRwOi8vbG9jYWxob3N0Ojg4ODciLCJhZ2VudElkIjoiYTQyNjQzNTQtZGE3Ni00OWFkLWJkYjctZDVjMjMwYzhjYmViIiwibWFzdGVyS2V5QjY0IjoiQlhWM1hvbEM2NTZTVjdkTmdjV1BHUWxrKytycExJNmxHRGk3Q1BCNWllbz0ifQ==" + #CHUNK_SIZE_MB: "1" #POOLING: 1 #RETRY_ATTEMPTS: 3 #RETRY_BACKOFF_MS: 1000 @@ -40,7 +40,7 @@ services: volumes: cargo-registry: cargo-git: - # cargo-target: +# cargo-target: databases_sqlite-data: external: true 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(