Fixes #34273.
Miniscript duplicate-key checking in descriptor.cpp compares parsed key
expressions while checking descriptor sanity.
For musig() expressions with hardened BIP32 participant derivation, resolving
the aggregate pubkey requires private key material. The old comparison path
derived pubkeys with an empty FlatSigningProvider, so GetPubKey() could
return nullopt. Two distinct musig() expressions could then compare equal
and be rejected as contains duplicate public keys.
Use the parsed signing data for the comparison so hardened participant derivation succeeds and duplicate checking continues to compare resolved pubkeys.
Add a regression test for the reported hardened musig() case, and keep
coverage for true duplicate musig() expressions.
Tested:
build-tsan/bin/test_bitcoin --run_test=descriptor_tests --catch_system_errors=no