mirror of
https://github.com/luxfi/crypto.git
synced 2026-07-27 01:54:50 +00:00
ed25519: documents RFC 8032 byte-equal Metal verify kernel (100 vectors) + N_threshold = 256 on M1 Max with 26.7x speedup at N=4096 vs equivalent- shape CPU port. dGPU CUDA port pending in lux/crypto/ed25519/gpu/cuda/. mldsa: documents structural-skeleton M1 kernel + dGPU residual. Per-thread serial work on Apple Silicon (~122 us SHAKE256-dominated) vs ~42 us NEON narrows expected M1 wall-clock speedup to ~7x at N=4096; CUDA H100/Ada closes that gap (~33x ceiling). mlkem: same shape as mldsa, ~75 us per-thread Metal vs ~26 us NEON. SHA3/SHAKE256 chains are the M1 ceiling; dGPU port closes it.
ML-DSA (Module-Lattice Digital Signature Algorithm) for Lux
FIPS 204 compliant implementation of ML-DSA (formerly known as CRYSTALS-Dilithium) post-quantum signatures.
Overview
This package provides both pure Go and CGO implementations of ML-DSA, offering quantum-resistant digital signatures for the Lux blockchain ecosystem.
Security Levels
-
ML-DSA-44 (Dilithium2): NIST Level 2 security
- Public key: 1,312 bytes
- Private key: 2,560 bytes
- Signature: 2,420 bytes
-
ML-DSA-65 (Dilithium3): NIST Level 3 security (recommended)
- Public key: 1,952 bytes
- Private key: 4,032 bytes
- Signature: 3,309 bytes
-
ML-DSA-87 (Dilithium5): NIST Level 5 security
- Public key: 2,592 bytes
- Private key: 4,896 bytes
- Signature: 4,627 bytes
Features
- Dual Implementation: Pure Go (via Cloudflare CIRCL) and optimized C (via pq-crystals/dilithium)
- FIPS 204 Compliant: Follows the NIST ML-DSA standard
- Automatic Fallback: Uses CGO when available, falls back to pure Go
- Full Test Coverage: Comprehensive tests including cross-compatibility
Building
Pure Go (default)
go build ./...
With CGO support
# Build the C library first
cd c
make
# Then build with CGO enabled
CGO_ENABLED=1 go build ./...
Building all security levels
./build.sh
Usage
import "github.com/luxfi/lux/crypto/mldsa"
// Generate key pair (ML-DSA-65 recommended)
priv, err := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65)
if err != nil {
panic(err)
}
// Sign a message
message := []byte("Hello, post-quantum world!")
signature, err := priv.Sign(rand.Reader, message, nil)
if err != nil {
panic(err)
}
// Verify signature
valid := priv.PublicKey.Verify(message, signature)
fmt.Printf("Signature valid: %v\n", valid)
// Use CGO implementation if available
if mldsa.UseCGO() {
privCGO, _ := mldsa.GenerateKeyCGO(rand.Reader, mldsa.MLDSA65)
sigCGO, _ := mldsa.SignCGO(privCGO, rand.Reader, message, nil)
validCGO := mldsa.VerifyCGO(&privCGO.PublicKey, message, sigCGO)
fmt.Printf("CGO signature valid: %v\n", validCGO)
}
Integration with Lux
This implementation is designed to integrate with:
- C-Chain: EVM precompiled contracts for ML-DSA verification
- X-Chain: UTXO-based transactions with post-quantum signatures
- P-Chain: Validator staking with quantum-resistant keys
Performance
Benchmark results (M1 Pro):
BenchmarkMLDSAKeyGen/ML-DSA-44-Go 500 2.1 ms/op
BenchmarkMLDSAKeyGen/ML-DSA-44-CGO 1000 1.3 ms/op
BenchmarkMLDSAKeyGen/ML-DSA-65-Go 300 3.8 ms/op
BenchmarkMLDSAKeyGen/ML-DSA-65-CGO 500 2.4 ms/op
BenchmarkMLDSAKeyGen/ML-DSA-87-Go 200 5.2 ms/op
BenchmarkMLDSAKeyGen/ML-DSA-87-CGO 300 3.5 ms/op
BenchmarkMLDSASign/ML-DSA-44-Go 1000 1.1 ms/op
BenchmarkMLDSASign/ML-DSA-44-CGO 2000 0.6 ms/op
BenchmarkMLDSASign/ML-DSA-65-Go 500 2.3 ms/op
BenchmarkMLDSASign/ML-DSA-65-CGO 1000 1.4 ms/op
BenchmarkMLDSASign/ML-DSA-87-Go 300 3.8 ms/op
BenchmarkMLDSASign/ML-DSA-87-CGO 500 2.2 ms/op
BenchmarkMLDSAVerify/ML-DSA-44-Go 2000 0.5 ms/op
BenchmarkMLDSAVerify/ML-DSA-44-CGO 3000 0.3 ms/op
BenchmarkMLDSAVerify/ML-DSA-65-Go 1000 0.9 ms/op
BenchmarkMLDSAVerify/ML-DSA-65-CGO 2000 0.6 ms/op
BenchmarkMLDSAVerify/ML-DSA-87-Go 500 1.5 ms/op
BenchmarkMLDSAVerify/ML-DSA-87-CGO 1000 0.9 ms/op
CGO implementation provides ~40% performance improvement.
Testing
# Run all tests
go test ./...
# Run with CGO
CGO_ENABLED=1 go test ./...
# Run benchmarks
go test -bench=. ./...
# Test C library directly
cd c && make test
Security Considerations
- Quantum Resistance: Secure against attacks by quantum computers
- Side-Channel Protection: Implementation includes countermeasures
- Deterministic Signatures: No randomness required for signing (uses deterministic nonce)
- Key Storage: Larger keys require secure storage solutions
References
- NIST FIPS 204: Module-Lattice-Based Digital Signature Standard
- pq-crystals/dilithium: Reference implementation
- Cloudflare CIRCL: Pure Go implementation
License
Copyright (C) 2025, Lux Industries Inc. All rights reserved.