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 :
7 0 : #define FD_BLS_SEC_SZ (32UL)
8 0 : #define FD_BLS_PUB_SZ (96UL)
9 0 : #define FD_BLS_PUB_COMPRESSED_SZ (48UL)
10 0 : #define FD_BLS_SIG_SZ (192UL)
11 0 : #define FD_BLS_SIG_COMPRESSED_SZ (96UL)
12 0 : #define FD_BLS_SET_MAX (2000UL) /* TODO make set_dynamic so this isn't dependent on the VAT cap */
13 0 : #define FD_BLS_DST "BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_"
14 0 : #define FD_BLS_DST_SZ (sizeof(FD_BLS_DST)-1UL)
15 :
16 : typedef blst_scalar fd_bls_sec_t;
17 : typedef blst_p1_affine fd_bls_pub_t;
18 : typedef blst_p2_affine fd_bls_sig_t;
19 :
20 : #define SET_NAME fd_bls_set
21 0 : #define SET_MAX FD_BLS_SET_MAX
22 : #include "../../util/tmpl/fd_set.c" /* TODO make set_dynamic so this isn't dependent on the VAT cap */
23 :
24 : struct fd_bls_agg {
25 : blst_p1 pub;
26 : blst_p2 sig;
27 : 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) */
28 : };
29 : typedef struct fd_bls_agg fd_bls_agg_t;
30 :
31 : FD_PROTOTYPES_BEGIN
32 :
33 : void
34 : fd_bls_sec_to_pub( fd_bls_sec_t const * sec,
35 : fd_bls_pub_t * pub );
36 :
37 : void
38 : fd_bls_sec_derive( fd_bls_sec_t * sec,
39 : uchar const * ikm,
40 : ulong ikm_sz );
41 :
42 : void
43 : fd_bls_sec_sign( fd_bls_sec_t const * sec,
44 : uchar const * msg,
45 : ulong msg_sz,
46 : fd_bls_sig_t * sig );
47 :
48 : void
49 : fd_bls_sig_ser( fd_bls_sig_t const * sig,
50 : uchar buf[ static FD_BLS_SIG_SZ ] );
51 :
52 : int
53 : fd_bls_sig_de( fd_bls_sig_t * sig,
54 : uchar const buf[ static FD_BLS_SIG_SZ ] );
55 :
56 : int
57 : fd_bls_pub_de( fd_bls_pub_t * pub,
58 : uchar const * buf,
59 : ulong buf_sz );
60 :
61 : fd_bls_agg_t *
62 : fd_bls_agg_null( fd_bls_agg_t * agg );
63 :
64 : fd_bls_agg_t *
65 : fd_bls_agg_construct( fd_bls_agg_t * agg,
66 : fd_bls_pub_t const * pub,
67 : fd_bls_sig_t const * sig,
68 : fd_bls_set_t const * set );
69 :
70 : blst_p1 *
71 : fd_bls_pub_sum( blst_p1 * pub,
72 : fd_bls_pub_t const * key,
73 : ulong key_cnt,
74 : fd_bls_set_t const * set,
75 : blst_p1 const * full );
76 :
77 : void
78 : fd_bls_hash_msg( uchar const * msg,
79 : ulong msg_sz,
80 : blst_p2_affine * h );
81 :
82 : int
83 : fd_bls_agg_verify_hashed( blst_p2_affine const * h,
84 : blst_p1 const * pub,
85 : blst_p2 const * sig );
86 :
87 : int
88 : fd_bls_agg_verify( uchar const * msg,
89 : ulong msg_sz,
90 : blst_p1 const * pub,
91 : blst_p2 const * sig );
92 :
93 : fd_bls_set_t *
94 : fd_bls_agg_verify_linear( fd_bls_agg_t const * agg,
95 : uchar const * msg,
96 : ulong msg_sz,
97 : fd_bls_pub_t const * pub,
98 : fd_bls_sig_t const * sig,
99 : fd_bls_set_t * bad );
100 :
101 : fd_bls_set_t *
102 : fd_bls_agg_verify_bisect( fd_bls_agg_t const * agg,
103 : uchar const * msg,
104 : ulong msg_sz,
105 : fd_bls_pub_t const * pub,
106 : fd_bls_sig_t const * sig,
107 : fd_bls_set_t * bad );
108 :
109 : int
110 : fd_bls_agg_verify_subtract( fd_bls_agg_t * agg,
111 : uchar const * msg,
112 : ulong msg_sz,
113 : fd_bls_pub_t const * pub,
114 : fd_bls_sig_t const * sig,
115 : fd_bls_set_t * bad );
116 :
117 : FD_PROTOTYPES_END
118 :
119 : #endif
|