NUT-11: Add SigAllSigningPackage transport format for multi-party SIG_ALL signing #345

Open
KvngMikey wants to merge 3 commits from KvngMikey/sigall_package into main
KvngMikey commented 2026-02-23 09:27:47 +00:00 (Migrated from github.com)

Closes #319

Adds a SigAllSigningPackage section to NUT-11 defining the wallet-led
transport format for coordinating multi-party SIG_ALL signing.

Defines:

  • The SigAllSigningPackage shape, using existing NUT types (BlindedMessage)
  • Serialization format: fixed key-order JSON → base64url → sigallA prefix
  • A concrete worked example with full serialized sigallA string for
    implementation verification, added to tests/11-test.md

Signing logic, merge behaviour, and coordination flow are intentionally omitted as implementation detail.

Related: [SigAll Signing Package -> cashubtc/cashu-ts/pull/485]

Closes #319 Adds a `SigAllSigningPackage` section to NUT-11 defining the wallet-led transport format for coordinating multi-party `SIG_ALL` signing. Defines: - The `SigAllSigningPackage` shape, using existing NUT types (`BlindedMessage`) - Serialization format: fixed key-order JSON → base64url → `sigallA` prefix - A concrete worked example with full serialized `sigallA` string for implementation verification, added to `tests/11-test.md` Signing logic, merge behaviour, and coordination flow are intentionally omitted as implementation detail. Related: [SigAll Signing Package -> cashubtc/cashu-ts/pull/485]
robwoodgate (Migrated from github.com) reviewed 2026-02-23 10:02:38 +00:00
robwoodgate (Migrated from github.com) left a comment

I prefer this approach to #319 - great work. Have left a couple of suggestions to tighten things up, otherwise great!

I prefer this approach to #319 - great work. Have left a couple of suggestions to tighten things up, otherwise great!
@ -154,6 +154,44 @@ msg = secret_0 || C_0 || ... || secret_n || C_n || amount_0 || B_0 || ... || amo
robwoodgate (Migrated from github.com) commented 2026-02-23 09:42:14 +00:00
To facilitate multi-party signing for [`SIG_ALL`](#signature-flag-sig_all) transactions, wallets can exchange a `SigAllSigningPackage` containing the minimal data required to reconstruct the transaction message and produce signatures. It is a wallet-to-wallet transport format. Mints do not process these packages.
```suggestion To facilitate multi-party signing for [`SIG_ALL`](#signature-flag-sig_all) transactions, wallets can exchange a `SigAllSigningPackage` containing the minimal data required to reconstruct the transaction message and produce signatures. It is a wallet-to-wallet transport format. Mints do not process these packages. ```
robwoodgate (Migrated from github.com) commented 2026-02-23 09:44:12 +00:00

Same comment as above.

Same comment as above.
robwoodgate (Migrated from github.com) commented 2026-02-23 09:47:32 +00:00

[SIG_ALL swap example] is a non-functioning reference.

I wonder if we need the rest of this below... it's already in the test file.

Perhaps we should just remove lines 187-222 and replace with:

Below is a sample base64url encoded `SigAllSigningPackage`.

```
sigallAeyJ2ZXJzaW9uIjoic2lnYWxsQSIsInR5cGUiOiJzd2FwIiwiaW5wdXRzIjpbeyJzZWNyZXQiOiJbXCJQMlBLXCIse1wibm9uY2VcIjpcImM3ZjI4MGViNTVjMWU4NTY0ZTAzZGIwNjk3M2U5NGJjOWI2NjZkOWUxY2E0MmFkMjc4NDA4ZmU2MjU5NTAzMDNcIixcImRhdGFcIjpcIjAzMGQ4YWNlZGZlMDcyYzlmYTQ0OWExZWZlMDgxNzE1NzQwM2ZiZWM0NjBkOGU3OWY5NTc5NjYwNTZlNWRkNzZjMVwiLFwidGFnc1wiOltbXCJzaWdmbGFnXCIsXCJTSUdfQUxMXCJdXX1dIiwiQyI6IjAyYzk3ZWUzZDFkYjQxY2YwYTNkZGI2MDE3MjRiZTg3MTFhMDMyOTUwODExYmYzMjZmODIxOWM1MGM0ODA4ZDNjZCJ9XSwib3V0cHV0cyI6W3siYW1vdW50IjoyLCJpZCI6IjAwYmZhNzMzMDJkMTJmZmQiLCJCXyI6IjAzOGVjODUzZDY1YWUxYjc5YjVjZGJjMjc3NDE1MGIyY2IyODhkNmQyNmUxMjk1OGExNmZiMzNjMzJkOWE4NmMzOSJ9XSwiZGlnZXN0cyI6eyJsZWdhY3kiOiJkZTdmOWUzY2EwZmNjNWVkMzI1OGZjZjgzZGJmMWJlN2ZhNzhhNWVkNmRhN2JmMmFhNjBkNjFlOWRjNmViMDlhIiwiY3VycmVudCI6ImRlN2Y5ZTNjYTBmY2M1ZWQzMjU4ZmNmODNkYmYxYmU3ZmE3OGE1ZWQ2ZGE3YmYyYWE2MGQ2MWU5ZGM2ZWIwOWEifSwid2l0bmVzcyI6eyJzaWduYXR1cmVzIjpbImNlMDE3Y2EyNWIxYjk3ZGYyZjcyZTRiNDlmNjlhYzI2YTI0MGNlMTRiMzY5MGE4ZmU2MTlkNDFjY2M0MmQzYzEyODJlMDczZjg1YWNkMzZkYzUwMDExNjM4OTA2ZjM1YjU2NjE1ZjI0ZTRkMDNlOGVmZmU4MjU3ZjZhODA4NTM4Il19fQ
```

See the [test vectors][tests] for a full example.
[SIG_ALL swap example] is a non-functioning reference. I wonder if we need the rest of this below... it's already in the test file. Perhaps we should just remove lines 187-222 and replace with: ~~~ Below is a sample base64url encoded `SigAllSigningPackage`. ``` sigallAeyJ2ZXJzaW9uIjoic2lnYWxsQSIsInR5cGUiOiJzd2FwIiwiaW5wdXRzIjpbeyJzZWNyZXQiOiJbXCJQMlBLXCIse1wibm9uY2VcIjpcImM3ZjI4MGViNTVjMWU4NTY0ZTAzZGIwNjk3M2U5NGJjOWI2NjZkOWUxY2E0MmFkMjc4NDA4ZmU2MjU5NTAzMDNcIixcImRhdGFcIjpcIjAzMGQ4YWNlZGZlMDcyYzlmYTQ0OWExZWZlMDgxNzE1NzQwM2ZiZWM0NjBkOGU3OWY5NTc5NjYwNTZlNWRkNzZjMVwiLFwidGFnc1wiOltbXCJzaWdmbGFnXCIsXCJTSUdfQUxMXCJdXX1dIiwiQyI6IjAyYzk3ZWUzZDFkYjQxY2YwYTNkZGI2MDE3MjRiZTg3MTFhMDMyOTUwODExYmYzMjZmODIxOWM1MGM0ODA4ZDNjZCJ9XSwib3V0cHV0cyI6W3siYW1vdW50IjoyLCJpZCI6IjAwYmZhNzMzMDJkMTJmZmQiLCJCXyI6IjAzOGVjODUzZDY1YWUxYjc5YjVjZGJjMjc3NDE1MGIyY2IyODhkNmQyNmUxMjk1OGExNmZiMzNjMzJkOWE4NmMzOSJ9XSwiZGlnZXN0cyI6eyJsZWdhY3kiOiJkZTdmOWUzY2EwZmNjNWVkMzI1OGZjZjgzZGJmMWJlN2ZhNzhhNWVkNmRhN2JmMmFhNjBkNjFlOWRjNmViMDlhIiwiY3VycmVudCI6ImRlN2Y5ZTNjYTBmY2M1ZWQzMjU4ZmNmODNkYmYxYmU3ZmE3OGE1ZWQ2ZGE3YmYyYWE2MGQ2MWU5ZGM2ZWIwOWEifSwid2l0bmVzcyI6eyJzaWduYXR1cmVzIjpbImNlMDE3Y2EyNWIxYjk3ZGYyZjcyZTRiNDlmNjlhYzI2YTI0MGNlMTRiMzY5MGE4ZmU2MTlkNDFjY2M0MmQzYzEyODJlMDczZjg1YWNkMzZkYzUwMDExNjM4OTA2ZjM1YjU2NjE1ZjI0ZTRkMDNlOGVmZmU4MjU3ZjZhODA4NTM4Il19fQ ``` See the [test vectors][tests] for a full example. ~~~
@ -409,3 +409,67 @@ The following is a valid multi-sig `SIG_ALL` `MeltRequest`.
]
robwoodgate (Migrated from github.com) commented 2026-02-23 09:39:35 +00:00

One of these is not correct, because they are the same and the derivations are different.

Please can you check and update.

One of these is not correct, because they are the same and the derivations are different. Please can you check and update.
robwoodgate (Migrated from github.com) approved these changes 2026-02-23 17:01:17 +00:00
robwoodgate (Migrated from github.com) left a comment

Great work @KvngMikey.

Great work @KvngMikey.
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin KvngMikey/sigall_package:KvngMikey/sigall_package
git switch KvngMikey/sigall_package

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff KvngMikey/sigall_package
git switch KvngMikey/sigall_package
git rebase main
git switch main
git merge --ff-only KvngMikey/sigall_package
git switch KvngMikey/sigall_package
git rebase main
git switch main
git merge --no-ff KvngMikey/sigall_package
git switch main
git merge --squash KvngMikey/sigall_package
git switch main
git merge --ff-only KvngMikey/sigall_package
git switch main
git merge KvngMikey/sigall_package
git push origin main
Sign in to join this conversation.
No description provided.