[][src]Crate lll_rs

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);

Modules

l2

The L² algorithm [LLL25]

lll

The Lenstra-Lenstra-Lovasz algorithm [LLL82]

matrix

Basic matrix structure for LLL

vector

Basic vector structures for LLL