-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add musig2 reference tests (no functional changes)
- Loading branch information
Showing
10 changed files
with
1,092 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
298 changes: 298 additions & 0 deletions
298
tests/src/commonTest/kotlin/fr/acinq/secp256k1/Musig2Test.kt
Large diffs are not rendered by default.
Oops, something went wrong.
144 changes: 144 additions & 0 deletions
144
tests/src/commonTest/resources/musig2/det_sign_vectors.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
{ | ||
"sk": "7FB9E0E687ADA1EEBF7ECFE2F21E73EBDB51A7D450948DFE8D76D7F2D1007671", | ||
"pubkeys": [ | ||
"03935F972DA013F80AE011890FA89B67A27B7BE6CCB24D3274D18B2D4067F261A9", | ||
"02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", | ||
"02DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", | ||
"020000000000000000000000000000000000000000000000000000000000000007" | ||
], | ||
"msgs": [ | ||
"F95466D086770E689964664219266FE5ED215C92AE20BAB5C9D79ADDDDF3C0CF", | ||
"2626262626262626262626262626262626262626262626262626262626262626262626262626" | ||
], | ||
"valid_test_cases": [ | ||
{ | ||
"rand": "0000000000000000000000000000000000000000000000000000000000000000", | ||
"aggothernonce": "0337C87821AFD50A8644D820A8F3E02E499C931865C2360FB43D0A0D20DAFE07EA0287BF891D2A6DEAEBADC909352AA9405D1428C15F4B75F04DAE642A95C2548480", | ||
"key_indices": [0, 1, 2], | ||
"tweaks": [], | ||
"is_xonly": [], | ||
"msg_index": 0, | ||
"signer_index": 0, | ||
"expected": [ | ||
"03D96275257C2FCCBB6EEB77BDDF51D3C88C26EE1626C6CDA8999B9D34F4BA13A60309BE2BF883C6ABE907FA822D9CA166D51A3DCC28910C57528F6983FC378B7843", | ||
"41EA65093F71D084785B20DC26A887CD941C9597860A21660CBDB9CC2113CAD3" | ||
] | ||
}, | ||
{ | ||
"rand": null, | ||
"aggothernonce": "0337C87821AFD50A8644D820A8F3E02E499C931865C2360FB43D0A0D20DAFE07EA0287BF891D2A6DEAEBADC909352AA9405D1428C15F4B75F04DAE642A95C2548480", | ||
"key_indices": [1, 0, 2], | ||
"tweaks": [], | ||
"is_xonly": [], | ||
"msg_index": 0, | ||
"signer_index": 1, | ||
"expected": [ | ||
"028FBCCF5BB73A7B61B270BAD15C0F9475D577DD85C2157C9D38BEF1EC922B48770253BE3638C87369BC287E446B7F2C8CA5BEB9FFBD1EA082C62913982A65FC214D", | ||
"AEAA31262637BFA88D5606679018A0FEEEC341F3107D1199857F6C81DE61B8DD" | ||
] | ||
}, | ||
{ | ||
"rand": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", | ||
"aggothernonce": "0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817980279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", | ||
"key_indices": [1, 2, 0], | ||
"tweaks": [], | ||
"is_xonly": [], | ||
"msg_index": 1, | ||
"signer_index": 2, | ||
"expected": [ | ||
"024FA8D774F0C8743FAA77AFB4D08EE5A013C2E8EEAD8A6F08A77DDD2D28266DB803050905E8C994477F3F2981861A2E3791EF558626E645FBF5AA131C5D6447C2C2", | ||
"FEE28A56B8556B7632E42A84122C51A4861B1F2DEC7E81B632195E56A52E3E13" | ||
], | ||
"comment": "Message longer than 32 bytes" | ||
}, | ||
{ | ||
"rand": "0000000000000000000000000000000000000000000000000000000000000000", | ||
"aggothernonce": "032DE2662628C90B03F5E720284EB52FF7D71F4284F627B68A853D78C78E1FFE9303E4C5524E83FFE1493B9077CF1CA6BEB2090C93D930321071AD40B2F44E599046", | ||
"key_indices": [0, 1, 2], | ||
"tweaks": ["E8F791FF9225A2AF0102AFFF4A9A723D9612A682A25EBE79802B263CDFCD83BB"], | ||
"is_xonly": [true], | ||
"msg_index": 0, | ||
"signer_index": 0, | ||
"expected": [ | ||
"031E07C0D11A0134E55DB1FC16095ADCBD564236194374AA882BFB3C78273BF673039D0336E8CA6288C00BFC1F8B594563529C98661172B9BC1BE85C23A4CE1F616B", | ||
"7B1246C5889E59CB0375FA395CC86AC42D5D7D59FD8EAB4FDF1DCAB2B2F006EA" | ||
], | ||
"comment": "Tweaked public key" | ||
} | ||
], | ||
"error_test_cases": [ | ||
{ | ||
"rand": "0000000000000000000000000000000000000000000000000000000000000000", | ||
"aggothernonce": "0337C87821AFD50A8644D820A8F3E02E499C931865C2360FB43D0A0D20DAFE07EA0287BF891D2A6DEAEBADC909352AA9405D1428C15F4B75F04DAE642A95C2548480", | ||
"key_indices": [1, 0, 3], | ||
"tweaks": [], | ||
"is_xonly": [], | ||
"msg_index": 0, | ||
"signer_index": 1, | ||
"error": { | ||
"type": "invalid_contribution", | ||
"signer": 2, | ||
"contrib": "pubkey" | ||
}, | ||
"comment": "Signer 2 provided an invalid public key" | ||
}, | ||
{ | ||
"rand": "0000000000000000000000000000000000000000000000000000000000000000", | ||
"aggothernonce": "0337C87821AFD50A8644D820A8F3E02E499C931865C2360FB43D0A0D20DAFE07EA0287BF891D2A6DEAEBADC909352AA9405D1428C15F4B75F04DAE642A95C2548480", | ||
"key_indices": [1, 2], | ||
"tweaks": [], | ||
"is_xonly": [], | ||
"msg_index": 0, | ||
"signer_index": 1, | ||
"error": { | ||
"type": "value", | ||
"message": "The signer's pubkey must be included in the list of pubkeys." | ||
}, | ||
"comment": "The signers pubkey is not in the list of pubkeys" | ||
}, | ||
{ | ||
"rand": "0000000000000000000000000000000000000000000000000000000000000000", | ||
"aggothernonce": "0437C87821AFD50A8644D820A8F3E02E499C931865C2360FB43D0A0D20DAFE07EA0287BF891D2A6DEAEBADC909352AA9405D1428C15F4B75F04DAE642A95C2548480", | ||
"key_indices": [1, 2, 0], | ||
"tweaks": [], | ||
"is_xonly": [], | ||
"msg_index": 0, | ||
"signer_index": 2, | ||
"error": { | ||
"type": "invalid_contribution", | ||
"signer": null, | ||
"contrib": "aggothernonce" | ||
}, | ||
"comment": "aggothernonce is invalid due wrong tag, 0x04, in the first half" | ||
}, | ||
{ | ||
"rand": "0000000000000000000000000000000000000000000000000000000000000000", | ||
"aggothernonce": "0000000000000000000000000000000000000000000000000000000000000000000287BF891D2A6DEAEBADC909352AA9405D1428C15F4B75F04DAE642A95C2548480", | ||
"key_indices": [1, 2, 0], | ||
"tweaks": [], | ||
"is_xonly": [], | ||
"msg_index": 0, | ||
"signer_index": 2, | ||
"error": { | ||
"type": "invalid_contribution", | ||
"signer": null, | ||
"contrib": "aggothernonce" | ||
}, | ||
"comment": "aggothernonce is invalid because first half corresponds to point at infinity" | ||
}, | ||
{ | ||
"rand": "0000000000000000000000000000000000000000000000000000000000000000", | ||
"aggothernonce": "0337C87821AFD50A8644D820A8F3E02E499C931865C2360FB43D0A0D20DAFE07EA0287BF891D2A6DEAEBADC909352AA9405D1428C15F4B75F04DAE642A95C2548480", | ||
"key_indices": [1, 2, 0], | ||
"tweaks": ["FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141"], | ||
"is_xonly": [false], | ||
"msg_index": 0, | ||
"signer_index": 2, | ||
"error": { | ||
"type": "value", | ||
"message": "The tweak must be less than n." | ||
}, | ||
"comment": "Tweak is invalid because it exceeds group size" | ||
} | ||
] | ||
} |
88 changes: 88 additions & 0 deletions
88
tests/src/commonTest/resources/musig2/key_agg_vectors.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
{ | ||
"pubkeys": [ | ||
"02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", | ||
"03DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", | ||
"023590A94E768F8E1815C2F24B4D80A8E3149316C3518CE7B7AD338368D038CA66", | ||
"020000000000000000000000000000000000000000000000000000000000000005", | ||
"02FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30", | ||
"04F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", | ||
"03935F972DA013F80AE011890FA89B67A27B7BE6CCB24D3274D18B2D4067F261A9" | ||
], | ||
"tweaks": [ | ||
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", | ||
"252E4BD67410A76CDF933D30EAA1608214037F1B105A013ECCD3C5C184A6110B" | ||
], | ||
"valid_test_cases": [ | ||
{ | ||
"key_indices": [0, 1, 2], | ||
"expected": "90539EEDE565F5D054F32CC0C220126889ED1E5D193BAF15AEF344FE59D4610C" | ||
}, | ||
{ | ||
"key_indices": [2, 1, 0], | ||
"expected": "6204DE8B083426DC6EAF9502D27024D53FC826BF7D2012148A0575435DF54B2B" | ||
}, | ||
{ | ||
"key_indices": [0, 0, 0], | ||
"expected": "B436E3BAD62B8CD409969A224731C193D051162D8C5AE8B109306127DA3AA935" | ||
}, | ||
{ | ||
"key_indices": [0, 0, 1, 1], | ||
"expected": "69BC22BFA5D106306E48A20679DE1D7389386124D07571D0D872686028C26A3E" | ||
} | ||
], | ||
"error_test_cases": [ | ||
{ | ||
"key_indices": [0, 3], | ||
"tweak_indices": [], | ||
"is_xonly": [], | ||
"error": { | ||
"type": "invalid_contribution", | ||
"signer": 1, | ||
"contrib": "pubkey" | ||
}, | ||
"comment": "Invalid public key" | ||
}, | ||
{ | ||
"key_indices": [0, 4], | ||
"tweak_indices": [], | ||
"is_xonly": [], | ||
"error": { | ||
"type": "invalid_contribution", | ||
"signer": 1, | ||
"contrib": "pubkey" | ||
}, | ||
"comment": "Public key exceeds field size" | ||
}, | ||
{ | ||
"key_indices": [5, 0], | ||
"tweak_indices": [], | ||
"is_xonly": [], | ||
"error": { | ||
"type": "invalid_contribution", | ||
"signer": 0, | ||
"contrib": "pubkey" | ||
}, | ||
"comment": "First byte of public key is not 2 or 3" | ||
}, | ||
{ | ||
"key_indices": [0, 1], | ||
"tweak_indices": [0], | ||
"is_xonly": [true], | ||
"error": { | ||
"type": "value", | ||
"message": "The tweak must be less than n." | ||
}, | ||
"comment": "Tweak is out of range" | ||
}, | ||
{ | ||
"key_indices": [6], | ||
"tweak_indices": [1], | ||
"is_xonly": [false], | ||
"error": { | ||
"type": "value", | ||
"message": "The result of tweaking cannot be infinity." | ||
}, | ||
"comment": "Intermediate tweaking result is point at infinity" | ||
} | ||
] | ||
} |
18 changes: 18 additions & 0 deletions
18
tests/src/commonTest/resources/musig2/key_sort_vectors.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
{ | ||
"pubkeys": [ | ||
"02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8", | ||
"02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", | ||
"03DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", | ||
"023590A94E768F8E1815C2F24B4D80A8E3149316C3518CE7B7AD338368D038CA66", | ||
"02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EFF", | ||
"02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8" | ||
], | ||
"sorted_pubkeys": [ | ||
"023590A94E768F8E1815C2F24B4D80A8E3149316C3518CE7B7AD338368D038CA66", | ||
"02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8", | ||
"02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8", | ||
"02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EFF", | ||
"02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", | ||
"03DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659" | ||
] | ||
} |
51 changes: 51 additions & 0 deletions
51
tests/src/commonTest/resources/musig2/nonce_agg_vectors.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
{ | ||
"pnonces": [ | ||
"020151C80F435648DF67A22B749CD798CE54E0321D034B92B709B567D60A42E66603BA47FBC1834437B3212E89A84D8425E7BF12E0245D98262268EBDCB385D50641", | ||
"03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A60248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B833", | ||
"020151C80F435648DF67A22B749CD798CE54E0321D034B92B709B567D60A42E6660279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", | ||
"03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A60379BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", | ||
"04FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A60248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B833", | ||
"03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A60248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B831", | ||
"03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A602FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30" | ||
], | ||
"valid_test_cases": [ | ||
{ | ||
"pnonce_indices": [0, 1], | ||
"expected": "035FE1873B4F2967F52FEA4A06AD5A8ECCBE9D0FD73068012C894E2E87CCB5804B024725377345BDE0E9C33AF3C43C0A29A9249F2F2956FA8CFEB55C8573D0262DC8" | ||
}, | ||
{ | ||
"pnonce_indices": [2, 3], | ||
"expected": "035FE1873B4F2967F52FEA4A06AD5A8ECCBE9D0FD73068012C894E2E87CCB5804B000000000000000000000000000000000000000000000000000000000000000000", | ||
"comment": "Sum of second points encoded in the nonces is point at infinity which is serialized as 33 zero bytes" | ||
} | ||
], | ||
"error_test_cases": [ | ||
{ | ||
"pnonce_indices": [0, 4], | ||
"error": { | ||
"type": "invalid_contribution", | ||
"signer": 1, | ||
"contrib": "pubnonce" | ||
}, | ||
"comment": "Public nonce from signer 1 is invalid due wrong tag, 0x04, in the first half" | ||
}, | ||
{ | ||
"pnonce_indices": [5, 1], | ||
"error": { | ||
"type": "invalid_contribution", | ||
"signer": 0, | ||
"contrib": "pubnonce" | ||
}, | ||
"comment": "Public nonce from signer 0 is invalid because the second half does not correspond to an X coordinate" | ||
}, | ||
{ | ||
"pnonce_indices": [6, 1], | ||
"error": { | ||
"type": "invalid_contribution", | ||
"signer": 0, | ||
"contrib": "pubnonce" | ||
}, | ||
"comment": "Public nonce from signer 0 is invalid because second half exceeds field size" | ||
} | ||
] | ||
} |
44 changes: 44 additions & 0 deletions
44
tests/src/commonTest/resources/musig2/nonce_gen_vectors.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
{ | ||
"test_cases": [ | ||
{ | ||
"rand_": "0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F", | ||
"sk": "0202020202020202020202020202020202020202020202020202020202020202", | ||
"pk": "024D4B6CD1361032CA9BD2AEB9D900AA4D45D9EAD80AC9423374C451A7254D0766", | ||
"aggpk": "0707070707070707070707070707070707070707070707070707070707070707", | ||
"msg": "0101010101010101010101010101010101010101010101010101010101010101", | ||
"extra_in": "0808080808080808080808080808080808080808080808080808080808080808", | ||
"expected_secnonce": "B114E502BEAA4E301DD08A50264172C84E41650E6CB726B410C0694D59EFFB6495B5CAF28D045B973D63E3C99A44B807BDE375FD6CB39E46DC4A511708D0E9D2024D4B6CD1361032CA9BD2AEB9D900AA4D45D9EAD80AC9423374C451A7254D0766", | ||
"expected_pubnonce": "02F7BE7089E8376EB355272368766B17E88E7DB72047D05E56AA881EA52B3B35DF02C29C8046FDD0DED4C7E55869137200FBDBFE2EB654267B6D7013602CAED3115A" | ||
}, | ||
{ | ||
"rand_": "0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F", | ||
"sk": "0202020202020202020202020202020202020202020202020202020202020202", | ||
"pk": "024D4B6CD1361032CA9BD2AEB9D900AA4D45D9EAD80AC9423374C451A7254D0766", | ||
"aggpk": "0707070707070707070707070707070707070707070707070707070707070707", | ||
"msg": "", | ||
"extra_in": "0808080808080808080808080808080808080808080808080808080808080808", | ||
"expected_secnonce": "E862B068500320088138468D47E0E6F147E01B6024244AE45EAC40ACE5929B9F0789E051170B9E705D0B9EB49049A323BBBBB206D8E05C19F46C6228742AA7A9024D4B6CD1361032CA9BD2AEB9D900AA4D45D9EAD80AC9423374C451A7254D0766", | ||
"expected_pubnonce": "023034FA5E2679F01EE66E12225882A7A48CC66719B1B9D3B6C4DBD743EFEDA2C503F3FD6F01EB3A8E9CB315D73F1F3D287CAFBB44AB321153C6287F407600205109" | ||
}, | ||
{ | ||
"rand_": "0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F", | ||
"sk": "0202020202020202020202020202020202020202020202020202020202020202", | ||
"pk": "024D4B6CD1361032CA9BD2AEB9D900AA4D45D9EAD80AC9423374C451A7254D0766", | ||
"aggpk": "0707070707070707070707070707070707070707070707070707070707070707", | ||
"msg": "2626262626262626262626262626262626262626262626262626262626262626262626262626", | ||
"extra_in": "0808080808080808080808080808080808080808080808080808080808080808", | ||
"expected_secnonce": "3221975ACBDEA6820EABF02A02B7F27D3A8EF68EE42787B88CBEFD9AA06AF3632EE85B1A61D8EF31126D4663A00DD96E9D1D4959E72D70FE5EBB6E7696EBA66F024D4B6CD1361032CA9BD2AEB9D900AA4D45D9EAD80AC9423374C451A7254D0766", | ||
"expected_pubnonce": "02E5BBC21C69270F59BD634FCBFA281BE9D76601295345112C58954625BF23793A021307511C79F95D38ACACFF1B4DA98228B77E65AA216AD075E9673286EFB4EAF3" | ||
}, | ||
{ | ||
"rand_": "0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F", | ||
"sk": null, | ||
"pk": "02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", | ||
"aggpk": null, | ||
"msg": null, | ||
"extra_in": null, | ||
"expected_secnonce": "89BDD787D0284E5E4D5FC572E49E316BAB7E21E3B1830DE37DFE80156FA41A6D0B17AE8D024C53679699A6FD7944D9C4A366B514BAF43088E0708B1023DD289702F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", | ||
"expected_pubnonce": "02C96E7CB1E8AA5DAC64D872947914198F607D90ECDE5200DE52978AD5DED63C000299EC5117C2D29EDEE8A2092587C3909BE694D5CFF0667D6C02EA4059F7CD9786" | ||
} | ||
] | ||
} |
Oops, something went wrong.