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