diff --git a/Cargo.lock b/Cargo.lock index 218cb82..9fdd56d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "aho-corasick" version = "0.7.18" @@ -126,6 +132,15 @@ dependencies = [ "os_str_bytes", ] +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + [[package]] name = "crunchy" version = "0.2.2" @@ -140,6 +155,7 @@ dependencies = [ "bigdecimal", "clap", "env_logger", + "flate2", "log", "primitive-types", "rand 0.7.3", @@ -175,6 +191,16 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "flate2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "funty" version = "2.0.0" @@ -302,6 +328,15 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +[[package]] +name = "miniz_oxide" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" +dependencies = [ + "adler", +] + [[package]] name = "num-bigint" version = "0.4.3" diff --git a/Cargo.toml b/Cargo.toml index e1012d2..c1ba0db 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,3 +18,4 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "*" base64 = "*" toml = "*" +flate2 = "1.0.24" diff --git a/client2.gpsl b/client2.gpsl new file mode 100644 index 0000000..8cc3c60 --- /dev/null +++ b/client2.gpsl @@ -0,0 +1,15 @@ +fn main() { + let a = encrypt(16) + println("a: " + decrypt(a)) + let b = encrypt(60) + println("b: " + b) + let c = encrypt(48) + println("c: " + c) + let d = encrypt(2) + println("d: " + d) + let e = encrypt(24) + println("e: " + e) + let r = a + b + c + d + e + println("r: " + decrypt(r)); + println(decrypt(r) - 15) +} diff --git a/gpsl_conf.toml b/gpsl_conf.toml index 076d97b..1122cff 100644 --- a/gpsl_conf.toml +++ b/gpsl_conf.toml @@ -1,2 +1 @@ -private_key = "NDM1ODIxMjU2NDA1MTc3NjExNTc0MTk2NjQ5MjUyMzMxMDA5MTMyMjMwNTA1MjA1MTA1OTMzMTA0NjEwODU3MzU3NDg3NDA1Njk5ODU=" -public_key = "eyJQb2ludCI6eyJ4Ijp7InZhbHVlIjoiMHg1NDhlZWQwYzNlYzc5OTJlMzhhODkyNGJjMDk4NTZmZDcwOTNjZDIyZjQ3N2ZjNjA0OGQ3ZWYxNjJhNDM3Y2UiLCJwIjoiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWZmZmZmYzJmIn0sInkiOnsidmFsdWUiOiIweGU3OTVlNGZmMDdlOTYyYmUzNzFlYmJhYWVlYWI2ZDBkZmVlNjg5YmQ3MzlmYjk5MGI1NmE0NDQxZTJhZGFiNzIiLCJwIjoiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWZmZmZmYzJmIn0sImEiOnsidmFsdWUiOiIweDAiLCJwIjoiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWZmZmZmYzJmIn0sImIiOnsidmFsdWUiOiIweDciLCJwIjoiMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWZmZmZmYzJmIn19fQ==" +xRAN0/HSġNSGZhZ; Tį *ڙhf??Oq,&S-s.?fИ Fp̢d|ZHa5ᢊ€^2Xi5@-4<ߏ奌8MpFVj|]k䧹ZR~y ~w#3 \ No newline at end of file diff --git a/src/gpsl/external_function.rs b/src/gpsl/external_function.rs index b5aec56..1224edf 100644 --- a/src/gpsl/external_function.rs +++ b/src/gpsl/external_function.rs @@ -112,6 +112,7 @@ pub const STD_FUNC: fn( }; let ec = encryption.plain_to_ec_point(plain); let eep = encryption.encrypt(ec, data.public_key.unwrap(), None); + println!("{}", ec); ExternalFuncReturn { status: ExternalFuncStatus::SUCCESS, value: Some(Variable::PureEncrypted { value: eep }), @@ -124,6 +125,7 @@ pub const STD_FUNC: fn( _ => panic!("decrypt: first argument must be a pure encrypted point"), }; let plain = Encryption::decrypt(eep, data.private_key.unwrap()); + println!("{}", plain); let plain = encryption.ec_point_to_plain(plain); ExternalFuncReturn { status: ExternalFuncStatus::SUCCESS, diff --git a/src/main.rs b/src/main.rs index 577a6d5..7262aeb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,9 @@ use common::finite_field::FiniteFieldElement; use elliptic_curve::elliptic_curve::EllipticCurve; use elliptic_curve::elliptic_curve::EllipticCurvePoint; use elliptic_curve::encryption::Encryption; +use flate2::read::ZlibDecoder; +use flate2::write::ZlibEncoder; +use flate2::Compression; use gpsl::external_function::ExternalFuncReturn; use gpsl::external_function::ExternalFuncStatus; use gpsl::node::Node; @@ -17,6 +20,7 @@ use serde::Deserialize; use serde::Serialize; use std::env; use std::fs::File; +use std::io::prelude::*; use std::io::BufRead; use std::io::BufReader; use std::io::Read; @@ -71,9 +75,12 @@ struct Config { impl Config { fn read_file(file: &str) -> String { let mut file = fs::File::open(file).unwrap(); - let mut contents = String::new(); - file.read_to_string(&mut contents).unwrap(); - contents + let mut contents = Vec::new(); + file.read_to_end(&mut contents).unwrap(); + let mut d = ZlibDecoder::new(&contents[..]); + let mut s = String::new(); + d.read_to_string(&mut s).unwrap(); + s } pub fn from_file(file: &str) -> Self { let file = Config::read_file(file); @@ -83,7 +90,7 @@ impl Config { if let Some(private_key) = config.private_key { let decoded = base64::decode(&private_key).unwrap(); let s = std::str::from_utf8(&decoded).unwrap(); - Some(U512::from_str(s).unwrap()) + Some(U512::from_str_radix(s, 10).unwrap()) } else { None } @@ -93,7 +100,8 @@ impl Config { if let Some(public_key) = config.public_key { let decoded = base64::decode(&public_key).unwrap(); let s = std::str::from_utf8(&decoded).unwrap(); - Some(EllipticCurvePoint::from_str(s).unwrap()) + let r = EllipticCurvePoint::from_str(s).unwrap(); + Some(r) } else { None } @@ -113,7 +121,7 @@ impl Config { [Mod(4767914906170010398, 6139062703770505681), Mod(2445476831433994309, 6139062703770505681)]]] */ -fn main() { +fn o_main() { let p = U512::from_str_radix("1009", 10).unwrap(); let secp256_k1_a = FiniteFieldElement::new(U512::from(37u8), p); @@ -139,6 +147,7 @@ fn main() { b: secp256_k1_b, } }; + let r = U512::from_str_radix("7", 10).unwrap(); let f = EllipticCurvePoint::weil(pp, pd, r); @@ -149,11 +158,11 @@ fn main() { let q = pp * s; let qd = pd * sd; - let ra = U512::from_str_radix("1", 10).unwrap(); + let ra = U512::from_str_radix("20", 10).unwrap(); let rad = U512::from_str_radix("26", 10).unwrap(); let m = U512::from_str_radix("2", 10).unwrap(); - let md = U512::from_str_radix("3", 10).unwrap(); + let md = U512::from_str_radix("2", 10).unwrap(); let s1 = pp * m + q * ra; let t1 = pp * ra; @@ -264,7 +273,7 @@ fn generate_encryption() -> Encryption { } } -fn o_main() { +fn main() { env::set_var("RUST_LOG", "info"); env_logger::init(); let args = Args::parse(); @@ -434,8 +443,10 @@ fn client(args: Args) { let mut file = File::create("gpsl_conf.toml").unwrap(); let config_file = ConfigFile::from_config(config.clone()); - file.write_all(serde_json::to_string(&config_file).unwrap().as_bytes()) + let mut e = ZlibEncoder::new(Vec::new(), Compression::default()); + e.write_all(toml::to_string(&config_file).unwrap().as_bytes()) .unwrap(); + file.write_all(&e.finish().unwrap()).unwrap(); config };