Skip to content

Commit c5b2a8a

Browse files
committed
properly constrain
1 parent 264c33e commit c5b2a8a

File tree

2 files changed

+30
-32
lines changed

2 files changed

+30
-32
lines changed

src/curve_jac.nr

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -662,17 +662,16 @@ where
662662
mut points: [Self; Size],
663663
mut scalars: [ScalarField<NScalarSlices>; Size],
664664
) -> (Self, [AffineTranscript<B>; NScalarSlices * Size + NScalarSlices * 4 + Size * 9 - 3]) {
665-
let mut (accumulator, transcript)
666-
: (Self, [JTranscript<B>; NScalarSlices * Size + NScalarSlices * 4 + Size * 9 - 3]) =
667-
CurveJ::msm_partial(points, scalars);
668-
let op = accumulator.sub(CurveJ::offset_generator_final());
669-
transcript[73 * Size + 252] = op.1;
670-
accumulator = op.0;
671-
let affine_transcript: [AffineTranscript<B>; NScalarSlices * Size + NScalarSlices * 4 + Size * 9 - 3] =
672-
AffineTranscript::from_jacobian_transcript(transcript);
665+
let mut (accumulator, transcript): (Self, [JTranscript<B>; NScalarSlices * Size + NScalarSlices * 4 + Size * 9 - 3]) =
666+
CurveJ::msm_partial(points, scalars);
667+
let op = accumulator.sub(CurveJ::offset_generator_final());
668+
transcript[73 * Size + 252] = op.1;
669+
accumulator = op.0;
670+
let affine_transcript: [AffineTranscript<B>; NScalarSlices * Size + NScalarSlices * 4 + Size * 9 - 3] =
671+
AffineTranscript::from_jacobian_transcript(transcript);
673672

674-
(accumulator, affine_transcript)
675-
}
673+
(accumulator, affine_transcript)
674+
}
676675

677676
pub(crate) unconstrained fn compute_linear_expression_transcript<let NScalarSlices: u32, let NMuls: u32, let NAdds: u32>(
678677
mut mul_points: [Curve; NMuls],
@@ -688,23 +687,22 @@ where
688687
add_j[i] = CurveJ::from(add_points[i]);
689688
}
690689

691-
let mut (accumulator, transcript)
692-
: (Self, [JTranscript<B>; NScalarSlices * NMuls + NScalarSlices * 4 + NMuls * 9 + NAdds - 3]) =
693-
CurveJ::msm_partial(mul_j, scalars);
694-
let mut transcript_ptr: u32 = NScalarSlices * NMuls + NScalarSlices * 4 + NMuls * 9 - 4;
695-
for i in 0..NAdds {
696-
let op = accumulator.conditional_incomplete_add(add_j[i], !add_j[i].is_infinity);
697-
transcript[transcript_ptr] = op.1;
698-
accumulator = op.0;
699-
transcript_ptr += 1;
700-
}
701-
702-
let op = accumulator.sub(CurveJ::offset_generator_final());
690+
let mut (accumulator, transcript): (Self, [JTranscript<B>; NScalarSlices * NMuls + NScalarSlices * 4 + NMuls * 9 + NAdds - 3]) =
691+
CurveJ::msm_partial(mul_j, scalars);
692+
let mut transcript_ptr: u32 = NScalarSlices * NMuls + NScalarSlices * 4 + NMuls * 9 - 4;
693+
for i in 0..NAdds {
694+
let op = accumulator.conditional_incomplete_add(add_j[i], !add_j[i].is_infinity);
703695
transcript[transcript_ptr] = op.1;
704696
accumulator = op.0;
705-
let affine_transcript: [AffineTranscript<B>; NScalarSlices * NMuls + NScalarSlices * 4 + NMuls * 9 + NAdds - 3] =
706-
AffineTranscript::from_jacobian_transcript(transcript);
707-
708-
(accumulator, affine_transcript)
697+
transcript_ptr += 1;
709698
}
699+
700+
let op = accumulator.sub(CurveJ::offset_generator_final());
701+
transcript[transcript_ptr] = op.1;
702+
accumulator = op.0;
703+
let affine_transcript: [AffineTranscript<B>; NScalarSlices * NMuls + NScalarSlices * 4 + NMuls * 9 + NAdds - 3] =
704+
AffineTranscript::from_jacobian_transcript(transcript);
705+
706+
(accumulator, affine_transcript)
707+
}
710708
}

src/scalar_field.nr

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ where
7777
ScalarField { base4_slices, skew }
7878
}
7979

80-
unconstrained fn get_modulus_slices<let N: u32>() -> [u8; N] {
80+
fn get_modulus_slices<let N: u32>() -> [u8; N] {
8181
let mut expected_slices: [u8; N] = [0; N];
8282

8383
if N == 64 {
@@ -117,7 +117,7 @@ unconstrained fn get_modulus_slices<let N: u32>() -> [u8; N] {
117117
expected_slices
118118
}
119119

120-
unconstrained fn compare_scalar_field_to_bignum<let N: u32>(result: ScalarField<N>) {
120+
fn compare_scalar_field_to_bignum<let N: u32>(result: ScalarField<N>) {
121121
let expected_slices: [u8; N] = get_modulus_slices::<N>();
122122

123123
// Lexicographic comparison: stop when we find a strictly smaller number
@@ -142,7 +142,7 @@ impl<let N: u32> std::convert::From<Field> for ScalarField<N> {
142142
fn from(input: Field) -> Self {
143143
let result = unsafe { get_wnaf_slices(input) };
144144

145-
if std::runtime::is_unconstrained() {
145+
if !std::runtime::is_unconstrained() {
146146
// Enforce that limbs are all 4 bits.
147147
for i in 0..N {
148148
(result.base4_slices[i] as Field).assert_max_bit_size::<4>();
@@ -151,9 +151,9 @@ impl<let N: u32> std::convert::From<Field> for ScalarField<N> {
151151
// Enforce consistency with `input`.
152152
let reconstructed_input: Field = result.into();
153153
assert_eq(reconstructed_input, input);
154-
}
155-
if N >= 64 {
156-
unsafe { compare_scalar_field_to_bignum(result) };
154+
if N >= 64 {
155+
compare_scalar_field_to_bignum(result);
156+
}
157157
}
158158
result
159159
}

0 commit comments

Comments
 (0)