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

1.7 KiB
Raw Blame History

Multiparty & 3-server

Two-party keys are the default. The library also builds three-evaluator (2,3) keys, information-theoretic three-server DPFs, and dealer-free two-party keygen when the index is already shared.

Construction Parties Header
[dpf::make_dpf3](@ref dpf/dpf3.hpp) Any two of three open (Shamir / dual spine, [ePrint 2024/1658](@ref bib_dpf3)) dpf3.hpp
[dpf::make_dpf3_doerner_shelat](@ref dpf/dpf3_ds.hpp) Same keys from XOR shares of alpha dpf3_ds.hpp
make_dpf3_cmp / make_dpf3_ic / make_multipoint3 Comparisons, intervals, multipoint dpf3_cmp.hpp, dpf3_multipoint.hpp
[dpf::make_it_dpf3](@ref dpf/it_dpf3.hpp) Information-theoretic 3-server DPF ([ePrint 2023/028](@ref bib_itdpf)) it_dpf3.hpp
[dpf::make_dpf_doerner_shelat](@ref dpf/doerner_shelat.hpp) Two parties, shared index, no dealer for the point doerner_shelat.hpp
[dpf::geneval_*](@ref dpf/geneval.hpp) Answer shares for one query, no reusable key geneval.hpp
auto [k1, k2, k3] = dpf::make_dpf3(std::uint8_t{42}, dpf::fp61{7});
auto opened = dpf::reconstruct(
    dpf::as_share(k1, dpf::eval_point(k1, std::uint8_t{42})),
    dpf::as_share(k2, dpf::eval_point(k2, std::uint8_t{42})),
    dpf::as_share(k3, dpf::eval_point(k3, std::uint8_t{42})));

Party meshes and socket walks live under [trio.hpp](@ref dpf/net/trio.hpp) and the party/ harnesses. Application-shaped sketches include [3-party Duoram](@ref app_duoram) and [three-server PIR](@ref app_pir3).

Go deeper: [guided tour — three evaluators](@ref tour_dpf3), [Doerner–Shelat](@ref tour_ds), [evaluating DPFs](@ref evaluation), [bibliography](@ref bibliography).