libdpf/doc/pages/api.md
2026-09-26 23:51:06 -06:00

3.6 KiB

Call index

This is the map of calls. Each row is one sentence and a header. A complete program for the first rows is the [first program](@ref basics). The same calls, one line each, continue below.

The two namespaces are [dpf](@ref dpf) and [grotto](@ref grotto). In the sidebar this page sits under API reference next to the namespace, class, and file indexes. Start here when you know the call you want.

Build a key

Call What it returns
[dpf::make_dpf](@ref dpf/incremental.hpp) Two party keys. A dealer knows the index and the payload.
[dpf::make_dpf_doerner_shelat](@ref dpf/doerner_shelat.hpp) The same key when the parties already share the index.
[dpf::geneval_point](@ref dpf/geneval.hpp) Answer shares for one query. No reusable key.
[dpf::geneval_cmp](@ref dpf/geneval.hpp) Answer shares for a comparison. No reusable key.
[dpf::make_dpf3](@ref dpf/dpf3.hpp) Three keys. Any two open the value.
[dpf::make_multipoint](@ref dpf/multipoint.hpp) One key for many secret points.
[dpf::ppvc](@ref ppvc_manual) A point-programmable vector commitment. The hidden coordinate is set when the commitment is opened.

Evaluate

Call What you pass
[dpf::eval_point](@ref dpf/eval_point.hpp) One public input. *result is that party's leaf share.
[dpf::eval_point](@ref dpf/eval_unified.hpp) (dpf::cmp, ...) One public input on a comparison key. The share is additive.
[dpf::eval_interval](@ref dpf/eval_interval.hpp) An inclusive range, one share per input.
[dpf::eval_sequence](@ref dpf/eval_sequence.hpp) A sorted list of inputs.
[dpf::eval_full](@ref dpf/eval_full.hpp) Every input in the domain.
[dpf::reconstruct](@ref dpf/secret_share.hpp) Both shares. Leaf shares subtract. Comparison shares add.
[dpf::eval_point](@ref dpf/interval.hpp) (dpf::ic, ...) One public input on an interval key.

Comparisons and tags

Call Meaning
[dpf::lt](@ref dpf/dcf.hpp), [leq](@ref dpf/dcf.hpp), [gt](@ref dpf/dcf.hpp), [geq](@ref dpf/dcf.hpp) The comparison channel. One per key.
[dpf::eq](@ref dpf/dcf.hpp) A point payload, not that channel.
[dpf::ic](@ref dpf/interval.hpp) Public interval on a secret mask.
[dpf::at](@ref dpf/placement.hpp) A value on a prefix, and a value at the leaf.
[dpf::verifiable](@ref dpf/verifiable.hpp) The key carries a proof token.
[dpf::vec](@ref dpf/vec.hpp) Several lanes at one leaf. No carry between lanes.
[dpf::wildcard_value](@ref dpf/wildcard.hpp) Payload filled in after the key exists. Eval throws until then.

Domains and leaves

The catalogs, with the types that are inputs and the types that are outputs:

  • [Input types](@ref input_types): integers, modint, xint, bitstring, keyword, keyword2, fixed-point.
  • [Output types](@ref output_types): bit, twobit, nyble, fields, curve points, shares, vec.

bit, twobit, and nyble are packed output lanes. keyword2 is a domain, not a leaf.

After the offset is public

[Grotto](@ref guided_tour) evaluates a function of x once the public offset is open. The pages are [offset Horner, jets, and ring switch](@ref jet_and_ring) and [representation shift and twisted jets](@ref repr_and_twist).

  • [Which DPF?](@ref which_dpf) if you are still choosing the object.
  • [Evaluating DPFs](@ref evaluation) for point, interval, sequence, and full-domain cost.
  • [Bibliography](@ref bibliography) for the papers behind the keys.
  • [Application mockups](@ref applications) for the DPF step inside a larger protocol.