diff --git a/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256_plookup.cpp b/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256_plookup.cpp index 02e6294a3f31..0a8d327d8002 100644 --- a/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256_plookup.cpp +++ b/barretenberg/cpp/src/barretenberg/stdlib/hash/sha256/sha256_plookup.cpp @@ -140,11 +140,11 @@ std::array, 64> extend_witness(const std::array( ctx, fr(w_out_raw.get_value().from_montgomery_form().data[0] & (uint64_t)0xffffffffULL)); } - field_pt divisor = w_out_raw / w_out; + constexpr fr inv_pow_two = fr(2).pow(32).invert(); + field_pt w_out_raw_inv_pow_two = w_out_raw * inv_pow_two; + field_pt w_out_inv_pow_two = w_out * inv_pow_two; + field_pt divisor = (w_out_raw_inv_pow_two - w_out_inv_pow_two).normalize(); ctx->create_new_range_constraint(divisor.witness_index, 3); - fr power_two = fr(1).pow(32); - ctx->create_add_gate( - { divisor.witness_index, w_out.witness_index, w_out_raw.witness_index, power_two, fr(1), fr(-1), fr(0) }); w_sparse[i] = sparse_witness_limbs(w_out); }