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 */