Merge pull request #1201 from shuklaayush/fix/keccak-stark-reg-preimage

fix: constrain higher bits of reg_preimage
This commit is contained in:
Nicholas Ward 2023-08-28 12:41:10 -07:00 committed by GitHub
commit 760f09a8aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -266,9 +266,14 @@ impl<F: RichField + Extendable<D>, const D: usize> Stark<F, D> for KeccakStark<F
// If this is not the final step, the local and next preimages must match. // If this is not the final step, the local and next preimages must match.
for x in 0..5 { for x in 0..5 {
for y in 0..5 { for y in 0..5 {
let preimage = reg_preimage(x, y); let reg_preimage_lo = reg_preimage(x, y);
let diff = vars.local_values[preimage] - vars.next_values[preimage]; let reg_preimage_hi = reg_preimage_lo + 1;
yield_constr.constraint_transition(not_final_step * diff); let diff_lo =
vars.local_values[reg_preimage_lo] - vars.next_values[reg_preimage_lo];
let diff_hi =
vars.local_values[reg_preimage_hi] - vars.next_values[reg_preimage_hi];
yield_constr.constraint_transition(not_final_step * diff_lo);
yield_constr.constraint_transition(not_final_step * diff_hi);
} }
} }
@ -436,9 +441,18 @@ impl<F: RichField + Extendable<D>, const D: usize> Stark<F, D> for KeccakStark<F
// If this is not the final step, the local and next preimages must match. // If this is not the final step, the local and next preimages must match.
for x in 0..5 { for x in 0..5 {
for y in 0..5 { for y in 0..5 {
let preimage = reg_preimage(x, y); let reg_preimage_lo = reg_preimage(x, y);
let diff = let reg_preimage_hi = reg_preimage_lo + 1;
builder.sub_extension(vars.local_values[preimage], vars.next_values[preimage]); let diff = builder.sub_extension(
vars.local_values[reg_preimage_lo],
vars.next_values[reg_preimage_lo],
);
let constraint = builder.mul_extension(not_final_step, diff);
yield_constr.constraint_transition(builder, constraint);
let diff = builder.sub_extension(
vars.local_values[reg_preimage_hi],
vars.next_values[reg_preimage_hi],
);
let constraint = builder.mul_extension(not_final_step, diff); let constraint = builder.mul_extension(not_final_step, diff);
yield_constr.constraint_transition(builder, constraint); yield_constr.constraint_transition(builder, constraint);
} }