extern crate lpn;
#[cfg(all(feature = "wagner_26", feature = "guava_20"))]
fn main() {
use simple_logger::SimpleLogger;
SimpleLogger::new()
.with_level(log::LevelFilter::Trace)
.init()
.unwrap();
use lpn::codes::*;
use lpn::covering_codes::*;
use lpn::lf1::*;
use lpn::oracle::LpnOracle;
let k = 155;
let tau = 1.0 / 4.0;
let mut oracle: LpnOracle = LpnOracle::new(k, tau);
let start_len = 2833180828;
let k = k as usize;
oracle.get_samples_drop(start_len + 1000, k - 138);
log::info!("Collected samples.");
sparse_secret_reduce(&mut oracle);
xor_drop_reduce(&mut oracle, 138 - 108, 0);
xor_drop_reduce(&mut oracle, 108 - 77, 0);
xor_drop_reduce(&mut oracle, 77 - 46, 0);
let code = ConcatenatedCode::new(vec![&WagnerCode26_16, &GuavaCode20_13]);
code_reduce(&mut oracle, &code);
let secret = oracle.secret.as_binvector(code.dimension());
let solution = fwht_solve(oracle);
log::info!("done");
println!("Found: {:?}", solution);
println!("Actual: {:?}", secret);
}
#[cfg(not(all(feature = "wagner_26", feature = "guava_20")))]
fn main() {
println!("necessary feature disabled");
}