71 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use std::{collections::HashMap, fmt::Display, fs::File, io::BufReader, path::Path};
 | |
| 
 | |
| use anyhow::Result;
 | |
| use serde::{Deserialize, Serialize};
 | |
| use serde_json::{from_reader, from_str};
 | |
| 
 | |
| pub fn load_keys<P: AsRef<Path> + std::fmt::Display>(path: Option<P>) -> Result<Keys> {
 | |
|     let keys = {
 | |
|         if let Some(path) = path {
 | |
|             let file = File::open(&path)?;
 | |
|             let reader = BufReader::new(file);
 | |
|             let keys: Keys = from_reader(reader)?;
 | |
| 
 | |
|             log::info!("Loaded keys from {}", path);
 | |
| 
 | |
|             keys
 | |
|         } else {
 | |
|             from_str(std::include_str!("../../keys.json"))?
 | |
|         }
 | |
|     };
 | |
| 
 | |
|     Ok(keys)
 | |
| }
 | |
| 
 | |
| #[derive(Serialize, Deserialize)]
 | |
| pub struct Keys {
 | |
|     #[serde(rename = "Products")]
 | |
|     pub products: HashMap<String, Product>,
 | |
|     #[serde(rename = "BINK")]
 | |
|     pub bink: HashMap<String, Bink>,
 | |
| }
 | |
| 
 | |
| #[derive(Serialize, Deserialize, Debug)]
 | |
| pub struct Product {
 | |
|     #[serde(rename = "BINK")]
 | |
|     pub bink: Vec<String>,
 | |
| }
 | |
| 
 | |
| #[derive(Serialize, Deserialize, Debug)]
 | |
| pub struct Bink {
 | |
|     pub p: String,
 | |
|     pub a: String,
 | |
|     pub b: String,
 | |
|     pub g: Point,
 | |
|     #[serde(rename = "pub")]
 | |
|     pub public: Point,
 | |
|     pub n: String,
 | |
|     #[serde(rename = "priv")]
 | |
|     pub private: String,
 | |
| }
 | |
| 
 | |
| #[derive(Serialize, Deserialize, Debug)]
 | |
| pub struct Point {
 | |
|     pub x: String,
 | |
|     pub y: String,
 | |
| }
 | |
| 
 | |
| impl Display for Bink {
 | |
|     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 | |
|         writeln!(f, " P: {}", self.p)?;
 | |
|         writeln!(f, " a: {}", self.a)?;
 | |
|         writeln!(f, " b: {}", self.b)?;
 | |
|         writeln!(f, "Gx: {}", self.g.x)?;
 | |
|         writeln!(f, "Gy: {}", self.g.y)?;
 | |
|         writeln!(f, "Kx: {}", self.public.x)?;
 | |
|         writeln!(f, "Ky: {}", self.public.y)?;
 | |
|         writeln!(f, " n: {}", self.n)?;
 | |
|         writeln!(f, " k: {}", self.private)?;
 | |
|         Ok(())
 | |
|     }
 | |
| }
 |