Files
oracle/LEGACY-CLASSICAL.md
zeekay a47494c975 docs: Tier-A documentation set
Mirrors Pulsar / Corona / Magnetar Tier-A shape, scoped honestly:
oracle is operational infrastructure, not a primitive submission, so
the cover sheet is OVERVIEW.md.

Documents added:
  OVERVIEW.md                 — cover sheet + two-surface decomposition
  SPEC.md                     — state machine, wire format, ZAP plane
  PROOF-CLAIMS.md             — honest narrow claim + evidence
  TRUSTED-COMPUTING-BASE.md   — trust footprint
  CRYPTOGRAPHER-SIGN-OFF.md   — independent review, APPROVED WITH GATES
  DEPLOYMENT-RUNBOOK.md       — operator-facing guidance
  LEGACY-CLASSICAL.md         — opt-in classical disclosure + migration
  CHANGELOG.md                — substantive changes to spec + TCB

Distinct domain-separation context "luxfi.oracle.v1" ensures
cross-protocol replay between oracle Observations and relay Receipts
(which use "luxfi.relay.v1") is structurally prevented.
2026-05-19 08:37:35 -07:00

2.2 KiB

LEGACY-CLASSICAL — luxfi/oracle

Disclosure of the opt-in classical (Ed25519) path on the oracle's intra-Lux operator surface.

§1 Scope

Covers the Config.LegacyClassicalEnabled toggle (chain-side) and profile.Policy.LegacyClassicalEnabled (oracled-side), which together control whether Ed25519 is accepted for Observations / OracleRecords on the intra-Lux surface.

Does NOT cover:

  • External-source primitives (Pyth Ed25519, Chainlink secp256k1, etc.). Those are NOT "legacy" — they are the native primitives of their respective networks.
  • ML-DSA-65 itself (the default).
  • The AGPL-3.0 Solidity Optimistic Oracle (which has its own cryptographic surface).

§2 Why the toggle exists

To support the migration window during which some Lux operator infrastructure still signs with Ed25519. New deployments default to strict-PQ; the toggle is OFF.

§3 What changes when the toggle is on

Behaviour LegacyClassicalEnabled=false (default) LegacyClassicalEnabled=true
SchemeMLDSA65 observations / records accepted iff mldsa65.Verify accepts same
SchemeEd25519 observations / records refused with ErrClassicalRefused BEFORE any classical math accepted iff ed25519.Verify accepts with ContextTag prepended
Operator key registration accepts both schemes accepts both schemes
Domain-separation context "luxfi.oracle.v1" same

§4 Domain separation under classical

When Ed25519 is permitted, the bytes fed to ed25519.Sign / ed25519.Verify are:

tagged = "luxfi.oracle.v1" || message

This guarantees a classical oracle Observation cannot be replayed as a relay receipt (which uses "luxfi.relay.v1"). Protection is structural domain separation, not cryptographic novelty.

§5 Migration plan

Identical to relay's: Phase A (legacy on) → Phase B (operators register ML-DSA-65 keys) → Phase C (toggle off via quorum-coordinated change) → Phase D (deregister Ed25519). See luxfi/relay/LEGACY-CLASSICAL.md §5 for details; the oracle inherits the same discipline.

§6 What the toggle does NOT enable

  • Cross-scheme signature substitution.
  • Hybrid signatures.
  • External-source PQ flip (out of scope).