Line data Source code
1 : #ifndef HEADER_fd_src_ballet_bls_fd_bls_h 2 : #define HEADER_fd_src_ballet_bls_fd_bls_h 3 : 4 : #include "../../util/fd_util.h" 5 : #include "../../third_party/blst/bindings/blst.h" 6 : #include "fd_bls_err.h" 7 : 8 2748 : #define FD_BLS_SEC_SZ (32UL) 9 3 : #define FD_BLS_PUB_SZ (96UL) 10 114 : #define FD_BLS_PUB_COMPRESSED_SZ (48UL) 11 375 : #define FD_BLS_SIG_SZ (192UL) 12 1134 : #define FD_BLS_SIG_COMPRESSED_SZ (96UL) 13 78633 : #define FD_BLS_SET_MAX (2000UL) /* TODO make set_dynamic so this isn't dependent on the VAT cap */ 14 21774 : #define FD_BLS_DST "BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_" 15 10887 : #define FD_BLS_DST_SZ (sizeof(FD_BLS_DST)-1UL) 16 : 17 : typedef blst_scalar fd_bls_sec_t; 18 : typedef blst_p1 fd_bls_pub_t; 19 : typedef blst_p2 fd_bls_sig_t; 20 : 21 : 22 : #define SET_NAME fd_bls_set 23 39 : #define SET_MAX FD_BLS_SET_MAX 24 : #include "../../util/tmpl/fd_set.c" /* TODO make set_dynamic so this isn't dependent on the VAT cap */ 25 : 26 : struct fd_bls_agg { 27 : fd_bls_pub_t pub; 28 : fd_bls_sig_t sig; 29 : fd_bls_set_t set[ fd_bls_set_word_cnt ]; /* each bit position corresponds to a signer's rank in the epoch (based on ag_epoch_info) */ 30 : }; 31 : typedef struct fd_bls_agg fd_bls_agg_t; 32 : 33 : FD_PROTOTYPES_BEGIN 34 : 35 : void 36 : fd_bls_sec_to_pub( fd_bls_sec_t const * sec, 37 : fd_bls_pub_t * pub ); 38 : 39 : void 40 : fd_bls_sec_derive( fd_bls_sec_t * sec, 41 : uchar const * ikm, 42 : ulong ikm_sz ); 43 : 44 : void 45 : fd_bls_sec_sign( fd_bls_sec_t const * sec, 46 : uchar const * msg, 47 : ulong msg_sz, 48 : fd_bls_sig_t * sig ); 49 : 50 : void 51 : fd_bls_sig_ser( fd_bls_sig_t const * sig, 52 : uchar buf[ static FD_BLS_SIG_SZ ] ); 53 : 54 : int 55 : fd_bls_sig_de( fd_bls_sig_t * sig, 56 : uchar const buf[ static FD_BLS_SIG_SZ ] ); 57 : 58 : int 59 : fd_bls_pub_de( fd_bls_pub_t * pub, 60 : uchar const * buf, 61 : ulong buf_sz ); 62 : 63 : fd_bls_agg_t * 64 : fd_bls_agg_construct( fd_bls_agg_t * agg, 65 : fd_bls_pub_t const * pub, 66 : fd_bls_sig_t const * sig, 67 : fd_bls_set_t const * set ); 68 : 69 : int 70 : fd_bls_agg_verify( uchar const * msg, 71 : ulong msg_sz, 72 : fd_bls_pub_t const * pub, 73 : fd_bls_sig_t const * sig ); 74 : 75 : fd_bls_set_t * 76 : fd_bls_agg_verify_linear( fd_bls_agg_t const * agg, 77 : uchar const * msg, 78 : ulong msg_sz, 79 : fd_bls_pub_t const * pub, 80 : fd_bls_sig_t const * sig, 81 : fd_bls_set_t * bad ); 82 : 83 : fd_bls_set_t * 84 : fd_bls_agg_verify_bisect( fd_bls_agg_t const * agg, 85 : uchar const * msg, 86 : ulong msg_sz, 87 : fd_bls_pub_t const * pub, 88 : fd_bls_sig_t const * sig, 89 : fd_bls_set_t * bad ); 90 : 91 : int 92 : fd_bls_agg_verify_subtract( fd_bls_agg_t * agg, 93 : uchar const * msg, 94 : ulong msg_sz, 95 : fd_bls_pub_t const * pub, 96 : fd_bls_sig_t const * sig, 97 : fd_bls_set_t * bad ); 98 : 99 : FD_PROTOTYPES_END 100 : 101 : #endif