2026-05-29 12:13:44 +02:00

2.3 KiB

Changelog

All notable changes to this project will be documented in this file.

[0.5.0] — 2026-05-25

Added

  • Circuits as static libraries (#16)

    The central change in this release. Previously, witness generation required spawning a compiled executable per circuit.

    Each circuit is now a linkable static archive (lib{circuit}.a) with a stable C FFI.

    Two entry points per circuit:

    • {circuit}_generate_witness(WitnessInput*, Bytes*): Generates a witness in memory from a JSON input string and an embedded .dat buffer; the caller owns the output buffer.
    • {circuit}_generate_witness_from_files(dat, inputs, output): Generates a witness from a .dat file and a JSON input file, writing the witness to an output file.

    The Rust crates (lbc-{circuit}-sys) wrap this FFI directly and can either link against a local build or download a prebuilt release automatically.

    See rust/README.md for usage.

  • Bundled static GMP (#19)

    libgmp is now compiled from source and statically linked, removing the runtime dependency on a system GMP installation, and standardizing the GMP version used across all platforms.

  • Older glibc compatibility (#21)

    Linux builds now target an older glibc ABI for broader distribution support.

  • Dual MIT/Apache-2.0 license.

Fixed

  • Symbol resolution conflicts (#22, #28, #29)

    When multiple circuit libraries are linked into the same binary, the linker silently collapsed shared internal symbols to a single definition, corrupting witness parsing and causing SIGSEGV.

    See CONTRIBUTING.md for a full explanation and maintenance notes.

  • macOS C++ library linkage (#27)

    Fixed missing C++ standard library on macOS builds.

  • Circuit assert statements (#26)

    Assert statements in the circuit source assumed standalone binary execution, causing disruptions when compiled as a library.

  • Comparator full less-than

    Fixed incorrect output in the full less-than comparator circuit.

Housekeeping

  • Auto-update Nix hashes on release (#25)
  • Incremental builds (#20)
  • Pinned CI action versions (#24)
  • rustfmt configuration (#23)
  • GMP version consistency (#31)
  • String formatting fix (#30)

No changelog was kept prior to v0.5.0.