SDA lattice attack, need to fix LLL part
This commit is contained in:
@@ -11,14 +11,14 @@ macro_rules! int {
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub struct Matrix {
|
||||
pub n: usize, //rows
|
||||
pub n: usize, // rows
|
||||
pub m: usize, // columns
|
||||
values: Vec<Element>,
|
||||
}
|
||||
|
||||
impl Matrix {
|
||||
pub fn new(n: usize, m: usize, values: Vec<Element>) -> Option<Self> {
|
||||
if n*m == values.len() {
|
||||
if n * m == values.len() {
|
||||
Some(Matrix { n, m, values })
|
||||
} else {
|
||||
None
|
||||
@@ -29,8 +29,8 @@ impl Matrix {
|
||||
let n = ciphertexts.len();
|
||||
let mut values = Vec::with_capacity(n * n);
|
||||
|
||||
// First row: [2^noise_bits, ciphertexts[1], ..., ciphertexts[t]]
|
||||
values.push(int!(2u64).pow(noise_bits as u32));
|
||||
// First row: [2^(noise_bits+1), ciphertexts[1], ..., ciphertexts[t]]
|
||||
values.push(int!(2u64).pow(noise_bits as u32 + 1));
|
||||
values.extend_from_slice(&ciphertexts[1..]);
|
||||
|
||||
// -x0 on diagonal, 0 everywhere else
|
||||
@@ -48,7 +48,7 @@ impl Matrix {
|
||||
impl Index<(usize, usize)> for Matrix {
|
||||
type Output = Element;
|
||||
fn index(&self, index: (usize, usize)) -> &Self::Output {
|
||||
if index.0>=self.m || index.1 >= self.n {
|
||||
if index.0 >= self.m || index.1 >= self.n {
|
||||
panic!();
|
||||
}
|
||||
&self.values[(self.n * index.0) + index.1]
|
||||
@@ -57,7 +57,7 @@ impl Index<(usize, usize)> for Matrix {
|
||||
|
||||
impl IndexMut<(usize, usize)> for Matrix {
|
||||
fn index_mut(&mut self, index: (usize, usize)) -> &mut Self::Output {
|
||||
if index.0>=self.m || index.1 >= self.n {
|
||||
if index.0 >= self.m || index.1 >= self.n {
|
||||
panic!();
|
||||
}
|
||||
&mut self.values[(self.n * index.0) + index.1]
|
||||
@@ -91,7 +91,12 @@ mod tests {
|
||||
m[(1, 0)] = int!(5);
|
||||
assert_eq!(m[(1, 0)], int!(5));
|
||||
|
||||
let m2 = Matrix::new(3, 2, vec![int!(1), int!(2), int!(3), int!(4), int!(5), int!(6)]).unwrap();
|
||||
let m2 = Matrix::new(
|
||||
3,
|
||||
2,
|
||||
vec![int!(1), int!(2), int!(3), int!(4), int!(5), int!(6)],
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(m2[(0, 2)], int!(3));
|
||||
assert_eq!(m2[(1, 0)], int!(4));
|
||||
let result = panic::catch_unwind(|| {
|
||||
@@ -111,7 +116,7 @@ mod tests {
|
||||
let noise_bits = 2;
|
||||
|
||||
let expected_values = vec![
|
||||
int!(4),
|
||||
int!(8),
|
||||
int!(8),
|
||||
int!(12),
|
||||
int!(0),
|
||||
|
||||
Reference in New Issue
Block a user