@@ -946,6 +946,47 @@ void musig_tweak_test(secp256k1_scratch_space *scratch) {
946946 musig_tweak_test_helper (& Q_xonly , sk [0 ], sk [1 ], & pre_session_Q );
947947}
948948
949+ void musig_test_vectors (void ) {
950+ secp256k1_xonly_pubkey combined_pk ;
951+ unsigned char combined_pk_ser [32 ];
952+ secp256k1_xonly_pubkey pk [2 ];
953+ const unsigned char pk_ser1 [32 ] = {
954+ 0xF9 , 0x30 , 0x8A , 0x01 , 0x92 , 0x58 , 0xC3 , 0x10 ,
955+ 0x49 , 0x34 , 0x4F , 0x85 , 0xF8 , 0x9D , 0x52 , 0x29 ,
956+ 0xB5 , 0x31 , 0xC8 , 0x45 , 0x83 , 0x6F , 0x99 , 0xB0 ,
957+ 0x86 , 0x01 , 0xF1 , 0x13 , 0xBC , 0xE0 , 0x36 , 0xF9
958+ };
959+ const unsigned char pk_ser2 [32 ] = {
960+ 0xDF , 0xF1 , 0xD7 , 0x7F , 0x2A , 0x67 , 0x1C , 0x5F ,
961+ 0x36 , 0x18 , 0x37 , 0x26 , 0xDB , 0x23 , 0x41 , 0xBE ,
962+ 0x58 , 0xFE , 0xAE , 0x1D , 0xA2 , 0xDE , 0xCE , 0xD8 ,
963+ 0x43 , 0x24 , 0x0F , 0x7B , 0x50 , 0x2B , 0xA6 , 0x59
964+ };
965+ const unsigned char combined_pk_expected [32 ] = {
966+ 0xD5 , 0x60 , 0x83 , 0x72 , 0xAE , 0x3C , 0xA2 , 0x56 ,
967+ 0xEF , 0x51 , 0xF8 , 0x91 , 0x9C , 0xFD , 0x0F , 0x22 ,
968+ 0xCD , 0x82 , 0x93 , 0x43 , 0x95 , 0x01 , 0x06 , 0x4E ,
969+ 0xBE , 0xE4 , 0xBB , 0x12 , 0xC6 , 0xE7 , 0xDE , 0xE2 ,
970+ };
971+
972+ CHECK (secp256k1_xonly_pubkey_parse (ctx , & pk [0 ], pk_ser1 ));
973+ CHECK (secp256k1_xonly_pubkey_parse (ctx , & pk [1 ], pk_ser2 ));
974+ CHECK (secp256k1_musig_pubkey_combine (ctx , NULL , & combined_pk , NULL , pk , 2 ) == 1 );
975+ CHECK (secp256k1_xonly_pubkey_serialize (ctx , combined_pk_ser , & combined_pk ));
976+ /* TODO: remove */
977+ /* int i, j; */
978+ /* printf("const unsigned char combined_pk_expected[32] = {\n"); */
979+ /* for (i = 0; i < 4; i++) { */
980+ /* printf(" "); */
981+ /* for (j = 0; j < 8; j++) { */
982+ /* printf("0x%02X, ", combined_pk_ser[i*8+j]); */
983+ /* } */
984+ /* printf("\n"); */
985+ /* } */
986+ /* printf("};\n"); */
987+ CHECK (memcmp (combined_pk_ser , combined_pk_expected , sizeof (combined_pk_ser )) == 0 );
988+ }
989+
949990void run_musig_tests (void ) {
950991 int i ;
951992 secp256k1_scratch_space * scratch = secp256k1_scratch_space_create (ctx , 1024 * 1024 );
@@ -961,6 +1002,7 @@ void run_musig_tests(void) {
9611002 scriptless_atomic_swap (scratch );
9621003 musig_tweak_test (scratch );
9631004 }
1005+ musig_test_vectors ();
9641006 sha256_tag_test ();
9651007
9661008 secp256k1_scratch_space_destroy (ctx , scratch );
0 commit comments