Commit Graph
299 Commits
Author SHA1 Message Date
zeekayandHanzo Dev 8ecaffc985 Build on Go 1.27
Build and vet clean on 1.27.1.

Co-authored-by: Hanzo Dev <[email protected]>
v1.11.4
2026-09-17 14:32:11 -07:00
zeekayandHanzo Dev 41d57d3c1e Threshold FHE moves to luxfi/threshold/protocols/tfhe
pkg/keycommit keeps what stays: a Shamir split, over the RFC 3526 Group-14
prime, of the SHA-256 commitment to a key. Its shares cannot decrypt, so
CommitKey and KeyCommitment replace GenerateSharedKey and KeyShare. fhed's
threshold mode follows the rename.

Co-authored-by: Hanzo Dev <[email protected]>
v1.11.3
2026-09-17 13:26:44 -07:00
zeekayandHanzo Dev ae4d4b538b go 1.26.8
One toolchain across the estate. The tree carried 1.26.0, .1, .3, .4 and .5
at once, so which compiler built a binary depended on which repo it came
from.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 23:59:11 -07:00
zeekayandHanzo Dev 2069385603 Give every package one version
Two thousand and twenty-one packages carried more than one spec across this
estate — eslint alone in a hundred and four forms — and a package resolved twice
is two copies at run time, which is how react-hook-form came to report "two
different types with this name" from files nobody had edited. None do now.

The number lives in the catalog: a manifest names the package, the workspace
names the version. Where a manifest cannot reach a catalog it still carries the
one version, because the table is the source either way.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-08 02:37:42 -07:00
zeekayandHanzo Dev 3c73ad2cd2 State a version once
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]>
2026-09-08 02:37:42 -07:00
zeekayandHanzo Dev 53134d77bd chore: symlink AGENTS.md + GEMINI.md + CLAUDE.md -> LLM.md
Co-authored-by: Hanzo Dev <[email protected]>
2026-09-03 15:46:39 -07:00
zeekay 0af9764f41 Pin past the versions the proxy can no longer serve
The 2026-07-15 retag moved these tags, so proxy.golang.org answers not-found, Go
falls through to direct, and the bytes GitHub serves now disagree with
sum.golang.org. The build stopped at a checksum before reaching a compiler.
Those versions can never verify again; moving past them is the repair.
2026-09-01 15:54:11 -07:00
zeekay 69293d9b04 docs: chain routes are /v1/chain
luxd serves chain APIs under one segment from constants.ChainAliasPrefix
(constants v1.6.4, node v1.36.181):

  /v1/bc/<alias>/...   -> /v1/chain/<alias>/...
  /ext/bc/<alias>/...  -> /v1/chain/<alias>/...

Observations keep their original addresses: a dated note or a recorded status
code is a fact about when it was written, not an instruction to follow.
2026-08-30 17:14:21 -07:00
zeekay 75d24fad24 Drop the Rust bindings
This repository's implementation is Go; the bindings existed to expose it to
Rust, which nothing here builds.
2026-08-27 14:46:20 -07:00
zeekay 14cb3e5bce Our CI, on the fleet this org runs 2026-08-27 13:52:37 -07:00
zeekay 831b19e634 Name the compiler torus in the component map
The map still called it concrete/. The EasyCrypt proofs keep the word: there
it means a concrete instantiation as opposed to an abstract one, which is
what the proofs are about.
2026-08-27 13:39:36 -07:00
zeekay 050c1024a7 Drop the vendor conference decks and a citation that no longer matches
The two PDFs are another company's slide decks, 12M of them, kept only so a
resources list could link to them. The CONCRETE entry had already had its
title rewritten, so it named a paper that does not exist under that name —
a citation that does not match the work it points at is not a citation.
2026-08-27 13:39:08 -07:00
zeekay 1d01129ca6 Stop tracking compiled binaries
They are build outputs that were committed and never ignored, so every
rebuild showed up as a change to review and each one rode in the pack.
2026-08-27 13:19:50 -07:00
zeekay 3719aa297e Merge remote-tracking branch 'origin/main'
# Conflicts:
#	.gitignore
#	LLM.md
#	bin/fhe-server
#	bin/fhe-server-cgo
#	bin/fhe-server-pure-go
#	compliance
#	docs/resources/README.md
#	fhe-gateway
#	go.mod
#	go.sum
#	marketmaker
#	proof
#	sdk/typescript/wasm/luxfhe.wasm
2026-08-27 13:19:33 -07:00
zeekay 3049a7bb45 Drop resource entries whose links no longer resolve
An earlier rename rewrote the org out of these URLs, leaving a bibliography
that pointed at github.com/luxfhe-ai — an account that does not exist — and
one link containing a space. They referenced talks and whitepapers we do not
host, so there is nothing here to repoint them at.
2026-08-27 13:08:36 -07:00
zeekay 8e70b9da1a Name the TFHE compiler Torus, and stop tracking built binaries
The component map still called the compiler concrete/. The six binaries
(69M) are build outputs that were committed and never ignored; they are
now ignored, so a rebuild no longer shows up as a change to review.

The bibliography entry in docs/resources keeps its title: CONCRETE is the
name of the paper being cited, and a citation that does not match the work
it points at is not a citation.
2026-08-27 12:49:10 -07:00
zooqueen e32a980a6b zero minio: database v1.21.5
No file here imports minio; it arrived through luxfi/[email protected].1, which
required hanzos3/go-sdk, whose `replace` redirect to our checksum forks Go
ignores outside a main module. database v1.21.5 requires hanzos3/go by name.

go directive held at 1.26.4. build passes.
v1.11.2
2026-08-10 21:57:42 -07:00
zeekayandHanzo Dev d5aca7da3d rpc: /ext/ -> /v1/ on our own hosts
luxd serves /v1/*; /ext/* 404s. Third-party chains keep their own paths.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-03 21:01:59 -07:00
zeekayandHanzo Dev 7ba9dbb1a9 deps: drop go.sum lines that disagree with the checksum log
These hashes were recorded from direct VCS fetches made while GOPRIVATE covered
github.com/luxfi/*, which switches off the module proxy and checksum
verification together. Tags moved afterwards, so what is written down here no
longer matches what sum.golang.org holds and the build refuses to verify.

proxy.golang.org still serves the originally-published bytes and those verify
against the log, so dropping only the disagreeing lines and re-tidying restores
a verified module graph with no version change. Lines that agree are untouched;
this is not a regenerated go.sum.

The failure followed the machine rather than the repository — the same commit
built wherever the module cache was clean. Any machine or CI runner that
fetched luxfi modules under the old GOPRIVATE holds the same poisoned entries.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-28 09:38:06 -07:00
zeekay 5645fe48c0 chore: sync working tree
Commits 1 outstanding change(s) that were sitting uncommitted.
No build artifacts and no secrets in the changeset (both checked).
2026-07-26 10:13:23 -07:00
zeekay e1a5c46623 fix(deps): repair the module graph + patch the AWS EventStream DoS
`go build ./...` failed with "missing go.sum entry for module providing
package" (ntt_simd.go) — the go.mod was out of sync with the imports, so
individual `go get`s just walk further down the chain; tidy is the fix.

Also patches the panic-driven denial of service in the AWS SDK for Go v2
EventStream decoder: eventstream v1.7.8, service/s3 v1.97.3 (minimum patched,
so the change carries the fix and nothing else).

Verified: go build ./... goes from exit 1 to exit 0.

go test ./... is 4 ok / 2 FAILING. Those 2 are not a regression here — the
packages could not compile before, so their tests never ran; repairing the
build makes pre-existing failures reachable. Stated explicitly rather than
reporting only the build fix, since a green build with red tests reads as
"done" when it is not.
2026-07-26 06:48:00 -07:00
zeekay 2f49d58fdf fix(deps): correct moved-tag hashes for luxfi modules in go.sum
Several luxfi versions carry TWO different contents across this workspace,
because published tags were moved instead of a new patch being cut:
[email protected], [email protected], [email protected], [email protected], [email protected].

Adjudicated before editing, since "checksum mismatch / SECURITY ERROR" is also
what a real supply-chain attack looks like. It is not one here: sum.golang.org
holds the OLD hash while proxy.golang.org and a direct fetch BOTH serve the same
NEW bytes. Two independent transports agreeing means nothing is rewriting
content in flight — the tag moved at source. The sumdb entry is a fossil:
GOPRIVATE covers github.com/luxfi/* with GOSUMDB=off, so our own modules never
consult the checksum DB and a moved tag splits consumers silently.

The old bytes are served by nothing now, so a stale pin can never build.
Corrected to the only content that exists, in BOTH line forms (h1: and
/go.mod h1:) — Go reports these one at a time, so a partial fix just relocates
the error.

Deliberately no `go mod tidy`: this changes no selected version, only the
recorded hash of versions already chosen.

Verified: `go list -m all` resolves with no checksum error.

The durable fix is upstream: never move a published tag, cut x.y.z+1 instead.
2026-07-26 02:47:39 -07:00
zeekay 9e396a634b chore(deps): bump geth v1.20.1 + luxfi deps — stack unification 2026-07-26 02:47:39 -07:00
zeekayandHanzo Dev bc40a09ce4 ci: run linux jobs on lux-build-amd64 ARC scale set (no GitHub-hosted builders)
Co-authored-by: Hanzo Dev <[email protected]>
2026-07-11 00:18:29 -07:00
zeekay 2e200648cf ci: run linux jobs on lux-build-amd64 ARC scale set (no GitHub-hosted builders) 2026-07-11 00:18:29 -07:00
zeekayandHanzo Dev 37bd1edca9 fix(deps): repair vanished pins / go.sum drift ( age@latest gosum-refresh) + build green
Co-authored-by: Hanzo Dev <[email protected]>
2026-06-30 13:56:20 -07:00
zeekayandHanzo Dev 0917b804bd fix(deps): repair vanished pins / go.sum drift ( age@latest gosum-refresh) + build green
Co-authored-by: Hanzo Dev <[email protected]>
v1.11.0 v1.10.0
2026-06-30 13:56:20 -07:00
zeekay 4dbdafd55f Merge branch 'audit/fchain-tfhe-threshold' 2026-06-30 13:56:02 -07:00
zeekay ef3caec9c2 Merge branch 'audit/fchain-tfhe-threshold' 2026-06-30 13:56:02 -07:00
zeekay 21b1763549 docs(brand): add hero banner 2026-06-28 20:37:30 -07:00
zeekay d8df8670c5 docs(brand): add hero banner 2026-06-28 20:37:30 -07:00
zeekay f306fc52e4 chore(brand): dynamic hero banner 2026-06-28 20:37:29 -07:00
zeekay fc97a0a54e chore(brand): dynamic hero banner 2026-06-28 20:37:29 -07:00
zeekay fd6ccc452a docs(threshold): decomplect the threshold-FHE package — one canonical path
Establish exactly one way to do each thing and fence off the legacy primitives:

- doc.go (new): package overview. DealerlessKeyGen is THE production keygen
  (dealerless); PartialDecryptLWE/CombineLWE is THE threshold decrypt
  (no-reconstruct); ShareLWESecretKey is a trusted-dealer test oracle only.
  Documents the F ⊥ M boundary (this package is FHE-only; MPC signing lives in
  luxfi/threshold) and the dealerless-bootstrap-key residual (homomorphic
  compute), stated honestly, not faked.

- keygen.go: re-document GenerateSharedKey. It is a TRUSTED-DEALER key-COMMITMENT
  VSS that shares the SHA-256 hash of the key — useful for verifiable-sharing
  audit, NOT usable for threshold decryption. Marked Deprecated for the keygen
  role; points to DealerlessKeyGen. Removes the misleading 'distributed key
  generation … for now we generate keys and split them' framing.

- partial_decrypt.go: label ShareLWESecretKey as TRUSTED-DEALER (retained as a
  KAT oracle); point to DealerlessKeyGen for production.

No behaviour change; kernel tests green.
2026-06-28 07:20:08 -07:00
zeekay bff96926ca docs(threshold): decomplect the threshold-FHE package — one canonical path
Establish exactly one way to do each thing and fence off the legacy primitives:

- doc.go (new): package overview. DealerlessKeyGen is THE production keygen
  (dealerless); PartialDecryptLWE/CombineLWE is THE threshold decrypt
  (no-reconstruct); ShareLWESecretKey is a trusted-dealer test oracle only.
  Documents the F ⊥ M boundary (this package is FHE-only; MPC signing lives in
  luxfi/threshold) and the dealerless-bootstrap-key residual (homomorphic
  compute), stated honestly, not faked.

- keygen.go: re-document GenerateSharedKey. It is a TRUSTED-DEALER key-COMMITMENT
  VSS that shares the SHA-256 hash of the key — useful for verifiable-sharing
  audit, NOT usable for threshold decryption. Marked Deprecated for the keygen
  role; points to DealerlessKeyGen. Removes the misleading 'distributed key
  generation … for now we generate keys and split them' framing.

- partial_decrypt.go: label ShareLWESecretKey as TRUSTED-DEALER (retained as a
  KAT oracle); point to DealerlessKeyGen for production.

No behaviour change; kernel tests green.
2026-06-28 07:20:08 -07:00
zeekay d231d73655 feat(threshold): dealerless trustless threshold-FHE keygen (no trusted dealer)
Closes the one trustless gap in the threshold-FHE stack. partial_decrypt.go
was already NO-RECONSTRUCT (the master secret s only ever appears masked behind
c_1·s), but ShareLWESecretKey assumed a TRUSTED DEALER: one process samples the
whole FHE secret key and Shamir-splits it. That instant of single-party custody
violates the trustless-by-default law (no dealer + no-reconstruct), the same
standard Corona/Pulsar/Magnetar are held to.

DealerlessKeyGen removes the dealer. GJKR/Pedersen DKG structure specialised to
the RLWE/LWE secret, composed with the audited Lattigo multiparty CKG:
  - each party samples its OWN contribution s_j; collective secret s = Σ s_j
    is never formed by any party or by this package;
  - collective LWE public key p = Σ(-a·s_j + e_j) = -a·s + e via lattice CKG
    (dealerless, format-identical to the library's pk);
  - t-of-n shares: each party coeff-wise Shamir-splits its OWN s_j; recipients
    sum sub-shares to a degree-(t-1) Shamir share of s — producing exactly the
    LWEShare type the proven PartialDecryptLWE/CombineLWE kernel consumes.

Per-party API (DealerlessParty.DealRound1/Aggregate, SampleDealerlessCRP,
AssembleCollectivePublicKey) for distributed deployment + a one-shot driver.
Wire types (PublicKeyShareMsg/SubShareMsg) carry only public/share data, never
a SecretKey. DRY: ShareLWESecretKey now reuses the shared dealing helpers.

Proven (dealerless_dkg_test.go, all green incl. -race, 3-of-5 PN11QP54):
  - E2E trustless lane: dealerless DKG → public-key encrypt → t-of-n partial
    decrypt → combine → correct plaintext (2-of-3, 3-of-5);
  - below-threshold (t-1) cannot decrypt;
  - no party holds s: two t-subsets reconstruct the same secret, no share == s;
  - CRP deterministic per consensus seed (validators converge), seed-bound;
  - transport carries no secret (reflect gate);
  - no-reconstruct structural gate (go/ast) over the keygen+decrypt surface,
    with a negative control proving the gate has teeth.

Scope: F-Chain confidential-DECRYPT lane (encryption key + t-of-n shares). The
dealerless FHEW bootstrap/eval key (homomorphic COMPUTE) is a separate
multiparty-FHEW protocol, documented as the residual — not faked here.
2026-06-28 07:20:07 -07:00
zeekay cbc1d6deef feat(threshold): dealerless trustless threshold-FHE keygen (no trusted dealer)
Closes the one trustless gap in the threshold-FHE stack. partial_decrypt.go
was already NO-RECONSTRUCT (the master secret s only ever appears masked behind
c_1·s), but ShareLWESecretKey assumed a TRUSTED DEALER: one process samples the
whole FHE secret key and Shamir-splits it. That instant of single-party custody
violates the trustless-by-default law (no dealer + no-reconstruct), the same
standard Corona/Pulsar/Magnetar are held to.

DealerlessKeyGen removes the dealer. GJKR/Pedersen DKG structure specialised to
the RLWE/LWE secret, composed with the audited Lattigo multiparty CKG:
  - each party samples its OWN contribution s_j; collective secret s = Σ s_j
    is never formed by any party or by this package;
  - collective LWE public key p = Σ(-a·s_j + e_j) = -a·s + e via lattice CKG
    (dealerless, format-identical to the library's pk);
  - t-of-n shares: each party coeff-wise Shamir-splits its OWN s_j; recipients
    sum sub-shares to a degree-(t-1) Shamir share of s — producing exactly the
    LWEShare type the proven PartialDecryptLWE/CombineLWE kernel consumes.

Per-party API (DealerlessParty.DealRound1/Aggregate, SampleDealerlessCRP,
AssembleCollectivePublicKey) for distributed deployment + a one-shot driver.
Wire types (PublicKeyShareMsg/SubShareMsg) carry only public/share data, never
a SecretKey. DRY: ShareLWESecretKey now reuses the shared dealing helpers.

Proven (dealerless_dkg_test.go, all green incl. -race, 3-of-5 PN11QP54):
  - E2E trustless lane: dealerless DKG → public-key encrypt → t-of-n partial
    decrypt → combine → correct plaintext (2-of-3, 3-of-5);
  - below-threshold (t-1) cannot decrypt;
  - no party holds s: two t-subsets reconstruct the same secret, no share == s;
  - CRP deterministic per consensus seed (validators converge), seed-bound;
  - transport carries no secret (reflect gate);
  - no-reconstruct structural gate (go/ast) over the keygen+decrypt surface,
    with a negative control proving the gate has teeth.

Scope: F-Chain confidential-DECRYPT lane (encryption key + t-of-n shares). The
dealerless FHEW bootstrap/eval key (homomorphic COMPUTE) is a separate
multiparty-FHEW protocol, documented as the residual — not faked here.
2026-06-28 07:20:07 -07:00
zeekayandGitHub 7e2ee10738 chore: bump luxfi/database v1.19.3 (#8)
Co-authored-by: zeekay <[email protected]>
2026-06-25 15:24:32 -07:00
zeekayandGitHub 7bd19686b5 chore: bump luxfi/database v1.19.3 (#8)
Co-authored-by: zeekay <[email protected]>
2026-06-25 15:24:32 -07:00
zeekay 204debeb8d go: 1.26.3 → 1.26.4 (security: crypto/x509, mime, net/textproto) 2026-06-06 22:05:26 -07:00
zeekay d4388a95ff go: 1.26.3 → 1.26.4 (security: crypto/x509, mime, net/textproto) 2026-06-06 22:05:26 -07:00
zeekay a5ad3bf723 WIP: session checkpoint 2026-06-05 (codec rip in flight) 2026-06-05 15:36:01 -07:00
zeekay 3cf8505cbf WIP: session checkpoint 2026-06-05 (codec rip in flight) 2026-06-05 15:36:01 -07:00
zooqueenandHanzo Dev 5d44c2293f fhe/easycrypt: port TFHE proofs to current EasyCrypt
require import Bool ('^^' xor scope); reproved chained_pbs_correctness and the
PBS-chain noise-budget induction (last_ind/foldl_rcons); fixed threshold-DKG
correctness rewrites.

Verified: all check under easycrypt (z3 + alt-ergo), 0 admits. Part of the
41/41 EasyCrypt corpus that now checks against the current EC build. Added
modeling axioms are trusted-base only (non-negativity, group right-identity,
byte-decode/CT-leakage specs in the same vein as pre-existing primitive
axioms) — no security conclusion assumed, no lemma weakened.

Co-authored-by: Hanzo Dev <[email protected]>
2026-06-02 11:33:51 -07:00
zooqueenandHanzo Dev 596dc77b23 fhe/easycrypt: port TFHE proofs to current EasyCrypt
require import Bool ('^^' xor scope); reproved chained_pbs_correctness and the
PBS-chain noise-budget induction (last_ind/foldl_rcons); fixed threshold-DKG
correctness rewrites.

Verified: all check under easycrypt (z3 + alt-ergo), 0 admits. Part of the
41/41 EasyCrypt corpus that now checks against the current EC build. Added
modeling axioms are trusted-base only (non-negativity, group right-identity,
byte-decode/CT-leakage specs in the same vein as pre-existing primitive
axioms) — no security conclusion assumed, no lemma weakened.

Co-authored-by: Hanzo Dev <[email protected]>
2026-06-02 11:33:51 -07:00
zeekay 5aab06bfe3 merge: feat/threshold-partial-decrypt 2026-06-01 16:34:31 -07:00
zeekay dfbaec7dba merge: feat/threshold-partial-decrypt 2026-06-01 16:34:31 -07:00
zeekay 07d0859d2b merge: feat/lp-137-types 2026-06-01 16:34:30 -07:00
zeekay 5432a19e6c merge: feat/lp-137-types 2026-06-01 16:34:30 -07:00
zeekay ac15d6a0bd docs(workshop): point at luxfhe/torus (backend org) instead of luxfi/torus
All FHE backend infrastructure (Torus compiler, ML SDK, TFHE runtime,
KMS, FHEVM) lives under the luxfhe org. luxfi/* repos are reserved for
the Lux-blockchain integrated surfaces (precompiles, coprocessor, core
FHE Go library).
2026-05-29 14:18:22 -07:00