mirror of
https://github.com/hanzo-docs/docs.git
synced 2026-10-29 07:01:44 +00:00
A version written into a manifest is written into every manifest that wants it, which is how eslint came to exist in a hundred and four forms across this estate and how a package came to resolve twice at run time. The catalog moves the number out of the manifest: a manifest names the package, the workspace names the version. Four are held below their latest because the newer release cannot be used, and the reason is recorded rather than the version alone: @noble/hashes 2 renamed every subpath the web3 stack imports, @splinetool/runtime 2 depends on a package that was never published, @dynamic-labs 5.4.1 the same, and react-resizable-panels 3 points its types condition at the bundle. Co-authored-by: Hanzo Dev <[email protected]>
301 lines
14 KiB
TypeScript
301 lines
14 KiB
TypeScript
import Link from 'next/link';
|
|
import { ArrowRight, ExternalLink, BookOpen } from 'lucide-react'
|
|
import { Github } from '@hanzo/ui/brands';
|
|
|
|
export default function HomePage() {
|
|
return (
|
|
<main className="min-h-screen">
|
|
{/* Hero */}
|
|
<section className="relative border-b border-fd-border overflow-hidden">
|
|
<div className="absolute inset-0 bg-gradient-to-b from-fd-primary/5 to-transparent pointer-events-none" />
|
|
<div className="relative mx-auto max-w-4xl px-6 py-24 md:py-36 text-center">
|
|
<div className="inline-flex items-center rounded-full border border-fd-border px-4 py-1.5 text-xs text-fd-muted-foreground mb-8 font-mono">
|
|
NIST MPTC submission package
|
|
</div>
|
|
<h1 className="text-5xl md:text-7xl font-bold tracking-tight mb-6 leading-none">
|
|
Pulsar
|
|
</h1>
|
|
<p className="text-lg md:text-xl text-fd-muted-foreground max-w-2xl mx-auto mb-4 leading-relaxed">
|
|
Threshold ML-DSA-65.
|
|
</p>
|
|
<p className="text-base md:text-lg text-fd-muted-foreground max-w-3xl mx-auto mb-12 leading-relaxed">
|
|
A 2-round threshold signing and DKG system whose per-party-aggregated
|
|
signature is bit-identical to a single-party FIPS 204 ML-DSA
|
|
signature on the same message and group public key.
|
|
</p>
|
|
<div className="flex flex-col sm:flex-row gap-4 justify-center mb-8">
|
|
<Link
|
|
href="/docs"
|
|
className="inline-flex items-center justify-center gap-2.5 rounded-2xl bg-fd-primary px-8 py-4 text-base font-semibold text-fd-primary-foreground hover:opacity-90 transition shadow-lg"
|
|
>
|
|
<BookOpen className="h-5 w-5" />
|
|
Read the docs
|
|
</Link>
|
|
<a
|
|
href="https://github.com/luxfi/pulsar"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className="inline-flex items-center justify-center gap-2.5 rounded-2xl border border-fd-border bg-fd-background px-8 py-4 text-base font-semibold hover:bg-fd-muted transition"
|
|
>
|
|
<Github className="h-5 w-5" />
|
|
luxfi/pulsar
|
|
</a>
|
|
</div>
|
|
<p className="text-sm text-fd-muted-foreground">
|
|
Apache-2.0 · Module-LWE · targeting NIST MPTC Class N1 + N4
|
|
</p>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Headline claim */}
|
|
<section className="mx-auto max-w-5xl px-6 py-20">
|
|
<div className="grid md:grid-cols-3 gap-8">
|
|
<FactCard
|
|
label="Output interchange"
|
|
title="Byte-equal to FIPS 204"
|
|
body="Every signature produced by a Pulsar threshold ceremony verifies under unmodified FIPS 204 ML-DSA.Verify — same wire bytes, no verifier changes."
|
|
/>
|
|
<FactCard
|
|
label="Trust footprint"
|
|
title="22 named axioms"
|
|
body="17 narrow implementation-refinement axioms (14 byte-walk + 1 codec round-trip + 2 honest-execution no-reject) plus 5 Lean-bridged algebraic axioms. Zero admits across 13 EasyCrypt files."
|
|
/>
|
|
<FactCard
|
|
label="Side channels"
|
|
title="Jasmin-CT blocking"
|
|
body="Threshold layer (round1, round2, combine) is constant-time clean under the verified Jasmin compiler. libjade single-party ML-DSA-65 baseline is pinned."
|
|
/>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Quick navigation */}
|
|
<section className="border-t border-fd-border bg-fd-muted/30">
|
|
<div className="mx-auto max-w-5xl px-6 py-20">
|
|
<div className="text-center mb-12">
|
|
<h2 className="text-3xl font-bold tracking-tight mb-3">Start here</h2>
|
|
<p className="text-fd-muted-foreground">
|
|
The docs are sourced from the pulsar repository at HEAD.
|
|
</p>
|
|
</div>
|
|
<div className="grid sm:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
<NavCard
|
|
href="/docs/getting-started"
|
|
title="Getting started"
|
|
body="Install the Go reference, sign with a single party, then run a 3-of-5 threshold ceremony locally."
|
|
/>
|
|
<NavCard
|
|
href="/docs/protocol/overview"
|
|
title="Protocol"
|
|
body="2-round threshold sketch, system model, FIPS 204 relationship, Pedersen DKG, parameter sets."
|
|
/>
|
|
<NavCard
|
|
href="/docs/proofs/overview"
|
|
title="Proofs"
|
|
body="EasyCrypt theories, Lean Mathlib bridge, byte-walk extraction roadmaps, the 22-axiom inventory."
|
|
/>
|
|
<NavCard
|
|
href="/docs/reference/api"
|
|
title="Reference"
|
|
body="Go API surface, KAT format, interoperability harness against cloudflare/circl and pq-crystals."
|
|
/>
|
|
<NavCard
|
|
href="/docs/security"
|
|
title="Security"
|
|
body="Disclosure policy, in-scope vs out-of-scope findings, CVE assignment, MPTC public analysis."
|
|
/>
|
|
<NavCard
|
|
href="/docs/nist-mptc"
|
|
title="NIST MPTC"
|
|
body="Cover sheet: what NIST receives, target dates (2026-Jul-20 preview, 2026-Nov-16 submission), how to evaluate."
|
|
/>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Why */}
|
|
<section className="mx-auto max-w-5xl px-6 py-20">
|
|
<div className="text-center mb-12">
|
|
<h2 className="text-3xl font-bold tracking-tight mb-3">Why threshold ML-DSA</h2>
|
|
</div>
|
|
<div className="space-y-6 max-w-3xl mx-auto text-fd-muted-foreground leading-relaxed">
|
|
<p>
|
|
NIST FIPS 204 (ML-DSA) is the only NIST-approved post-quantum
|
|
digital signature in 2026. Threshold variants are not yet
|
|
standardized; NIST's Multi-Party Threshold Cryptography project is
|
|
collecting them now (IR 8214C, January 2026), with the first call
|
|
package deadline expected 2026-Nov-16.
|
|
</p>
|
|
<p>
|
|
Pulsar enters that process with a credible, output-interchangeable
|
|
threshold ML-DSA candidate. The 2-round protocol skeleton is the
|
|
same one Lux ships in production for Ring-LWE in luxfi/corona,
|
|
retargeted to ML-DSA's polynomial-vector algebra. The resulting
|
|
per-party-aggregated signature (under the v0.3 algebraic
|
|
aggregator) is bit-identical to a single-party FIPS 204 ML-DSA
|
|
signature on the same message and public key.
|
|
</p>
|
|
<p className="text-fd-foreground font-medium">
|
|
The win, if Pulsar's Sign output is byte-equal to FIPS 204 Sign:
|
|
threshold-produced signatures verify under unmodified FIPS 204
|
|
verifiers, existing FIPS-validated ML-DSA modules consume Pulsar
|
|
certs without code changes, and the threshold layer can be
|
|
Class-N-claimed at NIST without a parallel algorithm standardization
|
|
track.
|
|
</p>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Repository tour */}
|
|
<section className="border-t border-fd-border bg-fd-muted/30">
|
|
<div className="mx-auto max-w-5xl px-6 py-20">
|
|
<div className="text-center mb-10">
|
|
<h2 className="text-3xl font-bold tracking-tight mb-3">What ships in the submission</h2>
|
|
<p className="text-fd-muted-foreground">
|
|
The pulsar repository is the single canonical home for the
|
|
submission: code, spec, proofs, KAT, tarball-cut tooling.
|
|
</p>
|
|
</div>
|
|
<div className="rounded-xl border border-fd-border bg-fd-background overflow-hidden">
|
|
<table className="w-full text-sm">
|
|
<thead className="bg-fd-muted/50 border-b border-fd-border">
|
|
<tr>
|
|
<th className="text-left px-4 py-3 font-semibold">Element</th>
|
|
<th className="text-left px-4 py-3 font-semibold">Location</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody className="divide-y divide-fd-border">
|
|
<RepoRow element="Technical specification" path="spec/pulsar.{tex,pdf}" />
|
|
<RepoRow element="Reference implementation (Go)" path="ref/go/pkg/pulsar/" />
|
|
<RepoRow element="KAT vectors" path="vectors/{dkg,keygen,sign,threshold-sign,verify}.json" />
|
|
<RepoRow element="Class N1 interop harness" path="test/interoperability/n1_class_test.go" />
|
|
<RepoRow element="EasyCrypt theories (13 files)" path="proofs/easycrypt/" />
|
|
<RepoRow element="Lean ↔ EC bridge" path="proofs/lean-easycrypt-bridge.md" />
|
|
<RepoRow element="Jasmin sources" path="jasmin/threshold/{round1,round2,combine}.jazz" />
|
|
<RepoRow element="Constant-time evidence" path="ct/dudect/" />
|
|
<RepoRow element="Lattice estimator scripts" path="estimator/" />
|
|
<RepoRow element="Benchmark harness" path="bench/" />
|
|
<RepoRow element="Per-push gate orchestrator" path="scripts/check-high-assurance.sh" />
|
|
<RepoRow element="Tarball cut tool" path="scripts/cut-submission.sh" />
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Footer */}
|
|
<section className="border-t border-fd-border">
|
|
<div className="mx-auto max-w-6xl px-6 py-12">
|
|
<div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-8 mb-10">
|
|
<div className="lg:col-span-2">
|
|
<div className="text-lg font-bold mb-3">Pulsar</div>
|
|
<p className="text-sm text-fd-muted-foreground mb-4 max-w-md">
|
|
Threshold ML-DSA-65 by Lux Industries. Apache-2.0. Targeting
|
|
NIST MPTC Class N1 (signing) + N4 (key generation).
|
|
</p>
|
|
<div className="flex gap-4 text-sm">
|
|
<a
|
|
href="https://github.com/luxfi/pulsar"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className="text-fd-muted-foreground hover:text-fd-foreground inline-flex items-center gap-1"
|
|
>
|
|
<Github className="h-3.5 w-3.5" /> luxfi/pulsar
|
|
</a>
|
|
<a
|
|
href="https://github.com/luxfi/corona"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
className="text-fd-muted-foreground hover:text-fd-foreground inline-flex items-center gap-1"
|
|
>
|
|
<ExternalLink className="h-3.5 w-3.5" /> luxfi/corona (R-LWE sibling)
|
|
</a>
|
|
</div>
|
|
</div>
|
|
<FooterColumn
|
|
title="Read"
|
|
links={[
|
|
{ text: 'Getting started', href: '/docs/getting-started' },
|
|
{ text: 'Protocol overview', href: '/docs/protocol/overview' },
|
|
{ text: 'API reference', href: '/docs/reference/api' },
|
|
{ text: 'KAT format', href: '/docs/reference/kat' },
|
|
]}
|
|
/>
|
|
<FooterColumn
|
|
title="Audit"
|
|
links={[
|
|
{ text: 'Axiom inventory', href: '/docs/proofs/axiom-inventory' },
|
|
{ text: 'Lean ↔ EC bridge', href: '/docs/proofs/lean-bridge' },
|
|
{ text: 'Security policy', href: '/docs/security' },
|
|
{ text: 'NIST MPTC cover', href: '/docs/nist-mptc' },
|
|
]}
|
|
/>
|
|
</div>
|
|
<div className="flex flex-wrap items-center justify-between gap-4 border-t border-fd-border pt-6 text-xs text-fd-muted-foreground">
|
|
<span>© 2026 Lux Industries, Inc. Apache-2.0.</span>
|
|
<div className="flex gap-4">
|
|
<a href="https://github.com/luxfi/pulsar/blob/main/LICENSE" target="_blank" rel="noopener noreferrer" className="hover:text-fd-foreground">License</a>
|
|
<a href="https://github.com/luxfi/pulsar/blob/main/SECURITY.md" target="_blank" rel="noopener noreferrer" className="hover:text-fd-foreground">Security</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
);
|
|
}
|
|
|
|
function FactCard({ label, title, body }: { label: string; title: string; body: string }) {
|
|
return (
|
|
<div className="rounded-xl border border-fd-border bg-fd-background p-6">
|
|
<div className="text-[10px] font-semibold tracking-widest uppercase text-fd-primary mb-2">
|
|
{label}
|
|
</div>
|
|
<h3 className="text-lg font-bold mb-3">{title}</h3>
|
|
<p className="text-sm text-fd-muted-foreground leading-relaxed">{body}</p>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
function NavCard({ href, title, body }: { href: string; title: string; body: string }) {
|
|
return (
|
|
<Link
|
|
href={href}
|
|
className="group rounded-xl border border-fd-border bg-fd-background p-5 hover:bg-fd-muted/30 transition block"
|
|
>
|
|
<div className="flex items-start justify-between mb-2">
|
|
<h3 className="font-semibold">{title}</h3>
|
|
<ArrowRight className="h-4 w-4 text-fd-muted-foreground group-hover:translate-x-1 transition-transform" />
|
|
</div>
|
|
<p className="text-sm text-fd-muted-foreground leading-relaxed">{body}</p>
|
|
</Link>
|
|
);
|
|
}
|
|
|
|
function RepoRow({ element, path }: { element: string; path: string }) {
|
|
return (
|
|
<tr>
|
|
<td className="px-4 py-2.5">{element}</td>
|
|
<td className="px-4 py-2.5 font-mono text-xs text-fd-muted-foreground">{path}</td>
|
|
</tr>
|
|
);
|
|
}
|
|
|
|
function FooterColumn({ title, links }: { title: string; links: { text: string; href: string }[] }) {
|
|
return (
|
|
<div>
|
|
<h4 className="font-semibold text-sm mb-3">{title}</h4>
|
|
<ul className="space-y-2">
|
|
{links.map((link) => (
|
|
<li key={link.text}>
|
|
<Link
|
|
href={link.href}
|
|
className="text-sm text-fd-muted-foreground hover:text-fd-foreground transition"
|
|
>
|
|
{link.text}
|
|
</Link>
|
|
</li>
|
|
))}
|
|
</ul>
|
|
</div>
|
|
);
|
|
}
|