ADD file via upload
This commit is contained in:
parent
266a9bfa30
commit
7b5112792d
|
@ -0,0 +1,171 @@
|
||||||
|
mod scheme_tests {
|
||||||
|
use fse::fse::Conn;
|
||||||
|
use rand::seq::SliceRandom;
|
||||||
|
|
||||||
|
const ADDRESS: &str = "mongodb://127.0.0.1:27017";
|
||||||
|
const DB_NAME: &str = "bench";
|
||||||
|
const PFSE_COLLECTION: &str = "pfse_collection";
|
||||||
|
const LPFSE_BHE_COLLECTION: &str = "lpfse_bhe_collection";
|
||||||
|
const LPFSE_IHBE_COLLECTION: &str = "lpfse_ihbe_collection";
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
fn exp(param: f64, index: usize) -> f64 {
|
||||||
|
use std::f64::consts::E;
|
||||||
|
param * E.powf(-param * index as f64)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_partition() {
|
||||||
|
use fse::db::Data;
|
||||||
|
use fse::util::read_csv_exact;
|
||||||
|
use fse::{
|
||||||
|
fse::BaseCrypto, fse::PartitionFrequencySmoothing,
|
||||||
|
pfse::ContextPFSE,
|
||||||
|
};
|
||||||
|
|
||||||
|
let vec = read_csv_exact("./data/test.csv", "order_number").unwrap();
|
||||||
|
let mut ctx = ContextPFSE::default();
|
||||||
|
ctx.initialize_conn(ADDRESS, DB_NAME, false);
|
||||||
|
ctx.key_generate();
|
||||||
|
ctx.set_params(&vec![0.25, 1.0, 2_f64.powf(-12_f64)]);
|
||||||
|
ctx.partition(&vec, exp);
|
||||||
|
ctx.transform();
|
||||||
|
ctx.store("./data/summary.txt").unwrap();
|
||||||
|
|
||||||
|
let documents = ctx
|
||||||
|
.smooth()
|
||||||
|
.into_iter()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(_, ciphertext)| {
|
||||||
|
let data = String::from_utf8(ciphertext).unwrap();
|
||||||
|
Data { data }
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let conn = ctx.get_conn();
|
||||||
|
conn.insert(documents, PFSE_COLLECTION).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_ihbe() {
|
||||||
|
use fse::util::read_csv_exact;
|
||||||
|
use fse::{
|
||||||
|
fse::BaseCrypto,
|
||||||
|
lpfse::{ContextLPFSE, EncoderIHBE},
|
||||||
|
};
|
||||||
|
let mut vec =
|
||||||
|
read_csv_exact("./data/test.csv", "order_number").unwrap();
|
||||||
|
vec.sort();
|
||||||
|
let mut ctx =
|
||||||
|
ContextLPFSE::new(2f64.powf(-10_f64), Box::new(EncoderIHBE::new()));
|
||||||
|
ctx.key_generate();
|
||||||
|
ctx.initialize(&vec, ADDRESS, DB_NAME, false);
|
||||||
|
ctx.store("./data/summary_ihbe.txt").unwrap();
|
||||||
|
|
||||||
|
let mut ciphertexts = Vec::new();
|
||||||
|
for message in vec.iter() {
|
||||||
|
let ciphertext = ctx.encrypt(message).unwrap().remove(0);
|
||||||
|
ciphertexts.push(String::from_utf8(ciphertext).unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut plaintexts = Vec::new();
|
||||||
|
for ciphertext in ciphertexts.iter() {
|
||||||
|
let plaintext = ctx.decrypt(ciphertext.as_bytes()).unwrap();
|
||||||
|
plaintexts.push(String::from_utf8(plaintext).unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(plaintexts, vec);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_bhe() {
|
||||||
|
use fse::util::read_csv_exact;
|
||||||
|
use fse::{
|
||||||
|
fse::BaseCrypto,
|
||||||
|
lpfse::{ContextLPFSE, EncoderBHE},
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut vec =
|
||||||
|
read_csv_exact("./data/test.csv", "order_number").unwrap();
|
||||||
|
vec.sort();
|
||||||
|
let mut ctx =
|
||||||
|
ContextLPFSE::new(2f64.powf(-10_f64), Box::new(EncoderBHE::new()));
|
||||||
|
ctx.key_generate();
|
||||||
|
ctx.initialize(&vec, ADDRESS, DB_NAME, false);
|
||||||
|
ctx.store("./data/summary_bhe.txt").unwrap();
|
||||||
|
|
||||||
|
let mut ciphertexts = Vec::new();
|
||||||
|
for message in vec.iter() {
|
||||||
|
let ciphertext = ctx.encrypt(message).unwrap().remove(0);
|
||||||
|
ciphertexts.push(String::from_utf8(ciphertext).unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut plaintexts = Vec::new();
|
||||||
|
for ciphertext in ciphertexts.iter() {
|
||||||
|
let plaintext = ctx.decrypt(ciphertext.as_bytes()).unwrap();
|
||||||
|
plaintexts.push(String::from_utf8(plaintext).unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_eq!(plaintexts, vec);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_read_csv() {
|
||||||
|
use fse::util::read_csv_exact;
|
||||||
|
|
||||||
|
let path = "./data/test.csv";
|
||||||
|
let column = "order_number";
|
||||||
|
let strings = read_csv_exact(path, column).unwrap();
|
||||||
|
println!("{:?}", &strings[..10]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_db() {
|
||||||
|
use fse::pfse::ContextPFSE;
|
||||||
|
use mongodb::bson::*;
|
||||||
|
|
||||||
|
let mut ctx = ContextPFSE::<String>::default();
|
||||||
|
let doc = fse::db::Data {
|
||||||
|
data: "ooo".to_string(),
|
||||||
|
};
|
||||||
|
ctx.initialize_conn("mongodb://127.0.0.1:27017", "bench", true);
|
||||||
|
let conn = ctx.get_conn();
|
||||||
|
conn.insert(vec![doc], "test_collection").unwrap();
|
||||||
|
|
||||||
|
let mut doc = Document::new();
|
||||||
|
let mut test_key = Document::new();
|
||||||
|
test_key.insert("data", "ooo");
|
||||||
|
doc.insert("$or", vec![test_key]);
|
||||||
|
|
||||||
|
println!("{}", conn.size("test_collection"));
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"{:?}",
|
||||||
|
conn.search(doc, "test_collection")
|
||||||
|
.unwrap()
|
||||||
|
.into_iter()
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_wre() {
|
||||||
|
use rand_core::OsRng;
|
||||||
|
use fse::util::read_csv_exact;
|
||||||
|
use fse::{fse::BaseCrypto, wre::ContextWRE};
|
||||||
|
|
||||||
|
let mut vec =
|
||||||
|
read_csv_exact("./data/test.csv", "order_number").unwrap();
|
||||||
|
vec.shuffle(&mut OsRng);
|
||||||
|
let messages = &vec[..100];
|
||||||
|
|
||||||
|
let mut ctx = ContextWRE::new(10);
|
||||||
|
ctx.key_generate();
|
||||||
|
ctx.initialize(messages, ADDRESS, DB_NAME, true);
|
||||||
|
|
||||||
|
let ciphertexts = messages
|
||||||
|
.iter()
|
||||||
|
.map(|message| ctx.encrypt(message).unwrap())
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue