Expand description
A Rust implementation of the (basic) Lenstra-Lenstra-Lovasz lattice reduction algorithm
§Introduction
lll-rs
is an implementation of the Lenstra-Lenstra-Lovász lattice basis reduction
algorithm in Rust as well as the implementation of an improved version, the L² algorithm.
The library comes with a set of simple helpers to create vectors and matrices to perform
lattice basis reduction.
§Examples
use lll_rs::{
l2::{bigl2, l2f},
lll::{biglll, lllf},
matrix::Matrix,
vector::{BigVector, VectorF},
};
use rug::{Integer,Assign};
// Init the matrix with Integer
let mut basis: Matrix<BigVector> = Matrix::init(3, 4);
// Populate the matix
basis[0] = BigVector::from_vector(vec![
Integer::from(1) << 100000,
Integer::from(0),
Integer::from(0),
Integer::from(1345),
]);
basis[1] = BigVector::from_vector(vec![
Integer::from(0),
Integer::from(1),
Integer::from(0),
Integer::from(35),
]);
basis[2] = BigVector::from_vector(vec![
Integer::from(0),
Integer::from(0),
Integer::from(1),
Integer::from(154),
]);
// Perfom the LLL basis redution
biglll::lattice_reduce(&mut basis);
// OR
// Perfom the LLL basis redution
// Specify the delta and eta coefficient for the reduction
bigl2::lattice_reduce(&mut basis, 0.5005, 0.999);