  Context: Secure Multiparty Computation (MPC) refers to a family of
cryptographic techniques where mutually untrusting parties may compute
functions of their private inputs while revealing only the function output.
  Inquiry: It can be hard to program MPCs correctly and efficiently using
existing languages and frameworks, especially when they require coordinating
disparate computational roles. How can we make this easier?
  Approach: We present Symphony, a new functional programming language for MPCs
among two or more parties. Symphony starts from the single-instruction,
multiple-data (SIMD) semantics of prior MPC languages, in which each party
carries out symmetric responsibilities, and generalizes it using constructs
that can coordinate many parties. Symphony introduces **first-class shares**
and **first-class party sets** to provide unmatched language-level expressive
power with high efficiency.
  Knowledge: Developing a core formal language called $\lambda$-Symphony, we
prove that the intuitive, generalized SIMD view of a program coincides with its
actual distributed semantics. Thus the programmer can reason about her programs
by reading them from top to bottom, even though in reality the program runs in
a coordinated fashion, distributed across many machines. We implemented a
prototype interpreter for Symphony leveraging multiple cryptographic backends.
With it we wrote a variety of MPC programs, finding that Symphony can express
optimized protocols that other languages cannot, and that in general Symphony
programs operate efficiently.
  [ full abstract at https://doi.org/10.22152/programming-journal.org/2023/7/14
]
