@@ -64,7 +64,7 @@ void musig_simple_test(secp256k1_scratch_space *scratch) {
64
64
partial_sig_ptr [i ] = & partial_sig [i ];
65
65
66
66
CHECK (create_keypair_and_pk (& keypair [i ], & pk [i ], sk [i ]));
67
- CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce [i ], & pubnonce [i ], session_id [i ], sk [i ], NULL , NULL , NULL ) == 1 );
67
+ CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce [i ], & pubnonce [i ], session_id [i ], sk [i ], & pk [ i ], NULL , NULL , NULL ) == 1 );
68
68
}
69
69
70
70
CHECK (secp256k1_musig_pubkey_agg (ctx , scratch , & agg_pk , & keyagg_cache , pk_ptr , 2 ) == 1 );
@@ -294,44 +294,48 @@ void musig_api_tests(secp256k1_scratch_space *scratch) {
294
294
295
295
/** Session creation **/
296
296
ecount = 0 ;
297
- CHECK (secp256k1_musig_nonce_gen (none , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], msg , & keyagg_cache , max64 ) == 1 );
298
- CHECK (secp256k1_musig_nonce_gen (vrfy , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], msg , & keyagg_cache , max64 ) == 1 );
299
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], msg , & keyagg_cache , max64 ) == 1 );
297
+ CHECK (secp256k1_musig_nonce_gen (none , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], & pk [ 0 ], msg , & keyagg_cache , max64 ) == 1 );
298
+ CHECK (secp256k1_musig_nonce_gen (vrfy , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], & pk [ 0 ], msg , & keyagg_cache , max64 ) == 1 );
299
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], & pk [ 0 ], msg , & keyagg_cache , max64 ) == 1 );
300
300
CHECK (ecount == 0 );
301
- CHECK (secp256k1_musig_nonce_gen (sttc , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], msg , & keyagg_cache , max64 ) == 0 );
301
+ CHECK (secp256k1_musig_nonce_gen (sttc , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], & pk [ 0 ], msg , & keyagg_cache , max64 ) == 0 );
302
302
CHECK (ecount == 1 );
303
- CHECK (secp256k1_musig_nonce_gen (sign , NULL , & pubnonce [0 ], session_id [0 ], sk [0 ], msg , & keyagg_cache , max64 ) == 0 );
303
+ CHECK (secp256k1_musig_nonce_gen (sign , NULL , & pubnonce [0 ], session_id [0 ], sk [0 ], & pk [ 0 ], msg , & keyagg_cache , max64 ) == 0 );
304
304
CHECK (ecount == 2 );
305
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], NULL , session_id [0 ], sk [0 ], msg , & keyagg_cache , max64 ) == 0 );
305
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], NULL , session_id [0 ], sk [0 ], & pk [ 0 ], msg , & keyagg_cache , max64 ) == 0 );
306
306
CHECK (ecount == 3 );
307
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], NULL , sk [0 ], msg , & keyagg_cache , max64 ) == 0 );
307
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], NULL , sk [0 ], & pk [ 0 ], msg , & keyagg_cache , max64 ) == 0 );
308
308
CHECK (ecount == 4 );
309
309
CHECK (memcmp_and_randomize (secnonce [0 ].data , zeros68 , sizeof (secnonce [0 ].data )) == 0 );
310
310
/* no seckey and session_id is 0 */
311
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], zeros68 , NULL , msg , & keyagg_cache , max64 ) == 0 );
311
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], zeros68 , NULL , & pk [ 0 ], msg , & keyagg_cache , max64 ) == 0 );
312
312
CHECK (ecount == 4 );
313
313
CHECK (memcmp_and_randomize (secnonce [0 ].data , zeros68 , sizeof (secnonce [0 ].data )) == 0 );
314
314
/* session_id 0 is fine when a seckey is provided */
315
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], zeros68 , sk [0 ], msg , & keyagg_cache , max64 ) == 1 );
316
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], NULL , msg , & keyagg_cache , max64 ) == 1 );
315
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], zeros68 , sk [0 ], & pk [ 0 ], msg , & keyagg_cache , max64 ) == 1 );
316
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], NULL , & pk [ 0 ], msg , & keyagg_cache , max64 ) == 1 );
317
317
CHECK (ecount == 4 );
318
318
/* invalid seckey */
319
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], max64 , msg , & keyagg_cache , max64 ) == 0 );
319
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], max64 , & pk [ 0 ], msg , & keyagg_cache , max64 ) == 0 );
320
320
CHECK (memcmp_and_randomize (secnonce [0 ].data , zeros68 , sizeof (secnonce [0 ].data )) == 0 );
321
321
CHECK (ecount == 4 );
322
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], NULL , & keyagg_cache , max64 ) == 1 );
323
- CHECK (ecount == 4 );
324
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], msg , NULL , max64 ) == 1 );
325
- CHECK (ecount == 4 );
326
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], msg , & invalid_keyagg_cache , max64 ) == 0 );
322
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], NULL , msg , & keyagg_cache , max64 ) == 0 );
327
323
CHECK (ecount == 5 );
324
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], & invalid_pk , msg , & keyagg_cache , max64 ) == 0 );
325
+ CHECK (ecount == 6 );
326
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], & pk [0 ], NULL , & keyagg_cache , max64 ) == 1 );
327
+ CHECK (ecount == 6 );
328
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], & pk [0 ], msg , NULL , max64 ) == 1 );
329
+ CHECK (ecount == 6 );
330
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], & pk [0 ], msg , & invalid_keyagg_cache , max64 ) == 0 );
331
+ CHECK (ecount == 7 );
328
332
CHECK (memcmp_and_randomize (secnonce [0 ].data , zeros68 , sizeof (secnonce [0 ].data )) == 0 );
329
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], msg , & keyagg_cache , NULL ) == 1 );
330
- CHECK (ecount == 5 );
333
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk [0 ], & pk [ 0 ], msg , & keyagg_cache , NULL ) == 1 );
334
+ CHECK (ecount == 7 );
331
335
332
- /* Every in-argument except session_id can be NULL */
333
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], NULL , NULL , NULL , NULL ) == 1 );
334
- CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [1 ], & pubnonce [1 ], session_id [1 ], sk [1 ], NULL , NULL , NULL ) == 1 );
336
+ /* Every in-argument except session_id and pubkey can be NULL */
337
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], NULL , & pk [ 0 ], NULL , NULL , NULL ) == 1 );
338
+ CHECK (secp256k1_musig_nonce_gen (sign , & secnonce [1 ], & pubnonce [1 ], session_id [1 ], sk [1 ], & pk [ 1 ], NULL , NULL , NULL ) == 1 );
335
339
336
340
/** Serialize and parse public nonces **/
337
341
ecount = 0 ;
@@ -608,25 +612,27 @@ void musig_api_tests(secp256k1_scratch_space *scratch) {
608
612
void musig_nonce_bitflip (unsigned char * * args , size_t n_flip , size_t n_bytes ) {
609
613
secp256k1_scalar k1 [2 ], k2 [2 ];
610
614
611
- secp256k1_nonce_function_musig (k1 , args [0 ], args [1 ], args [2 ], args [3 ], args [4 ]);
615
+ secp256k1_nonce_function_musig (k1 , args [0 ], args [1 ], args [2 ], args [3 ], args [4 ], args [ 5 ] );
612
616
secp256k1_testrand_flip (args [n_flip ], n_bytes );
613
- secp256k1_nonce_function_musig (k2 , args [0 ], args [1 ], args [2 ], args [3 ], args [4 ]);
617
+ secp256k1_nonce_function_musig (k2 , args [0 ], args [1 ], args [2 ], args [3 ], args [4 ], args [ 5 ] );
614
618
CHECK (secp256k1_scalar_eq (& k1 [0 ], & k2 [0 ]) == 0 );
615
619
CHECK (secp256k1_scalar_eq (& k1 [1 ], & k2 [1 ]) == 0 );
616
620
}
617
621
618
622
void musig_nonce_test (void ) {
619
- unsigned char * args [5 ];
623
+ unsigned char * args [6 ];
620
624
unsigned char session_id [32 ];
621
625
unsigned char sk [32 ];
626
+ unsigned char pk [33 ];
622
627
unsigned char msg [32 ];
623
628
unsigned char agg_pk [32 ];
624
629
unsigned char extra_input [32 ];
625
630
int i , j ;
626
- secp256k1_scalar k [5 ][2 ];
631
+ secp256k1_scalar k [6 ][2 ];
627
632
628
633
secp256k1_testrand_bytes_test (session_id , sizeof (session_id ));
629
634
secp256k1_testrand_bytes_test (sk , sizeof (sk ));
635
+ secp256k1_testrand_bytes_test (pk , sizeof (pk ));
630
636
secp256k1_testrand_bytes_test (msg , sizeof (msg ));
631
637
secp256k1_testrand_bytes_test (agg_pk , sizeof (agg_pk ));
632
638
secp256k1_testrand_bytes_test (extra_input , sizeof (extra_input ));
@@ -635,29 +641,33 @@ void musig_nonce_test(void) {
635
641
args [0 ] = session_id ;
636
642
args [1 ] = msg ;
637
643
args [2 ] = sk ;
638
- args [3 ] = agg_pk ;
639
- args [4 ] = extra_input ;
644
+ args [3 ] = pk ;
645
+ args [4 ] = agg_pk ;
646
+ args [5 ] = extra_input ;
640
647
for (i = 0 ; i < count ; i ++ ) {
641
648
musig_nonce_bitflip (args , 0 , sizeof (session_id ));
642
649
musig_nonce_bitflip (args , 1 , sizeof (msg ));
643
650
musig_nonce_bitflip (args , 2 , sizeof (sk ));
644
- musig_nonce_bitflip (args , 3 , sizeof (agg_pk ));
645
- musig_nonce_bitflip (args , 4 , sizeof (extra_input ));
651
+ musig_nonce_bitflip (args , 3 , sizeof (pk ));
652
+ musig_nonce_bitflip (args , 4 , sizeof (agg_pk ));
653
+ musig_nonce_bitflip (args , 5 , sizeof (extra_input ));
646
654
}
647
655
/* Check that if any argument is NULL, a different nonce is produced than if
648
656
* any other argument is NULL. */
649
657
memcpy (msg , session_id , sizeof (msg ));
650
658
memcpy (sk , session_id , sizeof (sk ));
659
+ memcpy (pk , session_id , sizeof (session_id ));
651
660
memcpy (agg_pk , session_id , sizeof (agg_pk ));
652
661
memcpy (extra_input , session_id , sizeof (extra_input ));
653
- secp256k1_nonce_function_musig (k [0 ], args [0 ], args [1 ], args [2 ], args [3 ], args [4 ]);
654
- secp256k1_nonce_function_musig (k [1 ], args [0 ], NULL , args [2 ], args [3 ], args [4 ]);
655
- secp256k1_nonce_function_musig (k [2 ], args [0 ], args [1 ], NULL , args [3 ], args [4 ]);
656
- secp256k1_nonce_function_musig (k [3 ], args [0 ], args [1 ], args [2 ], NULL , args [4 ]);
657
- secp256k1_nonce_function_musig (k [4 ], args [0 ], args [1 ], args [2 ], args [3 ], NULL );
658
- for (i = 0 ; i < 5 ; i ++ ) {
662
+ secp256k1_nonce_function_musig (k [0 ], args [0 ], args [1 ], args [2 ], args [3 ], args [4 ], args [5 ]);
663
+ secp256k1_nonce_function_musig (k [1 ], args [0 ], NULL , args [2 ], args [3 ], args [4 ], args [5 ]);
664
+ secp256k1_nonce_function_musig (k [2 ], args [0 ], args [1 ], NULL , args [3 ], args [4 ], args [5 ]);
665
+ secp256k1_nonce_function_musig (k [3 ], args [0 ], args [1 ], args [2 ], NULL , args [4 ], args [5 ]);
666
+ secp256k1_nonce_function_musig (k [4 ], args [0 ], args [1 ], args [2 ], args [3 ], NULL , args [5 ]);
667
+ secp256k1_nonce_function_musig (k [5 ], args [0 ], args [1 ], args [2 ], args [3 ], args [4 ], NULL );
668
+ for (i = 0 ; i < 6 ; i ++ ) {
659
669
CHECK (!secp256k1_scalar_eq (& k [i ][0 ], & k [i ][1 ]));
660
- for (j = i + 1 ; j < 5 ; j ++ ) {
670
+ for (j = i + 1 ; j < 6 ; j ++ ) {
661
671
CHECK (!secp256k1_scalar_eq (& k [i ][0 ], & k [j ][0 ]));
662
672
CHECK (!secp256k1_scalar_eq (& k [i ][1 ], & k [j ][1 ]));
663
673
}
@@ -729,10 +739,10 @@ void scriptless_atomic_swap(secp256k1_scratch_space *scratch) {
729
739
CHECK (secp256k1_musig_pubkey_agg (ctx , scratch , & agg_pk_a , & keyagg_cache_a , pk_a_ptr , 2 ) == 1 );
730
740
CHECK (secp256k1_musig_pubkey_agg (ctx , scratch , & agg_pk_b , & keyagg_cache_b , pk_b_ptr , 2 ) == 1 );
731
741
732
- CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce_a [0 ], & pubnonce_a [0 ], seed_a [0 ], sk_a [0 ], NULL , NULL , NULL ) == 1 );
733
- CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce_a [1 ], & pubnonce_a [1 ], seed_a [1 ], sk_a [1 ], NULL , NULL , NULL ) == 1 );
734
- CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce_b [0 ], & pubnonce_b [0 ], seed_b [0 ], sk_b [0 ], NULL , NULL , NULL ) == 1 );
735
- CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce_b [1 ], & pubnonce_b [1 ], seed_b [1 ], sk_b [1 ], NULL , NULL , NULL ) == 1 );
742
+ CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce_a [0 ], & pubnonce_a [0 ], seed_a [0 ], sk_a [0 ], & pk_a [ 0 ], NULL , NULL , NULL ) == 1 );
743
+ CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce_a [1 ], & pubnonce_a [1 ], seed_a [1 ], sk_a [1 ], & pk_b [ 1 ], NULL , NULL , NULL ) == 1 );
744
+ CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce_b [0 ], & pubnonce_b [0 ], seed_b [0 ], sk_b [0 ], & pk_b [ 0 ], NULL , NULL , NULL ) == 1 );
745
+ CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce_b [1 ], & pubnonce_b [1 ], seed_b [1 ], sk_b [1 ], & pk_b [ 1 ], NULL , NULL , NULL ) == 1 );
736
746
737
747
/* Step 2: Exchange nonces */
738
748
CHECK (secp256k1_musig_nonce_agg (ctx , & aggnonce_a , pubnonce_ptr_a , 2 ) == 1 );
@@ -840,8 +850,8 @@ void musig_tweak_test_helper(const secp256k1_xonly_pubkey* agg_pk, const unsigne
840
850
CHECK (create_keypair_and_pk (& keypair [1 ], & pk [1 ], sk1 ) == 1 );
841
851
secp256k1_testrand256 (msg );
842
852
843
- CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk0 , NULL , NULL , NULL ) == 1 );
844
- CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce [1 ], & pubnonce [1 ], session_id [1 ], sk1 , NULL , NULL , NULL ) == 1 );
853
+ CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce [0 ], & pubnonce [0 ], session_id [0 ], sk0 , & pk [ 0 ], NULL , NULL , NULL ) == 1 );
854
+ CHECK (secp256k1_musig_nonce_gen (ctx , & secnonce [1 ], & pubnonce [1 ], session_id [1 ], sk1 , & pk [ 1 ], NULL , NULL , NULL ) == 1 );
845
855
846
856
CHECK (secp256k1_musig_nonce_agg (ctx , & aggnonce , pubnonce_ptr , 2 ) == 1 );
847
857
CHECK (secp256k1_musig_nonce_process (ctx , & session , & aggnonce , msg , keyagg_cache , NULL ) == 1 );
0 commit comments