- Added new API for generating transcripts - detailed logs for advanced debugging, network tracing, and zero-knowledge proofs using MPC-in-the-head.
- Moved the PRZS implementation into its own protocol object.
- Began running regression tests using Python 3.12.
- Minor documentation improvements.
- Restored missing regression tests, improved code coverage, and removed obsolete code.
- Our first stable release!
- Split encoders into separate field arithmetic and encoding objects.
- share() and reveal() methods automatically apply a default encoding with optional caller override.
- API explicitly distinguishes between encoding-agnostic and encoding-specific operations.
- Consistent support for private/private, public/private, and private/public arithmetic, based on argument types instead of separate methods.
- Added configurable logging for message transcripts.
- Added "cicada generate-shares" command for pedagogy.
- Reorganized the documentation and added instructions for building the docs locally.
- Renamed ActiveProtocol -> ActiveProtocolSuite.
- Renamed AdditiveProtocol -> AdditiveProtocolSuite.
- Renamed ShamirProtocol -> ShamirProtocolSuite.
- Renamed ShamirBasicProtocol -> ShamirBasicProtocolSuite.
- Protocol suite encoders have been removed from the public API.
- Added multiply(), divide(), and reshare() methods to all protocol suites.
- Significantly improved FixedFieldEncoder.uniform() performance.
- Switched to a faster dot-product implementation for ShamirProtocolSuite.
- Added documentation on active security.
- ActiveProtocolSuite.verify() didn't work with scalar secrets.
- Calculator service supports unix domain sockets.
- Improved test coverage.
- Switched from setuptools to flit for builds.
- Added ActiveProtocol, our first protocol with a security model against active adversaries.
- Added private summation and private dot product operations to all protocol objects.
- Added TLS support to SocketCommunicator.split() and SocketCommunicator.shrink().
- Added SocketCommunicator.run_forever() for starting MPC services.
- Created cicada.calculator as an example of MPC-as-a-service.
- Regression tests use the calculator service, eliminating lots of repetitive test code.
- Rename Tags -> Tag for consistency, clarity.
- Rename all_gather() -> allgather() for consistency, clarity.
- Raise a better error if a send operation would block.
- NetstringSocket didn't handle sending large messages correctly.
- SocketCommunicator.run() would sometimes hang returning results from large numbers of players.
- Sped-up regression tests significantly by removing unnecessary redundancy.
- Began formally testing Cicada with Python 3.8 and 3.10.
- Added user guide sections on Shamir sharing and fault recovery.
- Reorganized SocketCommunicator statistics, and added statistics organized by message type.
- Added the cicada-perf command for benchmarking communications.
- Added indices and threshold properties to ShamirBasicProtocol and ShamirProtocol.
- SocketCommunicator setup didn't always use the correct rank and name in log output.
- Fixed a problem with the way thresholds are constrained in ShamirProtocol.
- Explicitly specify process names for debugging with SocketCommunicator.run().
- Removed obsolete code.
- A botched merge left some changes out of the 0.5.0 release.
- ShamirProtocol provides the same operations as AdditiveProtocol.
- New ShamirBasicProtocol provides a subset of operations, but with relaxed constraints on share degree.
- Reduced per-message SocketCommunicator overhead.
- SocketCommunicator.run, SocketCommunicator.shrink, and SocketCommunicator.split support Unix domain sockets.
- Rewrite the SocketCommunicator.shrink implementation for simplicity.
- SocketCommunicator can raise exceptions while sending.
- Rewrote the SocketCommunicator message queue for reduced resource consumption and greater flexibility.
- Point-to-point SocketCommunicator operations support user-defined message tags.
- Reduced the number of coordinating messages during logging.
- Many improvements in library logging output.
- Added a user guide article on logging.
- SocketCommunicator supports TLS encryption.
- SocketCommunicator supports Unix domain sockets.
- Moved SocketCommuniator initialization into a separate module.
- Fixed problems with AdditiveProtocol.private_public_power.
- Reduced default log output, and made log output more consistent.
- Raise an exception trying to use a communicator that's been freed.
- Removed the cicada.bind module.
- Improved code coverage from 80% to 95%.
- Greatly improved SocketCommunicator startup behavior.
- SocketCommunicator can choose random ports for players other than root.
- Made SocketCommunicator.override() more flexible.
- Fixed a bug in AdditiveProtocol.zigmoid().
- Eliminated warnings waiting for interactive user input.
- cicada.interactive.secret_input() just prompts for input.
- Created new cicada command to replace cicada-exec, which is deprecated.
- Replaced NNGCommunicator with SocketCommunicator, for vastly improved reliability.
- Added ReLU function.
- Added absolute value function.
- Added bit decomposition function.
- Added division function.
- Added equality comparison function.
- Added floor function.
- Added less-than-zero function.
- Added logical negation function.
- Added min and max functions.
- Added multiplicative inverse function.
- Added zigmoid function.
- Added many new documentation topics, including communication patterns, random seeds, timeouts, and working with multiple communicators.
- Switched to Github Actions for continuous integration.
- Improved code test coverage.
- Initial Release.