diff --git a/.mstar/knowledge/architecture-patterns/connect-ts-noise-xx-stack.md b/.mstar/knowledge/architecture-patterns/connect-ts-noise-xx-stack.md index db55bdbe..406bf60d 100644 --- a/.mstar/knowledge/architecture-patterns/connect-ts-noise-xx-stack.md +++ b/.mstar/knowledge/architecture-patterns/connect-ts-noise-xx-stack.md @@ -1,18 +1,30 @@ --- module: spoke-connect date: 2026-08-04 +last_updated: 2026-09-22 problem_type: architecture_pattern category: architecture-patterns severity: high -applies_when: ["porting the Noise XX transport to another language or runtime", "shipping an opt-in crypto subpath inside a published package", "proving wire interop against rust-libp2p without a live peer in CI"] -tags: [spoke-connect, noise-xx, libp2p, golden-transcript, interop, subpath, bundle-isolation, snow] +applies_when: + - "porting the Noise XX transport to another language or runtime" + - "shipping an opt-in crypto subpath inside a published package" + - "proving wire interop against rust-libp2p without a live peer in CI" +tags: + - spoke-connect + - noise-xx + - libp2p + - golden-transcript + - interop + - subpath + - bundle-isolation + - snow --- # Pure-TS Noise XX stack: rust-libp2p interop and opt-in subpath isolation ## Context -`@42ch/spoke-connect` ships a thin default client (WebSocket ordered-stream transport, JCS + Ed25519 identity, the session-core parity rules). Integrators that need to join a libp2p-noise mesh — the transport of the Rust reference `crates/spoke-connect`, which composes `libp2p::noise::Config::new` over libp2p 0.56.0 — get a first-party pure-TypeScript `Noise_XX_25519_ChaChaPoly_SHA256` stack behind the opt-in `./noise` subpath. Two hard problems were solved: (1) proving byte-level wire interop with rust-libp2p deterministically in CI without a live Rust peer; (2) shipping the crypto stack without widening the default bundle's dependency surface. Both solutions generalize to every future language Noise port and every future opt-in crypto subpath. +`@42ch/spoke-connect` ships a thin default client (WebSocket ordered-stream transport, JCS + Ed25519 identity, the session-core parity rules). Integrators that need to join a libp2p-noise mesh — the transport of the Rust reference `crates/spoke-connect`, which composes `libp2p::noise::Config::new` over libp2p 0.57.0 — get a first-party pure-TypeScript `Noise_XX_25519_ChaChaPoly_SHA256` stack behind the opt-in `./noise` subpath. Two hard problems were solved: (1) proving byte-level wire interop with rust-libp2p deterministically in CI without a live Rust peer; (2) shipping the crypto stack without widening the default bundle's dependency surface. Both solutions generalize to every future language Noise port and every future opt-in crypto subpath. ## Guidance @@ -20,10 +32,10 @@ tags: [spoke-connect, noise-xx, libp2p, golden-transcript, interop, subpath, bun The interop gate replays a **recorded rust-libp2p Noise XX initiator transcript** against the TS responder. The recording is produced by a dev-only Rust example binary, `crates/spoke-connect/examples/noise_recorder.rs`: -- Recorder dependencies are **dev-dependencies only** (`snow 0.9.6` with `ring-resolver`, `libp2p-identity 0.2`, `x25519-dalek 2`), and `exclude = ["examples/**"]` keeps the binary out of the published crate tarball (`cargo package --list` verified). No Rust artifacts ship to consumers — only the committed JSON fixture under the TS test tree. -- The recorder drives `snow::HandshakeState` directly with the **exact engine behind libp2p-noise 0.46.1** (the crate behind the reference's `noise::Config::new`): same `snow` version and `ring-resolver` feature, same builder parameters libp2p-noise composes (`prologue([])`, `local_private_key(static_secret)`), and a `RecorderResolver` mirroring libp2p-noise's `protocol.rs::Resolver` (hash/cipher from `snow::resolvers::RingResolver`; X25519 DH over `x25519_dalek`). +- Recorder dependencies are **dev-dependencies only** (`snow 0.10` with `ring-resolver`, `libp2p-identity 0.3`, `x25519-dalek 3`), and `exclude = ["examples/**"]` keeps the binary out of the published crate tarball (`cargo package --list` verified). No Rust artifacts ship to consumers — only the committed JSON fixture under the TS test tree. +- The recorder drives `snow::HandshakeState` directly with the **exact engine behind libp2p-noise 0.47.0** (the crate behind the reference's `noise::Config::new`): same `snow` version and `ring-resolver` feature, same builder parameters libp2p-noise composes (`prologue([])`, `local_private_key(static_secret)`), and a `RecorderResolver` mirroring libp2p-noise's `protocol.rs::Resolver` (hash/cipher from `snow::resolvers::RingResolver`; X25519 DH over `x25519_dalek`). - Ephemeral keys are pinned via snow's `fixed_ephemeral_key_for_testing_only` — the only pinning hook; libp2p-noise never exposes ephemerals, which is why the recorder drives `snow::HandshakeState` directly instead of the crate-private framed codec. -- Payload and signature replicate libp2p-noise `send_identity` exactly: `NoiseHandshakePayload { identity_key = libp2p-identity PublicKey protobuf, identity_sig = Ed25519 over "noise-libp2p-static-key:" || static_x25519_pub }`, no extensions, quick-protobuf field order. +- Payload and signature replicate libp2p-noise `send_identity` exactly: `NoiseHandshakePayload { identity_key = libp2p-identity PublicKey protobuf, identity_sig = Ed25519 over "noise-libp2p-static-key:" || static_x25519_pub }`, no extensions; prost encodes the `payload.proto` fields by their declared tags (`identity_key` tag 1, `identity_sig` tag 2). - The recorder **self-verifies before emitting**: flight-1 payload empty, payloads cross-read intact, handshake hashes equal, remote statics crossed, both identity signatures verified exactly like libp2p-noise `finish()`, transport round-trip opens in both directions. Any mismatch panics — no fixture is written. - Rerun is **byte-identical** (deterministic; verified by `diff`). The fixture (`tests/noise/fixtures/noise-xx-golden.json`) records **pure Noise frames after multistream** — u16-BE length-prefixed wire bytes with the `/noise` negotiation outside the Noise messages. diff --git a/.mstar/knowledge/architecture-patterns/spoke-connect-libp2p-spike.md b/.mstar/knowledge/architecture-patterns/spoke-connect-libp2p-spike.md index fbcf8253..77a28ca8 100644 --- a/.mstar/knowledge/architecture-patterns/spoke-connect-libp2p-spike.md +++ b/.mstar/knowledge/architecture-patterns/spoke-connect-libp2p-spike.md @@ -1,12 +1,22 @@ --- module: spoke-connect date: 2026-07-31 -last_updated: 2026-08-01 +last_updated: 2026-09-22 problem_type: architecture_pattern category: architecture-patterns severity: high -applies_when: ["building a libp2p-based spoke-connect runtime", "binding spoke-connect to a foreign language via uniffi", "hardening a p2p handshake/allowlist implementation"] -tags: [spoke-connect, libp2p, rust, noise, identify, allowlist, pending-dial] +applies_when: + - "building a libp2p-based spoke-connect runtime" + - "binding spoke-connect to a foreign language via uniffi" + - "hardening a p2p handshake/allowlist implementation" +tags: + - spoke-connect + - libp2p + - rust + - noise + - identify + - allowlist + - pending-dial --- # spoke-connect Rust libp2p spike: transport, auth binding, and event-loop pitfalls @@ -19,7 +29,7 @@ The `crates/spoke-connect` crate (published on crates.io) implements the `spoke- ### Transport composition (locked minimal feature set) -Pin a single rust-libp2p version (e.g. `=0.56.0`); enable only `noise`, `yamux`, `request-response`, `identify`, `macros`, `tokio`, `ed25519` (+ `tcp`, `json` as required by the composition). Avoid QUIC, relay, kad, gossipsub, tls unless a real behaviour is wired — a capability-named feature flag with no runtime behaviour must not ship. +Pin a single rust-libp2p version (e.g. `=0.57.0`); enable only `noise`, `yamux`, `request-response`, `identify`, `macros`, `tokio`, `ed25519` (+ `tcp`, `json` as required by the composition). Avoid QUIC, relay, kad, gossipsub, tls unless a real behaviour is wired — a capability-named feature flag with no runtime behaviour must not ship. ### Identify key <-> noise PeerId binding (defense in depth) diff --git a/.mstar/specs/connect-publish-strategy.md b/.mstar/specs/connect-publish-strategy.md index b80da3b1..c83454b1 100644 --- a/.mstar/specs/connect-publish-strategy.md +++ b/.mstar/specs/connect-publish-strategy.md @@ -187,7 +187,7 @@ Bindings under `crates/spoke-connect/bindings/*` are packaged per language: unif | Item | Value | |------|--------| | **Conclusion** | **Remain fallback route only** — does not overturn pure-TS-minimal primary ([`spoke-connect-ts-route.md`](spoke-connect-ts-route.md)) | -| **Evidence** | **When mesh interop matters:** only for **direct libp2p-network participation** — a product host that must dial/listen on the same Noise/yamux mesh as the Rust reference spike (`crates/spoke-connect`). Envelope-level interop — the v1 goal — requires only the same hello / `peer_id` / session rules over **any ordered stream** (WebSocket today); Noise multistream is not required for it ([`spoke-connect-ts-route.md`](spoke-connect-ts-route.md) evaluation criterion 10). **Dependency weight:** js-libp2p is a deep `@libp2p/*` monorepo tree — large supply-chain and bundle surface (criterion 7), inverse of the thin `@42ch/*` helper pattern; Noise/multistream interop with rust-libp2p 0.56 additionally needs version pinning and periodic re-verify (criterion 8). Current package reality: `@42ch/spoke-connect` dependencies are `@42ch/spoke-schemas`, `@noble/ed25519`, `@noble/hashes`, `canonicalize`, `ws` — no libp2p deps. **Session-core ownership:** js-libp2p does **not** replace the TS session-core port — sequence, nonce, allowlist, `request_id` correlation, and the dispatch gate remain SDK-owned (criterion 6); the SPOKE hello is JCS-signed, not a libp2p native hello (criterion 4) | +| **Evidence** | **When mesh interop matters:** only for **direct libp2p-network participation** — a product host that must dial/listen on the same Noise/yamux mesh as the Rust reference spike (`crates/spoke-connect`). Envelope-level interop — the v1 goal — requires only the same hello / `peer_id` / session rules over **any ordered stream** (WebSocket today); Noise multistream is not required for it ([`spoke-connect-ts-route.md`](spoke-connect-ts-route.md) evaluation criterion 10). **Dependency weight:** js-libp2p is a deep `@libp2p/*` monorepo tree — large supply-chain and bundle surface (criterion 7), inverse of the thin `@42ch/*` helper pattern; Noise/multistream interop with rust-libp2p 0.57 additionally needs version pinning and periodic re-verify (criterion 10). **Maintenance:** … | **Recommend** | Do **not** add `js-libp2p` to `@42ch/spoke-connect` default dependencies; keep the pure-TS-minimal primary intact | | **Defer** | Shipping a mesh helper inside the default package | | **Trigger to ship a mesh helper** | Product requires shared libp2p network with the Rust spike; then prefer an **optional companion package or consumer-repo adapter**, not a forced default export | diff --git a/.mstar/specs/noise-xx-libp2p-contract.md b/.mstar/specs/noise-xx-libp2p-contract.md index 5350c45f..da217b02 100644 --- a/.mstar/specs/noise-xx-libp2p-contract.md +++ b/.mstar/specs/noise-xx-libp2p-contract.md @@ -3,7 +3,7 @@ **Status:** Frozen normative spec — the wire contract for the Noise XX mesh transport in the `@42ch/spoke-connect` TypeScript client (`./noise` subpath) and the Rust reference `spoke-connect`. Grounded in rust-libp2p -`libp2p-noise` 0.46.x (pulled by workspace `libp2p = 0.56.0`) as used by +`libp2p-noise` 0.47.x (pulled by workspace `libp2p = 0.57.0`) as used by `crates/spoke-connect` (`noise::Config::new` in `src/node.rs`). ## 1. Interop target diff --git a/.mstar/specs/spoke-connect-ts-route.md b/.mstar/specs/spoke-connect-ts-route.md index a18dccaf..bd9cbc36 100644 --- a/.mstar/specs/spoke-connect-ts-route.md +++ b/.mstar/specs/spoke-connect-ts-route.md @@ -39,7 +39,7 @@ Scoring is High / Med / Low fitness for SPOKE Path A browser+Node clients that m | 5 | **JCS (RFC 8785)** | **Med** — external JCS dependency still required; must match `serde_jcs` | **High** — `serde_jcs` in-core | **High** — pure JCS subset (or lib) matches golden hex vector (proof); omit absent optionals (no `"authority": null`) | | 6 | **Session-core port cost** | **Med** — session rules still ported in TS; libp2p does not replace sequence/nonce/allowlist/correlation | **High** — reuse pure Rust core behind WASM | **Med** — small pure port (sequence, nonce, allowlist, correlation, dispatch gate); intentional and bounded | | 7 | **Dependency weight** | **Low** — deep `@libp2p/*` tree, large supply-chain and bundle surface for a future thin `@42ch/*` helper | **Low** — WASM binary + wasm-bindgen glue + JS transport | **High** — WebCrypto (platform) + optional noble + thin WS; no swarm stack | -| 8 | **Ecosystem / maintenance** | **Med** — js-libp2p remains active (e.g. 3.x releases); Noise/multistream interop with rust-libp2p 0.56 needs version pinning and periodic re-verify | **Low** — wasm-pack/wasm-bindgen CI and artifact policy inside a protocol repo is ongoing cost | **High** — platform crypto + small pure modules; low churn surface | +| 8 | **Ecosystem / maintenance** | **Med** — js-libp2p remains active (e.g. 3.x releases); Noise/multistream interop with rust-libp2p 0.57 needs version pinning and periodic re-verify | **Low** — wasm-pack/wasm-bindgen CI and artifact policy inside a protocol repo is ongoing cost | **High** — platform crypto + small pure modules; low churn surface | | 9 | **Fit with P0 embedding model** | **Med** — valid Path A host, but nudges integrators toward “connect = libp2p mesh” rather than envelope-on-stream | **Low** — Path B-ish reuse of Rust; browsers that refuse WASM still need a pure path | **High** — Path A purity: no Rust required; no daemon; transport-adapter-owned framing | | 10 | **Interop with Rust reference spike** | **Med–High** — Noise mesh peer possible when versions align; envelope interop still needs SPOKE hello bytes | **High** — same core bytes as the spike | **High** for **envelope-level** interop (same hello/`peer_id`/session rules over any ordered stream). Noise multistream is **not** required for v1 product goals that only need connect envelopes | diff --git a/Cargo.lock b/Cargo.lock index 07a64bf7..b73e40f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,7 +8,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "generic-array", ] @@ -228,6 +228,29 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" +[[package]] +name = "aws-lc-rs" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", + "pkg-config", +] + [[package]] name = "base-x" version = "0.2.11" @@ -283,7 +306,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -295,6 +318,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa" +dependencies = [ + "hybrid-array", +] + [[package]] name = "bs58" version = "0.5.1" @@ -362,6 +394,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8" dependencies = [ "find-msvc-tools", + "jobserver", + "libc", "shlex", ] @@ -432,7 +466,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "inout", "zeroize", ] @@ -476,6 +510,31 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" +[[package]] +name = "cmake" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" +dependencies = [ + "cc", +] + +[[package]] +name = "cmov" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a" + +[[package]] +name = "combine" +version = "4.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +dependencies = [ + "bytes", + "memchr", +] + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -491,6 +550,12 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + [[package]] name = "const-str" version = "0.4.3" @@ -568,10 +633,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ "generic-array", - "rand_core 0.6.4", "typenum", ] +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "hybrid-array", +] + [[package]] name = "ctr" version = "0.9.2" @@ -581,6 +654,15 @@ dependencies = [ "cipher", ] +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", +] + [[package]] name = "curve25519-dalek" version = "4.1.3" @@ -590,8 +672,24 @@ dependencies = [ "cfg-if", "cpufeatures 0.2.17", "curve25519-dalek-derive", - "digest", - "fiat-crypto", + "digest 0.10.7", + "fiat-crypto 0.2.9", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "curve25519-dalek-derive", + "digest 0.11.3", + "fiat-crypto 0.3.0", "rustc_version", "subtle", "zeroize", @@ -640,7 +738,7 @@ version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ - "const-oid", + "const-oid 0.9.6", "zeroize", ] @@ -670,11 +768,23 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", - "crypto-common", + "block-buffer 0.10.4", + "crypto-common 0.1.7", "subtle", ] +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.1", + "const-oid 0.10.2", + "crypto-common 0.2.2", + "ctutils", +] + [[package]] name = "displaydoc" version = "0.2.7" @@ -692,6 +802,12 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "ed25519" version = "2.2.3" @@ -699,7 +815,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ "pkcs8", - "signature", + "signature 2.2.0", +] + +[[package]] +name = "ed25519" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" +dependencies = [ + "signature 3.0.0", ] [[package]] @@ -708,31 +833,32 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ - "curve25519-dalek", - "ed25519", + "curve25519-dalek 4.1.3", + "ed25519 2.2.3", "serde", - "sha2", + "sha2 0.10.9", "subtle", "zeroize", ] [[package]] -name = "either" -version = "1.17.0" +name = "ed25519-dalek" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" +checksum = "6ebaa1a2bf1290ab3bfe5a7b771d050ebffab2711c19a81691c683a5144a25de" +dependencies = [ + "curve25519-dalek 5.0.0", + "ed25519 3.0.0", + "sha2 0.11.0", + "subtle", + "zeroize", +] [[package]] -name = "enum-as-inner" -version = "0.6.1" +name = "either" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn 2.0.119", -] +checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" [[package]] name = "equivalent" @@ -756,7 +882,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef975e30683b2d965054bb0a836f8973857c4ebf6acf274fe46617cd285060d8" dependencies = [ - "foldhash 0.2.0", + "foldhash", "libm", "portable-atomic", "siphasher", @@ -774,6 +900,12 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" +[[package]] +name = "fiat-crypto" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" + [[package]] name = "find-msvc-tools" version = "0.1.9" @@ -786,12 +918,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foldhash" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" - [[package]] name = "foldhash" version = "0.2.0" @@ -816,6 +942,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "futures" version = "0.3.33" @@ -833,9 +965,9 @@ dependencies = [ [[package]] name = "futures-bounded" -version = "0.2.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" +checksum = "b604752cefc5aa3ab98992a107a8bd99465d2825c1584e0b60cb6957b21e19d7" dependencies = [ "futures-timer", "futures-util", @@ -920,9 +1052,13 @@ checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" [[package]] name = "futures-timer" -version = "3.0.4" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af43fadb8a98512d547e37b4e92e0ced13e205c061b87b4623eff01d918d6968" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers", + "send_wrapper", +] [[package]] name = "futures-util" @@ -971,9 +1107,11 @@ 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]] @@ -1006,6 +1144,18 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + [[package]] name = "goblin" version = "0.8.2" @@ -1036,15 +1186,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "hashbrown" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -dependencies = [ - "foldhash 0.1.5", -] - [[package]] name = "hashbrown" version = "0.16.1" @@ -1053,7 +1194,7 @@ checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" dependencies = [ "allocator-api2", "equivalent", - "foldhash 0.2.0", + "foldhash", ] [[package]] @@ -1061,14 +1202,17 @@ name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash", +] [[package]] name = "hashlink" -version = "0.10.0" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +checksum = "a596f1b20ed2cc5ecac41a164aaebc7258057060f06c0cf7a2ba3991ee7990fb" dependencies = [ - "hashbrown 0.15.5", + "hashbrown 0.17.1", ] [[package]] @@ -1084,47 +1228,70 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] -name = "hickory-proto" -version = "0.25.2" +name = "hickory-net" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" +checksum = "c480823ed7c2c5d0f09c41020cb6b7c28029ce60ec42dc942158dcf22f8e0a4d" dependencies = [ "async-trait", "cfg-if", "data-encoding", - "enum-as-inner", "futures-channel", "futures-io", "futures-util", + "hickory-proto", + "idna", + "ipnet", + "jni", + "rand", + "thiserror 2.0.19", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-proto" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12b92608f679a6fa515dd1d15c1ff89443026e391200a2c840c7afcba482893d" +dependencies = [ + "data-encoding", "idna", "ipnet", + "jni", "once_cell", - "rand 0.9.5", + "prefix-trie", + "rand", "ring", - "socket2 0.5.10", "thiserror 2.0.19", "tinyvec", - "tokio", "tracing", "url", ] [[package]] name = "hickory-resolver" -version = "0.25.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" +checksum = "3f3da5255c95d5a716857d54b5b8f4e8d67c3484d3beaaaae2ce25063b3ba981" dependencies = [ "cfg-if", "futures-util", + "hickory-net", "hickory-proto", "ipconfig", + "ipnet", + "jni", "moka", + "ndk-context", "once_cell", "parking_lot", - "rand 0.9.5", + "rand", "resolv-conf", "smallvec", + "system-configuration", "thiserror 2.0.19", "tokio", "tracing", @@ -1132,20 +1299,20 @@ dependencies = [ [[package]] name = "hkdf" -version = "0.12.4" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" dependencies = [ "hmac", ] [[package]] name = "hmac" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" dependencies = [ - "digest", + "digest 0.11.3", ] [[package]] @@ -1187,6 +1354,15 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" +[[package]] +name = "hybrid-array" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17" +dependencies = [ + "typenum", +] + [[package]] name = "hyper" version = "1.11.0" @@ -1222,7 +1398,7 @@ dependencies = [ "hyper", "libc", "pin-project-lite", - "socket2 0.6.5", + "socket2", "tokio", "tower-service", "tracing", @@ -1390,11 +1566,10 @@ dependencies = [ [[package]] name = "igd-next" -version = "0.16.2" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516893339c97f6011282d5825ac94fc1c7aad5cad26bdc2d0cee068c0bf97f97" +checksum = "de7238d487a9aff61f81b5ab41c0a841532a115a398b5fa92a2fadd0885e2581" dependencies = [ - "async-trait", "attohttpc", "bytes", "futures", @@ -1403,7 +1578,7 @@ dependencies = [ "hyper", "hyper-util", "log", - "rand 0.9.5", + "rand", "tokio", "url", "xmltree", @@ -1436,7 +1611,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" dependencies = [ - "socket2 0.6.5", + "socket2", "widestring", "windows-registry", "windows-result", @@ -1448,6 +1623,9 @@ name = "ipnet" version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +dependencies = [ + "serde", +] [[package]] name = "itertools" @@ -1465,13 +1643,71 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] -name = "js-sys" -version = "0.3.103" +name = "jni" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b44bfcdb3f8d5837a46dae1ca9660a837176eee74a28b229bc626816589102" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" dependencies = [ "cfg-if", - "futures-util", + "combine", + "jni-macros", + "jni-sys", + "log", + "simd_cesu8", + "thiserror 2.0.19", + "walkdir", + "windows-link", +] + +[[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.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "jobserver" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +dependencies = [ + "getrandom 0.4.3", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3" +dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1495,15 +1731,15 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libp2p" -version = "0.56.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce71348bf5838e46449ae240631117b487073d5f347c06d434caddcb91dceb5a" +checksum = "54f17d9972941cedec62309d4a8ff52c05beb20550d6f1f961625eda0aae1e37" dependencies = [ "bytes", "either", "futures", "futures-timer", - "getrandom 0.2.17", + "getrandom 0.4.3", "libp2p-allow-block-list", "libp2p-connection-limits", "libp2p-core", @@ -1527,9 +1763,9 @@ dependencies = [ [[package]] name = "libp2p-allow-block-list" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16ccf824ee859ca83df301e1c0205270206223fd4b1f2e512a693e1912a8f4a" +checksum = "3074eaa93c889a9f56e5e4ecbbb8a5213652b22af0a1d880504345f2bd8768c4" dependencies = [ "libp2p-core", "libp2p-identity", @@ -1538,9 +1774,9 @@ dependencies = [ [[package]] name = "libp2p-connection-limits" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18b8b607cf3bfa2f8c57db9c7d8569a315d5cc0a282e6bfd5ebfc0a9840b2a0" +checksum = "11b98b22c89fc70113a8988db523b0715e299c804e08da7eb20b8440b8249833" dependencies = [ "libp2p-core", "libp2p-identity", @@ -1549,9 +1785,9 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.43.2" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "249128cd37a2199aff30a7675dffa51caf073b51aa612d2f544b19932b9aebca" +checksum = "c2b1a55b9d5e51389db344a609d8c2ff35eabd870a8400067d66d2b1b6f8df68" dependencies = [ "either", "fnv", @@ -1563,22 +1799,21 @@ dependencies = [ "multistream-select", "parking_lot", "pin-project", - "quick-protobuf", - "rand 0.8.7", + "prost", + "rand", "rw-stream-sink", "thiserror 2.0.19", "tracing", - "unsigned-varint 0.8.0", + "unsigned-varint", "web-time", ] [[package]] name = "libp2p-dns" -version = "0.44.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b770c1c8476736ca98c578cba4b505104ff8e842c2876b528925f9766379f9a" +checksum = "18694695e98ff9ce26ee245fdede7cd0b4186cb793b25da3258d9c053400a291" dependencies = [ - "async-trait", "futures", "hickory-resolver", "libp2p-core", @@ -1590,9 +1825,9 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.47.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ab792a8b68fdef443a62155b01970c81c3aadab5e659621b063ef252a8e65e8" +checksum = "b2dd130b2cbbcecb55e923c5ba4183e6b9af542b4251680017300c693a6e183c" dependencies = [ "asynchronous-codec", "either", @@ -1602,8 +1837,8 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-swarm", - "quick-protobuf", - "quick-protobuf-codec", + "prost", + "prost-codec", "smallvec", "thiserror 2.0.19", "tracing", @@ -1611,17 +1846,17 @@ dependencies = [ [[package]] name = "libp2p-identity" -version = "0.2.14" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9525f3831544f7ae497bde79adf114ef127b0fbbb97edbbf692a80408636421c" +checksum = "3d77f16caa4f4d2667a1fad5bb1a3a4a4556967c1bff93525ebb2975847fa3de" dependencies = [ "bs58", - "ed25519-dalek", + "ed25519-dalek 3.0.0", "hkdf", "multihash", "prost", - "rand 0.8.7", - "sha2", + "rand", + "sha2 0.11.0", "thiserror 2.0.19", "tracing", "zeroize", @@ -1629,9 +1864,9 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.48.0" +version = "0.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c66872d0f1ffcded2788683f76931be1c52e27f343edb93bc6d0bcd8887be443" +checksum = "9e82fb6db53f8ba1642bc0695ee589f7bcc1ff9028a9d068a88ee0db5b94667f" dependencies = [ "futures", "hickory-proto", @@ -1639,18 +1874,18 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-swarm", - "rand 0.8.7", + "rand", "smallvec", - "socket2 0.5.10", + "socket2", "tokio", "tracing", ] [[package]] name = "libp2p-metrics" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "805a555148522cb3414493a5153451910cb1a146c53ffbf4385708349baf62b7" +checksum = "3106bb2e4116c9cfa6b87ece6632d9582606fe923aabde27a42a001f3061ff82" dependencies = [ "futures", "libp2p-core", @@ -1664,19 +1899,20 @@ dependencies = [ [[package]] name = "libp2p-noise" -version = "0.46.1" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc73eacbe6462a0eb92a6527cac6e63f02026e5407f8831bde8293f19217bfbf" +checksum = "7895a7bf90479291bff16ffddca81f539fc59d62c17b3cce17620cf75abaa6fd" dependencies = [ "asynchronous-codec", "bytes", "futures", + "getrandom 0.3.4", "libp2p-core", "libp2p-identity", "multiaddr", "multihash", - "quick-protobuf", - "rand 0.8.7", + "prost", + "rand", "snow", "static_assertions", "thiserror 2.0.19", @@ -1687,9 +1923,9 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dcc597d70bf7f6f30cbe07081802c836184e48416e89e9ce73a0ba2c56a319e" +checksum = "4f78ca359466657b380e469fe8c04df2f4447d1430838e6c3cef4a1c51ccb2ee" dependencies = [ "futures", "futures-timer", @@ -1699,10 +1935,9 @@ dependencies = [ "libp2p-tls", "quinn", "quinn-proto", - "rand 0.8.7", + "rand", "ring", - "rustls", - "socket2 0.5.10", + "socket2", "thiserror 2.0.19", "tokio", "tracing", @@ -1710,17 +1945,16 @@ dependencies = [ [[package]] name = "libp2p-request-response" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9f1cca83488b90102abac7b67d5c36fc65bc02ed47620228af7ed002e6a1478" +checksum = "ca1d1f3a4d7b7080eb959098f276f57ecbc3102f7d3d46f109ccdaa00d2842d9" dependencies = [ - "async-trait", "futures", "futures-bounded", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "rand 0.8.7", + "rand", "serde", "serde_json", "smallvec", @@ -1729,58 +1963,60 @@ dependencies = [ [[package]] name = "libp2p-swarm" -version = "0.47.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce88c6c4bf746c8482480345ea3edfd08301f49e026889d1cbccfa1808a9ed9e" +checksum = "57ccbe1baeaef036ffde4b265871e11c64d29464036bba635378f356bcdca854" dependencies = [ "either", "fnv", "futures", "futures-timer", + "getrandom 0.4.3", "hashlink", "libp2p-core", "libp2p-identity", "libp2p-swarm-derive", "multistream-select", - "rand 0.8.7", + "rand", "smallvec", "tokio", "tracing", + "wasm-bindgen-futures", "web-time", ] [[package]] name = "libp2p-swarm-derive" -version = "0.35.1" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd297cf53f0cb3dee4d2620bb319ae47ef27c702684309f682bdb7e55a18ae9c" +checksum = "fbfd25141698cdf6878f26a839f28caa54a7906fbb3e6d0988b9eeb34dea3103" dependencies = [ "heck", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] name = "libp2p-tcp" -version = "0.44.1" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb6585b9309699f58704ec9ab0bb102eca7a3777170fa91a8678d73ca9cafa93" +checksum = "e753c9e69fec40b3687e38a25e34fc5dfa9c6d0e29614c9b4d28ee7dc8c32a7a" dependencies = [ "futures", "futures-timer", "if-watch", "libc", "libp2p-core", - "socket2 0.6.5", + "socket2", "tokio", "tracing", ] [[package]] name = "libp2p-tls" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ff65a82e35375cbc31ebb99cacbbf28cb6c4fefe26bf13756ddcf708d40080" +checksum = "01dc85ad2bbc3506502f430a00dd913ec87f31e1894291cb9b923168babb6485" dependencies = [ "futures", "futures-rustls", @@ -1792,14 +2028,14 @@ dependencies = [ "rustls-webpki", "thiserror 2.0.19", "x509-parser", - "yasna", + "yasna 0.6.0", ] [[package]] name = "libp2p-upnp" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4757e65fe69399c1a243bbb90ec1ae5a2114b907467bf09f3575e899815bb8d3" +checksum = "298e2b41af943bc4e429f03a72b9991c1353a4c5bbb0a45ae06b393002965b70" dependencies = [ "futures", "futures-timer", @@ -1812,17 +2048,15 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.47.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f15df094914eb4af272acf9adaa9e287baa269943f32ea348ba29cfb9bfc60d8" +checksum = "308e4033fd1ac9312c827405d3bf568ae335a7d8248071dc7c75c8c0b64977f9" dependencies = [ - "either", "futures", "libp2p-core", "thiserror 2.0.19", "tracing", - "yamux 0.12.1", - "yamux 0.13.10", + "yamux", ] [[package]] @@ -1911,12 +2145,13 @@ dependencies = [ [[package]] name = "multiaddr" -version = "0.18.2" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe6351f60b488e04c1d21bc69e56b89cb3f5e8f5d22557d6e8031bdfd79b6961" +checksum = "d96879ec0057cf5f99543c5333f6818c1473081684ae7ad55da21b6ea65ba214" dependencies = [ "arrayref", "byteorder", + "bytes", "data-encoding", "libp2p-identity", "multibase", @@ -1924,7 +2159,7 @@ dependencies = [ "percent-encoding", "serde", "static_assertions", - "unsigned-varint 0.8.0", + "unsigned-varint", "url", ] @@ -1947,23 +2182,29 @@ version = "0.19.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "577c63b00ad74d57e8c9aa870b5fccebf2fd64a308a5aee9f1bb88e4aea19447" dependencies = [ - "unsigned-varint 0.8.0", + "unsigned-varint", ] [[package]] name = "multistream-select" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea0df8e5eec2298a62b326ee4f0d7fe1a6b90a09dfcf9df37b38f947a8c42f19" +checksum = "1365a5fcbeb5c688f3c849229d06692e27c9af0c16c3126bd1589b680aa39f88" dependencies = [ "bytes", "futures", - "log", "pin-project", "smallvec", - "unsigned-varint 0.7.2", + "tracing", + "unsigned-varint", ] +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + [[package]] name = "netlink-packet-core" version = "0.8.1" @@ -2187,6 +2428,12 @@ dependencies = [ "spki", ] +[[package]] +name = "pkg-config" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" + [[package]] name = "plain" version = "0.2.3" @@ -2258,12 +2505,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] -name = "ppv-lite86" -version = "0.2.21" +name = "prefix-trie" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +checksum = "4cf6e3177f0684016a5c209b00882e15f8bdd3f3bb48f0491df10cd102d0c6e7" dependencies = [ - "zerocopy", + "either", + "ipnet", + "num-traits", ] [[package]] @@ -2277,9 +2526,9 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.23.1" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf41c1a7c32ed72abe5082fb19505b969095c12da9f5732a4bc9878757fd087c" +checksum = "1784dc11a05f5a8f57c4a62915686be140f24f70301290b997e317241fa9ffc2" dependencies = [ "dtoa", "itoa", @@ -2289,13 +2538,13 @@ dependencies = [ [[package]] name = "prometheus-client-derive-encode" -version = "0.4.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" +checksum = "01e34894696ff94f64a20c2c373a6440903e9c2789a303d68ec6e6f953f890e4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] @@ -2308,6 +2557,19 @@ dependencies = [ "prost-derive", ] +[[package]] +name = "prost-codec" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1da63327bb7a8c30a2227df7f43379d0a4731a2eb517b0f61416da6c2a3c739" +dependencies = [ + "asynchronous-codec", + "bytes", + "prost", + "thiserror 2.0.19", + "unsigned-varint", +] + [[package]] name = "prost-derive" version = "0.14.4" @@ -2321,28 +2583,6 @@ dependencies = [ "syn 2.0.119", ] -[[package]] -name = "quick-protobuf" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" -dependencies = [ - "byteorder", -] - -[[package]] -name = "quick-protobuf-codec" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" -dependencies = [ - "asynchronous-codec", - "bytes", - "quick-protobuf", - "thiserror 1.0.69", - "unsigned-varint 0.8.0", -] - [[package]] name = "quinn" version = "0.11.11" @@ -2357,7 +2597,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.6.5", + "socket2", "thiserror 2.0.19", "tokio", "tracing", @@ -2370,11 +2610,12 @@ version = "0.11.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560" dependencies = [ + "aws-lc-rs", "bytes", "fastbloom", "getrandom 0.4.3", "lru-slab", - "rand 0.10.2", + "rand", "rand_pcg", "ring", "rustc-hash", @@ -2396,7 +2637,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.5", + "socket2", "tracing", "windows-sys 0.61.2", ] @@ -2422,27 +2663,6 @@ version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" -[[package]] -name = "rand" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.5", -] - [[package]] name = "rand" version = "0.10.2" @@ -2454,26 +2674,6 @@ dependencies = [ "rand_core 0.10.1", ] -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.5", -] - [[package]] name = "rand_core" version = "0.6.4" @@ -2483,15 +2683,6 @@ dependencies = [ "getrandom 0.2.17", ] -[[package]] -name = "rand_core" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" -dependencies = [ - "getrandom 0.3.4", -] - [[package]] name = "rand_core" version = "0.10.1" @@ -2517,7 +2708,7 @@ dependencies = [ "ring", "rustls-pki-types", "time", - "yasna", + "yasna 0.5.2", ] [[package]] @@ -2620,8 +2811,8 @@ version = "0.23.43" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06" dependencies = [ + "aws-lc-rs", "once_cell", - "ring", "rustls-pki-types", "rustls-webpki", "subtle", @@ -2644,6 +2835,7 @@ version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ + "aws-lc-rs", "ring", "rustls-pki-types", "untrusted", @@ -2657,9 +2849,9 @@ checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" [[package]] name = "rw-stream-sink" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c9026ff5d2f23da5e45bbc283f156383001bfb09c4e44256d02c1a685fe9a1" +checksum = "57736c2b47f266c94699b56dc7b4f0a5a669ee87e5ef62bc4a54d8e05945353d" dependencies = [ "futures", "pin-project", @@ -2672,6 +2864,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6518fc26bced4d53678a22d6e423e9d8716377def84545fe328236e3af070e7f" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -2708,6 +2909,12 @@ dependencies = [ "serde_core", ] +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + [[package]] name = "serde" version = "1.0.229" @@ -2779,7 +2986,18 @@ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures 0.2.17", - "digest", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.3", ] [[package]] @@ -2797,6 +3015,28 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "signature" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" + +[[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" version = "1.0.3" @@ -2823,31 +3063,21 @@ checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100" [[package]] name = "snow" -version = "0.9.6" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85" +checksum = "599b506ccc4aff8cf7844bc42cf783009a434c1e26c964432560fb6d6ad02d82" dependencies = [ "aes-gcm", "blake2", "chacha20poly1305", - "curve25519-dalek", - "rand_core 0.6.4", + "curve25519-dalek 4.1.3", + "getrandom 0.3.4", "ring", "rustc_version", - "sha2", + "sha2 0.10.9", "subtle", ] -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "socket2" version = "0.6.5" @@ -2875,7 +3105,7 @@ dependencies = [ "async-trait", "base64", "chrono", - "ed25519-dalek", + "ed25519-dalek 2.2.0", "futures", "getrandom 0.2.17", "libp2p", @@ -3149,7 +3379,7 @@ dependencies = [ "libc", "mio", "pin-project-lite", - "socket2 0.6.5", + "socket2", "tokio-macros", "windows-sys 0.61.2", ] @@ -3401,16 +3631,10 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ - "crypto-common", + "crypto-common 0.1.7", "subtle", ] -[[package]] -name = "unsigned-varint" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" - [[package]] name = "unsigned-varint" version = "0.8.0" @@ -3458,6 +3682,16 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + [[package]] name = "want" version = "0.3.1" @@ -3484,9 +3718,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.126" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b067c0c11094aef6b7a801c1e34a26affafdf3d051dba08456b868789aaf9a4" +checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566" dependencies = [ "cfg-if", "once_cell", @@ -3495,11 +3729,25 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a6e77fd0ae8029c9ea0063f87c46fde723e7d887703d74ad2616d792e51e6f" +dependencies = [ + "cfg-if", + "futures-util", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" -version = "0.2.126" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167ce5e579f6bcf889c4f7175a8a5a585de84e8ff93976ce393efa5f2837aab1" +checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3507,9 +3755,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.126" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3997c7839262f4ef12cf90b818d6340c18e80f263f1a94bf157d0ec4420380e" +checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55" dependencies = [ "bumpalo", "proc-macro2", @@ -3520,13 +3768,23 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.126" +version = "0.2.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc1b4cb0cc549fcf58d7dfc081778139b3d283a081644e833e84682ad71cea24" +checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12" dependencies = [ "unicode-ident", ] +[[package]] +name = "web-sys" +version = "0.3.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "312e32e551d92129218ea9a2452120f4aabc03529ef03e4d0d82fb2780608598" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "web-time" version = "1.1.0" @@ -3552,6 +3810,15 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "windows" version = "0.62.2" @@ -3778,21 +4045,20 @@ checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "x25519-dalek" -version = "2.0.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +checksum = "e7e8131a03190127fb2263afc72b322ecadae46b6ff8c6f399ff5d02f5559af6" dependencies = [ - "curve25519-dalek", - "rand_core 0.6.4", - "serde", + "curve25519-dalek 5.0.0", + "rand_core 0.10.1", "zeroize", ] [[package]] name = "x509-parser" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569f339c0c402346d4a75a9e39cf8dad310e287eef1ff56d4c68e5067f53460" +checksum = "d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202" dependencies = [ "asn1-rs", "data-encoding", @@ -3822,31 +4088,15 @@ dependencies = [ [[package]] name = "yamux" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed0164ae619f2dc144909a9f082187ebb5893693d8c0196e8085283ccd4b776" -dependencies = [ - "futures", - "log", - "nohash-hasher", - "parking_lot", - "pin-project", - "rand 0.8.7", - "static_assertions", -] - -[[package]] -name = "yamux" -version = "0.13.10" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1991f6690292030e31b0144d73f5e8368936c58e45e7068254f7138b23b00672" +checksum = "4f4e661d6ba6f09a768e31c6f3d88f9fac596ad5d376515d598a37b62d220b34" dependencies = [ "futures", "log", "nohash-hasher", "parking_lot", "pin-project", - "rand 0.9.5", "static_assertions", "web-time", ] @@ -3860,6 +4110,12 @@ dependencies = [ "time", ] +[[package]] +name = "yasna" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5f6765e852b9b4dc8e2a76843e4d64d1cea8e79bcde0b6901aea8e7c7f08282" + [[package]] name = "yoke" version = "0.8.3" @@ -3883,26 +4139,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zerocopy" -version = "0.8.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] - [[package]] name = "zerofrom" version = "0.1.8" @@ -3929,20 +4165,6 @@ name = "zeroize" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.119", -] [[package]] name = "zerotrie" diff --git a/Cargo.toml b/Cargo.toml index 3b5a8e62..16b37940 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,4 +32,4 @@ regress = "0.10" thiserror = "2" async-trait = "0.1" pollster = "0.4" -libp2p = { version = "=0.56.0", features = ["noise", "yamux", "tcp", "tokio", "identify", "request-response", "json", "macros", "ed25519"] } +libp2p = { version = "=0.57.0", features = ["noise", "yamux", "tcp", "tokio", "identify", "request-response", "json", "macros", "ed25519"] } diff --git a/crates/spoke-connect/Cargo.toml b/crates/spoke-connect/Cargo.toml index 49481b0e..66f2dbbd 100644 --- a/crates/spoke-connect/Cargo.toml +++ b/crates/spoke-connect/Cargo.toml @@ -67,16 +67,16 @@ required-features = ["bindgen-cli"] # Dev-only (examples/ only — excluded from the crate tarball via `exclude`): # the Noise XX golden-transcript recorder (`examples/noise_recorder.rs`) -# drives the exact engine behind libp2p-noise 0.46.1 — snow 0.9.6 with the -# `ring-resolver` feature libp2p-noise itself requests — plus libp2p-identity -# for the identity payload signing and x25519-dalek for static-key public -# derivation. None of these enter the published surface. +# drives the exact engine behind libp2p-noise 0.47.0 — snow 0.10 with the +# `ring-resolver` feature libp2p-noise itself requests on non-wasm targets — +# plus libp2p-identity for the identity payload signing and x25519-dalek for +# static-key public derivation. None of these enter the published surface. [dev-dependencies] -snow = { version = "0.9.6", default-features = false, features = ["ring-resolver"] } -libp2p-identity = "0.2" +snow = { version = "0.10", default-features = false, features = ["ring-resolver"] } +libp2p-identity = "0.3" # X25519 DH — the same `x25519`/`X25519_BASEPOINT_BYTES` primitives # libp2p-noise's own snow DH impl uses. -x25519-dalek = "2" +x25519-dalek = "3" # RemoteAdapter loopback interop test: the host serves a reference # ToyWorldAdapter, and the dial fixture derives peer ids from raw seeds. ed25519-dalek = "2" diff --git a/crates/spoke-connect/README.md b/crates/spoke-connect/README.md index f2971b4a..d4774fff 100644 --- a/crates/spoke-connect/README.md +++ b/crates/spoke-connect/README.md @@ -24,7 +24,7 @@ invocation. | Messaging | `request-response` — hello exchange and op invocation | | Peer info | `identify` (carries the remote public key used to verify hello signatures) | -libp2p is pinned to a single version (`=0.56.0`) with a minimal feature set: +libp2p is pinned to a single version (`=0.57.0`) with a minimal feature set: `noise`, `yamux`, `tcp`, `tokio`, `identify`, `request-response`, `json`, `macros`, `ed25519`. diff --git a/crates/spoke-connect/bindings/cpp/native/osx-arm64/libspoke_connect_capi.dylib b/crates/spoke-connect/bindings/cpp/native/osx-arm64/libspoke_connect_capi.dylib index 8fd6ff26..a5bb7b43 100755 Binary files a/crates/spoke-connect/bindings/cpp/native/osx-arm64/libspoke_connect_capi.dylib and b/crates/spoke-connect/bindings/cpp/native/osx-arm64/libspoke_connect_capi.dylib differ diff --git a/crates/spoke-connect/bindings/cpp/native/provenance.json b/crates/spoke-connect/bindings/cpp/native/provenance.json index b702a587..62ab18ff 100644 --- a/crates/spoke-connect/bindings/cpp/native/provenance.json +++ b/crates/spoke-connect/bindings/cpp/native/provenance.json @@ -3,7 +3,7 @@ "nativeArtifacts": { "osx-arm64": { "target": "aarch64-apple-darwin", - "sourceRevision": "9f8f9c2df778f58abf15fbca3485277d542d7af4", + "sourceRevision": "7feaf5f4a1b8b8b9a1573f1d5f69e5e6799c4adc", "rustcVersion": "rustc 1.100.0-nightly (215a8af4b 2026-09-15)\nbinary: rustc\ncommit-hash: 215a8af4bb4c106cccf6d6535f84eaae91818265\ncommit-date: 2026-09-15\nhost: aarch64-apple-darwin\nrelease: 1.100.0-nightly\nLLVM version: 23.1.1", "compilerVersion": "Apple clang version 21.0.0 (clang-2100.3.34.2)", "buildFlags": { @@ -24,13 +24,13 @@ "artifacts": [ { "path": "libspoke_connect_capi.dylib", - "sha256": "5d5354e33629d348df7fec6dd6a02dc87c2a4fb21b28740dd377cc7683d13a6e" + "sha256": "ddc88ab9585648deef073a790931ec8fc4e47a51d2a7b658d9ccc59d74c518d3" } ] }, "win-x64": { "target": "x86_64-pc-windows-msvc", - "sourceRevision": "bf7909b6bc2d15ebc5eddab68d2dfadd3c2add10", + "sourceRevision": "d93500f0dca5041630f2f6e2702844c698432636", "rustcVersion": "rustc 1.96.0 (ac68faa20 2026-05-25)\nbinary: rustc\ncommit-hash: ac68faa20c58cbccd01ee7208bf3b6e93a7d7f96\ncommit-date: 2026-05-25\nhost: x86_64-pc-windows-msvc\nrelease: 1.96.0\nLLVM version: 22.1.2", "compilerVersion": "Microsoft (R) C/C++ Optimizing Compiler Version 19.51.36256 for x64", "buildFlags": { @@ -50,11 +50,11 @@ "target-feature=-crt-static" ] }, - "headerSha256": "7b4b4472f8a3d877978f1d0805c4acdfc6f02c99d44a1643a33a54a3aeec88a1", + "headerSha256": "a2cc902555059ce367c2f283278acad6df880eac9db2af5fbca281a5bf592a26", "artifacts": [ { "path": "spoke_connect_capi.dll", - "sha256": "6a48a396abf17ac888a51c6d051cea9348e8504e61cd849ffa5c7593bf2a068c" + "sha256": "2f7993d0f87832d19b4e0ca0cc8cf1e7c818413e717b29d746562add4ea00c14" }, { "path": "spoke_connect_capi.dll.lib", diff --git a/crates/spoke-connect/bindings/cpp/native/win-x64/spoke_connect_capi.dll b/crates/spoke-connect/bindings/cpp/native/win-x64/spoke_connect_capi.dll index b5b92749..d9f42fd5 100644 Binary files a/crates/spoke-connect/bindings/cpp/native/win-x64/spoke_connect_capi.dll and b/crates/spoke-connect/bindings/cpp/native/win-x64/spoke_connect_capi.dll differ diff --git a/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/ios-arm64/libspoke_connect.a b/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/ios-arm64/libspoke_connect.a index f3f61b8b..7707145e 100644 --- a/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/ios-arm64/libspoke_connect.a +++ b/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/ios-arm64/libspoke_connect.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb7e61ad8eaca12690cc795ce049c7886cc4433ec4b14c0b2b2ee4d11198e976 -size 38575616 +oid sha256:008540398ea401a4ecfe01fbad04c835c0ffc7f364122cedd0100b9d6e166059 +size 38967936 diff --git a/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/ios-arm64_x86_64-simulator/libspoke_connect.a b/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/ios-arm64_x86_64-simulator/libspoke_connect.a index 792f7fd7..faeb094a 100644 --- a/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/ios-arm64_x86_64-simulator/libspoke_connect.a +++ b/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/ios-arm64_x86_64-simulator/libspoke_connect.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b50216a1f7206ebd9afcd1ad9284a10ee5c202740363b37a934e49cd72995ce -size 76733840 +oid sha256:c1a01e49e50cce9ccfa95294a2dc23771483262bdd2a2d1c9208a3019639cfb1 +size 77714048 diff --git a/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/macos-arm64/libspoke_connect.a b/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/macos-arm64/libspoke_connect.a index e4aa096a..bbedea2c 100644 --- a/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/macos-arm64/libspoke_connect.a +++ b/crates/spoke-connect/bindings/swift/xcframework/spoke_connectFFI.xcframework/macos-arm64/libspoke_connect.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ffcf16d0bd6559de29fa7dcc07e6d5574c27a54f653ba95a46b21aa9182f056b -size 38883536 +oid sha256:3d97761d4cedd695a9b2ff8e56c25a3b689c53176372be6bf44d846be6508fce +size 39260472 diff --git a/crates/spoke-connect/examples/noise_recorder.rs b/crates/spoke-connect/examples/noise_recorder.rs index 8b2682d3..b88f64dc 100644 --- a/crates/spoke-connect/examples/noise_recorder.rs +++ b/crates/spoke-connect/examples/noise_recorder.rs @@ -2,9 +2,9 @@ //! (Task 4, connect-ts-noise-stack). //! //! Records a `Noise_XX_25519_ChaChaPoly_SHA256` handshake transcript using -//! the exact engine behind rust-libp2p's `libp2p-noise` 0.46.1 — the crate -//! behind `crates/spoke-connect`'s `noise::Config::new` (libp2p 0.56.0): -//! `snow` 0.9.6 with the same builder parameters `libp2p_noise::Config` +//! the exact engine behind rust-libp2p's `libp2p-noise` 0.47.0 — the crate +//! behind `crates/spoke-connect`'s `noise::Config::new` (libp2p 0.57.0): +//! `snow` 0.10.0 with the same builder parameters `libp2p_noise::Config` //! composes in `noise_params_into_builder` (`Builder::with_resolver(PARAMS_XX, //! RingResolver).prologue([]).local_private_key(static_secret)`), plus //! `fixed_ephemeral_key_for_testing_only` so the transcript is fully @@ -118,7 +118,9 @@ fn xx_builder<'a>( let params: NoiseParams = PROTOCOL_NAME.parse().expect("valid Noise params"); Builder::with_resolver(params, Box::new(RecorderResolver(RingResolver))) .prologue(&[]) + .expect("prologue is set once") .local_private_key(static_secret) + .expect("static private key is set once") .fixed_ephemeral_key_for_testing_only(ephemeral_secret) } @@ -153,7 +155,7 @@ impl Dh for X25519Dh { self.secret.copy_from_slice(&privkey[..32]); self.public = x25519(self.secret, X25519_BASEPOINT_BYTES); } - fn generate(&mut self, _rng: &mut dyn Random) { + fn generate(&mut self, _rng: &mut dyn Random) -> Result<(), snow::Error> { // The recorder only ever runs with pinned keys // (`fixed_ephemeral_key_for_testing_only` skips `generate`); a // random-key run would silently diverge from the fixture contract, @@ -291,7 +293,7 @@ fn main() { "protocol": PROTOCOL_NAME, "prologue": "", "framing": "u16-BE length prefix; pure Noise frames after multistream (the /noise negotiation lives outside the Noise messages — contract §6)", - "source": "rust-libp2p Noise stack recording: libp2p-noise 0.46.1 (libp2p 0.56.0) engine = snow 0.9.6, driven with the same builder parameters libp2p_noise::Config composes (noise_params_into_builder) and pinned static + ephemeral + identity keys; dev-only recorder crates/spoke-connect/examples/noise_recorder.rs", + "source": "rust-libp2p Noise stack recording: libp2p-noise 0.47.0 (libp2p 0.57.0) engine = snow 0.10.0, driven with the same builder parameters libp2p_noise::Config composes (noise_params_into_builder) and pinned static + ephemeral + identity keys; dev-only recorder crates/spoke-connect/examples/noise_recorder.rs", "roles": { "initiator": "I (dialer) — recorded flights 1 and 3; seals the initiator→responder transport frame", "responder": "R (listener) — the TS interop test plays this role" diff --git a/packages/spoke-connect-ts/tests/noise/fixtures/noise-xx-golden.json b/packages/spoke-connect-ts/tests/noise/fixtures/noise-xx-golden.json index d8fd646d..3833ea25 100644 --- a/packages/spoke-connect-ts/tests/noise/fixtures/noise-xx-golden.json +++ b/packages/spoke-connect-ts/tests/noise/fixtures/noise-xx-golden.json @@ -39,7 +39,7 @@ "initiator": "I (dialer) — recorded flights 1 and 3; seals the initiator→responder transport frame", "responder": "R (listener) — the TS interop test plays this role" }, - "source": "rust-libp2p Noise stack recording: libp2p-noise 0.46.1 (libp2p 0.56.0) engine = snow 0.9.6, driven with the same builder parameters libp2p_noise::Config composes (noise_params_into_builder) and pinned static + ephemeral + identity keys; dev-only recorder crates/spoke-connect/examples/noise_recorder.rs", + "source": "rust-libp2p Noise stack recording: libp2p-noise 0.47.0 (libp2p 0.57.0) engine = snow 0.10.0, driven with the same builder parameters libp2p_noise::Config composes (noise_params_into_builder) and pinned static + ephemeral + identity keys; dev-only recorder crates/spoke-connect/examples/noise_recorder.rs", "transport": { "initiatorToResponder": { "frame": "00205436d7cbe456bee12191f2d9b34b7d6789d2e9918c7a17c65c1846770db0dcd7", diff --git a/packages/spoke-connect-ts/tests/noise/interop.test.ts b/packages/spoke-connect-ts/tests/noise/interop.test.ts index 34e5a343..d1d21578 100644 --- a/packages/spoke-connect-ts/tests/noise/interop.test.ts +++ b/packages/spoke-connect-ts/tests/noise/interop.test.ts @@ -5,7 +5,7 @@ * * The fixture `noise-xx-golden.json` is a GENUINE rust-libp2p recording: * `Noise_XX_25519_ChaChaPoly_SHA256` driven with the exact engine behind - * `libp2p-noise` 0.46.1 (libp2p 0.56.0) — `snow` 0.9.6 with the same + * `libp2p-noise` 0.47.0 (libp2p 0.57.0) — `snow` 0.10.0 with the same * builder parameters `libp2p_noise::Config` composes, pinned static + * ephemeral + identity keys — via the dev-only recorder * `crates/spoke-connect/examples/noise_recorder.rs`. Bytes are pure Noise