~starkingdoms/starkingdoms

bb791cd14e850928d3c4d41b59347a7359825353 — core 1 year, 11 months ago dccdf4a
maybe fix savefiles
2 files changed, 6 insertions(+), 6 deletions(-)

M savefile_decoder/src/main.rs
M starkingdoms-common/src/lib.rs
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)
}