Skip to content

Port to whir PR #215 + PR #217 with SHA-256#288

Merged
Bisht13 merged 9 commits intomainfrom
px/whir-pr215-compat
Feb 16, 2026
Merged

Port to whir PR #215 + PR #217 with SHA-256#288
Bisht13 merged 9 commits intomainfrom
px/whir-pr215-compat

Conversation

@Bisht13
Copy link
Collaborator

@Bisht13 Bisht13 commented Feb 13, 2026

Ports provekit to whir's PR #215 transcript API and PR #217 Weights trait. Uses SHA-256 for Merkle tree hash, transcript sponge, and proof of work.

Changes

  • Transcript: IOPatternDomainSeparator/ProverState/VerifierState. Spongefish v1.0.0-rc1 (byte-oriented).
  • Weights: Weights enum → Covector<F> + dyn Weights<F> trait objects.
  • Hash: SHA-256 for Merkle tree (whir::hash::SHA2), transcript sponge (spongefish::instantiations::SHA256), and PoW. Skyscraper code retained for future use.
  • Build: Added release-fast profile, jemalloc, reduced tracing noise.
  • Cleanup: Removed SumcheckIOPattern, WitnessIOPattern, witness_io_pattern.rs.

Tested

Prepare → Prove → Verify on complete_age_check.

Replace IOPattern-based transcript with whir's DomainSeparator/ProverState/
VerifierState API (rev 246dae28). Update spongefish to v1.0.0-rc1 with
byte-oriented Permutation<64> interface. Proof now carries narg_string +
hints instead of a single transcript blob.

Key changes:
- Sponge: Permutation<64> with U=u8, WIDTH=64, RATE=32
- PoW: PoWSolution return type, solution() method
- Prover: config.commit()/config.prove() replacing CommitmentWriter/Prover
- Verifier: config.receive_commitment()/config.verify() replacing readers
- Public weights use Weights::geometric (non-deferred) on both sides
- Cross-evaluation hints for dual-commitment path
- NTT registration via global type-map for ark_bn254::Fr
- Clippy clean on prover/verifier crates
Propagate whir's debug_assertions transcript pattern through
WhirR1CSProof so in-process prove→verify (bench tests) passes
in debug builds. Add register_ntt() call in bench tests.

Point whir to 22efa1b2 (px/reduce-tracing-noise branch).
@Bisht13 Bisht13 changed the title Port to whir PR #215 transcript API Port to whir refactor transcript API Feb 14, 2026
Replace ark-crypto-primitives-based SkyscraperCRH/SkyscraperMerkleConfig
with a whir HashEngine implementation that registers Skyscraper for
leaf hashing, internal nodes, and proof-of-work.

Uses block4 NEON SIMD on aarch64 for batched compression, with a
stack-allocated pair buffer to avoid heap allocation in the hot path.
@Bisht13 Bisht13 changed the title Port to whir refactor transcript API Port provekit to whir PR #215 transcript API + PR #217 Weights trait + Skyscraper HashEngine Feb 14, 2026
@Bisht13 Bisht13 changed the title Port provekit to whir PR #215 transcript API + PR #217 Weights trait + Skyscraper HashEngine Port to whir PR #215 + PR #217 with Skyscraper HashEngine Feb 14, 2026
@Bisht13 Bisht13 requested a review from ashpect February 15, 2026 17:11
Bisht13 added a commit that referenced this pull request Feb 16, 2026
- Remove redundant challenge_u64 field in SkyscraperPoW, inline transmute
- Add SAFETY comment for unsafe block in SkyscraperHashEngine
- Add PoW unit test for Skyscraper
- Move coeffs_to_evals and covector_dot to common/utils/zk_utils
- Derive Debug on WhirR1CSScheme (WhirConfig now supports it)
- Call register_ntt() in create_domain_separator for robustness
- Remove unnecessary clones on prover hint submissions
- Reuse pre-computed evaluations instead of redundant recomputation
- Remove unused _public_weights_challenge from verifier destructuring
- Remove dead offset variable in deferred eval checks
- Use cfg-based LevelFilter (TRACE debug, INFO release) in CLI
- Add TODO for FFI tracing initialization
- Restore doc comments on GnarkConfig and WHIRConfigGnark fields
- Restore comment about arbitrary no-public-inputs hint
- Remove redundant challenge_u64 field in SkyscraperPoW, inline transmute
- Add SAFETY comment for unsafe block in SkyscraperHashEngine
- Add PoW unit test for Skyscraper
- Move coeffs_to_evals and covector_dot to common/utils/zk_utils
- Derive Debug on WhirR1CSScheme (WhirConfig now supports it)
- Call register_ntt() in create_domain_separator for robustness
- Remove unnecessary clones on prover hint submissions
- Reuse pre-computed evaluations instead of redundant recomputation
- Remove unused _public_weights_challenge from verifier destructuring
- Remove dead offset variable in deferred eval checks
- Use cfg-based LevelFilter (TRACE debug, INFO release) in CLI
- Add TODO for FFI tracing initialization
- Restore doc comments on GnarkConfig and WHIRConfigGnark fields
- Restore comment about arbitrary no-public-inputs hint
@Bisht13 Bisht13 force-pushed the px/whir-pr215-compat branch from e17c47c to ac651c1 Compare February 16, 2026 06:11
@Bisht13 Bisht13 changed the title Port to whir PR #215 + PR #217 with Skyscraper HashEngine Port to whir PR #215 + PR #217 with SHA-256 Feb 16, 2026
- Use 4 * skyscraper::WIDTH_LCM instead of hardcoded 48 for GROUP constant
- Fix verifier weight size to match prover (cfg_nv, not cfg_nv + 1)
- Restore doc comments on gnark_parameters functions
@Bisht13 Bisht13 merged commit 6b71717 into main Feb 16, 2026
3 of 5 checks passed
@Bisht13 Bisht13 deleted the px/whir-pr215-compat branch February 16, 2026 14:53
@xrvdg xrvdg mentioned this pull request Feb 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

Comments