Skip to content

PROJECT: Stand-Alone BIP-322 (Generic Signed Message Format Leveraging Bitcoin Script) CLI App #112

@ChristopherA

Description

@ChristopherA

BIP-322 is a proposal originally by Kalle Alm (@kallewoof) to leverage the Bitcoin scripting language (ambiguously just called bitcoin script) to enable the signing of arbitrary messages using the same keys & scripts that Bitcoin uses for transactions.

In particular, BIP-322 extends the old single-key signing of messages (using the now off-by-default signmessage & verifymessage rpc api calls) which only worked with legacy scripts like Pay-to-Public-Key-Hash (P2PKH), to allow signing messages using any Bitcoin script wich can conceivably spend (in particular Pay-to-Witness-Script-Hash (P2WSH).

In older versions of bitcoin-core's bitcoind , this is the way the signmessage and verifymessage calls worked (example from LBTCftCL):

$ bitcoin-cli getnewaddress -addresstype legacy
moKVV6XEhfrBCE3QCYq6ppT7AaMF8KsZ1B
$ bitcoin-cli signmessage "moKVV6XEhfrBCE3QCYq6ppT7AaMF8KsZ1B" "Hello, World"
HyIP0nzdcH12aNbQ2s2rUxLwzG832HxiO1vt8S/jw+W4Ia29lw6hyyaqYOsliYdxne70C6SZ5Utma6QY/trHZBI=
$ bitcoin-cli verifymessage "moKVV6XEhfrBCE3QCYq6ppT7AaMF8KsZ1B" "HyIP0nzdcH12aNbQ2s2rUxLwzG832HxiO1vt8S/jw+W4Ia29lw6hyyaqYOsliYdxne70C6SZ5Utma6QY/trHZBI=" "Hello, World"
true

The goal of this project is to implement BIP-322 signmessage and verifymessage functions as a C++ Command Line Interface (CLI) app, in a form that allows for the offline signing of messages, with no dependencies on bitcoin-core's bitcoind server, but leveraging the more secure and supported bitcoin-core libraries like secp256k1 and likely btcdeb.

Community Project milestones:

  • Establish team channels
  • Schedule Intro call & agenda
    • OTHERS?
    • DECISION: Do we have sufficient critical mass of team members to tackle this project this summer (June-August 2022)?
  • Create initial repo (license, CLA, initial documents, uses cases, specs, issues, etc.)
    • Give team write access to repo
  • Write Use Cases
    • Initial use cases document at https://hackmd.io/KR5ALrSSQO6eyrnUBJreeA
    • Simple offline use case (sign using a secp256k1 private key)
    • Simple bitcoin use case (sign using an bitcoin address, either a spent transaction or is a UTXO)
    • Simple identity use case (#w3c did:key?)
    • Complex identity use case (#w3c did:btcr2?)
    • Use cases for variants such as P2WSH, P2TR, multisig and PSBT support.
    • Other use cases
  • Write Requirements for
    • Proof of Concept or MVP
      • POC/MVP requirements
      • Scope & timeframe
    • Future implementations thoughts (what are we leaving out of POC/MVP?)
  • Identify canonical test examples and testing criteria
  • Implement POC/MVP
    • Identify lead and assign roles
  • Document and publicize POC/MVP
  • Explore next steps
    • Post-mortem
      • Identify weaknesses of current implementation and low-hanging fruit as possible next steps.
      • How well did this project work out as a summer internship project? How can we do better?
    • Solicit support from Patrons & other funders for continued development

(This issue follows community discussion at #76 (comment) with @ChristopherA @kallewoof @deymow @shoryak @shikharvashistha @Eunoia172 @wip-abramson @ahmadi-08)

Metadata

Metadata

Assignees

No one assigned

    Labels

    program: gordianassociated with Gordian projects

    Type

    No type

    Projects

    Status

    2025 Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions