@@ -19,6 +19,7 @@ static void test_surjectionproof_api(void) {
19
19
secp256k1_context * sign = secp256k1_context_create (SECP256K1_CONTEXT_SIGN );
20
20
secp256k1_context * vrfy = secp256k1_context_create (SECP256K1_CONTEXT_VERIFY );
21
21
secp256k1_context * both = secp256k1_context_create (SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY );
22
+ secp256k1_context * sttc = secp256k1_context_clone (secp256k1_context_no_precomp );
22
23
secp256k1_fixed_asset_tag fixed_input_tags [10 ];
23
24
secp256k1_fixed_asset_tag fixed_output_tag ;
24
25
secp256k1_generator ephemeral_input_tags [10 ];
@@ -39,10 +40,13 @@ static void test_surjectionproof_api(void) {
39
40
secp256k1_context_set_error_callback (sign , counting_illegal_callback_fn , & ecount );
40
41
secp256k1_context_set_error_callback (vrfy , counting_illegal_callback_fn , & ecount );
41
42
secp256k1_context_set_error_callback (both , counting_illegal_callback_fn , & ecount );
43
+ secp256k1_context_set_error_callback (sttc , counting_illegal_callback_fn , & ecount );
42
44
secp256k1_context_set_illegal_callback (none , counting_illegal_callback_fn , & ecount );
43
45
secp256k1_context_set_illegal_callback (sign , counting_illegal_callback_fn , & ecount );
44
46
secp256k1_context_set_illegal_callback (vrfy , counting_illegal_callback_fn , & ecount );
45
47
secp256k1_context_set_illegal_callback (both , counting_illegal_callback_fn , & ecount );
48
+ secp256k1_context_set_illegal_callback (sttc , counting_illegal_callback_fn , & ecount );
49
+
46
50
47
51
for (i = 0 ; i < n_inputs ; i ++ ) {
48
52
secp256k1_testrand256 (input_blinding_key [i ]);
@@ -127,76 +131,79 @@ static void test_surjectionproof_api(void) {
127
131
CHECK (secp256k1_surjectionproof_generate (sign , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag , 0 , input_blinding_key [0 ], output_blinding_key ) == 1 );
128
132
CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag , 0 , input_blinding_key [0 ], output_blinding_key ) != 0 );
129
133
CHECK (ecount == 7 );
134
+ CHECK (secp256k1_surjectionproof_generate (sttc , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag , 0 , input_blinding_key [0 ], output_blinding_key ) == 0 );
135
+ CHECK (ecount == 8 );
130
136
131
137
CHECK (secp256k1_surjectionproof_generate (both , NULL , ephemeral_input_tags , n_inputs , & ephemeral_output_tag , 0 , input_blinding_key [0 ], output_blinding_key ) == 0 );
132
- CHECK (ecount == 8 );
133
- CHECK (secp256k1_surjectionproof_generate (both , & proof , NULL , n_inputs , & ephemeral_output_tag , 0 , input_blinding_key [0 ], output_blinding_key ) == 0 );
134
138
CHECK (ecount == 9 );
139
+ CHECK (secp256k1_surjectionproof_generate (both , & proof , NULL , n_inputs , & ephemeral_output_tag , 0 , input_blinding_key [0 ], output_blinding_key ) == 0 );
140
+ CHECK (ecount == 10 );
135
141
CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs + 1 , & ephemeral_output_tag , 0 , input_blinding_key [0 ], output_blinding_key ) == 0 );
136
- CHECK (ecount == 9 );
142
+ CHECK (ecount == 10 );
137
143
CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs - 1 , & ephemeral_output_tag , 0 , input_blinding_key [0 ], output_blinding_key ) == 0 );
138
- CHECK (ecount == 9 );
144
+ CHECK (ecount == 10 );
139
145
CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , 0 , & ephemeral_output_tag , 0 , input_blinding_key [0 ], output_blinding_key ) == 0 );
140
- CHECK (ecount == 9 );
141
- CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs , NULL , 0 , input_blinding_key [0 ], output_blinding_key ) == 0 );
142
146
CHECK (ecount == 10 );
147
+ CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs , NULL , 0 , input_blinding_key [0 ], output_blinding_key ) == 0 );
148
+ CHECK (ecount == 11 );
143
149
CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag , 1 , input_blinding_key [0 ], output_blinding_key ) != 0 );
144
- CHECK (ecount == 10 ); /* the above line "succeeds" but generates an invalid proof as the input_index is wrong. it is fairly expensive to detect this. should we? */
150
+ CHECK (ecount == 11 ); /* the above line "succeeds" but generates an invalid proof as the input_index is wrong. it is fairly expensive to detect this. should we? */
145
151
CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag , n_inputs + 1 , input_blinding_key [0 ], output_blinding_key ) != 0 );
146
- CHECK (ecount == 10 );
147
- CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag , 0 , NULL , output_blinding_key ) == 0 );
148
152
CHECK (ecount == 11 );
149
- CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag , 0 , input_blinding_key [ 0 ], NULL ) == 0 );
153
+ CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag , 0 , NULL , output_blinding_key ) == 0 );
150
154
CHECK (ecount == 12 );
155
+ CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag , 0 , input_blinding_key [0 ], NULL ) == 0 );
156
+ CHECK (ecount == 13 );
151
157
152
158
CHECK (secp256k1_surjectionproof_generate (both , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag , 0 , input_blinding_key [0 ], output_blinding_key ) != 0 );
153
159
/* check verify */
154
160
CHECK (secp256k1_surjectionproof_verify (none , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag ) == 1 );
155
161
CHECK (secp256k1_surjectionproof_verify (sign , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag ) == 1 );
156
162
CHECK (secp256k1_surjectionproof_verify (vrfy , & proof , ephemeral_input_tags , n_inputs , & ephemeral_output_tag ) == 1 );
157
- CHECK (ecount == 12 );
163
+ CHECK (ecount == 13 );
158
164
159
165
CHECK (secp256k1_surjectionproof_verify (vrfy , NULL , ephemeral_input_tags , n_inputs , & ephemeral_output_tag ) == 0 );
160
- CHECK (ecount == 13 );
161
- CHECK (secp256k1_surjectionproof_verify (vrfy , & proof , NULL , n_inputs , & ephemeral_output_tag ) == 0 );
162
166
CHECK (ecount == 14 );
167
+ CHECK (secp256k1_surjectionproof_verify (vrfy , & proof , NULL , n_inputs , & ephemeral_output_tag ) == 0 );
168
+ CHECK (ecount == 15 );
163
169
CHECK (secp256k1_surjectionproof_verify (vrfy , & proof , ephemeral_input_tags , n_inputs - 1 , & ephemeral_output_tag ) == 0 );
164
- CHECK (ecount == 14 );
170
+ CHECK (ecount == 15 );
165
171
CHECK (secp256k1_surjectionproof_verify (vrfy , & proof , ephemeral_input_tags , n_inputs + 1 , & ephemeral_output_tag ) == 0 );
166
- CHECK (ecount == 14 );
167
- CHECK (secp256k1_surjectionproof_verify (vrfy , & proof , ephemeral_input_tags , n_inputs , NULL ) == 0 );
168
172
CHECK (ecount == 15 );
173
+ CHECK (secp256k1_surjectionproof_verify (vrfy , & proof , ephemeral_input_tags , n_inputs , NULL ) == 0 );
174
+ CHECK (ecount == 16 );
169
175
170
176
/* Check serialize */
171
177
serialized_len = sizeof (serialized_proof );
172
178
CHECK (secp256k1_surjectionproof_serialize (none , serialized_proof , & serialized_len , & proof ) != 0 );
173
- CHECK (ecount == 15 );
179
+ CHECK (ecount == 16 );
174
180
serialized_len = sizeof (serialized_proof );
175
181
CHECK (secp256k1_surjectionproof_serialize (none , NULL , & serialized_len , & proof ) == 0 );
176
- CHECK (ecount == 16 );
182
+ CHECK (ecount == 17 );
177
183
serialized_len = sizeof (serialized_proof );
178
184
CHECK (secp256k1_surjectionproof_serialize (none , serialized_proof , NULL , & proof ) == 0 );
179
- CHECK (ecount == 17 );
185
+ CHECK (ecount == 18 );
180
186
serialized_len = sizeof (serialized_proof );
181
187
CHECK (secp256k1_surjectionproof_serialize (none , serialized_proof , & serialized_len , NULL ) == 0 );
182
- CHECK (ecount == 18 );
188
+ CHECK (ecount == 19 );
183
189
184
190
serialized_len = sizeof (serialized_proof );
185
191
CHECK (secp256k1_surjectionproof_serialize (none , serialized_proof , & serialized_len , & proof ) != 0 );
186
192
/* Check parse */
187
193
CHECK (secp256k1_surjectionproof_parse (none , & proof , serialized_proof , serialized_len ) != 0 );
188
- CHECK (ecount == 18 );
189
- CHECK (secp256k1_surjectionproof_parse (none , NULL , serialized_proof , serialized_len ) == 0 );
190
194
CHECK (ecount == 19 );
191
- CHECK (secp256k1_surjectionproof_parse (none , & proof , NULL , serialized_len ) == 0 );
195
+ CHECK (secp256k1_surjectionproof_parse (none , NULL , serialized_proof , serialized_len ) == 0 );
192
196
CHECK (ecount == 20 );
197
+ CHECK (secp256k1_surjectionproof_parse (none , & proof , NULL , serialized_len ) == 0 );
198
+ CHECK (ecount == 21 );
193
199
CHECK (secp256k1_surjectionproof_parse (none , & proof , serialized_proof , 0 ) == 0 );
194
- CHECK (ecount == 20 );
200
+ CHECK (ecount == 21 );
195
201
196
202
secp256k1_context_destroy (none );
197
203
secp256k1_context_destroy (sign );
198
204
secp256k1_context_destroy (vrfy );
199
205
secp256k1_context_destroy (both );
206
+ secp256k1_context_destroy (sttc );
200
207
}
201
208
202
209
static void test_input_selection (size_t n_inputs ) {
0 commit comments