Release Notes
Cicada 1.2.0 - November 28th, 2023
Added new API for generating transcripts - detailed logs for advanced debugging, network tracing, and zero-knowledge proofs using MPC-in-the-head.
Cicada 1.1.0 - October 9th, 2023
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.
Cicada 1.0.0 - September 15th, 2023
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.
Cicada 0.8.1 - October 15th, 2022
Reorganized the documentation and added instructions for building the docs locally.
Cicada 0.8.0 - October 14th, 2022
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.
Cicada 0.7.0 - August 9th, 2022
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.
Cicada 0.6.0 - June 17th, 2022
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.
Cicada 0.5.1 - May 4th, 2022
A botched merge left some changes out of the 0.5.0 release.
Cicada 0.5.0 - April 28th, 2022
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.
Cicada 0.4.0 - March 21st, 2022
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.
Cicada 0.3.0 - February 1st, 2022
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.
Cicada 0.2.0 - January 25th, 2022
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.
Cicada 0.1.0 - June 28th, 2021
Initial Release.