main.rs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. use rand::thread_rng;
  2. use serde_json::Value;
  3. use spiral_rs::client::*;
  4. use spiral_rs::util::*;
  5. use std::env;
  6. use std::time::Instant;
  7. fn send_api_req_text(path: &str, data: Vec<u8>) -> Option<String> {
  8. let client = reqwest::blocking::Client::builder()
  9. .timeout(None)
  10. .build()
  11. .unwrap();
  12. client
  13. .post(format!("https://spiralwiki.com:8088{}", path))
  14. .body(data)
  15. .send()
  16. .ok()?
  17. .text()
  18. .ok()
  19. }
  20. fn send_api_req_vec(path: &str, data: Vec<u8>) -> Option<Vec<u8>> {
  21. let client = reqwest::blocking::Client::builder()
  22. .timeout(None)
  23. .build()
  24. .unwrap();
  25. Some(
  26. client
  27. .post(format!("https://spiralwiki.com:8088{}", path))
  28. .body(data)
  29. .send()
  30. .ok()?
  31. .bytes()
  32. .ok()?
  33. .to_vec(),
  34. )
  35. }
  36. fn main() {
  37. let cfg_expand = r#"
  38. {'n': 2,
  39. 'nu_1': 10,
  40. 'nu_2': 6,
  41. 'p': 512,
  42. 'q_prime_bits': 21,
  43. 's_e': 85.83255142749422,
  44. 't_GSW': 10,
  45. 't_conv': 4,
  46. 't_exp': 16,
  47. 't_exp_right': 56,
  48. 'instances': 11,
  49. 'db_item_size': 100000 }
  50. "#;
  51. let _cfg_direct = r#"
  52. {'kinda_direct_upload': 1,
  53. 'n': 5,
  54. 'nu_1': 11,
  55. 'nu_2': 3,
  56. 'p': 65536,
  57. 'q_prime_bits': 27,
  58. 's_e': 57.793748020122216,
  59. 't_GSW': 3,
  60. 't_conv': 56,
  61. 't_exp': 56,
  62. 't_exp_right': 56}
  63. "#;
  64. let cfg = cfg_expand;
  65. let cfg = cfg.replace("'", "\"");
  66. let params = params_from_json(&cfg);
  67. let args: Vec<String> = env::args().collect();
  68. let idx_target: usize = (&args[1]).parse().unwrap();
  69. println!("initializing client");
  70. let mut rng = thread_rng();
  71. let mut c = Client::init(&params, &mut rng);
  72. println!("generating public parameters");
  73. let pub_params = c.generate_keys();
  74. let pub_params_buf = pub_params.serialize();
  75. println!("pub_params size {}", pub_params_buf.len());
  76. let query = c.generate_query(idx_target);
  77. let mut query_buf = query.serialize();
  78. println!("initial query size {}", query_buf.len());
  79. let setup_resp_str = send_api_req_text("/setup", pub_params_buf).unwrap();
  80. println!("{}", setup_resp_str);
  81. let resp_json: Value = serde_json::from_str(&setup_resp_str).unwrap();
  82. let id = resp_json["id"].as_str().unwrap();
  83. let mut full_query_buf = id.as_bytes().to_vec();
  84. full_query_buf.append(&mut query_buf);
  85. let now = Instant::now();
  86. let query_resp = send_api_req_vec("/query", full_query_buf).unwrap();
  87. let duration = now.elapsed().as_millis();
  88. println!("duration of query processing is {} ms", duration);
  89. println!("query_resp len {}", query_resp.len());
  90. // println!("query_resp {:x?}", query_resp);
  91. let result = c.decode_response(query_resp.as_slice());
  92. println!("{:x?}", result);
  93. }