g6k-rs
is a research-oriented Rust library for lattice reduction, enumeration, and sieving on CPUs, Apple Metal, and NVIDIA CUDA.
The crate includes floating-point and arbitrary-precision reduction, exact invariant checks, deterministic examples, and optional GPU backends. It is an experimental implementation: APIs may change, and it has not been audited for use in production cryptographic systems.
The quickest path uses only the portable floating-point feature set:
git clone https://github.com/ovasylenko/g6k-rs.git
cd g6k-rs
./scripts/quickstart.sh
The script runs a deterministic LLL/BKZ example and verifies its determinant invariant. The first build compiles dependencies and therefore takes longer than subsequent runs.
Add the crate to a Rust project with:
[dependencies]
g6k-rs = "0.1"
js
use g6k_rs::{LLLParams, LatticeBasis, lll_reduce};
let mut basis = LatticeBasis::from_rows(vec![
vec![1.0, 1.0],
vec![-1.0, 2.0],
]);
lll_reduce(&mut basis, &LLLParams::default()).unwrap();
The default build enables arbitrary-precision support through the mpz
feature. Set default-features = false
for the floating-point API only.
- Floating-point LLL, BKZ, deep insertion, slide reduction, and self-dual reduction.
- Babai-style CVP, pruned enumeration, rerandomized enumeration, and pruning profile optimization.
- BDGL, BGJ1, and HK3-style lattice sieves with deterministic CPU and parallel paths.
- Arbitrary-precision lattice arithmetic and reduction through
rug
/GMP/MPFR. - Optional Metal and CUDA sieve, enumeration, and Seysen-conditioning paths.
- Exact or independently recomputed checks for determinant preservation, coordinate reconstruction, integral output, and returned candidate norms.
See the examples guide for task-oriented snippets and project status for maturity and limitations.
The name describes the project's goal: exploring a Rust implementation of the lattice-reduction and sieving problem space associated with the General Sieve Kernel. It is not an official port, release, or drop-in replacement for fplll/G6K.
| Project | Primary interface | Focus |
|---|---|---|
g6k-rs |
||
| Rust library | Rust APIs, exact checks, CPU/Metal/CUDA experiments | |
fplllNo claim is made that g6k-rs
is faster, more complete, or a compatible replacement. Read PROVENANCE.md before redistributing or relicensing the project.
cargo test --no-default-features
cargo test
cargo fmt --check
cargo clippy --all-targets -- -D warnings
The last locally observed default-platform run completed 1,813 tests with no failures; ignored tests include slow probes and hardware-dependent paths. That number is a development reference, not a substitute for the current CI result. GPU tests require the corresponding feature, toolchain, and device.
metal-gpu
(macOS): Metal sieve kernels, GPU Seysen conditioning, and Metal-backed reduction entry points.metal-fp16
: experimental half-precision database storage on top ofmetal-gpu
.cuda-gpu
(Linux/NVIDIA): CUDA sieve, enumeration, and Seysen kernels. The build requiresnvcc
; setG6K_CUDA_ARCH
to the target architecture, such assm_89
.
Use the GPU testing guide for build and validation commands. Hardware measurements and the rules for making performance claims live in BENCHMARKING.md.
Examples— how to use each major workflow.Status and limitations— what is stable, experimental, or hardware-dependent.Benchmarking— reproducible commands and historical measurements.Provenance— independent-authorship statement, research sources, and contribution policy.Algorithm and paper map— fidelity notes for research modules.Contributing— required checks and evidence standards.
Licensed under either the Apache License 2.0 or the MIT License, at your option.
Maintainer: Oleksii Vasylenko
(hello@ovasylenko.com
).