mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-05-28 13:02:38 +02:00
Merge bitcoin/bitcoin#25019: parse external signer master fp as bytes in ExternalSigner::SignTransaction
2a22f034ca
parsing external signer master fingerprint string as bytes instead of caring for lower/upper case in ExternalSigner::SignTransaction (avirgovi) Pull request description: Some external signers scripts may provide master fingerprint in uppercase format. In that case core will fail with `Signer fingerprint 00000000 does not match any of the inputs` as it only works with lowercase format. Even if the fingerprints match, yet one is lowercase the other uppercase. ExternalSigner::SignTransaction is the only place where it is needed IMO, as changing it in other places may break the communication with the external signer (i.e. enumerating with lowercase may not find the device). ACKs for top commit: achow101: ACK2a22f034ca
theStack: Code-review ACK2a22f034ca
Sjors: utACK2a22f034ca
Tree-SHA512: f3d84b83fb0b5e06c405eaf9bf20a2fa864bf4172fd4de113b80b9b9a525a76f2f8cf63031b480358b3a7666023a2aef131fb89ff50448c66df3ed541da10f99
This commit is contained in:
commit
91a42d63ef
@ -74,11 +74,12 @@ bool ExternalSigner::SignTransaction(PartiallySignedTransaction& psbtx, std::str
|
||||
// Serialize the PSBT
|
||||
CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
|
||||
ssTx << psbtx;
|
||||
|
||||
// parse ExternalSigner master fingerprint
|
||||
std::vector<unsigned char> parsed_m_fingerprint = ParseHex(m_fingerprint);
|
||||
// Check if signer fingerprint matches any input master key fingerprint
|
||||
auto matches_signer_fingerprint = [&](const PSBTInput& input) {
|
||||
for (const auto& entry : input.hd_keypaths) {
|
||||
if (m_fingerprint == strprintf("%08x", ReadBE32(entry.second.fingerprint))) return true;
|
||||
if (parsed_m_fingerprint == MakeUCharSpan(entry.second.fingerprint)) return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user