[zk-sdk] Add unique domain separator for zk elgamal proof program for proofs #197
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
All proof transcripts in the zk-sdk use hardcoded domain strings (e.g.,
b"ciphertext-ciphertext-equality-instruction",b"zero-ciphertext-instruction", etc.) without a shared chain-specific personalization prefix. Proofs generated on one blockchain can be replayed on any fork or chain using this code, as transcript domains are identical across all deploymentsSummary of Changes
I added a domain separation tag in the transcript by adding a concrete transcript constructor
Transcript::new_zk_elgamal_transcript(...)that first hashesb"solana-zk-elgamal-proof-program-v1"to the transcript before returning it. Then I updated all the instances ofTranscript::new(...)in the zk-sdk to useTranscript::new_zk_elgamal_transcript(...).The logic changes themselves should be pretty simple. But since we are adding new domain separations, I needed to update the hard-coded tests, which added on to the number of lines changed.