mattrglobal / ffi-bbs-signatures

An FFI wrapper around the implementation of BBS+ signatures in Ursa
Apache License 2.0
24 stars 22 forks source link
assurance nucleus

Mattr logo

BBS Signature FFI Wrapper

This repository is home to a foreign function interface (FFI) wrapper around the Rust based bbs crate maintained by the Hyperledger Ursa project.

BBS+ Signatures are a digital signature algorithm originally born from the work on Short group signatures by Boneh, Boyen, and Shachum which was later improved on in Constant-Size Dynamic k-TAA as BBS+ and touched on again in section 4.3 in Anonymous Attestation Using the Strong Diffie Hellman Assumption Revisited .

BBS+ Signatures require a pairing-friendly curve, this library includes support for BLS12-381.

BBS+ Signatures allow for multi-message signing whilst producing a single output signature. With a BBS signature, a proof of knowledge based proof can be produced where only some of the originally signed messages are revealed at the discretion of the prover.

Supported Environments

Every release of this repository publishes a new github release including publishing the platform specific artifacts required to run the library in different environments. See the release process for more details on this process

Getting started

This repository makes use of Yarn to manage the dependencies related to the development environment

To install the development dependencies run

yarn install --frozen-lockfile

To build the library for all available platforms run

yarn build

Available wrappers

.NET C# wrapper

./wrappers/dotnet

Java wrapper

./wrappers/java

Objective-C wrapper

./wrappers/obj-c

Python wrapper

./wrappers/python

Each wrapper has individual documentation:

Project Structure

├── docs
│   └─ {file_name.md}
│
│── scripts                 # Bash scripts for building static/dynamic rust libs
│── src                     # Rust Bbs Signatures wrapper
├── wrappers                # Individual wrapper source code
│   └─ {wrapper_name}
│       ├── README.md
│       └─ {src files}
│
├── README.md
└── CHANGELOG.md

Contributing

Read our contributing guide to learn about our development process.