Skip to content

Serve the Spark signing operations under a pinned operator policy - #19

Draft
Jossec101 wants to merge 2 commits into
spark/seed-custodyfrom
spark/ops-policy
Draft

Jossec101 wants to merge 2 commits into
spark/seed-custodyfrom
spark/ops-policy

Conversation

@Jossec101

@Jossec101 Jossec101 commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor
  • Serves every signing operation NodeGuard needs to receive, claim and exit Spark funds.
  • Only signs for the configured operators, threshold and allowed receivers (the SSP).
  • Refuses risky operations: key export, decryption and adaptor signatures.
  • Tests compare the results with the in-process signer and NSpark's fixtures.

Stack created with GitHub Stacks CLI • Give Feedback 💬

The signer now serves every operation of the NSpark.RemoteSigner contract
that a NodeGuard Spark wallet needs to receive over Lightning, claim and
exit on-chain: identity signatures, public keys, leaf FROST signatures,
send and claim tweaks and preimage shares. ECIES decryption, private key
export, two-phase nonces and adaptor keys stay unserved (404), and leaf
signatures with an adaptor key are refused (403).

Policy, from the environment:
- SPARK_OPERATOR_KEYS / SPARK_THRESHOLD: tweaks and preimage shares are only
  built for exactly this operator set at this threshold. Without operators
  every tweak and share is refused.
- SPARK_ALLOWED_RECEIVERS: the only identities (the SSP), besides the
  signer's own, that leaves may be sent to.
A malformed policy refuses every request (500) before any seed is decrypted.
/spark/info reports the policy so NodeGuard can check it at startup.

Tests drive NSpark's RemoteSparkSigner client through the Lambda handler
and compare with the in-process signer, and replay every request body
pinned in the fork's contract fixtures.
@Jossec101
Jossec101 added this pull request to stack #21 October 9, 2026 23:23
@Jossec101 Jossec101 changed the title spark/ops policy Serve the Spark signing operations under a pinned operator policy Oct 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant