@@ -158,7 +158,7 @@ int context_eq(const secp256k1_context *a, const secp256k1_context *b) {
158
158
&& a -> error_callback .data == b -> error_callback .data ;
159
159
}
160
160
161
- void test_deprecated_flags (void ) {
161
+ void run_deprecated_context_flags_test (void ) {
162
162
unsigned int flags [] = { SECP256K1_CONTEXT_SIGN ,
163
163
SECP256K1_CONTEXT_VERIFY ,
164
164
SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY };
@@ -176,11 +176,59 @@ void test_deprecated_flags(void) {
176
176
secp256k1_context_destroy (none_ctx );
177
177
}
178
178
179
- void run_context_tests (int use_prealloc ) {
179
+ void run_ec_illegal_argument_tests (void ) {
180
+ int ecount = 0 ;
181
+ int ecount2 = 10 ;
180
182
secp256k1_pubkey pubkey ;
181
183
secp256k1_pubkey zero_pubkey ;
182
184
secp256k1_ecdsa_signature sig ;
183
185
unsigned char ctmp [32 ];
186
+
187
+ /* Setup */
188
+ secp256k1_context_set_illegal_callback (sttc , counting_illegal_callback_fn , & ecount );
189
+ secp256k1_context_set_illegal_callback (ctx , counting_illegal_callback_fn , & ecount2 );
190
+ memset (ctmp , 1 , 32 );
191
+ memset (& zero_pubkey , 0 , sizeof (zero_pubkey ));
192
+
193
+ /* Verify context-type checking illegal-argument errors. */
194
+ CHECK (secp256k1_ec_pubkey_create (sttc , & pubkey , ctmp ) == 0 );
195
+ CHECK (ecount == 1 );
196
+ VG_UNDEF (& pubkey , sizeof (pubkey ));
197
+ CHECK (secp256k1_ec_pubkey_create (ctx , & pubkey , ctmp ) == 1 );
198
+ VG_CHECK (& pubkey , sizeof (pubkey ));
199
+ CHECK (secp256k1_ecdsa_sign (sttc , & sig , ctmp , ctmp , NULL , NULL ) == 0 );
200
+ CHECK (ecount == 2 );
201
+ VG_UNDEF (& sig , sizeof (sig ));
202
+ CHECK (secp256k1_ecdsa_sign (ctx , & sig , ctmp , ctmp , NULL , NULL ) == 1 );
203
+ VG_CHECK (& sig , sizeof (sig ));
204
+ CHECK (ecount2 == 10 );
205
+ CHECK (secp256k1_ecdsa_verify (ctx , & sig , ctmp , & pubkey ) == 1 );
206
+ CHECK (ecount2 == 10 );
207
+ CHECK (secp256k1_ecdsa_verify (sttc , & sig , ctmp , & pubkey ) == 1 );
208
+ CHECK (ecount == 2 );
209
+ CHECK (secp256k1_ec_pubkey_tweak_add (ctx , & pubkey , ctmp ) == 1 );
210
+ CHECK (ecount2 == 10 );
211
+ CHECK (secp256k1_ec_pubkey_tweak_add (sttc , & pubkey , ctmp ) == 1 );
212
+ CHECK (ecount == 2 );
213
+ CHECK (secp256k1_ec_pubkey_tweak_mul (ctx , & pubkey , ctmp ) == 1 );
214
+ CHECK (ecount2 == 10 );
215
+ CHECK (secp256k1_ec_pubkey_negate (sttc , & pubkey ) == 1 );
216
+ CHECK (ecount == 2 );
217
+ CHECK (secp256k1_ec_pubkey_negate (ctx , & pubkey ) == 1 );
218
+ CHECK (ecount == 2 );
219
+ CHECK (secp256k1_ec_pubkey_negate (sttc , & zero_pubkey ) == 0 );
220
+ CHECK (ecount == 3 );
221
+ CHECK (secp256k1_ec_pubkey_negate (ctx , NULL ) == 0 );
222
+ CHECK (ecount2 == 11 );
223
+ CHECK (secp256k1_ec_pubkey_tweak_mul (sttc , & pubkey , ctmp ) == 1 );
224
+ CHECK (ecount == 3 );
225
+
226
+ /* Clean up */
227
+ secp256k1_context_set_illegal_callback (sttc , NULL , NULL );
228
+ secp256k1_context_set_illegal_callback (ctx , NULL , NULL );
229
+ }
230
+
231
+ void run_context_tests (int use_prealloc ) {
184
232
int32_t ecount ;
185
233
int32_t ecount2 ;
186
234
secp256k1_context * my_ctx ;
@@ -204,10 +252,6 @@ void run_context_tests(int use_prealloc) {
204
252
memcpy (my_sttc , secp256k1_context_static , sizeof (secp256k1_context ));
205
253
CHECK (!secp256k1_ecmult_gen_context_is_built (& my_sttc -> ecmult_gen_ctx ));
206
254
207
- test_deprecated_flags ();
208
-
209
- memset (& zero_pubkey , 0 , sizeof (zero_pubkey ));
210
-
211
255
ecount = 0 ;
212
256
ecount2 = 10 ;
213
257
secp256k1_context_set_illegal_callback (my_sttc , counting_illegal_callback_fn , & ecount );
@@ -239,7 +283,21 @@ void run_context_tests(int use_prealloc) {
239
283
secp256k1_context_destroy (my_sttc );
240
284
CHECK (ecount == 2 );
241
285
}
242
- ecount = 0 ;
286
+
287
+ /* Randomizing secp256k1_context_static is not supported. */
288
+ {
289
+ unsigned char ctmp [32 ];
290
+ memset (ctmp , 1 , sizeof (ctmp ));
291
+ ecount = 0 ;
292
+ CHECK (secp256k1_context_randomize (my_sttc , ctmp ) == 0 );
293
+ CHECK (ecount == 1 );
294
+ CHECK (secp256k1_context_randomize (my_sttc , NULL ) == 0 );
295
+ CHECK (ecount == 2 );
296
+ CHECK (secp256k1_context_randomize (my_ctx , ctmp ) == 1 );
297
+ CHECK (ecount == 2 );
298
+ CHECK (secp256k1_context_randomize (my_ctx , NULL ) == 1 );
299
+ CHECK (ecount == 2 );
300
+ }
243
301
244
302
/* check if sizes for cloning are consistent */
245
303
CHECK (secp256k1_context_preallocated_clone_size (my_ctx ) == secp256k1_context_preallocated_size (SECP256K1_CONTEXT_NONE ));
@@ -277,51 +335,6 @@ void run_context_tests(int use_prealloc) {
277
335
secp256k1_ecmult_gen (& my_ctx -> ecmult_gen_ctx , & pubj , & key );
278
336
secp256k1_ge_set_gej (& pub , & pubj );
279
337
280
- /* Verify context-type checking illegal-argument errors.
281
- TODO Move this to a separate function. */
282
- memset (ctmp , 1 , 32 );
283
- CHECK (secp256k1_ec_pubkey_create (my_sttc , & pubkey , ctmp ) == 0 );
284
- CHECK (ecount == 1 );
285
- VG_UNDEF (& pubkey , sizeof (pubkey ));
286
- CHECK (secp256k1_ec_pubkey_create (my_ctx , & pubkey , ctmp ) == 1 );
287
- VG_CHECK (& pubkey , sizeof (pubkey ));
288
- CHECK (secp256k1_ecdsa_sign (my_sttc , & sig , ctmp , ctmp , NULL , NULL ) == 0 );
289
- CHECK (ecount == 2 );
290
- VG_UNDEF (& sig , sizeof (sig ));
291
- CHECK (secp256k1_ecdsa_sign (my_ctx , & sig , ctmp , ctmp , NULL , NULL ) == 1 );
292
- VG_CHECK (& sig , sizeof (sig ));
293
- CHECK (ecount2 == 10 );
294
- CHECK (secp256k1_ecdsa_verify (my_ctx , & sig , ctmp , & pubkey ) == 1 );
295
- CHECK (ecount2 == 10 );
296
- CHECK (secp256k1_ecdsa_verify (my_sttc , & sig , ctmp , & pubkey ) == 1 );
297
- CHECK (ecount == 2 );
298
- CHECK (secp256k1_ec_pubkey_tweak_add (my_ctx , & pubkey , ctmp ) == 1 );
299
- CHECK (ecount2 == 10 );
300
- CHECK (secp256k1_ec_pubkey_tweak_add (my_sttc , & pubkey , ctmp ) == 1 );
301
- CHECK (ecount == 2 );
302
- CHECK (secp256k1_ec_pubkey_tweak_mul (my_ctx , & pubkey , ctmp ) == 1 );
303
- CHECK (ecount2 == 10 );
304
- CHECK (secp256k1_ec_pubkey_negate (my_sttc , & pubkey ) == 1 );
305
- CHECK (ecount == 2 );
306
- CHECK (secp256k1_ec_pubkey_negate (my_ctx , & pubkey ) == 1 );
307
- CHECK (ecount == 2 );
308
- CHECK (secp256k1_ec_pubkey_negate (my_sttc , & zero_pubkey ) == 0 );
309
- CHECK (ecount == 3 );
310
- CHECK (secp256k1_ec_pubkey_negate (my_ctx , NULL ) == 0 );
311
- CHECK (ecount2 == 11 );
312
- CHECK (secp256k1_ec_pubkey_tweak_mul (my_sttc , & pubkey , ctmp ) == 1 );
313
- CHECK (ecount == 3 );
314
- CHECK (secp256k1_context_randomize (my_sttc , ctmp ) == 0 );
315
- CHECK (ecount == 4 );
316
- CHECK (secp256k1_context_randomize (my_sttc , NULL ) == 0 );
317
- CHECK (ecount == 5 );
318
- CHECK (secp256k1_context_randomize (my_ctx , ctmp ) == 1 );
319
- CHECK (ecount2 == 11 );
320
- CHECK (secp256k1_context_randomize (my_ctx , NULL ) == 1 );
321
- CHECK (ecount2 == 11 );
322
- secp256k1_context_set_illegal_callback (my_sttc , NULL , NULL );
323
- secp256k1_context_set_illegal_callback (my_ctx , NULL , NULL );
324
-
325
338
/* obtain a working nonce */
326
339
do {
327
340
random_scalar_order_test (& nonce );
@@ -7404,6 +7417,9 @@ int main(int argc, char **argv) {
7404
7417
memcpy (sttc , secp256k1_context_static , sizeof (secp256k1_context ));
7405
7418
CHECK (!secp256k1_context_is_proper (sttc ));
7406
7419
7420
+ run_deprecated_context_flags_test ();
7421
+ run_ec_illegal_argument_tests ();
7422
+
7407
7423
run_rand_bits ();
7408
7424
run_rand_int ();
7409
7425
0 commit comments