Releases: coinbase/cb-mpc
Release list
CB-MPC v0.2.1
Security & Bug Fixes
- Harden Paillier validation:
create_pubnow validates the modulus (odd, >1, withinbit_size) and returns error_t, preventing acceptance of malicious moduli from counterparties. - Enforce Paillier modulus size bounds in ECDSA 2PC keygen/refresh to prevent potential buffer overflows in constant-time decryption.
- Fix use-after-free in
buf_t:operator=andoperator+=with an aliasingmem_tview would read zeroed/freed memory. - Fix out-of-bounds write in HD key derivation: resize derived_keys inside
derive_keys()rather than relying on caller pre-allocation. - Fix const-correctness in secp256k1 point conversion to avoid undefined behavior from casting away const on Jacobian coordinates.
Other
- Add
vartime_scope_ttopaillier_t::verify_cipherfor correct side-channel annotation. - Add
bits_t::ref_tcopy assignment operator for correct value semantics.
CB-MPC v0.2.0
Major Refactoring Release
This release introduces a significant architectural reorganization of the cb-mpc library, focused on establishing clear API boundaries and improving the developer experience. It also includes various bug fixes and hardening.
Highlights
New High-Level API Layers
The library now provides two distinct public API layers for consuming MPC protocols:
- C++ API (include/cbmpc/api/) — High-level, type-safe C++ wrappers in the coinbase::api namespace covering all major protocols: ECDSA (2PC & MPC), EdDSA (2PC & MPC), Schnorr (2PC & MPC), HD keyset derivation, PVE (base PKE, batch, access-structure), and TDH2.
- C API (include/cbmpc/c_api/) — ABI C bindings (cbmpc_* functions) designed for building wrappers in other languages such as Go, Rust, etc.
Bug Bounty Program
We have published a dedicated BUG_BOUNTY.md that clarifies the scope and severity guidelines for our HackerOne bug bounty program. See the BUG_BOUNTY.md for full details on what qualifies and how to report.
Two Install Modes
- Public install (make install): Only installs the high-level API and core headers — recommended for most users.
- Full install (make install-full): Also installs internal headers for users who need to modify protocols or build custom primitives.
We stress that all functions in the public API are safe, including validation of all externally received inputs. In contrast, not all lower-level APIs include all such validations.
Breaking Changes
Header include paths have changed. All public headers are now under <cbmpc/api/...>, <cbmpc/c_api/...>, or <cbmpc/core/...>. Internal headers use <cbmpc/internal/...>.
Go Demos Removed
The Go wrappers and demos (demos-go/) have been removed from this repository. They now live in a dedicated repository at coinbase/cb-mpc-go.
New Demos
- demo-api/ — New API-level demos showcasing common use cases through the high-level C++ API:
- demo-cpp/parallel_transport/ — New demo for parallel transport usage
CB-MPC v0.1.1
This is a cumulative release including all changes since v0.1.0. The primary focus is security, featuring multiple fixes and hardening changes across crypto primitives, ZK proofs, and protocol-level validation. We recommend that all users upgrade to this version.
Security fixes & hardening
- Side-channel resistance improvements:
- Make key curve operations more consistently constant-time (including constant-time point operations and constant-time conditional selection/copy helpers).
- Replace non-constant-time equality checks in core buffer/types with constant-time comparisons.
- Enforce constant-time-capable curves for certain operations and reduce scalars mod q where required.
- Correctness/security fixes in crypto primitives:
- RSA-OAEP: correctly configure the MGF1 hash (previously could fall back to SHA-1 unintentionally).
- AES-GCM: zeroize decrypted plaintext on authentication failure to avoid leaving sensitive data in memory.
- Fix constant-time big-number comparison corner cases (e.g., negative values).
- Memory-safety fixes:
- Prevent an out-of-bounds read in PVE message handling by validating buffer sizes before slicing.
- Prevent potential buffer/offset issues in serialization/conversion paths by adding bounds and overflow checks.
- Stronger input validation across proofs and protocols:
- Add range checks and curve point validation in ZK verifiers; add parameter validation for Fischlin-style proofs.
- Fix vector hash encoding to include length/size prefixes; add unit test coverage.
- Add batch size consistency checks across protocols (including ECDSA, Schnorr, and DKG).
- Add additional validation for secret sharing indices/thresholds and broader protocol message validation.
Developer & integration improvements
- Enable more flexible t-of-n operation participation by identifying parties via unique party names (indices become session-local rather than persistent).
- Go/FFI refactor: move C memory allocation helpers into a dedicated FFI module and update CGO bindings accordingly.
- Miscellaneous cleanup and robustness improvements (removal of unused code paths, additional assertions/checks).
Behavior / compatibility notes
- Validation is stricter by design: malformed inputs that previously slipped through (or triggered asserts) may now return explicit errors earlier.
- Paillier randomness generation now fails with an error when the sampled value is not coprime to N; callers should handle the error.
- Go/CGO consumers who depended on internal headers/types may need minor include/import updates and a rebuild.
CB-MPC 0.1.0
This is the initial public release of Coinbase Open Source MPC Library.
This release contains the following:
- The complete source code for Coinbase Open Source MPC Library
- Cryptographic code, specifications and theory documents for the MPC Library
- External code review report from Cure53
- For full details and instructions see README.md