@@ -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 );
@@ -286,13 +295,18 @@ static void run_static_context_tests(int use_prealloc) {
286
295
287
296
static void run_proper_context_tests (int use_prealloc ) {
288
297
int32_t dummy = 0 ;
289
- secp256k1_context * my_ctx ;
298
+ secp256k1_context * my_ctx , * my_ctx_fresh ;
290
299
void * my_ctx_prealloc = NULL ;
300
+ unsigned char seed [32 ] = {0x17 };
291
301
292
302
secp256k1_gej pubj ;
293
303
secp256k1_ge pub ;
294
304
secp256k1_scalar msg , key , nonce ;
295
305
secp256k1_scalar sigr , sigs ;
306
+
307
+ /* Fresh reference context for comparison */
308
+ my_ctx_fresh = secp256k1_context_create (SECP256K1_CONTEXT_NONE );
309
+
296
310
if (use_prealloc ) {
297
311
my_ctx_prealloc = malloc (secp256k1_context_preallocated_size (SECP256K1_CONTEXT_NONE ));
298
312
CHECK (my_ctx_prealloc != NULL );
@@ -301,6 +315,13 @@ static void run_proper_context_tests(int use_prealloc) {
301
315
my_ctx = secp256k1_context_create (SECP256K1_CONTEXT_NONE );
302
316
}
303
317
318
+ /* Randomize and reset randomization */
319
+ CHECK (context_eq (my_ctx , my_ctx_fresh ));
320
+ CHECK (secp256k1_context_randomize (my_ctx , seed ) == 1 );
321
+ CHECK (!context_eq (my_ctx , my_ctx_fresh ));
322
+ CHECK (secp256k1_context_randomize (my_ctx , NULL ) == 1 );
323
+ CHECK (context_eq (my_ctx , my_ctx_fresh ));
324
+
304
325
/* set error callback (to a function that still aborts in case malloc() fails in secp256k1_context_clone() below) */
305
326
secp256k1_context_set_error_callback (my_ctx , secp256k1_default_illegal_callback_fn , NULL );
306
327
CHECK (my_ctx -> error_callback .fn != secp256k1_default_error_callback_fn );
@@ -315,16 +336,33 @@ static void run_proper_context_tests(int use_prealloc) {
315
336
316
337
if (use_prealloc ) {
317
338
/* clone into a non-preallocated context and then again into a new preallocated one. */
318
- ctx_tmp = my_ctx ; my_ctx = secp256k1_context_clone (my_ctx ); secp256k1_context_preallocated_destroy (ctx_tmp );
319
- free (my_ctx_prealloc ); my_ctx_prealloc = malloc (secp256k1_context_preallocated_size (SECP256K1_CONTEXT_NONE )); CHECK (my_ctx_prealloc != NULL );
320
- ctx_tmp = my_ctx ; my_ctx = secp256k1_context_preallocated_clone (my_ctx , my_ctx_prealloc ); secp256k1_context_destroy (ctx_tmp );
339
+ ctx_tmp = my_ctx ;
340
+ my_ctx = secp256k1_context_clone (my_ctx );
341
+ CHECK (context_eq (ctx_tmp , my_ctx ));
342
+ secp256k1_context_preallocated_destroy (ctx_tmp );
343
+
344
+ free (my_ctx_prealloc );
345
+ my_ctx_prealloc = malloc (secp256k1_context_preallocated_size (SECP256K1_CONTEXT_NONE ));
346
+ CHECK (my_ctx_prealloc != NULL );
347
+ ctx_tmp = my_ctx ;
348
+ my_ctx = secp256k1_context_preallocated_clone (my_ctx , my_ctx_prealloc );
349
+ CHECK (context_eq (ctx_tmp , my_ctx ));
350
+ secp256k1_context_destroy (ctx_tmp );
321
351
} else {
322
352
/* clone into a preallocated context and then again into a new non-preallocated one. */
323
353
void * prealloc_tmp ;
324
354
325
- prealloc_tmp = malloc (secp256k1_context_preallocated_size (SECP256K1_CONTEXT_NONE )); CHECK (prealloc_tmp != NULL );
326
- ctx_tmp = my_ctx ; my_ctx = secp256k1_context_preallocated_clone (my_ctx , prealloc_tmp ); secp256k1_context_destroy (ctx_tmp );
327
- ctx_tmp = my_ctx ; my_ctx = secp256k1_context_clone (my_ctx ); secp256k1_context_preallocated_destroy (ctx_tmp );
355
+ prealloc_tmp = malloc (secp256k1_context_preallocated_size (SECP256K1_CONTEXT_NONE ));
356
+ CHECK (prealloc_tmp != NULL );
357
+ ctx_tmp = my_ctx ;
358
+ my_ctx = secp256k1_context_preallocated_clone (my_ctx , prealloc_tmp );
359
+ CHECK (context_eq (ctx_tmp , my_ctx ));
360
+ secp256k1_context_destroy (ctx_tmp );
361
+
362
+ ctx_tmp = my_ctx ;
363
+ my_ctx = secp256k1_context_clone (my_ctx );
364
+ CHECK (context_eq (ctx_tmp , my_ctx ));
365
+ secp256k1_context_preallocated_destroy (ctx_tmp );
328
366
free (prealloc_tmp );
329
367
}
330
368
}
@@ -335,6 +373,7 @@ static void run_proper_context_tests(int use_prealloc) {
335
373
/* And that it resets back to default. */
336
374
secp256k1_context_set_error_callback (my_ctx , NULL , NULL );
337
375
CHECK (my_ctx -> error_callback .fn == secp256k1_default_error_callback_fn );
376
+ CHECK (context_eq (my_ctx , my_ctx_fresh ));
338
377
339
378
/* Verify that setting and resetting illegal callback works */
340
379
secp256k1_context_set_illegal_callback (my_ctx , counting_illegal_callback_fn , & dummy );
@@ -343,6 +382,7 @@ static void run_proper_context_tests(int use_prealloc) {
343
382
secp256k1_context_set_illegal_callback (my_ctx , NULL , NULL );
344
383
CHECK (my_ctx -> illegal_callback .fn == secp256k1_default_illegal_callback_fn );
345
384
CHECK (my_ctx -> illegal_callback .data == NULL );
385
+ CHECK (context_eq (my_ctx , my_ctx_fresh ));
346
386
347
387
/*** attempt to use them ***/
348
388
random_scalar_order_test (& msg );
@@ -368,6 +408,7 @@ static void run_proper_context_tests(int use_prealloc) {
368
408
} else {
369
409
secp256k1_context_destroy (my_ctx );
370
410
}
411
+ secp256k1_context_destroy (my_ctx_fresh );
371
412
372
413
/* Defined as no-op. */
373
414
secp256k1_context_destroy (NULL );
0 commit comments