Skip to content
Open
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
86 changes: 65 additions & 21 deletions Cargo.lock

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

10 changes: 7 additions & 3 deletions blst/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,15 @@ kzg = { path = "../kzg", default-features = false }
libc = { version = "0.2.148", default-features = false }
once_cell = { version = "1.18.0", features = ["critical-section"], default-features = false }
rand = { version = "0.8.5", optional = true }
rayon = { version = "1.8.0", optional = true }
rayon = { version = "1.8.0", optional = true }
smallvec = { version = "1.11.1", features = ["const_generics"] }
hex = { version = "0.4.3", default-features = false, features = ["alloc"] }
rust-kzg-blst-sppark = { path = "../blst-sppark", version = "0.1.0", optional = true }
serde = { version = "1.0.219", optional = true }
serde-big-array = { version = "0.5.1", optional = true }

[dev-dependencies]
bincode = { version = "2.0.1", features = ["serde"] }
criterion = "0.5.1"
kzg-bench = { path = "../kzg-bench" }
rand = "0.8.5"
Expand All @@ -23,7 +26,7 @@ rand = "0.8.5"
default = [
"std",
"rand",
"bgmw",
"bgmw", "serde"
]
std = [
"hex/std",
Expand Down Expand Up @@ -53,6 +56,7 @@ wbits = [
"kzg/wbits"
]
c_bindings = []
serde = ["dep:serde", "dep:serde-big-array"]

[[bench]]
name = "das"
Expand Down Expand Up @@ -96,4 +100,4 @@ harness = false

[[bench]]
name = "trusted_setup"
harness = false
harness = false
1 change: 1 addition & 0 deletions blst/src/types/fp.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use blst::blst_fp;
use kzg::G1Fp;

/// An element of the 381-bit base field of the BLS12-381 curve.
#[repr(C)]
#[derive(Debug, Default, Clone, Copy, Eq, PartialEq)]
pub struct FsFp(pub blst_fp);
Expand Down
23 changes: 23 additions & 0 deletions blst/src/types/fr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,15 @@ use kzg::eip_4844::BYTES_PER_FIELD_ELEMENT;
use kzg::Fr;
use kzg::Scalar256;

use crate::impl_serde;

/// An element of the 256-bit scalar field of the BLS12-381 curve.
#[repr(C)]
#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
pub struct FsFr(pub blst_fr);

impl_serde!(FsFr, BYTES_PER_FIELD_ELEMENT);

impl Fr for FsFr {
fn null() -> Self {
Self::from_u64_arr(&[u64::MAX, u64::MAX, u64::MAX, u64::MAX])
Expand Down Expand Up @@ -262,3 +267,21 @@ impl Fr for FsFr {
Scalar256::from_u8(&blst_scalar.b)
}
}

#[cfg(test)]
#[cfg(feature = "serde")]
mod tests {
use super::*;

#[test]
fn test_ser() {
let fr = FsFr::from_u64(1);
let serialized = bincode::serde::encode_to_vec(fr, bincode::config::standard())
.expect("Serialization failed");
assert_eq!(serialized.len(), BYTES_PER_FIELD_ELEMENT);
let (deserialized, _): (FsFr, _) =
bincode::serde::decode_from_slice(&serialized, bincode::config::standard())
.expect("Deserialization failed");
assert_eq!(fr, deserialized);
}
}
21 changes: 21 additions & 0 deletions blst/src/types/g1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ use kzg::G1ProjAddAffine;
use kzg::{G1Mul, G1};

use crate::consts::{G1_GENERATOR, G1_IDENTITY, G1_NEGATIVE_GENERATOR};
use crate::impl_serde;
use crate::kzg_proofs::g1_linear_combination;
use crate::types::fr::FsFr;

Expand All @@ -34,6 +35,8 @@ use super::fp::FsFp;
#[derive(Debug, Default, Clone, Copy, Eq, PartialEq)]
pub struct FsG1(pub blst_p1);

impl_serde!(FsG1, BYTES_PER_G1);

impl Hash for FsG1 {
fn hash<H: core::hash::Hasher>(&self, state: &mut H) {
self.0.x.l.hash(state);
Expand Down Expand Up @@ -414,3 +417,21 @@ impl G1ProjAddAffine<FsG1, FsFp, FsG1Affine> for FsG1ProjAddAffine {
}
}
}

#[cfg(test)]
#[cfg(feature = "serde")]
mod tests {
use super::*;

#[test]
fn test_ser() {
let g1 = FsG1::generator();
let serialized = bincode::serde::encode_to_vec(g1, bincode::config::standard())
.expect("Serialization failed");
assert_eq!(serialized.len(), BYTES_PER_G1);
let (deserialized, _): (FsG1, _) =
bincode::serde::decode_from_slice(&serialized, bincode::config::standard())
.expect("Deserialization failed");
assert_eq!(g1, deserialized);
}
}
21 changes: 21 additions & 0 deletions blst/src/types/g2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,15 @@ use kzg::Fr;
use kzg::{G2Mul, G2};

use crate::consts::{G2_GENERATOR, G2_NEGATIVE_GENERATOR};
use crate::impl_serde;
use crate::types::fr::FsFr;

#[repr(C)]
#[derive(Debug, Default, Clone, Copy, Eq, PartialEq)]
pub struct FsG2(pub blst_p2);

impl_serde!(FsG2, BYTES_PER_G2);

impl G2Mul<FsFr> for FsG2 {
fn mul(&self, b: &FsFr) -> Self {
let mut result = blst_p2::default();
Expand Down Expand Up @@ -121,3 +124,21 @@ impl FsG2 {
result.mul(&FsFr::rand())
}
}

#[cfg(test)]
#[cfg(feature = "serde")]
mod tests {
use super::*;

#[test]
fn test_ser() {
let g2 = FsG2::generator();
let serialized = bincode::serde::encode_to_vec(g2, bincode::config::standard())
.expect("Serialization failed");
assert_eq!(serialized.len(), BYTES_PER_G2);
let (deserialized, _) =
bincode::serde::decode_from_slice(&serialized, bincode::config::standard())
.expect("Deserialization failed");
assert_eq!(g2, deserialized);
}
}
Loading
Loading