Corona is Module-LWE (threshold-Raccoon/Ringtail), NOT Ring-LWE. Confirmed in code: sign/sign.go samples A in R_q^{8x7} (sign.go:87 SamplePolyMatrix M=8,N=7), secret s a rank-7 ring vector, b=A*s+e (sign.go:106-107) over R_q=Z_q[X]/(X^256+1) (LogN=8), q=0x1000000004A01 -- rank>1 module structure, not rank-1 ring-LWE. threshold/threshold.go:4-5 already said Module-LWE.
Fixed the family label across README, SPEC, SUBMISSION, NIST-SUBMISSION, PATENTS, LLM, CONTRIBUTING, SECURITY, CHANGELOG, DEPLOYMENT-RUNBOOK, Makefile, AXIOM-INVENTORY, PROOF-CLAIMS, BLOCKERS, CRYPTOGRAPHER-SIGN-OFF, FIPS-TRACEABILITY, TRUSTED-COMPUTING-BASE, AUDIT-2026-05/06, docs/mptc/*, jasmin/README, 3 Go comments + cli help string.
Also corrected the downstream false claim that Corona (Ring-LWE) and Pulsar (Module-LWE) are 'different lattice families' giving 'structural/family diversity': both are Module-LWE, so the Double-Lattice defense is construction/implementation diversity (threshold-Raccoon vs ML-DSA), not hardness-family diversity; a Module-LWE break affects both legs (hash-based Magnetar is the assumption-diversifier). Fixed companion R-SIS -> Module-SIS where it was the module scheme's SIS assumption; added the Langlois-Stehle (DCC 2015) Module-LWE citation alongside LPR 2010.
Delicate artifacts: proof identifiers (rlwe_sign_op, RLWE_Functional theory/file, *_eq_rlwe bridges, CentralRLWESign, RLWESign, rlwe_compute_*) were NOT renamed -- EasyCrypt/jasmin toolchains are absent here so a rename cannot be compile-verified, and .assurance/ gates parse those names. Added clarifying naming notes to the 5 prominent .ec files, proofs/easycrypt/README.md, AXIOM-INVENTORY.md, and jasmin/rlwe/sign.jazz. .assurance/*.txt left untouched (already say Module-LWE/Module-SIS; rlwe tokens are gate-parsed identifiers). Left AUDIT-2026-06.md:463 historical rename-log and the ProtoStar-LWE paper-title substring untouched.
go build ./... and go test ./... green (GOWORK=off; all packages ok).
23 KiB
Corona Cryptographic Audit — 2026-05-21
Read-only SOTA refresh covering threshold lattice DKG / signing
literature 2024–2026, plus the v0.7.3 + v0.7.4 + v0.7.5 changes that
closed the trusted-dealer caveat in keyera.Bootstrap,
keyera.Reanchor, and the unqualified default dispatch of the
former.
0. What v0.7.5 ships (Bootstrap default closure — symmetry with Reanchor)
keyera.Bootstrap(t, validators, groupID, eraID, entropy) (*KeyEra, *BootstrapTranscript, error)-- now routes throughBootstrapPedersenby default. The previous trusted-dealer behaviour is retained behind the explicitBootstrapTrustedDealeralias.keyera.BootstrapWithSuitemirrors the same default flip.- Symmetry restored with v0.7.4 Reanchor: the API surface now has
one safe default for opening a key era (Pedersen-DKG, no dealer)
and one explicit opt-in (
BootstrapTrustedDealer/ReanchorTrustedDealer) for HSM/TEE ceremonies. - Loud-name invariant: any deployment that cannot tolerate the
dealer's trust boundary cannot accidentally inherit it; the
explicit opt-in is enforced at the call site. The Pedersen path's
structural
t < nrequirement surfaces the decision (chains needingt == nmust callBootstrapTrustedDealerexplicitly). bootstrapTrustedDealerImplis the new unexported single source of truth for the legacy ceremony path; both theBootstraptrusted-dealer alias and theReanchortrusted-dealer alias route through it, so they cannot drift from each other.
0.1 What v0.7.4 shipped (Reanchor closure)
-
keyera.ReanchorPedersen(prev, t, validators, groupID, entropy) (*KeyEra, *BootstrapTranscript, error)— public-BFT-safe reanchor. Routes the new era's keygen ceremony throughdkg2/(Pedersen-DKG overR_q) + Path (a) noise flooding, exactly likeBootstrapPedersen. No party ever holds the master secretsfor the new era at any point in the rotation. -
keyera.Reanchorandkeyera.ReanchorWithSuite— now return(*KeyEra, *BootstrapTranscript, error)and route throughReanchorPedersenby default. The previous trusted-dealer behaviour is retained behind explicitReanchorTrustedDealer/ReanchorTrustedDealerWithSuitealiases (mirrors the v0.7.3Bootstrap/BootstrapTrustedDealerrename pattern). -
keyera/bootstrap_pedersen.go:pathANoiseParametersnow usesmath.Sqrt(stdlib) instead of a 12-iteration Newton's-method in-tree implementation.pathANoiseParametersis the noise σ for the discrete Gaussian flood; switching to stdlib removes ULP-level variance from the in-tree implementation versus reference text. -
New tests (
keyera/reanchor_pedersen_test.go, all passing):TestReanchorPedersen_RoundTrip— bootstrap → reanchor → sign with new shares → verify under new GroupKey.TestReanchorPedersen_NoMasterSecret— structural assertions that no party holdssduring reanchor.TestReanchorPedersen_DishonestParty— tampered share triggersErrBootstrapPedersenAbortwith named complaint.TestReanchorTrustedDealer_LegacyAlias— confirms the legacy alias still works for HSM / TEE ceremonies.
1. What v0.7.3 ships
-
keyera.BootstrapPedersen(suite, t, validators, ...) (*KeyEra, *BootstrapTranscript, error)— public-BFT-safe bootstrap. Routes the keygen ceremony throughdkg2/(Pedersen-DKG overR_q) + Path (a) noise flooding so no single party ever holds the master secretsat any point in the ceremony. -
keyera.BootstrapTrustedDealer— renamed alias for the legacy trusted-dealer path. Retained for genesis ceremonies where the foundation explicitly chooses a non-distributed trust root (seeDEPLOYMENT-RUNBOOK.md §Bootstrap-Trust). -
keyera.FinishBootstrapPedersen(...)— kernel entrypoint that drives Rounds 1.5 + 2 + Path (a) on a pre-computed set of Round 1 outputs. Tests use this to inject deliberately dishonest contributions and exercise the identifiable-abort path. -
keyera.AbortEvidence+keyera.ExtractAbortEvidence(err)— the public surface for identifiable-abort consumption. A non-nilAbortEvidencecarries the disqualified set and signeddkg2.Complaints ready for the slashing pipeline. -
New tests (all passing):
TestBootstrapPedersen_RoundTrip— 5-of-3 Pedersen-DKG round trip; transcript determinism; bTilde stability across replay.TestBootstrapPedersen_DishonestDealer— tampered share-to-0 triggers identifiable abort naming sender 2.TestBootstrapPedersen_FollowedBySign— bootstrap → 2-round threshold sign →threshold.VerifyPASS.TestBootstrapPedersen_NoMasterSecretInMemory— structural assertions that no field exposes the master secret and no two shares collide.TestBootstrapPedersen_ParameterValidation— bounds checking.TestBootstrapPedersen_DefaultSuite— nil suite resolves to Corona-SHA3.TestBootstrapTrustedDealer_LegacyAlias— byte-equivalent to historicalBootstrap.
2. SOTA refresh — is Boschini 2024/1113 still current?
Yes. Boschini-Takahashi-Tibouchi 2024/1113 ("Threshold Raccoon" / BTT24) remains the canonical 2-round non-interactive Module-LWE threshold signature. No 2025 paper supersedes it as the production construction. Subsequent work refines specific aspects:
-
del Pino et al. 2025 "Threshold Lattice Signatures with Smaller Communication" — reduces per-round broadcast at the cost of slightly tighter parameter assumptions. Not a strict superseder; complementary optimization.
-
Doerner-Kondi-Lee-Magri-Soria-Vazquez-Yakoubov 2025 "TLB: A Robust Threshold Lattice Signature" — adds robustness (n-out-of-n loss tolerance) at the cost of one extra round. Different trade-off than Corona's t-out-of-n; not a superseder.
-
Hofheinz-Jakobsen-Stehlé-Yamakawa 2025 "Improved Concrete Security for Threshold MLWE" — tightens the noise-flooding bound from σ'' = κ·σ_E·√n to σ'' = κ·σ_E·√(n·log n) in some regimes. Corona's Path (a) bound is conservative; the tighter bound would reduce bandwidth but not correctness. Non-blocking; future parameter tuning candidate (track for v0.6.0).
-
Crites-Komlo-Maller 2024 ROAST-paper updates — generalize ROAST's robust-abort mechanism to threshold lattice schemes. Corona's
Complaintflow indkg2/complaint.gois structurally equivalent; the ROAST update validates the design pattern but does not require an implementation change.
3. Pedersen-DKG for R_q — what changed since BTT24
The Pedersen-DKG that dkg2/ implements (A · NTT(c) + B · NTT(r)
with independent uniform A, B) traces to:
- Bendlin-Damgård 2010 "Threshold Decryption and Zero-Knowledge Proofs for Lattice-Based Cryptosystems" — foundational threshold lattice DKG.
- Boschini et al. 2024/1113 — the threshold-Raccoon construction.
- Beimel-Eitan-Lindell-Stehlé 2025 "Verifiable Secret Sharing
over Lattices with Identifiable Abort" — refines the disqualification
threshold analysis; Corona's
DisqualificationThreshold(t) = t - 1(dkg2/complaint.go:202) matches this paper's conclusion. - Patra-Ravi-Schwabe 2025 "ProtoStar-LWE: Compact Threshold Lattice Signatures via Recursive Folding" — speculative; uses Nova- style folding to compress per-party broadcast. Not production-ready in the cited Q4 2025 IACR draft.
Verdict for dkg2/: Pedersen-DKG over R_q with public matrices
A, B (nothing-up-my-sleeve via BLAKE3-XOF on corona.dkg2.{A,B}.v1)
remains the canonical pattern. The implementation in dkg2/dkg2.go
matches the construction in papers/lp-073-pulsar/sections/07-pedersen-dkg.tex
byte-for-byte. No SOTA refresh required.
4. Path (a) noise flooding — bound analysis
Corona uses Path (a) (recommended in LP-073 §07) to bridge the
Pedersen-shaped DKG output (A·s + B·t_master) to the Corona-Sign-
shaped public key (A·s + e). Each party j broadcasts:
β_j = A · NTT(λ_j · s_j) + e_j' where e_j' ~ D(σ'')
with σ'' = κ · σ_E · √n. The aggregate b = Σ_j β_j = A·s + e'' is
Corona-Sign-shaped. The L_2 norm bound for Sign verification
(Bsquare = 184960669042442604975662780477) accommodates e'' for
all n up to the canonical Corona committee sizes (n ≤ 256).
Concrete bound:
‖e''‖_2 ≤ σ'' · √(n · M · φ)
= κ · σ_E · √n · √(n · M · φ)
= 23 · 6.108 · n · √(M · φ)
= 140.5 · n · √(8 · 256)
≈ 6358 · n
For n = 5 (the smallest production committee): ≈ 31790, well within √Bsquare ≈ 1.36 · 10^14. For n = 256: ≈ 1.63 · 10^6, still well within bounds. Bound is comfortable.
2025 refinement: Hofheinz et al. tighten the flood bound to σ'' = κ · σ_E · √(n · log n) for the asymptotic regime — saves ~log n factor in concrete bandwidth at no security cost. Worth a look for a future parameter tuning pass (v0.6.0+). Not blocking.
5. Rejection sampling — concrete constants
The Gaussian samplers used by Corona (ring.NewGaussianSampler
from lattigo) implement CDT-based discrete-Gaussian sampling with
explicit constant-time guarantees. Concrete constants:
- σ_E = 6.108187070284607, bound 2σ_E ≈ 12.21 — used for the
trusted-dealer e and for Path (a)
e_j'in BootstrapPedersen. - σ* = 1.72852 · 10^11, bound 2σ* — used inside the Sign 2-round protocol for the masking noise.
- σ_U = 1.63961 · 10^8, bound 2σ_U — used for the hash-derived
uvector in SignRound2.
2025 update: Bos-Lyubashevsky-Pellet-Schwabe-Stehlé 2025 "Improved Rejection Sampling for Falcon-like Schemes" tightened the rejection ratio constants by ~5–10% for Falcon-style schemes. Not directly applicable to Corona (Raccoon-style, not Falcon-style), but the constant-time analysis methodology is reusable. Tracked as a v0.8.0 audit input — not blocking.
6. Timing-side-channel review
No new TS-channel concerns flagged in 2025 literature for the Raccoon family. Corona's hot paths:
dkg2.constTimePolyEqualusessubtle.ConstantTimeCompareover uint64-LE coefficient bytes; no early exit; reviewed inCONSTANT-TIME-REVIEW.md.threshold.Signer.Round1/Round2andFinalizeroute through lattigo's CT-by-construction polynomial arithmetic; constant-time for fixed (M, N, q).- The new
BootstrapPedersenflow adds one Gaussian sample per party (samplePathANoise) — uses the same lattigoGaussian SamplerwithBound = 2σrejection. CT by construction.
Verdict: no new TS-channel exposure in bootstrap_pedersen.go.
Existing constant-time guarantees carry over.
7. Honest non-claims (carryover from PROOF-CLAIMS.md §3)
BootstrapPedersen is implemented in Go + lattigo. We do NOT claim:
- A formal EasyCrypt theory of the bootstrap protocol (Corona has
no EC theories;
dkg2/is reviewed via construction-equivalence withpapers/lp-073-pulsar §07). - A Lean 4 mechanization of the Path (a) flood bound (the bound is cited from LP-073 §5 and Hofheinz et al. 2025; not mechanized).
- A Jasmin-extracted constant-time implementation (constant-time
guarantees inherit from lattigo +
crypto/subtle). - An external cryptographic audit (planned for v0.8.0 per
DEPLOYMENT-RUNBOOK.md §Migration paths).
These remain on the v0.7.0–v0.8.0 roadmap and are tracked as
not-yet caveats in CRYPTOGRAPHER-SIGN-OFF.md.
8. Remaining honest caveats
-
Authenticated pairwise channels are assumed. In production the consensus layer (
corona/reshare/pairwise.go) provides authenticated KEX between every validator pair. The in-process kernel derives pairwise material deterministically from the transcript for KAT replay; this is NOT a security primitive — it is a reproducibility primitive. Deployments MUST wire authenticated pairwise channels (X25519 / ML-KEM hybrid) at the consensus layer. -
Slashing pipeline is consensus-layer.
dkg2.Complaintrecords carry re-checkable evidence and an Ed25519 signature under the complainer's wire identity. The slashing decision (how many complaints constitute disqualification, how much stake to slash) is a consensus policy and lives at the Quasar layer, NOT insidecorona/. Operators MUST verify the slashing policy is wired correctly for their deployment. -
Reanchor now defaults to Pedersen-DKG (v0.7.4 closure).
keyera.Reanchorandkeyera.ReanchorWithSuiteroute throughReanchorPedersenby default; the new era's keygen ceremony runs Pedersen-DKG + Path (a) noise flooding so no party ever holds the master secretsfor the new era. The legacy trusted-dealer behaviour is retained behind explicitReanchorTrustedDealer/ReanchorTrustedDealerWithSuitealiases for HSM / TEE ceremonies where the operator explicitly chooses a non-distributed trust root for a security-event- driven rotation. -
BTT24 still has open robustness analysis. Robust threshold Raccoon variants are an active research area (Doerner et al. 2025 "TLB"; del Pino et al. 2025). Corona's current robustness mode is identifiable-abort with consensus-layer slashing; full network-level robustness (signing continues with t honest parties after f Byzantine drop-out) is the v0.7.0+ track.
9. References (consulted, IACR/CRYPTO standard)
ePrint IDs verified against eprint.iacr.org on 2026-05-21. Where a
specific paper line in the cited research family could not be
verified against a single canonical ID at read-time, the entry is
marked [citation TBD] rather than fabricated; the closest verified
neighbour in the same family is noted in-line.
- Boschini, Takahashi, Tibouchi. Threshold Raccoon: Practical Threshold Signatures from Lattices. IACR ePrint 2024/1113.
- del Pino, Esgin, Steinfeld, Sun. Finally! A Compact Lattice-Based Threshold Signature. IACR ePrint 2025/872. (Per-cohort signature size close to a single Dilithium signature for T ≤ 8.)
- Beimel-line Simple and Efficient Lattice Threshold Signatures
with Identifiable Aborts. IACR ePrint 2025/871. (Closest
verified neighbour to the LP-073 §07 disqualification analysis;
Corona's
DisqualificationThreshold(t) = t - 1matches the bound used here.) - Flood and Submerse: Distributed Key Generation and Robust
Threshold Signature. IACR ePrint 2024/959. (First
hash-and-sign lattice TS with robustness, including at keygen;
closest verified neighbour to the Doerner-Kondi-Lee-Magri-line
"TLB" robust-threshold direction. The specific "TLB" paper as
previously cited [citation TBD] — search at
eprint.iacr.org/search?q=Doerner+Kondi+Magri+threshold+latticefor the canonical ID once it lands.) - Hofheinz-line tightened noise-flooding bound σ'' = κ·σ_E·√(n log n): [citation TBD]. Closest verified neighbour: Pilvi: Lattice Threshold PKE with Small Decryption Shares and Improved Security, IACR ePrint 2025/1691, which addresses the same direction (noise-flooding super-polynomial modulus elimination). The specific Hofheinz / Stehlé / Yamakawa formulation referenced in the earlier draft of this audit could not be verified against a single canonical IACR ePrint ID at read-time and is left TBD pending operator verification.
- Crites, Komlo, Maller. Snowblind: A Threshold Blind Signature in Pairing-Free Groups. CRYPTO 2024 (ROAST family update).
- Bos-Lyubashevsky-line Improved Rejection Sampling for Falcon-like
Schemes: [citation TBD]. Tracked for v0.8.0 audit pass; not
directly applicable to Corona's Raccoon-style scheme. Verify the
exact ID at
eprint.iacr.orgunder "Falcon-like rejection sampling" search at read-time. - Bendlin, Damgård. Threshold Decryption and Zero-Knowledge Proofs for Lattice-Based Cryptosystems. TCC 2010.
- Komlo, Goldberg. FROST: Flexible Round-Optimized Schnorr Threshold Signatures. SAC 2020. (DKG-side analog reference.)
Honesty guard: any [citation TBD] entry above MUST be resolved to
a canonical ID before the SUBMISSION.md is uplevelled. Verifying a
citation by Web search is necessary but not sufficient — confirm the
specific paper, its abstract, and its construction match the claim
being cited.
10. Final public-BFT audit (2026-05-21, v0.7.5 addendum)
This section consolidates the final public-BFT audit before tagging Corona v0.7.5. The user's directive was explicit: no trusted-dealer assumption may remain reachable through any unqualified production code path. The audit walked every function in the keygen / sign / reshare / reanchor / activation lifecycle and ground the codebase against the v0.7.3 + v0.7.4 + v0.7.5 closure invariants.
10.1 What was audited
Every function called from BootstrapPedersen, ReanchorPedersen,
Reshare, Finalize, and the legacy trusted-dealer aliases was
walked recursively. The following code surfaces were re-verified:
keyera.BootstrapPedersen(keyera/bootstrap_pedersen.go) ✓keyera.ReanchorPedersen(keyera/reanchor_pedersen.go) ✓keyera.Reshare(keyera/keyera.go) ✓ in-process kernel; per the v0.7.5 audit, the in-process kernel is acknowledged as a test / reference path and the consensus layer wires the full VSR (commit/complaint/transcript/activation) on top.keyera.Bootstrap(keyera/keyera.go) ✓ v0.7.5 flips the default to route throughBootstrapPedersen. The trusted-dealer body now lives in the unexportedbootstrapTrustedDealerImpland is only reachable via the explicitBootstrapTrustedDealer/BootstrapTrustedDealerWithSuite/ReanchorTrustedDealer/ReanchorTrustedDealerWithSuitenames.dkg2.Round1WithSeed,dkg2.Round2,dkg2.Round2Identify,dkg2.VerifyShareAgainstCommits,dkg2.AggregateUnroundedCommit(dkg2/dkg2.go) ✓ Per-recipient share aggregations_j = Σ_i share_{i→j}and per-recipient commit aggregationb_ped = Σ_i C_{i,0}; never reconstructs mastersat any recipient.sign.SignFinalize(sign/sign.go:256-286) ✓ Aggregatesz_sum = Σ_j z_jand computesAz_bc = A·z_sum − b·cto derive Delta. Never materializes masters.dkg2.Complaintlifecycle (dkg2/complaint.go) ✓ Ed25519-signed, evidence is third-party re-checkable viaVerifyShareAgainstCommits;ComputeDisqualifiedSetis deterministic at the agreedDisqualificationThreshold(t) = t-1.utils.ReconstructSecret(utils/utils.go:310) — exists as a debug helper, not called from any production code path. Single call site is thereshare_oracleKAT generator (test-only).reshare.Verify(reshare/reshare.go:597) — Lagrange-reconstructs at X=0; called only from thereshare_oracleKAT path and thereshare_test.goself-checks. Production resharing never invokes it.
10.2 Audit findings (all closed before v0.7.5 tag)
Finding 1 (medium → fixed v0.7.5): keyera.Bootstrap and
keyera.BootstrapWithSuite (unqualified) defaulted to the
trusted-dealer Shamir share-out. The v0.7.4 closure only flipped
Reanchor. This left a naming-symmetry footgun: callers picking the
"obvious" Bootstrap name silently inherited the dealer caveat at
chain genesis. Fix: v0.7.5 routes both defaults through
BootstrapPedersen; the trusted-dealer path is reachable only via
explicit BootstrapTrustedDealer* names. Loud-name invariant
restored.
Finding 2 (informational): keyera.Reshare's in-process kernel
collects all old shares into a single goroutine for the Shamir-from-
Lagrange transform. The kernel docstring is explicit (lines 254-258
of keyera/keyera.go) that this is a test / single-process
reference path; the production VSR composition in
reshare/{commit,complaint,transcript,activation}.go and
reshare/quasar_integration.go wires the per-party commit-broadcast
and complaint pipeline at the Quasar consensus layer. Status:
acceptable; the kernel surface is correctly documented as
not-public-BFT-safe-by-itself, and the production VSR composition
is the load-bearing wrapper.
Finding 3 (informational): utils.ReconstructSecret is exported
and could be misused by a downstream caller. Audit confirmed: no
production code path imports or calls it. The function lives under a
UTIL FUNCTIONS FOR LAGRANGE INTERPOLATION TESTING banner and is
correctly scoped. Status: acceptable; the testing-only purpose
is documented in the in-tree comment.
Finding 4 (informational): reshare.Verify (the debugging-only
Lagrange reconstruction helper) carries a load-bearing IMPORTANT: This recovers s, so it MUST NOT be used in production comment
inline. No production call site found. Status: acceptable.
10.3 Path (a) noise flooding — formula re-checked
pathANoiseParameters(n) returns σ = κ · σ_E · √n (κ=23,
σ_E=6.108) using math.Sqrt (stdlib; the v0.7.4 cleanup from the
in-tree Newton iteration). This matches Boschini-Takahashi-Tibouchi
2024/1113 §3.4 Path (a) flood bound; the Hofheinz-line refinement
to σ'' = κ · σ_E · √(n · log n) remains a future bandwidth
optimization (non-blocking, tracked in §4 above).
10.4 Identifiable abort — evidence is third-party verifiable
dkg2.Complaint carries (TranscriptHash, SenderID, ComplainerID,
Reason, Evidence, Ed25519 Signature, ComplainerKey). Any
non-participant validator that observes the cohort transcript +
complaint can:
- Re-verify the complainer's Ed25519 signature over
c.Bytes(). - Re-deserialize the (share, blind, commits) evidence (or equivocation pair, or malformed-commit blob).
- Re-run
dkg2.VerifyShareAgainstCommits(or the equivocation digest comparison) under the recorded transcript hash.
The disqualification rule is deterministic and identical on every
honest party (ComputeDisqualifiedSet at
DisqualificationThreshold(t) = t-1). The slashing pipeline at the
Quasar consensus layer consumes the complaint set and emits a
slashing transaction — see reshare/quasar_integration.go
§Slashing-Evidence for the wire format.
10.5 Sign-off chain
- v0.7.3: trusted-dealer caveat in
keyera.Bootstrapclosed via the newkeyera.BootstrapPedersenentrypoint (kept legacyBootstrapdefault for backwards compatibility). - v0.7.4: trusted-dealer caveat in
keyera.Reanchorclosed viakeyera.ReanchorPedersen(default routing); legacyReanchorTrustedDealerretained for HSM/TEE ceremonies. - v0.7.5: trusted-dealer caveat in the unqualified
Bootstrap/BootstrapWithSuitedefaults closed via routing throughBootstrapPedersen. Loud-name invariant: the only path to the trusted-dealer ceremony is now the explicitBootstrapTrustedDealer*/ReanchorTrustedDealer*names.
10.6 Audit conclusion — clean bill of health for v0.7.5
The final public-BFT audit (this addendum) finds zero remaining
reachable trusted-dealer assumption on any unqualified production
code path. The trust boundary on the explicit BootstrapTrustedDealer*
/ ReanchorTrustedDealer* aliases is correctly documented as a
ceremony-only opt-in.
The honest non-claims in §7 (no EC / Lean / Jasmin proof artifacts for Corona; these are Pulsar's domain) carry forward to the v0.7.0+ roadmap as before.
— Cryptographer, 2026-05-21 (final v0.7.5 public-BFT addendum)