- Private set intersection of sparse columns Implemented as a new operation
JoinWithColumnMasks
.
- Added support for 128-bit integers
- Postpone resharing Performance optimization to reduce communication by delaying conversions from 3-out-of-3 secret shares to 2-out-of-3, if 2-out-of-3 shares are not immediately required by proceeding operations (e.g. additions).
- Better SMPC protocol for Private set intersection The new protocol follows the description of the Join protocol from https://eprint.iacr.org/2019/518.pdf. The operation is renamed from
SetIntersection
toJoin
, and supports four join flavors: Inner, Left, Union and Full. - Concatenate Primitive operation to concatenate arrays.
- Apply permutation Primitive operation that permutes private or public data using a private or public permutation.
- General matrix multiplication Primitive operation
Gemm
that generalizesMatmul
. - Division Two algorithms implemented as custom operations: Approximate GoldschmidtDivision and slow but exact LongDivision.
- Sort Efficient radix sort with O(n) complexity from https://eprint.iacr.org/2019/695.pdf.
- Runtime documentation + examples We now provide detailed documentation for CipherCore runtime, which can be used to execute a secure protocol produced by CipherCore compiler between actual parties over the network. E-mail us to request access to play with runtime.
- Private set intersection We added a simple implementation of private set intersection based on sorting (available as a binary
ciphercore_set_intersection
). - Exponent, Sigmoid, GeLU We implemented efficiently several non-linear transformations that are crucial for machine learning (e.g., transformers).
- Better SMPC protocol for Truncate The newly implemented protocol for the Truncate operation is more stable and never makes large errors, which makes it more suitable for fixed-point arithmetic necessary for training machine learning models.
- MixedMultiply + improvements in InverseSqrt and NewtonInversion We added a new operation and the corresponding secure protocol for multiplying a bit and an integer avoid an expensive conversion. This allows to significantly improve the performance of various operations including ReLU and division.
- Sorting: custom operation + support for signed integers Now sorting is implemented as a custom operation, and it supports signed integers inputs.
- Efficiency improvements: optimizer, log-depth inlining We added several crucial improvements to the optimizing and inlining passes of the compiler.
- More complete and documented Python wrapper Finally, we overhauled and improved our Python wrapper pretty significantly. In particular, almost all the classes and functions now have readable docstrings.