Skip to content

Commit

Permalink
implement debug trait directly, clippy & fmt fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
lynxcs committed Dec 31, 2023
1 parent 7aef5bc commit 72e7a5b
Show file tree
Hide file tree
Showing 8 changed files with 86 additions and 18 deletions.
2 changes: 1 addition & 1 deletion constantine/src/types/fft_settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use kzg::{FFTSettings, Fr};
use crate::consts::SCALE2_ROOT_OF_UNITY;
use crate::types::fr::CtFr;

#[derive(Debug, Clone)]
#[derive(Clone)]
pub struct CtFFTSettings {
pub max_width: usize,
pub root_of_unity: CtFr,
Expand Down
2 changes: 1 addition & 1 deletion constantine/src/types/fk20_single_settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use crate::types::poly::CtPoly;
use super::fp::CtFp;
use super::g1::CtG1Affine;

#[derive(Debug, Clone, Default)]
#[derive(Clone, Default)]
pub struct CtFK20SingleSettings {
pub kzg_settings: CtKZGSettings,
pub x_ext_fft: Vec<CtG1>,
Expand Down
16 changes: 15 additions & 1 deletion constantine/src/types/fp.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,24 @@
use constantine_sys as constantine;
use constantine_sys::bls12_381_fp;
use core::fmt::{Debug, Formatter};
use kzg::G1Fp;

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

impl PartialEq for CtFp {
fn eq(&self, other: &Self) -> bool {
unsafe { constantine::ctt_bls12_381_fp_is_eq(&self.0, &other.0) != 0 }
}
}

impl Debug for CtFp {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
write!(f, "CtFp({:?})", self.0.limbs)
}
}

impl G1Fp for CtFp {
const ONE: Self = Self(bls12_381_fp {
limbs: [
Expand Down
24 changes: 21 additions & 3 deletions constantine/src/types/fr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use alloc::string::ToString;

use blst::blst_fr;
use constantine::ctt_codec_scalar_status;
use core::fmt::{Debug, Formatter};
use kzg::eip_4844::BYTES_PER_FIELD_ELEMENT;
use kzg::Fr;
use kzg::Scalar256;
Expand All @@ -19,9 +20,22 @@ use crate::utils::ptr_transmute;
use crate::utils::ptr_transmute_mut;

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

impl Debug for CtFr {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
write!(f, "CtFr({:?})", self.0.limbs)
}
}

impl PartialEq for CtFr {
fn eq(&self, other: &Self) -> bool {
self.equals(other)
}
}
impl Eq for CtFr {}

impl CtFr {
pub fn from_blst_fr(fr: blst::blst_fr) -> Self {
Self(bls12_381_fr { limbs: fr.l })
Expand Down Expand Up @@ -75,8 +89,12 @@ impl Fr for CtFr {
let mut ret: Self = Self::default();
let mut bls_scalar = blst::blst_scalar::default();
unsafe {
let status = constantine::ctt_bls12_381_deserialize_scalar(ptr_transmute_mut(&mut bls_scalar), bytes.as_ptr());
if status == ctt_codec_scalar_status::cttCodecScalar_ScalarLargerThanCurveOrder {
let status = constantine::ctt_bls12_381_deserialize_scalar(
ptr_transmute_mut(&mut bls_scalar),
bytes.as_ptr(),
);
if status == ctt_codec_scalar_status::cttCodecScalar_ScalarLargerThanCurveOrder
{
return Err("Invalid scalar".to_string());
}
// FIXME: Change when big255->Fr conversion is available
Expand Down
44 changes: 38 additions & 6 deletions constantine/src/types/g1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ use constantine::ctt_codec_ecc_status;
use kzg::msm::precompute::PrecomputationTable;
use kzg::G1LinComb;

use core::fmt::{Debug, Formatter};

use crate::kzg_proofs::g1_linear_combination;
use crate::types::fp::CtFp;
use crate::types::fr::CtFr;
Expand All @@ -29,7 +31,7 @@ use constantine_sys::{
};

#[repr(C)]
#[derive(Debug, Clone, Copy, Default)]
#[derive(Clone, Copy, Default)]
pub struct CtG1(pub bls12_381_g1_jac);

impl PartialEq for CtG1 {
Expand All @@ -38,6 +40,16 @@ impl PartialEq for CtG1 {
}
}

impl Debug for CtG1 {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
write!(
f,
"CtG1({:?}, {:?}, {:?})",
self.0.x.limbs, self.0.y.limbs, self.0.z.limbs
)
}
}

impl CtG1 {
pub(crate) const fn from_xyz(x: bls12_381_fp, y: bls12_381_fp, z: bls12_381_fp) -> Self {
CtG1(bls12_381_g1_jac { x, y, z })
Expand Down Expand Up @@ -94,8 +106,12 @@ impl G1 for CtG1 {
let mut g1 = bls12_381_g1_jac::default();
unsafe {
// The uncompress routine also checks that the point is on the curve
let res = constantine::ctt_bls12_381_deserialize_g1_compressed(&mut tmp, bytes.as_ptr());
if res != ctt_codec_ecc_status::cttCodecEcc_Success && res != ctt_codec_ecc_status::cttCodecEcc_PointAtInfinity
let res = constantine::ctt_bls12_381_deserialize_g1_compressed(
&mut tmp,
bytes.as_ptr(),
);
if res != ctt_codec_ecc_status::cttCodecEcc_Success
&& res != ctt_codec_ecc_status::cttCodecEcc_PointAtInfinity
{
return Err("Failed to uncompress".to_string());
}
Expand All @@ -113,7 +129,10 @@ impl G1 for CtG1 {
fn to_bytes(&self) -> [u8; 48] {
let mut out = [0u8; BYTES_PER_G1];
unsafe {
let _ = constantine::ctt_bls12_381_serialize_g1_compressed(out.as_mut_ptr(), &CtG1Affine::into_affine(&self).0);
let _ = constantine::ctt_bls12_381_serialize_g1_compressed(
out.as_mut_ptr(),
&CtG1Affine::into_affine(self).0,
);
}
out
}
Expand All @@ -132,7 +151,8 @@ impl G1 for CtG1 {

fn is_valid(&self) -> bool {
unsafe {
constantine::ctt_bls12_381_validate_g1(&CtG1Affine::into_affine(&self).0) == ctt_codec_ecc_status::cttCodecEcc_Success
constantine::ctt_bls12_381_validate_g1(&CtG1Affine::into_affine(self).0)
== ctt_codec_ecc_status::cttCodecEcc_Success
}
}

Expand Down Expand Up @@ -299,9 +319,21 @@ impl G1GetFp<CtFp> for CtG1 {
}

#[repr(C)]
#[derive(Debug, Default, Clone, Copy, Eq, PartialEq)]
#[derive(Default, Clone, Copy)]
pub struct CtG1Affine(pub constantine::bls12_381_g1_aff);

impl PartialEq for CtG1Affine {
fn eq(&self, other: &Self) -> bool {
unsafe { constantine::ctt_bls12_381_g1_aff_is_eq(&self.0, &other.0) != 0 }
}
}

impl Debug for CtG1Affine {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
write!(f, "CtG1Affine({:?}, {:?})", self.0.x.limbs, self.0.y.limbs)
}
}

impl G1Affine<CtG1, CtFp> for CtG1Affine {
const ZERO: Self = Self(bls12_381_g1_aff {
x: {
Expand Down
12 changes: 8 additions & 4 deletions constantine/src/types/g2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use constantine_sys::{

use constantine_sys as constantine;

#[derive(Debug, Default, Clone, Copy)]
#[derive(Default, Clone, Copy)]
pub struct CtG2(pub bls12_381_g2_jac);

impl CtG2 {
Expand Down Expand Up @@ -138,8 +138,12 @@ impl G2 for CtG2 {
let mut g2 = bls12_381_g2_jac::default();
unsafe {
// The uncompress routine also checks that the point is on the curve
let res = constantine::ctt_bls12_381_deserialize_g2_compressed(&mut tmp, bytes.as_ptr());
if res != ctt_codec_ecc_status::cttCodecEcc_Success && res != ctt_codec_ecc_status::cttCodecEcc_PointAtInfinity
let res = constantine::ctt_bls12_381_deserialize_g2_compressed(
&mut tmp,
bytes.as_ptr(),
);
if res != ctt_codec_ecc_status::cttCodecEcc_Success
&& res != ctt_codec_ecc_status::cttCodecEcc_PointAtInfinity
{
return Err("Failed to uncompress".to_string());
}
Expand All @@ -154,7 +158,7 @@ impl G2 for CtG2 {
let mut tmp = bls12_381_g2_aff::default();
unsafe {
constantine::ctt_bls12_381_g2_jac_affine(&mut tmp, &self.0);
constantine::ctt_bls12_381_serialize_g2_compressed(out.as_mut_ptr(), &tmp);
let _ = constantine::ctt_bls12_381_serialize_g2_compressed(out.as_mut_ptr(), &tmp);
}
out
}
Expand Down
2 changes: 1 addition & 1 deletion constantine/src/types/kzg_settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use crate::types::poly::CtPoly;
use super::fp::CtFp;
use super::g1::CtG1Affine;

#[derive(Debug, Clone, Default)]
#[derive(Clone, Default)]
pub struct CtKZGSettings {
pub fs: CtFFTSettings,
pub secret_g1: Vec<CtG1>,
Expand Down
2 changes: 1 addition & 1 deletion kzg/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ pub trait G1Fp: Clone + Default + Sync + Copy + PartialEq + Debug + Send {
}

pub trait G1Affine<TG1: G1, TG1Fp: G1Fp>:
Clone + Default + PartialEq + Sync + Copy + Debug + Send
Clone + Default + PartialEq + Sync + Copy + Send + Debug
{
const ZERO: Self;

Expand Down

0 comments on commit 72e7a5b

Please sign in to comment.