Skip to content

Commit bbbcc61

Browse files
committed
Add static test vector for MuSig key aggregation
1 parent 00f2799 commit bbbcc61

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

src/modules/musig/tests_impl.h

+42
Original file line numberDiff line numberDiff line change
@@ -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+
949990
void 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

Comments
 (0)