← 返回首页
Support signing and verifying messages signed with a segwit address. by sanderkruger · Pull Request #874 · Bit-Wasp/bitcoin-php · GitHub
Skip to content

Navigation Menu

Toggle navigation
Sign in
Appearance settings
Search or jump to...

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Resetting focus

Support signing and verifying messages signed with a segwit address.#874

Open
sanderkruger wants to merge 2 commits into
Bit-Wasp:masterfrom
sanderkruger:segwit_sign_message
Open

Support signing and verifying messages signed with a segwit address.#874
sanderkruger wants to merge 2 commits into
Bit-Wasp:masterfrom
sanderkruger:segwit_sign_message

Conversation

Copy link
Copy Markdown

No description provided.

afk11 commented Apr 8, 2021

Copy link
Copy Markdown
Member

Hi, thanks for the PR! I haven't been keeping up with cutting edge side of things, but I wasn't 100% sure there was a way to sign a message with a segwit address? Is there a BIP for this?

[1] https://bitcoin-development.narkive.com/EpLpjyeL/sign-verify-message-against-segwit-p2sh-and-bech32-addresses
[2] https://github.com/bitcoin/bips/blob/master/bip-0322.mediawiki#Legacy

* @return bool
*/
public function verify(SignedMessage $signedMessage, PayToPubKeyHashAddress $address, NetworkInterface $network = null): bool
public function verify(SignedMessage $signedMessage, Address $address, NetworkInterface $network = null): bool

afk11 Apr 8, 2021
edited
Loading

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality Hide comment

To my knowledge P2SH, V1 segwit addresses, V0 segwit script-hash addresses shouldn't be accepted, so this would need a check that the address type is P2PKH or P2WPKH (V0 segwit && hash->getSize() == 20)

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality Hide comment

To be honest, I'm a bit new to this. I just noticed that the test wallet I use (Embit Wallet) allows signing of segwit addresses (P2WPKH with a tb1 prefix), tried my changes to this project and saw that it worked. Apparently, both use the same signature algorithm.
I'll look into the verification.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality Hide comment

I looked into this a bit further. If I figured it out correctly, BIP322 says that messages can only be signed with bech32 segwit addresses of v0 (besides legacy P2PKH). To check this in the verify method, I'm going to verify that the address is either a PayToPubKeyHashAddress object, or, if it is a SegwitAddress, that the witness program version equals 0.
Wrapped segwit addresses are represented as ScriptHashAddress, so they will fall out too.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality Hide comment

I tried to create a test case for a v1+ address, but it looks like the AddressCreator doesn't handle bech32m, at least no v1 address I could find on-line is recognized. So for now, the MessageSigner will only sign P2PKH or Segwit v0.

This file contains hidden or 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

Footer

© 2026 GitHub, Inc.