Skip to content

Commit

Permalink
Merge pull request #2 from warlock-labs/0xalcibiades/war-287-project-…
Browse files Browse the repository at this point in the history
…skeleton-for-rust-crate

chore: rust crate skeleton
  • Loading branch information
0xAlcibiades authored Jul 2, 2024
2 parents 90692f5 + 354fb0f commit 9550830
Show file tree
Hide file tree
Showing 8 changed files with 278 additions and 3 deletions.
149 changes: 149 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
name: CI

on:
push:
branches:
- main
tags:
- 'v*.*.*'
pull_request:
types: [ opened, synchronize, reopened ]
branches:
- main
env:
CARGO_TERM_COLOR: always

jobs:
test:
name: test ${{ matrix.rust }} ${{ matrix.flags }}
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
rust: [ "stable", "beta", "nightly", "1.65" ] # MSRV
flags: [ "--no-default-features", "", "--all-features" ]
exclude:
# Skip because some features have highest MSRV.
- rust: "1.65" # MSRV
flags: "--all-features"
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
# Only run tests on the latest stable and above
- name: check
if: ${{ matrix.rust == '1.65' }} # MSRV
run: cargo check --workspace ${{ matrix.flags }}
- name: test
if: ${{ matrix.rust != '1.65' }} # MSRV
run: cargo test --workspace ${{ matrix.flags }}

coverage:
name: Code Coverage
runs-on: ubuntu-latest
env:
LLVMCOV_VERSION: 0.5.14
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
override: true
profile: minimal
components: clippy, rustfmt

- name: Cache rust dependencies
uses: Swatinem/rust-cache@v2
with:
shared-key: rust-cache-hyper-server-coverage-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}-${{ env.LLVMCOV_VERSION }}

- name: Install cargo-llvm-cov
run: cargo install cargo-llvm-cov --version=${{ env.LLVMCOV_VERSION }} --locked

- name: Generate code coverage
run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos
files: lcov.info
fail_ci_if_error: false

# TODO(Miri presently has errors/detects undefined behavior in the codebase)
# We should fix this and then enable.
# miri:
# name: miri ${{ matrix.flags }}
# runs-on: ubuntu-latest
# timeout-minutes: 30
# strategy:
# fail-fast: false
# matrix:
# flags: [ "--no-default-features", "", "--all-features" ]
# env:
# MIRIFLAGS: -Zmiri-strict-provenance
# steps:
# - uses: actions/checkout@v3
# - uses: dtolnay/rust-toolchain@miri
# - uses: Swatinem/rust-cache@v2
# with:
# cache-on-failure: true
# - run: cargo miri setup ${{ matrix.flags }}
# - run: cargo miri test ${{ matrix.flags }}

feature-checks:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@stable
- uses: taiki-e/install-action@cargo-hack
- uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
- name: cargo hack
run: cargo hack check --feature-powerset --depth 2

clippy:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@clippy
- uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
- run: cargo clippy --workspace --all-targets --all-features
env:
RUSTFLAGS: -Dwarnings

docs:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@nightly
- uses: Swatinem/rust-cache@v2
with:
cache-on-failure: true
- run: cargo doc --workspace --all-features --no-deps --document-private-items
env:
RUSTDOCFLAGS: "--cfg docsrs -D warnings"

fmt:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt
- run: cargo fmt --all --check
14 changes: 14 additions & 0 deletions .github/workflows/audit-on-push.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: Security audit
on:
push:
paths:
- '**/Cargo.toml'
- '**/Cargo.lock'
jobs:
security_audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions-rs/audit-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
12 changes: 12 additions & 0 deletions .github/workflows/scheduled-audit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
name: Security audit
on:
schedule:
- cron: '0 0 * * *'
jobs:
security_audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions-rs/audit-check@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,7 @@ Cargo.lock
*.pdb

# Development jupyter notebook business
notebooks/.ipynb_checkpoints
notebooks/.ipynb_checkpoints

# RustRover
/.idea
20 changes: 20 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[package]
authors = ["Tristan Britt <[email protected]>", "0xAlcibiades <[email protected]>"]
categories = ["cryptography", "mathematics"]
description = "Implementation of the BLS signature scheme using the alt-bn128 curve."
homepage = "https://github.com/warlock-labs/alt-bn128-bls"
keywords = ["alt-bn128", "bls", "cryptography", "elliptic-curve", "pairing"]
license = "MIT"
readme = "README.md"
repository = "https://github.com/warlock-labs/alt-bn128-bls.git"
name = "alt-bn128-bls"
version = "0.0.1"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

[lib]

[dev-dependencies]
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2024 Warlock
Copyright 2024 Warlock Labs Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
78 changes: 77 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,77 @@
# alt-bn128-bls
# alt-bn128-bls

[![License](https://img.shields.io/crates/l/alt-bn128-bls)](https://choosealicense.com/licenses/mit/)
[![Crates.io](https://img.shields.io/crates/v/alt-bn128-bls)](https://crates.io/crates/alt-bn128-bls)
[![Docs](https://img.shields.io/crates/v/alt-bn128-bls?color=blue&label=docs)](https://docs.rs/alt-bn128-bls/)
![CI](https://github.com/warlock-labs/alt-bn128-bls/actions/workflows/CI.yml/badge.svg)

alt-bn128-bls is a Rust library implementing the BLS (Boneh-Lynn-Shacham) signature scheme using the alt-bn128 (BN254) elliptic curve. It provides threshold signing capabilities and associated utilities, initially developed for use in the Warlock Chaos product.

## Features

- Implementation of BLS signatures on the alt-bn128 (BN254) curve
- Support for threshold signatures
- Efficient pairing operations leveraging the alt-bn128 curve's properties
- Utilities for key generation, signing, and verification
- Compatibility with Ethereum's precompiled contracts for alt-bn128 operations

## Usage

Add this to your `Cargo.toml`:

```toml
[dependencies]
alt-bn128-bls = "0.0.1"
```

Here's a basic example of generating a key pair, signing a message, and verifying the signature:

```rust
use alt_bn128_bls::{KeyPair, sign, verify};

fn main() {
let key_pair = KeyPair::generate();
let message = b"Hello, World!";

let signature = sign(&key_pair.secret_key, message);
assert!(verify(&key_pair.public_key, message, &signature));
}
```

For more examples and usage details, see the [API documentation](https://docs.rs/alt-bn128-bls).

## Core Concepts

- **BLS Signatures**: A signature scheme allowing for signature aggregation and threshold signing.
- **alt-bn128 (BN254) Curve**: An elliptic curve with efficient pairing operations, widely used in zkSNARKs and supported by Ethereum precompiles.
- **Threshold Signatures**: A cryptographic primitive allowing a subset of parties to collaboratively sign messages.

## Performance

The alt-bn128 curve is chosen for its efficiency and widespread support, particularly in Ethereum and other EVM-compatible blockchains. The library aims to provide optimal performance for BLS operations on this curve.

## Roadmap

The following features and improvements are planned for future releases:

- [ ] Basic BLS signature implementation
- [ ] Key generation utilities
- [ ] Signature aggregation
- [ ] Threshold signature scheme
- [ ] Optimizations for common operations
- [ ] Extended test suite and benchmarks
- [ ] Support for serialization formats used in blockchain contexts

## Contributing

Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests on the [GitHub repository](https://github.com/warlock-labs/alt-bn128-bls).

## License

This project is licensed under the [MIT License](https://choosealicense.com/licenses/mit/).

## Contact

Warlock Labs - [https://github.com/warlock-labs](https://github.com/warlock-labs)

Project Link: [https://github.com/warlock-labs/alt-bn128-bls](https://github.com/warlock-labs/alt-bn128-bls)
1 change: 1 addition & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

0 comments on commit 9550830

Please sign in to comment.