@@ -247,7 +247,16 @@ static void run_static_context_tests(int use_prealloc) {
247
247
248
248
{
249
249
int ecount = 0 ;
250
+ unsigned char seed [32 ] = {0x17 };
250
251
secp256k1_context_set_illegal_callback (STATIC_CTX , counting_illegal_callback_fn , & ecount );
252
+
253
+ /* Randomizing secp256k1_context_static is not supported. */
254
+ CHECK (secp256k1_context_randomize (STATIC_CTX , seed ) == 0 );
255
+ CHECK (ecount == 1 );
256
+ CHECK (secp256k1_context_randomize (STATIC_CTX , NULL ) == 0 );
257
+ CHECK (ecount == 2 );
258
+ ecount = 0 ;
259
+
251
260
/* Destroying or cloning secp256k1_context_static is not supported. */
252
261
if (use_prealloc ) {
253
262
CHECK (secp256k1_context_preallocated_clone_size (STATIC_CTX ) == 0 );
@@ -284,13 +293,18 @@ static void run_static_context_tests(int use_prealloc) {
284
293
285
294
static void run_proper_context_tests (int use_prealloc ) {
286
295
int32_t dummy = 0 ;
287
- secp256k1_context * my_ctx ;
296
+ secp256k1_context * my_ctx , * my_ctx_fresh ;
288
297
void * my_ctx_prealloc = NULL ;
298
+ unsigned char seed [32 ] = {0x17 };
289
299
290
300
secp256k1_gej pubj ;
291
301
secp256k1_ge pub ;
292
302
secp256k1_scalar msg , key , nonce ;
293
303
secp256k1_scalar sigr , sigs ;
304
+
305
+ /* Fresh reference context for comparison */
306
+ my_ctx_fresh = secp256k1_context_create (SECP256K1_CONTEXT_NONE );
307
+
294
308
if (use_prealloc ) {
295
309
my_ctx_prealloc = malloc (secp256k1_context_preallocated_size (SECP256K1_CONTEXT_NONE ));
296
310
CHECK (my_ctx_prealloc != NULL );
@@ -299,6 +313,13 @@ static void run_proper_context_tests(int use_prealloc) {
299
313
my_ctx = secp256k1_context_create (SECP256K1_CONTEXT_NONE );
300
314
}
301
315
316
+ /* Randomize and reset randomization */
317
+ CHECK (context_eq (my_ctx , my_ctx_fresh ));
318
+ CHECK (secp256k1_context_randomize (my_ctx , seed ) == 1 );
319
+ CHECK (!context_eq (my_ctx , my_ctx_fresh ));
320
+ CHECK (secp256k1_context_randomize (my_ctx , NULL ) == 1 );
321
+ CHECK (context_eq (my_ctx , my_ctx_fresh ));
322
+
302
323
/* set error callback (to a function that still aborts in case malloc() fails in secp256k1_context_clone() below) */
303
324
secp256k1_context_set_error_callback (my_ctx , secp256k1_default_illegal_callback_fn , NULL );
304
325
CHECK (my_ctx -> error_callback .fn != secp256k1_default_error_callback_fn );
@@ -313,16 +334,33 @@ static void run_proper_context_tests(int use_prealloc) {
313
334
314
335
if (use_prealloc ) {
315
336
/* clone into a non-preallocated context and then again into a new preallocated one. */
316
- ctx_tmp = my_ctx ; my_ctx = secp256k1_context_clone (my_ctx ); secp256k1_context_preallocated_destroy (ctx_tmp );
317
- free (my_ctx_prealloc ); my_ctx_prealloc = malloc (secp256k1_context_preallocated_size (SECP256K1_CONTEXT_NONE )); CHECK (my_ctx_prealloc != NULL );
318
- ctx_tmp = my_ctx ; my_ctx = secp256k1_context_preallocated_clone (my_ctx , my_ctx_prealloc ); secp256k1_context_destroy (ctx_tmp );
337
+ ctx_tmp = my_ctx ;
338
+ my_ctx = secp256k1_context_clone (my_ctx );
339
+ CHECK (context_eq (ctx_tmp , my_ctx ));
340
+ secp256k1_context_preallocated_destroy (ctx_tmp );
341
+
342
+ free (my_ctx_prealloc );
343
+ my_ctx_prealloc = malloc (secp256k1_context_preallocated_size (SECP256K1_CONTEXT_NONE ));
344
+ CHECK (my_ctx_prealloc != NULL );
345
+ ctx_tmp = my_ctx ;
346
+ my_ctx = secp256k1_context_preallocated_clone (my_ctx , my_ctx_prealloc );
347
+ CHECK (context_eq (ctx_tmp , my_ctx ));
348
+ secp256k1_context_destroy (ctx_tmp );
319
349
} else {
320
350
/* clone into a preallocated context and then again into a new non-preallocated one. */
321
351
void * prealloc_tmp ;
322
352
323
- prealloc_tmp = malloc (secp256k1_context_preallocated_size (SECP256K1_CONTEXT_NONE )); CHECK (prealloc_tmp != NULL );
324
- ctx_tmp = my_ctx ; my_ctx = secp256k1_context_preallocated_clone (my_ctx , prealloc_tmp ); secp256k1_context_destroy (ctx_tmp );
325
- ctx_tmp = my_ctx ; my_ctx = secp256k1_context_clone (my_ctx ); secp256k1_context_preallocated_destroy (ctx_tmp );
353
+ prealloc_tmp = malloc (secp256k1_context_preallocated_size (SECP256K1_CONTEXT_NONE ));
354
+ CHECK (prealloc_tmp != NULL );
355
+ ctx_tmp = my_ctx ;
356
+ my_ctx = secp256k1_context_preallocated_clone (my_ctx , prealloc_tmp );
357
+ CHECK (context_eq (ctx_tmp , my_ctx ));
358
+ secp256k1_context_destroy (ctx_tmp );
359
+
360
+ ctx_tmp = my_ctx ;
361
+ my_ctx = secp256k1_context_clone (my_ctx );
362
+ CHECK (context_eq (ctx_tmp , my_ctx ));
363
+ secp256k1_context_preallocated_destroy (ctx_tmp );
326
364
free (prealloc_tmp );
327
365
}
328
366
}
@@ -333,12 +371,14 @@ static void run_proper_context_tests(int use_prealloc) {
333
371
/* And that it resets back to default. */
334
372
secp256k1_context_set_error_callback (my_ctx , NULL , NULL );
335
373
CHECK (my_ctx -> error_callback .fn == secp256k1_default_error_callback_fn );
374
+ CHECK (context_eq (my_ctx , my_ctx_fresh ));
336
375
337
376
/* Verify that setting and resetting illegal callback works */
338
377
secp256k1_context_set_illegal_callback (my_ctx , counting_illegal_callback_fn , & dummy );
339
378
CHECK (my_ctx -> illegal_callback .fn == counting_illegal_callback_fn );
340
379
secp256k1_context_set_illegal_callback (my_ctx , NULL , NULL );
341
380
CHECK (my_ctx -> illegal_callback .fn == secp256k1_default_illegal_callback_fn );
381
+ CHECK (context_eq (my_ctx , my_ctx_fresh ));
342
382
343
383
/*** attempt to use them ***/
344
384
random_scalar_order_test (& msg );
0 commit comments