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/zk_elgamal_proof_program/proof_data/batched_range_proof/batched_range_proof_u64.rs#L82 */ 4 : int 5 12 : fd_zksdk_instr_verify_proof_batched_range_proof_u64( void const * _context, void const * _proof ) { 6 12 : fd_zksdk_transcript_t transcript[1]; 7 12 : fd_zksdk_batched_range_proof_context_t const * context = _context; 8 12 : fd_zksdk_range_proof_u64_proof_t const * proof = _proof; 9 : 10 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/zk_elgamal_proof_program/proof_data/batched_range_proof/batched_range_proof_u64.rs#L83 */ 11 12 : uchar batch_len = 0; 12 12 : int val = batched_range_proof_context_try_into( &batch_len, context ); 13 12 : if( FD_UNLIKELY( val != FD_ZKSDK_VERIFY_PROOF_SUCCESS ) ) { 14 0 : return val; 15 0 : } 16 : 17 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/zk_elgamal_proof_program/proof_data/batched_range_proof/batched_range_proof_u64.rs#L86-L88 18 : This can never happen: `commitments: [PodPedersenCommitment; MAX_COMMITMENTS]` */ 19 : 20 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/zk_elgamal_proof_program/proof_data/batched_range_proof/batched_range_proof_u64.rs#L90-L98 21 : We validate this inside fd_rangeproofs_verify() */ 22 : 23 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/zk_elgamal_proof_program/proof_data/batched_range_proof/batched_range_proof_u64.rs#L100 */ 24 12 : batched_range_proof_context_new_transcript( transcript, context ); 25 : 26 : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/zk_elgamal_proof_program/proof_data/batched_range_proof/batched_range_proof_u64.rs#L103-L105 */ 27 12 : const fd_rangeproofs_ipp_proof_t ipp_proof = { 28 12 : 6, 29 12 : proof->ipp_lr_vec, 30 12 : proof->ipp_a, 31 12 : proof->ipp_b, 32 12 : }; 33 12 : int res = fd_rangeproofs_verify( 34 12 : &proof->range_proof, 35 12 : &ipp_proof, 36 12 : context->commitments, 37 12 : context->bit_lengths, 38 12 : batch_len, 39 12 : transcript 40 12 : ); 41 : 42 12 : if( FD_LIKELY( res == FD_RANGEPROOFS_SUCCESS ) ) { 43 4 : return FD_ZKSDK_VERIFY_PROOF_SUCCESS; 44 4 : } 45 8 : return FD_ZKSDK_VERIFY_PROOF_ERROR; 46 12 : }