Feature/bip322 integration - #179

Merged
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration
Apr 24, 2026
Merged

Feature/bip322 integration#179
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration

Conversation

@aagbotemi

@aagbotemiaagbotemi commented Apr 26, 2025

Copy link
Copy Markdown
Contributor

Description

This PR added BIP322 feature into BDK CLI.
It also has a usage file for testing purposes

Notes to the reviewers

Changelog notice

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added docs for the new feature
  • I've updated CHANGELOG.md

@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as ready for review April 26, 2025 19:42
@notmandatorynotmandatory added the enhancement New feature or request label Apr 28, 2025
@notmandatory

notmandatory commented Apr 28, 2025

Copy link
Copy Markdown
Member

I'd rather not have a separate key file for this feature and try to protect it with a password and all that. This bdk-cli tool is primarily meant as a manual testing tool and example of how to use the bdk_wallet APIs so providing the public or private key descriptor via command line or environment var should also work for this signing feature.

More importantly the use of bip322 as I understand it is to be able to sign a message using what ever bitcoin descriptor script your bitcoin wallet has. If you have a private key descriptor you should be able to sign the invalid input message transaction, and if not you should still be able to create a PSBT that your hardware signers can sign. Does that make sense? Also have you seen the bdk-reserves crate? it does something similar.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I'd rather not have a separate key file for this feature and try to protect it with a password and all that.

Still actively working on this. Will push updates once I'm done (likely within this week).

@notmandatorynotmandatory moved this to In Progress in BDK-CLIMay 28, 2025
@tvpeter

Copy link
Copy Markdown
Collaborator

Hi @aagbotemi, can you rebase and fix the CI failures?

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This PR is similar to the reserves feature that was taken out in the v1.0 update.
@aagbotemi, please consider changing bip322 feature flag to reserves.

Also, after rebasing, check whether there is need to update the workflows. I would prefer the workflows to go in a separate PR if necessary.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

@aagbotemi, please consider changing bip322 feature flag to reserves.

Alright @tvpeter, will do that.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

Yes, I'm revamping the crate to use descriptor instead of private key, but I will continue the PR with the reserves crate.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thanks for the review and suggestion to rename the bip322 feature to reserves@tvpeter. I’m blocked on integrating bdk-reserves into this PR due to a version mismatch: bdk-cli uses bdk_wallet 2.0.0, but bdk-reserves uses another bdk_wallet version as the ProofOfReserves trait in bdk-reserves is implemented for it.

A PR (bitcoindevkit/bdk-reserves#39) updates bdk-reserves to support bdk_wallet 1.2.0. Once merged, we can bump bdk-reserves to use bdk_wallet 2.0.0.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 2 times, most recently from 7b94ecc to 007f71bCompareJanuary 20, 2026 13:51
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

The update is a follow-up to the BIP322 refactor that migrated signing from raw keys to descriptor-based

@coveralls

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 21173945658

Details

  • 0 of 40(0.0%) changed or added relevant lines in 3 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-0.2%) to 10.549%

Changes Missing CoverageCovered LinesChanged/Added Lines%
src/error.rs030.0%
src/utils.rs0110.0%
src/handlers.rs0260.0%
TotalsCoverage Status
Change from base Build 21153868360:-0.2%
Covered Lines:269
Relevant Lines:2550

💛 - Coveralls

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thank you for working on this @aagbotemi

I have left some comments.

Comment threadsrc/commands.rs Outdated
Comment threadsrc/commands.rs Outdated
Comment threadsrc/handlers.rs Outdated
Comment threadsrc/error.rs Outdated
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thank you for working on this @aagbotemi
I have left some comments.

Thank you for the review. I'll attend to the comments shortly.

@tvpetertvpeter moved this from In Progress to Ready to Review in BDK-CLIFeb 26, 2026
@tvpetertvpeter added this to the CLI 3.0.0 milestone Feb 26, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 3 times, most recently from c7a7e19 to d85feecCompareMarch 10, 2026 17:46
@codecov

codecovBot commented Mar 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 38 lines in your changes missing coverage. Please review.
✅ Project coverage is 10.96%. Comparing base (07fd32f) to head (7c33b33).
⚠️ Report is 7 commits behind head on master.

Files with missing linesPatch %Lines
src/handlers.rs0.00%27 Missing ⚠️
src/utils.rs0.00%11 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #179 +/- ##
==========================================
- Coverage 11.13% 10.96% -0.17% 
==========================================
Files 8 8 Lines 2488 2526 +38 ==========================================
Hits 277 277 - Misses 2211 2249 +38 
FlagCoverage Δ
rust10.96% <0.00%> (-0.17%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment threadsrc/commands.rs Outdated

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hi @aagbotemi ,

So I was testing the feature, and some tests failed. In the attached screenshot, I generated an address from a wallet, signed a message, and verified the message. I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Image

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from d85feec to 0a713a1CompareMarch 11, 2026 13:50
@notmandatory

notmandatory commented Mar 11, 2026

Copy link
Copy Markdown
Member

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

@tvpetertvpeter removed this from the CLI 3.0.0 milestone Mar 11, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 0a713a1 to 5184d45CompareMarch 11, 2026 15:43
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Thanks for pointing this out. I’ve fixed the verification logic so that verification now correctly fails when the message is tampered with.

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

Thanks for the heads-up! Just checked the ColdCard firmware announcement, it's awesome to see the BIP-322 support.

@aagbotemi
aagbotemi requested a review from tvpeterMarch 11, 2026 16:40
@tvpeter

Copy link
Copy Markdown
Collaborator

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

No, it is the wallet I used during testing that I named reserve.

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

tACK 5184d45

Weldone @aagbotemi

This is a great feature, and thanks for working on it.

Image

@tvpetertvpeter modified the milestone: CLI 3.0.0Mar 17, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 5184d45 to 9826c76CompareMarch 18, 2026 14:24
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

UPDATE: Removed signature_type from verify_message() to make the verification API more ergonomic. The signature format is now auto-detected from the signature bytes. Callers no longer need to know which format produced a signature to verify it, and a verifier should only need the signature, message, and address. SignatureFormat is still used for signing.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 9826c76 to 3aaf73cCompareApril 17, 2026 13:29
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 3aaf73c to e03f123CompareApril 17, 2026 13:36

@notmandatorynotmandatory left a comment

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.

ACK 7c33b33

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

Thank you. I'll add example code and doc to the book-of-bdk.

@tvpeter
tvpeter merged commit f80d92a into bitcoindevkit:masterApr 24, 2026
7 of 9 checks passed
@github-project-automationgithub-project-automationBot moved this from Ready to Review to Done in BDK-CLIApr 24, 2026
@tvpetertvpeter added this to the CLI 4.0.0 milestone Jul 23, 2026
@tvpetertvpeter mentioned this pull request Jul 23, 2026
14 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@aagbotemi@notmandatory@tvpeter@coveralls
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Feature/bip322 integration - #179

Merged
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration
Apr 24, 2026
Merged

Feature/bip322 integration#179
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration

Conversation

@aagbotemi

@aagbotemiaagbotemi commented Apr 26, 2025

Copy link
Copy Markdown
Contributor

Description

This PR added BIP322 feature into BDK CLI.
It also has a usage file for testing purposes

Notes to the reviewers

Changelog notice

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added docs for the new feature
  • I've updated CHANGELOG.md

@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as ready for review April 26, 2025 19:42
@notmandatorynotmandatory added the enhancement New feature or request label Apr 28, 2025
@notmandatory

notmandatory commented Apr 28, 2025

Copy link
Copy Markdown
Member

I'd rather not have a separate key file for this feature and try to protect it with a password and all that. This bdk-cli tool is primarily meant as a manual testing tool and example of how to use the bdk_wallet APIs so providing the public or private key descriptor via command line or environment var should also work for this signing feature.

More importantly the use of bip322 as I understand it is to be able to sign a message using what ever bitcoin descriptor script your bitcoin wallet has. If you have a private key descriptor you should be able to sign the invalid input message transaction, and if not you should still be able to create a PSBT that your hardware signers can sign. Does that make sense? Also have you seen the bdk-reserves crate? it does something similar.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I'd rather not have a separate key file for this feature and try to protect it with a password and all that.

Still actively working on this. Will push updates once I'm done (likely within this week).

@notmandatorynotmandatory moved this to In Progress in BDK-CLIMay 28, 2025
@tvpeter

Copy link
Copy Markdown
Collaborator

Hi @aagbotemi, can you rebase and fix the CI failures?

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This PR is similar to the reserves feature that was taken out in the v1.0 update.
@aagbotemi, please consider changing bip322 feature flag to reserves.

Also, after rebasing, check whether there is need to update the workflows. I would prefer the workflows to go in a separate PR if necessary.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

@aagbotemi, please consider changing bip322 feature flag to reserves.

Alright @tvpeter, will do that.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

Yes, I'm revamping the crate to use descriptor instead of private key, but I will continue the PR with the reserves crate.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thanks for the review and suggestion to rename the bip322 feature to reserves@tvpeter. I’m blocked on integrating bdk-reserves into this PR due to a version mismatch: bdk-cli uses bdk_wallet 2.0.0, but bdk-reserves uses another bdk_wallet version as the ProofOfReserves trait in bdk-reserves is implemented for it.

A PR (bitcoindevkit/bdk-reserves#39) updates bdk-reserves to support bdk_wallet 1.2.0. Once merged, we can bump bdk-reserves to use bdk_wallet 2.0.0.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 2 times, most recently from 7b94ecc to 007f71bCompareJanuary 20, 2026 13:51
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

The update is a follow-up to the BIP322 refactor that migrated signing from raw keys to descriptor-based

@coveralls

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 21173945658

Details

  • 0 of 40(0.0%) changed or added relevant lines in 3 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-0.2%) to 10.549%

Changes Missing CoverageCovered LinesChanged/Added Lines%
src/error.rs030.0%
src/utils.rs0110.0%
src/handlers.rs0260.0%
TotalsCoverage Status
Change from base Build 21153868360:-0.2%
Covered Lines:269
Relevant Lines:2550

💛 - Coveralls

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thank you for working on this @aagbotemi

I have left some comments.

Comment threadsrc/commands.rs Outdated
Comment threadsrc/commands.rs Outdated
Comment threadsrc/handlers.rs Outdated
Comment threadsrc/error.rs Outdated
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thank you for working on this @aagbotemi
I have left some comments.

Thank you for the review. I'll attend to the comments shortly.

@tvpetertvpeter moved this from In Progress to Ready to Review in BDK-CLIFeb 26, 2026
@tvpetertvpeter added this to the CLI 3.0.0 milestone Feb 26, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 3 times, most recently from c7a7e19 to d85feecCompareMarch 10, 2026 17:46
@codecov

codecovBot commented Mar 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 38 lines in your changes missing coverage. Please review.
✅ Project coverage is 10.96%. Comparing base (07fd32f) to head (7c33b33).
⚠️ Report is 7 commits behind head on master.

Files with missing linesPatch %Lines
src/handlers.rs0.00%27 Missing ⚠️
src/utils.rs0.00%11 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #179 +/- ##
==========================================
- Coverage 11.13% 10.96% -0.17% 
==========================================
Files 8 8 Lines 2488 2526 +38 ==========================================
Hits 277 277 - Misses 2211 2249 +38 
FlagCoverage Δ
rust10.96% <0.00%> (-0.17%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment threadsrc/commands.rs Outdated

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hi @aagbotemi ,

So I was testing the feature, and some tests failed. In the attached screenshot, I generated an address from a wallet, signed a message, and verified the message. I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Image

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from d85feec to 0a713a1CompareMarch 11, 2026 13:50
@notmandatory

notmandatory commented Mar 11, 2026

Copy link
Copy Markdown
Member

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

@tvpetertvpeter removed this from the CLI 3.0.0 milestone Mar 11, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 0a713a1 to 5184d45CompareMarch 11, 2026 15:43
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Thanks for pointing this out. I’ve fixed the verification logic so that verification now correctly fails when the message is tampered with.

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

Thanks for the heads-up! Just checked the ColdCard firmware announcement, it's awesome to see the BIP-322 support.

@aagbotemi
aagbotemi requested a review from tvpeterMarch 11, 2026 16:40
@tvpeter

Copy link
Copy Markdown
Collaborator

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

No, it is the wallet I used during testing that I named reserve.

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

tACK 5184d45

Weldone @aagbotemi

This is a great feature, and thanks for working on it.

Image

@tvpetertvpeter modified the milestone: CLI 3.0.0Mar 17, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 5184d45 to 9826c76CompareMarch 18, 2026 14:24
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

UPDATE: Removed signature_type from verify_message() to make the verification API more ergonomic. The signature format is now auto-detected from the signature bytes. Callers no longer need to know which format produced a signature to verify it, and a verifier should only need the signature, message, and address. SignatureFormat is still used for signing.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 9826c76 to 3aaf73cCompareApril 17, 2026 13:29
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 3aaf73c to e03f123CompareApril 17, 2026 13:36

@notmandatorynotmandatory left a comment

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.

ACK 7c33b33

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

Thank you. I'll add example code and doc to the book-of-bdk.

@tvpeter
tvpeter merged commit f80d92a into bitcoindevkit:masterApr 24, 2026
7 of 9 checks passed
@github-project-automationgithub-project-automationBot moved this from Ready to Review to Done in BDK-CLIApr 24, 2026
@tvpetertvpeter added this to the CLI 4.0.0 milestone Jul 23, 2026
@tvpetertvpeter mentioned this pull request Jul 23, 2026
14 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@aagbotemi@notmandatory@tvpeter@coveralls
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Feature/bip322 integration - #179

Merged
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration
Apr 24, 2026
Merged

Feature/bip322 integration#179
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration

Conversation

@aagbotemi

@aagbotemiaagbotemi commented Apr 26, 2025

Copy link
Copy Markdown
Contributor

Description

This PR added BIP322 feature into BDK CLI.
It also has a usage file for testing purposes

Notes to the reviewers

Changelog notice

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added docs for the new feature
  • I've updated CHANGELOG.md

@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as ready for review April 26, 2025 19:42
@notmandatorynotmandatory added the enhancement New feature or request label Apr 28, 2025
@notmandatory

notmandatory commented Apr 28, 2025

Copy link
Copy Markdown
Member

I'd rather not have a separate key file for this feature and try to protect it with a password and all that. This bdk-cli tool is primarily meant as a manual testing tool and example of how to use the bdk_wallet APIs so providing the public or private key descriptor via command line or environment var should also work for this signing feature.

More importantly the use of bip322 as I understand it is to be able to sign a message using what ever bitcoin descriptor script your bitcoin wallet has. If you have a private key descriptor you should be able to sign the invalid input message transaction, and if not you should still be able to create a PSBT that your hardware signers can sign. Does that make sense? Also have you seen the bdk-reserves crate? it does something similar.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I'd rather not have a separate key file for this feature and try to protect it with a password and all that.

Still actively working on this. Will push updates once I'm done (likely within this week).

@notmandatorynotmandatory moved this to In Progress in BDK-CLIMay 28, 2025
@tvpeter

Copy link
Copy Markdown
Collaborator

Hi @aagbotemi, can you rebase and fix the CI failures?

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This PR is similar to the reserves feature that was taken out in the v1.0 update.
@aagbotemi, please consider changing bip322 feature flag to reserves.

Also, after rebasing, check whether there is need to update the workflows. I would prefer the workflows to go in a separate PR if necessary.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

@aagbotemi, please consider changing bip322 feature flag to reserves.

Alright @tvpeter, will do that.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

Yes, I'm revamping the crate to use descriptor instead of private key, but I will continue the PR with the reserves crate.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thanks for the review and suggestion to rename the bip322 feature to reserves@tvpeter. I’m blocked on integrating bdk-reserves into this PR due to a version mismatch: bdk-cli uses bdk_wallet 2.0.0, but bdk-reserves uses another bdk_wallet version as the ProofOfReserves trait in bdk-reserves is implemented for it.

A PR (bitcoindevkit/bdk-reserves#39) updates bdk-reserves to support bdk_wallet 1.2.0. Once merged, we can bump bdk-reserves to use bdk_wallet 2.0.0.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 2 times, most recently from 7b94ecc to 007f71bCompareJanuary 20, 2026 13:51
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

The update is a follow-up to the BIP322 refactor that migrated signing from raw keys to descriptor-based

@coveralls

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 21173945658

Details

  • 0 of 40(0.0%) changed or added relevant lines in 3 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-0.2%) to 10.549%

Changes Missing CoverageCovered LinesChanged/Added Lines%
src/error.rs030.0%
src/utils.rs0110.0%
src/handlers.rs0260.0%
TotalsCoverage Status
Change from base Build 21153868360:-0.2%
Covered Lines:269
Relevant Lines:2550

💛 - Coveralls

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thank you for working on this @aagbotemi

I have left some comments.

Comment threadsrc/commands.rs Outdated
Comment threadsrc/commands.rs Outdated
Comment threadsrc/handlers.rs Outdated
Comment threadsrc/error.rs Outdated
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thank you for working on this @aagbotemi
I have left some comments.

Thank you for the review. I'll attend to the comments shortly.

@tvpetertvpeter moved this from In Progress to Ready to Review in BDK-CLIFeb 26, 2026
@tvpetertvpeter added this to the CLI 3.0.0 milestone Feb 26, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 3 times, most recently from c7a7e19 to d85feecCompareMarch 10, 2026 17:46
@codecov

codecovBot commented Mar 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 38 lines in your changes missing coverage. Please review.
✅ Project coverage is 10.96%. Comparing base (07fd32f) to head (7c33b33).
⚠️ Report is 7 commits behind head on master.

Files with missing linesPatch %Lines
src/handlers.rs0.00%27 Missing ⚠️
src/utils.rs0.00%11 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #179 +/- ##
==========================================
- Coverage 11.13% 10.96% -0.17% 
==========================================
Files 8 8 Lines 2488 2526 +38 ==========================================
Hits 277 277 - Misses 2211 2249 +38 
FlagCoverage Δ
rust10.96% <0.00%> (-0.17%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment threadsrc/commands.rs Outdated

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hi @aagbotemi ,

So I was testing the feature, and some tests failed. In the attached screenshot, I generated an address from a wallet, signed a message, and verified the message. I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Image

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from d85feec to 0a713a1CompareMarch 11, 2026 13:50
@notmandatory

notmandatory commented Mar 11, 2026

Copy link
Copy Markdown
Member

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

@tvpetertvpeter removed this from the CLI 3.0.0 milestone Mar 11, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 0a713a1 to 5184d45CompareMarch 11, 2026 15:43
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Thanks for pointing this out. I’ve fixed the verification logic so that verification now correctly fails when the message is tampered with.

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

Thanks for the heads-up! Just checked the ColdCard firmware announcement, it's awesome to see the BIP-322 support.

@aagbotemi
aagbotemi requested a review from tvpeterMarch 11, 2026 16:40
@tvpeter

Copy link
Copy Markdown
Collaborator

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

No, it is the wallet I used during testing that I named reserve.

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

tACK 5184d45

Weldone @aagbotemi

This is a great feature, and thanks for working on it.

Image

@tvpetertvpeter modified the milestone: CLI 3.0.0Mar 17, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 5184d45 to 9826c76CompareMarch 18, 2026 14:24
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

UPDATE: Removed signature_type from verify_message() to make the verification API more ergonomic. The signature format is now auto-detected from the signature bytes. Callers no longer need to know which format produced a signature to verify it, and a verifier should only need the signature, message, and address. SignatureFormat is still used for signing.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 9826c76 to 3aaf73cCompareApril 17, 2026 13:29
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 3aaf73c to e03f123CompareApril 17, 2026 13:36

@notmandatorynotmandatory left a comment

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.

ACK 7c33b33

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

Thank you. I'll add example code and doc to the book-of-bdk.

@tvpeter
tvpeter merged commit f80d92a into bitcoindevkit:masterApr 24, 2026
7 of 9 checks passed
@github-project-automationgithub-project-automationBot moved this from Ready to Review to Done in BDK-CLIApr 24, 2026
@tvpetertvpeter added this to the CLI 4.0.0 milestone Jul 23, 2026
@tvpetertvpeter mentioned this pull request Jul 23, 2026
14 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@aagbotemi@notmandatory@tvpeter@coveralls
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Feature/bip322 integration - #179

Merged
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration
Apr 24, 2026
Merged

Feature/bip322 integration#179
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration

Conversation

@aagbotemi

@aagbotemiaagbotemi commented Apr 26, 2025

Copy link
Copy Markdown
Contributor

Description

This PR added BIP322 feature into BDK CLI.
It also has a usage file for testing purposes

Notes to the reviewers

Changelog notice

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added docs for the new feature
  • I've updated CHANGELOG.md

@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as ready for review April 26, 2025 19:42
@notmandatorynotmandatory added the enhancement New feature or request label Apr 28, 2025
@notmandatory

notmandatory commented Apr 28, 2025

Copy link
Copy Markdown
Member

I'd rather not have a separate key file for this feature and try to protect it with a password and all that. This bdk-cli tool is primarily meant as a manual testing tool and example of how to use the bdk_wallet APIs so providing the public or private key descriptor via command line or environment var should also work for this signing feature.

More importantly the use of bip322 as I understand it is to be able to sign a message using what ever bitcoin descriptor script your bitcoin wallet has. If you have a private key descriptor you should be able to sign the invalid input message transaction, and if not you should still be able to create a PSBT that your hardware signers can sign. Does that make sense? Also have you seen the bdk-reserves crate? it does something similar.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I'd rather not have a separate key file for this feature and try to protect it with a password and all that.

Still actively working on this. Will push updates once I'm done (likely within this week).

@notmandatorynotmandatory moved this to In Progress in BDK-CLIMay 28, 2025
@tvpeter

Copy link
Copy Markdown
Collaborator

Hi @aagbotemi, can you rebase and fix the CI failures?

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This PR is similar to the reserves feature that was taken out in the v1.0 update.
@aagbotemi, please consider changing bip322 feature flag to reserves.

Also, after rebasing, check whether there is need to update the workflows. I would prefer the workflows to go in a separate PR if necessary.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

@aagbotemi, please consider changing bip322 feature flag to reserves.

Alright @tvpeter, will do that.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

Yes, I'm revamping the crate to use descriptor instead of private key, but I will continue the PR with the reserves crate.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thanks for the review and suggestion to rename the bip322 feature to reserves@tvpeter. I’m blocked on integrating bdk-reserves into this PR due to a version mismatch: bdk-cli uses bdk_wallet 2.0.0, but bdk-reserves uses another bdk_wallet version as the ProofOfReserves trait in bdk-reserves is implemented for it.

A PR (bitcoindevkit/bdk-reserves#39) updates bdk-reserves to support bdk_wallet 1.2.0. Once merged, we can bump bdk-reserves to use bdk_wallet 2.0.0.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 2 times, most recently from 7b94ecc to 007f71bCompareJanuary 20, 2026 13:51
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

The update is a follow-up to the BIP322 refactor that migrated signing from raw keys to descriptor-based

@coveralls

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 21173945658

Details

  • 0 of 40(0.0%) changed or added relevant lines in 3 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-0.2%) to 10.549%

Changes Missing CoverageCovered LinesChanged/Added Lines%
src/error.rs030.0%
src/utils.rs0110.0%
src/handlers.rs0260.0%
TotalsCoverage Status
Change from base Build 21153868360:-0.2%
Covered Lines:269
Relevant Lines:2550

💛 - Coveralls

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thank you for working on this @aagbotemi

I have left some comments.

Comment threadsrc/commands.rs Outdated
Comment threadsrc/commands.rs Outdated
Comment threadsrc/handlers.rs Outdated
Comment threadsrc/error.rs Outdated
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thank you for working on this @aagbotemi
I have left some comments.

Thank you for the review. I'll attend to the comments shortly.

@tvpetertvpeter moved this from In Progress to Ready to Review in BDK-CLIFeb 26, 2026
@tvpetertvpeter added this to the CLI 3.0.0 milestone Feb 26, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 3 times, most recently from c7a7e19 to d85feecCompareMarch 10, 2026 17:46
@codecov

codecovBot commented Mar 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 38 lines in your changes missing coverage. Please review.
✅ Project coverage is 10.96%. Comparing base (07fd32f) to head (7c33b33).
⚠️ Report is 7 commits behind head on master.

Files with missing linesPatch %Lines
src/handlers.rs0.00%27 Missing ⚠️
src/utils.rs0.00%11 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #179 +/- ##
==========================================
- Coverage 11.13% 10.96% -0.17% 
==========================================
Files 8 8 Lines 2488 2526 +38 ==========================================
Hits 277 277 - Misses 2211 2249 +38 
FlagCoverage Δ
rust10.96% <0.00%> (-0.17%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment threadsrc/commands.rs Outdated

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hi @aagbotemi ,

So I was testing the feature, and some tests failed. In the attached screenshot, I generated an address from a wallet, signed a message, and verified the message. I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Image

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from d85feec to 0a713a1CompareMarch 11, 2026 13:50
@notmandatory

notmandatory commented Mar 11, 2026

Copy link
Copy Markdown
Member

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

@tvpetertvpeter removed this from the CLI 3.0.0 milestone Mar 11, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 0a713a1 to 5184d45CompareMarch 11, 2026 15:43
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Thanks for pointing this out. I’ve fixed the verification logic so that verification now correctly fails when the message is tampered with.

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

Thanks for the heads-up! Just checked the ColdCard firmware announcement, it's awesome to see the BIP-322 support.

@aagbotemi
aagbotemi requested a review from tvpeterMarch 11, 2026 16:40
@tvpeter

Copy link
Copy Markdown
Collaborator

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

No, it is the wallet I used during testing that I named reserve.

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

tACK 5184d45

Weldone @aagbotemi

This is a great feature, and thanks for working on it.

Image

@tvpetertvpeter modified the milestone: CLI 3.0.0Mar 17, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 5184d45 to 9826c76CompareMarch 18, 2026 14:24
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

UPDATE: Removed signature_type from verify_message() to make the verification API more ergonomic. The signature format is now auto-detected from the signature bytes. Callers no longer need to know which format produced a signature to verify it, and a verifier should only need the signature, message, and address. SignatureFormat is still used for signing.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 9826c76 to 3aaf73cCompareApril 17, 2026 13:29
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 3aaf73c to e03f123CompareApril 17, 2026 13:36

@notmandatorynotmandatory left a comment

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.

ACK 7c33b33

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

Thank you. I'll add example code and doc to the book-of-bdk.

@tvpeter
tvpeter merged commit f80d92a into bitcoindevkit:masterApr 24, 2026
7 of 9 checks passed
@github-project-automationgithub-project-automationBot moved this from Ready to Review to Done in BDK-CLIApr 24, 2026
@tvpetertvpeter added this to the CLI 4.0.0 milestone Jul 23, 2026
@tvpetertvpeter mentioned this pull request Jul 23, 2026
14 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@aagbotemi@notmandatory@tvpeter@coveralls
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Feature/bip322 integration - #179

Merged
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration
Apr 24, 2026
Merged

Feature/bip322 integration#179
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration

Conversation

@aagbotemi

@aagbotemiaagbotemi commented Apr 26, 2025

Copy link
Copy Markdown
Contributor

Description

This PR added BIP322 feature into BDK CLI.
It also has a usage file for testing purposes

Notes to the reviewers

Changelog notice

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added docs for the new feature
  • I've updated CHANGELOG.md

@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as ready for review April 26, 2025 19:42
@notmandatorynotmandatory added the enhancement New feature or request label Apr 28, 2025
@notmandatory

notmandatory commented Apr 28, 2025

Copy link
Copy Markdown
Member

I'd rather not have a separate key file for this feature and try to protect it with a password and all that. This bdk-cli tool is primarily meant as a manual testing tool and example of how to use the bdk_wallet APIs so providing the public or private key descriptor via command line or environment var should also work for this signing feature.

More importantly the use of bip322 as I understand it is to be able to sign a message using what ever bitcoin descriptor script your bitcoin wallet has. If you have a private key descriptor you should be able to sign the invalid input message transaction, and if not you should still be able to create a PSBT that your hardware signers can sign. Does that make sense? Also have you seen the bdk-reserves crate? it does something similar.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I'd rather not have a separate key file for this feature and try to protect it with a password and all that.

Still actively working on this. Will push updates once I'm done (likely within this week).

@notmandatorynotmandatory moved this to In Progress in BDK-CLIMay 28, 2025
@tvpeter

Copy link
Copy Markdown
Collaborator

Hi @aagbotemi, can you rebase and fix the CI failures?

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This PR is similar to the reserves feature that was taken out in the v1.0 update.
@aagbotemi, please consider changing bip322 feature flag to reserves.

Also, after rebasing, check whether there is need to update the workflows. I would prefer the workflows to go in a separate PR if necessary.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

@aagbotemi, please consider changing bip322 feature flag to reserves.

Alright @tvpeter, will do that.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

Yes, I'm revamping the crate to use descriptor instead of private key, but I will continue the PR with the reserves crate.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thanks for the review and suggestion to rename the bip322 feature to reserves@tvpeter. I’m blocked on integrating bdk-reserves into this PR due to a version mismatch: bdk-cli uses bdk_wallet 2.0.0, but bdk-reserves uses another bdk_wallet version as the ProofOfReserves trait in bdk-reserves is implemented for it.

A PR (bitcoindevkit/bdk-reserves#39) updates bdk-reserves to support bdk_wallet 1.2.0. Once merged, we can bump bdk-reserves to use bdk_wallet 2.0.0.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 2 times, most recently from 7b94ecc to 007f71bCompareJanuary 20, 2026 13:51
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

The update is a follow-up to the BIP322 refactor that migrated signing from raw keys to descriptor-based

@coveralls

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 21173945658

Details

  • 0 of 40(0.0%) changed or added relevant lines in 3 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-0.2%) to 10.549%

Changes Missing CoverageCovered LinesChanged/Added Lines%
src/error.rs030.0%
src/utils.rs0110.0%
src/handlers.rs0260.0%
TotalsCoverage Status
Change from base Build 21153868360:-0.2%
Covered Lines:269
Relevant Lines:2550

💛 - Coveralls

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thank you for working on this @aagbotemi

I have left some comments.

Comment threadsrc/commands.rs Outdated
Comment threadsrc/commands.rs Outdated
Comment threadsrc/handlers.rs Outdated
Comment threadsrc/error.rs Outdated
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thank you for working on this @aagbotemi
I have left some comments.

Thank you for the review. I'll attend to the comments shortly.

@tvpetertvpeter moved this from In Progress to Ready to Review in BDK-CLIFeb 26, 2026
@tvpetertvpeter added this to the CLI 3.0.0 milestone Feb 26, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 3 times, most recently from c7a7e19 to d85feecCompareMarch 10, 2026 17:46
@codecov

codecovBot commented Mar 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 38 lines in your changes missing coverage. Please review.
✅ Project coverage is 10.96%. Comparing base (07fd32f) to head (7c33b33).
⚠️ Report is 7 commits behind head on master.

Files with missing linesPatch %Lines
src/handlers.rs0.00%27 Missing ⚠️
src/utils.rs0.00%11 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #179 +/- ##
==========================================
- Coverage 11.13% 10.96% -0.17% 
==========================================
Files 8 8 Lines 2488 2526 +38 ==========================================
Hits 277 277 - Misses 2211 2249 +38 
FlagCoverage Δ
rust10.96% <0.00%> (-0.17%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment threadsrc/commands.rs Outdated

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hi @aagbotemi ,

So I was testing the feature, and some tests failed. In the attached screenshot, I generated an address from a wallet, signed a message, and verified the message. I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Image

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from d85feec to 0a713a1CompareMarch 11, 2026 13:50
@notmandatory

notmandatory commented Mar 11, 2026

Copy link
Copy Markdown
Member

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

@tvpetertvpeter removed this from the CLI 3.0.0 milestone Mar 11, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 0a713a1 to 5184d45CompareMarch 11, 2026 15:43
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Thanks for pointing this out. I’ve fixed the verification logic so that verification now correctly fails when the message is tampered with.

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

Thanks for the heads-up! Just checked the ColdCard firmware announcement, it's awesome to see the BIP-322 support.

@aagbotemi
aagbotemi requested a review from tvpeterMarch 11, 2026 16:40
@tvpeter

Copy link
Copy Markdown
Collaborator

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

No, it is the wallet I used during testing that I named reserve.

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

tACK 5184d45

Weldone @aagbotemi

This is a great feature, and thanks for working on it.

Image

@tvpetertvpeter modified the milestone: CLI 3.0.0Mar 17, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 5184d45 to 9826c76CompareMarch 18, 2026 14:24
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

UPDATE: Removed signature_type from verify_message() to make the verification API more ergonomic. The signature format is now auto-detected from the signature bytes. Callers no longer need to know which format produced a signature to verify it, and a verifier should only need the signature, message, and address. SignatureFormat is still used for signing.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 9826c76 to 3aaf73cCompareApril 17, 2026 13:29
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 3aaf73c to e03f123CompareApril 17, 2026 13:36

@notmandatorynotmandatory left a comment

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.

ACK 7c33b33

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

Thank you. I'll add example code and doc to the book-of-bdk.

@tvpeter
tvpeter merged commit f80d92a into bitcoindevkit:masterApr 24, 2026
7 of 9 checks passed
@github-project-automationgithub-project-automationBot moved this from Ready to Review to Done in BDK-CLIApr 24, 2026
@tvpetertvpeter added this to the CLI 4.0.0 milestone Jul 23, 2026
@tvpetertvpeter mentioned this pull request Jul 23, 2026
14 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@aagbotemi@notmandatory@tvpeter@coveralls
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Feature/bip322 integration - #179

Merged
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration
Apr 24, 2026
Merged

Feature/bip322 integration#179
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration

Conversation

@aagbotemi

@aagbotemiaagbotemi commented Apr 26, 2025

Copy link
Copy Markdown
Contributor

Description

This PR added BIP322 feature into BDK CLI.
It also has a usage file for testing purposes

Notes to the reviewers

Changelog notice

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added docs for the new feature
  • I've updated CHANGELOG.md

@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as ready for review April 26, 2025 19:42
@notmandatorynotmandatory added the enhancement New feature or request label Apr 28, 2025
@notmandatory

notmandatory commented Apr 28, 2025

Copy link
Copy Markdown
Member

I'd rather not have a separate key file for this feature and try to protect it with a password and all that. This bdk-cli tool is primarily meant as a manual testing tool and example of how to use the bdk_wallet APIs so providing the public or private key descriptor via command line or environment var should also work for this signing feature.

More importantly the use of bip322 as I understand it is to be able to sign a message using what ever bitcoin descriptor script your bitcoin wallet has. If you have a private key descriptor you should be able to sign the invalid input message transaction, and if not you should still be able to create a PSBT that your hardware signers can sign. Does that make sense? Also have you seen the bdk-reserves crate? it does something similar.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I'd rather not have a separate key file for this feature and try to protect it with a password and all that.

Still actively working on this. Will push updates once I'm done (likely within this week).

@notmandatorynotmandatory moved this to In Progress in BDK-CLIMay 28, 2025
@tvpeter

Copy link
Copy Markdown
Collaborator

Hi @aagbotemi, can you rebase and fix the CI failures?

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This PR is similar to the reserves feature that was taken out in the v1.0 update.
@aagbotemi, please consider changing bip322 feature flag to reserves.

Also, after rebasing, check whether there is need to update the workflows. I would prefer the workflows to go in a separate PR if necessary.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

@aagbotemi, please consider changing bip322 feature flag to reserves.

Alright @tvpeter, will do that.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

Yes, I'm revamping the crate to use descriptor instead of private key, but I will continue the PR with the reserves crate.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thanks for the review and suggestion to rename the bip322 feature to reserves@tvpeter. I’m blocked on integrating bdk-reserves into this PR due to a version mismatch: bdk-cli uses bdk_wallet 2.0.0, but bdk-reserves uses another bdk_wallet version as the ProofOfReserves trait in bdk-reserves is implemented for it.

A PR (bitcoindevkit/bdk-reserves#39) updates bdk-reserves to support bdk_wallet 1.2.0. Once merged, we can bump bdk-reserves to use bdk_wallet 2.0.0.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 2 times, most recently from 7b94ecc to 007f71bCompareJanuary 20, 2026 13:51
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

The update is a follow-up to the BIP322 refactor that migrated signing from raw keys to descriptor-based

@coveralls

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 21173945658

Details

  • 0 of 40(0.0%) changed or added relevant lines in 3 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-0.2%) to 10.549%

Changes Missing CoverageCovered LinesChanged/Added Lines%
src/error.rs030.0%
src/utils.rs0110.0%
src/handlers.rs0260.0%
TotalsCoverage Status
Change from base Build 21153868360:-0.2%
Covered Lines:269
Relevant Lines:2550

💛 - Coveralls

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thank you for working on this @aagbotemi

I have left some comments.

Comment threadsrc/commands.rs Outdated
Comment threadsrc/commands.rs Outdated
Comment threadsrc/handlers.rs Outdated
Comment threadsrc/error.rs Outdated
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thank you for working on this @aagbotemi
I have left some comments.

Thank you for the review. I'll attend to the comments shortly.

@tvpetertvpeter moved this from In Progress to Ready to Review in BDK-CLIFeb 26, 2026
@tvpetertvpeter added this to the CLI 3.0.0 milestone Feb 26, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 3 times, most recently from c7a7e19 to d85feecCompareMarch 10, 2026 17:46
@codecov

codecovBot commented Mar 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 38 lines in your changes missing coverage. Please review.
✅ Project coverage is 10.96%. Comparing base (07fd32f) to head (7c33b33).
⚠️ Report is 7 commits behind head on master.

Files with missing linesPatch %Lines
src/handlers.rs0.00%27 Missing ⚠️
src/utils.rs0.00%11 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #179 +/- ##
==========================================
- Coverage 11.13% 10.96% -0.17% 
==========================================
Files 8 8 Lines 2488 2526 +38 ==========================================
Hits 277 277 - Misses 2211 2249 +38 
FlagCoverage Δ
rust10.96% <0.00%> (-0.17%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment threadsrc/commands.rs Outdated

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hi @aagbotemi ,

So I was testing the feature, and some tests failed. In the attached screenshot, I generated an address from a wallet, signed a message, and verified the message. I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Image

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from d85feec to 0a713a1CompareMarch 11, 2026 13:50
@notmandatory

notmandatory commented Mar 11, 2026

Copy link
Copy Markdown
Member

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

@tvpetertvpeter removed this from the CLI 3.0.0 milestone Mar 11, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 0a713a1 to 5184d45CompareMarch 11, 2026 15:43
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Thanks for pointing this out. I’ve fixed the verification logic so that verification now correctly fails when the message is tampered with.

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

Thanks for the heads-up! Just checked the ColdCard firmware announcement, it's awesome to see the BIP-322 support.

@aagbotemi
aagbotemi requested a review from tvpeterMarch 11, 2026 16:40
@tvpeter

Copy link
Copy Markdown
Collaborator

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

No, it is the wallet I used during testing that I named reserve.

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

tACK 5184d45

Weldone @aagbotemi

This is a great feature, and thanks for working on it.

Image

@tvpetertvpeter modified the milestone: CLI 3.0.0Mar 17, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 5184d45 to 9826c76CompareMarch 18, 2026 14:24
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

UPDATE: Removed signature_type from verify_message() to make the verification API more ergonomic. The signature format is now auto-detected from the signature bytes. Callers no longer need to know which format produced a signature to verify it, and a verifier should only need the signature, message, and address. SignatureFormat is still used for signing.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 9826c76 to 3aaf73cCompareApril 17, 2026 13:29
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 3aaf73c to e03f123CompareApril 17, 2026 13:36

@notmandatorynotmandatory left a comment

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.

ACK 7c33b33

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

Thank you. I'll add example code and doc to the book-of-bdk.

@tvpeter
tvpeter merged commit f80d92a into bitcoindevkit:masterApr 24, 2026
7 of 9 checks passed
@github-project-automationgithub-project-automationBot moved this from Ready to Review to Done in BDK-CLIApr 24, 2026
@tvpetertvpeter added this to the CLI 4.0.0 milestone Jul 23, 2026
@tvpetertvpeter mentioned this pull request Jul 23, 2026
14 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@aagbotemi@notmandatory@tvpeter@coveralls
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Feature/bip322 integration - #179

Merged
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration
Apr 24, 2026
Merged

Feature/bip322 integration#179
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration

Conversation

@aagbotemi

@aagbotemiaagbotemi commented Apr 26, 2025

Copy link
Copy Markdown
Contributor

Description

This PR added BIP322 feature into BDK CLI.
It also has a usage file for testing purposes

Notes to the reviewers

Changelog notice

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added docs for the new feature
  • I've updated CHANGELOG.md

@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as ready for review April 26, 2025 19:42
@notmandatorynotmandatory added the enhancement New feature or request label Apr 28, 2025
@notmandatory

notmandatory commented Apr 28, 2025

Copy link
Copy Markdown
Member

I'd rather not have a separate key file for this feature and try to protect it with a password and all that. This bdk-cli tool is primarily meant as a manual testing tool and example of how to use the bdk_wallet APIs so providing the public or private key descriptor via command line or environment var should also work for this signing feature.

More importantly the use of bip322 as I understand it is to be able to sign a message using what ever bitcoin descriptor script your bitcoin wallet has. If you have a private key descriptor you should be able to sign the invalid input message transaction, and if not you should still be able to create a PSBT that your hardware signers can sign. Does that make sense? Also have you seen the bdk-reserves crate? it does something similar.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I'd rather not have a separate key file for this feature and try to protect it with a password and all that.

Still actively working on this. Will push updates once I'm done (likely within this week).

@notmandatorynotmandatory moved this to In Progress in BDK-CLIMay 28, 2025
@tvpeter

Copy link
Copy Markdown
Collaborator

Hi @aagbotemi, can you rebase and fix the CI failures?

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This PR is similar to the reserves feature that was taken out in the v1.0 update.
@aagbotemi, please consider changing bip322 feature flag to reserves.

Also, after rebasing, check whether there is need to update the workflows. I would prefer the workflows to go in a separate PR if necessary.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

@aagbotemi, please consider changing bip322 feature flag to reserves.

Alright @tvpeter, will do that.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

Yes, I'm revamping the crate to use descriptor instead of private key, but I will continue the PR with the reserves crate.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thanks for the review and suggestion to rename the bip322 feature to reserves@tvpeter. I’m blocked on integrating bdk-reserves into this PR due to a version mismatch: bdk-cli uses bdk_wallet 2.0.0, but bdk-reserves uses another bdk_wallet version as the ProofOfReserves trait in bdk-reserves is implemented for it.

A PR (bitcoindevkit/bdk-reserves#39) updates bdk-reserves to support bdk_wallet 1.2.0. Once merged, we can bump bdk-reserves to use bdk_wallet 2.0.0.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 2 times, most recently from 7b94ecc to 007f71bCompareJanuary 20, 2026 13:51
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

The update is a follow-up to the BIP322 refactor that migrated signing from raw keys to descriptor-based

@coveralls

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 21173945658

Details

  • 0 of 40(0.0%) changed or added relevant lines in 3 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-0.2%) to 10.549%

Changes Missing CoverageCovered LinesChanged/Added Lines%
src/error.rs030.0%
src/utils.rs0110.0%
src/handlers.rs0260.0%
TotalsCoverage Status
Change from base Build 21153868360:-0.2%
Covered Lines:269
Relevant Lines:2550

💛 - Coveralls

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thank you for working on this @aagbotemi

I have left some comments.

Comment threadsrc/commands.rs Outdated
Comment threadsrc/commands.rs Outdated
Comment threadsrc/handlers.rs Outdated
Comment threadsrc/error.rs Outdated
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thank you for working on this @aagbotemi
I have left some comments.

Thank you for the review. I'll attend to the comments shortly.

@tvpetertvpeter moved this from In Progress to Ready to Review in BDK-CLIFeb 26, 2026
@tvpetertvpeter added this to the CLI 3.0.0 milestone Feb 26, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 3 times, most recently from c7a7e19 to d85feecCompareMarch 10, 2026 17:46
@codecov

codecovBot commented Mar 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 38 lines in your changes missing coverage. Please review.
✅ Project coverage is 10.96%. Comparing base (07fd32f) to head (7c33b33).
⚠️ Report is 7 commits behind head on master.

Files with missing linesPatch %Lines
src/handlers.rs0.00%27 Missing ⚠️
src/utils.rs0.00%11 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #179 +/- ##
==========================================
- Coverage 11.13% 10.96% -0.17% 
==========================================
Files 8 8 Lines 2488 2526 +38 ==========================================
Hits 277 277 - Misses 2211 2249 +38 
FlagCoverage Δ
rust10.96% <0.00%> (-0.17%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment threadsrc/commands.rs Outdated

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hi @aagbotemi ,

So I was testing the feature, and some tests failed. In the attached screenshot, I generated an address from a wallet, signed a message, and verified the message. I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Image

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from d85feec to 0a713a1CompareMarch 11, 2026 13:50
@notmandatory

notmandatory commented Mar 11, 2026

Copy link
Copy Markdown
Member

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

@tvpetertvpeter removed this from the CLI 3.0.0 milestone Mar 11, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 0a713a1 to 5184d45CompareMarch 11, 2026 15:43
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Thanks for pointing this out. I’ve fixed the verification logic so that verification now correctly fails when the message is tampered with.

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

Thanks for the heads-up! Just checked the ColdCard firmware announcement, it's awesome to see the BIP-322 support.

@aagbotemi
aagbotemi requested a review from tvpeterMarch 11, 2026 16:40
@tvpeter

Copy link
Copy Markdown
Collaborator

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

No, it is the wallet I used during testing that I named reserve.

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

tACK 5184d45

Weldone @aagbotemi

This is a great feature, and thanks for working on it.

Image

@tvpetertvpeter modified the milestone: CLI 3.0.0Mar 17, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 5184d45 to 9826c76CompareMarch 18, 2026 14:24
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

UPDATE: Removed signature_type from verify_message() to make the verification API more ergonomic. The signature format is now auto-detected from the signature bytes. Callers no longer need to know which format produced a signature to verify it, and a verifier should only need the signature, message, and address. SignatureFormat is still used for signing.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 9826c76 to 3aaf73cCompareApril 17, 2026 13:29
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 3aaf73c to e03f123CompareApril 17, 2026 13:36

@notmandatorynotmandatory left a comment

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.

ACK 7c33b33

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

Thank you. I'll add example code and doc to the book-of-bdk.

@tvpeter
tvpeter merged commit f80d92a into bitcoindevkit:masterApr 24, 2026
7 of 9 checks passed
@github-project-automationgithub-project-automationBot moved this from Ready to Review to Done in BDK-CLIApr 24, 2026
@tvpetertvpeter added this to the CLI 4.0.0 milestone Jul 23, 2026
@tvpetertvpeter mentioned this pull request Jul 23, 2026
14 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@aagbotemi@notmandatory@tvpeter@coveralls
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Feature/bip322 integration - #179

Merged
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration
Apr 24, 2026
Merged

Feature/bip322 integration#179
tvpeter merged 3 commits into
bitcoindevkit:masterfrom
aagbotemi:feature/bip322-integration

Conversation

@aagbotemi

@aagbotemiaagbotemi commented Apr 26, 2025

Copy link
Copy Markdown
Contributor

Description

This PR added BIP322 feature into BDK CLI.
It also has a usage file for testing purposes

Notes to the reviewers

Changelog notice

Checklists

All Submissions:

  • I've signed all my commits
  • I followed the contribution guidelines
  • I ran cargo fmt and cargo clippy before committing

New Features:

  • I've added docs for the new feature
  • I've updated CHANGELOG.md

@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as draft April 26, 2025 13:08
@aagbotemi
aagbotemi marked this pull request as ready for review April 26, 2025 19:42
@notmandatorynotmandatory added the enhancement New feature or request label Apr 28, 2025
@notmandatory

notmandatory commented Apr 28, 2025

Copy link
Copy Markdown
Member

I'd rather not have a separate key file for this feature and try to protect it with a password and all that. This bdk-cli tool is primarily meant as a manual testing tool and example of how to use the bdk_wallet APIs so providing the public or private key descriptor via command line or environment var should also work for this signing feature.

More importantly the use of bip322 as I understand it is to be able to sign a message using what ever bitcoin descriptor script your bitcoin wallet has. If you have a private key descriptor you should be able to sign the invalid input message transaction, and if not you should still be able to create a PSBT that your hardware signers can sign. Does that make sense? Also have you seen the bdk-reserves crate? it does something similar.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I'd rather not have a separate key file for this feature and try to protect it with a password and all that.

Still actively working on this. Will push updates once I'm done (likely within this week).

@notmandatorynotmandatory moved this to In Progress in BDK-CLIMay 28, 2025
@tvpeter

Copy link
Copy Markdown
Collaborator

Hi @aagbotemi, can you rebase and fix the CI failures?

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This PR is similar to the reserves feature that was taken out in the v1.0 update.
@aagbotemi, please consider changing bip322 feature flag to reserves.

Also, after rebasing, check whether there is need to update the workflows. I would prefer the workflows to go in a separate PR if necessary.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

@aagbotemi, please consider changing bip322 feature flag to reserves.

Alright @tvpeter, will do that.

@notmandatory I don't know whether it is ideal that the crate he is referencing should be published for security reasons.

Yes, I'm revamping the crate to use descriptor instead of private key, but I will continue the PR with the reserves crate.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thanks for the review and suggestion to rename the bip322 feature to reserves@tvpeter. I’m blocked on integrating bdk-reserves into this PR due to a version mismatch: bdk-cli uses bdk_wallet 2.0.0, but bdk-reserves uses another bdk_wallet version as the ProofOfReserves trait in bdk-reserves is implemented for it.

A PR (bitcoindevkit/bdk-reserves#39) updates bdk-reserves to support bdk_wallet 1.2.0. Once merged, we can bump bdk-reserves to use bdk_wallet 2.0.0.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 2 times, most recently from 7b94ecc to 007f71bCompareJanuary 20, 2026 13:51
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

The update is a follow-up to the BIP322 refactor that migrated signing from raw keys to descriptor-based

@coveralls

Copy link
Copy Markdown

Pull Request Test Coverage Report for Build 21173945658

Details

  • 0 of 40(0.0%) changed or added relevant lines in 3 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-0.2%) to 10.549%

Changes Missing CoverageCovered LinesChanged/Added Lines%
src/error.rs030.0%
src/utils.rs0110.0%
src/handlers.rs0260.0%
TotalsCoverage Status
Change from base Build 21153868360:-0.2%
Covered Lines:269
Relevant Lines:2550

💛 - Coveralls

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thank you for working on this @aagbotemi

I have left some comments.

Comment threadsrc/commands.rs Outdated
Comment threadsrc/commands.rs Outdated
Comment threadsrc/handlers.rs Outdated
Comment threadsrc/error.rs Outdated
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Thank you for working on this @aagbotemi
I have left some comments.

Thank you for the review. I'll attend to the comments shortly.

@tvpetertvpeter moved this from In Progress to Ready to Review in BDK-CLIFeb 26, 2026
@tvpetertvpeter added this to the CLI 3.0.0 milestone Feb 26, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch 3 times, most recently from c7a7e19 to d85feecCompareMarch 10, 2026 17:46
@codecov

codecovBot commented Mar 11, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 38 lines in your changes missing coverage. Please review.
✅ Project coverage is 10.96%. Comparing base (07fd32f) to head (7c33b33).
⚠️ Report is 7 commits behind head on master.

Files with missing linesPatch %Lines
src/handlers.rs0.00%27 Missing ⚠️
src/utils.rs0.00%11 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## master #179 +/- ##
==========================================
- Coverage 11.13% 10.96% -0.17% 
==========================================
Files 8 8 Lines 2488 2526 +38 ==========================================
Hits 277 277 - Misses 2211 2249 +38 
FlagCoverage Δ
rust10.96% <0.00%> (-0.17%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment threadsrc/commands.rs Outdated

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Hi @aagbotemi ,

So I was testing the feature, and some tests failed. In the attached screenshot, I generated an address from a wallet, signed a message, and verified the message. I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Image

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from d85feec to 0a713a1CompareMarch 11, 2026 13:50
@notmandatory

notmandatory commented Mar 11, 2026

Copy link
Copy Markdown
Member

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

@tvpetertvpeter removed this from the CLI 3.0.0 milestone Mar 11, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 0a713a1 to 5184d45CompareMarch 11, 2026 15:43
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

I changed the message, and it still came back true. I thought the expected output would have been an error indicating that verification failed

Thanks for pointing this out. I’ve fixed the verification logic so that verification now correctly fails when the message is tampered with.

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Some good hardware signing new on this topic. The latest ColdCard firmware supports BIP-322, see: https://nitter.net/COLDCARDwallet/status/2029684130938531965

Thanks for the heads-up! Just checked the ColdCard firmware announcement, it's awesome to see the BIP-322 support.

@aagbotemi
aagbotemi requested a review from tvpeterMarch 11, 2026 16:40
@tvpeter

Copy link
Copy Markdown
Collaborator

Also, I noticed the feature was referenced as reserve during testing, while the current feature name is bip322. Would you prefer that we rename it to reserve?

No, it is the wallet I used during testing that I named reserve.

@tvpetertvpeter left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

tACK 5184d45

Weldone @aagbotemi

This is a great feature, and thanks for working on it.

Image

@tvpetertvpeter modified the milestone: CLI 3.0.0Mar 17, 2026
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 5184d45 to 9826c76CompareMarch 18, 2026 14:24
@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

UPDATE: Removed signature_type from verify_message() to make the verification API more ergonomic. The signature format is now auto-detected from the signature bytes. Callers no longer need to know which format produced a signature to verify it, and a verifier should only need the signature, message, and address. SignatureFormat is still used for signing.

@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 9826c76 to 3aaf73cCompareApril 17, 2026 13:29
@aagbotemi
aagbotemiforce-pushed the feature/bip322-integration branch from 3aaf73c to e03f123CompareApril 17, 2026 13:36

@notmandatorynotmandatory left a comment

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.

ACK 7c33b33

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

@aagbotemi

Copy link
Copy Markdown
ContributorAuthor

Useful feature and good integration with this cli. I encourage you to add some example code and doc page for how to use the bip_322 crate in the book-of-bdk.

Thank you. I'll add example code and doc to the book-of-bdk.

@tvpeter
tvpeter merged commit f80d92a into bitcoindevkit:masterApr 24, 2026
7 of 9 checks passed
@github-project-automationgithub-project-automationBot moved this from Ready to Review to Done in BDK-CLIApr 24, 2026
@tvpetertvpeter added this to the CLI 4.0.0 milestone Jul 23, 2026
@tvpetertvpeter mentioned this pull request Jul 23, 2026
14 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@aagbotemi@notmandatory@tvpeter@coveralls