mirror of
https://github.com/luxfi/tee.git
synced 2026-10-30 15:15:53 +00:00
Extracted verbatim from luxfi/threshold/protocols/{mldsa,rlwe,slhdsa}-tee
to decomplect optional TEE custody from the threshold core. The cores
(pulsar/corona/magnetar/mpc) never depend on this module; the dependency
points tee -> core only. The permissionless dealerless signing path in
luxfi/threshold has zero dependency on TEE.
Packages:
mldsa-tee ML-DSA-65 (FIPS 204) TEE custody signer
rlwe-tee Corona Ring-LWE TEE custody signer
slhdsa-tee SLH-DSA (FIPS 205) TEE custody signer + t-of-n CombinerPool
Full end-to-end attestation suites (committed AMD Milan SEV-SNP vectors,
HSM release-gate, byte-identity with FIPS reference) moved with the
packages and pass: go build/vet/test ./... all green.
1.3 KiB
1.3 KiB
mldsa-tee
Operator-controlled ML-DSA threshold signing via TEE-gated master-seed reconstruction.
What this is
Sibling of protocols/slhdsa-tee for the FIPS 204 (ML-DSA / Dilithium)
primitive. Output is byte-identical to single-party
pulsar.SignDeterministic on the same seed-derived sk.
When to use
- Institutional custody of ML-DSA signing keys with HSM-resident wrap.
- IAM signing-as-a-service that requires attested release per operation.
- Bridge oracles whose signing key is governed by an executive approval flow.
When NOT to use
- Permissionless threshold custody: use
pulsar.OrchestrateV03Sign(v0.3 AlgebraicAggregate) — no party ever holds the master sk. - Single-party / dev: use
pulsar.GenerateKey+pulsar.Sign.
Layering
caller
└── mldsatee.Signer.Sign(ctx, env, jobID, msg, signCtx)
├── approval.ApprovalProvider.ApproveIntent
├── kms.ReleaseGate.Issue / Release
│ └── cc/attest.Dispatch
├── hsm.Provider.GetKey
├── pulsar.KeyFromSeed → pulsar.Sign
└── hsm.Provider.Sign (audit)
Each step is independently complete and replaceable. The default
permissionless path (pulsar.OrchestrateV03Sign) remains the
canonical surface; this TEE-extension is opt-in via the threshold
dispatcher's Sign_TEE method.