Our library was originally developed to implement our protocols for privacy-preserving and fair reconciliation on ordered sets (PROS) and test their performance (see figure to the right). It has since been extended to become a more general library which contains different cryptographic tools and protocol implementations. In particular, it can be used to efficiently build privacy-preserving applications. The library is being developed in both C++ and Java. As shown for our iPhone application, the C++ library can efficiently be used in a heterogenous software project consisting of Objective-C++ and C++ code.

### Details on the Implementation

The figure above illustrates the main components for two-party PROS. Each component is coded in a different color and all interacting components use well-defined interfaces. Therefore, specific implementations for each component can be exchanged with other implementations, which provide the same functionality without requiring significant changes to any of the other components. The PROS protocols (blue) take ordered sets as inputs (yellow). An ordered set is a set combined with the ranks of its elements. Furthermore, the PROS protocols use PSI protocols (red). Currently, only Freedman's PSI, which operates on a polynomial representation of the data and uses a homomorphic cryptosystem, is implemented. The network layer (green) enables the communication between the different parties. All computations possibly involve long integers. This, in particular, applies to operations involving set elements, polynomials as well as cryptographic keys. The library builds on the well-known and efficient GNU Multi-Precision Arithmetic Library (GMP).

### List of Implemented Primitives and Protocols

#### Cryptography

- RSA
- ElGamal
- Paillier
- Benaloh

#### Protocols

- Freedman's Private Set Intersection
- Privacy-Preserving Reconciliation on Ordered Sets

### Applications

Details on applications which have been implemented based on our library can be found in the Application Section.