mirror of
https://github.com/luxfi/multi-party-ecdsa.git
synced 2026-10-30 15:24:24 +00:00
144 lines
4.5 KiB
Rust
144 lines
4.5 KiB
Rust
use std::collections::HashMap;
|
|
use std::fs;
|
|
use std::sync::RwLock;
|
|
|
|
use rocket::serde::json::Json;
|
|
use rocket::{post, routes, State};
|
|
use uuid::Uuid;
|
|
|
|
mod common;
|
|
use common::{Entry, Index, Key, Params, PartySignup};
|
|
|
|
#[post("/get", format = "json", data = "<request>")]
|
|
fn get(
|
|
db_mtx: &State<RwLock<HashMap<Key, String>>>,
|
|
request: Json<Index>,
|
|
) -> Json<Result<Entry, ()>> {
|
|
let index: Index = request.0;
|
|
let hm = db_mtx.read().unwrap();
|
|
match hm.get(&index.key) {
|
|
Some(v) => {
|
|
let entry = Entry {
|
|
key: index.key,
|
|
value: v.clone(),
|
|
};
|
|
Json(Ok(entry))
|
|
}
|
|
None => Json(Err(())),
|
|
}
|
|
}
|
|
|
|
#[post("/set", format = "json", data = "<request>")]
|
|
fn set(db_mtx: &State<RwLock<HashMap<Key, String>>>, request: Json<Entry>) -> Json<Result<(), ()>> {
|
|
let entry: Entry = request.0;
|
|
let mut hm = db_mtx.write().unwrap();
|
|
hm.insert(entry.key.clone(), entry.value);
|
|
Json(Ok(()))
|
|
}
|
|
|
|
#[post("/signupkeygen", format = "json")]
|
|
fn signup_keygen(db_mtx: &State<RwLock<HashMap<Key, String>>>) -> Json<Result<PartySignup, ()>> {
|
|
let data = fs::read_to_string("params.json")
|
|
.expect("Unable to read params, make sure config file is present in the same folder ");
|
|
let params: Params = serde_json::from_str(&data).unwrap();
|
|
let parties = params.parties.parse::<u16>().unwrap();
|
|
|
|
let key = "signup-keygen".to_string();
|
|
|
|
let party_signup = {
|
|
let hm = db_mtx.read().unwrap();
|
|
let value = hm.get(&key).unwrap();
|
|
let client_signup: PartySignup = serde_json::from_str(value).unwrap();
|
|
if client_signup.number < parties {
|
|
PartySignup {
|
|
number: client_signup.number + 1,
|
|
uuid: client_signup.uuid,
|
|
}
|
|
} else {
|
|
PartySignup {
|
|
number: 1,
|
|
uuid: Uuid::new_v4().to_string(),
|
|
}
|
|
}
|
|
};
|
|
|
|
let mut hm = db_mtx.write().unwrap();
|
|
hm.insert(key, serde_json::to_string(&party_signup).unwrap());
|
|
Json(Ok(party_signup))
|
|
}
|
|
|
|
#[post("/signupsign", format = "json")]
|
|
fn signup_sign(db_mtx: &State<RwLock<HashMap<Key, String>>>) -> Json<Result<PartySignup, ()>> {
|
|
//read parameters:
|
|
let data = fs::read_to_string("params.json")
|
|
.expect("Unable to read params, make sure config file is present in the same folder ");
|
|
let params: Params = serde_json::from_str(&data).unwrap();
|
|
let threshold = params.threshold.parse::<u16>().unwrap();
|
|
let key = "signup-sign".to_string();
|
|
|
|
let party_signup = {
|
|
let hm = db_mtx.read().unwrap();
|
|
let value = hm.get(&key).unwrap();
|
|
let client_signup: PartySignup = serde_json::from_str(value).unwrap();
|
|
if client_signup.number < threshold + 1 {
|
|
PartySignup {
|
|
number: client_signup.number + 1,
|
|
uuid: client_signup.uuid,
|
|
}
|
|
} else {
|
|
PartySignup {
|
|
number: 1,
|
|
uuid: Uuid::new_v4().to_string(),
|
|
}
|
|
}
|
|
};
|
|
|
|
let mut hm = db_mtx.write().unwrap();
|
|
hm.insert(key, serde_json::to_string(&party_signup).unwrap());
|
|
Json(Ok(party_signup))
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
// let mut my_config = Config::development();
|
|
// my_config.set_port(18001);
|
|
let db: HashMap<Key, String> = HashMap::new();
|
|
let db_mtx = RwLock::new(db);
|
|
//rocket::custom(my_config).mount("/", routes![get, set]).manage(db_mtx).launch();
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
//////////////////////////init signups://////////////////////////
|
|
/////////////////////////////////////////////////////////////////
|
|
|
|
let keygen_key = "signup-keygen".to_string();
|
|
let sign_key = "signup-sign".to_string();
|
|
|
|
let uuid_keygen = Uuid::new_v4().to_string();
|
|
let uuid_sign = Uuid::new_v4().to_string();
|
|
|
|
let party1 = 0;
|
|
let party_signup_keygen = PartySignup {
|
|
number: party1,
|
|
uuid: uuid_keygen,
|
|
};
|
|
let party_signup_sign = PartySignup {
|
|
number: party1,
|
|
uuid: uuid_sign,
|
|
};
|
|
{
|
|
let mut hm = db_mtx.write().unwrap();
|
|
hm.insert(
|
|
keygen_key,
|
|
serde_json::to_string(&party_signup_keygen).unwrap(),
|
|
);
|
|
hm.insert(sign_key, serde_json::to_string(&party_signup_sign).unwrap());
|
|
}
|
|
/////////////////////////////////////////////////////////////////
|
|
rocket::build()
|
|
.mount("/", routes![get, set, signup_keygen, signup_sign])
|
|
.manage(db_mtx)
|
|
.launch()
|
|
.await
|
|
.unwrap();
|
|
}
|