LCOV - code coverage report
Current view: top level - ballet/zksdk/transcript - fd_zksdk_transcript.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 21 43 48.8 %
Date: 2026-03-31 06:22:16 Functions: 9 165 5.5 %

          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          24 : #define fd_zksdk_transcript_t fd_merlin_transcript_t
      12         291 : #define FD_TRANSCRIPT_LITERAL FD_MERLIN_LITERAL
      13             : 
      14          18 : #define fd_zksdk_transcript_append_message            fd_merlin_transcript_append_message
      15          18 : #define fd_zksdk_transcript_append_point              fd_rangeproofs_transcript_append_point
      16          24 : #define fd_zksdk_transcript_validate_and_append_point fd_rangeproofs_transcript_validate_and_append_point
      17          18 : #define fd_zksdk_transcript_append_scalar             fd_rangeproofs_transcript_append_scalar
      18          33 : #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          24 :                           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          24 :   fd_merlin_transcript_init( transcript, FD_TRANSCRIPT_LITERAL("solana-zk-elgamal-proof-program-v1") );
      36          24 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)label, label_len );
      37          24 : }
      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          42 :                                    uchar const             pubkey[ 32 ] ) {
      44          42 :   fd_merlin_transcript_append_message( transcript, label, label_len, pubkey, 32 );
      45          42 : }
      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           0 :                                        uchar const             ciphertext[ 64 ] ) {
      52           0 :   fd_merlin_transcript_append_message( transcript, label, label_len, ciphertext, 64 );
      53           0 : }
      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           0 :                                        uchar const             commitment[ 32 ] ) {
      60           0 :   fd_merlin_transcript_append_message( transcript, label, label_len, commitment, 32 );
      61           0 : }
      62             : 
      63             : /*
      64             :  * Domain separators
      65             :  */
      66             : 
      67             : static inline void
      68           0 : fd_zksdk_transcript_domsep_ciph_ciph_eq_proof( fd_zksdk_transcript_t * transcript ) {
      69           0 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("ciphertext-ciphertext-equality-proof") );
      70           0 : }
      71             : 
      72             : static inline void
      73           0 : fd_zksdk_transcript_domsep_ciph_comm_eq_proof( fd_zksdk_transcript_t * transcript ) {
      74           0 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("ciphertext-commitment-equality-proof") );
      75           0 : }
      76             : 
      77             : static inline void
      78           0 : fd_zksdk_transcript_domsep_zero_ciphertext_proof( fd_zksdk_transcript_t * transcript ) {
      79           0 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("zero-ciphertext-proof") );
      80           0 : }
      81             : 
      82             : static inline void
      83          18 : fd_zksdk_transcript_domsep_grp_ciph_val_proof( fd_zksdk_transcript_t * transcript, ulong handles ) {
      84          18 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("validity-proof") );
      85          18 :   fd_merlin_transcript_append_u64    ( transcript, FD_TRANSCRIPT_LITERAL("handles"), handles );
      86          18 : }
      87             : 
      88             : static inline void
      89           0 : fd_zksdk_transcript_domsep_batched_grp_ciph_val_proof( fd_zksdk_transcript_t * transcript, ulong handles ) {
      90           0 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("batched-validity-proof") );
      91           0 :   fd_merlin_transcript_append_u64    ( transcript, FD_TRANSCRIPT_LITERAL("handles"), handles );
      92           0 : }
      93             : 
      94             : static inline void
      95           0 : fd_zksdk_transcript_domsep_percentage_with_cap_proof( fd_zksdk_transcript_t * transcript ) {
      96           0 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("percentage-with-cap-proof") );
      97           0 : }
      98             : 
      99             : static inline void
     100           6 : fd_zksdk_transcript_domsep_pubkey_proof( fd_zksdk_transcript_t * transcript ) {
     101           6 :   fd_merlin_transcript_append_message( transcript, FD_TRANSCRIPT_LITERAL("dom-sep"), (uchar *)FD_TRANSCRIPT_LITERAL("pubkey-proof") );
     102           6 : }
     103             : 
     104             : FD_PROTOTYPES_END
     105             : #endif /* HEADER_fd_src_ballet_zksdk_transcript_fd_transcript_h */

Generated by: LCOV version 1.14