-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2 from warlock-labs/0xalcibiades/war-287-project-…
…skeleton-for-rust-crate chore: rust crate skeleton
- Loading branch information
Showing
8 changed files
with
278 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
|