Line data Source code
1 : #include "../fd_zksdk_private.h" 2 : 3 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/sigma_proofs/batched_grouped_ciphertext_validity/handles_2.rs#L163 */ 4 : static inline void 5 : batched_grouped_ciphertext_validity_hash_context( fd_zksdk_transcript_t * transcript, 6 : uchar const pubkey1 [ 32 ], 7 : uchar const pubkey2 [ 32 ], 8 : grp_ciph_2h_t const * grouped_ciphertext_lo, 9 6 : grp_ciph_2h_t const * grouped_ciphertext_hi ) { 10 6 : fd_zksdk_transcript_init( transcript, FD_TRANSCRIPT_LITERAL("batched-grouped-ciphertext-validity-2-handles-instruction") ); 11 6 : fd_zksdk_transcript_append_pubkey ( transcript, FD_TRANSCRIPT_LITERAL("first-pubkey"), pubkey1 ); 12 6 : fd_zksdk_transcript_append_pubkey ( transcript, FD_TRANSCRIPT_LITERAL("second-pubkey"), pubkey2 ); 13 6 : fd_zksdk_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("grouped-ciphertext-lo"), (uchar *)grouped_ciphertext_lo, sizeof(grp_ciph_2h_t) ); 14 6 : fd_zksdk_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("grouped-ciphertext-hi"), (uchar *)grouped_ciphertext_hi, sizeof(grp_ciph_2h_t) ); 15 6 : } 16 : 17 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/sigma_proofs/batched_grouped_ciphertext_validity/handles_2.rs#L106 */ 18 : static inline int 19 : fd_zksdk_verify_proof_batched_grouped_ciphertext_2_handles_validity( 20 : fd_zksdk_grp_ciph_2h_val_proof_t const * proof, 21 : uchar const pubkey1 [ 32 ], 22 : uchar const pubkey2 [ 32 ], 23 : grp_ciph_2h_t const * grouped_ciphertext_lo, 24 : grp_ciph_2h_t const * grouped_ciphertext_hi, 25 6 : fd_zksdk_transcript_t * transcript ) { 26 : 27 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/sigma_proofs/batched_grouped_ciphertext_validity/handles_2.rs#L117-L122 */ 28 6 : if( FD_UNLIKELY( fd_memeq( pubkey1, fd_ristretto255_compressed_zero, 32 ) 29 6 : || fd_memeq( grouped_ciphertext_lo->commitment, fd_ristretto255_compressed_zero, 32 ) 30 6 : || fd_memeq( grouped_ciphertext_hi->commitment, fd_ristretto255_compressed_zero, 32 ) ) ) { 31 0 : return FD_ZKSDK_VERIFY_PROOF_ERROR; 32 0 : } 33 : 34 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/sigma_proofs/batched_grouped_ciphertext_validity/handles_2.rs#L124-L131 */ 35 6 : batched_grouped_ciphertext_validity_hash_context( transcript, pubkey1, pubkey2, grouped_ciphertext_lo, grouped_ciphertext_hi ); 36 6 : fd_zksdk_transcript_domsep_batched_grp_ciph_val_proof( transcript, 2 ); 37 : 38 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/sigma_proofs/batched_grouped_ciphertext_validity/handles_2.rs#L133 */ 39 6 : uchar t[ 32 ]; 40 6 : fd_zksdk_transcript_challenge_scalar( t, transcript, FD_TRANSCRIPT_LITERAL("t") ); 41 : 42 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/sigma_proofs/batched_grouped_ciphertext_validity/handles_2.rs#L135-L160 43 : Note: in our impl, t is embedded in the final MSM. */ 44 6 : return fd_zksdk_verify_proof_direct_grouped_ciphertext_2_handles_validity( 45 6 : proof, 46 6 : pubkey1, 47 6 : pubkey2, 48 6 : grouped_ciphertext_lo->commitment, 49 6 : grouped_ciphertext_lo->handles[0].handle, 50 6 : grouped_ciphertext_lo->handles[1].handle, 51 6 : grouped_ciphertext_hi->commitment, 52 6 : grouped_ciphertext_hi->handles[0].handle, 53 6 : grouped_ciphertext_hi->handles[1].handle, 54 6 : t, 55 6 : 1, 56 6 : transcript 57 6 : ); 58 6 : } 59 : 60 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/zk_elgamal_proof_program/proof_data/batched_grouped_ciphertext_validity/handles_2.rs#L126 */ 61 : int 62 6 : fd_zksdk_instr_verify_proof_batched_grouped_ciphertext_2_handles_validity( void const * _context, void const * _proof ) { 63 6 : fd_zksdk_transcript_t transcript[1]; 64 6 : fd_zksdk_transcript_init( transcript, FD_TRANSCRIPT_LITERAL("batched-grouped-ciphertext-validity-2-handles-instruction") ); 65 : 66 6 : fd_zksdk_batched_grp_ciph_2h_val_context_t const * context = _context; 67 6 : fd_zksdk_batched_grp_ciph_2h_val_proof_t const * proof = _proof; 68 6 : return fd_zksdk_verify_proof_batched_grouped_ciphertext_2_handles_validity( 69 6 : proof, 70 6 : context->pubkey1, 71 6 : context->pubkey2, 72 6 : context->grouped_ciphertext_lo, 73 6 : context->grouped_ciphertext_hi, 74 6 : transcript 75 6 : ); 76 6 : }