2026-06-28 20:36:37 -07:00
<p align="center"><img src=".github/hero.svg" alt="crypto" width="880"></p>
2025-12-27 16:02:15 -08:00
# Lux Crypto
2025-07-26 04:17:07 -05:00
2025-12-27 16:02:15 -08:00
Cryptographic primitives for the Lux Network -- post-quantum signatures, key encapsulation, BLS aggregation, threshold signing, ring signatures, and EVM-compatible secp256k1.
2025-07-26 04:17:07 -05:00
2025-12-27 16:02:15 -08:00
```
2025-07-26 04:17:07 -05:00
go get github.com/luxfi/crypto
```
2025-12-27 16:02:15 -08:00
## Architecture
2025-07-26 04:17:07 -05:00
2025-12-27 16:02:15 -08:00
`luxfi/crypto` is the cryptographic foundation for all Lux software. It provides both classical and post-quantum primitives, with automatic CGO acceleration where available (blst for BLS, circl for lattice schemes). The pure-Go fallback path requires no C compiler.
2025-07-26 04:17:07 -05:00
2025-12-27 16:02:15 -08:00
### Post-Quantum (NIST FIPS 203/204/205)
| Package | Algorithm | Standard | Security | Key Sizes |
|---------|-----------|----------|----------|-----------|
2026-05-05 17:55:42 -07:00
| `mldsa/` | ML-DSA | FIPS 204 | 128/192/256-bit (Levels 2/3/5) | 44: 1312/2560 B, 65: 1952/4032 B, 87: 2592/4896 B |
| `mlkem/` | ML-KEM | FIPS 203 | 128/192/256-bit | 512: 800/1632 B, 768: 1184/2400 B, 1024: 1568/3168 B |
| `slhdsa/` | SLH-DSA (FIPS 205, formerly SPHINCS+) | FIPS 205 | 128/192/256-bit (12 variants) | SHA2/SHAKE, fast/small tradeoff |
2025-12-27 16:02:15 -08:00
| `pq/` | Unified PQ interface | -- | Wraps mldsa, mlkem, slhdsa | Mode selection at runtime |
ML-DSA and ML-KEM wrap Cloudflare's circl with ergonomic key serialization. SLH-DSA provides hash-based signatures as a conservative fallback (no lattice assumptions).
### Classical
| Package | Algorithm | Use |
|---------|-----------|-----|
| `bls/` | BLS12-381 (G1 keys, G2 signatures) | Consensus signatures, aggregation, proof-of-possession |
| `secp256k1/` | secp256k1 ECDSA | EVM transaction signing, Ethereum compatibility |
| `secp256r1/` | P-256 ECDSA | TLS, WebAuthn, FIDO2 |
| `ecies/` | ECIES (secp256k1) | Asymmetric encryption for Ethereum-compatible keys |
### Threshold and Multi-Party
| Package | Protocol | Use |
|---------|----------|-----|
| `threshold/` | Threshold signature framework | Interface + registry for pluggable threshold schemes |
| `threshold/bls/` | BLS threshold signatures | t-of-n BLS signing for consensus |
| `cggmp21/` | CGGMP21 (ECDSA threshold) | MPC key generation and signing, Paillier commitments |
### Advanced Constructions
| Package | Construction | Use |
|---------|-------------|-----|
| `ring/` | Ring signatures (LSAG + lattice-based) | Unlinkable signer anonymity |
| `lamport/` | Lamport one-time signatures | Hash-based PQ signatures (stateful) |
| `hpke/` | Hybrid Public Key Encryption | ML-KEM + X25519 hybrid, KEM factory |
| `kem/` | KEM abstraction | ML-KEM, X25519, hybrid combiner |
| `aead/` | AEAD ciphers | AES-256-GCM, ChaCha20-Poly1305 |
| `kdf/` | Key derivation | HKDF, SLIP-10 HD derivation |
| `verkle/` | Verkle tree commitments | State proof compression |
| `kzg4844/` | KZG commitments (EIP-4844) | Blob transaction proofs |
| `ipa/` | Inner product arguments | Verkle proof backend |
### Infrastructure
| Package | Purpose |
|---------|---------|
| `common/` | Address, Hash types (20-byte, 32-byte) |
| `hash/` , `hashing/` | Keccak256, SHA256, RIPEMD160, Blake2b |
| `rlp/` | RLP encoding (Ethereum wire format) |
| `cb58/` | CB58 encoding (Lux address format) |
| `cert/` | TLS certificate management for node identity |
| `signer/` | Transaction signing abstraction |
| `sign/` | Signature scheme registry |
| `secret/` | Secret-safe memory operations (zeroing, constant-time) |
| `address/` | Multi-chain address derivation |
| `gpu/` | GPU-accelerated modular arithmetic bindings |
| `bindings/` | C/Rust FFI exports |
## BLS Signatures
2025-07-26 04:17:07 -05:00
```go
2025-12-27 16:02:15 -08:00
import "github.com/luxfi/crypto/bls"
2025-07-26 04:17:07 -05:00
2025-12-27 16:02:15 -08:00
sk , _ := bls . NewSecretKey ()
2025-07-26 04:17:07 -05:00
pk := bls . PublicFromSecretKey ( sk )
2025-12-27 16:02:15 -08:00
sig := bls . Sign ( sk , [] byte ( "block hash" ))
valid := bls . Verify ( pk , sig , [] byte ( "block hash" ))
2025-07-26 04:17:07 -05:00
2025-12-27 16:02:15 -08:00
// Aggregation
aggSig , _ := bls . AggregateSignatures ( sig1 , sig2 , sig3 )
aggPK , _ := bls . AggregatePublicKeys ( pk1 , pk2 , pk3 )
valid = bls . Verify ( aggPK , aggSig , msg )
2025-07-26 04:17:07 -05:00
```
2025-12-27 16:02:15 -08:00
## Post-Quantum Signatures (ML-DSA)
2025-07-26 04:17:07 -05:00
```go
2025-12-27 16:02:15 -08:00
import "github.com/luxfi/crypto/mldsa"
2025-07-26 04:17:07 -05:00
2025-12-27 16:02:15 -08:00
sk , pk , _ := mldsa . GenerateKey ( mldsa . MLDSA87 ) // NIST Level 5
sig , _ := sk . Sign ( rand . Reader , data , nil )
valid := pk . VerifySignature ( data , sig )
2025-07-26 04:17:07 -05:00
```
2025-12-27 16:02:15 -08:00
## Post-Quantum Key Encapsulation (ML-KEM)
2025-07-26 04:17:07 -05:00
```go
2025-12-27 16:02:15 -08:00
import "github.com/luxfi/crypto/mlkem"
2025-07-26 04:17:07 -05:00
2025-12-27 16:02:15 -08:00
sk , pk , _ := mlkem . GenerateKey ( mlkem . MLKEM1024 ) // NIST Level 5
ciphertext , sharedSecret , _ := pk . Encapsulate ()
recovered , _ := sk . Decapsulate ( ciphertext )
// sharedSecret == recovered (32 bytes, use as AES key)
2025-07-26 04:17:07 -05:00
```
2025-12-27 16:02:15 -08:00
## Hybrid HPKE
2025-07-26 04:17:07 -05:00
```go
2025-12-27 16:02:15 -08:00
import "github.com/luxfi/crypto/hpke"
2025-07-26 04:17:07 -05:00
2025-12-27 16:02:15 -08:00
// ML-KEM-1024 + X25519 hybrid
suite := hpke . NewHybridSuite ()
enc , ct , _ := suite . Seal ( recipientPK , plaintext , aad )
pt , _ := suite . Open ( recipientSK , enc , ct , aad )
2025-07-26 04:17:07 -05:00
```
## Testing
```bash
2025-12-27 16:02:15 -08:00
go test ./... # 382 test functions
go test -bench= . ./... # benchmarks
2025-07-26 04:17:07 -05:00
```
2025-12-27 16:02:15 -08:00
Compiled test binaries are provided for quick verification:
- `bls.test` -- BLS signature tests
- `mldsa.test` -- ML-DSA tests
- `mlkem.test` -- ML-KEM tests
- `slhdsa.test` -- SLH-DSA tests
- `crypto.test` -- Core crypto tests
2025-07-26 04:17:07 -05:00
2025-12-27 16:02:15 -08:00
## Papers
2025-07-26 04:17:07 -05:00
2025-12-27 16:02:15 -08:00
- [Lux PQ Crypto Suite ](https://github.com/luxfi/papers/blob/main/lux-pq-crypto-suite.pdf ) -- parameter selection and security analysis for ML-DSA, ML-KEM, SLH-DSA
- [Lux Hybrid PQ Architecture ](https://github.com/luxfi/papers/blob/main/lux-hybrid-pq-architecture.pdf ) -- hybrid classical/PQ transition strategy
- [Lux Crypto Agility ](https://github.com/luxfi/papers/blob/main/lux-crypto-agility.pdf ) -- algorithm negotiation and migration framework
2026-05-05 17:55:42 -07:00
- [Lux Pulsar PQ ](https://github.com/luxfi/papers/blob/main/lux-corona-pq.pdf ) -- post-quantum ring signatures
2025-12-27 16:02:15 -08:00
- [Lux Universal Threshold Signatures ](https://github.com/luxfi/papers/blob/main/lux-universal-threshold-signatures.pdf ) -- multi-curve threshold framework
2025-07-26 04:17:07 -05:00
## References
2025-12-27 16:02:15 -08:00
- NIST FIPS 203: ML-KEM (Module-Lattice-Based Key-Encapsulation Mechanism)
- NIST FIPS 204: ML-DSA (Module-Lattice-Based Digital Signature Algorithm)
- NIST FIPS 205: SLH-DSA (Stateless Hash-Based Digital Signature Algorithm)
- [Cloudflare circl ](https://github.com/cloudflare/circl ) -- underlying lattice implementations
- [BLS12-381 ](https://hackmd.io/@benjaminion/bls12-381 ) -- pairing-friendly curve specification
## License
Lux Ecosystem License v1.2. See [LICENSE ](LICENSE ).