libdpf/doc/pages/programmability.md
Ryan Henry 0d22946a0e Checkpoint the party/runtime stack before share-program and malicious-mode work.
Ship the TLS mesh, composer, Beaver/Yao/leaf MPC, prep/online paths, apps, and docs so the tree is pushable before elevating share_expr, security_mode, and prep resume.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-28 05:59:19 -06:00

1.7 KiB

Programmability

\htmlonly

ELI5. A wildcard is a placeholder with the correction word not yet fixed. Assigning an input or a leaf is a Beaver multiplication against that placeholder: one blinded share is exchanged, then both parties write the same correction. An updatable leaf can be patched again the same way.
\endhtmlonly

Fill in a secret index or payload after the key exists, rewrite an updatable leaf, or commit to a vector before choosing which coordinate to open.

Mechanism What it does
[dpf::wildcard_value](@ref dpf/wildcard.hpp) Placeholder input or leaf. Eval throws until you assign.
Leaf assign compute_and_get_blinded_output_share, reconstruct_correction_word, async_assign_leaf, assign_cmp — see [wildcard assign](@ref wildcard_assign).
[dpf::updatable](@ref dpf/placement.hpp) Beaver leaf so a later rewrite replaces the payload without regenerating the spine.
[dpf::ppvc](@ref ppvc_manual) Point-programmable vector commitment: bind (Z/2^s Z)^n, then open one hidden coordinate (or the sum).
[dpf::at](@ref dpf/placement.hpp) / idpf Plant values on public prefixes as well as the leaf.
auto [k0, k1] = dpf::make_dpf(
    std::uint8_t{12},
    dpf::wildcard_value<std::uint32_t>{});
// assign the payload later; eval before assign throws

using scheme = dpf::ppvc<std::uint8_t, 8>;
const auto pp = scheme::setup();
const auto [com, st] = scheme::commit(pp);
const auto op = scheme::open(st, 0, 0x5a, std::uint8_t{40});

Go deeper: [guided tour — wildcards](@ref tour_outputs), [PPVC](@ref tour_ppvc), [PPVC manual](@ref ppvc_manual), [input types](@ref input_types), [output types](@ref output_types).