Line data Source code
1 : #ifndef HEADER_fd_src_ballet_zksdk_fd_zksdk_h 2 : #define HEADER_fd_src_ballet_zksdk_fd_zksdk_h 3 : 4 : #include "fd_zksdk_common.h" 5 : 6 : /* FD_ZKSDK_INSTR_{...} identify ZK ElGamal Proof Program instructions. 7 : https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.0/zk-sdk/src/zk_elgamal_proof_program/instruction.rs#L53 */ 8 : 9 0 : #define FD_ZKSDK_INSTR_CLOSE_CONTEXT_STATE ((uchar) 0) 10 0 : #define FD_ZKSDK_INSTR_VERIFY_ZERO_CIPHERTEXT ((uchar) 1) 11 0 : #define FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_CIPHERTEXT_EQUALITY ((uchar) 2) 12 0 : #define FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_COMMITMENT_EQUALITY ((uchar) 3) 13 3 : #define FD_ZKSDK_INSTR_VERIFY_PUBKEY_VALIDITY ((uchar) 4) 14 0 : #define FD_ZKSDK_INSTR_VERIFY_PERCENTAGE_WITH_CAP ((uchar) 5) 15 0 : #define FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U64 ((uchar) 6) 16 0 : #define FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U128 ((uchar) 7) 17 0 : #define FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U256 ((uchar) 8) 18 0 : #define FD_ZKSDK_INSTR_VERIFY_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY ((uchar) 9) 19 0 : #define FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY ((uchar)10) 20 0 : #define FD_ZKSDK_INSTR_VERIFY_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY ((uchar)11) 21 0 : #define FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY ((uchar)12) 22 : 23 : /* Instruction context struct, proof struct, and in some cases 24 : ZKP verify function. */ 25 : #include "instructions/fd_zksdk_zero_ciphertext.h" 26 : #include "instructions/fd_zksdk_ciphertext_ciphertext_equality.h" 27 : #include "instructions/fd_zksdk_ciphertext_commitment_equality.h" 28 : #include "instructions/fd_zksdk_pubkey_validity.h" 29 : #include "instructions/fd_zksdk_percentage_with_cap.h" 30 : #include "instructions/fd_zksdk_batched_range_proofs.h" 31 : #include "instructions/fd_zksdk_batched_grouped_ciphertext_validity.h" 32 : 33 : /* Size of the context struct for each verify_proof instruction. */ 34 : static const ulong fd_zksdk_context_sz[] = { 35 : 0, // (placeholder/unused) FD_ZKSDK_INSTR_CLOSE_CONTEXT_STATE 36 : sizeof(fd_zksdk_zero_ciphertext_context_t), // FD_ZKSDK_INSTR_VERIFY_ZERO_CIPHERTEXT 37 : sizeof(fd_zksdk_ciph_ciph_eq_context_t), // FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_CIPHERTEXT_EQUALITY 38 : sizeof(fd_zksdk_ciph_comm_eq_context_t), // FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_COMMITMENT_EQUALITY 39 : sizeof(fd_zksdk_pubkey_validity_context_t), // FD_ZKSDK_INSTR_VERIFY_PUBKEY_VALIDITY 40 : sizeof(fd_zksdk_percentage_with_cap_context_t), // FD_ZKSDK_INSTR_VERIFY_PERCENTAGE_WITH_CAP 41 : sizeof(fd_zksdk_batched_range_proof_context_t), // FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U64 42 : sizeof(fd_zksdk_batched_range_proof_context_t), // FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U128 43 : sizeof(fd_zksdk_batched_range_proof_context_t), // FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U256 44 : sizeof(fd_zksdk_grp_ciph_2h_val_context_t), // FD_ZKSDK_INSTR_VERFIY_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY 45 : sizeof(fd_zksdk_batched_grp_ciph_2h_val_context_t), // FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY 46 : sizeof(fd_zksdk_grp_ciph_3h_val_context_t), // FD_ZKSDK_INSTR_VERFIY_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY 47 : sizeof(fd_zksdk_batched_grp_ciph_3h_val_context_t), // FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY 48 : }; 49 : 50 : /* Size of the proof struct for each verify_proof instruction. */ 51 : static const ulong fd_zksdk_proof_sz[] = { 52 : 0, // (placeholder/unused) FD_ZKSDK_INSTR_CLOSE_CONTEXT_STATE 53 : sizeof(fd_zksdk_zero_ciphertext_proof_t), // FD_ZKSDK_INSTR_VERIFY_ZERO_CIPHERTEXT 54 : sizeof(fd_zksdk_ciph_ciph_eq_proof_t), // FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_CIPHERTEXT_EQUALITY 55 : sizeof(fd_zksdk_ciph_comm_eq_proof_t), // FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_COMMITMENT_EQUALITY 56 : sizeof(fd_zksdk_pubkey_validity_proof_t), // FD_ZKSDK_INSTR_VERIFY_PUBKEY_VALIDITY 57 : sizeof(fd_zksdk_percentage_with_cap_proof_t), // FD_ZKSDK_INSTR_VERIFY_PERCENTAGE_WITH_CAP 58 : sizeof(fd_zksdk_range_proof_u64_proof_t), // FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U64 59 : sizeof(fd_zksdk_range_proof_u128_proof_t), // FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U128 60 : sizeof(fd_zksdk_range_proof_u256_proof_t), // FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U256 61 : sizeof(fd_zksdk_grp_ciph_2h_val_proof_t), // FD_ZKSDK_INSTR_VERFIY_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY 62 : sizeof(fd_zksdk_batched_grp_ciph_2h_val_proof_t), // FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY 63 : sizeof(fd_zksdk_grp_ciph_3h_val_proof_t), // FD_ZKSDK_INSTR_VERFIY_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY 64 : sizeof(fd_zksdk_batched_grp_ciph_3h_val_proof_t), // FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY 65 : }; 66 : 67 : /* ProofContextStateMeta 68 : https://github.com/solana-program/zk-elgamal-proof/blob/zk-sdk%40v5.0.0/zk-sdk/src/zk_elgamal_proof_program/state.rs#L71 */ 69 : struct __attribute__((packed)) fd_zksdk_proof_ctx_state_meta { 70 : uchar ctx_state_authority[ 32 ]; 71 : uchar proof_type; 72 : }; 73 : typedef struct fd_zksdk_proof_ctx_state_meta fd_zksdk_proof_ctx_state_meta_t; 74 : 75 : /* Define all the fd_zksdk_instr_verify_proof_* functions with a macro 76 : so it's easy to keep the interface. */ 77 : #define DEFINE_VERIFY_PROOF(name) \ 78 : int \ 79 : fd_zksdk_instr_verify_proof_ ## name( void const * context, \ 80 : void const * proof ); 81 : 82 : FD_PROTOTYPES_BEGIN 83 : 84 : DEFINE_VERIFY_PROOF(zero_ciphertext) 85 : DEFINE_VERIFY_PROOF(ciphertext_ciphertext_equality) 86 : DEFINE_VERIFY_PROOF(ciphertext_commitment_equality) 87 : DEFINE_VERIFY_PROOF(pubkey_validity) 88 : DEFINE_VERIFY_PROOF(percentage_with_cap) 89 : DEFINE_VERIFY_PROOF(batched_range_proof_u64) 90 : DEFINE_VERIFY_PROOF(batched_range_proof_u128) 91 : DEFINE_VERIFY_PROOF(batched_range_proof_u256) 92 : DEFINE_VERIFY_PROOF(grouped_ciphertext_2_handles_validity) 93 : DEFINE_VERIFY_PROOF(batched_grouped_ciphertext_2_handles_validity) 94 : DEFINE_VERIFY_PROOF(grouped_ciphertext_3_handles_validity) 95 : DEFINE_VERIFY_PROOF(batched_grouped_ciphertext_3_handles_validity) 96 : 97 : FD_PROTOTYPES_END 98 : 99 : #endif /* HEADER_fd_src_ballet_zksdk_fd_zksdk_h */