M savefile_decoder/src/main.rs => savefile_decoder/src/main.rs +1 -1
@@ 3,7 3,7 @@ use std::fs;
use starkingdoms_common::unpack_savefile;
fn main() {
- let save = std::env::args().next();
+ let save = std::env::args().next().unwrap();
let key = fs::read_to_string("/etc/starkingdoms/app_key").unwrap();
let save_data = unpack_savefile(&key, save).unwrap();
println!("{:#?}", save_data);
M starkingdoms-common/src/lib.rs => starkingdoms-common/src/lib.rs +5 -5
@@ 56,15 56,15 @@ pub fn pack_savefile(key: &str, save_data: SaveData) -> String {
}
pub fn unpack_savefile(key: &str, file: String) -> Result<SaveData, Box<dyn Error>> {
// << reverse! <<
- let savefile_bytes = base64::engine::general_purpose::STANDARD.decode(file)?;
+ let savefile_bytes = base64::engine::general_purpose::STANDARD.decode(file).map_err(|e| format!("error decoding b64: {e}"))?;
- let save_file: Savefile = rmp_serde::from_slice(&savefile_bytes)?;
+ let save_file: Savefile = rmp_serde::from_slice(&savefile_bytes).map_err(|e| format!("error decoding savefile wrapper: {e}"))?;
- let mut mac: Hmac<Sha256> = Hmac::new_from_slice(key.as_bytes()).unwrap();
+ let mut mac: Hmac<Sha256> = Hmac::new_from_slice(key.as_bytes()).map_err(|e| format!("error loading hmac-sha256: {e}"));
mac.update(&save_file.data_msgpack);
- mac.verify_slice(&save_file.mac)?;
+ mac.verify_slice(&save_file.mac).map_err(|e| format!("error verifying signature: {e}"))?;
- let save_data = rmp_serde::from_slice(&save_file.data_msgpack)?;
+ let save_data = rmp_serde::from_slice(&save_file.data_msgpack).map_err(|e| format!("error decoding inner signature: {e}"))?;
Ok(save_data)
}