.. image:: ../artwork/cicada.png :width: 200px :align: right .. _release-notes: Release Notes ============= Cicada 2.1.0 - December 12th, 2025 ---------------------------------- * Began running regression tests using Python 3.13. * Added regression tests for transcription. * ActiveProtocolSuite was missing the encoding attribute. * Added API to validate secret share storage. * Simplified the implementation of power(), and expanded the related documentation. * ShamirProtocolSuite.matvec() wasn't transcribed properly. * FixedPoint.encode() could produce incorrect results in some circumstances. * Eliminated potential bug in field_power() and power(). * Added slicing support to ShamirArrayShare for symmetry with AdditiveArrayShare. * Added a user guide article on array slicing. Cicada 2.0.0 - November 25th, 2024 ---------------------------------- * Added support for Numpy 2.0. * Fully documented PRZSProtocol and cicada.arithmetic.Field, and added a glossary to the documentation. * Significant changes and simplification of the cicada.transcript API. * Added support for generating consistency verification code transcripts. * cicada.arithmetic.Field.uniform() could generate values outside the field in some cases. * Renamed cicada.logging to cicada.logger to avoid shadowing the builtin logging module. 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.