LCOV - code coverage report
Current view: top level - ballet/zksdk/transcript - fd_zksdk_transcript.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 43 46 93.5 %
Date: 2026-03-19 18:19:27 Functions: 34 180 18.9 %

          Line data    Source code
       1             : #ifndef HEADER_fd_src_ballet_zksdk_transcript_fd_transcript_h
       2             : #define HEADER_fd_src_ballet_zksdk_transcript_fd_transcript_h
       3             : 
       4             : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/transcript.rs
       5             :    The implementation of transcript.rs is split between this file and
       6             :    rangeproofs/fd_rangeproofs_transcript.h. */
       7             : 
       8             : #include "../../merlin/fd_merlin.h"
       9             : #include "../rangeproofs/fd_rangeproofs.h"
      10             : 
      11         134 : #define fd_zksdk_transcript_t fd_merlin_transcript_t
      12        1594 : #define FD_TRANSCRIPT_LITERAL FD_MERLIN_LITERAL
      13             : 
      14          36 : #define fd_zksdk_transcript_append_message            fd_merlin_transcript_append_message
      15          50 : #define fd_zksdk_transcript_append_point              fd_rangeproofs_transcript_append_point
      16         190 : #define fd_zksdk_transcript_validate_and_append_point fd_rangeproofs_transcript_validate_and_append_point
      17         180 : #define fd_zksdk_transcript_append_scalar             fd_rangeproofs_transcript_append_scalar
      18         177 : #define fd_zksdk_transcript_challenge_scalar          fd_rangeproofs_transcript_challenge_scalar
      19             : 
      20             : FD_PROTOTYPES_BEGIN
      21             : 
      22             : /* Append message:
      23             :    - pubkey
      24             :    - ciphertext (twisted elgamal 64 bytes: handle + commitment)
      25             :    - commitment
      26             :    - handle
      27             :  */
      28             : 
      29             : /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/transcript.rs#L57 */
      30             : static inline void
      31             : fd_zksdk_transcript_init( fd_zksdk_transcript_t * transcript,
      32             :                           char const * const      label,
      33         140 :                           uint const              label_len ) {
      34             :   /* https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.1/zk-sdk/src/lib.rs#L36 */
      35         140 :   fd_merlin_transcript_init( transcript, FD_TRANSCRIPT_LITERAL("solana-zk-elgamal-proof-program-v1") );
      36         140 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)label, label_len );
      37         140 : }
      38             : 
      39             : static inline void
      40             : fd_zksdk_transcript_append_pubkey( fd_zksdk_transcript_t * transcript,
      41             :                                    char const * const      label,
      42             :                                    uint const              label_len,
      43         131 :                                    uchar const             pubkey[ 32 ] ) {
      44         131 :   fd_merlin_transcript_append_message( transcript, label, label_len, pubkey, 32 );
      45         131 : }
      46             : 
      47             : static inline void
      48             : fd_zksdk_transcript_append_ciphertext( fd_zksdk_transcript_t * transcript,
      49             :                                        char const * const      label,
      50             :                                        uint const              label_len,
      51          65 :                                        uchar const             ciphertext[ 64 ] ) {
      52          65 :   fd_merlin_transcript_append_message( transcript, label, label_len, ciphertext, 64 );
      53          65 : }
      54             : 
      55             : static inline void
      56             : fd_zksdk_transcript_append_commitment( fd_zksdk_transcript_t * transcript,
      57             :                                        char const * const      label,
      58             :                                        uint const              label_len,
      59          35 :                                        uchar const             commitment[ 32 ] ) {
      60          35 :   fd_merlin_transcript_append_message( transcript, label, label_len, commitment, 32 );
      61          35 : }
      62             : 
      63             : static inline void
      64             : fd_zksdk_transcript_append_handle( fd_zksdk_transcript_t * transcript,
      65             :                                    char const * const      label,
      66             :                                    uint const              label_len,
      67           0 :                                    uchar const             handle[ 32 ] ) {
      68           0 :   fd_merlin_transcript_append_message( transcript, label, label_len, handle, 32 );
      69           0 : }
      70             : 
      71             : /*
      72             :  * Domain separators
      73             :  */
      74             : 
      75             : static inline void
      76          15 : fd_zksdk_transcript_domsep_ciph_ciph_eq_proof( fd_zksdk_transcript_t * transcript ) {
      77          15 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("ciphertext-ciphertext-equality-proof") );
      78          15 : }
      79             : 
      80             : static inline void
      81           5 : fd_zksdk_transcript_domsep_ciph_comm_eq_proof( fd_zksdk_transcript_t * transcript ) {
      82           5 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("ciphertext-commitment-equality-proof") );
      83           5 : }
      84             : 
      85             : static inline void
      86          30 : fd_zksdk_transcript_domsep_zero_ciphertext_proof( fd_zksdk_transcript_t * transcript ) {
      87          30 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("zero-ciphertext-proof") );
      88          30 : }
      89             : 
      90             : static inline void
      91          20 : fd_zksdk_transcript_domsep_grp_ciph_val_proof( fd_zksdk_transcript_t * transcript, ulong handles ) {
      92          20 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("validity-proof") );
      93          20 :   fd_merlin_transcript_append_u64    ( transcript, FD_TRANSCRIPT_LITERAL("handles"), handles );
      94          20 : }
      95             : 
      96             : static inline void
      97          12 : fd_zksdk_transcript_domsep_batched_grp_ciph_val_proof( fd_zksdk_transcript_t * transcript, ulong handles ) {
      98          12 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("batched-validity-proof") );
      99          12 :   fd_merlin_transcript_append_u64    ( transcript, FD_TRANSCRIPT_LITERAL("handles"), handles );
     100          12 : }
     101             : 
     102             : static inline void
     103          10 : fd_zksdk_transcript_domsep_percentage_with_cap_proof( fd_zksdk_transcript_t * transcript ) {
     104          10 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("percentage-with-cap-proof") );
     105          10 : }
     106             : 
     107             : static inline void
     108           6 : fd_zksdk_transcript_domsep_pubkey_proof( fd_zksdk_transcript_t * transcript ) {
     109           6 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("pubkey-proof") );
     110           6 : }
     111             : 
     112             : FD_PROTOTYPES_END
     113             : #endif /* HEADER_fd_src_ballet_zksdk_transcript_fd_transcript_h */

Generated by: LCOV version 1.14