Last 12 weeks · 5 commits
4 of 6 standards met
Summary Fixes #493. and are marked in , enabled only by the feature. However, the module is declared unconditionally in () and uses VRF types unconditionally, so no code path actually gates the use of these crates. Because is not part of , the crate does not compile in that configuration: Changes : make and required dependencies. The feature becomes an empty no-op kept for backwards compatibility with crates that enable (e.g. the crate). : un-gate the variant and its impl, which the verification code always uses. Testing Verified locally: (previously failed, now passes) (default features) (42 passed) (106 passed)
Summary Introduces crate as the leaf dependency defining the abstract trait for any key directory implementation Moves core types (, , , , ) into , with backward-compatible aliases (, ) in Inverts the dependency graph: (leaf) → → Implements for Adds generic benchmarking harness ( trait + Criterion benchmarks) Adds scaling benchmark CLI () with database caching, sweep mode, and table/CSV/JSON output
Fixes an append-only bypass in the AKD auditor. Problem The auditor verifies an epoch transition by inserting a proof's , then its nodes, checking each against the start/end root hash. This relies on re-inserting an unchanged node being a no-op. But silently drops any node whose label is not strictly beneath the pivot, so an unchanged interior node whose label is a strict prefix of an inserted leaf has its committed value discarded. A malicious server can exploit this to rewrite an existing label's value while still producing a valid append-only proof, defeating the auditor's append-only guarantee. Fix Enforce that no committed value is dropped during an batch insert, turning the silent drop into a verification error. The check is count-based (every input element must land in the left or right subtree), so it catches a drop regardless of label shape, with a narrow carve-out for the single element that legitimately becomes a leaf. Scoped to ; the directory publish path inserts full-length leaves only and is unaffected. Tests (auditor.rs) — reproduces the bypass end-to-end through : both membership proofs verify against their respective roots with , and the transition must now be rejected. (append_only_zks.rs) — exercises the guard directly: strict-prefix collision, duplicate-label collision, plus a positive control confirming disjoint leaves still insert cleanly. Both verified to fail without the guard and pass with it, under both and configurations. Full lib suite green (106 tests). Reported by @sanjit-bhat
Repository: facebook/akd. Description: An implementation of an auditable key directory Stars: 329, Forks: 77. Primary language: Rust. Languages: Rust (100%). License: Apache-2.0. Latest release: v0.13.0 (1w ago). Open PRs: 6, open issues: 19. Last activity: 1w ago. Community health: 75%. Top contributors: slawlor, kevinlewi, afterdusk, Jasleen1, dependabot[bot], dillongeorge, eozturk1, asonnino, davidjattfb, divyatalesra-2001 and others.