diff --git a/.cargo/audit.toml b/.cargo/audit.toml index 3a410bd6..954e440f 100644 --- a/.cargo/audit.toml +++ b/.cargo/audit.toml @@ -4,12 +4,21 @@ # or an accepted, documented risk. Keep this list TIGHT and justify every entry — an ignore here # means the audit job stops flagging it, so the reasoning must hold up. # -# NOTE: `cargo audit` (no `--deny warnings`) fails only on *vulnerabilities*, not on the -# `unmaintained` warnings (audiopus_sys via opus, paste via utoipa-axum). Both are transitive, at -# their latest published version with no successor, so there's nothing to bump — left visible on -# purpose so we keep getting the maintenance signal; they do not fail CI. (rustls-pemfile was dropped -# 2026-06-29 by removing axum-server's unused tls-rustls feature + moving our own PEM parsing to -# rustls-pki-types; memmap2's unsoundness was fixed by the 0.9.11 bump.) +# ⚠ NOTE: `cargo audit` (no `--deny warnings`) fails only on *vulnerabilities* — `unmaintained` AND +# `unsound` advisories are warnings that do NOT fail CI. That is deliberate for the two unmaintained +# crates below, but it does mean an unsoundness can sit here unnoticed: RUSTSEC-2026-0221 +# (event-listener) did exactly that until the 2026-08-13 sweep. Read the job's warnings, not just +# its exit code. +# +# The two unmaintained ones, both transitive with no successor to bump to, left visible on purpose +# so we keep getting the maintenance signal: +# * audiopus_sys via opus (opus itself IS maintained; only its -sys layer is stuck). +# * paste via BOTH utoipa-axum (host) and rav1d (client decode path) — an earlier version of this +# note named only utoipa-axum, which would have made dropping utoipa-axum look like it cleared +# paste. It would not: every client pulls it through rav1d. +# (rustls-pemfile was dropped 2026-06-29 by removing axum-server's unused tls-rustls feature + +# moving our own PEM parsing to rustls-pki-types; memmap2's unsoundness was fixed by the 0.9.11 +# bump.) [advisories] ignore = [ @@ -34,17 +43,8 @@ ignore = [ # a constant-time rsa ships (then drop this), the host ever signs an attacker-chosen message with # this key, or any RSA decryption / key-transport using the private key is added. "RUSTSEC-2023-0071", - - # quick-xml DoS advisories (RUSTSEC-2026-0194 quadratic-time duplicate-attribute check; - # RUSTSEC-2026-0195 unbounded namespace-declaration allocation in NsReader). Both are - # exploited by feeding attacker-controlled XML to a running parser. In this tree quick-xml is - # a BUILD-TIME-ONLY, transitive dependency of `wayland-scanner` (a proc-macro that parses the - # TRUSTED wayland protocol XML files shipped with the wayland-rs crates at compile time). It is - # never linked into any shipped binary and never parses runtime/attacker-controlled input, so - # neither DoS is reachable. There is no fix to bump to: wayland-scanner 0.31.10 (latest) pins - # `quick-xml ^0.39`, and the fixes only exist in quick-xml >=0.41. Revisit (drop these) when - # wayland-scanner releases against quick-xml >=0.41, or if quick-xml is ever pulled onto a - # runtime path that parses untrusted XML. - "RUSTSEC-2026-0194", - "RUSTSEC-2026-0195", + # The quick-xml DoS pair (RUSTSEC-2026-0194/0195) used to be ignored here, with the note + # "revisit when wayland-scanner releases against quick-xml >=0.41". It has: wayland-scanner + # 0.31.11 moved to `quick-xml ^0.41` and the lock is on 0.41.0 as of 2026-08-13, so both + # entries were dropped rather than left as permanent exceptions. ] diff --git a/.gitea/workflows/audit.yml b/.gitea/workflows/audit.yml index 9f1540cf..2c7987fc 100644 --- a/.gitea/workflows/audit.yml +++ b/.gitea/workflows/audit.yml @@ -2,6 +2,9 @@ # license-allowlist gate (CRA Annex I Part II: know your components; catch a bad dep the moment # it lands). # * cargo-audit → the (network-facing, crypto-heavy) Rust tree, against the RustSec advisory DB. +# ⚠ ALL FIVE Rust lockfiles, each named with its own `--file`: a bare `cargo audit` +# reads only the root one, which is how the drivers lock went unscanned for so +# long despite already being in this job's `paths:` filter. # * bun audit → each Bun-managed tree that ships or publishes: web (the mgmt console BFF — # login gate, session sealing, mgmt bearer token), sdk (@punktfunk/host), # plugin-kit (@punktfunk/plugin-kit). @@ -11,7 +14,7 @@ # build chain (node-tar, brace-expansion); clearing them needs coordinated bumps # verified against the LIVE site (the docs don't build standalone) — tracked in # punktfunk-planning design/cra-readiness.md. Flip to blocking once clean. -# * cargo-about → license-allowlist gate over BOTH Rust workspaces (about.toml `accepted`); +# * cargo-about → license-allowlist gate over the host + driver workspaces (about.toml `accepted`); # fails if any crate carries a license outside the allowlist — the regression # guard about.toml always promised. (The Android Gradle tree has no lockfile, so # nothing scans it — see the CRA roadmap.) @@ -47,6 +50,9 @@ on: paths: - 'Cargo.lock' - 'packaging/windows/drivers/Cargo.lock' + - 'packaging/windows/pf-vkhdr-layer/Cargo.lock' + - 'tools/win-input-matrix/Cargo.lock' + - 'tools/hid-descriptor-dump/Cargo.lock' - 'web/bun.lock' - 'docs-site/bun.lock' - 'sdk/bun.lock' @@ -83,7 +89,15 @@ jobs: run: | git config --global --add safe.directory "$PWD" command -v cargo-audit >/dev/null 2>&1 || cargo install --locked cargo-audit + # Bare `cargo audit` scans ONLY the root Cargo.lock. The other three Rust workspaces are + # separate locks and were silently never scanned — the drivers one despite already being + # in this job's `paths:` filter, so edits to it triggered a run that then ignored it. + # Each needs its own `--file`. `pf-vkhdr-layer` had no lockfile at all until 2026-08-13. cargo audit + cargo audit --file packaging/windows/drivers/Cargo.lock + cargo audit --file packaging/windows/pf-vkhdr-layer/Cargo.lock + cargo audit --file tools/win-input-matrix/Cargo.lock + cargo audit --file tools/hid-descriptor-dump/Cargo.lock bun-audit: strategy: diff --git a/CHANGELOG.md b/CHANGELOG.md index 34ac78cc..7d00f72b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,47 @@ pairing + the legacy GCM path, security-review #5/#9) are enabled only by an exp the old flag is still accepted as explicit-off). - Windows was already opt-in (unchecked installer task) and is unchanged. +### TLS moved to aws-lc-rs, with post-quantum key exchange (⚠ build-visible for packagers/embedders) + +The rustls backend across the whole workspace — host, tray, clients and `punktfunk-core` — is now +**aws-lc-rs** instead of `ring`, which enables rustls's `prefer-post-quantum`: every TLS 1.3 +handshake (management API, the native `punktfunk/1` control plane, QUIC) now offers the +**X25519MLKEM768** hybrid key exchange first. Ring has no ML-KEM, which is why the backend had to +move. This is negotiation-only and additive — the classical curves stay in the list, so any client +that does not implement ML-KEM connects exactly as before, and no wire format, ABI or pairing +record changes. The session AEAD (AES-128-GCM / ChaCha20-Poly1305) is a separate mechanism and is +untouched. + +⚠ **Building from source now needs a working C compiler**, because `aws-lc-sys` compiles AWS-LC. +No CMake, Go, or NASM is required for the default (non-FIPS) build — on Windows x86_64 rustls turns +on `aws-lc-rs/prebuilt-nasm`, so no NASM has to be installed. If you add a crate that depends on +`aws-lc-rs` *directly*, name `features = ["prebuilt-nasm"]` on it: a package selection that pulls +`aws-lc-rs` without also enabling rustls's `aws_lc_rs` feature otherwise fails on Windows. + +`punktfunk-core` gains an off-by-default **`ureq-tls`** feature (`tls::ureq_agent`) that builds a +blocking HTTP agent around a caller-supplied `rustls::ClientConfig` — the only way to install the +fingerprint-pinning verifier, since ureq's own `TlsConfig` has no hook for one. The desktop client +and the tray enable it; the Apple/Android cdylib embedders do not, and pull no HTTP stack. + +**`ring` is gone from the tree entirely** — aws-lc-rs is now the only crypto backend on every +target we ship. Getting there needed the `ureq 2 → 3` upgrade in the same change, because ureq 2 +named `rustls/ring` inside its own dependency declaration where no dependent could switch it off. +ureq 3 declares rustls with `default-features = false` and picks no backend, so the choice is +finally ours. ⚠ Spell that dependency `features = ["rustls-no-provider", "rustls-webpki-roots"]`: +ureq 3's convenience `rustls` feature pulls `_ring` and would quietly restore the second backend. + +The ureq upgrade is otherwise internal, but two behaviours are worth knowing. Response size caps +are now enforced by the body reader, so an over-cap response is an **error** instead of ureq 2's +silent truncation (which used to surface as a confusing signature failure). And a fingerprint +mismatch is now matched on ureq 3's typed `Error::Rustls(..)` rather than by sniffing a substring +out of a transport error message — the old test could also fire on unrelated certificate errors. +Conditional requests are unchanged: ureq 3 still returns 304 as `Ok`, only 4xx/5xx become `Err`. + +**Embedders of `punktfunk-core` that build their own rustls configs** should still call +`punktfunk_core::tls::install_default_provider()` at startup, or use `builder_with_provider`. With +one backend present rustls can infer it, so this is now insurance rather than a requirement — but +it is what stops a future second backend from turning config construction into a panic. + ### The ENet control port now exists only while a pairing does (rust-safety WP0) `rusty_enet` — a c2rust-style transpile of C ENet, and the host's only pre-auth-reachable unsafe diff --git a/Cargo.lock b/Cargo.lock index 87209508..ba9a7be0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "adler2" @@ -26,7 +26,7 @@ checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.17", ] [[package]] @@ -45,9 +45,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.4" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" dependencies = [ "memchr", ] @@ -137,9 +137,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "ash" @@ -152,9 +152,9 @@ dependencies = [ [[package]] name = "ashpd" -version = "0.13.12" +version = "0.13.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "281e6645758940dee594495e28807a7672ce40f11ebf4df6c22c4fcd59e2689f" +checksum = "fb8421aaa9644a5faf26735f258b669b15f063313ef8f8e2bdb28912a1a6f111" dependencies = [ "enumflags2", "futures-util", @@ -189,7 +189,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] @@ -201,7 +201,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -303,7 +303,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -332,13 +332,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -364,7 +364,7 @@ checksum = "49c98dba06b920588de7d63f6acc23f1e6a9fade5fd6198e564506334fb5a4f5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -384,6 +384,30 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" +[[package]] +name = "aws-lc-rs" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce2b2dcc879c3bae0d371e77c99f2238400ef24ec001394befa67b6e543add9e" +dependencies = [ + "aws-lc-sys", + "untrusted 0.7.1", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f09fae7be8bb3174e05c6afdb34199e6dc0c7c04ba9fa237b1967adfbde27483" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", + "pkg-config", +] + [[package]] name = "axum" version = "0.8.9" @@ -459,6 +483,12 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" + [[package]] name = "base64ct" version = "1.8.3" @@ -472,7 +502,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" dependencies = [ "annotate-snippets", - "bitflags 2.13.0", + "bitflags 2.13.1", "cexpr", "clang-sys", "itertools 0.13.0", @@ -483,7 +513,7 @@ dependencies = [ "regex", "rustc-hash", "shlex 1.3.0", - "syn", + "syn 2.0.119", ] [[package]] @@ -509,9 +539,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "block-buffer" @@ -552,22 +582,22 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" [[package]] name = "bytemuck" -version = "1.25.0" +version = "1.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.10.2" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" +checksum = "fc0e56a716f1e132ff6bf4bdac1c944a3fcdc1cae65f70a4a2a1ac3b401d2d1f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -584,9 +614,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" [[package]] name = "cairo-rs" @@ -594,7 +624,7 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cc8d9aa793480744cd9a0524fef1a2e197d9eaa0f739cde19d16aba530dcb95" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cairo-sys-rs", "glib", "libc", @@ -640,16 +670,16 @@ dependencies = [ "quote", "serde", "serde_json", - "syn", + "syn 2.0.119", "tempfile", "toml 0.9.12+spec-1.1.0", ] [[package]] name = "cc" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9066c49992464636f92905fa096ec58baaa4d57ec19a5c096c68d3e25ef3d136" +checksum = "5d262e149917187838d5b42777c8253bcb64500067342904e7d429499a6f277e" dependencies = [ "find-msvc-tools", "jobserver", @@ -690,9 +720,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "chacha20" @@ -702,7 +732,18 @@ checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" dependencies = [ "cfg-if", "cipher", - "cpufeatures", + "cpufeatures 0.2.17", +] + +[[package]] +name = "chacha20" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.1", ] [[package]] @@ -712,7 +753,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" dependencies = [ "aead", - "chacha20", + "chacha20 0.9.1", "cipher", "poly1305", "zeroize", @@ -758,9 +799,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "157a8ba7b480713b56f4c09fd13fc3e0a22a5dfab8097ba61cbc5feef950788a" dependencies = [ "glob", "libc", @@ -769,18 +810,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "473c7e07f409a8d772161724aa8db6a765a2532a70f9667eeb7b49d3d02fbdca" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "7b48fea5a88e9ae728a2dcbedbfc0e730f7d60da42e1cb049a83c9fb8b789889" dependencies = [ "anstream", "anstyle", @@ -880,6 +921,15 @@ dependencies = [ "libc", ] +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + [[package]] name = "crc32fast" version = "1.5.0" @@ -934,9 +984,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "5181e0de7b61eb03a81e347d6dd8797bae9da5146707b51077e2d71a54ec0ceb" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -953,9 +1003,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "61803da095bee82a81bb1a452ecc25d3b2f1416d1897eb86430c6159ef717c17" [[package]] name = "crunchy" @@ -1013,7 +1063,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "curve25519-dalek-derive", "fiat-crypto", "rand_core 0.6.4", @@ -1029,14 +1079,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "data-encoding" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" +checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" [[package]] name = "defmt" @@ -1057,7 +1107,7 @@ dependencies = [ "defmt-parser", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1066,7 +1116,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" dependencies = [ - "thiserror 2.0.18", + "thiserror 2.0.20", ] [[package]] @@ -1122,13 +1172,13 @@ dependencies = [ [[package]] name = "displaydoc" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -1138,10 +1188,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] -name = "either" -version = "1.16.0" +name = "dunce" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "either" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" [[package]] name = "endi" @@ -1167,7 +1223,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1221,11 +1277,10 @@ dependencies = [ [[package]] name = "event-listener" -version = "5.4.1" +version = "5.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" dependencies = [ - "concurrent-queue", "parking", "pin-project-lite", ] @@ -1254,23 +1309,23 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastbloom" -version = "0.14.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7f34442dbe69c60fe8eaf58a8cafff81a1f278816d8ab4db255b3bef4ac3c4" +checksum = "ef975e30683b2d965054bb0a836f8973857c4ebf6acf274fe46617cd285060d8" dependencies = [ - "getrandom 0.3.4", + "foldhash", "libm", - "rand 0.9.4", + "portable-atomic", "siphasher", ] [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", ] [[package]] @@ -1295,7 +1350,7 @@ version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6380599799e175191eb7ffe82c97f36a2a90a36cbc54c738a903e5287d7f516a" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "ffmpeg-sys-next", "libc", ] @@ -1406,19 +1461,25 @@ dependencies = [ [[package]] name = "fs-err" -version = "3.3.0" +version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fde052dbfc920003cfd2c8e2c6e6d4cc7c1091538c3a24226cec0665ab08c0" +checksum = "b91aa448ca50d7e79433bdf3ee8d99215430d2ec02ade5aefab2a073a1822e8a" dependencies = [ "autocfg", "tokio", ] [[package]] -name = "futures" -version = "0.3.32" +name = "fs_extra" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "futures" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3" dependencies = [ "futures-channel", "futures-core", @@ -1431,9 +1492,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", "futures-sink", @@ -1441,15 +1502,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "031b47cf1a3c6cc8bc2fc76cd437f521619387907d469316e7c0bc278f1f5432" dependencies = [ "futures-core", "futures-task", @@ -1458,9 +1519,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-lite" @@ -1477,32 +1538,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-channel", "futures-core", @@ -1542,9 +1603,9 @@ dependencies = [ [[package]] name = "gdk4" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd42fdbbf48612c6e8f47c65fb92d2e8f39c25aecd6af047e83897c1a22d2a4e" +checksum = "d81e2a6c6ecba2aab60633a98df1868b03fa0bfdce8105edc27c1bccf71f0e39" dependencies = [ "cairo-rs", "gdk-pixbuf", @@ -1557,9 +1618,9 @@ dependencies = [ [[package]] name = "gdk4-sys" -version = "0.11.2" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d974ac4f15e67472c3a9728daf612590b4a5762a4b33f0edd298df0b80d043c" +checksum = "3d8f608d8d7d229975c4d0d026f5d3071598c4ddab3c5262b0a31840fec78d13" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -1612,11 +1673,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", - "js-sys", "libc", "r-efi 5.3.0", "wasip2", - "wasm-bindgen", ] [[package]] @@ -1626,8 +1685,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi 6.0.0", + "rand_core 0.10.1", + "wasm-bindgen", ] [[package]] @@ -1652,9 +1714,9 @@ dependencies = [ [[package]] name = "gio" -version = "0.22.6" +version = "0.22.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3848bcba3a35cc0a71df8ba8ecfd799d6bfb862342a53a4a915fb62213aa4e6" +checksum = "8b3e1f669909c326b9413bde5a742097b8c90a7d78f45326db13668984769ded" dependencies = [ "futures-channel", "futures-core", @@ -1669,9 +1731,9 @@ dependencies = [ [[package]] name = "gio-sys" -version = "0.22.0" +version = "0.22.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64729ba2772c080448f9f966dba8f4456beeb100d8c28a865ef8a0f2ef4987e1" +checksum = "353fdc7da7cd16da916104b1e0e4e7de380ec9c8aaa20d4d742d66310ab4b0d5" dependencies = [ "glib-sys", "gobject-sys", @@ -1682,11 +1744,11 @@ dependencies = [ [[package]] name = "glib" -version = "0.22.7" +version = "0.22.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c207e04e51605dcf7b2924c41591b3a10e1438eaac5bcf448fb91f325381104a" +checksum = "ddbcf514bd1881fc1b960e4e52b4e82873f4da3bceddbd58d42827b508888100" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "futures-channel", "futures-core", "futures-executor", @@ -1716,14 +1778,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "glib-sys" -version = "0.22.6" +version = "0.22.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f7fbac234ed5bc2a28359b7bde8e1b9cdf1441cc2d7f068e4824672d7db9445" +checksum = "030967459f9f676851872c6304adea7825c6d462ec9b72554c733cf0c5952233" dependencies = [ "libc", "system-deps", @@ -1731,9 +1793,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "gobject-sys" @@ -1748,32 +1810,30 @@ dependencies = [ [[package]] name = "graphene-rs" -version = "0.22.0" +version = "0.22.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d1b7881f96869f49808b6adfe906a93a57a34204952253444d68c3208d71f1" +checksum = "eb856b9c558971c3f13ab692358926da710b046932a4e087aedcc35b040d7dff" dependencies = [ "glib", "graphene-sys", - "libc", ] [[package]] name = "graphene-sys" -version = "0.22.0" +version = "0.22.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "517f062f3fd6b7fd3e57a3f038a74b3c23ca32f51199ff028aa704609943f79c" +checksum = "5c7ffdfde88f3570d3705e0d8a2433e036d387a1f2930bbf47eafcb5f569fd04" dependencies = [ "glib-sys", "libc", - "pkg-config", "system-deps", ] [[package]] name = "gsk4" -version = "0.11.1" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53c912dfcbd28acace5fc99c40bb9f25e1dcb73efb1f2608327f66a99acdcb62" +checksum = "b867be1c5f14dcb8f552c0eff6e9a9b1da5f8b43943e8efc3a63c889d84952ff" dependencies = [ "cairo-rs", "gdk4", @@ -1786,9 +1846,9 @@ dependencies = [ [[package]] name = "gsk4-sys" -version = "0.11.1" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7d54bbc7a9d8b6ffe4f0c95eede15ccfb365c8bf521275abe6bcfb57b18fb8a" +checksum = "5b7c7eb2e681ee896646cfb8872b431f24d09f53ba9283289d9b10caa6707088" dependencies = [ "cairo-sys-rs", "gdk4-sys", @@ -1802,9 +1862,9 @@ dependencies = [ [[package]] name = "gtk4" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7181b837f04cbe93f79441475f7a00560a92cba7a72e38cc1a68b6f8b78eaae2" +checksum = "98a0a0466484f64b07b5b8184d43fa46be78eb0b8e04ae4e179af31d770b76d9" dependencies = [ "cairo-rs", "field-offset", @@ -1823,21 +1883,21 @@ dependencies = [ [[package]] name = "gtk4-macros" -version = "0.11.0" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3581b242ba62fdff122ebb626ea641582ec326031622bd19d60f85029c804a87" +checksum = "5ac7179400a36a04de039c24206bb841c5596992b907b43b23ee8d5bdc40d00e" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "gtk4-sys" -version = "0.11.3" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ba8e695e2640455561274e65e45f0a151619e450746007667f4b23ceae4e1b" +checksum = "82b8f954786af0b1984425c4446b77f5ff6594346181316be3f850caab1c6f01" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -1879,7 +1939,7 @@ checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" dependencies = [ "cfg-if", "crunchy", - "zerocopy 0.8.52", + "zerocopy 0.8.56", ] [[package]] @@ -1902,9 +1962,9 @@ dependencies = [ [[package]] name = "hashlink" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5081f264ed7adee96ea4b4778b6bb9da0a7228b084587aa3bd3ff05da7c5a3b" +checksum = "32069d97bb81e38fa67eab65e3393bf804bb85969f2bc06bf13f64aef5aba248" dependencies = [ "hashbrown 0.17.1", ] @@ -1947,9 +2007,9 @@ dependencies = [ [[package]] name = "http" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" +checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0" dependencies = [ "bytes", "itoa", @@ -1957,9 +2017,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", "http", @@ -1967,9 +2027,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "23169fe34a5fbcdd3f3862e78fb9b6fccd5f02a6dc6f732547005d45631ce71c" dependencies = [ "bytes", "futures-core", @@ -1992,9 +2052,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" dependencies = [ "atomic-waker", "bytes", @@ -2026,109 +2086,6 @@ dependencies = [ "tower-service", ] -[[package]] -name = "icu_collections" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" -dependencies = [ - "displaydoc", - "potential_utf", - "utf8_iter", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" - -[[package]] -name = "icu_properties" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" - -[[package]] -name = "icu_provider" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" -dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - [[package]] name = "if-addrs" version = "0.13.4" @@ -2262,7 +2219,7 @@ dependencies = [ "jiff-core", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2281,6 +2238,36 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "jni" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +dependencies = [ + "cfg-if", + "combine", + "jni-macros", + "jni-sys 0.4.1", + "log", + "simd_cesu8", + "thiserror 2.0.20", + "walkdir", + "windows-link 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn 2.0.119", +] + [[package]] name = "jni-sys" version = "0.3.1" @@ -2306,24 +2293,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "jobserver" -version = "0.1.34" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" dependencies = [ - "getrandom 0.3.4", + "getrandom 0.4.3", "libc", ] [[package]] name = "js-sys" -version = "0.3.103" +version = "0.3.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "0e0c1080212aad755ea003d18543e8768dd432c48819efd73a7bf1e39b7a5a3a" dependencies = [ "cfg-if", "futures-util", @@ -2342,9 +2329,9 @@ dependencies = [ [[package]] name = "ksni" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da9eeb3f510b6148ae68f963af2c1fbb0de4d9e4e05f82813cfb319837c3ad2b" +checksum = "814b44c24cd2cb236c3b8a41c7f08237b452a8e76ecaa81f1cec40b5b678215b" dependencies = [ "async-executor", "async-io", @@ -2354,6 +2341,7 @@ dependencies = [ "futures-util", "pastey", "serde", + "task-local", "zbus", ] @@ -2372,24 +2360,23 @@ dependencies = [ [[package]] name = "libadwaita" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc0da4e27b20d3e71f830e5b0f0188d22c257986bf421c02cfde777fe07932a4" +checksum = "85b9900e67182a4b5b1f157b448d94f0715c8b9770cce21cf000801917f53bfa" dependencies = [ "gdk4", "gio", "glib", "gtk4", "libadwaita-sys", - "libc", "pango", ] [[package]] name = "libadwaita-sys" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaee067051c5d3c058d050d167688b80b67de1950cfca77730549aa761fc5d7d" +checksum = "28d3c27642b389852aa99341bd4a4c19ec6f8a2b63ebdd7f5ba1952198079ccd" dependencies = [ "gdk4-sys", "gio-sys", @@ -2403,9 +2390,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.186" +version = "0.2.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" [[package]] name = "libloading" @@ -2429,7 +2416,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6b8cfa2a7656627b4c92c6b9ef929433acd673d5ab3708cda1b18478ac00df4" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cc", "convert_case", "cookie-factory", @@ -2453,9 +2440,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.38.1" +version = "0.38.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6c19a05435c21ac299d71b6a9c13db3e3f47c520517d58990a462a1397a61db" +checksum = "f1d20bef17f513b9b3004532233187769cd072d790971f4e4da0e346eb6401e8" dependencies = [ "cc", "pkg-config", @@ -2476,12 +2463,6 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" -[[package]] -name = "litemap" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" - [[package]] name = "lock_api" version = "0.4.14" @@ -2537,9 +2518,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "mdns-sd" -version = "0.20.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb75febbe5fa1837a52fdbd1c735e168286c5c645fc2ddd31526f65c49941c2e" +checksum = "86dbb9f00c8c367f75ed3a775d3eb31d0375a72f58275ef64a1bc53c255a2ce2" dependencies = [ "fastrand", "flume", @@ -2552,9 +2533,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memmap2" @@ -2598,9 +2579,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "log", @@ -2632,7 +2613,7 @@ dependencies = [ name = "ndk" version = "0.9.0" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "jni-sys 0.3.1", "log", "ndk-sys", @@ -2656,7 +2637,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "libc", @@ -2669,7 +2650,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "libc", @@ -2705,9 +2686,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.6" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" dependencies = [ "num-integer", "num-traits", @@ -2724,7 +2705,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand 0.8.6", + "rand 0.8.7", "smallvec", "zeroize", ] @@ -2743,25 +2724,24 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] [[package]] name = "num-iter" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -2805,7 +2785,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2853,9 +2833,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openh264" -version = "0.9.3" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a12b82c14f702c2cece4e0fc28896c6a6bed5317dc13448c86ac41df91a6f82" +checksum = "fcc9071a0b5f9c501ddd01066c2600d922cc799dc450a52975222bcda7755a08" dependencies = [ "openh264-sys2", "wide", @@ -2863,9 +2843,9 @@ dependencies = [ [[package]] name = "openh264-sys2" -version = "0.9.6" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9e072e9b270f3b291c80488dc160abc31ecc214ab3bfde937213cfd8c83b32" +checksum = "6ada29a4cadc13d4d326737af87c13e224210d7d99fe47594e9f3f9b0102fd70" dependencies = [ "cc", "nasm-rs", @@ -2899,13 +2879,12 @@ dependencies = [ [[package]] name = "pango" -version = "0.22.6" +version = "0.22.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "251bdc6e6487b811be0e406a21e301e07e45c0aa8fa39e00c0c8e12a91752438" +checksum = "5d800d8d0de2ad5d0fb046f5344dbaba14a003cf3dd27cc21d85893d35ea316c" dependencies = [ "gio", "glib", - "libc", "pango-sys", ] @@ -2968,7 +2947,7 @@ version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ - "base64", + "base64 0.22.1", "serde_core", ] @@ -3036,7 +3015,7 @@ dependencies = [ "pipewire", "punktfunk-core", "pyrowave-sys", - "rand 0.9.4", + "rand 0.9.5", "rav1d", "rustls", "sdl3", @@ -3221,8 +3200,8 @@ name = "pf-update-check" version = "0.27.0" dependencies = [ "anyhow", - "base64", - "ring", + "aws-lc-rs", + "base64 0.22.1", "serde", "serde_json", "ureq", @@ -3243,7 +3222,7 @@ version = "0.27.0" dependencies = [ "anyhow", "ashpd", - "bitflags 2.13.0", + "bitflags 2.13.1", "bytemuck", "futures-util", "hex", @@ -3285,7 +3264,6 @@ dependencies = [ name = "pf-win-display" version = "0.27.0" dependencies = [ - "anyhow", "pf-paths", "punktfunk-core", "serde_json", @@ -3332,14 +3310,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9688b89abf11d756499f7c6190711d6dbe5a3acdb30c8fbf001d6596d06a8d44" dependencies = [ "anyhow", - "bitflags 2.13.0", + "bitflags 2.13.1", "libc", "libspa", "libspa-sys", "nix 0.30.1", "once_cell", "pipewire-sys", - "thiserror 2.0.18", + "thiserror 2.0.20", ] [[package]] @@ -3386,7 +3364,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "crc32fast", "fdeflate", "flate2", @@ -3413,7 +3391,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug", "universal-hash", ] @@ -3425,16 +3403,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "opaque-debug", "universal-hash", ] [[package]] name = "portable-atomic" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" [[package]] name = "portable-atomic-util" @@ -3445,15 +3423,6 @@ dependencies = [ "portable-atomic", ] -[[package]] -name = "potential_utf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" -dependencies = [ - "zerovec", -] - [[package]] name = "powerfmt" version = "0.2.0" @@ -3466,7 +3435,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.52", + "zerocopy 0.8.56", ] [[package]] @@ -3476,7 +3445,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.119", ] [[package]] @@ -3485,14 +3454,14 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ - "toml_edit 0.25.12+spec-1.1.0", + "toml_edit 0.25.13+spec-1.1.0", ] [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -3505,9 +3474,9 @@ checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.13.0", + "bitflags 2.13.1", "num-traits", - "rand 0.9.4", + "rand 0.9.5", "rand_chacha 0.9.0", "rand_xorshift", "regex-syntax", @@ -3523,7 +3492,6 @@ dependencies = [ "pf-client-core", "punktfunk-core", "serde_json", - "tracing", "tracing-subscriber", ] @@ -3532,7 +3500,7 @@ name = "punktfunk-client-android" version = "0.27.0" dependencies = [ "android_logger", - "jni", + "jni 0.21.1", "libc", "log", "mdns-sd", @@ -3566,7 +3534,6 @@ dependencies = [ name = "punktfunk-client-session" version = "0.27.0" dependencies = [ - "anyhow", "pf-client-core", "pf-console-ui", "pf-presenter", @@ -3585,7 +3552,6 @@ dependencies = [ "mdns-sd", "pf-client-core", "punktfunk-core", - "serde", "serde_json", "test_reactor", "tracing", @@ -3601,7 +3567,6 @@ name = "punktfunk-core" version = "0.27.0" dependencies = [ "aes-gcm", - "bytes", "cbindgen", "chacha20poly1305", "criterion", @@ -3612,7 +3577,7 @@ dependencies = [ "opus", "proptest", "quinn", - "rand 0.9.4", + "rand 0.9.5", "rcgen", "reed-solomon-simd", "rustls", @@ -3620,11 +3585,12 @@ dependencies = [ "sha2", "socket2", "spake2", - "thiserror 2.0.18", + "thiserror 2.0.20", "tokio", "tracing", + "ureq", "windows-sys 0.59.0", - "zerocopy 0.8.52", + "zerocopy 0.8.56", "zeroize", ] @@ -3644,12 +3610,11 @@ dependencies = [ "aes", "aes-gcm", "anyhow", - "ash", "ashpd", + "aws-lc-rs", "axum", "axum-server", - "base64", - "bytemuck", + "base64 0.22.1", "cbc", "futures-util", "hex", @@ -3658,14 +3623,12 @@ dependencies = [ "hyper", "hyper-util", "if-addrs 0.13.4", - "khronos-egl", "libc", "libloading", "log", "mac_address", "mdns-sd", "opus", - "parking_lot", "pf-capture", "pf-clipboard", "pf-driver-proto", @@ -3682,10 +3645,8 @@ dependencies = [ "pipewire", "punktfunk-core", "quinn", - "rand 0.8.6", + "rand 0.8.7", "rcgen", - "reis", - "ring", "roxmltree", "rsa", "rusqlite", @@ -3703,23 +3664,15 @@ dependencies = [ "tracing-log", "tracing-subscriber", "ureq", - "usbip-sim", "utoipa", "utoipa-axum", "utoipa-scalar", "wasapi", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-protocols-misc", - "wayland-protocols-wlr", - "wayland-scanner", "windows 0.62.2 (registry+https://github.com/rust-lang/crates.io-index)", "windows-service", "winreg", "winresource", "x509-parser", - "xkbcommon", ] [[package]] @@ -3775,9 +3728,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quick-xml" -version = "0.39.4" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" +checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" dependencies = [ "memchr", ] @@ -3796,7 +3749,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror 2.0.18", + "thiserror 2.0.20", "tokio", "tracing", "web-time", @@ -3804,22 +3757,24 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.15" +version = "0.11.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fcb935c5bec503c2f0e306bdd3e58bb9029dcb14fa8d9ac76e3a5256ac0763e" +checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" dependencies = [ + "aws-lc-rs", "bytes", "fastbloom", - "getrandom 0.3.4", + "getrandom 0.4.3", "lru-slab", - "rand 0.9.4", + "rand 0.10.2", + "rand_pcg", "ring", "rustc-hash", "rustls", "rustls-pki-types", "rustls-platform-verifier", "slab", - "thiserror 2.0.18", + "thiserror 2.0.20", "tinyvec", "tracing", "web-time", @@ -3827,23 +3782,23 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +checksum = "35a133f956daabe89a61a685c2649f13d82d5aa4bd5d12d1277e1072a21c0694" dependencies = [ "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] name = "quote" -version = "1.0.46" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -3862,9 +3817,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" dependencies = [ "libc", "rand_chacha 0.3.1", @@ -3873,14 +3828,25 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.5", ] +[[package]] +name = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "chacha20 0.10.1", + "getrandom 0.4.3", + "rand_core 0.10.1", +] + [[package]] name = "rand_chacha" version = "0.3.1" @@ -3919,6 +3885,21 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_pcg" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a" +dependencies = [ + "rand_core 0.10.1", +] + [[package]] name = "rand_xorshift" version = "0.4.0" @@ -3936,7 +3917,7 @@ checksum = "1932f060d5e7bd49dc9f8b272c1dc5e9ce0ffe141c28be900265d3989b36c9ed" dependencies = [ "assert_matches", "atomig", - "bitflags 2.13.0", + "bitflags 2.13.1", "cc", "cfg-if", "libc", @@ -3955,7 +3936,7 @@ version = "11.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "498cd0dc59d73224351ee52a95fee0f1a617a2eae0e7d9d720cc622c73a54186" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -3990,8 +3971,8 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" dependencies = [ + "aws-lc-rs", "pem", - "ring", "rustls-pki-types", "time", "yasna", @@ -4009,7 +3990,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -4018,7 +3999,7 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cffef0520d30fbd4151fb20e262947ae47fb0ab276a744a19b6398438105a072" dependencies = [ - "cpufeatures", + "cpufeatures 0.2.17", "fixedbitset", "once_cell", "readme-rustdocifier", @@ -4026,9 +4007,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.4" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -4038,9 +4019,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.14" +version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" dependencies = [ "aho-corasick", "memchr", @@ -4098,7 +4079,7 @@ checksum = "36c9dbf50a60c82375e66b61d522c936b187a11b25c0a42e91c516326ad24a4f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4111,7 +4092,7 @@ dependencies = [ "cfg-if", "getrandom 0.2.17", "libc", - "untrusted", + "untrusted 0.9.0", "windows-sys 0.52.0", ] @@ -4157,16 +4138,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c51c9ae4df8a7fba42103df5c621fa3c37eccf3a3c650879e90fc48b11cc192c" dependencies = [ "hashbrown 0.16.1", - "thiserror 2.0.18", + "thiserror 2.0.20", ] [[package]] name = "rusqlite" -version = "0.40.1" +version = "0.40.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11438310b19e3109b6446c33d1ed5e889428cf2e278407bc7896bc4aaea43323" +checksum = "23f2a97da3e3873c73cb2a2e71b35c40ff95e0b1eefa8d72d8499a6928c3b5b3" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -4177,9 +4158,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d" [[package]] name = "rustc_version" @@ -4205,7 +4186,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys", @@ -4214,13 +4195,13 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.41" +version = "0.23.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" dependencies = [ + "aws-lc-rs", "log", "once_cell", - "ring", "rustls-pki-types", "rustls-webpki", "subtle", @@ -4241,9 +4222,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.14.1" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "web-time", "zeroize", @@ -4251,13 +4232,13 @@ dependencies = [ [[package]] name = "rustls-platform-verifier" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784" +checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" dependencies = [ "core-foundation", "core-foundation-sys", - "jni", + "jni 0.22.4", "log", "once_cell", "rustls", @@ -4278,20 +4259,21 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.13" +version = "0.103.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "0527518605e68109d875e248ea259b6758801cf165e4b2c2733ae3b51f12535a" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", - "untrusted", + "untrusted 0.9.0", ] [[package]] name = "rustversion" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "rusty-fork" @@ -4322,9 +4304,9 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "safe_arch" -version = "0.7.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +checksum = "3a52ec151f024d703f9fd65abb7cbe81e7cdb39f18917a3a37e3014470dc7c59" dependencies = [ "bytemuck", ] @@ -4359,7 +4341,7 @@ version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25bd22eb1bbc9137e914022b4994ed35591eea0884e9e3e98e6d9895cad6e1d2" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "libc", "sdl3-image-sys", "sdl3-mixer-sys", @@ -4409,15 +4391,15 @@ dependencies = [ [[package]] name = "sdl3-src" -version = "3.4.10" +version = "3.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed4dcad85f1657d3424642ca2ed8f9f185212975baefda8972ac606494755a62" +checksum = "e75661ac9dbedc58da5ce739e9688be6bf9d5542a282d89e7e29fdb7dcb43936" [[package]] name = "sdl3-sys" -version = "0.6.6+SDL-3.4.10" +version = "0.6.8+SDL-3.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e7f134def04ed72e6f55187c6c29c72f7dab5d359c4be0dd49c9b97fef59c7" +checksum = "b97e3d18c4994224aec3fb2d3d189f5fc88af0958fb8ed7b569272fde558f033" dependencies = [ "ash", "cc", @@ -4454,7 +4436,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation", "core-foundation-sys", "libc", @@ -4479,9 +4461,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -4489,29 +4471,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "itoa", "memchr", @@ -4533,13 +4515,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +checksum = "8d3b1629de253c70a0508c3899572da79ca359fdab27c7920ff00406df418906" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -4579,7 +4561,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", - "cpufeatures", + "cpufeatures 0.2.17", "digest", ] @@ -4626,9 +4608,25 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" + +[[package]] +name = "simd_cesu8" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" +dependencies = [ + "rustc_version", + "simdutf8", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "siphasher" @@ -4660,7 +4658,7 @@ version = "0.87.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f7d94f3e7537c71ad4cf132eb26e3be8c8a886ed3649c4525c089041fc312b2" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "lazy_static", "skia-bindings", ] @@ -4679,9 +4677,9 @@ checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90" [[package]] name = "socket-pktinfo" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e8e43b4bdce7cff8a4d3f8025ee38fce5ca138fab868ebbf9529c81328fbf9d" +checksum = "612942246d0cc239cfd83af1dfd39be47f649208a3524e5e9da651910128e0ac" dependencies = [ "libc", "socket2", @@ -4690,9 +4688,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -4712,9 +4710,9 @@ dependencies = [ [[package]] name = "spin" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "3763264f6b73151db08c50ff20d7d8a0b8796e021cdea7ceedad07b80155fa0e" dependencies = [ "lock_api", ] @@ -4741,12 +4739,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - [[package]] name = "strsim" version = "0.11.1" @@ -4772,7 +4764,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 2.0.119", ] [[package]] @@ -4783,9 +4775,20 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.118" +version = "2.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -4806,7 +4809,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4818,7 +4821,7 @@ dependencies = [ "cfg-expr", "heck", "pkg-config", - "toml 1.1.2+spec-1.1.0", + "toml 1.1.4+spec-1.1.0", "version-compare", ] @@ -4839,6 +4842,15 @@ version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca" +[[package]] +name = "task-local" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2972044a9e5e448a506a7ff6f0d03b566d8ef4cd6918a58fc59835a0f8666626" +dependencies = [ + "pin-project-lite", +] + [[package]] name = "tempfile" version = "3.27.0" @@ -4875,11 +4887,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" dependencies = [ - "thiserror-impl 2.0.18", + "thiserror-impl 2.0.20", ] [[package]] @@ -4890,34 +4902,34 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "thread_local" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" dependencies = [ "cfg-if", ] [[package]] name = "time" -version = "0.3.51" +version = "0.3.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c17d80feb7334b40c484e45ed1a5273dfd8bfda537c3be2e74a06a6686f327" +checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134" dependencies = [ "deranged", "num-conv", @@ -4935,24 +4947,14 @@ checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109" [[package]] name = "time-macros" -version = "0.2.30" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcef1a61bdb119096e153208ec5cbec23944ce8bca13be5c7f60c634f7403935" +checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85" dependencies = [ "num-conv", "time-core", ] -[[package]] -name = "tinystr" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" -dependencies = [ - "displaydoc", - "zerovec", -] - [[package]] name = "tinytemplate" version = "1.2.1" @@ -4965,9 +4967,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +checksum = "bb4ebadaa0af04fab11ae01eb5f9fdb5f9c5b875506e210e71c07873528baa7f" dependencies = [ "tinyvec_macros", ] @@ -4986,9 +4988,9 @@ checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8" [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -5004,13 +5006,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -5025,13 +5027,14 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", "futures-sink", + "libc", "pin-project-lite", "tokio", ] @@ -5065,9 +5068,9 @@ dependencies = [ [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.4+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5" dependencies = [ "indexmap", "serde_core", @@ -5075,7 +5078,7 @@ dependencies = [ "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", "toml_writer", - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] @@ -5121,23 +5124,23 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.12+spec-1.1.0" +version = "0.25.13+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2153edc6955a6c354fad8f5efd38b6a8769bdccf9fe50f8e1329f81b0baa5d7" +checksum = "6975367e4d2ef766d86af01ffad14b622fecc8d4357a998fbc4deb6e9bacaf9b" dependencies = [ "indexmap", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] @@ -5148,9 +5151,9 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tower" @@ -5200,7 +5203,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5301,6 +5304,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "untrusted" version = "0.9.0" @@ -5309,30 +5318,31 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.12.1" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" +checksum = "972d7902c8735f2695410b8aed7df6ed12a47394aa1c8d7af49f0497b731a94d" dependencies = [ - "base64", + "base64 0.23.1", "flate2", "log", - "once_cell", + "percent-encoding", "rustls", "rustls-pki-types", - "url", - "webpki-roots 0.26.11", + "ureq-proto", + "utf8-zero", + "webpki-roots", ] [[package]] -name = "url" -version = "2.5.8" +name = "ureq-proto" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +checksum = "da5f78b09e6941e1a0f2e30e695e4b120377b54d5e0aec11b594bb57b3971613" dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", + "base64 0.23.1", + "http", + "httparse", + "log", ] [[package]] @@ -5355,10 +5365,10 @@ dependencies = [ ] [[package]] -name = "utf8_iter" -version = "1.0.4" +name = "utf8-zero" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +checksum = "b8c0a043c9540bae7c578c88f91dda8bd82e59ae27c21baca69c8b191aaf5a6e" [[package]] name = "utf8parse" @@ -5400,7 +5410,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn", + "syn 2.0.119", ] [[package]] @@ -5417,9 +5427,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.23.4" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf80a72845275afea99e7f2b434723d3bc7e38470fcd1c7ed39a599c73319a53" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" dependencies = [ "js-sys", "serde_core", @@ -5477,7 +5487,7 @@ checksum = "80c3aa5d6b0e7acc3ea10cb19c334df0c8d825060f14a30d9e3b03385e6e5175" dependencies = [ "log", "num-integer", - "thiserror 2.0.18", + "thiserror 2.0.20", "windows 0.62.2 (registry+https://github.com/rust-lang/crates.io-index)", "windows-core 0.62.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -5499,9 +5509,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "1b70935747edd64d89de3efa29d73789b806c15798f8e7dca4d8ac356b50ce70" dependencies = [ "cfg-if", "once_cell", @@ -5512,9 +5522,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "77775f8f3f7217702089053b94958f8f54061a3f663417df76e19cbdcca29bc1" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5522,31 +5532,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "e11d33f857dc2fb11b8bc75aee111aa9cbeb12cd9f25efd3d4c2a3dd4e235284" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "7ef64dbcc55df09c7e5a46182d181c2cfa3e925f3da937ea764728b4bbb9dcbf" dependencies = [ "unicode-ident", ] [[package]] name = "wayland-backend" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d" +checksum = "016ccf01d1c58b6f8999612813e17c9b2390f7d70671428869913310f83f54b8" dependencies = [ "cc", "downcast-rs", @@ -5557,11 +5567,11 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.14" +version = "0.31.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" +checksum = "e3c36a0f861ad76d0901f2800b46321410d9f73f2ea88aac0650d86c32688073" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "rustix", "wayland-backend", "wayland-scanner", @@ -5573,7 +5583,7 @@ version = "0.32.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -5585,7 +5595,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5598,7 +5608,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5607,9 +5617,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" +checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0" dependencies = [ "proc-macro2", "quick-xml", @@ -5637,27 +5647,18 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d46a5a140e6f7afeccd8eae97eff335163939eac8b929834875168b29b3d267" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" dependencies = [ "rustls-pki-types", ] [[package]] name = "webpki-roots" -version = "0.26.11" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.8", -] - -[[package]] -name = "webpki-roots" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf85cb06032201fa7c6f829d7db5a7e5aa45bcc0655327713065f6f0576731bf" +checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" dependencies = [ "rustls-pki-types", ] @@ -5670,9 +5671,9 @@ checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" [[package]] name = "wide" -version = "0.7.33" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" +checksum = "de2aaf408e58689c2096682331b1f42bb2d9f2ed6b11560407d023cd0a6c634e" dependencies = [ "bytemuck", "safe_arch", @@ -5832,7 +5833,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5842,7 +5843,7 @@ source = "git+https://github.com/microsoft/windows-rs?rev=acb5a1a7441033d9312b16 dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5853,7 +5854,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5863,7 +5864,7 @@ source = "git+https://github.com/microsoft/windows-rs?rev=acb5a1a7441033d9312b16 dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5950,7 +5951,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d24d6bcc7f734a4091ecf8d7a64c5f7d7066f45585c1861eba06449909609c8a" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "widestring", "windows-sys 0.52.0", ] @@ -5999,15 +6000,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - [[package]] name = "windows-sys" version = "0.61.2" @@ -6041,30 +6033,13 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", + "windows_i686_gnullvm", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - [[package]] name = "windows-threading" version = "0.2.1" @@ -6111,12 +6086,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -6129,12 +6098,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -6147,24 +6110,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -6177,12 +6128,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -6195,12 +6140,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -6213,12 +6152,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -6231,12 +6164,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - [[package]] name = "winnow" version = "0.7.15" @@ -6248,9 +6175,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" dependencies = [ "memchr", ] @@ -6271,7 +6198,7 @@ version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0986a8b1d586b7d3e4fe3d9ea39fb451ae22869dcea4aa109d287a374d866087" dependencies = [ - "toml 1.1.2+spec-1.1.0", + "toml 1.1.4+spec-1.1.0", "version_check", ] @@ -6281,12 +6208,6 @@ version = "0.57.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" -[[package]] -name = "writeable" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" - [[package]] name = "x11rb" version = "0.13.2" @@ -6357,34 +6278,11 @@ dependencies = [ "time", ] -[[package]] -name = "yoke" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" -dependencies = [ - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - [[package]] name = "zbus" -version = "5.16.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee682d202a77e4a9f3b2c2bdf48a7b28af5c08c34ddf66f98c93e5e39464285" +checksum = "5db4be7c075cb421e4b7ee645541604239bd243ba7c357511f4ff3a74b555907" dependencies = [ "async-broadcast", "async-executor", @@ -6410,7 +6308,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 1.0.3", + "winnow 1.0.4", "zbus_macros", "zbus_names", "zvariant", @@ -6418,14 +6316,14 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "5.16.0" +version = "5.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adf1bd45a81a103745b1757754762a26e8cd01e4532e4d6c8ec431624b80d1d6" +checksum = "2990635d09ade6df1868f72f8cac69a876a90981e8bd3c40b1be413f8dc88f40" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.3", "zbus_names", "zvariant", "zvariant_utils", @@ -6433,15 +6331,24 @@ dependencies = [ [[package]] name = "zbus_names" -version = "4.3.2" +version = "4.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +checksum = "d8bf88b4a3ff53e883001e0e0115b297a9d53c31b9c1edd2bfdd853e3428624e" dependencies = [ "serde", - "winnow 1.0.3", + "winnow 1.0.4", "zvariant", ] +[[package]] +name = "zcheapstr" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1afec51604565183aeb5c54c20aeab286120d4e4460f7f76e3e8bb8c0d99473" +dependencies = [ + "serde", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -6454,11 +6361,11 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.52" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f" +checksum = "556764e583adb45a9f8d413c2a147fa7e8d821e48e12b14fd560b607998b75eb" dependencies = [ - "zerocopy-derive 0.8.52", + "zerocopy-derive 0.8.56", ] [[package]] @@ -6469,39 +6376,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "zerocopy-derive" -version = "0.8.52" +version = "0.8.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930" +checksum = "f2ab42fc20575779bd240faa45f94a74256f755c0fa9e89f0ede20d91d0cdfc1" dependencies = [ "proc-macro2", "quote", - "syn", -] - -[[package]] -name = "zerofrom" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", + "syn 2.0.119", ] [[package]] @@ -6510,50 +6396,17 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" -[[package]] -name = "zerotrie" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "zmij" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zune-core" -version = "0.5.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" +checksum = "d56377fd46368984a170bc5aac5567e52ca5da874caa60bea39fcbca78fb658b" [[package]] name = "zune-jpeg" @@ -6566,40 +6419,41 @@ dependencies = [ [[package]] name = "zvariant" -version = "5.12.0" +version = "5.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a192a0bde63360d77a7523c833d4b4ce6070a927e2c53246e4c540b1a3e27be0" +checksum = "b5e28c25bd8bb8da5a1f3e7065d0c156b9ee9a7973adf78b0e35eaefdf3b1b5c" dependencies = [ "endi", "enumflags2", "serde", - "winnow 1.0.3", + "winnow 1.0.4", + "zcheapstr", "zvariant_derive", "zvariant_utils", ] [[package]] name = "zvariant_derive" -version = "5.12.0" +version = "5.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc6cde9c01c511074be97f7ccb6c19d0da89e3f8662e812e999dcfd4638737" +checksum = "d496a145685283b67e232bd9e47377f6b60ad9d51e3601b23867f77c42477f96" dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 3.0.3", "zvariant_utils", ] [[package]] name = "zvariant_utils" -version = "3.4.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e8535915cfa75547e559d8c68e8139909a4aeee076831e4ef7fc59d8172c4d6" +checksum = "629d80ece222cad20fe0e8741be493c4ab166acf3b85341bdc2cdbcfd8f3c2d6" dependencies = [ "proc-macro2", "quote", "serde", - "syn", - "winnow 1.0.3", + "syn 3.0.3", + "winnow 1.0.4", ] diff --git a/THIRD-PARTY-NOTICES.txt b/THIRD-PARTY-NOTICES.txt index fd6c69fd..67a47c8a 100644 --- a/THIRD-PARTY-NOTICES.txt +++ b/THIRD-PARTY-NOTICES.txt @@ -7,7 +7,7 @@ below. Each is distributed under its own permissive license; the full license te follow the manifest. This file is generated by scripts/gen-third-party-notices.py (or `cargo about`, see about.toml) — do not edit by hand. -Total third-party crates: 596 +Total third-party crates: 582 ---------------------------------------------------------------------------- VENDORED THIRD-PARTY SOURCE (inside first-party crates) @@ -19,6 +19,9 @@ VENDORED THIRD-PARTY SOURCE (inside first-party crates) Font Awesome Free brand icons (vendored, assets/os-icons) — https://fontawesome.com Simple Icons (vendored, assets/os-icons) — https://simpleicons.org Bazzite logo (vendored, assets/os-icons) — https://github.com/ublue-os/bazzite + Font Awesome Free brand icons (vendored, assets/launcher-icons) — https://fontawesome.com + Simple Icons (vendored, assets/launcher-icons) — https://simpleicons.org + Playnite logo (vendored, assets/launcher-icons) — https://github.com/JosefNemec/Playnite ---------------------------------------------------------------------------- MANIFEST (crate version — SPDX license — source) @@ -27,7 +30,7 @@ MANIFEST (crate version — SPDX license — source) aead 0.5.2 — MIT OR Apache-2.0 — https://github.com/RustCrypto/traits aes 0.8.4 — MIT OR Apache-2.0 — https://github.com/RustCrypto/block-ciphers aes-gcm 0.10.3 — Apache-2.0 OR MIT — https://github.com/RustCrypto/AEADs - aho-corasick 1.1.4 — Unlicense OR MIT — https://github.com/BurntSushi/aho-corasick + aho-corasick 1.1.5 — Unlicense OR MIT — https://github.com/BurntSushi/aho-corasick android_log-sys 0.3.2 — MIT OR Apache-2.0 — https://github.com/rust-mobile/android_log-sys-rs android_logger 0.14.1 — MIT OR Apache-2.0 — https://github.com/rust-mobile/android_logger-rs anes 0.1.6 — MIT OR Apache-2.0 — https://github.com/zrzka/anes-rs @@ -37,9 +40,9 @@ MANIFEST (crate version — SPDX license — source) anstyle-parse 1.0.0 — MIT OR Apache-2.0 — https://github.com/rust-cli/anstyle.git anstyle-query 1.1.5 — MIT OR Apache-2.0 — https://github.com/rust-cli/anstyle.git anstyle-wincon 3.0.11 — MIT OR Apache-2.0 — https://github.com/rust-cli/anstyle.git - anyhow 1.0.103 — MIT OR Apache-2.0 — https://github.com/dtolnay/anyhow + anyhow 1.0.104 — MIT OR Apache-2.0 — https://github.com/dtolnay/anyhow ash 0.38.0+1.3.281 — MIT OR Apache-2.0 — https://github.com/ash-rs/ash - ashpd 0.13.12 — MIT — https://github.com/bilelmoussaoui/ashpd + ashpd 0.13.13 — MIT — https://github.com/bilelmoussaoui/ashpd asn1-rs 0.6.2 — MIT OR Apache-2.0 — https://github.com/rusticata/asn1-rs.git asn1-rs-derive 0.5.1 — MIT OR Apache-2.0 — https://github.com/rusticata/asn1-rs.git asn1-rs-impl 0.2.0 — MIT/Apache-2.0 — https://github.com/rusticata/asn1-rs.git @@ -53,51 +56,55 @@ MANIFEST (crate version — SPDX license — source) async-recursion 1.1.1 — MIT OR Apache-2.0 — https://github.com/dcchut/async-recursion async-signal 0.2.14 — Apache-2.0 OR MIT — https://github.com/smol-rs/async-signal async-task 4.7.1 — Apache-2.0 OR MIT — https://github.com/smol-rs/async-task - async-trait 0.1.89 — MIT OR Apache-2.0 — https://github.com/dtolnay/async-trait + async-trait 0.1.92 — MIT OR Apache-2.0 — https://github.com/dtolnay/async-trait atomic-waker 1.1.2 — Apache-2.0 OR MIT — https://github.com/smol-rs/atomic-waker atomig 0.4.3 — MIT/Apache-2.0 — https://github.com/LukasKalbertodt/atomig/ atomig-macro 0.4.0 — MIT/Apache-2.0 — https://github.com/LukasKalbertodt/atomig/ audiopus_sys 0.2.2 — ISC — https://github.com/lakelezz/audiopus_sys.git autocfg 1.5.1 — Apache-2.0 OR MIT — https://github.com/cuviper/autocfg + aws-lc-rs 1.18.0 — ISC AND (Apache-2.0 OR ISC) — https://github.com/aws/aws-lc-rs + aws-lc-sys 0.44.0 — ISC AND (Apache-2.0 OR ISC) AND Apache-2.0 AND MIT AND BSD-3-Clause AND (Apache-2.0 OR ISC OR MIT) AND (Apache-2.0 OR ISC OR MIT-0) — https://github.com/aws/aws-lc-rs axum 0.8.9 — MIT — https://github.com/tokio-rs/axum axum-core 0.5.6 — MIT — https://github.com/tokio-rs/axum axum-server 0.8.0 — MIT — https://github.com/programatik29/axum-server base64 0.22.1 — MIT OR Apache-2.0 — https://github.com/marshallpierce/rust-base64 + base64 0.23.1 — MIT OR Apache-2.0 — https://github.com/marshallpierce/rust-base64 base64ct 1.8.3 — Apache-2.0 OR MIT — https://github.com/RustCrypto/formats bindgen 0.72.1 — BSD-3-Clause — https://github.com/rust-lang/rust-bindgen bit-set 0.8.0 — Apache-2.0 OR MIT — https://github.com/contain-rs/bit-set bit-vec 0.8.0 — Apache-2.0 OR MIT — https://github.com/contain-rs/bit-vec bitflags 1.3.2 — MIT/Apache-2.0 — https://github.com/bitflags/bitflags - bitflags 2.13.0 — MIT OR Apache-2.0 — https://github.com/bitflags/bitflags + bitflags 2.13.1 — MIT OR Apache-2.0 — https://github.com/bitflags/bitflags block-buffer 0.10.4 — MIT OR Apache-2.0 — https://github.com/RustCrypto/utils block-padding 0.3.3 — MIT OR Apache-2.0 — https://github.com/RustCrypto/utils blocking 1.6.2 — Apache-2.0 OR MIT — https://github.com/smol-rs/blocking bumpalo 3.20.3 — MIT OR Apache-2.0 — https://github.com/fitzgen/bumpalo - bytemuck 1.25.0 — Zlib OR Apache-2.0 OR MIT — https://github.com/Lokathor/bytemuck - bytemuck_derive 1.10.2 — Zlib OR Apache-2.0 OR MIT — https://github.com/Lokathor/bytemuck + bytemuck 1.25.2 — Zlib OR Apache-2.0 OR MIT — https://github.com/Lokathor/bytemuck + bytemuck_derive 1.12.0 — Zlib OR Apache-2.0 OR MIT — https://github.com/Lokathor/bytemuck byteorder 1.5.0 — Unlicense OR MIT — https://github.com/BurntSushi/byteorder byteorder-lite 0.1.0 — Unlicense OR MIT — https://github.com/image-rs/byteorder-lite - bytes 1.12.0 — MIT — https://github.com/tokio-rs/bytes + bytes 1.12.1 — MIT — https://github.com/tokio-rs/bytes cairo-rs 0.22.0 — MIT — https://github.com/gtk-rs/gtk-rs-core cairo-sys-rs 0.22.0 — MIT — https://github.com/gtk-rs/gtk-rs-core cast 0.3.0 — MIT OR Apache-2.0 — https://github.com/japaric/cast.rs cbc 0.1.2 — MIT OR Apache-2.0 — https://github.com/RustCrypto/block-modes cbindgen 0.29.4 — MPL-2.0 — https://github.com/mozilla/cbindgen - cc 1.4.1 — MIT OR Apache-2.0 — https://github.com/rust-lang/cc-rs + cc 1.4.2 — MIT OR Apache-2.0 — https://github.com/rust-lang/cc-rs cesu8 1.1.0 — Apache-2.0/MIT — https://github.com/emk/cesu8-rs cexpr 0.6.0 — Apache-2.0/MIT — https://github.com/jethrogb/rust-cexpr cfg-expr 0.20.8 — MIT OR Apache-2.0 — https://github.com/EmbarkStudios/cfg-expr cfg-if 1.0.4 — MIT OR Apache-2.0 — https://github.com/rust-lang/cfg-if - cfg_aliases 0.2.1 — MIT — https://github.com/katharostech/cfg_aliases + cfg_aliases 0.2.2 — MIT — https://github.com/katharostech/cfg_aliases + chacha20 0.10.1 — MIT OR Apache-2.0 — https://github.com/RustCrypto/stream-ciphers chacha20 0.9.1 — Apache-2.0 OR MIT — https://github.com/RustCrypto/stream-ciphers chacha20poly1305 0.10.1 — Apache-2.0 OR MIT — https://github.com/RustCrypto/AEADs/tree/master/chacha20poly1305 ciborium 0.2.2 — Apache-2.0 — https://github.com/enarx/ciborium ciborium-io 0.2.2 — Apache-2.0 — https://github.com/enarx/ciborium ciborium-ll 0.2.2 — Apache-2.0 — https://github.com/enarx/ciborium cipher 0.4.4 — MIT OR Apache-2.0 — https://github.com/RustCrypto/traits - clang-sys 1.8.1 — Apache-2.0 — https://github.com/KyleMayes/clang-sys - clap 4.6.1 — MIT OR Apache-2.0 — https://github.com/clap-rs/clap - clap_builder 4.6.0 — MIT OR Apache-2.0 — https://github.com/clap-rs/clap + clang-sys 1.9.1 — Apache-2.0 — https://github.com/KyleMayes/clang-sys + clap 4.6.6 — MIT OR Apache-2.0 — https://github.com/clap-rs/clap + clap_builder 4.6.6 — MIT OR Apache-2.0 — https://github.com/clap-rs/clap clap_lex 1.1.0 — MIT OR Apache-2.0 — https://github.com/clap-rs/clap cmake 0.1.58 — MIT OR Apache-2.0 — https://github.com/rust-lang/cmake-rs color_quant 1.1.0 — MIT — https://github.com/image-rs/color_quant.git @@ -110,19 +117,20 @@ MANIFEST (crate version — SPDX license — source) core-foundation 0.10.1 — MIT OR Apache-2.0 — https://github.com/servo/core-foundation-rs core-foundation-sys 0.8.7 — MIT OR Apache-2.0 — https://github.com/servo/core-foundation-rs cpufeatures 0.2.17 — MIT OR Apache-2.0 — https://github.com/RustCrypto/utils + cpufeatures 0.3.0 — MIT OR Apache-2.0 — https://github.com/RustCrypto/utils crc32fast 1.5.0 — MIT OR Apache-2.0 — https://github.com/srijs/rust-crc32fast criterion 0.5.1 — Apache-2.0 OR MIT — https://github.com/bheisler/criterion.rs criterion-plot 0.5.0 — MIT/Apache-2.0 — https://github.com/bheisler/criterion.rs - crossbeam-deque 0.8.6 — MIT OR Apache-2.0 — https://github.com/crossbeam-rs/crossbeam + crossbeam-deque 0.8.7 — MIT OR Apache-2.0 — https://github.com/crossbeam-rs/crossbeam crossbeam-epoch 0.9.20 — MIT OR Apache-2.0 — https://github.com/crossbeam-rs/crossbeam - crossbeam-utils 0.8.21 — MIT OR Apache-2.0 — https://github.com/crossbeam-rs/crossbeam + crossbeam-utils 0.8.22 — MIT OR Apache-2.0 — https://github.com/crossbeam-rs/crossbeam crunchy 0.2.4 — MIT — https://github.com/eira-fransham/crunchy crypto-common 0.1.7 — MIT OR Apache-2.0 — https://github.com/RustCrypto/traits ctr 0.9.2 — MIT OR Apache-2.0 — https://github.com/RustCrypto/block-modes cudarc 0.16.6 — MIT OR Apache-2.0 — https://github.com/coreylowman/cudarc curve25519-dalek 4.1.3 — BSD-3-Clause — https://github.com/dalek-cryptography/curve25519-dalek/tree/main/curve25519-dalek curve25519-dalek-derive 0.1.1 — MIT/Apache-2.0 — https://github.com/dalek-cryptography/curve25519-dalek - data-encoding 2.11.0 — MIT — https://github.com/ia0/data-encoding + data-encoding 2.11.1 — MIT — https://github.com/ia0/data-encoding defmt 1.1.1 — MIT OR Apache-2.0 — https://github.com/knurling-rs/defmt defmt-macros 1.1.1 — MIT OR Apache-2.0 — https://github.com/knurling-rs/defmt defmt-parser 1.0.0 — MIT OR Apache-2.0 — https://github.com/knurling-rs/defmt @@ -130,9 +138,10 @@ MANIFEST (crate version — SPDX license — source) der-parser 9.0.0 — MIT/Apache-2.0 — https://github.com/rusticata/der-parser.git deranged 0.5.8 — MIT OR Apache-2.0 — https://github.com/jhpratt/deranged digest 0.10.7 — MIT OR Apache-2.0 — https://github.com/RustCrypto/traits - displaydoc 0.2.6 — MIT OR Apache-2.0 — https://github.com/yaahc/displaydoc + displaydoc 0.2.7 — MIT OR Apache-2.0 — https://github.com/yaahc/displaydoc downcast-rs 1.2.1 — MIT/Apache-2.0 — https://github.com/marcianx/downcast-rs - either 1.16.0 — MIT OR Apache-2.0 — https://github.com/rayon-rs/either + dunce 1.0.5 — CC0-1.0 OR MIT-0 OR Apache-2.0 — https://gitlab.com/kornelski/dunce + either 1.17.0 — MIT OR Apache-2.0 — https://github.com/rayon-rs/either endi 1.1.1 — MIT — https://github.com/zeenix/endi enumflags2 0.7.12 — MIT OR Apache-2.0 — https://github.com/meithecatte/enumflags2 enumflags2_derive 0.7.12 — MIT OR Apache-2.0 — https://github.com/meithecatte/enumflags2 @@ -141,12 +150,12 @@ MANIFEST (crate version — SPDX license — source) env_logger 0.11.11 — MIT OR Apache-2.0 — https://github.com/rust-cli/env_logger equivalent 1.0.2 — Apache-2.0 OR MIT — https://github.com/indexmap-rs/equivalent errno 0.3.14 — MIT OR Apache-2.0 — https://github.com/lambda-fairy/rust-errno - event-listener 5.4.1 — Apache-2.0 OR MIT — https://github.com/smol-rs/event-listener + event-listener 5.4.2 — Apache-2.0 OR MIT — https://github.com/smol-rs/event-listener event-listener-strategy 0.5.4 — Apache-2.0 OR MIT — https://github.com/smol-rs/event-listener-strategy fallible-iterator 0.3.0 — MIT/Apache-2.0 — https://github.com/sfackler/rust-fallible-iterator fallible-streaming-iterator 0.1.9 — MIT/Apache-2.0 — https://github.com/sfackler/fallible-streaming-iterator - fastbloom 0.14.1 — MIT OR Apache-2.0 — https://github.com/tomtomwombat/fastbloom/ - fastrand 2.4.1 — Apache-2.0 OR MIT — https://github.com/smol-rs/fastrand + fastbloom 0.17.0 — MIT OR Apache-2.0 — https://github.com/tomtomwombat/fastbloom/ + fastrand 2.5.0 — Apache-2.0 OR MIT — https://github.com/smol-rs/fastrand fdeflate 0.3.7 — MIT OR Apache-2.0 — https://github.com/image-rs/fdeflate ffmpeg-next 9.0.0 — WTFPL — https://github.com/zmwangx/rust-ffmpeg ffmpeg-sys-next 9.0.0 — WTFPL — https://github.com/zmwangx/rust-ffmpeg-sys @@ -161,21 +170,22 @@ MANIFEST (crate version — SPDX license — source) foldhash 0.2.0 — Zlib — https://github.com/orlp/foldhash form_urlencoded 1.2.2 — MIT OR Apache-2.0 — https://github.com/servo/rust-url fragile 2.1.0 — Apache-2.0 — https://github.com/mitsuhiko/fragile - fs-err 3.3.0 — MIT OR Apache-2.0 — https://github.com/andrewhickman/fs-err - futures 0.3.32 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs - futures-channel 0.3.32 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs - futures-core 0.3.32 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs - futures-executor 0.3.32 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs - futures-io 0.3.32 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs + fs-err 3.3.1 — MIT OR Apache-2.0 — https://github.com/andrewhickman/fs-err + fs_extra 1.3.0 — MIT — https://github.com/webdesus/fs_extra + futures 0.3.34 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs + futures-channel 0.3.34 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs + futures-core 0.3.34 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs + futures-executor 0.3.34 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs + futures-io 0.3.34 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs futures-lite 2.6.1 — Apache-2.0 OR MIT — https://github.com/smol-rs/futures-lite - futures-macro 0.3.32 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs - futures-sink 0.3.32 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs - futures-task 0.3.32 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs - futures-util 0.3.32 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs + futures-macro 0.3.34 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs + futures-sink 0.3.34 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs + futures-task 0.3.34 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs + futures-util 0.3.34 — MIT OR Apache-2.0 — https://github.com/rust-lang/futures-rs gdk-pixbuf 0.22.0 — MIT — https://github.com/gtk-rs/gtk-rs-core gdk-pixbuf-sys 0.22.0 — MIT — https://github.com/gtk-rs/gtk-rs-core - gdk4 0.11.2 — MIT — https://github.com/gtk-rs/gtk4-rs - gdk4-sys 0.11.2 — MIT — https://github.com/gtk-rs/gtk4-rs + gdk4 0.11.4 — MIT — https://github.com/gtk-rs/gtk4-rs + gdk4-sys 0.11.4 — MIT — https://github.com/gtk-rs/gtk4-rs generic-array 0.14.7 — MIT — https://github.com/fizyk20/generic-array.git gethostname 1.1.0 — Apache-2.0 — https://codeberg.org/swsnr/gethostname.rs.git getrandom 0.2.17 — MIT OR Apache-2.0 — https://github.com/rust-random/getrandom @@ -183,47 +193,38 @@ MANIFEST (crate version — SPDX license — source) getrandom 0.4.3 — MIT OR Apache-2.0 — https://github.com/rust-random/getrandom ghash 0.5.1 — Apache-2.0 OR MIT — https://github.com/RustCrypto/universal-hashes gif 0.14.2 — MIT OR Apache-2.0 — https://github.com/image-rs/image-gif - gio 0.22.6 — MIT — https://github.com/gtk-rs/gtk-rs-core - gio-sys 0.22.0 — MIT — https://github.com/gtk-rs/gtk-rs-core - glib 0.22.7 — MIT — https://github.com/gtk-rs/gtk-rs-core + gio 0.22.8 — MIT — https://github.com/gtk-rs/gtk-rs-core + gio-sys 0.22.8 — MIT — https://github.com/gtk-rs/gtk-rs-core + glib 0.22.8 — MIT — https://github.com/gtk-rs/gtk-rs-core glib-build-tools 0.22.8 — MIT — https://github.com/gtk-rs/gtk-rs-core glib-macros 0.22.6 — MIT — https://github.com/gtk-rs/gtk-rs-core - glib-sys 0.22.6 — MIT — https://github.com/gtk-rs/gtk-rs-core - glob 0.3.3 — MIT OR Apache-2.0 — https://github.com/rust-lang/glob + glib-sys 0.22.8 — MIT — https://github.com/gtk-rs/gtk-rs-core + glob 0.3.4 — MIT OR Apache-2.0 — https://github.com/rust-lang/glob gobject-sys 0.22.6 — MIT — https://github.com/gtk-rs/gtk-rs-core - graphene-rs 0.22.0 — MIT — https://github.com/gtk-rs/gtk-rs-core - graphene-sys 0.22.0 — MIT — https://github.com/gtk-rs/gtk-rs-core - gsk4 0.11.1 — MIT — https://github.com/gtk-rs/gtk4-rs - gsk4-sys 0.11.1 — MIT — https://github.com/gtk-rs/gtk4-rs - gtk4 0.11.3 — MIT — https://github.com/gtk-rs/gtk4-rs - gtk4-macros 0.11.0 — MIT — https://github.com/gtk-rs/gtk4-rs - gtk4-sys 0.11.3 — MIT — https://github.com/gtk-rs/gtk4-rs + graphene-rs 0.22.8 — MIT — https://github.com/gtk-rs/gtk-rs-core + graphene-sys 0.22.8 — MIT — https://github.com/gtk-rs/gtk-rs-core + gsk4 0.11.4 — MIT — https://github.com/gtk-rs/gtk4-rs + gsk4-sys 0.11.4 — MIT — https://github.com/gtk-rs/gtk4-rs + gtk4 0.11.4 — MIT — https://github.com/gtk-rs/gtk4-rs + gtk4-macros 0.11.4 — MIT — https://github.com/gtk-rs/gtk4-rs + gtk4-sys 0.11.4 — MIT — https://github.com/gtk-rs/gtk4-rs h2 0.4.15 — MIT — https://github.com/hyperium/h2 half 2.7.1 — MIT OR Apache-2.0 — https://github.com/VoidStarKat/half-rs hashbrown 0.16.1 — MIT OR Apache-2.0 — https://github.com/rust-lang/hashbrown hashbrown 0.17.1 — MIT OR Apache-2.0 — https://github.com/rust-lang/hashbrown - hashlink 0.12.0 — MIT OR Apache-2.0 — https://github.com/djc/hashlink + hashlink 0.12.1 — MIT OR Apache-2.0 — https://github.com/djc/hashlink heck 0.5.0 — MIT OR Apache-2.0 — https://github.com/withoutboats/heck hermit-abi 0.5.2 — MIT OR Apache-2.0 — https://github.com/hermit-os/hermit-rs hex 0.4.3 — MIT OR Apache-2.0 — https://github.com/KokaKiwi/rust-hex hkdf 0.12.4 — MIT OR Apache-2.0 — https://github.com/RustCrypto/KDFs/ hmac 0.12.1 — MIT OR Apache-2.0 — https://github.com/RustCrypto/MACs - http 1.4.2 — MIT OR Apache-2.0 — https://github.com/hyperium/http - http-body 1.0.1 — MIT — https://github.com/hyperium/http-body - http-body-util 0.1.3 — MIT — https://github.com/hyperium/http-body + http 1.5.0 — MIT OR Apache-2.0 — https://github.com/hyperium/http + http-body 1.1.0 — MIT — https://github.com/hyperium/http-body + http-body-util 0.1.5 — MIT — https://github.com/hyperium/http-body httparse 1.10.1 — MIT OR Apache-2.0 — https://github.com/seanmonstar/httparse httpdate 1.0.3 — MIT OR Apache-2.0 — https://github.com/pyfisch/httpdate - hyper 1.10.1 — MIT — https://github.com/hyperium/hyper + hyper 1.11.0 — MIT — https://github.com/hyperium/hyper hyper-util 0.1.20 — MIT — https://github.com/hyperium/hyper-util - icu_collections 2.2.0 — Unicode-3.0 — https://github.com/unicode-org/icu4x - icu_locale_core 2.2.0 — Unicode-3.0 — https://github.com/unicode-org/icu4x - icu_normalizer 2.2.0 — Unicode-3.0 — https://github.com/unicode-org/icu4x - icu_normalizer_data 2.2.0 — Unicode-3.0 — https://github.com/unicode-org/icu4x - icu_properties 2.2.0 — Unicode-3.0 — https://github.com/unicode-org/icu4x - icu_properties_data 2.2.0 — Unicode-3.0 — https://github.com/unicode-org/icu4x - icu_provider 2.2.0 — Unicode-3.0 — https://github.com/unicode-org/icu4x - idna 1.1.0 — MIT OR Apache-2.0 — https://github.com/servo/rust-url/ - idna_adapter 1.2.2 — Apache-2.0 OR MIT — https://github.com/hsivonen/idna_adapter if-addrs 0.13.4 — MIT OR BSD-3-Clause — https://github.com/messense/if-addrs if-addrs 0.15.0 — MIT OR BSD-3-Clause — https://github.com/messense/if-addrs image 0.25.10 — MIT OR Apache-2.0 — https://github.com/image-rs/image @@ -238,38 +239,39 @@ MANIFEST (crate version — SPDX license — source) jiff-core 0.1.0 — Unlicense OR MIT — https://github.com/BurntSushi/jiff jiff-static 0.2.35 — Unlicense OR MIT — https://github.com/BurntSushi/jiff jni 0.21.1 — MIT/Apache-2.0 — https://github.com/jni-rs/jni-rs + jni 0.22.4 — MIT OR Apache-2.0 — https://github.com/jni-rs/jni-rs + jni-macros 0.22.4 — MIT OR Apache-2.0 — https://github.com/jni-rs/jni-rs jni-sys 0.3.1 — MIT OR Apache-2.0 — https://github.com/jni-rs/jni-sys jni-sys 0.4.1 — MIT OR Apache-2.0 — https://github.com/jni-rs/jni-sys jni-sys-macros 0.4.1 — MIT OR Apache-2.0 — https://github.com/jni-rs/jni-sys - jobserver 0.1.34 — MIT OR Apache-2.0 — https://github.com/rust-lang/jobserver-rs - js-sys 0.3.103 — MIT OR Apache-2.0 — https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/js-sys + jobserver 0.1.35 — MIT OR Apache-2.0 — https://github.com/rust-lang/jobserver-rs + js-sys 0.3.104 — MIT OR Apache-2.0 — https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/js-sys khronos-egl 6.0.0 — MIT/Apache-2.0 — https://github.com/timothee-haudebourg/khronos-egl - ksni 0.3.5 — Unlicense — https://github.com/iovxw/ksni + ksni 0.3.6 — Unlicense — https://github.com/iovxw/ksni lazy_static 1.5.0 — MIT OR Apache-2.0 — https://github.com/rust-lang-nursery/lazy-static.rs - libadwaita 0.9.1 — MIT — https://gitlab.gnome.org/World/Rust/libadwaita-rs - libadwaita-sys 0.9.1 — MIT — https://gitlab.gnome.org/World/Rust/libadwaita-rs - libc 0.2.186 — MIT OR Apache-2.0 — https://github.com/rust-lang/libc + libadwaita 0.9.2 — MIT — https://gitlab.gnome.org/World/Rust/libadwaita-rs + libadwaita-sys 0.9.2 — MIT — https://gitlab.gnome.org/World/Rust/libadwaita-rs + libc 0.2.189 — MIT OR Apache-2.0 — https://github.com/rust-lang/libc libloading 0.8.9 — ISC — https://github.com/nagisa/rust_libloading/ libm 0.2.16 — MIT — https://github.com/rust-lang/compiler-builtins libspa 0.9.2 — MIT — https://gitlab.freedesktop.org/pipewire/pipewire-rs libspa-sys 0.9.2 — MIT — https://gitlab.freedesktop.org/pipewire/pipewire-rs - libsqlite3-sys 0.38.1 — MIT — https://github.com/rusqlite/rusqlite + libsqlite3-sys 0.38.2 — MIT — https://github.com/rusqlite/rusqlite linux-raw-sys 0.12.1 — Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT — https://github.com/sunfishcode/linux-raw-sys - litemap 0.8.2 — Unicode-3.0 — https://github.com/unicode-org/icu4x lock_api 0.4.14 — MIT OR Apache-2.0 — https://github.com/Amanieu/parking_lot log 0.4.33 — MIT OR Apache-2.0 — https://github.com/rust-lang/log lru-slab 0.1.2 — MIT OR Apache-2.0 OR Zlib — https://github.com/Ralith/lru-slab mac_address 1.1.8 — MIT OR Apache-2.0 — https://github.com/rep-nop/mac_address matchers 0.2.0 — MIT — https://github.com/hawkw/matchers matchit 0.8.4 — MIT AND BSD-3-Clause — https://github.com/ibraheemdev/matchit - mdns-sd 0.20.1 — Apache-2.0 OR MIT — https://github.com/keepsimple1/mdns-sd - memchr 2.8.2 — Unlicense OR MIT — https://github.com/BurntSushi/memchr + mdns-sd 0.20.3 — Apache-2.0 OR MIT — https://github.com/keepsimple1/mdns-sd + memchr 2.8.3 — Unlicense OR MIT — https://github.com/BurntSushi/memchr memmap2 0.9.11 — MIT OR Apache-2.0 — https://github.com/RazrFalcon/memmap2-rs memoffset 0.9.1 — MIT — https://github.com/Gilnaa/memoffset mime 0.3.17 — MIT OR Apache-2.0 — https://github.com/hyperium/mime minimal-lexical 0.2.1 — MIT/Apache-2.0 — https://github.com/Alexhuszagh/minimal-lexical miniz_oxide 0.8.9 — MIT OR Zlib OR Apache-2.0 — https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide - mio 1.2.1 — MIT — https://github.com/tokio-rs/mio + mio 1.2.2 — MIT — https://github.com/tokio-rs/mio moxcms 0.8.1 — BSD-3-Clause OR Apache-2.0 — https://github.com/awxkee/moxcms.git nasm-rs 0.3.2 — MIT OR Apache-2.0 — https://github.com/medek/nasm-rs ndk 0.9.0 — MIT OR Apache-2.0 — https://github.com/rust-mobile/ndk @@ -279,12 +281,12 @@ MANIFEST (crate version — SPDX license — source) nom 7.1.3 — MIT — https://github.com/Geal/nom nom 8.0.0 — MIT — https://github.com/rust-bakery/nom nu-ansi-term 0.50.3 — MIT — https://github.com/nushell/nu-ansi-term - num-bigint 0.4.6 — MIT OR Apache-2.0 — https://github.com/rust-num/num-bigint + num-bigint 0.4.8 — MIT OR Apache-2.0 — https://github.com/rust-num/num-bigint num-bigint-dig 0.8.6 — MIT/Apache-2.0 — https://github.com/dignifiedquire/num-bigint num-conv 0.2.2 — MIT OR Apache-2.0 — https://github.com/jhpratt/num-conv num-derive 0.4.2 — MIT OR Apache-2.0 — https://github.com/rust-num/num-derive - num-integer 0.1.46 — MIT OR Apache-2.0 — https://github.com/rust-num/num-integer - num-iter 0.1.45 — MIT OR Apache-2.0 — https://github.com/rust-num/num-iter + num-integer 0.1.47 — MIT OR Apache-2.0 — https://github.com/rust-num/num-integer + num-iter 0.1.46 — MIT OR Apache-2.0 — https://github.com/rust-num/num-iter num-traits 0.2.19 — MIT OR Apache-2.0 — https://github.com/rust-num/num-traits num_cpus 1.17.0 — MIT OR Apache-2.0 — https://github.com/seanmonstar/num_cpus num_enum 0.7.6 — BSD-3-Clause OR MIT OR Apache-2.0 — https://github.com/illicitonion/num_enum @@ -295,12 +297,12 @@ MANIFEST (crate version — SPDX license — source) once_cell_polyfill 1.70.2 — MIT OR Apache-2.0 — https://github.com/polyfill-rs/once_cell_polyfill oorandom 11.1.5 — MIT — https://hg.sr.ht/~icefox/oorandom opaque-debug 0.3.1 — MIT OR Apache-2.0 — https://github.com/RustCrypto/utils - openh264 0.9.3 — BSD-2-Clause — https://github.com/ralfbiedert/openh264-rs - openh264-sys2 0.9.6 — BSD-2-Clause — https://github.com/ralfbiedert/openh264-rs + openh264 0.9.8 — BSD-2-Clause — https://github.com/ralfbiedert/openh264-rs + openh264-sys2 0.9.8 — BSD-2-Clause — https://github.com/ralfbiedert/openh264-rs openssl-probe 0.2.1 — MIT OR Apache-2.0 — https://github.com/rustls/openssl-probe opus 0.3.1 — MIT/Apache-2.0 — https://github.com/SpaceManiac/opus-rs ordered-stream 0.2.0 — MIT OR Apache-2.0 — https://github.com/danieldg/ordered-stream - pango 0.22.6 — MIT — https://github.com/gtk-rs/gtk-rs-core + pango 0.22.8 — MIT — https://github.com/gtk-rs/gtk-rs-core pango-sys 0.22.0 — MIT — https://github.com/gtk-rs/gtk-rs-core parking 2.2.1 — Apache-2.0 OR MIT — https://github.com/smol-rs/parking parking_lot 0.12.5 — MIT OR Apache-2.0 — https://github.com/Amanieu/parking_lot @@ -321,30 +323,32 @@ MANIFEST (crate version — SPDX license — source) polling 3.11.0 — Apache-2.0 OR MIT — https://github.com/smol-rs/polling poly1305 0.8.0 — Apache-2.0 OR MIT — https://github.com/RustCrypto/universal-hashes polyval 0.6.2 — Apache-2.0 OR MIT — https://github.com/RustCrypto/universal-hashes - portable-atomic 1.14.0 — Apache-2.0 OR MIT — https://github.com/taiki-e/portable-atomic + portable-atomic 1.15.0 — Apache-2.0 OR MIT — https://github.com/taiki-e/portable-atomic portable-atomic-util 0.2.7 — Apache-2.0 OR MIT — https://github.com/taiki-e/portable-atomic-util - potential_utf 0.1.5 — Unicode-3.0 — https://github.com/unicode-org/icu4x powerfmt 0.2.0 — MIT OR Apache-2.0 — https://github.com/jhpratt/powerfmt ppv-lite86 0.2.21 — MIT OR Apache-2.0 — https://github.com/cryptocorrosion/cryptocorrosion prettyplease 0.2.37 — MIT OR Apache-2.0 — https://github.com/dtolnay/prettyplease proc-macro-crate 3.5.0 — MIT OR Apache-2.0 — https://github.com/bkchr/proc-macro-crate - proc-macro2 1.0.106 — MIT OR Apache-2.0 — https://github.com/dtolnay/proc-macro2 + proc-macro2 1.0.107 — MIT OR Apache-2.0 — https://github.com/dtolnay/proc-macro2 proptest 1.11.0 — MIT OR Apache-2.0 — https://github.com/proptest-rs/proptest pxfm 0.1.30 — BSD-3-Clause OR Apache-2.0 — https://github.com/awxkee/pxfm quick-error 1.2.3 — MIT/Apache-2.0 — http://github.com/tailhook/quick-error - quick-xml 0.39.4 — MIT — https://github.com/tafia/quick-xml + quick-xml 0.41.0 — MIT — https://github.com/tafia/quick-xml quinn 0.11.11 — MIT OR Apache-2.0 — https://github.com/quinn-rs/quinn - quinn-proto 0.11.15 — MIT OR Apache-2.0 — https://github.com/quinn-rs/quinn - quinn-udp 0.5.14 — MIT OR Apache-2.0 — https://github.com/quinn-rs/quinn - quote 1.0.46 — MIT OR Apache-2.0 — https://github.com/dtolnay/quote + quinn-proto 0.11.16 — MIT OR Apache-2.0 — https://github.com/quinn-rs/quinn + quinn-udp 0.5.15 — MIT OR Apache-2.0 — https://github.com/quinn-rs/quinn + quote 1.0.47 — MIT OR Apache-2.0 — https://github.com/dtolnay/quote r-efi 5.3.0 — MIT OR Apache-2.0 OR LGPL-2.1-or-later — https://github.com/r-efi/r-efi r-efi 6.0.0 — MIT OR Apache-2.0 OR LGPL-2.1-or-later — https://github.com/r-efi/r-efi - rand 0.8.6 — MIT OR Apache-2.0 — https://github.com/rust-random/rand - rand 0.9.4 — MIT OR Apache-2.0 — https://github.com/rust-random/rand + rand 0.10.2 — MIT OR Apache-2.0 — https://github.com/rust-random/rand + rand 0.8.7 — MIT OR Apache-2.0 — https://github.com/rust-random/rand + rand 0.9.5 — MIT OR Apache-2.0 — https://github.com/rust-random/rand rand_chacha 0.3.1 — MIT OR Apache-2.0 — https://github.com/rust-random/rand rand_chacha 0.9.0 — MIT OR Apache-2.0 — https://github.com/rust-random/rand + rand_core 0.10.1 — MIT OR Apache-2.0 — https://github.com/rust-random/rand_core rand_core 0.6.4 — MIT OR Apache-2.0 — https://github.com/rust-random/rand rand_core 0.9.5 — MIT OR Apache-2.0 — https://github.com/rust-random/rand + rand_pcg 0.10.2 — MIT OR Apache-2.0 — https://github.com/rust-random/rngs rand_xorshift 0.4.0 — MIT OR Apache-2.0 — https://github.com/rust-random/rngs rav1d 1.1.0 — BSD-2-Clause — https://github.com/memorysafety/rav1d raw-cpuid 11.6.0 — MIT — https://github.com/gz/rust-cpuid @@ -355,8 +359,8 @@ MANIFEST (crate version — SPDX license — source) readme-rustdocifier 0.1.1 — MIT — https://github.com/malaire/readme-rustdocifier redox_syscall 0.5.18 — MIT — https://gitlab.redox-os.org/redox-os/syscall reed-solomon-simd 3.1.0 — MIT AND BSD-3-Clause — https://github.com/AndersTrier/reed-solomon-simd - regex 1.12.4 — MIT OR Apache-2.0 — https://github.com/rust-lang/regex - regex-automata 0.4.14 — MIT OR Apache-2.0 — https://github.com/rust-lang/regex + regex 1.13.1 — MIT OR Apache-2.0 — https://github.com/rust-lang/regex + regex-automata 0.4.18 — MIT OR Apache-2.0 — https://github.com/rust-lang/regex regex-syntax 0.8.11 — MIT OR Apache-2.0 — https://github.com/rust-lang/regex reis 0.6.1 — MIT — https://github.com/ids1024/reis relm4 0.11.0 — Apache-2.0 OR MIT — https://github.com/Relm4/Relm4 @@ -367,22 +371,22 @@ MANIFEST (crate version — SPDX license — source) rpkg-config 0.1.2 — Zlib OR MIT OR Apache-2.0 — https://github.com/maia-s/rpkg-config-rs rsa 0.9.10 — MIT OR Apache-2.0 — https://github.com/RustCrypto/RSA rsqlite-vfs 0.1.1 — MIT - rusqlite 0.40.1 — MIT — https://github.com/rusqlite/rusqlite - rustc-hash 2.1.2 — Apache-2.0 OR MIT — https://github.com/rust-lang/rustc-hash + rusqlite 0.40.2 — MIT — https://github.com/rusqlite/rusqlite + rustc-hash 2.1.3 — Apache-2.0 OR MIT — https://github.com/rust-lang/rustc-hash rustc_version 0.4.1 — MIT OR Apache-2.0 — https://github.com/djc/rustc-version-rs rusticata-macros 4.1.0 — MIT/Apache-2.0 — https://github.com/rusticata/rusticata-macros.git rustix 1.1.4 — Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT — https://github.com/bytecodealliance/rustix - rustls 0.23.41 — Apache-2.0 OR ISC OR MIT — https://github.com/rustls/rustls + rustls 0.23.43 — Apache-2.0 OR ISC OR MIT — https://github.com/rustls/rustls rustls-native-certs 0.8.4 — Apache-2.0 OR ISC OR MIT — https://github.com/rustls/rustls-native-certs - rustls-pki-types 1.14.1 — MIT OR Apache-2.0 — https://github.com/rustls/pki-types - rustls-platform-verifier 0.6.2 — MIT OR Apache-2.0 — https://github.com/rustls/rustls-platform-verifier + rustls-pki-types 1.15.1 — MIT OR Apache-2.0 — https://github.com/rustls/pki-types + rustls-platform-verifier 0.7.0 — MIT OR Apache-2.0 — https://github.com/rustls/rustls-platform-verifier rustls-platform-verifier-android 0.1.1 — MIT OR Apache-2.0 — https://github.com/rustls/rustls-platform-verifier - rustls-webpki 0.103.13 — ISC — https://github.com/rustls/webpki - rustversion 1.0.22 — MIT OR Apache-2.0 — https://github.com/dtolnay/rustversion + rustls-webpki 0.103.14 — ISC — https://github.com/rustls/webpki + rustversion 1.0.23 — MIT OR Apache-2.0 — https://github.com/dtolnay/rustversion rusty-fork 0.3.1 — MIT/Apache-2.0 — https://github.com/altsysrq/rusty-fork rusty_enet 0.4.0 — MIT — https://github.com/jabuwu/rusty_enet ryu 1.0.23 — Apache-2.0 OR BSL-1.0 — https://github.com/dtolnay/ryu - safe_arch 0.7.4 — Zlib OR Apache-2.0 OR MIT — https://github.com/Lokathor/safe_arch + safe_arch 1.1.0 — Zlib OR Apache-2.0 OR MIT — https://github.com/Lokathor/safe_arch same-file 1.0.6 — Unlicense/MIT — https://github.com/BurntSushi/same-file schannel 0.1.29 — MIT — https://github.com/steffengy/schannel-rs scopeguard 1.2.0 — MIT OR Apache-2.0 — https://github.com/bluss/scopeguard @@ -391,19 +395,19 @@ MANIFEST (crate version — SPDX license — source) sdl3-image-sys 0.6.4+SDL-image-3.4.4 — Zlib — https://codeberg.org/maia/sdl3-sys-rs sdl3-mixer-src 3.2.4 — Zlib — https://codeberg.org/maia/sdl3-sys-rs sdl3-mixer-sys 0.6.3+SDL-mixer-3.2.4 — Zlib — https://codeberg.org/maia/sdl3-sys-rs - sdl3-src 3.4.10 — Zlib — https://codeberg.org/maia/sdl3-sys-rs - sdl3-sys 0.6.6+SDL-3.4.10 — Zlib — https://codeberg.org/maia/sdl3-sys-rs + sdl3-src 3.4.14 — Zlib — https://codeberg.org/maia/sdl3-sys-rs + sdl3-sys 0.6.8+SDL-3.4.14 — Zlib — https://codeberg.org/maia/sdl3-sys-rs sdl3-ttf-src 3.2.2 — Zlib — https://github.com/maia-s/sdl3-sys-rs sdl3-ttf-sys 0.6.1+SDL-ttf-3.2.2 — Zlib — https://codeberg.org/maia/sdl3-sys-rs security-framework 3.7.0 — MIT OR Apache-2.0 — https://github.com/kornelski/rust-security-framework security-framework-sys 2.17.0 — MIT OR Apache-2.0 — https://github.com/kornelski/rust-security-framework semver 1.0.28 — MIT OR Apache-2.0 — https://github.com/dtolnay/semver - serde 1.0.228 — MIT OR Apache-2.0 — https://github.com/serde-rs/serde - serde_core 1.0.228 — MIT OR Apache-2.0 — https://github.com/serde-rs/serde - serde_derive 1.0.228 — MIT OR Apache-2.0 — https://github.com/serde-rs/serde - serde_json 1.0.150 — MIT OR Apache-2.0 — https://github.com/serde-rs/json + serde 1.0.229 — MIT OR Apache-2.0 — https://github.com/serde-rs/serde + serde_core 1.0.229 — MIT OR Apache-2.0 — https://github.com/serde-rs/serde + serde_derive 1.0.229 — MIT OR Apache-2.0 — https://github.com/serde-rs/serde + serde_json 1.0.151 — MIT OR Apache-2.0 — https://github.com/serde-rs/json serde_path_to_error 0.1.20 — MIT OR Apache-2.0 — https://github.com/dtolnay/path-to-error - serde_repr 0.1.20 — MIT OR Apache-2.0 — https://github.com/dtolnay/serde-repr + serde_repr 0.1.21 — MIT OR Apache-2.0 — https://github.com/dtolnay/serde-repr serde_spanned 0.6.9 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml serde_spanned 1.1.1 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml serde_urlencoded 0.7.1 — MIT/Apache-2.0 — https://github.com/nox/serde_urlencoded @@ -413,59 +417,61 @@ MANIFEST (crate version — SPDX license — source) shlex 2.0.1 — MIT OR Apache-2.0 — https://github.com/comex/rust-shlex signal-hook-registry 1.4.8 — MIT OR Apache-2.0 — https://github.com/vorner/signal-hook signature 2.2.0 — Apache-2.0 OR MIT — https://github.com/RustCrypto/traits/tree/master/signature - simd-adler32 0.3.9 — MIT — https://github.com/mcountryman/simd-adler32 + simd-adler32 0.3.10 — MIT — https://github.com/mcountryman/simd-adler32 + simd_cesu8 1.2.0 — Apache-2.0 OR MIT — https://github.com/seancroach/simd_cesu8 + simdutf8 0.1.5 — MIT OR Apache-2.0 — https://github.com/rusticstuff/simdutf8 siphasher 1.0.3 — MIT/Apache-2.0 — https://github.com/jedisct1/rust-siphash skia-bindings 0.87.0 — MIT — https://github.com/rust-skia/rust-skia skia-safe 0.87.0 — MIT — https://github.com/rust-skia/rust-skia slab 0.4.12 — MIT — https://github.com/tokio-rs/slab smallvec 1.15.2 — MIT OR Apache-2.0 — https://github.com/servo/rust-smallvec - socket-pktinfo 0.4.0 — MIT — https://github.com/pixsper/socket-pktinfo - socket2 0.6.4 — MIT OR Apache-2.0 — https://github.com/rust-lang/socket2 + socket-pktinfo 0.4.1 — MIT — https://github.com/pixsper/socket-pktinfo + socket2 0.6.5 — MIT OR Apache-2.0 — https://github.com/rust-lang/socket2 spake2 0.4.0 — MIT OR Apache-2.0 — https://github.com/RustCrypto/PAKEs/tree/master/spake2 - spin 0.9.8 — MIT — https://github.com/mvdnes/spin-rs.git + spin 0.9.9 — MIT — https://github.com/mvdnes/spin-rs.git spki 0.7.3 — Apache-2.0 OR MIT — https://github.com/RustCrypto/formats/tree/master/spki sqlite-wasm-rs 0.5.5 — MIT — https://github.com/Spxg/sqlite-wasm-rs - stable_deref_trait 1.2.1 — MIT OR Apache-2.0 — https://github.com/storyyeller/stable_deref_trait strsim 0.11.1 — MIT — https://github.com/rapidfuzz/strsim-rs strum 0.26.3 — MIT — https://github.com/Peternator7/strum strum_macros 0.26.4 — MIT — https://github.com/Peternator7/strum subtle 2.6.1 — BSD-3-Clause — https://github.com/dalek-cryptography/subtle - syn 2.0.118 — MIT OR Apache-2.0 — https://github.com/dtolnay/syn + syn 2.0.119 — MIT OR Apache-2.0 — https://github.com/dtolnay/syn + syn 3.0.3 — MIT OR Apache-2.0 — https://github.com/dtolnay/syn sync_wrapper 1.0.2 — Apache-2.0 — https://github.com/Actyx/sync_wrapper synstructure 0.13.2 — MIT — https://github.com/mystor/synstructure system-deps 7.0.8 — MIT OR Apache-2.0 — https://github.com/gdesmott/system-deps tar 0.4.46 — MIT OR Apache-2.0 — https://github.com/composefs/tar-rs target-lexicon 0.13.5 — Apache-2.0 WITH LLVM-exception — https://github.com/bytecodealliance/target-lexicon + task-local 0.1.1 — MIT OR Apache-2.0 — https://github.com/BugenZhao/task-local tempfile 3.27.0 — MIT OR Apache-2.0 — https://github.com/Stebalien/tempfile test_reactor 0.0.0 — UNKNOWN thiserror 1.0.69 — MIT OR Apache-2.0 — https://github.com/dtolnay/thiserror - thiserror 2.0.18 — MIT OR Apache-2.0 — https://github.com/dtolnay/thiserror + thiserror 2.0.20 — MIT OR Apache-2.0 — https://github.com/dtolnay/thiserror thiserror-impl 1.0.69 — MIT OR Apache-2.0 — https://github.com/dtolnay/thiserror - thiserror-impl 2.0.18 — MIT OR Apache-2.0 — https://github.com/dtolnay/thiserror - thread_local 1.1.9 — MIT OR Apache-2.0 — https://github.com/Amanieu/thread_local-rs - time 0.3.51 — MIT OR Apache-2.0 — https://github.com/time-rs/time + thiserror-impl 2.0.20 — MIT OR Apache-2.0 — https://github.com/dtolnay/thiserror + thread_local 1.1.10 — MIT OR Apache-2.0 — https://github.com/Amanieu/thread_local-rs + time 0.3.55 — MIT OR Apache-2.0 — https://github.com/time-rs/time time-core 0.1.9 — MIT OR Apache-2.0 — https://github.com/time-rs/time - time-macros 0.2.30 — MIT OR Apache-2.0 — https://github.com/time-rs/time - tinystr 0.8.3 — Unicode-3.0 — https://github.com/unicode-org/icu4x + time-macros 0.2.32 — MIT OR Apache-2.0 — https://github.com/time-rs/time tinytemplate 1.2.1 — Apache-2.0 OR MIT — https://github.com/bheisler/TinyTemplate - tinyvec 1.11.0 — Zlib OR Apache-2.0 OR MIT — https://github.com/Lokathor/tinyvec + tinyvec 1.12.0 — Zlib OR Apache-2.0 OR MIT — https://github.com/Lokathor/tinyvec tinyvec_macros 0.1.1 — MIT OR Apache-2.0 OR Zlib — https://github.com/Soveu/tinyvec_macros to_method 1.1.0 — CC0-1.0 — https://github.com/whentze/to_method - tokio 1.52.3 — MIT — https://github.com/tokio-rs/tokio - tokio-macros 2.7.0 — MIT — https://github.com/tokio-rs/tokio + tokio 1.53.1 — MIT — https://github.com/tokio-rs/tokio + tokio-macros 2.7.2 — MIT — https://github.com/tokio-rs/tokio tokio-rustls 0.26.4 — MIT OR Apache-2.0 — https://github.com/rustls/tokio-rustls - tokio-util 0.7.18 — MIT — https://github.com/tokio-rs/tokio + tokio-util 0.7.19 — MIT — https://github.com/tokio-rs/tokio toml 0.8.23 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml toml 0.9.12+spec-1.1.0 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml - toml 1.1.2+spec-1.1.0 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml + toml 1.1.4+spec-1.1.0 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml toml_datetime 0.6.11 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml toml_datetime 0.7.5+spec-1.1.0 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml toml_datetime 1.1.1+spec-1.1.0 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml toml_edit 0.22.27 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml - toml_edit 0.25.12+spec-1.1.0 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml - toml_parser 1.1.2+spec-1.1.0 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml + toml_edit 0.25.13+spec-1.1.0 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml + toml_parser 1.1.3+spec-1.1.0 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml toml_write 0.1.2 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml - toml_writer 1.1.1+spec-1.1.0 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml + toml_writer 1.1.2+spec-1.1.0 — MIT OR Apache-2.0 — https://github.com/toml-rs/toml tower 0.5.3 — MIT — https://github.com/tower-rs/tower tower-layer 0.3.3 — MIT — https://github.com/tower-rs/tower tower-service 0.3.3 — MIT — https://github.com/tower-rs/tower @@ -482,17 +488,18 @@ MANIFEST (crate version — SPDX license — source) unicode-segmentation 1.13.3 — MIT OR Apache-2.0 — https://github.com/unicode-rs/unicode-segmentation unicode-width 0.2.2 — MIT OR Apache-2.0 — https://github.com/unicode-rs/unicode-width universal-hash 0.5.1 — MIT OR Apache-2.0 — https://github.com/RustCrypto/traits + untrusted 0.7.1 — ISC — https://github.com/briansmith/untrusted untrusted 0.9.0 — ISC — https://github.com/briansmith/untrusted - ureq 2.12.1 — MIT OR Apache-2.0 — https://github.com/algesten/ureq - url 2.5.8 — MIT OR Apache-2.0 — https://github.com/servo/rust-url + ureq 3.4.0 — MIT OR Apache-2.0 — https://github.com/algesten/ureq + ureq-proto 0.6.1 — MIT OR Apache-2.0 — https://github.com/algesten/ureq-proto usbfs-iso 0.1.0 — MIT OR Apache-2.0 — https://github.com/unom-io/usbfs-iso - utf8_iter 1.0.4 — Apache-2.0 OR MIT — https://github.com/hsivonen/utf8_iter + utf8-zero 0.8.1 — MIT OR Apache-2.0 — https://github.com/algesten/utf8-zero utf8parse 0.2.2 — Apache-2.0 OR MIT — https://github.com/alacritty/vte utoipa 5.5.0 — MIT OR Apache-2.0 — https://github.com/juhaku/utoipa utoipa-axum 0.2.0 — MIT OR Apache-2.0 — https://github.com/juhaku/utoipa utoipa-gen 5.5.0 — MIT OR Apache-2.0 — https://github.com/juhaku/utoipa utoipa-scalar 0.3.0 — MIT OR Apache-2.0 — https://github.com/juhaku/utoipa - uuid 1.23.4 — Apache-2.0 OR MIT — https://github.com/uuid-rs/uuid + uuid 1.24.0 — Apache-2.0 OR MIT — https://github.com/uuid-rs/uuid valuable 0.1.1 — MIT — https://github.com/tokio-rs/valuable vcpkg 0.2.15 — MIT/Apache-2.0 — https://github.com/mcgoo/vcpkg-rs version-compare 0.2.1 — MIT — https://gitlab.com/timvisee/version-compare @@ -502,23 +509,22 @@ MANIFEST (crate version — SPDX license — source) wasapi 0.23.0 — MIT — https://github.com/HEnquist/wasapi-rs wasi 0.11.1+wasi-snapshot-preview1 — Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT — https://github.com/bytecodealliance/wasi wasip2 1.0.4+wasi-0.2.12 — Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT — https://github.com/bytecodealliance/wasi-rs - wasm-bindgen 0.2.126 — MIT OR Apache-2.0 — https://github.com/wasm-bindgen/wasm-bindgen - wasm-bindgen-macro 0.2.126 — MIT OR Apache-2.0 — https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/macro - wasm-bindgen-macro-support 0.2.126 — MIT OR Apache-2.0 — https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/macro-support - wasm-bindgen-shared 0.2.126 — MIT OR Apache-2.0 — https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/shared - wayland-backend 0.3.15 — MIT — https://github.com/smithay/wayland-rs - wayland-client 0.31.14 — MIT — https://github.com/smithay/wayland-rs + wasm-bindgen 0.2.127 — MIT OR Apache-2.0 — https://github.com/wasm-bindgen/wasm-bindgen + wasm-bindgen-macro 0.2.127 — MIT OR Apache-2.0 — https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/macro + wasm-bindgen-macro-support 0.2.127 — MIT OR Apache-2.0 — https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/macro-support + wasm-bindgen-shared 0.2.127 — MIT OR Apache-2.0 — https://github.com/wasm-bindgen/wasm-bindgen/tree/master/crates/shared + wayland-backend 0.3.16 — MIT — https://github.com/smithay/wayland-rs + wayland-client 0.31.15 — MIT — https://github.com/smithay/wayland-rs wayland-protocols 0.32.13 — MIT — https://github.com/smithay/wayland-rs wayland-protocols-misc 0.3.12 — MIT — https://github.com/smithay/wayland-rs wayland-protocols-wlr 0.3.12 — MIT — https://github.com/smithay/wayland-rs - wayland-scanner 0.31.10 — MIT — https://github.com/smithay/wayland-rs + wayland-scanner 0.31.11 — MIT — https://github.com/smithay/wayland-rs wayland-sys 0.31.11 — MIT — https://github.com/smithay/wayland-rs web-time 1.1.0 — MIT OR Apache-2.0 — https://github.com/daxpedda/web-time - webpki-root-certs 1.0.8 — CDLA-Permissive-2.0 — https://github.com/rustls/webpki-roots - webpki-roots 0.26.11 — CDLA-Permissive-2.0 — https://github.com/rustls/webpki-roots - webpki-roots 1.0.8 — CDLA-Permissive-2.0 — https://github.com/rustls/webpki-roots + webpki-root-certs 1.0.9 — CDLA-Permissive-2.0 — https://github.com/rustls/webpki-roots + webpki-roots 1.0.9 — CDLA-Permissive-2.0 — https://github.com/rustls/webpki-roots weezl 0.1.12 — MIT OR Apache-2.0 — https://github.com/image-rs/weezl - wide 0.7.33 — Zlib OR Apache-2.0 OR MIT — https://github.com/Lokathor/wide + wide 1.6.1 — Zlib OR Apache-2.0 OR MIT — https://github.com/Lokathor/wide widestring 1.2.1 — MIT OR Apache-2.0 — https://github.com/VoidStarKat/widestring-rs winapi 0.3.9 — MIT/Apache-2.0 — https://github.com/retep998/winapi-rs winapi-i686-pc-windows-gnu 0.4.0 — MIT/Apache-2.0 — https://github.com/retep998/winapi-rs @@ -553,44 +559,33 @@ MANIFEST (crate version — SPDX license — source) windows-sys 0.45.0 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows-sys 0.52.0 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows-sys 0.59.0 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs - windows-sys 0.60.2 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows-sys 0.61.2 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows-targets 0.42.2 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows-targets 0.52.6 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs - windows-targets 0.53.5 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows-threading 0.2.1 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows-threading 0.2.1 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows-time 0.1.0 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows-window 0.0.0 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_aarch64_gnullvm 0.42.2 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_aarch64_gnullvm 0.52.6 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs - windows_aarch64_gnullvm 0.53.1 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_aarch64_msvc 0.42.2 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_aarch64_msvc 0.52.6 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs - windows_aarch64_msvc 0.53.1 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_i686_gnu 0.42.2 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_i686_gnu 0.52.6 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs - windows_i686_gnu 0.53.1 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_i686_gnullvm 0.52.6 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs - windows_i686_gnullvm 0.53.1 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_i686_msvc 0.42.2 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_i686_msvc 0.52.6 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs - windows_i686_msvc 0.53.1 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_x86_64_gnu 0.42.2 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_x86_64_gnu 0.52.6 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs - windows_x86_64_gnu 0.53.1 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_x86_64_gnullvm 0.42.2 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_x86_64_gnullvm 0.52.6 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs - windows_x86_64_gnullvm 0.53.1 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_x86_64_msvc 0.42.2 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs windows_x86_64_msvc 0.52.6 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs - windows_x86_64_msvc 0.53.1 — MIT OR Apache-2.0 — https://github.com/microsoft/windows-rs winnow 0.7.15 — MIT — https://github.com/winnow-rs/winnow - winnow 1.0.3 — MIT — https://github.com/winnow-rs/winnow + winnow 1.0.4 — MIT — https://github.com/winnow-rs/winnow winreg 0.56.0 — MIT — https://github.com/gentoo90/winreg-rs winresource 0.1.31 — MIT — https://github.com/BenjaminRi/winresource wit-bindgen 0.57.1 — Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT — https://github.com/bytecodealliance/wit-bindgen - writeable 0.6.3 — Unicode-3.0 — https://github.com/unicode-org/icu4x x11rb 0.13.2 — MIT OR Apache-2.0 — https://github.com/psychon/x11rb x11rb-protocol 0.13.2 — MIT OR Apache-2.0 — https://github.com/psychon/x11rb x509-parser 0.16.0 — MIT OR Apache-2.0 — https://github.com/rusticata/x509-parser.git @@ -598,27 +593,21 @@ MANIFEST (crate version — SPDX license — source) xkbcommon 0.8.0 — MIT — https://github.com/rust-x-bindings/xkbcommon-rs xkeysym 0.2.1 — MIT OR Apache-2.0 OR Zlib — https://github.com/notgull/xkeysym yasna 0.5.2 — MIT OR Apache-2.0 — https://github.com/qnighy/yasna.rs - yoke 0.8.3 — Unicode-3.0 — https://github.com/unicode-org/icu4x - yoke-derive 0.8.2 — Unicode-3.0 — https://github.com/unicode-org/icu4x - zbus 5.16.0 — MIT — https://github.com/z-galaxy/zbus/ - zbus_macros 5.16.0 — MIT — https://github.com/z-galaxy/zbus/ - zbus_names 4.3.2 — MIT — https://github.com/z-galaxy/zbus/ + zbus 5.19.0 — MIT — https://github.com/z-galaxy/zbus/ + zbus_macros 5.19.0 — MIT — https://github.com/z-galaxy/zbus/ + zbus_names 4.3.4 — MIT — https://github.com/z-galaxy/zbus/ + zcheapstr 1.1.0 — MIT — https://github.com/z-galaxy/zcheapstr/ zerocopy 0.7.35 — BSD-2-Clause OR Apache-2.0 OR MIT — https://github.com/google/zerocopy - zerocopy 0.8.52 — BSD-2-Clause OR Apache-2.0 OR MIT — https://github.com/google/zerocopy + zerocopy 0.8.56 — BSD-2-Clause OR Apache-2.0 OR MIT — https://github.com/google/zerocopy zerocopy-derive 0.7.35 — BSD-2-Clause OR Apache-2.0 OR MIT — https://github.com/google/zerocopy - zerocopy-derive 0.8.52 — BSD-2-Clause OR Apache-2.0 OR MIT — https://github.com/google/zerocopy - zerofrom 0.1.8 — Unicode-3.0 — https://github.com/unicode-org/icu4x - zerofrom-derive 0.1.7 — Unicode-3.0 — https://github.com/unicode-org/icu4x + zerocopy-derive 0.8.56 — BSD-2-Clause OR Apache-2.0 OR MIT — https://github.com/google/zerocopy zeroize 1.9.0 — Apache-2.0 OR MIT — https://github.com/RustCrypto/utils - zerotrie 0.2.4 — Unicode-3.0 — https://github.com/unicode-org/icu4x - zerovec 0.11.6 — Unicode-3.0 — https://github.com/unicode-org/icu4x - zerovec-derive 0.11.3 — Unicode-3.0 — https://github.com/unicode-org/icu4x - zmij 1.0.21 — MIT — https://github.com/dtolnay/zmij - zune-core 0.5.1 — MIT OR Apache-2.0 OR Zlib — https://github.com/etemesi254/zune-image + zmij 1.0.23 — MIT — https://github.com/dtolnay/zmij + zune-core 0.5.3 — MIT OR Apache-2.0 OR Zlib — https://github.com/etemesi254/zune-image zune-jpeg 0.5.15 — MIT OR Apache-2.0 OR Zlib — https://github.com/etemesi254/zune-image/tree/dev/crates/zune-jpeg - zvariant 5.12.0 — MIT — https://github.com/z-galaxy/zbus/ - zvariant_derive 5.12.0 — MIT — https://github.com/z-galaxy/zbus/ - zvariant_utils 3.4.0 — MIT — https://github.com/z-galaxy/zbus/ + zvariant 5.14.0 — MIT — https://github.com/z-galaxy/zbus/ + zvariant_derive 5.14.0 — MIT — https://github.com/z-galaxy/zbus/ + zvariant_utils 4.0.0 — MIT — https://github.com/z-galaxy/zbus/ ---------------------------------------------------------------------------- Crates whose package did not embed a license file (SPDX + source only) @@ -629,11 +618,13 @@ Crates whose package did not embed a license file (SPDX + source only) cookie-factory 0.3.3 — MIT — https://github.com/rust-bakery/cookie-factory defmt-parser 1.0.0 — MIT OR Apache-2.0 — https://github.com/knurling-rs/defmt ffmpeg-sys-next 9.0.0 — WTFPL — https://github.com/zmwangx/rust-ffmpeg-sys + jni 0.22.4 — MIT OR Apache-2.0 — https://github.com/jni-rs/jni-rs + jni-macros 0.22.4 — MIT OR Apache-2.0 — https://github.com/jni-rs/jni-rs jni-sys-macros 0.4.1 — MIT OR Apache-2.0 — https://github.com/jni-rs/jni-sys ndk 0.9.0 — MIT OR Apache-2.0 — https://github.com/rust-mobile/ndk ndk-sys 0.6.0+11769913 — MIT OR Apache-2.0 — https://github.com/rust-mobile/ndk - openh264 0.9.3 — BSD-2-Clause — https://github.com/ralfbiedert/openh264-rs - openh264-sys2 0.9.6 — BSD-2-Clause — https://github.com/ralfbiedert/openh264-rs + openh264 0.9.8 — BSD-2-Clause — https://github.com/ralfbiedert/openh264-rs + openh264-sys2 0.9.8 — BSD-2-Clause — https://github.com/ralfbiedert/openh264-rs r-efi 5.3.0 — MIT OR Apache-2.0 OR LGPL-2.1-or-later — https://github.com/r-efi/r-efi r-efi 6.0.0 — MIT OR Apache-2.0 OR LGPL-2.1-or-later — https://github.com/r-efi/r-efi rsqlite-vfs 0.1.1 — MIT @@ -879,7 +870,7 @@ limitations under the License. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: adler2 2.0.1, anyhow 1.0.103, async-channel 2.5.0, async-executor 1.14.0, async-io 2.6.0, async-lock 3.4.2, async-process 2.5.0, async-recursion 1.1.1, async-signal 0.2.14, async-task 4.7.1, async-trait 0.1.89, atomic-waker 1.1.2, blocking 1.6.2, concurrent-queue 2.5.0, cudarc 0.16.6, curve25519-dalek-derive 0.1.1, displaydoc 0.2.6, endi 1.1.1, event-listener 5.4.1, event-listener-strategy 0.5.4, fastrand 2.4.1, flume 0.12.0, fs-err 3.3.0, futures-lite 2.6.1, hermit-abi 0.5.2, is-terminal 0.4.17, itoa 1.0.18, khronos-egl 6.0.0, linux-raw-sys 0.12.1, minimal-lexical 0.2.1, num_enum 0.7.6, num_enum_derive 0.7.6, once_cell 1.21.4, ordered-stream 0.2.0, parking 2.2.1, paste 1.0.15, pastey 0.2.3, pin-project-lite 0.2.17, piper 0.2.5, polling 3.11.0, portable-atomic 1.14.0, portable-atomic-util 0.2.7, prettyplease 0.2.37, proc-macro-crate 3.5.0, proc-macro2 1.0.106, quote 1.0.46, reis 0.6.1, relm4 0.11.0, relm4-css 0.11.0, relm4-macros 0.11.0, rsa 0.9.10, rustc-hash 2.1.2, rustix 1.1.4, rustversion 1.0.22, semver 1.0.28, serde 1.0.228, serde_core 1.0.228, serde_derive 1.0.228, serde_json 1.0.150, serde_path_to_error 0.1.20, serde_repr 0.1.20, syn 2.0.118, system-deps 7.0.8, thiserror 1.0.69, thiserror 2.0.18, thiserror-impl 1.0.69, thiserror-impl 2.0.18, unicode-ident 1.0.24, wasi 0.11.1+wasi-snapshot-preview1, wasip2 1.0.4+wasi-0.2.12, wit-bindgen 0.57.1, zmij 1.0.21, zvariant_utils 3.4.0 +The following license (LICENSE-MIT) applies to: adler2 2.0.1, anyhow 1.0.104, async-channel 2.5.0, async-executor 1.14.0, async-io 2.6.0, async-lock 3.4.2, async-process 2.5.0, async-recursion 1.1.1, async-signal 0.2.14, async-task 4.7.1, async-trait 0.1.92, atomic-waker 1.1.2, blocking 1.6.2, concurrent-queue 2.5.0, cudarc 0.16.6, curve25519-dalek-derive 0.1.1, displaydoc 0.2.7, endi 1.1.1, event-listener 5.4.2, event-listener-strategy 0.5.4, fastrand 2.5.0, flume 0.12.0, fs-err 3.3.1, futures-lite 2.6.1, hermit-abi 0.5.2, is-terminal 0.4.17, itoa 1.0.18, khronos-egl 6.0.0, linux-raw-sys 0.12.1, minimal-lexical 0.2.1, num_enum 0.7.6, num_enum_derive 0.7.6, once_cell 1.21.4, ordered-stream 0.2.0, parking 2.2.1, paste 1.0.15, pastey 0.2.3, pin-project-lite 0.2.17, piper 0.2.5, polling 3.11.0, portable-atomic 1.15.0, portable-atomic-util 0.2.7, prettyplease 0.2.37, proc-macro-crate 3.5.0, proc-macro2 1.0.107, quote 1.0.47, reis 0.6.1, relm4 0.11.0, relm4-css 0.11.0, relm4-macros 0.11.0, rsa 0.9.10, rustc-hash 2.1.3, rustix 1.1.4, rustversion 1.0.23, semver 1.0.28, serde 1.0.229, serde_core 1.0.229, serde_derive 1.0.229, serde_json 1.0.151, serde_path_to_error 0.1.20, serde_repr 0.1.21, simd_cesu8 1.2.0, syn 2.0.119, syn 3.0.3, system-deps 7.0.8, thiserror 1.0.69, thiserror 2.0.20, thiserror-impl 1.0.69, thiserror-impl 2.0.20, unicode-ident 1.0.24, utf8-zero 0.8.1, wasi 0.11.1+wasi-snapshot-preview1, wasip2 1.0.4+wasi-0.2.12, wit-bindgen 0.57.1, zmij 1.0.23, zvariant_utils 4.0.0 ---------------------------------------------------------------------------- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -907,7 +898,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: aead 0.5.2, aes 0.8.4, aes-gcm 0.10.3, base64ct 1.8.3, block-buffer 0.10.4, block-padding 0.3.3, cbc 0.1.2, chacha20 0.9.1, chacha20poly1305 0.10.1, cipher 0.4.4, const-oid 0.9.6, cpufeatures 0.2.17, crypto-common 0.1.7, ctr 0.9.2, der 0.7.10, digest 0.10.7, ghash 0.5.1, hkdf 0.12.4, hmac 0.12.1, inout 0.1.4, opaque-debug 0.3.1, pem-rfc7468 0.7.0, pkcs1 0.7.5, pkcs8 0.10.2, poly1305 0.8.0, polyval 0.6.2, sha2 0.10.9, signature 2.2.0, spake2 0.4.0, spki 0.7.3, universal-hash 0.5.1 +The following license (LICENSE-APACHE) applies to: aead 0.5.2, aes 0.8.4, aes-gcm 0.10.3, base64ct 1.8.3, block-buffer 0.10.4, block-padding 0.3.3, cbc 0.1.2, chacha20 0.10.1, chacha20 0.9.1, chacha20poly1305 0.10.1, cipher 0.4.4, const-oid 0.9.6, cpufeatures 0.2.17, cpufeatures 0.3.0, crypto-common 0.1.7, ctr 0.9.2, der 0.7.10, digest 0.10.7, ghash 0.5.1, hkdf 0.12.4, hmac 0.12.1, inout 0.1.4, opaque-debug 0.3.1, pem-rfc7468 0.7.0, pkcs1 0.7.5, pkcs8 0.10.2, poly1305 0.8.0, polyval 0.6.2, sha2 0.10.9, signature 2.2.0, spake2 0.4.0, spki 0.7.3, universal-hash 0.5.1 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -1204,7 +1195,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (COPYING) applies to: aho-corasick 1.1.4, byteorder 1.5.0, jiff 0.2.35, jiff-core 0.1.0, jiff-static 0.2.35, memchr 2.8.2, same-file 1.0.6, walkdir 2.5.0, winapi-util 0.1.11 +The following license (COPYING) applies to: aho-corasick 1.1.5, byteorder 1.5.0, jiff 0.2.35, jiff-core 0.1.0, jiff-static 0.2.35, memchr 2.8.3, same-file 1.0.6, walkdir 2.5.0, winapi-util 0.1.11 ---------------------------------------------------------------------------- This project is dual-licensed under the Unlicense and MIT licenses. @@ -1212,7 +1203,7 @@ You may use this code under the terms of either license. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: aho-corasick 1.1.4, byteorder 1.5.0, byteorder-lite 0.1.0, jiff 0.2.35, jiff-core 0.1.0, jiff-static 0.2.35, memchr 2.8.2, walkdir 2.5.0 +The following license (LICENSE-MIT) applies to: aho-corasick 1.1.5, byteorder 1.5.0, byteorder-lite 0.1.0, jiff 0.2.35, jiff-core 0.1.0, jiff-static 0.2.35, memchr 2.8.3, walkdir 2.5.0 ---------------------------------------------------------------------------- The MIT License (MIT) @@ -1238,7 +1229,7 @@ THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (UNLICENSE) applies to: aho-corasick 1.1.4, byteorder 1.5.0, byteorder-lite 0.1.0, jiff 0.2.35, jiff-core 0.1.0, jiff-static 0.2.35, ksni 0.3.5, memchr 2.8.2, same-file 1.0.6, walkdir 2.5.0, winapi-util 0.1.11 +The following license (UNLICENSE) applies to: aho-corasick 1.1.5, byteorder 1.5.0, byteorder-lite 0.1.0, jiff 0.2.35, jiff-core 0.1.0, jiff-static 0.2.35, ksni 0.3.6, memchr 2.8.3, same-file 1.0.6, walkdir 2.5.0, winapi-util 0.1.11 ---------------------------------------------------------------------------- This is free and unencumbered software released into the public domain. @@ -1727,7 +1718,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: annotate-snippets 0.11.5, anstream 1.0.0, anstyle 1.0.14, anstyle-parse 1.0.0, anstyle-query 1.1.5, anstyle-wincon 3.0.11, clap 4.6.1, clap_builder 4.6.0, clap_lex 1.1.0, colorchoice 1.0.5, crc32fast 1.5.0, env_filter 0.1.4, env_filter 2.0.0, env_logger 0.11.11, fallible-iterator 0.3.0, fallible-streaming-iterator 0.1.9, hex 0.4.3, is_terminal_polyfill 1.70.2, jni-sys 0.3.1, jni-sys 0.4.1, once_cell_polyfill 1.70.2, quick-error 1.2.3, serde_spanned 0.6.9, serde_spanned 1.1.1, toml 0.8.23, toml 0.9.12+spec-1.1.0, toml 1.1.2+spec-1.1.0, toml_datetime 0.6.11, toml_datetime 0.7.5+spec-1.1.0, toml_datetime 1.1.1+spec-1.1.0, toml_edit 0.22.27, toml_edit 0.25.12+spec-1.1.0, toml_parser 1.1.2+spec-1.1.0, toml_write 0.1.2, toml_writer 1.1.1+spec-1.1.0, winapi 0.3.9 +The following license (LICENSE-APACHE) applies to: annotate-snippets 0.11.5, anstream 1.0.0, anstyle 1.0.14, anstyle-parse 1.0.0, anstyle-query 1.1.5, anstyle-wincon 3.0.11, clap 4.6.6, clap_builder 4.6.6, clap_lex 1.1.0, colorchoice 1.0.5, crc32fast 1.5.0, env_filter 0.1.4, env_filter 2.0.0, env_logger 0.11.11, fallible-iterator 0.3.0, fallible-streaming-iterator 0.1.9, hex 0.4.3, is_terminal_polyfill 1.70.2, jni-sys 0.3.1, jni-sys 0.4.1, once_cell_polyfill 1.70.2, quick-error 1.2.3, serde_spanned 0.6.9, serde_spanned 1.1.1, toml 0.8.23, toml 0.9.12+spec-1.1.0, toml 1.1.4+spec-1.1.0, toml_datetime 0.6.11, toml_datetime 0.7.5+spec-1.1.0, toml_datetime 1.1.1+spec-1.1.0, toml_edit 0.22.27, toml_edit 0.25.13+spec-1.1.0, toml_parser 1.1.3+spec-1.1.0, toml_write 0.1.2, toml_writer 1.1.2+spec-1.1.0, winapi 0.3.9 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -1933,7 +1924,7 @@ Apache License ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: annotate-snippets 0.11.5, anstream 1.0.0, anstyle 1.0.14, anstyle-parse 1.0.0, anstyle-query 1.1.5, anstyle-wincon 3.0.11, clap 4.6.1, clap_builder 4.6.0, clap_lex 1.1.0, colorchoice 1.0.5, env_filter 0.1.4, env_filter 2.0.0, env_logger 0.11.11, is_terminal_polyfill 1.70.2, once_cell_polyfill 1.70.2, serde_spanned 0.6.9, serde_spanned 1.1.1, toml 0.8.23, toml 0.9.12+spec-1.1.0, toml 1.1.2+spec-1.1.0, toml_datetime 0.6.11, toml_datetime 0.7.5+spec-1.1.0, toml_datetime 1.1.1+spec-1.1.0, toml_edit 0.22.27, toml_edit 0.25.12+spec-1.1.0, toml_parser 1.1.2+spec-1.1.0, toml_write 0.1.2, toml_writer 1.1.1+spec-1.1.0 +The following license (LICENSE-MIT) applies to: annotate-snippets 0.11.5, anstream 1.0.0, anstyle 1.0.14, anstyle-parse 1.0.0, anstyle-query 1.1.5, anstyle-wincon 3.0.11, clap 4.6.6, clap_builder 4.6.6, clap_lex 1.1.0, colorchoice 1.0.5, env_filter 0.1.4, env_filter 2.0.0, env_logger 0.11.11, is_terminal_polyfill 1.70.2, once_cell_polyfill 1.70.2, serde_spanned 0.6.9, serde_spanned 1.1.1, toml 0.8.23, toml 0.9.12+spec-1.1.0, toml 1.1.4+spec-1.1.0, toml_datetime 0.6.11, toml_datetime 0.7.5+spec-1.1.0, toml_datetime 1.1.1+spec-1.1.0, toml_edit 0.22.27, toml_edit 0.25.13+spec-1.1.0, toml_parser 1.1.3+spec-1.1.0, toml_write 0.1.2, toml_writer 1.1.2+spec-1.1.0 ---------------------------------------------------------------------------- Copyright (c) Individual contributors @@ -1957,7 +1948,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: anyhow 1.0.103, async-trait 0.1.89, cudarc 0.16.6, fastbloom 0.14.1, itoa 1.0.18, libc 0.2.186, num_enum 0.7.6, num_enum_derive 0.7.6, paste 1.0.15, pastey 0.2.3, prettyplease 0.2.37, proc-macro2 1.0.106, quote 1.0.46, relm4 0.11.0, relm4-css 0.11.0, relm4-macros 0.11.0, rustc-hash 2.1.2, rustversion 1.0.22, ryu 1.0.23, semver 1.0.28, serde 1.0.228, serde_core 1.0.228, serde_derive 1.0.228, serde_json 1.0.150, serde_path_to_error 0.1.20, serde_repr 0.1.20, serde_urlencoded 0.7.1, syn 2.0.118, thiserror 1.0.69, thiserror 2.0.18, thiserror-impl 1.0.69, thiserror-impl 2.0.18, unicode-ident 1.0.24, utf8parse 0.2.2 +The following license (LICENSE-APACHE) applies to: anyhow 1.0.104, async-trait 0.1.92, cudarc 0.16.6, fastbloom 0.17.0, itoa 1.0.18, libc 0.2.189, num_enum 0.7.6, num_enum_derive 0.7.6, paste 1.0.15, pastey 0.2.3, prettyplease 0.2.37, proc-macro2 1.0.107, quote 1.0.47, relm4 0.11.0, relm4-css 0.11.0, relm4-macros 0.11.0, rustc-hash 2.1.3, rustversion 1.0.23, ryu 1.0.23, semver 1.0.28, serde 1.0.229, serde_core 1.0.229, serde_derive 1.0.229, serde_json 1.0.151, serde_path_to_error 0.1.20, serde_repr 0.1.21, serde_urlencoded 0.7.1, syn 2.0.119, syn 3.0.3, thiserror 1.0.69, thiserror 2.0.20, thiserror-impl 1.0.69, thiserror-impl 2.0.20, unicode-ident 1.0.24, utf8-zero 0.8.1, utf8parse 0.2.2 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -2240,7 +2231,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: ashpd 0.13.12 +The following license (LICENSE) applies to: ashpd 0.13.13 ---------------------------------------------------------------------------- MIT License @@ -2266,7 +2257,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: asn1-rs 0.6.2, asn1-rs-derive 0.5.1, assert_matches 1.5.0, async-channel 2.5.0, async-executor 1.14.0, async-io 2.6.0, async-lock 3.4.2, async-process 2.5.0, async-recursion 1.1.1, async-signal 0.2.14, async-task 4.7.1, atomic-waker 1.1.2, autocfg 1.5.1, base64 0.22.1, bitflags 1.3.2, bitflags 2.13.0, blocking 1.6.2, bumpalo 3.20.3, cast 0.3.0, cc 1.4.1, cexpr 0.6.0, cfg-if 1.0.4, cmake 0.1.58, concurrent-queue 2.5.0, core-foundation 0.10.1, core-foundation-sys 0.8.7, criterion 0.5.1, criterion-plot 0.5.0, crossbeam-deque 0.8.6, crossbeam-epoch 0.9.20, crossbeam-utils 0.8.21, curve25519-dalek-derive 0.1.1, der-parser 9.0.0, displaydoc 0.2.6, either 1.16.0, equivalent 1.0.2, errno 0.3.14, event-listener 5.4.1, event-listener-strategy 0.5.4, fastrand 2.4.1, filetime 0.2.29, find-msvc-tools 0.1.10, fixedbitset 0.5.7, flate2 1.1.9, fnv 1.0.7, form_urlencoded 1.2.2, fs-err 3.3.0, futures-lite 2.6.1, gethostname 1.1.0, gif 0.14.2, glob 0.3.3, hashbrown 0.16.1, hashbrown 0.17.1, heck 0.5.0, hermit-abi 0.5.2, httparse 1.10.1, idna 1.1.0, idna_adapter 1.2.2, indexmap 2.14.0, itertools 0.10.5, itertools 0.13.0, jni 0.21.1, jobserver 0.1.34, js-sys 0.3.103, khronos-egl 6.0.0, lazy_static 1.5.0, linux-raw-sys 0.12.1, lock_api 0.4.14, log 0.4.33, mime 0.3.17, nasm-rs 0.3.2, num-bigint 0.4.6, num-bigint-dig 0.8.6, num-derive 0.4.2, num-integer 0.1.46, num-iter 0.1.45, num-traits 0.2.19, num_cpus 1.17.0, oid-registry 0.7.1, once_cell 1.21.4, openssl-probe 0.2.1, opus 0.3.1, ordered-stream 0.2.0, parking 2.2.1, parking_lot 0.12.5, parking_lot_core 0.9.12, percent-encoding 2.3.2, piper 0.2.5, pkg-config 0.3.33, png 0.18.1, polling 3.11.0, proptest 1.11.0, rayon 1.12.0, rayon-core 1.13.0, regex 1.12.4, regex-automata 0.4.14, regex-syntax 0.8.11, roxmltree 0.21.1, rsa 0.9.10, rustc_version 0.4.1, rusticata-macros 4.1.0, rustix 1.1.4, rustls 0.23.41, rustls-native-certs 0.8.4, rusty-fork 0.3.1, scopeguard 1.2.0, security-framework 3.7.0, security-framework-sys 2.17.0, signal-hook-registry 1.4.8, smallvec 1.15.2, socket2 0.6.4, stable_deref_trait 1.2.1, system-deps 7.0.8, tar 0.4.46, tempfile 3.27.0, thread_local 1.1.9, tinytemplate 1.2.1, unicode-segmentation 1.13.3, unicode-width 0.2.2, url 2.5.8, uuid 1.23.4, vcpkg 0.2.15, version_check 0.9.5, wait-timeout 0.2.1, wasi 0.11.1+wasi-snapshot-preview1, wasip2 1.0.4+wasi-0.2.12, wasm-bindgen 0.2.126, wasm-bindgen-macro 0.2.126, wasm-bindgen-macro-support 0.2.126, wasm-bindgen-shared 0.2.126, weezl 0.1.12, wit-bindgen 0.57.1, x509-parser 0.16.0, xattr 1.6.1 +The following license (LICENSE-APACHE) applies to: asn1-rs 0.6.2, asn1-rs-derive 0.5.1, assert_matches 1.5.0, async-channel 2.5.0, async-executor 1.14.0, async-io 2.6.0, async-lock 3.4.2, async-process 2.5.0, async-recursion 1.1.1, async-signal 0.2.14, async-task 4.7.1, atomic-waker 1.1.2, autocfg 1.5.1, base64 0.22.1, base64 0.23.1, bitflags 1.3.2, bitflags 2.13.1, blocking 1.6.2, bumpalo 3.20.3, cast 0.3.0, cc 1.4.2, cexpr 0.6.0, cfg-if 1.0.4, cmake 0.1.58, concurrent-queue 2.5.0, core-foundation 0.10.1, core-foundation-sys 0.8.7, criterion 0.5.1, criterion-plot 0.5.0, crossbeam-deque 0.8.7, crossbeam-epoch 0.9.20, crossbeam-utils 0.8.22, curve25519-dalek-derive 0.1.1, der-parser 9.0.0, displaydoc 0.2.7, either 1.17.0, equivalent 1.0.2, errno 0.3.14, event-listener 5.4.2, event-listener-strategy 0.5.4, fastrand 2.5.0, filetime 0.2.29, find-msvc-tools 0.1.10, fixedbitset 0.5.7, flate2 1.1.9, fnv 1.0.7, form_urlencoded 1.2.2, fs-err 3.3.1, futures-lite 2.6.1, gethostname 1.1.0, gif 0.14.2, glob 0.3.4, hashbrown 0.16.1, hashbrown 0.17.1, heck 0.5.0, hermit-abi 0.5.2, httparse 1.10.1, indexmap 2.14.0, itertools 0.10.5, itertools 0.13.0, jni 0.21.1, jobserver 0.1.35, js-sys 0.3.104, khronos-egl 6.0.0, lazy_static 1.5.0, linux-raw-sys 0.12.1, lock_api 0.4.14, log 0.4.33, mime 0.3.17, nasm-rs 0.3.2, num-bigint 0.4.8, num-bigint-dig 0.8.6, num-derive 0.4.2, num-integer 0.1.47, num-iter 0.1.46, num-traits 0.2.19, num_cpus 1.17.0, oid-registry 0.7.1, once_cell 1.21.4, openssl-probe 0.2.1, opus 0.3.1, ordered-stream 0.2.0, parking 2.2.1, parking_lot 0.12.5, parking_lot_core 0.9.12, percent-encoding 2.3.2, piper 0.2.5, pkg-config 0.3.33, png 0.18.1, polling 3.11.0, proptest 1.11.0, rayon 1.12.0, rayon-core 1.13.0, regex 1.13.1, regex-automata 0.4.18, regex-syntax 0.8.11, roxmltree 0.21.1, rsa 0.9.10, rustc_version 0.4.1, rusticata-macros 4.1.0, rustix 1.1.4, rustls 0.23.43, rustls-native-certs 0.8.4, rusty-fork 0.3.1, scopeguard 1.2.0, security-framework 3.7.0, security-framework-sys 2.17.0, signal-hook-registry 1.4.8, simd_cesu8 1.2.0, smallvec 1.15.2, socket2 0.6.5, system-deps 7.0.8, tar 0.4.46, tempfile 3.27.0, thread_local 1.1.10, tinytemplate 1.2.1, unicode-segmentation 1.13.3, unicode-width 0.2.2, uuid 1.24.0, vcpkg 0.2.15, version_check 0.9.5, wait-timeout 0.2.1, wasi 0.11.1+wasi-snapshot-preview1, wasip2 1.0.4+wasi-0.2.12, wasm-bindgen 0.2.127, wasm-bindgen-macro 0.2.127, wasm-bindgen-macro-support 0.2.127, wasm-bindgen-shared 0.2.127, weezl 0.1.12, wit-bindgen 0.57.1, x509-parser 0.16.0, xattr 1.6.1 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -2803,7 +2794,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: atomig 0.4.3, bit-set 0.8.0, bit-vec 0.8.0, cfg-expr 0.20.8, defmt 1.1.1, defmt-macros 1.1.1, downcast-rs 1.2.1, hashlink 0.12.0, minimal-lexical 0.2.1 +The following license (LICENSE-APACHE) applies to: atomig 0.4.3, bit-set 0.8.0, bit-vec 0.8.0, cfg-expr 0.20.8, defmt 1.1.1, defmt-macros 1.1.1, downcast-rs 1.2.1, hashlink 0.12.1, minimal-lexical 0.2.1 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -3088,6 +3079,534 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------------------------------- +The following license (LICENSE) applies to: aws-lc-rs 1.18.0 +---------------------------------------------------------------------------- +SPDX-License-Identifier: ISC AND (Apache-2.0 OR ISC) + + +Apache 2.0 license +------------------------------------- + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + +ISC license +------------------------------------- + + +Copyright Amazon.com, Inc. or its affiliates. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + +---------------------------------------------------------------------------- +The following license (LICENSE) applies to: aws-lc-sys 0.44.0 +---------------------------------------------------------------------------- +AWS Libcrypto (AWS-LC) + +AWS-LC is a fork of BoringSSL, which is itself a fork of OpenSSL. +Content from these and other sources retains their original licensing, +as described below. New files from AWS-LC are made available under the Apache-2.0 license OR the ISC +license. These licenses are reproduced at the bottom of this file. + +``` +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 OR ISC +``` + + +================================================================================ +BoringSSL +================================================================================ + +BoringSSL is a Google-maintained fork of OpenSSL. Historically, code +authored by Google for BoringSSL was licensed under the ISC License. +BoringSSL has since relicensed upstream to Apache License 2.0. Existing +AWS-LC code originating from BoringSSL retains its ISC license, while +newer code taken from BoringSSL is licensed under Apache License 2.0. + +``` +Copyright (c) 2014-2024 Google Inc. +SPDX-License-Identifier: ISC +``` + +Additional individual contributions to BoringSSL-derived code are +covered under the ISC license: + + - Brian Smith (Copyright 2016) + - Robert Nagy (Copyright 2022) + - Arm Ltd (Copyright 2020) + +``` +Copyright (c) 2025-2026 Google Inc. +SPDX-License-Identifier: Apache-2.0 +``` + +================================================================================ +OpenSSL +================================================================================ + +Code derived from the OpenSSL project is licensed under the +Apache License, Version 2.0. + +``` +Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. +SPDX-License-Identifier: Apache-2.0 +``` + +Some OpenSSL-derived files also carry the original SSLeay copyright: + +``` +Copyright (c) 1995-1998 Eric Young (eay@cryptsoft.com). All rights reserved. +SPDX-License-Identifier: Apache-2.0 +``` + +Portions of OpenSSL-derived code include contributions from: + + - Sun Microsystems, Inc. (Copyright 2002) + - Nokia (Copyright 2005) + - Intel Corporation (Copyright 2012-2021) + +These contributions are covered under the Apache-2.0 license. + +================================================================================ +mlkem-native +================================================================================ + +Code from the mlkem-native project is licensed under Apache License 2.0 or MIT or ISC. + +``` +Copyright (c) The mlkem-native project authors. +SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT +``` + +================================================================================ +mldsa-native +================================================================================ + +Code from the mldsa-native project is licensed under Apache License 2.0 or MIT or ISC + +``` +Copyright (c) The mldsa-native project authors. +SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT +``` + +================================================================================ +Third-Party Libraries (compiled into libcrypto/libssl) +================================================================================ + +Fiat Cryptography +----------------- +Synthesizing Correct-by-Construction Code for Cryptographic Primitives. +See third_party/fiat/LICENSE. + +``` +Copyright (c) 2015-2020 the fiat-crypto authors. +SPDX-License-Identifier: MIT +``` + +s2n-bignum +---------- +Integer arithmetic routines for cryptography. +See third_party/s2n-bignum/s2n-bignum-imported/LICENSE. + +``` +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT-0 +``` + +Note: ML-KEM/SHA3 code within s2n-bignum is licensed as +Apache-2.0 OR ISC OR MIT (with attribution), sourced from the +mlkem-native project. + +Jitter Entropy RNG +------------------- +CPU Jitter Random Number Generator Library. +See third_party/jitterentropy/jitterentropy-library/LICENSE. + +The Jitter Entropy library is dual-licensed under a BSD-style license +and the GNU General Public License Version 2. Amazon expressly elects +to distribute the package under the 3-Clause BSD License and NOT under +GNU General Public License Version 2. + +``` +Copyright (C) 2017 - 2025, Stephan Mueller . +SPDX-License-Identifier: BSD-3-Clause +``` + +Keccak / AES Reference Implementations +--------------------------------------- +Public domain (CC0) contributions. +https://creativecommons.org/public-domain/cc0 + +Code from sources and by authors listed in comments on top of the respective files. + + +================================================================================ +Third-Party Libraries (NOT compiled into libcrypto/libssl) +================================================================================ + +The following are used for testing and build tooling only. Distributing +code linked against AWS-LC (libcrypto/libssl) does NOT trigger these +license obligations. + +Google Test +----------- +See third_party/googletest/LICENSE. + +``` +Copyright 2008 Google Inc. +SPDX-License-Identifier: BSD-3-Clause +``` + +Go Standard Library +------------------- +Code in ssl/test/runner/ is derived from the Go standard library. + +``` +Copyright (c) The Go Authors. All rights reserved. +SPDX-License-Identifier: BSD-3-Clause +``` + +Wycheproof Test Vectors +------------------------ +Project Wycheproof is a community managed repository of test vectors that can be used by cryptography library +developers to test against known attacks, specification inconsistencies, and other various implementation bugs. + +See third_party/wycheproof_testvectors/LICENSE. + +``` +SPDX-License-Identifier: Apache-2.0 +``` + + +================================================================================ +Full License Texts +================================================================================ + +Apache License 2.0 +------------------ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + + "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +ISC License +----------- +Permission to use, copy, modify, and/or distribute this software for +any purpose with or without fee is hereby granted, provided that the +above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE +AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +MIT License +----------- +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +BSD 3-Clause License +-------------------- +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +MIT No Attribution (MIT-0) +-------------------------- +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + ---------------------------------------------------------------------------- The following license (LICENSE) applies to: axum 0.8.9 ---------------------------------------------------------------------------- @@ -3200,6 +3719,32 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------------------------------- +The following license (LICENSE-MIT) applies to: base64 0.23.1 +---------------------------------------------------------------------------- +The MIT License (MIT) + +Copyright (c) 2025 Alice Maz, Marshall Pierce + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + ---------------------------------------------------------------------------- The following license (LICENSE-MIT) applies to: base64ct 1.8.3 ---------------------------------------------------------------------------- @@ -3315,7 +3860,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: bitflags 1.3.2, bitflags 2.13.0, glob 0.3.3, log 0.4.33, num-bigint 0.4.6, num-bigint-dig 0.8.6, num-derive 0.4.2, num-integer 0.1.46, num-iter 0.1.45, num-traits 0.2.19, regex 1.12.4, regex-automata 0.4.14, regex-syntax 0.8.11 +The following license (LICENSE-MIT) applies to: bitflags 1.3.2, bitflags 2.13.1, glob 0.3.4, log 0.4.33, num-bigint 0.4.8, num-bigint-dig 0.8.6, num-derive 0.4.2, num-integer 0.1.47, num-iter 0.1.46, num-traits 0.2.19, regex 1.13.1, regex-automata 0.4.18, regex-syntax 0.8.11 ---------------------------------------------------------------------------- Copyright (c) 2014 The Rust Project Developers @@ -3405,7 +3950,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: bytemuck 1.25.0, bytemuck_derive 1.10.2, safe_arch 0.7.4 +The following license (LICENSE-APACHE) applies to: bytemuck 1.25.2, bytemuck_derive 1.12.0, safe_arch 1.1.0 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -3471,7 +4016,7 @@ limitations under the License. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: bytemuck 1.25.0, bytemuck_derive 1.10.2 +The following license (LICENSE-MIT) applies to: bytemuck 1.25.2, bytemuck_derive 1.12.0 ---------------------------------------------------------------------------- MIT License @@ -3485,7 +4030,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ---------------------------------------------------------------------------- -The following license (LICENSE-ZLIB) applies to: bytemuck 1.25.0, bytemuck_derive 1.10.2, tinyvec 1.11.0 +The following license (LICENSE-ZLIB) applies to: bytemuck 1.25.2, bytemuck_derive 1.12.0, tinyvec 1.12.0 ---------------------------------------------------------------------------- Copyright (c) 2019 Daniel "Lokathor" Gee. @@ -3501,7 +4046,7 @@ Permission is granted to anyone to use this software for any purpose, including ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: bytes 1.12.0 +The following license (LICENSE) applies to: bytes 1.12.1 ---------------------------------------------------------------------------- Copyright (c) 2018 Carl Lerche @@ -3531,7 +4076,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (COPYRIGHT) applies to: cairo-rs 0.22.0, gdk-pixbuf 0.22.0, gdk4 0.11.2, gio 0.22.6, glib 0.22.7, glib-build-tools 0.22.8, glib-macros 0.22.6, graphene-rs 0.22.0, gsk4 0.11.1, gtk4 0.11.3, gtk4-macros 0.11.0, pango 0.22.6 +The following license (COPYRIGHT) applies to: cairo-rs 0.22.0, gdk-pixbuf 0.22.0, gdk4 0.11.4, gio 0.22.8, glib 0.22.8, glib-build-tools 0.22.8, glib-macros 0.22.6, graphene-rs 0.22.8, gsk4 0.11.4, gtk4 0.11.4, gtk4-macros 0.11.4, pango 0.22.8 ---------------------------------------------------------------------------- The gtk-rs Project is licensed under the MIT license, see the LICENSE file or . @@ -3550,7 +4095,7 @@ library. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: cairo-rs 0.22.0, cairo-sys-rs 0.22.0, gdk-pixbuf 0.22.0, gdk-pixbuf-sys 0.22.0, gdk4 0.11.2, gdk4-sys 0.11.2, gio 0.22.6, gio-sys 0.22.0, glib 0.22.7, glib-build-tools 0.22.8, glib-macros 0.22.6, glib-sys 0.22.6, gobject-sys 0.22.6, graphene-rs 0.22.0, graphene-sys 0.22.0, gsk4 0.11.1, gsk4-sys 0.11.1, gtk4 0.11.3, gtk4-macros 0.11.0, gtk4-sys 0.11.3, libadwaita 0.9.1, libadwaita-sys 0.9.1, pango 0.22.6, pango-sys 0.22.0 +The following license (LICENSE) applies to: cairo-rs 0.22.0, cairo-sys-rs 0.22.0, gdk-pixbuf 0.22.0, gdk-pixbuf-sys 0.22.0, gdk4 0.11.4, gdk4-sys 0.11.4, gio 0.22.8, gio-sys 0.22.8, glib 0.22.8, glib-build-tools 0.22.8, glib-macros 0.22.6, glib-sys 0.22.8, gobject-sys 0.22.6, graphene-rs 0.22.8, graphene-sys 0.22.8, gsk4 0.11.4, gsk4-sys 0.11.4, gtk4 0.11.4, gtk4-macros 0.11.4, gtk4-sys 0.11.4, libadwaita 0.9.2, libadwaita-sys 0.9.2, pango 0.22.8, pango-sys 0.22.0 ---------------------------------------------------------------------------- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -4011,7 +4556,7 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: cc 1.4.1, cfg-if 1.0.4, cmake 0.1.58, filetime 0.2.29, find-msvc-tools 0.1.10, jobserver 0.1.34, js-sys 0.3.103, openssl-probe 0.2.1, pkg-config 0.3.33, socket2 0.6.4, wait-timeout 0.2.1, wasm-bindgen 0.2.126, wasm-bindgen-macro 0.2.126, wasm-bindgen-macro-support 0.2.126, wasm-bindgen-shared 0.2.126 +The following license (LICENSE-MIT) applies to: cc 1.4.2, cfg-if 1.0.4, cmake 0.1.58, filetime 0.2.29, find-msvc-tools 0.1.10, jobserver 0.1.35, js-sys 0.3.104, openssl-probe 0.2.1, pkg-config 0.3.33, socket2 0.6.5, wait-timeout 0.2.1, wasm-bindgen 0.2.127, wasm-bindgen-macro 0.2.127, wasm-bindgen-macro-support 0.2.127, wasm-bindgen-shared 0.2.127 ---------------------------------------------------------------------------- Copyright (c) 2014 Alex Crichton @@ -4528,7 +5073,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: cfg_aliases 0.2.1 +The following license (LICENSE) applies to: cfg_aliases 0.2.2 ---------------------------------------------------------------------------- MIT License @@ -4542,7 +5087,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ---------------------------------------------------------------------------- -The following license (NOTICES.md) applies to: cfg_aliases 0.2.1 +The following license (NOTICES.md) applies to: cfg_aliases 0.2.2 ---------------------------------------------------------------------------- # 3rd Party Notices @@ -4572,6 +5117,36 @@ The `cfg_aliases!` macro uses a lot of the code from [`tectonic_cfg_support::tar --- +---------------------------------------------------------------------------- +The following license (LICENSE-MIT) applies to: chacha20 0.10.1 +---------------------------------------------------------------------------- +Copyright (c) 2019-2026 The RustCrypto Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ---------------------------------------------------------------------------- The following license (LICENSE-MIT) applies to: chacha20 0.9.1 ---------------------------------------------------------------------------- @@ -4603,7 +5178,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: ciborium 0.2.2, ciborium-io 0.2.2, ciborium-ll 0.2.2, clang-sys 1.8.1, flume 0.12.0, fragile 2.1.0, lru-slab 0.1.2, quinn 0.11.11, quinn-proto 0.11.15, quinn-udp 0.5.14, rpkg-config 0.1.2, rustls-platform-verifier 0.6.2, tinyvec 1.11.0, unarray 0.1.4, ureq 2.12.1, utf8_iter 1.0.4, utoipa 5.5.0, utoipa-axum 0.2.0, utoipa-gen 5.5.0, utoipa-scalar 0.3.0, x11rb 0.13.2, x11rb-protocol 0.13.2, zeroize 1.9.0, zune-core 0.5.1, zune-jpeg 0.5.15 +The following license (LICENSE) applies to: ciborium 0.2.2, ciborium-io 0.2.2, ciborium-ll 0.2.2, clang-sys 1.9.1, flume 0.12.0, fragile 2.1.0, lru-slab 0.1.2, quinn 0.11.11, quinn-proto 0.11.16, quinn-udp 0.5.15, rpkg-config 0.1.2, rustls-platform-verifier 0.7.0, tinyvec 1.12.0, unarray 0.1.4, ureq 3.4.0, ureq-proto 0.6.1, utoipa 5.5.0, utoipa-axum 0.2.0, utoipa-gen 5.5.0, utoipa-scalar 0.3.0, x11rb 0.13.2, x11rb-protocol 0.13.2, zeroize 1.9.0, zune-core 0.5.3, zune-jpeg 0.5.15 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -4977,7 +5552,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: cpufeatures 0.2.17 +The following license (LICENSE-MIT) applies to: cpufeatures 0.2.17, cpufeatures 0.3.0 ---------------------------------------------------------------------------- Copyright (c) 2020-2025 The RustCrypto Project Developers @@ -5063,7 +5638,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: crossbeam-deque 0.8.6, crossbeam-epoch 0.9.20, crossbeam-utils 0.8.21 +The following license (LICENSE-MIT) applies to: crossbeam-deque 0.8.7, crossbeam-epoch 0.9.20, crossbeam-utils 0.8.22 ---------------------------------------------------------------------------- The MIT License (MIT) @@ -5221,7 +5796,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: data-encoding 2.11.0 +The following license (LICENSE) applies to: data-encoding 2.11.1 ---------------------------------------------------------------------------- The MIT License (MIT) @@ -5598,7 +6173,133 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: either 1.16.0, itertools 0.10.5, itertools 0.13.0 +The following license (LICENSE) applies to: dunce 1.0.5, to_method 1.1.0 +---------------------------------------------------------------------------- +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. + + +---------------------------------------------------------------------------- +The following license (LICENSE-MIT) applies to: either 1.17.0, itertools 0.10.5, itertools 0.13.0 ---------------------------------------------------------------------------- Copyright (c) 2015 @@ -5942,7 +6643,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: fastbloom 0.14.1 +The following license (LICENSE-MIT) applies to: fastbloom 0.17.0 ---------------------------------------------------------------------------- Copyright (c) 2023 Thomas Pendock @@ -5972,7 +6673,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: fdeflate 0.3.7, field-offset 0.3.6, half 2.7.1, image 0.25.10, miniz_oxide 0.8.9, num-conv 0.2.2, pin-project-lite 0.2.17, portable-atomic 1.14.0, portable-atomic-util 0.2.7, raw-window-handle 0.6.2, sync_wrapper 1.0.2, time 0.3.51, time-core 0.1.9, time-macros 0.2.30, widestring 1.2.1 +The following license (LICENSE-APACHE) applies to: fdeflate 0.3.7, field-offset 0.3.6, half 2.7.1, image 0.25.10, miniz_oxide 0.8.9, num-conv 0.2.2, pin-project-lite 0.2.17, portable-atomic 1.15.0, portable-atomic-util 0.2.7, raw-window-handle 0.6.2, simdutf8 0.1.5, sync_wrapper 1.0.2, time 0.3.55, time-core 0.1.9, time-macros 0.2.32, widestring 1.2.1 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -6424,6 +7125,28 @@ the following restrictions: 3. This notice may not be removed or altered from any source distribution. +---------------------------------------------------------------------------- +The following license (font-awesome-brands.txt) applies to: Font Awesome Free brand icons (vendored, assets/launcher-icons) +---------------------------------------------------------------------------- +Font Awesome Free — brand icons (steam, xbox in assets/launcher-icons/) are from +Font Awesome Free. + +Copyright (c) Fonticons, Inc. (https://fontawesome.com) + +Font Awesome Free icons are licensed under the Creative Commons Attribution 4.0 +International license (CC BY 4.0), https://creativecommons.org/licenses/by/4.0/. +The icons are redistributed here as monochrome SVG path data with no +modifications beyond color normalization (fill="currentColor"). + +Per the Font Awesome Free license (https://fontawesome.com/license/free): +"Font Awesome Free is free, open source, and GPL friendly. You can use it for +commercial projects, open source projects, or really almost whatever you want. +Attribution is required by MIT, SIL OFL, and CC BY licenses." + +Brand icons are trademarks of their respective owners and are used for +identification purposes only; their use does not imply endorsement. + + ---------------------------------------------------------------------------- The following license (font-awesome-brands.txt) applies to: Font Awesome Free brand icons (vendored, assets/os-icons) ---------------------------------------------------------------------------- @@ -6477,7 +7200,33 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: futures 0.3.32, futures-channel 0.3.32, futures-core 0.3.32, futures-executor 0.3.32, futures-io 0.3.32, futures-macro 0.3.32, futures-sink 0.3.32, futures-task 0.3.32, futures-util 0.3.32 +The following license (LICENSE) applies to: fs_extra 1.3.0 +---------------------------------------------------------------------------- +MIT License + +Copyright (c) 2017 Denis Kurilenko + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +---------------------------------------------------------------------------- +The following license (LICENSE-APACHE) applies to: futures 0.3.34, futures-channel 0.3.34, futures-core 0.3.34, futures-executor 0.3.34, futures-io 0.3.34, futures-macro 0.3.34, futures-sink 0.3.34, futures-task 0.3.34, futures-util 0.3.34 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -6684,7 +7433,7 @@ limitations under the License. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: futures 0.3.32, futures-channel 0.3.32, futures-core 0.3.32, futures-executor 0.3.32, futures-io 0.3.32, futures-macro 0.3.32, futures-sink 0.3.32, futures-task 0.3.32, futures-util 0.3.32 +The following license (LICENSE-MIT) applies to: futures 0.3.34, futures-channel 0.3.34, futures-core 0.3.34, futures-executor 0.3.34, futures-io 0.3.34, futures-macro 0.3.34, futures-sink 0.3.34, futures-task 0.3.34, futures-util 0.3.34 ---------------------------------------------------------------------------- Copyright (c) 2016 Alex Crichton Copyright (c) 2017 The Tokio Authors @@ -7151,7 +7900,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: half 2.7.1, widestring 1.2.1 +The following license (LICENSE-MIT) applies to: half 2.7.1, simdutf8 0.1.5, widestring 1.2.1 ---------------------------------------------------------------------------- MIT License @@ -7205,7 +7954,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: hashlink 0.12.0 +The following license (LICENSE-MIT) applies to: hashlink 0.12.1 ---------------------------------------------------------------------------- This work is derived in part from the `linked-hash-map` crate, Copyright (c) 2015 The Rust Project Developers @@ -7322,7 +8071,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: http 1.4.2 +The following license (LICENSE-APACHE) applies to: http 1.5.0 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -7528,7 +8277,7 @@ limitations under the License. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: http 1.4.2 +The following license (LICENSE-MIT) applies to: http 1.5.0 ---------------------------------------------------------------------------- Copyright (c) 2017 http-rs authors @@ -7558,39 +8307,9 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: http-body 1.0.1 +The following license (LICENSE) applies to: http-body 1.1.0, http-body-util 0.1.5 ---------------------------------------------------------------------------- -Copyright (c) 2019-2024 Sean McArthur & Hyper Contributors - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------------- -The following license (LICENSE) applies to: http-body-util 0.1.3 ----------------------------------------------------------------------------- -Copyright (c) 2019-2025 Sean McArthur & Hyper Contributors +Copyright (c) 2019-2026 Sean McArthur & Hyper Contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated @@ -7872,7 +8591,7 @@ THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: hyper 1.10.1 +The following license (LICENSE) applies to: hyper 1.11.0 ---------------------------------------------------------------------------- Copyright (c) 2014-2026 Sean McArthur @@ -7919,117 +8638,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----------------------------------------------------------------------------- -The following license (LICENSE) applies to: icu_collections 2.2.0, icu_locale_core 2.2.0, icu_normalizer 2.2.0, icu_normalizer_data 2.2.0, icu_properties 2.2.0, icu_properties_data 2.2.0, icu_provider 2.2.0, litemap 0.8.2, potential_utf 0.1.5, tinystr 0.8.3, writeable 0.6.3, yoke 0.8.3, yoke-derive 0.8.2, zerofrom 0.1.8, zerofrom-derive 0.1.7, zerotrie 0.2.4, zerovec 0.11.6, zerovec-derive 0.11.3 ----------------------------------------------------------------------------- -UNICODE LICENSE V3 - -COPYRIGHT AND PERMISSION NOTICE - -Copyright © 2020-2024 Unicode, Inc. - -NOTICE TO USER: Carefully read the following legal agreement. BY -DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR -SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE -TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT -DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of data files and any associated documentation (the "Data Files") or -software and any associated documentation (the "Software") to deal in the -Data Files or Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, and/or sell -copies of the Data Files or Software, and to permit persons to whom the -Data Files or Software are furnished to do so, provided that either (a) -this copyright and permission notice appear with all copies of the Data -Files or Software, or (b) this copyright and permission notice appear in -associated Documentation. - -THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY -KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF -THIRD PARTY RIGHTS. - -IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE -BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA -FILES OR SOFTWARE. - -Except as contained in this notice, the name of a copyright holder shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in these Data Files or Software without prior written -authorization of the copyright holder. - -SPDX-License-Identifier: Unicode-3.0 - -— - -Portions of ICU4X may have been adapted from ICU4C and/or ICU4J. -ICU 1.8.1 to ICU 57.1 © 1995-2016 International Business Machines Corporation and others. - - ----------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: idna 1.1.0, percent-encoding 2.3.2, url 2.5.8 ----------------------------------------------------------------------------- -Copyright (c) 2013-2025 The rust-url developers - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - ----------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: idna_adapter 1.2.2 ----------------------------------------------------------------------------- -Copyright (c) The rust-url developers - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - ---------------------------------------------------------------------------- The following license (LICENSE-BSD) applies to: if-addrs 0.13.4, if-addrs 0.15.0 ---------------------------------------------------------------------------- @@ -8230,7 +8838,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: libc 0.2.186 +The following license (LICENSE-MIT) applies to: libc 0.2.189 ---------------------------------------------------------------------------- Copyright (c) The Rust Project Developers @@ -8565,7 +9173,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: libsqlite3-sys 0.38.1, rusqlite 0.40.1 +The following license (LICENSE) applies to: libsqlite3-sys 0.38.2, rusqlite 0.40.2 ---------------------------------------------------------------------------- Copyright (c) 2014 The rusqlite developers @@ -8846,7 +9454,7 @@ Software. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: lock_api 0.4.14, nasm-rs 0.3.2, parking_lot 0.12.5, parking_lot_core 0.9.12, rustc_version 0.4.1, thread_local 1.1.9 +The following license (LICENSE-MIT) applies to: lock_api 0.4.14, nasm-rs 0.3.2, parking_lot 0.12.5, parking_lot_core 0.9.12, rustc_version 0.4.1, thread_local 1.1.10 ---------------------------------------------------------------------------- Copyright (c) 2016 The Rust Project Developers @@ -9214,7 +9822,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: mdns-sd 0.20.1 +The following license (LICENSE-APACHE) applies to: mdns-sd 0.20.3 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -9420,7 +10028,7 @@ limitations under the License. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: mdns-sd 0.20.1 +The following license (LICENSE-MIT) applies to: mdns-sd 0.20.3 ---------------------------------------------------------------------------- MIT License @@ -9851,7 +10459,7 @@ Permission is granted to anyone to use this software for any purpose, including ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: mio 1.2.1 +The following license (LICENSE) applies to: mio 1.2.2 ---------------------------------------------------------------------------- Copyright (c) 2014 Carl Lerche and other MIO contributors @@ -10407,6 +11015,36 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------------------------------- +The following license (LICENSE-MIT) applies to: percent-encoding 2.3.2 +---------------------------------------------------------------------------- +Copyright (c) 2013-2025 The rust-url developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ---------------------------------------------------------------------------- The following license (LICENSE-MIT) applies to: pkcs1 0.7.5, spki 0.7.3 ---------------------------------------------------------------------------- @@ -10437,6 +11075,40 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------------------------------- +The following license (playnite.txt) applies to: Playnite logo (vendored, assets/launcher-icons) +---------------------------------------------------------------------------- +Playnite — the `playnite` mark in assets/launcher-icons/ is the Playnite logo from the +Playnite source repository (media/playnite-logo-black.svg). + +Copyright (c) 2020 Josef Nemec (https://github.com/JosefNemec/Playnite) + +Licensed under the MIT License: + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in the + Software without restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, + and to permit persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Modifications: the colour was normalized to fill="currentColor"; the original viewBox +(0 0 1024 1024) and path geometry are unchanged. + +Brand icons are trademarks of their respective owners and are used for identification +purposes only; their use does not imply endorsement. + + ---------------------------------------------------------------------------- The following license (LICENSE-MIT) applies to: png 0.18.1 ---------------------------------------------------------------------------- @@ -11073,7 +11745,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT.md) applies to: quick-xml 0.39.4 +The following license (LICENSE-MIT.md) applies to: quick-xml 0.41.0 ---------------------------------------------------------------------------- The MIT License (MIT) @@ -11101,7 +11773,7 @@ THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: quinn 0.11.11, quinn-proto 0.11.15, quinn-udp 0.5.14 +The following license (LICENSE-MIT) applies to: quinn 0.11.11, quinn-proto 0.11.16, quinn-udp 0.5.15 ---------------------------------------------------------------------------- Copyright (c) 2018 The quinn Developers @@ -11113,7 +11785,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ---------------------------------------------------------------------------- -The following license (COPYRIGHT) applies to: rand 0.8.6, rand 0.9.4, rand_chacha 0.3.1, rand_chacha 0.9.0, rand_core 0.6.4, rand_core 0.9.5, rand_xorshift 0.4.0 +The following license (COPYRIGHT) applies to: rand 0.10.2, rand 0.8.7, rand 0.9.5, rand_chacha 0.3.1, rand_chacha 0.9.0, rand_core 0.6.4, rand_core 0.9.5, rand_pcg 0.10.2, rand_xorshift 0.4.0 ---------------------------------------------------------------------------- Copyrights in the Rand project are retained by their contributors. No copyright assignment is required to contribute to the Rand project. @@ -11130,7 +11802,7 @@ published under these same licenses. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: rand 0.8.6, rand 0.9.4, rand_chacha 0.9.0, rand_xorshift 0.4.0 +The following license (LICENSE-APACHE) applies to: rand 0.10.2, rand 0.8.7, rand 0.9.5, rand_chacha 0.9.0, rand_xorshift 0.4.0 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -11311,7 +11983,7 @@ END OF TERMS AND CONDITIONS ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: rand 0.8.6, rand 0.9.4, rand_chacha 0.3.1, rand_chacha 0.9.0, rand_core 0.6.4, rand_core 0.9.5, rand_xorshift 0.4.0 +The following license (LICENSE-MIT) applies to: rand 0.10.2, rand 0.8.7, rand 0.9.5, rand_chacha 0.3.1, rand_chacha 0.9.0, rand_core 0.6.4, rand_core 0.9.5, rand_xorshift 0.4.0 ---------------------------------------------------------------------------- Copyright 2018 Developers of the Rand project Copyright (c) 2014 The Rust Project Developers @@ -11342,7 +12014,21 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: rand_core 0.6.4, rand_core 0.9.5 +The following license (COPYRIGHT) applies to: rand_core 0.10.1 +---------------------------------------------------------------------------- +Copyrights in the Rand project are retained by their contributors. No +copyright assignment is required to contribute to the Rand project. + +For full authorship information, see the version control history. + +Except as otherwise noted (below and/or in individual files), Rand is +licensed under the Apache License, Version 2.0 or + or the MIT license + or , at your option. + + +---------------------------------------------------------------------------- +The following license (LICENSE-APACHE) applies to: rand_core 0.10.1, rand_core 0.6.4, rand_core 0.9.5, rand_pcg 0.10.2 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -11533,6 +12219,67 @@ APPENDIX: How to apply the Apache License to your work. identification within third-party archives. +---------------------------------------------------------------------------- +The following license (LICENSE-MIT) applies to: rand_core 0.10.1 +---------------------------------------------------------------------------- +Copyright (c) 2018-2026 The Rand Project Developers + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + +---------------------------------------------------------------------------- +The following license (LICENSE-MIT) applies to: rand_pcg 0.10.2 +---------------------------------------------------------------------------- +Copyright (c) 2014-2017 Melissa O'Neill and PCG Project contributors +Copyright 2018 Developers of the Rand project + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + ---------------------------------------------------------------------------- The following license (COPYING) applies to: rav1d 1.1.0 ---------------------------------------------------------------------------- @@ -12346,7 +13093,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-ZLIB.md) applies to: rpkg-config 0.1.2, sdl3-src 3.4.10 +The following license (LICENSE-ZLIB.md) applies to: rpkg-config 0.1.2, sdl3-src 3.4.14 ---------------------------------------------------------------------------- zlib License @@ -12404,7 +13151,7 @@ at your option. ---------------------------------------------------------------------------- -The following license (LICENSE-ISC) applies to: rustls 0.23.41, rustls-native-certs 0.8.4 +The following license (LICENSE-ISC) applies to: rustls 0.23.43, rustls-native-certs 0.8.4 ---------------------------------------------------------------------------- ISC License (ISC) Copyright (c) 2016, Joseph Birr-Pixton @@ -12424,7 +13171,7 @@ THIS SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: rustls 0.23.41, rustls-native-certs 0.8.4 +The following license (LICENSE-MIT) applies to: rustls 0.23.43, rustls-native-certs 0.8.4 ---------------------------------------------------------------------------- Copyright (c) 2016 Joseph Birr-Pixton @@ -12468,7 +13215,7 @@ of these licenses, at your option. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: rustls-pki-types 1.14.1 +The following license (LICENSE-APACHE) applies to: rustls-pki-types 1.15.1 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -12674,7 +13421,7 @@ limitations under the License. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: rustls-pki-types 1.14.1 +The following license (LICENSE-MIT) applies to: rustls-pki-types 1.15.1 ---------------------------------------------------------------------------- Copyright (c) 2023 Dirkjan Ochtman @@ -12704,7 +13451,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: rustls-platform-verifier 0.6.2 +The following license (LICENSE-MIT) applies to: rustls-platform-verifier 0.7.0 ---------------------------------------------------------------------------- MIT License @@ -12730,7 +13477,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: rustls-webpki 0.103.13 +The following license (LICENSE) applies to: rustls-webpki 0.103.14 ---------------------------------------------------------------------------- Except as otherwise noted, this project is licensed under the following (ISC-style) terms: @@ -12794,7 +13541,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT.md) applies to: safe_arch 0.7.4 +The following license (LICENSE-MIT.md) applies to: safe_arch 1.1.0 ---------------------------------------------------------------------------- MIT License @@ -12808,7 +13555,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ---------------------------------------------------------------------------- -The following license (LICENSE-ZLIB.md) applies to: safe_arch 0.7.4, wide 0.7.33 +The following license (LICENSE-ZLIB.md) applies to: safe_arch 1.1.0 ---------------------------------------------------------------------------- Copyright (c) 2020 Daniel "Lokathor" Gee. @@ -12941,7 +13688,7 @@ freely, subject to the following restrictions: ---------------------------------------------------------------------------- -The following license (LICENSE.md) applies to: sdl3-sys 0.6.6+SDL-3.4.10 +The following license (LICENSE.md) applies to: sdl3-sys 0.6.8+SDL-3.4.14 ---------------------------------------------------------------------------- zlib License @@ -13180,7 +13927,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE.md) applies to: simd-adler32 0.3.9 +The following license (LICENSE.md) applies to: simd-adler32 0.3.10 ---------------------------------------------------------------------------- MIT License @@ -13205,6 +13952,24 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------------------------------- +The following license (simple-icons.txt) applies to: Simple Icons (vendored, assets/launcher-icons) +---------------------------------------------------------------------------- +Simple Icons — brand icons (lutris, heroic, epic, gog in assets/launcher-icons/) are +from Simple Icons +(https://simpleicons.org, https://github.com/simple-icons/simple-icons). + +Upstream slugs: lutris, heroicgameslauncher, epicgames, gogdotcom. + +The Simple Icons SVG path data is released under CC0 1.0 Universal (public domain +dedication), https://creativecommons.org/publicdomain/zero/1.0/ — no attribution +required; this notice is provided for provenance. + +Brand icons are trademarks of their respective owners and are used for +identification purposes only; their use does not imply endorsement. See +https://github.com/simple-icons/simple-icons/blob/develop/DISCLAIMER.md. + + ---------------------------------------------------------------------------- The following license (simple-icons.txt) applies to: Simple Icons (vendored, assets/os-icons) ---------------------------------------------------------------------------- @@ -13294,7 +14059,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: socket-pktinfo 0.4.0 +The following license (LICENSE) applies to: socket-pktinfo 0.4.1 ---------------------------------------------------------------------------- MIT License @@ -13346,7 +14111,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: spin 0.9.8 +The following license (LICENSE) applies to: spin 0.9.9 ---------------------------------------------------------------------------- The MIT License (MIT) @@ -13397,36 +14162,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ----------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: stable_deref_trait 1.2.1 ----------------------------------------------------------------------------- -Copyright (c) 2017 Robert Grosse - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - ---------------------------------------------------------------------------- The following license (LICENSE) applies to: strsim 0.11.1 ---------------------------------------------------------------------------- @@ -13557,6 +14292,65 @@ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------------------------------- +The following license (LICENSE) applies to: task-local 0.1.1 +---------------------------------------------------------------------------- +This project is licensed under either of + + * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) + * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) + +at your option. + + +---------------------------------------------------------------------------- +The following license (LICENSE-APACHE) applies to: task-local 0.1.1 +---------------------------------------------------------------------------- +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +Copyright 2025 Bugen Zhao + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +---------------------------------------------------------------------------- +The following license (LICENSE-MIT) applies to: task-local 0.1.1 +---------------------------------------------------------------------------- +MIT License + +Copyright (c) 2025 Bugen Zhao + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + ---------------------------------------------------------------------------- The following license (LICENSE-MIT) applies to: tempfile 3.27.0, xattr 1.6.1 ---------------------------------------------------------------------------- @@ -13588,7 +14382,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: time 0.3.51, time-core 0.1.9, time-macros 0.2.30 +The following license (LICENSE-MIT) applies to: time 0.3.55, time-core 0.1.9, time-macros 0.2.32 ---------------------------------------------------------------------------- Copyright (c) Jacob Pratt et al. @@ -13642,7 +14436,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT.md) applies to: tinyvec 1.11.0 +The following license (LICENSE-MIT.md) applies to: tinyvec 1.12.0 ---------------------------------------------------------------------------- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: @@ -13908,133 +14702,7 @@ freely, subject to the following restrictions: ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: to_method 1.1.0 ----------------------------------------------------------------------------- -Creative Commons Legal Code - -CC0 1.0 Universal - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works ("Commons") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the "Affirmer"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -"License"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, - statutory or otherwise, including without limitation warranties of - title, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. - - ----------------------------------------------------------------------------- -The following license (LICENSE) applies to: tokio 1.52.3, tokio-util 0.7.18 +The following license (LICENSE) applies to: tokio 1.53.1, tokio-util 0.7.19 ---------------------------------------------------------------------------- MIT License @@ -14060,7 +14728,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: tokio-macros 2.7.0 +The following license (LICENSE) applies to: tokio-macros 2.7.2 ---------------------------------------------------------------------------- MIT License @@ -14837,7 +15505,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE.txt) applies to: untrusted 0.9.0 +The following license (LICENSE.txt) applies to: untrusted 0.7.1, untrusted 0.9.0 ---------------------------------------------------------------------------- // Copyright 2015-2016 Brian Smith. // @@ -14855,7 +15523,7 @@ The following license (LICENSE.txt) applies to: untrusted 0.9.0 ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: ureq 2.12.1 +The following license (LICENSE-MIT) applies to: ureq 3.4.0 ---------------------------------------------------------------------------- MIT License @@ -14881,80 +15549,15 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (COPYRIGHT) applies to: utf8_iter 1.0.4 +The following license (LICENSE-MIT.txt) applies to: ureq-proto 0.6.1 ---------------------------------------------------------------------------- -Copyright Mozilla Foundation +Copyright 2022 Martin Algesten -Licensed under the Apache License (Version 2.0), or the MIT license, -(the "Licenses") at your option. You may not use this file except in -compliance with one of the Licenses. You may obtain copies of the -Licenses at: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - https://www.apache.org/licenses/LICENSE-2.0 - https://opensource.org/licenses/MIT +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -Unless required by applicable law or agreed to in writing, software -distributed under the Licenses is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the Licenses for the specific language governing permissions and -limitations under the Licenses. - --- - -Test code is dedicated to the Public Domain when so designated (see -the individual files for PD/CC0-dedicated sections). - --- - -The implementation for Utf8CharIndices was adapted from the -CharIndices implementation of the Rust standard library at revision -ab32548539ec38a939c1b58599249f3b54130026 -(https://github.com/rust-lang/rust/blob/ab32548539ec38a939c1b58599249f3b54130026/library/core/src/str/iter.rs). - -Excerpt from https://github.com/rust-lang/rust/blob/ab32548539ec38a939c1b58599249f3b54130026/COPYRIGHT , -which refers to -https://github.com/rust-lang/rust/blob/ab32548539ec38a939c1b58599249f3b54130026/LICENSE-APACHE -and -https://github.com/rust-lang/rust/blob/ab32548539ec38a939c1b58599249f3b54130026/LICENSE-MIT -: - -For full authorship information, see the version control history or -https://thanks.rust-lang.org - -Except as otherwise noted (below and/or in individual files), Rust is -licensed under the Apache License, Version 2.0 or - or the MIT license - or , at your option. - - ----------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: utf8_iter 1.0.4 ----------------------------------------------------------------------------- -Copyright Mozilla Foundation - -Permission is hereby granted, free of charge, to any -person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the -Software without restriction, including without -limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF -ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED -TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR -IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- @@ -15015,7 +15618,7 @@ THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: uuid 1.23.4 +The following license (LICENSE-MIT) applies to: uuid 1.24.0 ---------------------------------------------------------------------------- Copyright (c) 2014 The Rust Project Developers Copyright (c) 2018 Ashley Mannix, Christopher Armstrong, Dylan DPC, Hunar Roop Kahlon @@ -15195,7 +15798,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE.txt) applies to: wayland-backend 0.3.15, wayland-client 0.31.14, wayland-protocols 0.32.13, wayland-protocols-misc 0.3.12, wayland-protocols-wlr 0.3.12, wayland-scanner 0.31.10, wayland-sys 0.31.11 +The following license (LICENSE.txt) applies to: wayland-backend 0.3.16, wayland-client 0.31.15, wayland-protocols 0.32.13, wayland-protocols-misc 0.3.12, wayland-protocols-wlr 0.3.12, wayland-scanner 0.31.11, wayland-sys 0.31.11 ---------------------------------------------------------------------------- Copyright (c) 2015 Elinor Berger @@ -15451,7 +16054,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: webpki-root-certs 1.0.8, webpki-roots 0.26.11, webpki-roots 1.0.8 +The following license (LICENSE) applies to: webpki-root-certs 1.0.9, webpki-roots 1.0.9 ---------------------------------------------------------------------------- # Community Data License Agreement - Permissive - Version 2.0 @@ -15542,6 +16145,260 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +---------------------------------------------------------------------------- +The following license (LICENSE-APACHE.txt) applies to: wide 1.6.1 +---------------------------------------------------------------------------- +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2020 Daniel "Lokathor" Gee + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +---------------------------------------------------------------------------- +The following license (LICENSE-MIT.txt) applies to: wide 1.6.1 +---------------------------------------------------------------------------- +MIT License + +Copyright (c) 2020 Daniel "Lokathor" Gee + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +---------------------------------------------------------------------------- +The following license (LICENSE-ZLIB.txt) applies to: wide 1.6.1 +---------------------------------------------------------------------------- +Copyright (c) 2020 Daniel "Lokathor" Gee. + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + + ---------------------------------------------------------------------------- The following license (LICENSE-MIT) applies to: winapi 0.3.9 ---------------------------------------------------------------------------- @@ -15567,7 +16424,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (license-apache-2.0) applies to: windows 0.62.2, windows-canvas 0.0.0, windows-collections 0.3.2, windows-composition 0.0.0, windows-core 0.62.2, windows-future 0.3.2, windows-implement 0.60.2, windows-interface 0.59.3, windows-link 0.2.1, windows-numerics 0.3.1, windows-reactor 0.0.0, windows-reactor-setup 0.0.0, windows-reference 0.1.0, windows-result 0.4.1, windows-strings 0.5.1, windows-sys 0.45.0, windows-sys 0.52.0, windows-sys 0.59.0, windows-sys 0.60.2, windows-sys 0.61.2, windows-targets 0.42.2, windows-targets 0.52.6, windows-targets 0.53.5, windows-threading 0.2.1, windows-time 0.1.0, windows-window 0.0.0, windows_aarch64_gnullvm 0.42.2, windows_aarch64_gnullvm 0.52.6, windows_aarch64_gnullvm 0.53.1, windows_aarch64_msvc 0.42.2, windows_aarch64_msvc 0.52.6, windows_aarch64_msvc 0.53.1, windows_i686_gnu 0.42.2, windows_i686_gnu 0.52.6, windows_i686_gnu 0.53.1, windows_i686_gnullvm 0.52.6, windows_i686_gnullvm 0.53.1, windows_i686_msvc 0.42.2, windows_i686_msvc 0.52.6, windows_i686_msvc 0.53.1, windows_x86_64_gnu 0.42.2, windows_x86_64_gnu 0.52.6, windows_x86_64_gnu 0.53.1, windows_x86_64_gnullvm 0.42.2, windows_x86_64_gnullvm 0.52.6, windows_x86_64_gnullvm 0.53.1, windows_x86_64_msvc 0.42.2, windows_x86_64_msvc 0.52.6, windows_x86_64_msvc 0.53.1 +The following license (license-apache-2.0) applies to: windows 0.62.2, windows-canvas 0.0.0, windows-collections 0.3.2, windows-composition 0.0.0, windows-core 0.62.2, windows-future 0.3.2, windows-implement 0.60.2, windows-interface 0.59.3, windows-link 0.2.1, windows-numerics 0.3.1, windows-reactor 0.0.0, windows-reactor-setup 0.0.0, windows-reference 0.1.0, windows-result 0.4.1, windows-strings 0.5.1, windows-sys 0.45.0, windows-sys 0.52.0, windows-sys 0.59.0, windows-sys 0.61.2, windows-targets 0.42.2, windows-targets 0.52.6, windows-threading 0.2.1, windows-time 0.1.0, windows-window 0.0.0, windows_aarch64_gnullvm 0.42.2, windows_aarch64_gnullvm 0.52.6, windows_aarch64_msvc 0.42.2, windows_aarch64_msvc 0.52.6, windows_i686_gnu 0.42.2, windows_i686_gnu 0.52.6, windows_i686_gnullvm 0.52.6, windows_i686_msvc 0.42.2, windows_i686_msvc 0.52.6, windows_x86_64_gnu 0.42.2, windows_x86_64_gnu 0.52.6, windows_x86_64_gnullvm 0.42.2, windows_x86_64_gnullvm 0.52.6, windows_x86_64_msvc 0.42.2, windows_x86_64_msvc 0.52.6 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -15773,7 +16630,7 @@ Apache License ---------------------------------------------------------------------------- -The following license (license-mit) applies to: windows 0.62.2, windows-canvas 0.0.0, windows-collections 0.3.2, windows-composition 0.0.0, windows-core 0.62.2, windows-future 0.3.2, windows-implement 0.60.2, windows-interface 0.59.3, windows-link 0.2.1, windows-numerics 0.3.1, windows-reactor 0.0.0, windows-reactor-setup 0.0.0, windows-reference 0.1.0, windows-result 0.4.1, windows-strings 0.5.1, windows-sys 0.45.0, windows-sys 0.52.0, windows-sys 0.59.0, windows-sys 0.60.2, windows-sys 0.61.2, windows-targets 0.42.2, windows-targets 0.52.6, windows-targets 0.53.5, windows-threading 0.2.1, windows-time 0.1.0, windows-window 0.0.0, windows_aarch64_gnullvm 0.42.2, windows_aarch64_gnullvm 0.52.6, windows_aarch64_gnullvm 0.53.1, windows_aarch64_msvc 0.42.2, windows_aarch64_msvc 0.52.6, windows_aarch64_msvc 0.53.1, windows_i686_gnu 0.42.2, windows_i686_gnu 0.52.6, windows_i686_gnu 0.53.1, windows_i686_gnullvm 0.52.6, windows_i686_gnullvm 0.53.1, windows_i686_msvc 0.42.2, windows_i686_msvc 0.52.6, windows_i686_msvc 0.53.1, windows_x86_64_gnu 0.42.2, windows_x86_64_gnu 0.52.6, windows_x86_64_gnu 0.53.1, windows_x86_64_gnullvm 0.42.2, windows_x86_64_gnullvm 0.52.6, windows_x86_64_gnullvm 0.53.1, windows_x86_64_msvc 0.42.2, windows_x86_64_msvc 0.52.6, windows_x86_64_msvc 0.53.1 +The following license (license-mit) applies to: windows 0.62.2, windows-canvas 0.0.0, windows-collections 0.3.2, windows-composition 0.0.0, windows-core 0.62.2, windows-future 0.3.2, windows-implement 0.60.2, windows-interface 0.59.3, windows-link 0.2.1, windows-numerics 0.3.1, windows-reactor 0.0.0, windows-reactor-setup 0.0.0, windows-reference 0.1.0, windows-result 0.4.1, windows-strings 0.5.1, windows-sys 0.45.0, windows-sys 0.52.0, windows-sys 0.59.0, windows-sys 0.61.2, windows-targets 0.42.2, windows-targets 0.52.6, windows-threading 0.2.1, windows-time 0.1.0, windows-window 0.0.0, windows_aarch64_gnullvm 0.42.2, windows_aarch64_gnullvm 0.52.6, windows_aarch64_msvc 0.42.2, windows_aarch64_msvc 0.52.6, windows_i686_gnu 0.42.2, windows_i686_gnu 0.52.6, windows_i686_gnullvm 0.52.6, windows_i686_msvc 0.42.2, windows_i686_msvc 0.52.6, windows_x86_64_gnu 0.42.2, windows_x86_64_gnu 0.52.6, windows_x86_64_gnullvm 0.42.2, windows_x86_64_gnullvm 0.52.6, windows_x86_64_msvc 0.42.2, windows_x86_64_msvc 0.52.6 ---------------------------------------------------------------------------- MIT License @@ -16035,7 +16892,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: winnow 0.7.15, winnow 1.0.3 +The following license (LICENSE-MIT) applies to: winnow 0.7.15, winnow 1.0.4 ---------------------------------------------------------------------------- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -16418,7 +17275,7 @@ Permission is granted to anyone to use this software for any purpose, including ---------------------------------------------------------------------------- -The following license (LICENSE) applies to: zbus 5.16.0, zbus_macros 5.16.0, zbus_names 4.3.2, zvariant 5.12.0, zvariant_derive 5.12.0 +The following license (LICENSE) applies to: zbus 5.19.0, zbus_macros 5.19.0, zbus_names 4.3.4, zvariant 5.14.0, zvariant_derive 5.14.0 ---------------------------------------------------------------------------- Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors @@ -16448,7 +17305,37 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-APACHE) applies to: zerocopy 0.7.35, zerocopy 0.8.52, zerocopy-derive 0.7.35, zerocopy-derive 0.8.52 +The following license (LICENSE) applies to: zcheapstr 1.1.0 +---------------------------------------------------------------------------- +Copyright (c) 2026 Zeeshan Ali Khan & zcheapstr contributors + +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + +---------------------------------------------------------------------------- +The following license (LICENSE-APACHE) applies to: zerocopy 0.7.35, zerocopy 0.8.56, zerocopy-derive 0.7.35, zerocopy-derive 0.8.56 ---------------------------------------------------------------------------- Apache License Version 2.0, January 2004 @@ -16654,7 +17541,7 @@ Apache License ---------------------------------------------------------------------------- -The following license (LICENSE-BSD) applies to: zerocopy 0.7.35, zerocopy 0.8.52, zerocopy-derive 0.7.35, zerocopy-derive 0.8.52 +The following license (LICENSE-BSD) applies to: zerocopy 0.7.35, zerocopy 0.8.56, zerocopy-derive 0.7.35, zerocopy-derive 0.8.56 ---------------------------------------------------------------------------- Copyright 2019 The Fuchsia Authors. @@ -16683,7 +17570,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: zerocopy 0.7.35, zerocopy 0.8.52, zerocopy-derive 0.7.35, zerocopy-derive 0.8.52 +The following license (LICENSE-MIT) applies to: zerocopy 0.7.35, zerocopy 0.8.56, zerocopy-derive 0.7.35, zerocopy-derive 0.8.56 ---------------------------------------------------------------------------- Copyright 2023 The Fuchsia Authors @@ -16743,7 +17630,7 @@ DEALINGS IN THE SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-MIT) applies to: zune-core 0.5.1, zune-jpeg 0.5.15 +The following license (LICENSE-MIT) applies to: zune-core 0.5.3, zune-jpeg 0.5.15 ---------------------------------------------------------------------------- MIT License @@ -16769,7 +17656,7 @@ SOFTWARE. ---------------------------------------------------------------------------- -The following license (LICENSE-ZLIB) applies to: zune-core 0.5.1, zune-jpeg 0.5.15 +The following license (LICENSE-ZLIB) applies to: zune-core 0.5.3, zune-jpeg 0.5.15 ---------------------------------------------------------------------------- zlib License diff --git a/about.toml b/about.toml index 618b733f..3d08de85 100644 --- a/about.toml +++ b/about.toml @@ -40,7 +40,6 @@ accepted = [ "CC0-1.0", "Unlicense", "WTFPL", - "OpenSSL", ] # cbindgen is MPL-2.0 but it is a BUILD-ONLY codegen tool that never links into a shipped artifact @@ -57,7 +56,8 @@ ignore-dev-dependencies = true # accepted arm on its own (MIT/Apache-2.0 are globally accepted), so it needs no entry. (It is # also UEFI-target-gated out of every shipped build.) # -# ring's license is an AND of permissive terms including the OpenSSL license; accept the -# OpenSSL/ISC parts for this crate only, not globally. -[ring] -accepted = ["OpenSSL", "ISC"] +# There is deliberately NO per-crate entry here any more. `ring` used to need one (its licence is an +# AND that includes the OpenSSL licence, which was accepted for that crate alone), but the crypto +# backend moved to aws-lc-rs and the ureq 2 → 3 upgrade removed ring from every target we build. +# aws-lc-sys 0.44's SPDX is an AND of ISC / Apache-2.0 / MIT / BSD-3-Clause / MIT-0 — all globally +# accepted above — and carries no OpenSSL clause, so `OpenSSL` left the global list with ring. diff --git a/clients/android/native/Cargo.toml b/clients/android/native/Cargo.toml index 1755e47d..74facf00 100644 --- a/clients/android/native/Cargo.toml +++ b/clients/android/native/Cargo.toml @@ -15,7 +15,8 @@ crate-type = ["cdylib"] [dependencies] # The whole protocol/transport/FEC/crypto + the embeddable NativeClient connector. `quic` pulls -# the punktfunk/1 control plane (now ring-only — no aws-lc, see punktfunk-core/Cargo.toml). +# the punktfunk/1 control plane, whose TLS runs on aws-lc-rs (see punktfunk-core/Cargo.toml) — +# aws-lc-sys cross-compiles for all three ABIs with the NDK clang cargo-ndk already exports. punktfunk-core = { path = "../../../crates/punktfunk-core", features = ["quic"] } jni = "0.21" log = "0.4" diff --git a/clients/cli/Cargo.toml b/clients/cli/Cargo.toml index 7ae6ddc7..fde12b89 100644 --- a/clients/cli/Cargo.toml +++ b/clients/cli/Cargo.toml @@ -21,7 +21,6 @@ path = "src/main.rs" pf-client-core = { path = "../../crates/pf-client-core", default-features = false } punktfunk-core = { path = "../../crates/punktfunk-core", features = ["quic"] } serde_json = "1" -tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } [lints] diff --git a/clients/cli/src/main.rs b/clients/cli/src/main.rs index b0920fea..8b198fe4 100644 --- a/clients/cli/src/main.rs +++ b/clients/cli/src/main.rs @@ -1389,6 +1389,7 @@ from the config directory for a true factory reset." #[cfg(any(target_os = "linux", windows))] fn main() -> std::process::ExitCode { + punktfunk_core::tls::install_default_provider(); // Logs to stderr; stdout is the machine interface (TSV/JSON), exactly like the session // binary's contract. tracing_subscriber::fmt() diff --git a/clients/linux/src/main.rs b/clients/linux/src/main.rs index 39175a56..7a90ff0c 100644 --- a/clients/linux/src/main.rs +++ b/clients/linux/src/main.rs @@ -33,6 +33,7 @@ mod ui_trust; #[cfg(target_os = "linux")] fn main() -> gtk::glib::ExitCode { + punktfunk_core::tls::install_default_provider(); app::run() } diff --git a/clients/probe/Cargo.toml b/clients/probe/Cargo.toml index ca485037..bd8b7a0e 100644 --- a/clients/probe/Cargo.toml +++ b/clients/probe/Cargo.toml @@ -10,7 +10,14 @@ repository.workspace = true [dependencies] punktfunk-core = { path = "../../crates/punktfunk-core", features = ["quic"] } -quinn = "0.11" +# Backend features mirror punktfunk-core's quinn exactly (see its Cargo.toml). +quinn = { version = "0.11", default-features = false, features = [ + "log", + "platform-verifier", + "runtime-tokio", + "rustls-aws-lc-rs", + "bloom", +] } tokio = { version = "1", features = ["rt-multi-thread", "net", "time", "macros"] } anyhow = "1" tracing = "0.1" diff --git a/clients/session/Cargo.toml b/clients/session/Cargo.toml index f3b7acab..5be2aef9 100644 --- a/clients/session/Cargo.toml +++ b/clients/session/Cargo.toml @@ -37,7 +37,6 @@ pf-client-core = { path = "../../crates/pf-client-core", default-features = fals punktfunk-core = { path = "../../crates/punktfunk-core", features = ["quic"] } # The fake-library dev hook (`PUNKTFUNK_FAKE_LIBRARY`, browse mode) parses GameEntry JSON. serde_json = { version = "1", optional = true } -anyhow = "1" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } diff --git a/clients/windows/Cargo.toml b/clients/windows/Cargo.toml index d84a0d21..55bf7f05 100644 --- a/clients/windows/Cargo.toml +++ b/clients/windows/Cargo.toml @@ -47,8 +47,15 @@ pf-client-core = { path = "../../crates/pf-client-core", default-features = fals # Unpublished (version 0.0.0) and fast-moving, so pinned to a verified commit. Pin bumped # 2026-07-29 (from the 2026-07-01 rev) for: reconciler keyed-child-order fix (#4728), widget # validation (#4727), DPI collision fix (#4751), icon elements (#4736), multi-window (#4730), -# scroll virtualization (#4710). All three windows-rs deps here MUST share this rev, and it -# must match pf-client-core's `windows` pin, so the workspace builds ONE windows-rs. +# scroll virtualization (#4710). All three windows-rs deps here MUST share this rev, and it must +# match pf-client-core's `windows` pin — that is what makes the `IDXGISwapChain1` handed to reactor +# satisfy reactor's own `windows_core::Interface`. +# ⚠ This is NOT "the workspace builds ONE windows-rs", which an earlier version of this note +# claimed. `wasapi` (via pf-client-core) pulls the crates.io `windows 0.62.2` alongside this git +# copy, so both are in the lock and both compile. That costs build time and binary size, not +# correctness. ⛔ Do NOT try to collapse it with a blanket `[patch.crates-io] windows`: this rev +# uses header-named features (`dxgi`, `combaseapi`) while a dozen other manifests still use the +# old `Win32_*` namespace features, and the patch would break every one of them. windows-reactor = { git = "https://github.com/microsoft/windows-rs", rev = "acb5a1a7441033d9312b16842af02eb0c2b403dc" } # Win32 / DXGI for the GPU picker and the shell's window plumbing. Pulled from the SAME # windows-rs commit as windows-reactor so their `windows-core` unifies — the `IDXGISwapChain1` @@ -84,7 +91,6 @@ windows = { git = "https://github.com/microsoft/windows-rs", rev = "acb5a1a74410 # pf-client-core with the same `build-from-source,hidapi` features, so it is not a direct dep here. mdns-sd = "0.20" async-channel = "2" -serde = { version = "1", features = ["derive"] } serde_json = "1" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } diff --git a/clients/windows/src/main.rs b/clients/windows/src/main.rs index 0daddd82..3eb9d26b 100644 --- a/clients/windows/src/main.rs +++ b/clients/windows/src/main.rs @@ -58,6 +58,7 @@ fn main() { let _ = AttachConsole(ATTACH_PARENT_PROCESS); } set_app_user_model_id(); + punktfunk_core::tls::install_default_provider(); // Everything logs to stderr AND `%LOCALAPPDATA%\punktfunk\logs\client.log` (see [`logfile`]): // a GUI/MSIX launch has no console, so without the file the client side of any field report diff --git a/crates/pf-capture/Cargo.toml b/crates/pf-capture/Cargo.toml index 1b30bb3c..8e82339d 100644 --- a/crates/pf-capture/Cargo.toml +++ b/crates/pf-capture/Cargo.toml @@ -29,7 +29,9 @@ ashpd = { version = "0.13", features = ["screencast", "remote_desktop"] } pipewire = "0.9" libc = "0.2" # ashpd 0.13 uses the tokio runtime for the one-time portal handshake (control plane). -tokio = { version = "1", features = ["rt", "rt-multi-thread", "net", "time"] } +# `sync` is for the `tokio::sync::oneshot` quit channels in the portal/linux capture paths. It used +# to be absent and compile anyway, borrowed from ashpd→zbus via feature unification. +tokio = { version = "1", features = ["rt", "rt-multi-thread", "net", "time", "sync"] } # XFixes cursor source for gamescope (remote-desktop-sweep Phase C): gamescope paints no # `SPA_META_Cursor`, so the pointer never reaches the PipeWire node. We read the shape/hotspot/ # visibility from gamescope's nested Xwayland via XFixes instead and feed the existing cursor slot. diff --git a/crates/pf-client-core/Cargo.toml b/crates/pf-client-core/Cargo.toml index c09165ca..a2c67214 100644 --- a/crates/pf-client-core/Cargo.toml +++ b/crates/pf-client-core/Cargo.toml @@ -14,7 +14,7 @@ repository.workspace = true # the old main.rs. Audio is the one per-OS swap: PipeWire on Linux, WASAPI on Windows # (same public surface — see lib.rs). [target.'cfg(any(target_os = "linux", windows))'.dependencies] -punktfunk-core = { path = "../punktfunk-core", features = ["quic"] } +punktfunk-core = { path = "../punktfunk-core", features = ["quic", "ureq-tls"] } # Native Vulkan Video decode (WP-C of the native-decode program, HEVC added by M3 # WP-2, AV1 by M7): auto's TOP rung on both desktop OSes since M9 — for every codec it # speaks, AV1 included — also pinnable via `PUNKTFUNK_DECODER=native-vulkan` — @@ -101,11 +101,19 @@ ash = { version = "0.38", optional = true } # Game-library fetch from the host's management API over mTLS + fingerprint pinning. # `ureq` is small + sync (the host uses it too) and its rustls unifies with the # workspace's (quinn's) 0.23; the pinning verifier mirrors core's private `PinVerify`. -ureq = "2" +# ⚠ `rustls-no-provider`, NEVER the default `rustls` feature: that one pulls `_ring`, which would +# put the ring backend back into a tree that has moved to aws-lc-rs. Same spelling everywhere. +ureq = { version = "3", default-features = false, features = [ + "rustls-no-provider", + "rustls-webpki-roots", + "gzip", +] } # Signed update-manifest fetch/verify + the install-kind ladder, shared with the host so one # trust rule serves both (crates/pf-update-check). pf-update-check = { path = "../pf-update-check" } -rustls = { version = "0.23", default-features = false, features = ["ring", "logging", "std", "tls12"] } +# aws-lc-rs backend + PQ hybrid key exchange, matching punktfunk-core (see its Cargo.toml for +# why every crate that names a rustls backend has to name the same one). +rustls = { version = "0.23", default-features = false, features = ["aws_lc_rs", "prefer-post-quantum", "logging", "std", "tls12"] } serde = { version = "1", features = ["derive"] } serde_json = "1" anyhow = "1" @@ -166,6 +174,11 @@ windows = { git = "https://github.com/microsoft/windows-rs", rev = "acb5a1a74410 "handleapi", # RECT/HMONITOR for DXGI_OUTPUT_DESC1 (the display-HDR volume query). "windef", + # HGLOBAL (clipboard.rs) + HINSTANCE (video_d3d11.rs), and the NT `HANDLE` the shared-surface + # hand-off uses. Both headers were used without being declared — they resolved only because + # clients/windows enables them on the same pinned rev, so this crate did not build standalone. + "minwindef", + "winnt", # IDXGIResource1::CreateSharedHandle takes an optional SECURITY_ATTRIBUTES. "minwinbase", # The GlobalAlloc block the clipboard takes ownership of (clipboard.rs). diff --git a/crates/pf-client-core/src/library.rs b/crates/pf-client-core/src/library.rs index 74d28e43..b5b27163 100644 --- a/crates/pf-client-core/src/library.rs +++ b/crates/pf-client-core/src/library.rs @@ -7,7 +7,6 @@ use serde::Deserialize; use std::collections::VecDeque; -use std::io::Read; use std::sync::{Arc, Mutex}; use std::time::Duration; @@ -171,9 +170,9 @@ pub fn agent( use rustls::pki_types::pem::PemObject; let bad = |what: &str, e: &dyn std::fmt::Display| LibraryError::Unreachable(format!("{what}: {e}")); - // The ring provider, explicitly — the same one core's QUIC endpoints install, so the + // The aws-lc-rs provider, explicitly — the same one core's QUIC endpoints install, so the // process never mixes rustls crypto providers. - let provider = Arc::new(rustls::crypto::ring::default_provider()); + let provider = Arc::new(rustls::crypto::aws_lc_rs::default_provider()); let builder = rustls::ClientConfig::builder_with_provider(provider) .with_safe_default_protocol_versions() .map_err(|e| bad("tls config", &e))? @@ -186,11 +185,15 @@ pub fn agent( let cfg = builder .with_client_auth_cert(vec![cert], key) .map_err(|e| bad("client auth", &e))?; - Ok(ureq::AgentBuilder::new() - .tls_config(Arc::new(cfg)) - .timeout_connect(Duration::from_secs(5)) - .timeout(Duration::from_secs(10)) - .build()) + // ureq's own `TlsConfig` has no hook for a custom verifier, so the agent is built around this + // `ClientConfig` verbatim (punktfunk-core owns that glue — see `tls::ureq_agent`). + Ok(punktfunk_core::tls::ureq_agent::agent( + Arc::new(cfg), + ureq::Agent::config_builder() + .timeout_connect(Some(Duration::from_secs(5))) + .timeout_global(Some(Duration::from_secs(10))) + .build(), + )) } /// Fetch the host's unified library. Errors are pre-classified for the UI (401/403 → @@ -204,8 +207,9 @@ pub fn fetch_games( let agent = agent(identity, pin)?; let url = format!("{}/api/v1/library", base_url(addr, mgmt_port)); let body = match agent.get(&url).call() { - Ok(resp) => resp - .into_string() + Ok(mut resp) => resp + .body_mut() + .read_to_string() .map_err(|e| LibraryError::Unreachable(format!("read body: {e}")))?, Err(e) => return Err(classify(e)), }; @@ -221,18 +225,26 @@ const ART_MAX_BYTES: u64 = 16 * 1024 * 1024; /// a public CDN URL on a custom entry — uses ureq's default agent with normal webpki /// trust and no client cert (Apple's `LibraryTLSDelegate` does the same split). pub fn fetch_art(pinned: &ureq::Agent, base: &str, url: &str) -> Result, LibraryError> { - let resp = if url.starts_with(base) { + let mut resp = if url.starts_with(base) { pinned.get(url).call() } else { - ureq::get(url).timeout(Duration::from_secs(10)).call() + // ureq's default agent builds its own rustls config from the process-default provider. + // Installed here rather than trusting the binary, since several link this crate. + punktfunk_core::tls::install_default_provider(); + ureq::get(url) + .config() + .timeout_global(Some(Duration::from_secs(10))) + .build() + .call() } .map_err(classify)?; - let mut bytes = Vec::new(); - resp.into_reader() - .take(ART_MAX_BYTES) - .read_to_end(&mut bytes) - .map_err(|e| LibraryError::Unreachable(format!("read image: {e}")))?; - Ok(bytes) + // `limit` replaces the old `take()` — ureq 3 caps body reads itself, and its default cap is + // lower than the largest legitimate hero asset. + resp.body_mut() + .with_config() + .limit(ART_MAX_BYTES) + .read_to_vec() + .map_err(|e| LibraryError::Unreachable(format!("read image: {e}"))) } /// Concurrent poster fetches — a handful is plenty for a LAN art proxy without turning a @@ -288,19 +300,15 @@ pub fn spawn_art_fetch( fn classify(e: ureq::Error) -> LibraryError { match e { - ureq::Error::Status(401 | 403, _) => LibraryError::NotPaired, - ureq::Error::Status(code, _) => LibraryError::Http(code), - ureq::Error::Transport(t) => { - // A pin rejection surfaces as a TLS alert wrapped in a transport error; the - // verifier's error kind survives in the message. - let msg = t.to_string(); - if msg.contains("ApplicationVerificationFailure") || msg.contains("InvalidCertificate") - { - LibraryError::PinMismatch - } else { - LibraryError::Unreachable(msg) - } - } + ureq::Error::StatusCode(401 | 403) => LibraryError::NotPaired, + ureq::Error::StatusCode(code) => LibraryError::Http(code), + // Exactly the rejection `PinVerify` raises on a fingerprint mismatch. ureq 3 carries the + // typed `rustls::Error`, so this is a real match instead of the substring sniff the 2.x + // `Transport(t)` string forced — which would also have fired on unrelated cert errors. + ureq::Error::Rustls(rustls::Error::InvalidCertificate( + rustls::CertificateError::ApplicationVerificationFailure, + )) => LibraryError::PinMismatch, + other => LibraryError::Unreachable(other.to_string()), } } diff --git a/crates/pf-clipboard/Cargo.toml b/crates/pf-clipboard/Cargo.toml index 8636866f..60a1083c 100644 --- a/crates/pf-clipboard/Cargo.toml +++ b/crates/pf-clipboard/Cargo.toml @@ -18,7 +18,15 @@ publish = false punktfunk-core = { path = "../punktfunk-core", features = ["quic"] } anyhow = "1" tracing = "0.1" -quinn = "0.11" +# Backend features mirror punktfunk-core's quinn exactly — quinn's default `rustls-ring` would +# drag a second crypto stack into every build that links this crate. +quinn = { version = "0.11", default-features = false, features = [ + "log", + "platform-verifier", + "runtime-tokio", + "rustls-aws-lc-rs", + "bloom", +] } tokio = { version = "1", features = ["rt", "rt-multi-thread", "sync", "time", "macros"] } # CF_DIB <-> PNG conversion (winfmt) - most Windows apps paste bitmaps, not the "PNG" format. # Unconditional (not windows-gated) so winfmt's pure-conversion unit tests run on every host. diff --git a/crates/pf-console-ui/Cargo.toml b/crates/pf-console-ui/Cargo.toml index bb26a3a7..dc8b9911 100644 --- a/crates/pf-console-ui/Cargo.toml +++ b/crates/pf-console-ui/Cargo.toml @@ -12,7 +12,11 @@ repository.workspace = true [target.'cfg(any(target_os = "linux", windows))'.dependencies] pf-presenter = { path = "../pf-presenter" } # MenuEvent/MenuPulse (the gamepad service's menu mode drives the library). -pf-client-core = { path = "../pf-client-core" } +# `default-features = false` like every other consumer (pf-presenter, cli, session, clients/windows): +# pf-client-core's default is `pyrowave`, which compiles the vendored PyroWave C++ — fatal on +# Windows ARM64. Whether that backend is on is the session binary's call (it forwards a `pyrowave` +# feature); this crate needs none of it, and taking defaults here quietly turned it on. +pf-client-core = { path = "../pf-client-core", default-features = false } # Skia on the presenter's VkDevice (`vulkan`); `textlayout` = skparagraph/harfbuzz for # the typography the console library needs (~15 MB stripped, prebuilt binaries exist for diff --git a/crates/pf-encode/Cargo.toml b/crates/pf-encode/Cargo.toml index 86e73552..4313fa1f 100644 --- a/crates/pf-encode/Cargo.toml +++ b/crates/pf-encode/Cargo.toml @@ -84,9 +84,9 @@ windows = { version = "0.62", features = [ "Win32_Storage_FileSystem", "Win32_System_LibraryLoader", "Win32_System_Threading", - # D3DKMTSetProcessSchedulingPriorityClass — raise the host's WDDM GPU scheduling priority - # above a running game so PyroWave's compute-shader encode isn't starved (enc/windows/pyrowave.rs). - "Wdk_Graphics_Direct3D", + # ("Wdk_Graphics_Direct3D" used to be here for D3DKMTSetProcessSchedulingPriorityClass. That + # call lives in pf-frame's dxgi.rs and is resolved via GetProcAddress on gdi32 because + # windows-rs has no stable binding for it — so nothing in this crate ever used the feature.) ] } [features] diff --git a/crates/pf-inject/Cargo.toml b/crates/pf-inject/Cargo.toml index 24becf96..0488c427 100644 --- a/crates/pf-inject/Cargo.toml +++ b/crates/pf-inject/Cargo.toml @@ -41,7 +41,10 @@ wayland-backend = "0.3" # libei (EI sender) for the portable input path on KWin/GNOME (RemoteDesktop portal) + gamescope-EI. reis = { version = "0.6.1", features = ["tokio"] } futures-util = "0.3" -tokio = { version = "1", features = ["rt", "rt-multi-thread", "net", "time"] } +# `macros` is for the `tokio::select!` in the libei and steam_usbip worker loops. It used to be +# absent and compile anyway, borrowed from punktfunk-core's `quic` feature via unification — i.e. an +# unrelated crate dropping it would have broken this one. +tokio = { version = "1", features = ["rt", "rt-multi-thread", "net", "time", "macros"] } # Builds/validates the xkb keymap uploaded to the virtual keyboard + tracks modifier state. xkbcommon = "0.8" # Vendored + trimmed usbip server core — presents a virtual Steam Deck over USB/IP for Steam Input. diff --git a/crates/pf-update-check/Cargo.toml b/crates/pf-update-check/Cargo.toml index f011787b..90df57d7 100644 --- a/crates/pf-update-check/Cargo.toml +++ b/crates/pf-update-check/Cargo.toml @@ -22,13 +22,27 @@ publish = false anyhow = "1" serde = { version = "1", features = ["derive"] } serde_json = "1" -# Ed25519 over the exact manifest bytes. The workspace is ring-only (no aws-lc-sys — it fails -# on the Windows CI runner), and this is the same primitive the plugin-store index uses. -ring = "0.17" +# Ed25519 over the exact manifest bytes — the same primitive the plugin-store index uses, on the +# workspace's one crypto backend. aws-lc-rs's API is ring-compatible, so the call sites are +# unchanged apart from the crate name. +# +# `prebuilt-nasm` is what lets aws-lc-sys build on Windows x86_64 without NASM installed. rustls +# enables it for its own dependents, but a build that selects THIS crate without one that turns on +# rustls's `aws_lc_rs` feature — `cargo test -p pf-update-check` is exactly that, since its only +# rustls comes from ureq's ring-flavoured dependency — would get no enabler and fail on the CI +# runner. Naming it here makes the crate build standalone instead of relying on who else is in +# the selection. +aws-lc-rs = { version = "1", features = ["prebuilt-nasm"] } base64 = "0.22" # Small, sync, bundles webpki roots — no system cert store dependency, which matters on the # Deck (Decky's embedded Python has no usable roots either; see clients/decky/main.py). -ureq = "2" +# ⚠ `rustls-no-provider`, NEVER the default `rustls` feature — that one pulls `_ring`, which would +# put the ring backend back into a tree that has deliberately moved to aws-lc-rs. +ureq = { version = "3", default-features = false, features = [ + "rustls-no-provider", + "rustls-webpki-roots", + "gzip", +] } [lints] workspace = true diff --git a/crates/pf-update-check/src/feed.rs b/crates/pf-update-check/src/feed.rs index 002b0daa..11690b59 100644 --- a/crates/pf-update-check/src/feed.rs +++ b/crates/pf-update-check/src/feed.rs @@ -79,17 +79,18 @@ pub fn fetch_manifest_blocking( "no update key is pinned in this build".into(), )); } - let agent = ureq::AgentBuilder::new() - .timeout(FETCH_TIMEOUT) - .redirects(3) - .user_agent(user_agent) - .build(); + let agent: ureq::Agent = ureq::Agent::config_builder() + .timeout_global(Some(FETCH_TIMEOUT)) + .max_redirects(3) + .user_agent(user_agent.to_string()) + .build() + .into(); let url = format!("{base}/{channel}/manifest.json"); let sig_url = format!("{url}.sig"); // Only the MANIFEST leg can report an empty channel; see [`FeedError::NotPublished`]. - let body = read_capped(agent.get(&url).call().map_err(manifest_err)?)?; - let sig = read_capped(agent.get(&sig_url).call().map_err(fetch_err)?)?; + let body = read_capped(&mut agent.get(&url).call().map_err(manifest_err)?)?; + let sig = read_capped(&mut agent.get(&sig_url).call().map_err(fetch_err)?)?; let sig_text = String::from_utf8(sig) .map_err(|_| FeedError::Failed("signature file is not text".into()))?; @@ -100,24 +101,26 @@ pub fn fetch_manifest_blocking( /// The manifest leg: a 404 here means the channel is empty, not broken. fn manifest_err(e: ureq::Error) -> FeedError { match e { - ureq::Error::Status(404, _) => FeedError::NotPublished, + ureq::Error::StatusCode(404) => FeedError::NotPublished, other => fetch_err(other), } } fn fetch_err(e: ureq::Error) -> FeedError { FeedError::Failed(match e { - ureq::Error::Status(code, _) => format!("feed returned HTTP {code}"), + ureq::Error::StatusCode(code) => format!("feed returned HTTP {code}"), other => format!("feed fetch failed: {other}"), }) } -fn read_capped(resp: ureq::Response) -> Result, FeedError> { - use std::io::Read as _; - let mut buf = Vec::new(); - let mut reader = resp.into_reader().take(MAX_MANIFEST_BYTES as u64 + 1); - reader - .read_to_end(&mut buf) +fn read_capped(resp: &mut ureq::http::Response) -> Result, FeedError> { + // cap+1 so an over-cap body is rejected by the length check rather than silently truncated + // into something that would then fail signature verification for the wrong reason. + let buf = resp + .body_mut() + .with_config() + .limit(MAX_MANIFEST_BYTES as u64 + 1) + .read_to_vec() .map_err(|e| FeedError::Failed(format!("read failed: {e}")))?; if buf.len() > MAX_MANIFEST_BYTES { return Err(FeedError::Failed( @@ -143,7 +146,7 @@ mod tests { } fn status(code: u16) -> ureq::Error { - ureq::Error::Status(code, ureq::Response::new(code, "status", "").unwrap()) + ureq::Error::StatusCode(code) } /// The whole point of the split: an empty channel is not a broken feed. diff --git a/crates/pf-update-check/src/sig.rs b/crates/pf-update-check/src/sig.rs index ce8a965d..3ebc6f60 100644 --- a/crates/pf-update-check/src/sig.rs +++ b/crates/pf-update-check/src/sig.rs @@ -40,7 +40,8 @@ pub fn verify_signature(bytes: &[u8], sig_text: &str, keys: &[PublicKey]) -> Res .decode(sig_text.trim()) .context("signature file is not valid base64")?; for key in keys { - let pk = ring::signature::UnparsedPublicKey::new(&ring::signature::ED25519, &key.0); + let pk = + aws_lc_rs::signature::UnparsedPublicKey::new(&aws_lc_rs::signature::ED25519, &key.0); if pk.verify(bytes, &sig).is_ok() { return Ok(()); } @@ -52,14 +53,14 @@ pub fn verify_signature(bytes: &[u8], sig_text: &str, keys: &[PublicKey]) -> Res pub(crate) mod tests { use super::*; - /// A fresh ring keypair as `(pinned key string, signer)` — the format contract with the + /// A fresh keypair as `(pinned key string, signer)` — the format contract with the /// CI signers (raw 32-byte key, `ed25519:`; raw 64-byte signature, base64). - pub(crate) fn keypair() -> (String, ring::signature::Ed25519KeyPair) { + pub(crate) fn keypair() -> (String, aws_lc_rs::signature::Ed25519KeyPair) { + use aws_lc_rs::signature::KeyPair as _; use base64::Engine as _; - use ring::signature::KeyPair as _; - let rng = ring::rand::SystemRandom::new(); - let pkcs8 = ring::signature::Ed25519KeyPair::generate_pkcs8(&rng).unwrap(); - let kp = ring::signature::Ed25519KeyPair::from_pkcs8(pkcs8.as_ref()).unwrap(); + let rng = aws_lc_rs::rand::SystemRandom::new(); + let pkcs8 = aws_lc_rs::signature::Ed25519KeyPair::generate_pkcs8(&rng).unwrap(); + let kp = aws_lc_rs::signature::Ed25519KeyPair::from_pkcs8(pkcs8.as_ref()).unwrap(); let key_str = format!( "ed25519:{}", base64::engine::general_purpose::STANDARD.encode(kp.public_key().as_ref()) diff --git a/crates/pf-win-display/Cargo.toml b/crates/pf-win-display/Cargo.toml index c69bd35b..7391a7ea 100644 --- a/crates/pf-win-display/Cargo.toml +++ b/crates/pf-win-display/Cargo.toml @@ -16,9 +16,11 @@ publish = false [target.'cfg(target_os = "windows")'.dependencies] # `Mode` (the negotiated display mode) is the core wire type; `pf-paths` for the pnp-disabled-monitors # state file. -punktfunk-core = { path = "../punktfunk-core", features = ["quic"] } +# Just `punktfunk_core::Mode` (win_display.rs), which lives in the ungated `config` module — the +# `quic` feature this used to request dragged quinn/tokio/rcgen/hmac/spake2/opus/rustls into a leaf +# crate's declared closure for one type. +punktfunk-core = { path = "../punktfunk-core", default-features = false } pf-paths = { path = "../pf-paths" } -anyhow = "1" tracing = "0.1" # The pnp-disabled-monitors state file (a `Vec` of instance ids) is serialized as JSON. serde_json = "1" diff --git a/crates/punktfunk-core/Cargo.toml b/crates/punktfunk-core/Cargo.toml index 3714d5db..028a5b11 100644 --- a/crates/punktfunk-core/Cargo.toml +++ b/crates/punktfunk-core/Cargo.toml @@ -24,6 +24,12 @@ tls = ["dep:rustls", "dep:sha2", "dep:rustls-pki-types"] # Control-plane QUIC (pairing, config, reverse audio). tokio is permitted ONLY here, # never on the per-frame hot path. Off by default so the core stays runtime-free. quic = ["tls", "dep:quinn", "dep:tokio", "dep:rcgen", "dep:hmac", "dep:spake2", "dep:opus"] +# Blocking-HTTP clients that must speak the SAME pinned TLS as the QUIC plane: `tls::ureq_agent` +# hands ureq a caller-built `rustls::ClientConfig` (which is how `PinVerify` gets installed — +# ureq's own `TlsConfig` has no hook for a custom verifier). Separate from `tls` because the +# cdylib/staticlib embedders (Apple, Android) pin the host themselves over QUIC and have no use +# for an HTTP stack; only the desktop clients and the tray turn this on. +ureq-tls = ["tls", "dep:ureq"] [dependencies] reed-solomon-simd = "3.1" # GF(2^16) Leopard-RS, SIMD, O(n log n) — the wall-breaker (P2) @@ -39,7 +45,6 @@ aes-gcm = "0.10" # AES-128-GCM session crypto, matches GameStream # cross-compiles like aes-gcm (no cmake). See design/chacha20-session-cipher.md. chacha20poly1305 = "0.10" zerocopy = { version = "0.8", features = ["derive"] } -bytes = "1" socket2 = { version = "0.6", features = [ "all", ] } # SO_SNDBUF/SO_RCVBUF growth (default UDP buffers too small for 4K/5K bursts) + DSCP/SO_PRIORITY media QoS @@ -52,14 +57,31 @@ zeroize = "1" # not just the default route. Tiny, cross-platform (getifaddrs / GetAdaptersAddresses), no cmake. if-addrs = "0.13" -quinn = { version = "0.11", optional = true } -rustls = { version = "0.23", optional = true, default-features = false, features = ["ring", "std"] } -# Crypto backend pinned to `ring` (matching rustls/quinn above) so the whole quic tree is -# ring-only: no aws-lc-rs/aws-lc-sys (heavy C dep, needs cmake) is pulled in. Keeps the -# Android/iOS cdylib lean and the cross-compile cmake-free. `generate_simple_self_signed` -# is backend-agnostic, so the swap is transparent. -rcgen = { version = "0.13", optional = true, default-features = false, features = ["ring", "pem"] } +# Crypto backend is aws-lc-rs, and rustls/quinn/rcgen must all name it: they each select a +# backend independently, so one dissenter pulls a SECOND crypto stack in via feature unification. +# `prefer-post-quantum` puts the X25519MLKEM768 hybrid key exchange first in the TLS 1.3 +# handshake, which is the reason the old `ring` pin is gone — ring has no ML-KEM. +# Windows needs no NASM: rustls's `aws_lc_rs` feature enables `aws-lc-rs/prebuilt-nasm`. +# quinn's feature list is its own default set with `rustls-ring` swapped out, nothing more. +quinn = { version = "0.11", optional = true, default-features = false, features = [ + "log", + "platform-verifier", + "runtime-tokio", + "rustls-aws-lc-rs", + "bloom", +] } +rustls = { version = "0.23", optional = true, default-features = false, features = ["aws_lc_rs", "prefer-post-quantum", "std"] } +# `generate_simple_self_signed` is backend-agnostic, so the swap is transparent here. +rcgen = { version = "0.13", optional = true, default-features = false, features = ["aws_lc_rs", "pem"] } rustls-pki-types = { version = "1", optional = true } +# `rustls-no-provider`, NOT the default `rustls` feature — ureq's `rustls` feature body pulls +# `_ring`, which would drag the whole ring backend back into a tree that has deliberately moved to +# aws-lc-rs. `rustls-webpki-roots` supplies the CA set for the non-pinned origins (cover-art CDNs). +ureq = { version = "3", optional = true, default-features = false, features = [ + "rustls-no-provider", + "rustls-webpki-roots", + "gzip", +] } sha2 = { version = "0.10", optional = true } hmac = { version = "0.12", optional = true } spake2 = { version = "0.4", optional = true } diff --git a/crates/punktfunk-core/src/quic/endpoint.rs b/crates/punktfunk-core/src/quic/endpoint.rs index 7fd2c4bd..def498e4 100644 --- a/crates/punktfunk-core/src/quic/endpoint.rs +++ b/crates/punktfunk-core/src/quic/endpoint.rs @@ -176,7 +176,7 @@ fn server_from_der( addr: std::net::SocketAddr, idle: std::time::Duration, ) -> anyhow_result::Result { - let _ = rustls::crypto::ring::default_provider().install_default(); + let _ = rustls::crypto::aws_lc_rs::default_provider().install_default(); // Client auth is OFFERED but optional: a client that presents its self-signed // identity is fingerprinted post-handshake (pairing / --require-pairing checks); // one that presents none still connects (and is rejected at the app layer when @@ -254,7 +254,7 @@ pub fn client_pinned_with_identity( ) -> PinnedClient { let observed = Arc::new(Mutex::new(None)); let ep = (|| { - let _ = rustls::crypto::ring::default_provider().install_default(); + let _ = rustls::crypto::aws_lc_rs::default_provider().install_default(); let builder = rustls::ClientConfig::builder() .dangerous() .with_custom_certificate_verifier(Arc::new(crate::tls::PinVerify::with_observed( @@ -354,7 +354,7 @@ impl rustls::server::danger::ClientCertVerifier for AcceptAnyClientCert { message, cert, dss, - &rustls::crypto::ring::default_provider().signature_verification_algorithms, + &rustls::crypto::aws_lc_rs::default_provider().signature_verification_algorithms, ) } @@ -368,12 +368,12 @@ impl rustls::server::danger::ClientCertVerifier for AcceptAnyClientCert { message, cert, dss, - &rustls::crypto::ring::default_provider().signature_verification_algorithms, + &rustls::crypto::aws_lc_rs::default_provider().signature_verification_algorithms, ) } fn supported_verify_schemes(&self) -> Vec { - rustls::crypto::ring::default_provider() + rustls::crypto::aws_lc_rs::default_provider() .signature_verification_algorithms .supported_schemes() } diff --git a/crates/punktfunk-core/src/tls.rs b/crates/punktfunk-core/src/tls.rs index d3d29ac5..178d039c 100644 --- a/crates/punktfunk-core/src/tls.rs +++ b/crates/punktfunk-core/src/tls.rs @@ -8,6 +8,25 @@ use std::sync::{Arc, Mutex}; +/// A blocking HTTP agent over a caller-built `rustls::ClientConfig` — the only way to give an +/// HTTP client the [`PinVerify`] verifier below. +#[cfg(feature = "ureq-tls")] +pub mod ureq_agent; + +/// Install aws-lc-rs as this process's rustls provider. Call once, early, from `main`. +/// +/// aws-lc-rs is currently the ONLY backend in the tree, so rustls can infer it and this call is +/// belt-and-braces rather than load-bearing. It is kept because the inference is what breaks +/// first: the moment any dependency drags a second backend in — which is exactly what `ureq 2` +/// used to do, naming `rustls/ring` in its own dependency line where no dependent could switch it +/// off — rustls stops guessing, and every config built through `ClientConfig::builder()` rather +/// than `builder_with_provider` **panics** instead of picking one. Calling this makes the choice +/// explicit and survives that. Idempotent: losing the race to another installer is the expected +/// outcome, not an error, since every caller in this workspace installs the same provider. +pub fn install_default_provider() { + let _ = rustls::crypto::aws_lc_rs::default_provider().install_default(); +} + /// SHA-256 of a certificate's DER encoding — the fingerprint clients pin. Re-exported as /// `crate::quic::endpoint::cert_fingerprint` for callers that already reach it there. pub fn cert_fingerprint(cert_der: &[u8]) -> [u8; 32] { @@ -91,7 +110,7 @@ impl rustls::client::danger::ServerCertVerifier for PinVerify { message, cert, dss, - &rustls::crypto::ring::default_provider().signature_verification_algorithms, + &rustls::crypto::aws_lc_rs::default_provider().signature_verification_algorithms, ) } @@ -105,12 +124,12 @@ impl rustls::client::danger::ServerCertVerifier for PinVerify { message, cert, dss, - &rustls::crypto::ring::default_provider().signature_verification_algorithms, + &rustls::crypto::aws_lc_rs::default_provider().signature_verification_algorithms, ) } fn supported_verify_schemes(&self) -> Vec { - rustls::crypto::ring::default_provider() + rustls::crypto::aws_lc_rs::default_provider() .signature_verification_algorithms .supported_schemes() } diff --git a/crates/punktfunk-core/src/tls/ureq_agent.rs b/crates/punktfunk-core/src/tls/ureq_agent.rs new file mode 100644 index 00000000..3764f465 --- /dev/null +++ b/crates/punktfunk-core/src/tls/ureq_agent.rs @@ -0,0 +1,116 @@ +//! A blocking [`ureq::Agent`] that speaks TLS through a caller-supplied +//! [`rustls::ClientConfig`] — which is the only way to get [`PinVerify`](super::PinVerify) into an +//! HTTP client, because ureq's own `TlsConfig` exposes roots, a client cert and an +//! off-switch, but no hook for a custom [`ServerCertVerifier`](rustls::client::danger::ServerCertVerifier). +//! +//! Every caller here pins the host's self-signed leaf by fingerprint (the same trust rule as the +//! QUIC plane), so "just use the default agent" is not an option: the default agent validates +//! against webpki roots, which a self-signed host cert can never satisfy. +//! +//! The connector below is modelled on ureq 3.x's own (crate-private) `RustlsConnector` minus its +//! `TlsConfig`-driven config-building step. It is transport glue, not crypto: the handshake, the +//! verifier and the cipher suites all live in the `ClientConfig` the caller hands in. + +use std::io::{Read as _, Write as _}; +use std::sync::Arc; + +use ureq::unversioned::resolver::DefaultResolver; +use ureq::unversioned::transport::{ + Buffers, ConnectionDetails, Connector, Either, LazyBuffers, NextTimeout, TcpConnector, + Transport, TransportAdapter, +}; + +/// Build an agent whose HTTPS connections use `tls` verbatim, with `config` for everything else +/// (timeouts, redirect policy, buffer sizes) — built by the caller via +/// [`ureq::Agent::config_builder`], since those knobs differ per call site. +pub fn agent(tls: Arc, config: ureq::config::Config) -> ureq::Agent { + let connector = TcpConnector::default().chain(PinnedTlsConnector { config: tls }); + ureq::Agent::with_parts(config, connector, DefaultResolver::default()) +} + +struct PinnedTlsConnector { + config: Arc, +} + +impl std::fmt::Debug for PinnedTlsConnector { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("PinnedTlsConnector").finish() + } +} + +impl Connector for PinnedTlsConnector { + type Out = Either; + + fn connect( + &self, + details: &ConnectionDetails, + chained: Option, + ) -> Result, ureq::Error> { + let Some(transport) = chained else { + // Unreachable via `agent()` above, which always chains onto a TcpConnector. + return Err(ureq::Error::Tls("no chained transport to wrap in TLS")); + }; + // A plain-HTTP URL, or something that already negotiated TLS, passes straight through. + if !details.needs_tls() || transport.is_tls() { + return Ok(Some(Either::A(transport))); + } + + let name: rustls::pki_types::ServerName<'_> = details + .uri + .authority() + .ok_or(ureq::Error::Tls("uri has no authority"))? + .host() + .try_into() + .map_err(|_| ureq::Error::Tls("invalid DNS name"))?; + let conn = rustls::ClientConnection::new(self.config.clone(), name.to_owned())?; + let stream = rustls::StreamOwned { + conn, + sock: TransportAdapter::new(transport.boxed()), + }; + let buffers = LazyBuffers::new( + details.config.input_buffer_size(), + details.config.output_buffer_size(), + ); + Ok(Some(Either::B(PinnedTlsTransport { buffers, stream }))) + } +} + +struct PinnedTlsTransport { + buffers: LazyBuffers, + stream: rustls::StreamOwned, +} + +impl std::fmt::Debug for PinnedTlsTransport { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("PinnedTlsTransport").finish() + } +} + +impl Transport for PinnedTlsTransport { + fn buffers(&mut self) -> &mut dyn Buffers { + &mut self.buffers + } + + fn transmit_output(&mut self, amount: usize, timeout: NextTimeout) -> Result<(), ureq::Error> { + self.stream.get_mut().set_timeout(timeout); + let output = &self.buffers.output()[..amount]; + self.stream.write_all(output)?; + Ok(()) + } + + fn await_input(&mut self, timeout: NextTimeout) -> Result { + self.stream.get_mut().set_timeout(timeout); + let input = self.buffers.input_append_buf(); + let amount = self.stream.read(input)?; + self.buffers.input_appended(amount); + Ok(amount > 0) + } + + fn is_open(&mut self) -> bool { + self.stream.get_mut().get_mut().is_open() + } + + fn is_tls(&self) -> bool { + true + } +} diff --git a/crates/punktfunk-host/Cargo.toml b/crates/punktfunk-host/Cargo.toml index 3fe611c0..7294ce7f 100644 --- a/crates/punktfunk-host/Cargo.toml +++ b/crates/punktfunk-host/Cargo.toml @@ -48,7 +48,15 @@ pf-vdisplay = { path = "../pf-vdisplay" } # compiles everywhere; the backends are cfg-gated inside it. pf-clipboard = { path = "../pf-clipboard" } # M3 native control plane (the `punktfunk/1` QUIC handshake; data plane stays native-thread UDP). -quinn = "0.11" +# Feature list = quinn's own defaults with `rustls-ring` swapped for `rustls-aws-lc-rs`; every +# crate selecting a rustls backend must agree or feature unification builds both (see core). +quinn = { version = "0.11", default-features = false, features = [ + "log", + "platform-verifier", + "runtime-tokio", + "rustls-aws-lc-rs", + "bloom", +] } anyhow = "1" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } @@ -66,7 +74,6 @@ mdns-sd = "0.20" mac_address = "1" if-addrs = "0.13" tokio = { version = "1", features = ["full"] } -parking_lot = "0.12" # GameStream-only (behind the `gamestream` feature): the Moonlight RSA-2048 identity generator + # pairing signer (cert.rs, pairing.rs) and the legacy-client-cert leniency verifier (tls.rs). # The native planes use the P-256 identity (src/identity.rs) and never touch this crate — so a @@ -85,21 +92,28 @@ base64 = "0.22" # run on a background thread off the hot path. `ureq` is small + sync (no tokio here) and bundles # webpki roots (no system cert dependency). Cross-platform so the fetch/parse code is compiled + # checked everywhere even though only the Windows GOG/Xbox providers need it today. -ureq = "2" -rcgen = { version = "0.13", default-features = false, features = ["ring", "pem"] } +# ⚠ `rustls-no-provider`, NEVER the default `rustls` feature — that one pulls `_ring`, which would +# put the ring backend back into a tree that has deliberately moved to aws-lc-rs. +ureq = { version = "3", default-features = false, features = [ + "rustls-no-provider", + "rustls-webpki-roots", + "gzip", +] } +rcgen = { version = "0.13", default-features = false, features = ["aws_lc_rs", "pem"] } x509-parser = "0.16" # Only used for the plain-HTTP nvhttp listener (`bind().serve()`); HTTPS/mTLS is hand-rolled over # tokio-rustls (axum-server can't surface the peer cert), so we do NOT enable `tls-rustls` — that # feature is what pulled the unmaintained `rustls-pemfile` (security-review dep hygiene). axum-server = "0.8" -# Ring backend, NOT the (default) aws-lc-rs one — matches punktfunk-core + the client so the whole -# tree stays ring-only (no aws-lc-sys: a heavy C dep that fails to build on the Windows CI runner). +# aws-lc-rs backend, matching punktfunk-core + the clients (a dissenting crate would pull a +# second crypto stack in). `prefer-post-quantum` offers X25519MLKEM768 first on the mgmt/native +# TLS 1.3 listeners; classical curves stay in the list, so a client without ML-KEM still connects. # Keep `tls12` for GameStream/Moonlight clients that negotiate TLS 1.2. -rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12", "logging"] } +rustls = { version = "0.23", default-features = false, features = ["aws_lc_rs", "prefer-post-quantum", "std", "tls12", "logging"] } # Manual HTTPS+mTLS serve loop for the mgmt API (axum-server can't surface the peer cert): a # tokio-rustls handshake exposes the client cert, then hyper serves the axum Router with the # verified fingerprint injected as a request extension. Versions match the workspace lock. -tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12", "logging"] } +tokio-rustls = { version = "0.26", default-features = false, features = ["aws_lc_rs", "tls12", "logging"] } hyper = { version = "1", features = ["server", "http1", "http2"] } hyper-util = { version = "0.1", features = ["server", "server-auto", "tokio", "service"] } tower = { version = "0.5", features = ["util"] } @@ -122,10 +136,12 @@ serde_json = "1" # utoipa into axum 0.8 extractors; utoipa-axum collects `#[utoipa::path]` routes into the # spec; utoipa-scalar serves the interactive docs. Codegen-friendly: the spec is emitted # verbatim by the `openapi` subcommand. Control plane only — never the per-frame path. -# Plugin-store index signatures: ed25519 verification of a catalog document before any field of -# it is read (store/index.rs). Already in the tree via rustls — the workspace is ring-only, so this -# is the one signature primitive available without pulling aws-lc-sys (which fails on Windows CI). -ring = "0.17" +# SHA-256 over the downloaded installer and its signing-leaf DER (update/windows.rs) — Windows-only +# in practice, the plugin-store's ed25519 path re-exports pf-update-check's verifier. Already in the +# tree via rustls; its API is ring-compatible by design, which is what made the swap mechanical. +# `prebuilt-nasm`: see pf-update-check's copy — it keeps aws-lc-sys building on Windows x86_64 +# with no NASM on the box, whatever else the build happens to select. +aws-lc-rs = { version = "1", features = ["prebuilt-nasm"] } # Semver comparisons for the plugin store: `minHost` gating and the revocation list's version # ranges (`<0.3.2`). Already in the lockfile transitively. semver = "1" @@ -134,8 +150,9 @@ utoipa-axum = "0.2" utoipa-scalar = { version = "0.3", features = ["axum"] } [dev-dependencies] -# Drive the management API router in-process (no socket) in the handler tests. -tower = { version = "0.5", features = ["util"] } +# (`tower` drives the management API router in-process in the handler tests, but it is already a +# normal dependency above and those are visible to tests — the dev-dependency re-declaration was +# redundant.) http-body-util = "0.1" # Disposable directory fixtures for the Steam local-librarycache scan tests (library.rs). tempfile = "3" @@ -157,51 +174,21 @@ libc = "0.2" # Must match the pipewire crate ashpd 0.13 links (libspa/pipewire-sys `links` key is # unique per build), i.e. 0.9 — NOT the 0.10 the setup doc mentions. pipewire = "0.9" -# ashpd 0.13 uses the tokio runtime; a current-thread runtime drives the one-time -# portal handshake (control plane — never the per-frame path). -tokio = { version = "1", features = ["rt", "rt-multi-thread", "net", "time"] } -# Input injection into headless Sway via the wlroots virtual-input Wayland protocols -# (uinput won't reach a compositor running with WLR_LIBINPUT_NO_DEVICES=1). -wayland-client = "0.31" -wayland-protocols-wlr = { version = "0.3", features = ["client"] } -wayland-protocols-misc = { version = "0.3", features = ["client"] } -# `xdg-output` (zxdg_output_v1): the per-output *logical* geometry (post-scale size + global -# position), used by the KWin fake_input backend to map absolute coordinates under display scaling. -wayland-protocols = { version = "0.32", features = ["client"] } -# Codegen for KDE's `zkde_screencast_unstable_v1` (vendored in `protocols/`): create a KWin -# virtual output sized to the client's resolution and get its PipeWire node (KRdp's path). -# `wayland-backend` is referenced by the generated interface tables. -wayland-scanner = "0.31" -wayland-backend = "0.3" -# Parse `pw-dump` JSON to find gamescope's PipeWire node (gamescope backend). -serde_json = "1" +# (ashpd 0.13 drives the one-time portal handshake on tokio; the unconditional `tokio = "full"` +# in [dependencies] already covers that — this block used to re-declare a strict subset of it.) +# NOTE: the Wayland stack (wayland-client / -protocols{,-wlr,-misc} / -scanner / -backend), +# `xkbcommon`, `reis`, `khronos-egl`, `ash` and `usbip-sim` used to be declared here. The code that +# used them moved to `pf-inject` (virtual input, libei, USB/IP) and `pf-zerocopy` (EGL/Vulkan dmabuf) +# in the subsystem extraction, and each of those crates declares them itself — only the manifest +# entries were left behind, along with comments describing code this crate no longer contains. +# Verified unused before removal: zero `use`/path references across src/ + build.rs. # Read the Lutris library DB (`pga.db`) for the Lutris store provider. `bundled` vendors + compiles # SQLite (cc, already needed for ffmpeg/opus) so there's no system libsqlite3 runtime dependency — # clean for the deb/rpm/flatpak packaging. Opened read-only/immutable (Lutris may hold it open). rusqlite = { version = "0.40", features = ["bundled"] } -# Builds/validates the xkb keymap uploaded to the virtual keyboard + tracks modifier state. -xkbcommon = "0.8" -# libei (EI sender) for the portable input path on KWin/GNOME (RemoteDesktop portal). -# The `tokio` feature wires reis's event stream into tokio's reactor. -reis = { version = "0.6.1", features = ["tokio"] } -# `StreamExt::next` on reis's tokio event stream in the libei worker loop. -futures-util = "0.3" -# Zero-copy capture (plan §9): EGL imports the PipeWire dmabuf, CUDA maps it, NVENC encodes -# it with no CPU roundtrip. `khronos-egl` (dynamic = load the NVIDIA libEGL at runtime) gives -# eglCreateImage + the dma_buf import; the CUDA driver API (EGL interop) and libgbm are linked -# via hand-rolled FFI in `src/zerocopy/` (no Rust crate exposes the EGL-interop driver calls). -khronos-egl = { version = "6", features = ["dynamic"] } -# Vulkan bridge for LINEAR dmabufs (gamescope): import via VK_EXT_external_memory_dma_buf, -# GPU-copy into an exportable allocation, export OPAQUE_FD → cuImportExternalMemory (the -# officially-supported CUDA pairing; raw dmabuf fds are rejected by the desktop driver). -ash = "0.38" # `libcuda.so.1` is dlopen'd at runtime (NOT link-time) so one Linux binary runs on NVIDIA # (zero-copy via CUDA) AND on AMD/Intel (VAAPI, no NVIDIA driver present) — see `zerocopy::cuda`. libloading = "0.8" -# Vendored + trimmed `usbip` server core (no libusb) — presents a virtual Steam Deck over USB/IP -# so the local `vhci_hcd` attaches it: the shippable, Secure-Boot-clean, Steam-Input-promotable -# virtual-Deck transport on non-SteamOS hosts (`inject/linux/steam_usbip.rs`). See the crate's NOTICE. -usbip-sim = { path = "vendor/usbip-sim" } [target.'cfg(target_os = "windows")'.dependencies] # Windows host backends. `windows` covers the Win32/CCD APIs the SudoVDA virtual-display backend @@ -300,12 +287,12 @@ winreg = "0.56" roxmltree = "0.21" # WASAPI loopback audio capture (default render endpoint -> 48 kHz stereo f32 for the Opus path). wasapi = "0.23" -# Shared host<->driver wire contract for the pf-vdisplay IddCx virtual-display backend -# (vdisplay/pf_vdisplay.rs): the control-plane IOCTL codes + `#[repr(C)] Pod` request/reply structs, -# defined ONCE so host<->driver ABI drift is a compile error. `bytemuck` serializes those structs -# to/from the DeviceIoControl byte buffers. +# Shared host<->driver wire contract for the pf-vdisplay IddCx virtual-display backend: the +# control-plane IOCTL codes + `#[repr(C)] Pod` request/reply structs, defined ONCE so host<->driver +# ABI drift is a compile error (used from `capture.rs`). The `bytemuck` that serializes those +# structs into the DeviceIoControl buffers is pf-vdisplay's dependency, not this crate's — it was +# declared here too, unused. pf-driver-proto = { path = "../pf-driver-proto" } -bytemuck = { version = "1.19", features = ["derive"] } # The encode feature flags now FORWARD to the pf-encode subsystem crate (the heavy encoder deps — # ffmpeg-next, the NVENC SDK, openh264, pyrowave-sys — moved there, plan §W6). Selecting a feature diff --git a/crates/punktfunk-host/src/gamestream/mod.rs b/crates/punktfunk-host/src/gamestream/mod.rs index b5beaa99..9a42eb1d 100644 --- a/crates/punktfunk-host/src/gamestream/mod.rs +++ b/crates/punktfunk-host/src/gamestream/mod.rs @@ -459,7 +459,7 @@ pub fn serve( let rt = tokio::runtime::Runtime::new().context("build tokio runtime")?; rt.block_on(async move { // rustls needs a process-wide crypto provider before any TLS config is built. - let _ = rustls::crypto::ring::default_provider().install_default(); + let _ = rustls::crypto::aws_lc_rs::default_provider().install_default(); let native_opts = crate::native::native_serve_opts(&native); // The hook runner consumes the live event tail for the host's lifetime — spawned BEFORE // `host.started` is emitted so operator hooks observe the full lifecycle (RFC §6). diff --git a/crates/punktfunk-host/src/gamestream/tls.rs b/crates/punktfunk-host/src/gamestream/tls.rs index a5643eed..33910fd7 100644 --- a/crates/punktfunk-host/src/gamestream/tls.rs +++ b/crates/punktfunk-host/src/gamestream/tls.rs @@ -292,7 +292,7 @@ fn build_server_config( key_pem: &str, mandatory: bool, ) -> Result> { - let provider = Arc::new(rustls::crypto::ring::default_provider()); + let provider = Arc::new(rustls::crypto::aws_lc_rs::default_provider()); // PEM parsing via rustls-pki-types (the same `PemObject` path punktfunk-core/quic.rs uses), // so we don't pull the unmaintained `rustls-pemfile`. let certs = CertificateDer::pem_slice_iter(cert_pem.as_bytes()) diff --git a/crates/punktfunk-host/src/hooks.rs b/crates/punktfunk-host/src/hooks.rs index 8fa867e0..5f725d83 100644 --- a/crates/punktfunk-host/src/hooks.rs +++ b/crates/punktfunk-host/src/hooks.rs @@ -811,11 +811,12 @@ fn webhook_host_is_internal(url: &str) -> bool { fn post_webhook(url: &str, json: &str, secret_file: Option<&std::path::Path>) { // TLS is verified (ureq's default rustls roots); redirects are never followed, so a // compromised receiver can't bounce the POST cross-origin (RFC §9.5). - let agent = ureq::builder() - .redirects(0) - .timeout(WEBHOOK_TIMEOUT) - .build(); - let mut req = agent.post(url).set("Content-Type", "application/json"); + let agent: ureq::Agent = ureq::Agent::config_builder() + .max_redirects(0) + .timeout_global(Some(WEBHOOK_TIMEOUT)) + .build() + .into(); + let mut req = agent.post(url).header("Content-Type", "application/json"); if let Some(path) = secret_file { match std::fs::read(path) { Ok(secret) => { @@ -829,7 +830,7 @@ fn post_webhook(url: &str, json: &str, secret_file: Option<&std::path::Path>) { }; mac.update(json.as_bytes()); let sig = hex::encode(mac.finalize().into_bytes()); - req = req.set("X-Punktfunk-Signature", &format!("sha256={sig}")); + req = req.header("X-Punktfunk-Signature", &format!("sha256={sig}")); } Err(e) => { // A configured-but-unreadable secret means the operator WANTS signing — @@ -840,9 +841,9 @@ fn post_webhook(url: &str, json: &str, secret_file: Option<&std::path::Path>) { } } } - match req.send_string(json) { - Ok(resp) => tracing::debug!(url, status = resp.status(), "webhook delivered"), - Err(ureq::Error::Status(code, _)) => { + match req.send(json) { + Ok(resp) => tracing::debug!(url, status = resp.status().as_u16(), "webhook delivered"), + Err(ureq::Error::StatusCode(code)) => { tracing::warn!(url, status = code, "webhook rejected by receiver") } Err(e) => tracing::warn!(url, error = %e, "webhook delivery failed"), diff --git a/crates/punktfunk-host/src/library/art.rs b/crates/punktfunk-host/src/library/art.rs index d5422627..90962798 100644 --- a/crates/punktfunk-host/src/library/art.rs +++ b/crates/punktfunk-host/src/library/art.rs @@ -86,14 +86,21 @@ fn warm_art_once() { /// HTTP GET + parse JSON with a bounded timeout. `None` on any network/parse failure (best-effort — /// art is non-essential, so a failure just leaves the title-only card). fn fetch_json(url: &str) -> Option { - let agent = ureq::AgentBuilder::new() - .timeout(std::time::Duration::from_secs(10)) + let agent: ureq::Agent = ureq::Agent::config_builder() + .timeout_global(Some(std::time::Duration::from_secs(10))) // Don't follow redirects — a redirect target (`3xx` → `http://169.254.169.254/…` or an // internal host) would be an SSRF pivot from the privileged host. Matches the webhook path // (security-review 2026-07-17). A rare legitimately-redirecting CDN just yields no art. - .redirects(0) - .build(); - let body = agent.get(url).call().ok()?.into_string().ok()?; + .max_redirects(0) + .build() + .into(); + let body = agent + .get(url) + .call() + .ok()? + .body_mut() + .read_to_string() + .ok()?; serde_json::from_str(&body).ok() } @@ -103,7 +110,6 @@ fn fetch_json(url: &str) -> Option { /// network/decoder error, or empty body. Blocking (ureq) — call off the async runtime. pub(crate) fn fetch_image(url: &str) -> Option<(Vec, String)> { use base64::Engine as _; - use std::io::Read as _; if let Some(rest) = url.strip_prefix("data:") { // data:[][;base64], let (meta, data) = rest.split_once(',')?; @@ -125,22 +131,27 @@ pub(crate) fn fetch_image(url: &str) -> Option<(Vec, String)> { if !(url.starts_with("http://") || url.starts_with("https://")) { return None; } - let agent = ureq::AgentBuilder::new() - .timeout(std::time::Duration::from_secs(10)) + let agent: ureq::Agent = ureq::Agent::config_builder() + .timeout_global(Some(std::time::Duration::from_secs(10))) // Don't follow redirects (SSRF pivot): this is called on launcher-cache- and custom-entry- // supplied URLs, so a `3xx` to an internal/metadata endpoint must not be chased by the // privileged host. Matches the webhook path (security-review 2026-07-17). - .redirects(0) - .build(); - let resp = agent.get(url).call().ok()?; + .max_redirects(0) + .build() + .into(); + let mut resp = agent.get(url).call().ok()?; let ctype = resp - .header("Content-Type") + .headers() + .get("Content-Type") + .and_then(|v| v.to_str().ok()) .unwrap_or("image/jpeg") .to_string(); - let mut bytes = Vec::new(); - resp.into_reader() - .take(8 * 1024 * 1024) - .read_to_end(&mut bytes) + // The 8 MiB cap is now the body reader's own limit rather than a `take()` on the stream. + let bytes = resp + .body_mut() + .with_config() + .limit(8 * 1024 * 1024) + .read_to_vec() .ok()?; (!bytes.is_empty()).then_some((bytes, ctype)) } diff --git a/crates/punktfunk-host/src/library/plugin_launch.rs b/crates/punktfunk-host/src/library/plugin_launch.rs index 04c5caee..86238d30 100644 --- a/crates/punktfunk-host/src/library/plugin_launch.rs +++ b/crates/punktfunk-host/src/library/plugin_launch.rs @@ -32,7 +32,6 @@ //! itself would land it outside the captured session and outside that lifetime. use super::*; -use std::io::Read; use std::time::Duration; /// The whole ask, end to end. A plugin resolving one of its own entries is a local lookup against @@ -96,23 +95,26 @@ pub fn ask_plugin_launch(plugin: &str, key: &str) -> Option { ); return None; }; - let agent = ureq::AgentBuilder::new().timeout(ASK_TIMEOUT).build(); + let agent: ureq::Agent = ureq::Agent::config_builder() + .timeout_global(Some(ASK_TIMEOUT)) + .build() + .into(); // Loopback + the plugin's own per-boot secret, exactly what the console proxy presents. The // registration stores a PORT, never an address (mgmt::plugins D5), so this can only ever dial // this machine. - // `send_string` + an explicit content type rather than `send_json`: that one needs ureq's `json` + // `send` with an explicit content type rather than `send_json`: that one needs ureq's `json` // feature, and the body is one field. let body = serde_json::json!({ "entry": key }).to_string(); let resp = match agent .post(&format!("http://127.0.0.1:{}/__launch", cred.port)) - .set("Authorization", &format!("Bearer {}", cred.secret)) - .set("Content-Type", "application/json") - .send_string(&body) + .header("Authorization", &format!("Bearer {}", cred.secret)) + .header("Content-Type", "application/json") + .send(&body) { Ok(r) => r, // A plugin that does not know the entry says so with a 404 — the answer a FORGED entry gets, // and the reason planting one is not enough to make the host run anything. - Err(ureq::Error::Status(404, _)) => { + Err(ureq::Error::StatusCode(404)) => { tracing::warn!( plugin, entry = key, @@ -120,7 +122,7 @@ pub fn ask_plugin_launch(plugin: &str, key: &str) -> Option { ); return None; } - Err(ureq::Error::Status(code, _)) => { + Err(ureq::Error::StatusCode(code)) => { tracing::warn!( plugin, entry = key, @@ -139,15 +141,20 @@ pub fn ask_plugin_launch(plugin: &str, key: &str) -> Option { return None; } }; - let mut buf = Vec::new(); - if let Err(e) = resp - .into_reader() - .take((MAX_BODY + 1) as u64) - .read_to_end(&mut buf) + let mut resp = resp; + // cap+1 so an over-cap answer is caught by the length check below rather than truncated. + let buf = match resp + .body_mut() + .with_config() + .limit((MAX_BODY + 1) as u64) + .read_to_vec() { - tracing::warn!(plugin, entry = key, error = %e, "plugin launch: reading the answer failed"); - return None; - } + Ok(b) => b, + Err(e) => { + tracing::warn!(plugin, entry = key, error = %e, "plugin launch: reading the answer failed"); + return None; + } + }; if buf.len() > MAX_BODY { tracing::warn!( plugin, @@ -226,7 +233,7 @@ fn validate_reply(plugin: &str, key: &str, reply: LaunchReply) -> Option) -> Fetched { if !source.url.starts_with("https://") { return Fetched::Failed("source url must be https".into()); } - let agent = ureq::AgentBuilder::new() - .timeout(FETCH_TIMEOUT) + let agent: ureq::Agent = ureq::Agent::config_builder() + .timeout_global(Some(FETCH_TIMEOUT)) // A signed document doesn't need many hops to reach us; a redirect chain is a good way to // waste a host's time. - .redirects(3) - .user_agent(&format!("punktfunk-host/{}", super::index::host_version())) - .build(); + .max_redirects(3) + .user_agent(format!("punktfunk-host/{}", super::index::host_version())) + .build() + .into(); let mut req = agent.get(&source.url); if let Some(tag) = etag { - req = req.set("If-None-Match", tag); + req = req.header("If-None-Match", tag); } - let resp = match req.call() { + let mut resp = match req.call() { // `ureq` only turns status >= 400 into `Err(Status)`, so a conditional request's 304 // arrives here as **Ok with an empty body** — not as an error. Reading it as an error arm // (the intuitive reading) means every refresh after the first one verifies a signature @@ -61,13 +61,17 @@ pub(crate) fn fetch(source: &Source, etag: Option<&str>) -> Fetched { // never picking up a new entry. Found on-glass; pinned by `ureq_returns_304_as_ok`. Ok(r) if r.status() == 304 => return Fetched::NotModified, Ok(r) => r, - Err(ureq::Error::Status(code, _)) => { + Err(ureq::Error::StatusCode(code)) => { return Fetched::Failed(format!("index fetch returned HTTP {code}")) } Err(e) => return Fetched::Failed(format!("index fetch failed: {e}")), }; - let new_etag = resp.header("etag").map(str::to_string); - let body = match read_capped(resp) { + let new_etag = resp + .headers() + .get("etag") + .and_then(|v| v.to_str().ok()) + .map(str::to_string); + let body = match read_capped(&mut resp) { Ok(b) => b, Err(e) => return Fetched::Failed(e), }; @@ -76,7 +80,7 @@ pub(crate) fn fetch(source: &Source, etag: Option<&str>) -> Fetched { let keys = source.keys(); if !keys.is_empty() { let sig = match agent.get(&source.sig_url()).call() { - Ok(r) => match read_capped(r) { + Ok(mut r) => match read_capped(&mut r) { Ok(b) => b, Err(e) => return Fetched::Failed(format!("signature: {e}")), }, @@ -105,11 +109,16 @@ pub(crate) fn fetch(source: &Source, etag: Option<&str>) -> Fetched { } /// Read a response body, refusing anything past the cap without buffering it. -fn read_capped(resp: ureq::Response) -> Result, String> { - let mut buf = Vec::new(); - resp.into_reader() - .take((MAX_INDEX_BYTES + 1) as u64) - .read_to_end(&mut buf) +fn read_capped(resp: &mut ureq::http::Response) -> Result, String> { + // Limit is cap+1 so a body of exactly cap+1 comes back intact and is rejected by the length + // check below with our own message; anything larger trips ureq's own limit error. Either way it + // is an Err — unlike ureq 2's `take()`, which truncated silently and then failed the signature + // check with a message that pointed at the wrong thing. + let buf = resp + .body_mut() + .with_config() + .limit((MAX_INDEX_BYTES + 1) as u64) + .read_to_vec() .map_err(|e| format!("reading the response body failed: {e}"))?; if buf.len() > MAX_INDEX_BYTES { return Err(format!("response exceeds the {MAX_INDEX_BYTES}-byte cap")); @@ -257,18 +266,34 @@ mod tests { /// on someone's host. #[test] fn ureq_returns_304_as_ok() { - use std::io::Write as _; + use std::io::{Read as _, Write as _}; let listener = std::net::TcpListener::bind("127.0.0.1:0").unwrap(); let addr = listener.local_addr().unwrap(); let server = std::thread::spawn(move || { if let Ok((mut sock, _)) = listener.accept() { + // Drain the request BEFORE answering. Closing a socket that still has unread + // received data makes Windows send an RST rather than a FIN, which destroys the + // response we just wrote — the client then sees a transport error (os error 10053) + // instead of the 304 this test exists to pin. A GET has no body, so the header + // terminator is the whole request. + let mut buf = Vec::new(); + let mut chunk = [0u8; 1024]; + while let Ok(n) = sock.read(&mut chunk) { + if n == 0 { + break; + } + buf.extend_from_slice(&chunk[..n]); + if buf.windows(4).any(|w| w == b"\r\n\r\n") { + break; + } + } let _ = sock.write_all(b"HTTP/1.1 304 Not Modified\r\nETag: \"x\"\r\n\r\n"); let _ = sock.flush(); } }); let resp = ureq::get(&format!("http://{addr}/index.json")) - .set("If-None-Match", "\"x\"") + .header("If-None-Match", "\"x\"") .call(); let _ = server.join(); diff --git a/crates/punktfunk-host/src/store/jobs.rs b/crates/punktfunk-host/src/store/jobs.rs index a6260dbe..ade572c0 100644 --- a/crates/punktfunk-host/src/store/jobs.rs +++ b/crates/punktfunk-host/src/store/jobs.rs @@ -26,7 +26,7 @@ use super::index::{scope_of, Entry}; use super::manifest::{self, Record, Tier}; use anyhow::{bail, Context, Result}; use std::collections::VecDeque; -use std::io::{BufRead, BufReader, Read}; +use std::io::{BufRead, BufReader}; use std::process::{Command, Stdio}; use std::sync::Mutex; use std::time::{Duration, Instant}; @@ -564,25 +564,27 @@ fn registry_integrity(registry: &str, pkg: &str, version: &str) -> Result { + ureq::Error::StatusCode(404) => { anyhow::anyhow!("the registry does not know this package") } other => anyhow::anyhow!("registry request failed: {other}"), })?; - let mut body = Vec::new(); - resp.into_reader() - .take(16 * 1024 * 1024) - .read_to_end(&mut body) + let body = resp + .body_mut() + .with_config() + .limit(16 * 1024 * 1024) + .read_to_vec() .context("read the registry response")?; let doc: serde_json::Value = serde_json::from_slice(&body).context("registry returned invalid JSON")?; diff --git a/crates/punktfunk-host/src/update/windows.rs b/crates/punktfunk-host/src/update/windows.rs index 8d43510b..66b5ca28 100644 --- a/crates/punktfunk-host/src/update/windows.rs +++ b/crates/punktfunk-host/src/update/windows.rs @@ -168,27 +168,34 @@ fn download(url: &str, part: &Path, progress: &dyn Fn(u64, Option)) -> Resu if !url.starts_with("https://") { return Err("installer url must be https".into()); } - let agent = ureq::AgentBuilder::new() - .timeout_connect(std::time::Duration::from_secs(15)) - .redirects(3) - .user_agent(&format!( + // Connect timeout only, deliberately no global one: this streams an installer that is tens of + // MB, and a whole-request deadline would abort a slow-but-healthy download. + let agent: ureq::Agent = ureq::Agent::config_builder() + .timeout_connect(Some(std::time::Duration::from_secs(15))) + .max_redirects(3) + .user_agent(format!( "punktfunk-host/{} (update-apply)", env!("PUNKTFUNK_VERSION") )) - .build(); + .build() + .into(); let existing = std::fs::metadata(part).map(|m| m.len()).unwrap_or(0); let mut req = agent.get(url); if existing > 0 { - req = req.set("Range", &format!("bytes={existing}-")); + req = req.header("Range", &format!("bytes={existing}-")); } let resp = req.call().map_err(|e| match e { - ureq::Error::Status(code, _) => format!("download returned HTTP {code}"), + ureq::Error::StatusCode(code) => format!("download returned HTTP {code}"), other => format!("download failed: {other}"), })?; let resumed = resp.status() == 206; - let content_len: Option = resp.header("content-length").and_then(|v| v.parse().ok()); + let content_len: Option = resp + .headers() + .get("content-length") + .and_then(|v| v.to_str().ok()) + .and_then(|v| v.parse().ok()); let total = content_len.map(|l| if resumed { existing + l } else { l }); if let Some(t) = total { preflight_disk(part, t.saturating_mul(DISK_MARGIN))?; @@ -211,7 +218,9 @@ fn download(url: &str, part: &Path, progress: &dyn Fn(u64, Option)) -> Resu }; progress(received, total); - let mut reader = resp.into_reader(); + // Unlimited reader, not `read_to_vec` — the installer is streamed to disk in 64 KiB chunks so + // it never lands in memory, and ureq 3's body-read caps do not apply to this path. + let mut reader = resp.into_body().into_reader(); let mut buf = [0u8; 64 * 1024]; loop { let n = reader.read(&mut buf).map_err(|e| format!("read: {e}"))?; @@ -234,7 +243,7 @@ fn download(url: &str, part: &Path, progress: &dyn Fn(u64, Option)) -> Resu fn verify_sha256(path: &Path, expected_hex: &str) -> Result<(), String> { let mut file = std::fs::File::open(path).map_err(|e| format!("open for hashing: {e}"))?; - let mut ctx = ring::digest::Context::new(&ring::digest::SHA256); + let mut ctx = aws_lc_rs::digest::Context::new(&aws_lc_rs::digest::SHA256); let mut buf = [0u8; 128 * 1024]; loop { let n = file @@ -366,7 +375,7 @@ pub(crate) fn verify_authenticode(path: &Path, pins: &[String]) -> Result<(), St // cert context above; the slice is consumed (hashed) before the state is closed. let der = unsafe { std::slice::from_raw_parts(leaf.pbCertEncoded, leaf.cbCertEncoded as usize) }; - let fp = hex(ring::digest::digest(&ring::digest::SHA256, der).as_ref()); + let fp = hex(aws_lc_rs::digest::digest(&aws_lc_rs::digest::SHA256, der).as_ref()); if !pins.iter().any(|p| p.eq_ignore_ascii_case(&fp)) { return Err(format!( "installer signing-leaf fingerprint {fp} matches none of the manifest's \ diff --git a/crates/punktfunk-tray/Cargo.toml b/crates/punktfunk-tray/Cargo.toml index db0644ca..14e33a4b 100644 --- a/crates/punktfunk-tray/Cargo.toml +++ b/crates/punktfunk-tray/Cargo.toml @@ -22,17 +22,20 @@ anyhow = "1" [target.'cfg(any(windows, target_os = "linux"))'.dependencies] serde = { version = "1", features = ["derive"] } serde_json = "1" -# Loopback HTTPS poll of GET /api/v1/local/summary. Same sync ureq + rustls(ring) stack and -# custom-verifier pattern as the Linux client's library fetch (crates/pf-client-core/src/library.rs) — -# but ring-only (no default aws-lc-rs provider: it needs a C toolchain per target and the agent -# pins the ring provider explicitly anyway). -ureq = { version = "2", default-features = false, features = ["tls"] } -rustls = { version = "0.23", default-features = false, features = ["ring", "logging", "std", "tls12"] } +# Loopback HTTPS poll of GET /api/v1/local/summary. Same sync ureq + rustls stack and +# custom-verifier pattern as the Linux client's library fetch (crates/pf-client-core/src/library.rs), +# on the same aws-lc-rs backend as the rest of the tree (the agent pins the provider explicitly). +# ⚠ `rustls-no-provider`, NEVER the default `rustls` feature — that one pulls `_ring`. +ureq = { version = "3", default-features = false, features = [ + "rustls-no-provider", + "rustls-webpki-roots", +] } +rustls = { version = "0.23", default-features = false, features = ["aws_lc_rs", "prefer-post-quantum", "logging", "std", "tls12"] } # The one shared cert-fingerprint pin verifier (`punktfunk_core::tls::PinVerify`) + fingerprint # hash, instead of the tray hand-rolling its own copy on a trust boundary. The light `tls` feature -# is rustls + sha2 only (no QUIC runtime / tokio), so this stays a lean helper; core is a pure-Rust -# leaf (no C toolchain), unlike the host dependency ruled out above. -punktfunk-core = { path = "../punktfunk-core", default-features = false, features = ["tls"] } +# is rustls + sha2 only (no QUIC runtime / tokio), so this stays a lean helper — much smaller than +# the host dependency ruled out above, though rustls's aws-lc-rs backend does mean a C compiler. +punktfunk-core = { path = "../punktfunk-core", default-features = false, features = ["tls", "ureq-tls"] } [target.'cfg(windows)'.dependencies] # SCM QUERY_STATUS works unprivileged — the service-state probe. Same crate the host service uses. diff --git a/crates/punktfunk-tray/src/main.rs b/crates/punktfunk-tray/src/main.rs index 6f6eef46..68268172 100644 --- a/crates/punktfunk-tray/src/main.rs +++ b/crates/punktfunk-tray/src/main.rs @@ -79,6 +79,10 @@ fn parse_args() -> anyhow::Result { } fn main() -> anyhow::Result<()> { + // punktfunk-core is a Windows/Linux-only dependency here (the macOS build is a stub), so the + // provider install follows the same cfg as `run`. + #[cfg(any(windows, target_os = "linux"))] + punktfunk_core::tls::install_default_provider(); let args = parse_args()?; run(args) } diff --git a/crates/punktfunk-tray/src/status.rs b/crates/punktfunk-tray/src/status.rs index bb78b946..4c1f5527 100644 --- a/crates/punktfunk-tray/src/status.rs +++ b/crates/punktfunk-tray/src/status.rs @@ -254,7 +254,7 @@ fn poll_loop( fn probe_console(agent: &ureq::Agent, url: &str) -> bool { match agent.get(url).call() { Ok(_) => true, - Err(ureq::Error::Status(..)) => true, + Err(ureq::Error::StatusCode(..)) => true, Err(_) => false, } } @@ -262,7 +262,13 @@ fn probe_console(agent: &ureq::Agent, url: &str) -> bool { // ── Summary fetch (loopback HTTPS) ────────────────────────────────────────────────────────────── fn fetch_summary(agent: &ureq::Agent, url: &str) -> Option { - let body = agent.get(url).call().ok()?.into_string().ok()?; + let body = agent + .get(url) + .call() + .ok()? + .body_mut() + .read_to_string() + .ok()?; serde_json::from_str(&body).ok() } @@ -310,25 +316,29 @@ pub fn punktfunk_config_dir() -> Option { None } -/// A sync HTTPS agent over the same rustls(ring) stack the rest of the workspace uses, with a +/// A sync HTTPS agent over the same rustls(aws-lc-rs) stack the rest of the workspace uses, with a /// pin-or-accept-any verifier (the Linux client's `PinVerify` pattern, `library.rs`). fn agent(pin: Option<[u8; 32]>) -> ureq::Agent { - let provider = Arc::new(rustls::crypto::ring::default_provider()); + let provider = Arc::new(rustls::crypto::aws_lc_rs::default_provider()); let cfg = rustls::ClientConfig::builder_with_provider(provider) .with_safe_default_protocol_versions() .expect("rustls default protocol versions") .dangerous() .with_custom_certificate_verifier(Arc::new(punktfunk_core::tls::PinVerify::new(pin))) .with_no_client_auth(); - ureq::AgentBuilder::new() - .tls_config(Arc::new(cfg)) - .timeout_connect(Duration::from_secs(2)) - .timeout(Duration::from_secs(2)) - // No redirect-following. Neither user of this agent wants it: the summary is a terminal - // JSON route, and the console probe treats any HTTP answer (302 included) as "up", so - // chasing the hop only spends the 2 s budget re-rendering a page nobody reads. - .redirects(0) - .build() + // ureq's `TlsConfig` cannot install a custom verifier, so the agent wraps this `ClientConfig` + // directly (the glue lives in punktfunk-core, shared with the desktop client's library fetch). + punktfunk_core::tls::ureq_agent::agent( + Arc::new(cfg), + ureq::Agent::config_builder() + .timeout_connect(Some(Duration::from_secs(2))) + .timeout_global(Some(Duration::from_secs(2))) + // No redirect-following. Neither user of this agent wants it: the summary is a + // terminal JSON route, and the console probe treats any HTTP answer (302 included) as + // "up", so chasing the hop only spends the 2 s budget re-rendering a page nobody reads. + .max_redirects(0) + .build(), + ) } // ── Service-manager probe ─────────────────────────────────────────────────────────────────────── diff --git a/packaging/windows/drivers/Cargo.lock b/packaging/windows/drivers/Cargo.lock index 1063e830..5383e0ae 100644 --- a/packaging/windows/drivers/Cargo.lock +++ b/packaging/windows/drivers/Cargo.lock @@ -407,7 +407,6 @@ version = "0.0.1" dependencies = [ "pf-driver-proto", "pf-umdf-util", - "wdk", "wdk-build", "wdk-sys", ] @@ -418,7 +417,6 @@ version = "0.0.1" dependencies = [ "pf-driver-proto", "pf-umdf-util", - "wdk", "wdk-build", "wdk-sys", ] @@ -437,7 +435,6 @@ version = "0.0.1" dependencies = [ "pf-driver-proto", "thiserror", - "wdk", "wdk-build", "wdk-iddcx", "wdk-sys", @@ -450,7 +447,6 @@ version = "0.0.1" dependencies = [ "pf-driver-proto", "pf-umdf-util", - "wdk", "wdk-build", "wdk-sys", ] @@ -754,19 +750,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" -[[package]] -name = "wdk" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd496a19ec75c3d98f8be805f62ebde4651fc01babf681b832d8bae9c584d25" -dependencies = [ - "cfg-if", - "tracing", - "tracing-subscriber", - "wdk-build", - "wdk-sys", -] - [[package]] name = "wdk-build" version = "0.5.1" @@ -818,7 +801,6 @@ name = "wdk-probe" version = "0.0.1" dependencies = [ "pf-driver-proto", - "wdk", "wdk-build", "wdk-sys", ] diff --git a/packaging/windows/drivers/Cargo.toml b/packaging/windows/drivers/Cargo.toml index 837613b0..67578084 100644 --- a/packaging/windows/drivers/Cargo.toml +++ b/packaging/windows/drivers/Cargo.toml @@ -27,7 +27,12 @@ unsafe_op_in_unsafe_fn = "deny" undocumented_unsafe_blocks = "deny" [workspace.dependencies] -wdk = "0.4.1" +# NOTE: the high-level `wdk` crate (0.4.1) used to be declared here and taken by five driver +# crates. None of them ever referenced `wdk::` — every driver goes through `wdk_sys`, including +# the WDF call macro, which wdk-sys re-exports (see pf-umdf-util, a full WDF crate that never +# declared `wdk` either). Removing it drops a normal (linked) dependency from all five. +# `tracing`/`tracing-subscriber` are still in the lock afterwards, but only as wdk-sys BUILD +# dependencies — build-script machinery, not code in the shipped DLLs. wdk-sys = "0.5.1" wdk-build = "0.5.1" wdk-iddcx = { path = "wdk-iddcx" } @@ -36,8 +41,8 @@ pf-driver-proto = { path = "../../../crates/pf-driver-proto" } # Vendored windows-drivers-rs 0.5.1 (the published, self-contained crates) + an added `iddcx` # ApiSubset (M1 — bindgens iddcx/1.10/IddCx.h reusing wdk_default for WDF type-identity). Redirect ALL -# wdk-sys/wdk-build refs (incl. wdk 0.4.1's transitive deps) to the patched copies so there is exactly -# one (iddcx-capable) wdk-sys in the graph. Pinned; do not chase upstream. +# wdk-sys/wdk-build refs to the patched copies so there is exactly one (iddcx-capable) wdk-sys in the +# graph. Pinned; do not chase upstream. [patch.crates-io] wdk-build = { path = "vendor/wdk-build" } wdk-sys = { path = "vendor/wdk-sys" } diff --git a/packaging/windows/drivers/pf-gamepad/Cargo.toml b/packaging/windows/drivers/pf-gamepad/Cargo.toml index 24343c3b..b3c2bfa7 100644 --- a/packaging/windows/drivers/pf-gamepad/Cargo.toml +++ b/packaging/windows/drivers/pf-gamepad/Cargo.toml @@ -23,7 +23,6 @@ crate-type = ["cdylib"] wdk-build.workspace = true [dependencies] -wdk.workspace = true wdk-sys.workspace = true pf-driver-proto.workspace = true pf-umdf-util.workspace = true @@ -31,7 +30,7 @@ pf-umdf-util.workspace = true [features] default = ["hid"] hid = ["wdk-sys/hid"] -nightly = ["wdk-sys/nightly", "wdk/nightly"] +nightly = ["wdk-sys/nightly"] [lints] workspace = true diff --git a/packaging/windows/drivers/pf-mouse/Cargo.toml b/packaging/windows/drivers/pf-mouse/Cargo.toml index 9dfa2143..5b1550d4 100644 --- a/packaging/windows/drivers/pf-mouse/Cargo.toml +++ b/packaging/windows/drivers/pf-mouse/Cargo.toml @@ -21,7 +21,6 @@ crate-type = ["cdylib"] wdk-build.workspace = true [dependencies] -wdk.workspace = true wdk-sys.workspace = true pf-driver-proto.workspace = true pf-umdf-util.workspace = true @@ -29,7 +28,7 @@ pf-umdf-util.workspace = true [features] default = ["hid"] hid = ["wdk-sys/hid"] -nightly = ["wdk-sys/nightly", "wdk/nightly"] +nightly = ["wdk-sys/nightly"] [lints] workspace = true diff --git a/packaging/windows/drivers/pf-vdisplay/Cargo.toml b/packaging/windows/drivers/pf-vdisplay/Cargo.toml index e408a0af..7229996d 100644 --- a/packaging/windows/drivers/pf-vdisplay/Cargo.toml +++ b/packaging/windows/drivers/pf-vdisplay/Cargo.toml @@ -20,7 +20,6 @@ crate-type = ["cdylib"] wdk-build.workspace = true [dependencies] -wdk.workspace = true wdk-sys = { workspace = true, features = ["iddcx"] } wdk-iddcx.workspace = true pf-driver-proto.workspace = true diff --git a/packaging/windows/drivers/pf-xusb/Cargo.toml b/packaging/windows/drivers/pf-xusb/Cargo.toml index 924a5e1a..46189588 100644 --- a/packaging/windows/drivers/pf-xusb/Cargo.toml +++ b/packaging/windows/drivers/pf-xusb/Cargo.toml @@ -21,14 +21,13 @@ crate-type = ["cdylib"] wdk-build.workspace = true [dependencies] -wdk.workspace = true wdk-sys.workspace = true pf-driver-proto.workspace = true pf-umdf-util.workspace = true [features] default = [] -nightly = ["wdk-sys/nightly", "wdk/nightly"] +nightly = ["wdk-sys/nightly"] [lints] workspace = true diff --git a/packaging/windows/drivers/wdk-probe/Cargo.toml b/packaging/windows/drivers/wdk-probe/Cargo.toml index d2b768e6..c0b813e6 100644 --- a/packaging/windows/drivers/wdk-probe/Cargo.toml +++ b/packaging/windows/drivers/wdk-probe/Cargo.toml @@ -21,7 +21,6 @@ crate-type = ["cdylib"] wdk-build.workspace = true [dependencies] -wdk.workspace = true # `iddcx` feature → wdk-sys runs the IddCx bindgen pass (generate_iddcx) + compiles `wdk_sys::iddcx`. # This is the M1 make-or-break: does IddCx.h bindgen in wdk-sys's config without a header conflict, and # do its WDF/DXGI types resolve to wdk-sys's (so the generated module compiles)? diff --git a/packaging/windows/pf-vkhdr-layer/Cargo.lock b/packaging/windows/pf-vkhdr-layer/Cargo.lock new file mode 100644 index 00000000..dc5235ca --- /dev/null +++ b/packaging/windows/pf-vkhdr-layer/Cargo.lock @@ -0,0 +1,41 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + +[[package]] +name = "pf-vkhdr-layer" +version = "0.1.0" +dependencies = [ + "ash", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"