# SVP
Lattice sieving over the integers with arbitrary precision.
Includes the sampling algorithm described by [ \[GPV08\]](https://eprint.iacr.org/2007/432)
and the Gauss Seive described in [ \[MV10\]](https://eccc.weizmann.ac.il//report/2009/065/).
# Example
```rust
use svp::{nvec, Lattice, KleinSampler, GaussSieve};
// LLL/BKZ reduced basis
let mut b = vec![
nvec![-1, 0, 1, 0, 1, 0, 0, 0, -1, 1],
nvec![-2, 2, -1, 0, 2, 3, 0, 1, 0, -2],
nvec![-3, 1, -1, 1, 0, -4, -1, -2, 0, 0],
nvec![1, 6, 0, 0, 1, 0, 2, 0, 0, 2],
nvec![-2, 1, -4, -1, -1, 0, 0, 4, -3, 2],
nvec![1, 0, -5, -10, 4, -3, -2, 0, 3, 4],
nvec![5, 0, -4, 4, 6, -6, 0, 4, -9, -7],
nvec![4, 3, -2, -7, -2, 3, 0, -6, -12, -2],
nvec![1, 6, 0, 1, -3, 3, -15, 3, -1, 2],
nvec![0, 3, 11, -9, -5, -4, -3, 8, -1, -7],
];
// Precompute norms
for i in 0..b.len() {
b[i].norm = Some(&b[i] * &b[i]);
}
// Init lattice
let l = Lattice { basis: b.clone() };
// Compute Gram-Schmidt matrix
let gs = l.gso();
// Init sieve
let mut s = GaussSieve {
b: l,
k: KleinSampler::init(&gs, (gs.len() as f64).ln()),
l: vec![],
s: b.clone(),
};
// Start sieving
let short_vecs = s.sieve();
```