LCOV - code coverage report
Current view: top level - ballet/zksdk/instructions - fd_zksdk_batched_grouped_ciphertext_2_handles_validity.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 45 45 100.0 %
Date: 2026-10-22 18:10:43 Functions: 3 3 100.0 %

          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         210 :                                                   grp_ciph_2h_t const *   grouped_ciphertext_hi ) {
      10         210 :   fd_zksdk_transcript_append_pubkey ( transcript, FD_TRANSCRIPT_LITERAL("first-pubkey"),  pubkey1 );
      11         210 :   fd_zksdk_transcript_append_pubkey ( transcript, FD_TRANSCRIPT_LITERAL("second-pubkey"), pubkey2 );
      12         210 :   fd_zksdk_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("grouped-ciphertext-lo"), (uchar *)grouped_ciphertext_lo, sizeof(grp_ciph_2h_t) );
      13         210 :   fd_zksdk_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("grouped-ciphertext-hi"), (uchar *)grouped_ciphertext_hi, sizeof(grp_ciph_2h_t) );
      14         210 : }
      15             : 
      16             : /* 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 */
      17             : static inline int
      18             : fd_zksdk_verify_proof_batched_grouped_ciphertext_2_handles_validity(
      19             :   fd_zksdk_grp_ciph_2h_val_proof_t const * proof,
      20             :   uchar const                              pubkey1    [ 32 ],
      21             :   uchar const                              pubkey2    [ 32 ],
      22             :   grp_ciph_2h_t const *                    grouped_ciphertext_lo,
      23             :   grp_ciph_2h_t const *                    grouped_ciphertext_hi,
      24         213 :   fd_zksdk_transcript_t *                  transcript ) {
      25             : 
      26             :   /* 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 */
      27         213 :   if( FD_UNLIKELY( fd_memeq( pubkey1,                           fd_ristretto255_compressed_zero, 32 )
      28         213 :                 || fd_memeq( grouped_ciphertext_lo->commitment, fd_ristretto255_compressed_zero, 32 )
      29         213 :                 || fd_memeq( grouped_ciphertext_hi->commitment, fd_ristretto255_compressed_zero, 32 ) ) ) {
      30           3 :     return FD_ZKSDK_VERIFY_PROOF_ERROR;
      31           3 :   }
      32             : 
      33             :   /* 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 */
      34         210 :   batched_grouped_ciphertext_validity_hash_context( transcript, pubkey1, pubkey2, grouped_ciphertext_lo, grouped_ciphertext_hi );
      35         210 :   fd_zksdk_transcript_domsep_batched_grp_ciph_val_proof( transcript, 2 );
      36             : 
      37             :   /* 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 */
      38         210 :   uchar t[ 32 ];
      39         210 :   fd_zksdk_transcript_challenge_scalar( t, transcript, FD_TRANSCRIPT_LITERAL("t") );
      40             : 
      41             :   /* 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
      42             :      Note: in our impl, t is embedded in the final MSM. */
      43         210 :   return fd_zksdk_verify_proof_direct_grouped_ciphertext_2_handles_validity(
      44         210 :     proof,
      45         210 :     pubkey1,
      46         210 :     pubkey2,
      47         210 :     grouped_ciphertext_lo->commitment,
      48         210 :     grouped_ciphertext_lo->handles[0].handle,
      49         210 :     grouped_ciphertext_lo->handles[1].handle,
      50         210 :     grouped_ciphertext_hi->commitment,
      51         210 :     grouped_ciphertext_hi->handles[0].handle,
      52         210 :     grouped_ciphertext_hi->handles[1].handle,
      53         210 :     t,
      54         210 :     1,
      55         210 :     transcript
      56         210 :   );
      57         213 : }
      58             : 
      59             : /* 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 */
      60             : int
      61         213 : fd_zksdk_instr_verify_proof_batched_grouped_ciphertext_2_handles_validity( void const * _context, void const * _proof ) {
      62         213 :   fd_zksdk_transcript_t transcript[1];
      63         213 :   fd_zksdk_transcript_init( transcript, FD_TRANSCRIPT_LITERAL("batched-grouped-ciphertext-validity-2-handles-instruction") );
      64             : 
      65         213 :   fd_zksdk_batched_grp_ciph_2h_val_context_t const * context = _context;
      66         213 :   fd_zksdk_batched_grp_ciph_2h_val_proof_t const *   proof   = _proof;
      67         213 :   return fd_zksdk_verify_proof_batched_grouped_ciphertext_2_handles_validity(
      68         213 :     proof,
      69         213 :     context->pubkey1,
      70         213 :     context->pubkey2,
      71         213 :     context->grouped_ciphertext_lo,
      72         213 :     context->grouped_ciphertext_hi,
      73         213 :     transcript
      74         213 :   );
      75         213 : }

Generated by: LCOV version 1.14