Skip to content

[FEATURE] Verify ML-DSA signatures embedded in provider docs (x-stackql-signature), with .sig fallback #153

Closed

Description

@jeffreyaven

Middle step of the registry's move to quantum-safe, embedded provider-doc signatures: stackql/stackql-provider-registry#482 (signing package) -> this issue (verification) -> stackql/stackql#856 (bump, config, docs). Verification is off by default in stackql (nopVerify: true), so this ships without changing user-facing behaviour. omnisdk, which is replacing any-sdk, gets the same verifier under stackql-labs/omnisdk#17.

NOTE: Must be compliant with at least FIPS 204.

What changes

  • internal/anysdk/registry.go: getVerifiedDocBytes fetches <doc>.sig (local path, local cache or remote) and calls edcrypto.VerifyFileFromCertificateBytes. New path, tried first: if the doc carries x-stackql-signature, pop it, canonicalise the remainder with the registry's shared package (RFC 8785 JSON), mldsa.Verify against the embedded public key selected by kid, context stackql-provider-doc-v1. No key: fall back to the .sig path. Both present: embedded wins.
  • Dependency: bump github.com/stackql/stackql-provider-registry from v0.0.2-alpha01 to the release that ships signing/pqsig. go.mod to go 1.27 for crypto/mldsa (currently 1.26.10).
  • VerifierConfig: add allowLegacySig (default true for the transition) so the .sig fallback can be switched off later. nopVerify untouched.
  • Canonicalisation comes from the shared registry package. Do not reimplement it here or signatures will not match.
  • Tests: fixtures signed at test time with ephemeral ML-DSA keys. Cases: valid, tampered after signing, unknown kid, no key with and without .sig, both present.

Sequence and dependencies

  1. Blocked by [FEATURE] Quantum-safe provider doc signing: ML-DSA via crypto/mldsa, signature embedded in the doc, drop .sig sidecars stackql-provider-registry#482 step 1 (package release).
  2. This issue, then an any-sdk release.
  3. Unblocks [FEATURE] Verify ML-DSA signatures embedded in provider docs (x-stackql-signature), replacing .sig sidecars stackql#856, which in turn unblocks the registry dropping .sig files.

Notes

Activity

  1. added
    enhancementNew feature or request
    goPull requests that update go code
    on Oct 21, 2026
  2. jeffreyaven commented on Oct 23, 2026

    @jeffreyaven
    MemberAuthor

    Implemented by #155, coordinated with stackql-labs/omnisdk#23, stackql/stackql#869, stackql/stackql-provider-tests#2 and stackql/stackql-provider-registry#487.

    The maintainer approved ML-DSA-65 via Go's standard library, no legacy fallback, and exact-byte raw-v1 signatures instead of canonical JSON after auditing all 1,968 provider documents. Verification remains opt-in. Local, cached and HTTP documents share embedded verification; legacy sidecar fetching is removed.

    Merge provider-tests first, both SDKs in parallel, then StackQL and a binary release. Merge the registry cutover LAST after its provider-test downloader obtains that binary. All any-sdk PR checks passed; the coordinated StackQL matrix is still being validated. PR #155 closes this issue on merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestgoPull requests that update go code

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions