Common base for CKKSMaster and ThresholdMaster (and the frozen
legacy PaillierMaster). Concrete masters carry whatever context
and public keys their cryptographic backend needs; the protocol body
in master_aggregate() reaches sites through contribute() and
recovers the total through the decrypt() generic, which
dispatches on the concrete master class, so the same protocol runs
over any backend.
Value
nothing — this class is abstract, so calling it raises an error
instead of returning an object. It exists so that decrypt()
and master_aggregate() dispatch on a common parent. Construct a
concrete master with make_ckks_master() or
make_threshold_master().
Details
A master never encrypts site data, and has no encryption entry point
at all. Each party encrypts its own values with encrypt(), which
for a Site takes nothing but the site itself: it encrypts with
the public parameters it was handed when it was wired. The
asymmetry is deliberate and worth reading off the API: decryption is
privileged — it needs secret material, or the standing to convene
every site — while encryption needs only public material and is
available to anyone.
