BLASter is a proof of concept of an LLL-like lattice reduction algorithm that uses:
- parallelization,
 - segmentation,
 - Seysen's reduction instead of size reduction, and
 - a linear algebra library.
 
The goal of this software is to showcase speed ups that are possible in lattice reduction software. This software is a proof of concept!
In particular, we do not:
- guarantee the algorithm terminates, nor claim its output is correct on all lattices,
 - support lattices with large entries,
 - consider issues / PRs that improve efficiency or robustness,
 - actively maintain this software.
 
We do:
- happily answer any questions to explain design choices phrased as: "Why is X done in Y way?". The answer may, in many cases, be: "because it is faster in practice".
 - encourage the cryptographic community to build a new robust lattice reduction library incorporating the ideas in this proof of concept.
 
- python3
 - Cython version 3.0 or later
 - Python modules: 
cysignals numpy setuptools matplotlib(installed system-wide or locally throughmake venv) - The Eigen library version 3 or later (installed system-wide or locally through 
make eigen3) 
Optional:
- Python module: virtualenv or venv (for creating a local virtual environment to install python3 modules).
 - fplll (for generating q-ary lattices with the 
latticegencommand) 
- (optional) Run 
make eigen3to install the Eigen (version 3.4.0) in a subdirectory. - (optional) Run 
make venvto create a local virtual environment and install the required python3 modules. - Run 
maketo compile all the Cython files incore/. 
- Debug the C++/Cython code with the 
libasanandlibubsansanitizers by runningmake cython-gdb. These sanitizers check for memory leaks, out of bounds accesses, and undefined behaviour. - When executing the script 
src/app.py, preload libasan as follows:LD_PRELOAD=$(gcc -print-file-name=libasan.so) ./python3 src/app.py -pvi INPUTFILE - If you want to run the program with the 
gdbdebugger, read the Cython documentation, for more info. 
Note: you first need to build the software, see above.
You can run the software from the command line by executing the script src/app.py.
For example, ./python3 src/app.py -pvi INPUTFILE LLL-reduces a lattice in file INPUTFILE and outputs it to standard output, and provides additional information to standard error.
To use the software from within your own Python code, call the function reduce in the file src/blaster.py.
The lattice input format is the same as what is supported by NTL, FPLLL and flatter.
That is, to specify a rank-k lattice in n-dimensional Euclidean space, the file or input should be of the form:
[[a_11 a_12 ... a_1n]
[a_21 a_22 ... a_2n]
...
[a_k1 a_k2 ... a_kn]]
Notes:
- the final closing 
]may be put on a new line, - the input parser is insensitive to extra whitespace in almost all cases.
 
Run ./python3 src/app.py -h to see all available command line arguments.
To generate one BLASter data point in Figure 3, run the following command, which should give (up to timing differences) the following output.
$ time latticegen -randseed 0 q 128 64 631 q | ./python3 src/app.py -pqv
E[∥b₁∥] ~ 393.44 < 631 (GH: λ₁ ~ 68.77)
........
Iterations: 8
t_{QR-decomp. }=     0.006s
t_{LLL-red.   }=     0.041s
t_{Seysen-red.}=     0.013s
t_{Matrix-mul.}=     0.007s
Profile = [8.56 8.66 8.54 8.40 8.32 8.41 8.35 8.23 8.08 8.11 8.05 8.01 7.88 7.84 7.86 7.74 7.72 7.60 7.59 7.70 7.53 7.49 7.40 7.28 7.08 7.10 7.04 7.03 7.07 6.94 6.96 6.79 6.76 6.74 6.60 6.44 6.31 6.23 6.15 6.26 6.22 6.20 6.08 6.06 6.16 6.01 5.83 5.79 5.69 5.55 5.45 5.34 5.36 5.27 5.16 5.37 5.28 5.09 5.01 5.00 4.95 4.76 4.83 4.70 4.57 4.60 4.39 4.34 4.16 4.08 4.12 3.99 4.01 3.91 3.97 3.82 3.75 3.66 3.57 3.58 3.47 3.44 3.45 3.38 3.26 3.20 3.15 3.20 3.07 3.05 2.89 2.87 2.86 2.89 2.74 2.72 2.52 2.39 2.35 2.28 2.16 2.09 1.97 1.87 2.02 2.01 1.97 1.92 1.78 1.60 1.59 1.60 1.57 1.54 1.61 1.46 1.43 1.47 1.34 1.18 1.13 1.08 1.02 0.87 0.80 0.87 0.84 0.79]
RHF = 1.02142^n, slope = -0.063828, ∥b_1∥ = 378.7
real	0m0.747s
user	0m0.501s
sys	0m0.042sThe argument -p outputs the basis profile, i.e., the binary logarithm (log_2) of the norms of the Gram--Schmidt vectors.
The argument -q suppresses outputting the reduced basis to standard output.
The argument -v gives extra information regarding the reduced basis, i.e., root Hermite factor is 1.02142, the slope equals -0.063828, and the first basis vector has norm 378.7.
To generate one BLASterDeepLLL-4 data point in Figure 6, run:
$ time latticegen -randseed 0 q 1024 512 968665207 q | ./python3 src/app.py -d4 -pqv
E[∥b₁∥] ~ 131183490632416.14 >= 968665207 (GH: λ₁ ~ 240990.35)
.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Iterations: 1045
t_{QR-decomp. }=    94.155s
t_{LLL-red.   }=    24.336s
t_{Seysen-red.}=    69.988s
t_{Matrix-mul.}=   156.098s
Profile = [29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.85 29.76 29.78 29.71 29.69 29.69 29.67 29.63 29.57 29.57 29.65 29.55 29.46 29.53 29.38 29.37 29.26 29.22 29.23 29.14 29.14 29.10 28.93 29.01 28.93 28.80 28.83 28.82 28.74 28.67 28.72 28.62 28.55 28.53 28.38 28.41 28.41 28.27 28.30 28.34 28.33 28.23 28.20 28.19 28.14 28.15 28.11 27.96 27.83 27.86 27.88 27.79 27.75 27.69 27.72 27.59 27.58 27.49 27.59 27.49 27.39 27.36 27.28 27.21 27.18 27.12 27.09 27.04 26.91 27.06 26.92 26.98 26.86 26.88 26.87 26.80 26.79 26.78 26.73 26.71 26.58 26.58 26.49 26.48 26.38 26.37 26.33 26.29 26.25 26.24 26.16 26.06 26.07 26.00 26.00 25.86 25.89 25.89 25.78 25.75 25.68 25.62 25.55 25.63 25.59 25.58 25.43 25.48 25.51 25.38 25.26 25.20 25.24 25.26 25.10 25.17 25.05 25.02 24.98 24.95 24.93 24.83 24.82 24.68 24.73 24.58 24.69 24.58 24.54 24.46 24.45 24.38 24.39 24.35 24.27 24.33 24.19 24.25 24.13 24.11 23.97 24.06 24.01 23.96 23.92 23.86 23.84 23.79 23.68 23.73 23.62 23.57 23.55 23.41 23.36 23.37 23.31 23.30 23.31 23.20 23.12 23.09 23.07 22.97 22.90 22.95 22.84 22.92 22.82 22.82 22.80 22.77 22.63 22.57 22.64 22.55 22.61 22.50 22.51 22.39 22.42 22.26 22.27 22.24 22.17 22.10 22.10 22.03 22.06 22.02 21.87 21.79 21.82 21.71 21.68 21.65 21.60 21.57 21.58 21.50 21.52 21.43 21.51 21.41 21.38 21.31 21.33 21.25 21.19 21.09 21.03 20.93 20.97 20.88 20.83 20.86 20.73 20.72 20.71 20.60 20.61 20.62 20.56 20.45 20.50 20.39 20.38 20.26 20.26 20.29 20.19 20.18 20.15 20.16 19.98 20.00 19.90 19.86 19.90 19.84 19.82 19.86 19.71 19.74 19.66 19.58 19.55 19.43 19.44 19.44 19.41 19.26 19.22 19.27 19.29 19.22 19.10 19.09 19.07 18.95 18.87 18.87 18.85 18.90 18.84 18.71 18.65 18.70 18.60 18.62 18.53 18.49 18.46 18.45 18.42 18.30 18.34 18.32 18.15 18.17 18.15 18.05 18.03 17.93 17.89 17.84 17.83 17.83 17.85 17.66 17.80 17.64 17.61 17.52 17.53 17.52 17.41 17.46 17.44 17.35 17.30 17.29 17.20 17.18 17.11 17.01 16.98 16.98 16.98 16.98 16.93 16.84 16.84 16.73 16.57 16.58 16.53 16.41 16.39 16.39 16.36 16.34 16.36 16.20 16.10 16.18 16.12 16.11 16.09 16.00 15.98 16.02 15.95 15.95 15.89 15.83 15.80 15.77 15.63 15.70 15.62 15.50 15.49 15.47 15.35 15.29 15.28 15.14 15.15 15.05 15.00 14.95 14.94 14.89 14.92 14.81 14.81 14.71 14.73 14.63 14.70 14.65 14.67 14.58 14.48 14.52 14.53 14.40 14.34 14.24 14.31 14.30 14.28 14.20 14.14 14.14 14.06 13.94 13.83 13.89 13.77 13.71 13.67 13.71 13.64 13.52 13.53 13.47 13.45 13.44 13.38 13.37 13.36 13.25 13.28 13.25 13.10 13.02 13.03 13.03 12.95 12.94 12.93 12.89 12.84 12.73 12.78 12.66 12.72 12.66 12.67 12.52 12.55 12.45 12.31 12.36 12.30 12.30 12.11 12.14 12.13 12.03 12.01 12.03 12.01 11.95 11.95 11.91 11.74 11.69 11.82 11.72 11.71 11.54 11.58 11.51 11.53 11.46 11.39 11.34 11.30 11.28 11.17 11.15 11.11 11.09 11.00 10.94 10.93 10.87 10.79 10.76 10.75 10.70 10.62 10.63 10.60 10.61 10.55 10.56 10.56 10.39 10.31 10.39 10.34 10.22 10.19 10.10 10.15 10.05 9.91 10.03 9.90 9.89 9.83 9.74 9.71 9.73 9.64 9.58 9.53 9.47 9.51 9.46 9.37 9.35 9.28 9.29 9.27 9.11 9.17 9.16 9.08 9.15 8.96 8.92 8.81 8.88 8.71 8.79 8.78 8.75 8.69 8.51 8.57 8.48 8.46 8.50 8.46 8.42 8.27 8.20 8.17 8.14 8.03 8.08 8.04 7.93 8.01 7.98 7.97 7.92 7.81 7.84 7.75 7.66 7.73 7.56 7.51 7.55 7.41 7.40 7.36 7.27 7.31 7.31 7.33 7.19 7.16 7.06 7.06 6.98 7.05 6.90 6.91 6.83 6.84 6.73 6.73 6.69 6.61 6.57 6.58 6.61 6.49 6.41 6.36 6.28 6.25 6.28 6.28 6.11 6.09 6.06 5.99 5.93 5.81 5.80 5.85 5.87 5.89 5.80 5.70 5.66 5.63 5.61 5.55 5.50 5.50 5.39 5.34 5.29 5.13 5.24 5.20 5.04 5.21 5.05 5.04 5.02 4.95 4.94 4.86 4.78 4.80 4.75 4.67 4.57 4.61 4.56 4.42 4.47 4.43 4.37 4.33 4.24 4.28 4.16 4.20 4.09 4.05 4.04 4.00 4.00 3.93 3.82 3.88 3.87 3.82 3.66 3.55 3.64 3.67 3.52 3.47 3.39 3.45 3.36 3.38 3.25 3.18 3.17 3.16 3.05 2.93 3.08 2.98 2.97 3.01 2.90 2.86 2.67 2.75 2.73 2.67 2.62 2.55 2.57 2.52 2.44 2.40 2.24 2.33 2.33 2.24 2.21 2.13 2.07 2.01 2.01 1.97 1.87 1.97 1.85 1.79 1.80 1.69 1.67 1.61 1.68 1.51 1.56 1.50 1.39 1.35 1.36 1.35 1.32 1.28 1.23 1.25 1.13 1.00 1.00 0.97 0.99 0.93 0.84 0.85 0.84 0.73 0.70 0.59 0.64 0.57 0.59 0.53 0.42 0.43 0.40 0.39 0.36 0.23 0.17 0.13 0.19 0.14 0.05 0.02 -0.00 -0.07 -0.14 -0.16 -0.21 -0.17 -0.27 -0.30 -0.36 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 -0.00 -0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00]
RHF = 1.01015^n, slope = -0.036847, ∥b_1∥ = 968665207.0
real	5m47.925s
user	18m12.336s
sys	0m23.005sTo generate one BLASterBKZ-60 data point in Figure 3, run the command found below.
This command runs progressive BKZ (with 4-deep-LLL before SVP calls) with increasing block sizes 40, 42, ..., 60 performing one tour per block size.
Moreover, -l will record intermediate progress in the file logfile.csv.
$ time latticegen -randseed 0 q 128 64 631 q | ./python3 src/app.py -b60 -t1 -P2 -l logfile.csv -pqv
E[∥b₁∥] ~ 393.44 < 631 (GH: λ₁ ~ 68.77)
........................
BKZ(β: 40,t: 1/ 1, o:   0): slope=-0.043332, rhf=1.014315.......
BKZ(β: 40,t: 1/ 1, o:  25): slope=-0.042374, rhf=1.014315.....
BKZ(β: 40,t: 1/ 1, o:  50): slope=-0.041580, rhf=1.014195....
BKZ(β: 40,t: 1/ 1, o:  75): slope=-0.041099, rhf=1.013987.
BKZ(β: 40,t: 1/ 1, o: 100): slope=-0.040978, rhf=1.013987...
BKZ(β: 42,t: 1/ 1, o:   0): slope=-0.040810, rhf=1.013356..
BKZ(β: 42,t: 1/ 1, o:  23): slope=-0.040542, rhf=1.013356...
BKZ(β: 42,t: 1/ 1, o:  46): slope=-0.040666, rhf=1.013356..
BKZ(β: 42,t: 1/ 1, o:  69): slope=-0.040395, rhf=1.013356..
BKZ(β: 42,t: 1/ 1, o:  92): slope=-0.040275, rhf=1.012497...
BKZ(β: 44,t: 1/ 1, o:   0): slope=-0.040120, rhf=1.012497....
BKZ(β: 44,t: 1/ 1, o:  21): slope=-0.039930, rhf=1.012497.
BKZ(β: 44,t: 1/ 1, o:  42): slope=-0.039651, rhf=1.012497...
BKZ(β: 44,t: 1/ 1, o:  63): slope=-0.039616, rhf=1.012497..
BKZ(β: 44,t: 1/ 1, o:  84): slope=-0.039546, rhf=1.012497.
BKZ(β: 44,t: 1/ 1, o: 105): slope=-0.039613, rhf=1.012497...
BKZ(β: 46,t: 1/ 1, o:   0): slope=-0.039689, rhf=1.012497....
BKZ(β: 46,t: 1/ 1, o:  19): slope=-0.039445, rhf=1.012497...
BKZ(β: 46,t: 1/ 1, o:  38): slope=-0.039244, rhf=1.012497..
BKZ(β: 46,t: 1/ 1, o:  57): slope=-0.039485, rhf=1.012497....
BKZ(β: 46,t: 1/ 1, o:  76): slope=-0.039283, rhf=1.012497...
BKZ(β: 46,t: 1/ 1, o:  95): slope=-0.039427, rhf=1.012497....
BKZ(β: 48,t: 1/ 1, o:   0): slope=-0.039296, rhf=1.012497.
BKZ(β: 48,t: 1/ 1, o:  17): slope=-0.038946, rhf=1.012497..
BKZ(β: 48,t: 1/ 1, o:  34): slope=-0.038779, rhf=1.012497...
BKZ(β: 48,t: 1/ 1, o:  51): slope=-0.038998, rhf=1.012497...
BKZ(β: 48,t: 1/ 1, o:  68): slope=-0.038829, rhf=1.012497..
BKZ(β: 48,t: 1/ 1, o:  85): slope=-0.038537, rhf=1.012497..
BKZ(β: 50,t: 1/ 1, o:   0): slope=-0.038765, rhf=1.011904..
BKZ(β: 50,t: 1/ 1, o:  15): slope=-0.038361, rhf=1.011904..
BKZ(β: 50,t: 1/ 1, o:  30): slope=-0.038127, rhf=1.011904...
BKZ(β: 50,t: 1/ 1, o:  45): slope=-0.038089, rhf=1.011904.
BKZ(β: 50,t: 1/ 1, o:  60): slope=-0.038368, rhf=1.011904..
BKZ(β: 50,t: 1/ 1, o:  75): slope=-0.038186, rhf=1.011904...
BKZ(β: 50,t: 1/ 1, o:  90): slope=-0.038035, rhf=1.011904..
BKZ(β: 52,t: 1/ 1, o:   0): slope=-0.038113, rhf=1.011904..
BKZ(β: 52,t: 1/ 1, o:  13): slope=-0.038140, rhf=1.011904....
BKZ(β: 52,t: 1/ 1, o:  26): slope=-0.038001, rhf=1.011904.
BKZ(β: 52,t: 1/ 1, o:  39): slope=-0.037897, rhf=1.011904.....
BKZ(β: 52,t: 1/ 1, o:  52): slope=-0.037875, rhf=1.011904..
BKZ(β: 52,t: 1/ 1, o:  65): slope=-0.037652, rhf=1.011904..
BKZ(β: 52,t: 1/ 1, o:  78): slope=-0.037847, rhf=1.011904...
BKZ(β: 54,t: 1/ 1, o:   0): slope=-0.038111, rhf=1.011904.
BKZ(β: 54,t: 1/ 1, o:  11): slope=-0.037940, rhf=1.011904...
BKZ(β: 54,t: 1/ 1, o:  22): slope=-0.037949, rhf=1.011904..
BKZ(β: 54,t: 1/ 1, o:  33): slope=-0.037908, rhf=1.011904.
BKZ(β: 54,t: 1/ 1, o:  44): slope=-0.037818, rhf=1.011904.
BKZ(β: 54,t: 1/ 1, o:  55): slope=-0.037928, rhf=1.011904..
BKZ(β: 54,t: 1/ 1, o:  66): slope=-0.038078, rhf=1.011904..
BKZ(β: 54,t: 1/ 1, o:  77): slope=-0.038205, rhf=1.011904..
BKZ(β: 56,t: 1/ 1, o:   0): slope=-0.038343, rhf=1.011904.
BKZ(β: 56,t: 1/ 1, o:   9): slope=-0.038148, rhf=1.011904.
BKZ(β: 56,t: 1/ 1, o:  18): slope=-0.038094, rhf=1.011904..
BKZ(β: 56,t: 1/ 1, o:  27): slope=-0.037886, rhf=1.011904..
BKZ(β: 56,t: 1/ 1, o:  36): slope=-0.037807, rhf=1.011904...
BKZ(β: 56,t: 1/ 1, o:  45): slope=-0.037415, rhf=1.011904..
BKZ(β: 56,t: 1/ 1, o:  54): slope=-0.037376, rhf=1.011904.
BKZ(β: 56,t: 1/ 1, o:  63): slope=-0.037486, rhf=1.011904..
BKZ(β: 56,t: 1/ 1, o:  72): slope=-0.037483, rhf=1.011904...
BKZ(β: 56,t: 1/ 1, o:  81): slope=-0.037495, rhf=1.011904....
BKZ(β: 58,t: 1/ 1, o:   0): slope=-0.037716, rhf=1.011904.
BKZ(β: 58,t: 1/ 1, o:   7): slope=-0.037442, rhf=1.011904.
BKZ(β: 58,t: 1/ 1, o:  14): slope=-0.037704, rhf=1.011904..
BKZ(β: 58,t: 1/ 1, o:  21): slope=-0.037900, rhf=1.011904....
BKZ(β: 58,t: 1/ 1, o:  28): slope=-0.037714, rhf=1.011904...
BKZ(β: 58,t: 1/ 1, o:  35): slope=-0.037551, rhf=1.011904..
BKZ(β: 58,t: 1/ 1, o:  42): slope=-0.037445, rhf=1.011904.
BKZ(β: 58,t: 1/ 1, o:  49): slope=-0.037212, rhf=1.011904.
BKZ(β: 58,t: 1/ 1, o:  56): slope=-0.037023, rhf=1.011904.
BKZ(β: 58,t: 1/ 1, o:  63): slope=-0.037201, rhf=1.011904..
BKZ(β: 58,t: 1/ 1, o:  70): slope=-0.037115, rhf=1.011904..
BKZ(β: 58,t: 1/ 1, o:  77): slope=-0.037202, rhf=1.011904....
BKZ(β: 60,t: 1/ 1, o:   0): slope=-0.037201, rhf=1.011904.
BKZ(β: 60,t: 1/ 1, o:   5): slope=-0.037337, rhf=1.011904.
BKZ(β: 60,t: 1/ 1, o:  10): slope=-0.037405, rhf=1.011904..
BKZ(β: 60,t: 1/ 1, o:  15): slope=-0.037518, rhf=1.011904.
BKZ(β: 60,t: 1/ 1, o:  20): slope=-0.037440, rhf=1.011904.
BKZ(β: 60,t: 1/ 1, o:  25): slope=-0.037447, rhf=1.011904.
BKZ(β: 60,t: 1/ 1, o:  30): slope=-0.037260, rhf=1.011904...
BKZ(β: 60,t: 1/ 1, o:  35): slope=-0.037266, rhf=1.011904.
BKZ(β: 60,t: 1/ 1, o:  40): slope=-0.037381, rhf=1.011904.
BKZ(β: 60,t: 1/ 1, o:  45): slope=-0.036954, rhf=1.011904.
BKZ(β: 60,t: 1/ 1, o:  50): slope=-0.036800, rhf=1.011904.
BKZ(β: 60,t: 1/ 1, o:  55): slope=-0.036753, rhf=1.011904.
BKZ(β: 60,t: 1/ 1, o:  60): slope=-0.036773, rhf=1.011904..
BKZ(β: 60,t: 1/ 1, o:  65): slope=-0.036379, rhf=1.011904..
BKZ(β: 60,t: 1/ 1, o:  70): slope=-0.036526, rhf=1.011904..
Iterations: 304
t_{QR-decomp. }=     0.212s
t_{LLL-red.   }=     0.297s
t_{BKZ-red.   }=    12.741s
t_{Seysen-red.}=     0.450s
t_{Matrix-mul.}=     0.282s
Profile = [6.84 6.80 6.79 6.74 6.74 6.73 6.63 6.67 6.56 6.54 6.53 6.53 6.45 6.44 6.38 6.49 6.58 6.57 6.43 6.50 6.43 6.40 6.28 6.29 6.18 6.17 6.01 6.00 5.99 5.93 5.98 5.93 5.84 5.83 5.86 5.81 5.70 5.69 5.59 5.62 5.59 5.47 5.42 5.34 5.35 5.31 5.21 5.18 5.26 5.17 5.04 4.99 5.00 5.02 4.97 4.86 4.86 4.78 4.70 4.76 4.65 4.65 4.58 4.53 4.53 4.42 4.31 4.42 4.30 4.29 4.18 4.33 4.34 4.28 4.29 4.24 4.23 4.22 4.17 4.15 4.12 4.10 4.04 3.99 3.98 3.94 3.87 3.87 3.86 3.83 3.81 3.74 3.71 3.62 3.62 3.49 3.51 3.42 3.51 3.40 3.32 3.34 3.37 3.31 3.23 3.24 3.15 3.12 3.08 3.04 2.89 2.88 2.90 2.80 2.75 2.76 2.79 2.64 2.68 2.65 2.54 2.46 2.41 2.45 2.39 2.38 2.25 2.18]
RHF = 1.01190^n, slope = -0.036484, ∥b_1∥ = 114.2
real	0m14.563s
user	0m17.605s
sys	0m0.045s