diff --git a/g16ckt/src/gadgets/bn254/fq.rs b/g16ckt/src/gadgets/bn254/fq.rs index 8f1cb04..eecc704 100644 --- a/g16ckt/src/gadgets/bn254/fq.rs +++ b/g16ckt/src/gadgets/bn254/fq.rs @@ -47,9 +47,13 @@ impl WiresObject for Fq { impl FromWires for Fq { fn from_wires(wires: &[WireId]) -> Option { - Some(Self(crate::gadgets::bigint::BigIntWires::from_bits( - wires.iter().copied(), - ))) + if wires.len() == Fq::N_BITS { + Some(Self(crate::gadgets::bigint::BigIntWires::from_bits( + wires.iter().copied(), + ))) + } else { + None + } } } diff --git a/g16ckt/src/gadgets/bn254/fq12.rs b/g16ckt/src/gadgets/bn254/fq12.rs index f1bbf4c..e36e33d 100644 --- a/g16ckt/src/gadgets/bn254/fq12.rs +++ b/g16ckt/src/gadgets/bn254/fq12.rs @@ -35,7 +35,7 @@ impl WiresObject for Fq12 { impl FromWires for Fq12 { fn from_wires(wires: &[WireId]) -> Option { - if wires.len() >= 1524 { + if wires.len() == Fq12::N_BITS { // 2 * 3 * 2 * 254 = 3048/2 = 1524 wires per Fq6 let mid = wires.len() / 2; let fq6_1 = Fq6::from_wires(&wires[..mid])?; diff --git a/g16ckt/src/gadgets/bn254/fq2.rs b/g16ckt/src/gadgets/bn254/fq2.rs index d1f6100..2a236d2 100644 --- a/g16ckt/src/gadgets/bn254/fq2.rs +++ b/g16ckt/src/gadgets/bn254/fq2.rs @@ -48,9 +48,9 @@ impl WiresObject for Fq2 { impl crate::circuit::FromWires for Fq2 { fn from_wires(wires: &[WireId]) -> Option { - if wires.len() >= 508 { + if wires.len() == Fq2::N_BITS { // 2 * 254 bits - let (fq1_wires, fq2_wires) = wires.split_at(254); + let (fq1_wires, fq2_wires) = wires.split_at(wires.len() / 2); let fq1 = Fq::from_wires(fq1_wires)?; let fq2 = Fq::from_wires(fq2_wires)?; Some(Self([fq1, fq2])) diff --git a/g16ckt/src/gadgets/bn254/fq6.rs b/g16ckt/src/gadgets/bn254/fq6.rs index e4d982e..6017a9e 100644 --- a/g16ckt/src/gadgets/bn254/fq6.rs +++ b/g16ckt/src/gadgets/bn254/fq6.rs @@ -35,13 +35,17 @@ impl WiresObject for Fq6 { impl FromWires for Fq6 { fn from_wires(wires: &[WireId]) -> Option { - let len = wires.len() / 3; - let mut chunks = wires.chunks(len); - Some(Self([ - Fq2::from_wires(chunks.next()?)?, - Fq2::from_wires(chunks.next()?)?, - Fq2::from_wires(chunks.next()?)?, - ])) + if wires.len() == Fq6::N_BITS { + let len = wires.len() / 3; + let mut chunks = wires.chunks(len); + Some(Self([ + Fq2::from_wires(chunks.next()?)?, + Fq2::from_wires(chunks.next()?)?, + Fq2::from_wires(chunks.next()?)?, + ])) + } else { + None + } } } diff --git a/g16ckt/src/gadgets/bn254/fr.rs b/g16ckt/src/gadgets/bn254/fr.rs index 8e1c35f..0eab87b 100644 --- a/g16ckt/src/gadgets/bn254/fr.rs +++ b/g16ckt/src/gadgets/bn254/fr.rs @@ -55,9 +55,13 @@ impl WiresObject for Fr { impl crate::circuit::FromWires for Fr { fn from_wires(wires: &[WireId]) -> Option { - Some(Self(crate::gadgets::bigint::BigIntWires::from_bits( - wires.iter().copied(), - ))) + if wires.len() == Fr::N_BITS { + Some(Self(crate::gadgets::bigint::BigIntWires::from_bits( + wires.iter().copied(), + ))) + } else { + None + } } } diff --git a/g16ckt/src/gadgets/bn254/g1.rs b/g16ckt/src/gadgets/bn254/g1.rs index faf6f58..4f0dacd 100644 --- a/g16ckt/src/gadgets/bn254/g1.rs +++ b/g16ckt/src/gadgets/bn254/g1.rs @@ -38,13 +38,17 @@ impl WiresObject for G1Projective { impl FromWires for G1Projective { fn from_wires(wires: &[WireId]) -> Option { - let len = wires.len() / 3; - let mut chunks = wires.chunks(len); - Some(Self { - x: Fq::from_wires(chunks.next()?)?, - y: Fq::from_wires(chunks.next()?)?, - z: Fq::from_wires(chunks.next()?)?, - }) + if wires.len() == G1Projective::N_BITS { + let len = wires.len() / 3; + let mut chunks = wires.chunks(len); + Some(Self { + x: Fq::from_wires(chunks.next()?)?, + y: Fq::from_wires(chunks.next()?)?, + z: Fq::from_wires(chunks.next()?)?, + }) + } else { + None + } } } diff --git a/g16ckt/src/gadgets/bn254/g2.rs b/g16ckt/src/gadgets/bn254/g2.rs index 441a9e8..1ce6ddb 100644 --- a/g16ckt/src/gadgets/bn254/g2.rs +++ b/g16ckt/src/gadgets/bn254/g2.rs @@ -41,13 +41,17 @@ impl WiresObject for G2Projective { impl FromWires for G2Projective { fn from_wires(wires: &[WireId]) -> Option { - let len = wires.len() / 3; - let mut chunks = wires.chunks(len); - Some(Self { - x: Fq2::from_wires(chunks.next()?)?, - y: Fq2::from_wires(chunks.next()?)?, - z: Fq2::from_wires(chunks.next()?)?, - }) + if wires.len() == G2Projective::N_BITS { + let len = wires.len() / 3; + let mut chunks = wires.chunks(len); + Some(Self { + x: Fq2::from_wires(chunks.next()?)?, + y: Fq2::from_wires(chunks.next()?)?, + z: Fq2::from_wires(chunks.next()?)?, + }) + } else { + None + } } } diff --git a/g16ckt/src/gadgets/bn254/pairing.rs b/g16ckt/src/gadgets/bn254/pairing.rs index 00e5b24..a7f1650 100644 --- a/g16ckt/src/gadgets/bn254/pairing.rs +++ b/g16ckt/src/gadgets/bn254/pairing.rs @@ -336,9 +336,13 @@ fn g2_line_coeffs_add( impl FromWires for (G2Projective, Fq6) { fn from_wires(wires: &[crate::WireId]) -> Option { - let (g2, fq6) = wires.split_at(G2Projective::ARITY); + if wires.len() == G2Projective::N_BITS + Fq6::N_BITS { + let (g2, fq6) = wires.split_at(G2Projective::ARITY); - Some((G2Projective::from_wires(g2)?, Fq6::from_wires(fq6)?)) + Some((G2Projective::from_wires(g2)?, Fq6::from_wires(fq6)?)) + } else { + None + } } }