Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 155 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions docs/website/blog/2025-09-17-pre-built-linux-arm-binaries.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ To provide a clear overview of supported platforms, the team has added a new 'Pl

| Binary | Linux x64 | Linux arm64 | macOS arm64 | Windows x64 |
| ------------------ | :-------: | :---------: | :---------: | :---------: |
| mithril-aggregator | ✔ | ✔ ⁽\*⁾ | ⛔ | ⛔ |
| mithril-signer | ✔ | ✔ ⁽\*⁾ | ⛔ | ⛔ |
| mithril-client | ✔ | ✔ ⁽\*⁾ | ✔ | ✔ |
| mithril-aggregator | ✔ | ✔ ⁽\*⁾ | ⛔ | ⛔ |
| mithril-signer | ✔ | ✔ ⁽\*⁾ | ⛔ | ⛔ |
| mithril-client | ✔ | ✔ ⁽\*⁾ | ✔ | ✔ |

⁽\*⁾⚠️ Linux arm64 builds are provided on a best-effort basis and are not officially supported.

Expand Down
6 changes: 6 additions & 0 deletions mithril-stm/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## 0.6.1 (11-27-2025)

### Added

- Added Schnorr signature modules.

## 0.6.0 (11-19-2025)

### Changed
Expand Down
21 changes: 19 additions & 2 deletions mithril-stm/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mithril-stm"
version = "0.6.0"
version = "0.6.1"
edition = { workspace = true }
authors = { workspace = true }
homepage = { workspace = true }
Expand All @@ -16,16 +16,28 @@ crate-type = ["lib", "cdylib", "staticlib"]
[features]
default = ["rug-backend"]
rug-backend = ["rug/default"]
num-integer-backend = ["num-bigint", "num-rational", "num-traits"]
num-integer-backend = ["dep:num-bigint", "dep:num-rational", "dep:num-traits"]
benchmark-internals = [] # For benchmarking multi_sig
future_proof_system = [] # For activating future proof systems
future_snark = [
"dep:ff",
"dep:group",
"dep:num-traits",
"dep:dusk-poseidon",
"dep:dusk-jubjub",
] # For activating snark features

[dependencies]
anyhow = { workspace = true }
blake2 = "0.10.6"
# Enforce blst portable feature for runtime detection of Intel ADX instruction set.
blst = { version = "0.3.16", features = ["portable"] }
digest = { workspace = true }
dusk-jubjub = { version = "0.15.1", optional = true }
dusk-poseidon = { version = "0.41.0", optional = true }
ff = { version = "0.13.1", optional = true }
group = { version = "0.13.0", optional = true }
num-traits = { version = "0.2.19", optional = true }
rand_core = { workspace = true }
rayon = { workspace = true }
serde = { workspace = true }
Expand Down Expand Up @@ -58,6 +70,11 @@ name = "multi_sig"
harness = false
required-features = ["benchmark-internals"]

[[bench]]
name = "schnorr_sig"
harness = false
required-features = ["future_snark"]

[[bench]]
name = "stm"
harness = false
Expand Down
17 changes: 14 additions & 3 deletions mithril-stm/benches/multi_sig.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
use blake2::{Blake2b, Digest, digest::consts::U64};
use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};
use mithril_stm::{BlsSignature, BlsSigningKey, BlsVerificationKey};
use rand_chacha::ChaCha20Rng;
use rand_core::{RngCore, SeedableRng};

use mithril_stm::{BlsSignature, BlsSigningKey, BlsVerificationKey};

fn batch_benches(c: &mut Criterion, array_batches: &[usize], nr_sigs: usize) {
let mut group = c.benchmark_group("MultiSig".to_string());
let mut rng = ChaCha20Rng::from_seed([0u8; 32]);
Expand Down Expand Up @@ -47,16 +48,26 @@ fn aggregate_and_verify(c: &mut Criterion, nr_sigs: usize) {
let mut msg = [0u8; 32];
rng.fill_bytes(&mut msg);
let mut mvks = Vec::new();
let mut msks = Vec::new();
let mut sigs = Vec::new();
for _ in 0..nr_sigs {
let sk = BlsSigningKey::generate(&mut rng);
let vk = BlsVerificationKey::from(&sk);
let sig = sk.sign(&msg);
sigs.push(sig);
msks.push(sk);
mvks.push(vk);
}

group.bench_function(BenchmarkId::new("Individual verif", nr_sigs), |b| {
group.bench_function(BenchmarkId::new("Signature", nr_sigs), |b| {
b.iter(|| {
for sk in msks.iter() {
let _ = sk.sign(&msg);
}
})
});

group.bench_function(BenchmarkId::new("Verification", nr_sigs), |b| {
b.iter(|| {
for (vk, sig) in mvks.iter().zip(sigs.iter()) {
assert!(sig.verify(&msg, vk).is_ok());
Expand All @@ -81,7 +92,7 @@ fn batch_multi_sig_benches(c: &mut Criterion) {
batch_benches(c, &[1, 10, 20, 50, 100], 300);
}
fn batch_bls_benches(c: &mut Criterion) {
aggregate_and_verify(c, 856);
aggregate_and_verify(c, 1000);
}

criterion_group!(name = benches;
Expand Down
Loading
Loading