You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[FEATURE] Verify ML-DSA signatures embedded in provider docs (x-stackql-signature), with .sig fallback #153
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.
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.
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.
Activity
jeffreyaven commentedon Oct 23, 2026
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.