atproto utils for zig zat.dev
atproto sdk zig

docs: label Rust as rsky stack, not RustCrypto

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

+3 -3
+2 -2
devlog/005-three-way-verify.md
··· 22 22 23 23 **go (indigo)** — uses bluesky's official Go SDK: `identity.BaseDirectory` for handle/DID resolution, `repo.LoadRepoFromCAR` for parsing, `commit.VerifySignature` for sig verify, `MST.Walk()` + `MST.RootCID()` for MST. 24 24 25 - **rust (RustCrypto)** — hand-rolled using the same low-level crates that [rsky](https://github.com/blacksky-algorithms/rsky) (Rudy Fraser / BlackSky) uses internally: k256/p256 for ECDSA, serde_ipld_dagcbor for CBOR, sha2 for hashing. no Rust equivalent of indigo's all-in-one `LoadRepoFromCAR` exists yet — rsky provides the building blocks (rsky-repo for MST/CAR, rsky-crypto for signatures, rsky-identity for DID resolution) and [jacquard](https://tangled.sh/@nonbinary.computer/jacquard) (@nonbinary.computer) also has MST/CAR/identity support, but the end-to-end verify pipeline is assembled manually here. HTTP + DNS TXT handle resolution, plc.directory DID resolution, hand-rolled CAR parser with SHA-256, recursive CBOR MST traversal. skips MST rebuild (no crate for it in either rsky or jacquard yet). 25 + **rust ([rsky](https://github.com/blacksky-algorithms/rsky) stack)** — uses the same low-level crates that [rsky](https://github.com/blacksky-algorithms/rsky) (Rudy Fraser / BlackSky) uses internally: k256/p256 for ECDSA, serde_ipld_dagcbor for CBOR, sha2 for hashing. rsky is a full AT Protocol implementation in Rust (PDS, relay, feed generator, labeler) plus library crates (rsky-repo, rsky-crypto, rsky-identity). [jacquard](https://tangled.sh/@nonbinary.computer/jacquard) (@nonbinary.computer) also has MST/CAR/identity support. the end-to-end verify pipeline here is assembled manually from the low-level crates — no equivalent of indigo's all-in-one `LoadRepoFromCAR` exists yet. skips MST rebuild (no crate for it in either rsky or jacquard yet). 26 26 27 27 ## the O(n) bug 28 28 ··· 43 43 | SDK | CAR parse | sig verify | MST walk+verify | compute total | 44 44 |-----|----------:|----------:|----------------:|-------------:| 45 45 | zig (zat) | 82.8ms | 0.6ms | 39.3ms | **122.7ms** | 46 - | rust (RustCrypto) | 301.0ms | 0.2ms | 120.9ms | **422.1ms** | 46 + | rust (rsky stack) | 301.0ms | 0.2ms | 120.9ms | **422.1ms** | 47 47 | go (indigo) | 424.7ms | 0.2ms | 9.3ms | **434.2ms** | 48 48 49 49 network time (handle + DID resolution + repo fetch) dominates total wall clock — 8-20 seconds depending on PDS response time. compute is under 500ms for all three.
+1 -1
devlog/img/verify-compute.svg
··· 17 17 <text x="283.7" y="78.0" text-anchor="middle" fill="white" font-size="9" font-weight="500">MST</text> 18 18 <text x="317.3" y="79.0" fill="#a0a0a0" font-size="12" font-weight="500">123ms</text> 19 19 <!-- rust: CAR 301.0ms + sig 0.2ms + MST walk 120.9ms = 422.1ms --> 20 - <text x="146" y="137.0" text-anchor="end" fill="#c0c0c0" font-size="13">rust (RustCrypto)</text> 20 + <text x="146" y="137.0" text-anchor="end" fill="#c0c0c0" font-size="13">rust (rsky stack)</text> 21 21 <rect x="160.0" y="113" width="360.5" height="38" fill="#e8944a" rx="3"/> 22 22 <text x="340.3" y="136.0" text-anchor="middle" fill="white" font-size="10" font-weight="500">CAR parse</text> 23 23 <rect x="520.5" y="113" width="1.0" height="38" fill="#ed7d31" rx="3"/>