mirror of
https://github.com/mii443/encrypt.git
synced 2025-08-22 23:15:43 +00:00
add encrypted calc in gpsl
This commit is contained in:
30
client.gpsl
30
client.gpsl
@ -1,20 +1,24 @@
|
|||||||
|
|
||||||
#[server(ip = "172.25.5.104:8080")]
|
|
||||||
fn add(a: num, b: num) {
|
#[server(ip = "localhost:8080")]
|
||||||
|
fn encrypt_add(a: eep, b: eep) {
|
||||||
|
print("a: ");
|
||||||
|
println(a);
|
||||||
|
print("b: ");
|
||||||
|
println(b);
|
||||||
return a + b;
|
return a + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[server(ip = "172.25.5.189:8080")]
|
|
||||||
fn mul(a: num, b: num) {
|
|
||||||
return a * b;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println(add(1, 2));
|
let enc_a: eep;
|
||||||
println(mul(2, 2));
|
let enc_b: eep;
|
||||||
let i: num;
|
|
||||||
for (i = 0; i < 2000; i += 1) {
|
|
||||||
println(mul(i, i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
enc_a = encrypt(10);
|
||||||
|
enc_b = encrypt(4);
|
||||||
|
|
||||||
|
let enc_res: eep;
|
||||||
|
enc_res = encrypt_add(enc_a, enc_b);
|
||||||
|
|
||||||
|
println(decrypt(enc_res));
|
||||||
|
}
|
||||||
|
@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
use super::math::{mod_inv, plus_mod};
|
use super::math::{mod_inv, plus_mod};
|
||||||
|
|
||||||
#[derive(PartialEq, PartialOrd, Debug, Copy, Clone, Deserialize, Serialize)]
|
#[derive(PartialEq, Debug, Copy, Clone, PartialOrd, Deserialize, Serialize)]
|
||||||
pub struct FiniteFieldElement {
|
pub struct FiniteFieldElement {
|
||||||
pub value: U512,
|
pub value: U512,
|
||||||
pub p: U512,
|
pub p: U512,
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use std::{
|
use std::{
|
||||||
|
fmt::Display,
|
||||||
ops::{Add, Sub},
|
ops::{Add, Sub},
|
||||||
sync::mpsc,
|
sync::mpsc,
|
||||||
thread,
|
thread,
|
||||||
@ -15,7 +16,7 @@ use rand_chacha::{
|
|||||||
|
|
||||||
use super::elliptic_curve::{EllipticCurve, EllipticCurvePoint};
|
use super::elliptic_curve::{EllipticCurve, EllipticCurvePoint};
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub struct Encryption {
|
pub struct Encryption {
|
||||||
pub ellictic_curve: EllipticCurve,
|
pub ellictic_curve: EllipticCurve,
|
||||||
pub base_point: EllipticCurvePoint,
|
pub base_point: EllipticCurvePoint,
|
||||||
@ -29,6 +30,24 @@ pub struct EncryptedEllipticCurvePoint {
|
|||||||
pub rp: EllipticCurvePoint,
|
pub rp: EllipticCurvePoint,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl EncryptedEllipticCurvePoint {
|
||||||
|
pub fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
data: EllipticCurvePoint::Infinity,
|
||||||
|
rp: EllipticCurvePoint::Infinity,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for EncryptedEllipticCurvePoint {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
match self.data {
|
||||||
|
EllipticCurvePoint::Infinity => write!(f, "Infinity"),
|
||||||
|
EllipticCurvePoint::Point { x, y, .. } => write!(f, "{:x}{:x}", x.value, y.value),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Add for EncryptedEllipticCurvePoint {
|
impl Add for EncryptedEllipticCurvePoint {
|
||||||
type Output = Self;
|
type Output = Self;
|
||||||
|
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
|
use primitive_types::U512;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::gpsl::{permission::Permission, variable::Variable};
|
use crate::{
|
||||||
|
elliptic_curve::{elliptic_curve::EllipticCurvePoint, encryption::Encryption},
|
||||||
|
gpsl::{permission::Permission, variable::Variable},
|
||||||
|
};
|
||||||
|
|
||||||
#[derive(PartialEq, Debug, Serialize, Deserialize)]
|
#[derive(PartialEq, Debug, Serialize, Deserialize)]
|
||||||
pub enum ExternalFuncStatus {
|
pub enum ExternalFuncStatus {
|
||||||
@ -16,20 +20,84 @@ pub struct ExternalFuncReturn {
|
|||||||
pub value: Option<Variable>,
|
pub value: Option<Variable>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
pub struct ExternalFunctionCallData {
|
||||||
|
pub encryption: Encryption,
|
||||||
|
pub private_key: Option<U512>,
|
||||||
|
pub public_key: Option<EllipticCurvePoint>,
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub const STD_FUNC: fn(
|
pub const STD_FUNC: fn(
|
||||||
String,
|
String,
|
||||||
Vec<Variable>,
|
Vec<Variable>,
|
||||||
Vec<Permission>,
|
Vec<Permission>,
|
||||||
Vec<Permission>,
|
Vec<Permission>,
|
||||||
) -> ExternalFuncReturn = |name, args, accept, reject| {
|
ExternalFunctionCallData,
|
||||||
|
) -> ExternalFuncReturn = |name, args, accept, reject, data| {
|
||||||
let name = name.as_str();
|
let name = name.as_str();
|
||||||
match name {
|
match name {
|
||||||
|
"encrypt" => {
|
||||||
|
let encryption = data.encryption;
|
||||||
|
let plain = match args[0] {
|
||||||
|
Variable::Number { value } => U512::from(value),
|
||||||
|
_ => panic!("encrypt: first argument must be a number"),
|
||||||
|
};
|
||||||
|
let ec = encryption.plain_to_ec_point(plain);
|
||||||
|
let eep = encryption.encrypt(ec, data.public_key.unwrap(), None);
|
||||||
|
ExternalFuncReturn {
|
||||||
|
status: ExternalFuncStatus::SUCCESS,
|
||||||
|
value: Some(Variable::PureEncrypted { value: eep }),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"decrypt" => {
|
||||||
|
let encryption = data.encryption;
|
||||||
|
let eep = match args[0] {
|
||||||
|
Variable::PureEncrypted { value } => value,
|
||||||
|
_ => panic!("decrypt: first argument must be a pure encrypted point"),
|
||||||
|
};
|
||||||
|
let plain = Encryption::decrypt(eep, data.private_key.unwrap());
|
||||||
|
let plain = encryption.ec_point_to_plain(plain);
|
||||||
|
ExternalFuncReturn {
|
||||||
|
status: ExternalFuncStatus::SUCCESS,
|
||||||
|
value: Some(Variable::Number {
|
||||||
|
value: plain.as_u64() as i64,
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"to_u512" => {
|
||||||
|
if args.len() != 1 {
|
||||||
|
return ExternalFuncReturn {
|
||||||
|
status: ExternalFuncStatus::ERROR,
|
||||||
|
value: None,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
let arg = args[0].clone();
|
||||||
|
match arg {
|
||||||
|
Variable::Number { value } => {
|
||||||
|
return ExternalFuncReturn {
|
||||||
|
status: ExternalFuncStatus::SUCCESS,
|
||||||
|
value: Some(Variable::U512 {
|
||||||
|
value: value.into(),
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
return ExternalFuncReturn {
|
||||||
|
status: ExternalFuncStatus::ERROR,
|
||||||
|
value: None,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
"println" => {
|
"println" => {
|
||||||
if accept.contains(&Permission::StdIo) && !reject.contains(&Permission::StdIo) {
|
if accept.contains(&Permission::StdIo) && !reject.contains(&Permission::StdIo) {
|
||||||
match &args[0] {
|
match &args[0] {
|
||||||
Variable::Text { value } => println!("{}", value),
|
Variable::Text { value } => println!("{}", value),
|
||||||
Variable::Number { value } => println!("{}", value),
|
Variable::Number { value } => println!("{}", value),
|
||||||
|
Variable::U512 { value } => println!("{:x}", value),
|
||||||
|
Variable::PureEncrypted { value } => println!("{}", value),
|
||||||
|
Variable::PairedEncrypted { value } => println!("{:x}", value.value),
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
ExternalFuncReturn {
|
ExternalFuncReturn {
|
||||||
@ -48,6 +116,9 @@ pub const STD_FUNC: fn(
|
|||||||
match &args[0] {
|
match &args[0] {
|
||||||
Variable::Text { value } => print!("{}", value),
|
Variable::Text { value } => print!("{}", value),
|
||||||
Variable::Number { value } => print!("{}", value),
|
Variable::Number { value } => print!("{}", value),
|
||||||
|
Variable::U512 { value } => print!("{:x}", value),
|
||||||
|
Variable::PureEncrypted { value } => print!("{}", value),
|
||||||
|
Variable::PairedEncrypted { value } => print!("{:x}", value.value),
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
ExternalFuncReturn {
|
ExternalFuncReturn {
|
||||||
|
@ -2,6 +2,7 @@ use crate::{
|
|||||||
common::finite_field::FiniteFieldElement,
|
common::finite_field::FiniteFieldElement,
|
||||||
elliptic_curve::encryption::EncryptedEllipticCurvePoint,
|
elliptic_curve::encryption::EncryptedEllipticCurvePoint,
|
||||||
};
|
};
|
||||||
|
use primitive_types::U512;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
|
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
|
||||||
@ -11,5 +12,6 @@ pub enum Variable {
|
|||||||
Return { value: Box<Variable> },
|
Return { value: Box<Variable> },
|
||||||
PureEncrypted { value: EncryptedEllipticCurvePoint },
|
PureEncrypted { value: EncryptedEllipticCurvePoint },
|
||||||
PairedEncrypted { value: FiniteFieldElement },
|
PairedEncrypted { value: FiniteFieldElement },
|
||||||
|
U512 { value: U512 },
|
||||||
None {},
|
None {},
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
use crate::elliptic_curve::encryption::EncryptedEllipticCurvePoint;
|
use crate::elliptic_curve::elliptic_curve::EllipticCurvePoint;
|
||||||
use crate::elliptic_curve::encryption::EncryptedEllipticCurvePoint;
|
use crate::elliptic_curve::encryption::{EncryptedEllipticCurvePoint, Encryption};
|
||||||
use crate::gpsl::external_function::{ExternalFuncReturn, ExternalFuncStatus};
|
use crate::gpsl::external_function::{
|
||||||
|
ExternalFuncReturn, ExternalFuncStatus, ExternalFunctionCallData,
|
||||||
|
};
|
||||||
use crate::gpsl::node::*;
|
use crate::gpsl::node::*;
|
||||||
use crate::gpsl::permission::Permission;
|
use crate::gpsl::permission::Permission;
|
||||||
use crate::gpsl::source::Source;
|
use crate::gpsl::source::Source;
|
||||||
use crate::gpsl::variable::*;
|
use crate::gpsl::variable::*;
|
||||||
use log::*;
|
use log::*;
|
||||||
|
use primitive_types::U512;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::collections::{HashMap, VecDeque};
|
use std::collections::{HashMap, VecDeque};
|
||||||
use std::io::{BufRead, BufReader, Write};
|
use std::io::{BufRead, BufReader, Write};
|
||||||
@ -26,11 +29,21 @@ pub struct GPSL {
|
|||||||
pub functions: Option<HashMap<String, Box<Node>>>,
|
pub functions: Option<HashMap<String, Box<Node>>>,
|
||||||
pub server_functions: Option<HashMap<String, HashMap<String, Box<Node>>>>,
|
pub server_functions: Option<HashMap<String, HashMap<String, Box<Node>>>>,
|
||||||
pub servers: Option<HashMap<String, Arc<Mutex<TcpStream>>>>,
|
pub servers: Option<HashMap<String, Arc<Mutex<TcpStream>>>>,
|
||||||
|
pub encryption: Encryption,
|
||||||
|
pub private_key: Option<U512>,
|
||||||
|
pub public_key: Option<EllipticCurvePoint>,
|
||||||
pub global_variables: Vec<Variable>,
|
pub global_variables: Vec<Variable>,
|
||||||
pub source: Source,
|
pub source: Source,
|
||||||
pub blocks: VecDeque<Block>,
|
pub blocks: VecDeque<Block>,
|
||||||
pub external_func:
|
pub external_func: Vec<
|
||||||
Vec<fn(String, Vec<Variable>, Vec<Permission>, Vec<Permission>) -> ExternalFuncReturn>,
|
fn(
|
||||||
|
String,
|
||||||
|
Vec<Variable>,
|
||||||
|
Vec<Permission>,
|
||||||
|
Vec<Permission>,
|
||||||
|
ExternalFunctionCallData,
|
||||||
|
) -> ExternalFuncReturn,
|
||||||
|
>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
@ -63,8 +76,17 @@ impl GPSL {
|
|||||||
functions: Option<HashMap<String, Box<Node>>>,
|
functions: Option<HashMap<String, Box<Node>>>,
|
||||||
server_functions: Option<HashMap<String, HashMap<String, Box<Node>>>>,
|
server_functions: Option<HashMap<String, HashMap<String, Box<Node>>>>,
|
||||||
servers: Option<HashMap<String, Arc<Mutex<TcpStream>>>>,
|
servers: Option<HashMap<String, Arc<Mutex<TcpStream>>>>,
|
||||||
|
encryption: Encryption,
|
||||||
|
private_key: Option<U512>,
|
||||||
|
public_key: Option<EllipticCurvePoint>,
|
||||||
external_func: Vec<
|
external_func: Vec<
|
||||||
fn(String, Vec<Variable>, Vec<Permission>, Vec<Permission>) -> ExternalFuncReturn,
|
fn(
|
||||||
|
String,
|
||||||
|
Vec<Variable>,
|
||||||
|
Vec<Permission>,
|
||||||
|
Vec<Permission>,
|
||||||
|
ExternalFunctionCallData,
|
||||||
|
) -> ExternalFuncReturn,
|
||||||
>,
|
>,
|
||||||
) -> GPSL {
|
) -> GPSL {
|
||||||
GPSL {
|
GPSL {
|
||||||
@ -72,6 +94,9 @@ impl GPSL {
|
|||||||
functions,
|
functions,
|
||||||
server_functions,
|
server_functions,
|
||||||
servers,
|
servers,
|
||||||
|
encryption,
|
||||||
|
private_key,
|
||||||
|
public_key,
|
||||||
global_variables: vec![],
|
global_variables: vec![],
|
||||||
blocks: VecDeque::new(),
|
blocks: VecDeque::new(),
|
||||||
external_func,
|
external_func,
|
||||||
@ -234,6 +259,11 @@ impl GPSL {
|
|||||||
args_value.clone(),
|
args_value.clone(),
|
||||||
block.accept.clone(),
|
block.accept.clone(),
|
||||||
block.reject.clone(),
|
block.reject.clone(),
|
||||||
|
ExternalFunctionCallData {
|
||||||
|
encryption: self.encryption.clone(),
|
||||||
|
private_key: self.private_key,
|
||||||
|
public_key: self.public_key,
|
||||||
|
},
|
||||||
);
|
);
|
||||||
if res.status == ExternalFuncStatus::SUCCESS {
|
if res.status == ExternalFuncStatus::SUCCESS {
|
||||||
return Ok(res.value);
|
return Ok(res.value);
|
||||||
@ -268,15 +298,15 @@ impl GPSL {
|
|||||||
let lhs = self.evaluate(lhs).expect("Cannot evaluate lhs.");
|
let lhs = self.evaluate(lhs).expect("Cannot evaluate lhs.");
|
||||||
let rhs = self.evaluate(rhs).expect("Cannot evaluate rhs.");
|
let rhs = self.evaluate(rhs).expect("Cannot evaluate rhs.");
|
||||||
|
|
||||||
if let Some(lhs) = lhs {
|
if let Some(lhs) = lhs.clone() {
|
||||||
if let Some(rhs) = rhs {
|
if let Some(rhs) = rhs {
|
||||||
match kind {
|
match kind {
|
||||||
NodeKind::ADD => match GPSL::extract_number(lhs) {
|
NodeKind::ADD => match GPSL::extract_number(lhs.clone()) {
|
||||||
Ok(lhs) => match GPSL::extract_number(rhs) {
|
Ok(lhs) => match GPSL::extract_number(rhs) {
|
||||||
Ok(rhs) => Ok(Some(Variable::Number { value: lhs + rhs })),
|
Ok(rhs) => Ok(Some(Variable::Number { value: lhs + rhs })),
|
||||||
Err(err) => Err(err),
|
Err(err) => Err(err),
|
||||||
},
|
},
|
||||||
Err(err) => match GPSL::extract_eep(lhs) {
|
Err(_) => match GPSL::extract_eep(lhs) {
|
||||||
Ok(lhs) => match GPSL::extract_eep(rhs) {
|
Ok(lhs) => match GPSL::extract_eep(rhs) {
|
||||||
Ok(rhs) => {
|
Ok(rhs) => {
|
||||||
Ok(Some(Variable::PureEncrypted { value: lhs + rhs }))
|
Ok(Some(Variable::PureEncrypted { value: lhs + rhs }))
|
||||||
@ -532,6 +562,10 @@ impl GPSL {
|
|||||||
Variable::Text {
|
Variable::Text {
|
||||||
value: String::default(),
|
value: String::default(),
|
||||||
}
|
}
|
||||||
|
} else if var_type == "eep" {
|
||||||
|
Variable::PureEncrypted {
|
||||||
|
value: EncryptedEllipticCurvePoint::default(),
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return Err(format!("{}: 未知の型です。", var_type));
|
return Err(format!("{}: 未知の型です。", var_type));
|
||||||
};
|
};
|
||||||
|
59
src/main.rs
59
src/main.rs
@ -1,6 +1,9 @@
|
|||||||
mod common;
|
mod common;
|
||||||
mod elliptic_curve;
|
mod elliptic_curve;
|
||||||
mod gpsl;
|
mod gpsl;
|
||||||
|
use common::finite_field::FiniteFieldElement;
|
||||||
|
use elliptic_curve::elliptic_curve::EllipticCurve;
|
||||||
|
use elliptic_curve::encryption::Encryption;
|
||||||
use gpsl::external_function::ExternalFuncReturn;
|
use gpsl::external_function::ExternalFuncReturn;
|
||||||
use gpsl::external_function::ExternalFuncStatus;
|
use gpsl::external_function::ExternalFuncStatus;
|
||||||
use gpsl::node::Node;
|
use gpsl::node::Node;
|
||||||
@ -8,6 +11,7 @@ use gpsl::node::NodeKind;
|
|||||||
use gpsl::vm::gpsl::ServerFunctionCall;
|
use gpsl::vm::gpsl::ServerFunctionCall;
|
||||||
use gpsl::{external_function::STD_FUNC, source::*, tokenizer::*, vm::gpsl::*};
|
use gpsl::{external_function::STD_FUNC, source::*, tokenizer::*, vm::gpsl::*};
|
||||||
use log::*;
|
use log::*;
|
||||||
|
use primitive_types::U512;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::io::BufRead;
|
use std::io::BufRead;
|
||||||
use std::io::BufReader;
|
use std::io::BufReader;
|
||||||
@ -89,6 +93,52 @@ fn listen_tcp_server(port: u16) -> TcpStream {
|
|||||||
panic!("Cannot connect to client");
|
panic!("Cannot connect to client");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn generate_encryption() -> Encryption {
|
||||||
|
let p = U512::from_str_radix(
|
||||||
|
"115792089237316195423570985008687907853269984665640564039457584007908834671663",
|
||||||
|
10,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let secp256_k1_a = FiniteFieldElement::new(U512::from(0u8), p);
|
||||||
|
let secp256_k1_b = FiniteFieldElement::new(U512::from(7u8), p);
|
||||||
|
let secp256_k1_base_x = FiniteFieldElement::new(
|
||||||
|
U512::from_str_radix(
|
||||||
|
"55066263022277343669578718895168534326250603453777594175500187360389116729240",
|
||||||
|
10,
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
p,
|
||||||
|
);
|
||||||
|
let secp256_k1_base_y = FiniteFieldElement::new(
|
||||||
|
U512::from_str_radix(
|
||||||
|
"32670510020758816978083085130507043184471273380659243275938904335757337482424",
|
||||||
|
10,
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
p,
|
||||||
|
);
|
||||||
|
let secp256_k1_order = FiniteFieldElement::new(
|
||||||
|
U512::from_str_radix(
|
||||||
|
"115792089237316195423570985008687907852837564279074904382605163141518161494337",
|
||||||
|
10,
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
p,
|
||||||
|
);
|
||||||
|
let ec = EllipticCurve {
|
||||||
|
a: secp256_k1_a,
|
||||||
|
b: secp256_k1_b,
|
||||||
|
};
|
||||||
|
|
||||||
|
Encryption {
|
||||||
|
ellictic_curve: ec,
|
||||||
|
base_point: ec.point(secp256_k1_base_x, secp256_k1_base_y),
|
||||||
|
order: secp256_k1_order,
|
||||||
|
plain_mapping: vec![],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
env::set_var("RUST_LOG", "info");
|
env::set_var("RUST_LOG", "info");
|
||||||
env_logger::init();
|
env_logger::init();
|
||||||
@ -126,6 +176,9 @@ fn server(args: Args) {
|
|||||||
Some(functions),
|
Some(functions),
|
||||||
Some(HashMap::new()),
|
Some(HashMap::new()),
|
||||||
Some(HashMap::new()),
|
Some(HashMap::new()),
|
||||||
|
generate_encryption(),
|
||||||
|
None,
|
||||||
|
None,
|
||||||
vec![STD_FUNC],
|
vec![STD_FUNC],
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -240,11 +293,17 @@ fn client(args: Args) {
|
|||||||
servers.insert(ip, Arc::new(Mutex::new(stream)));
|
servers.insert(ip, Arc::new(Mutex::new(stream)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let encryption = generate_encryption();
|
||||||
|
let private_key = Encryption::get_private_key();
|
||||||
|
|
||||||
let mut gpsl = GPSL::new(
|
let mut gpsl = GPSL::new(
|
||||||
source,
|
source,
|
||||||
Some(functions),
|
Some(functions),
|
||||||
Some(server_functions),
|
Some(server_functions),
|
||||||
Some(servers),
|
Some(servers),
|
||||||
|
encryption.clone(),
|
||||||
|
Some(private_key),
|
||||||
|
Some(encryption.get_public_key(private_key)),
|
||||||
vec![STD_FUNC],
|
vec![STD_FUNC],
|
||||||
);
|
);
|
||||||
let res = gpsl.run("main".to_string(), HashMap::new());
|
let res = gpsl.run("main".to_string(), HashMap::new());
|
||||||
|
Reference in New Issue
Block a user