Sfoglia il codice sorgente

remove ascii from save file

Rain 10 mesi fa
parent
commit
d2d47b2599
2 ha cambiato i file con 49 aggiunte e 3 eliminazioni
  1. 9 3
      client/src/main.rs
  2. 40 0
      utils/src/binary.rs

+ 9 - 3
client/src/main.rs

@@ -28,6 +28,7 @@ const MAX_USERNAME_LENGTH: usize = 16;
 const DEFAULT_USERNAME_PREFIX: &str = "Myst";
 const DEFAULT_USERNAME_PREFIX: &str = "Myst";
 
 
 const SAVE_FILE: &str = "savedata.bin";
 const SAVE_FILE: &str = "savedata.bin";
+const SAVE_FILE_FUZZY: u64 = 0b0110110001101001011001110110110101100001001000000101100001000100;
 const REMOTE_REFRESH_RATE: u64 = 10;
 const REMOTE_REFRESH_RATE: u64 = 10;
 
 
 // TODO: Add server refresh rate
 // TODO: Add server refresh rate
@@ -77,9 +78,10 @@ pub fn save_appdata(siv: &mut Cursive) {
 
 
     let savedata = persistence::Savedata::from(appdata);
     let savedata = persistence::Savedata::from(appdata);
     let bytes = savedata.serialize_checked();
     let bytes = savedata.serialize_checked();
+    let fuzzy_bytes = utils::binary::fuzzy_bytes(bytes, SAVE_FILE_FUZZY);
 
 
     let mut file = std::fs::File::create(SAVE_FILE).expect("Failed to create savedata file.");
     let mut file = std::fs::File::create(SAVE_FILE).expect("Failed to create savedata file.");
-    file.write_all(&bytes)
+    file.write_all(&fuzzy_bytes)
         .expect("Failed to write savedata file.");
         .expect("Failed to write savedata file.");
 }
 }
 
 
@@ -88,10 +90,14 @@ pub fn load_appdata(siv: &mut Cursive) -> std::io::Result<()> {
 
 
     let mut bytes = Vec::new();
     let mut bytes = Vec::new();
     file.read_to_end(&mut bytes)?;
     file.read_to_end(&mut bytes)?;
+    let useful_bytes = utils::binary::fuzzy_bytes(bytes, SAVE_FILE_FUZZY);
 
 
-    let savedata = persistence::Savedata::deserialize_checked(bytes).unwrap();
-    let appdata = Appdata::from(savedata);
+    let Ok(savedata) = persistence::Savedata::deserialize_checked(useful_bytes) else {
+        // If the file is corrupted, create a new one
+        return Ok(());
+    };
 
 
+    let appdata = Appdata::from(savedata);
     siv.set_user_data(appdata);
     siv.set_user_data(appdata);
 
 
     Ok(())
     Ok(())

+ 40 - 0
utils/src/binary.rs

@@ -28,3 +28,43 @@ where
     }
     }
     Some(bytes)
     Some(bytes)
 }
 }
+
+pub fn fuzzy_bytes(mut data: Vec<u8>, modifier: u64) -> Vec<u8> {
+    let binding = modifier.to_be_bytes();
+    let modifier_bytes = binding.as_slice();
+
+    #[cfg(test)]
+    println!("Modifier bytes: {:?}", modifier_bytes);
+
+    for data_chunk in data.chunks_mut(64 / 8) {
+        for (data_byte, modifier_byte) in data_chunk.iter_mut().zip(modifier_bytes.iter()) {
+            #[cfg(test)]
+            println!("Data byte: {}, Modifier byte: {}", data_byte, modifier_byte);
+            *data_byte ^= *modifier_byte;
+        }
+    }
+
+    data
+}
+
+#[cfg(test)]
+mod test {
+    use crate::rng;
+
+    use super::*;
+
+    #[test]
+    fn test_fuzzy_bytes() {
+        let data = vec![1, 2, 3, 4, 5];
+        let modifier = rng::random_number();
+
+        let fuzzy = fuzzy_bytes(data.clone(), modifier);
+        let unfuzzy = fuzzy_bytes(fuzzy.clone(), modifier);
+
+        assert_eq!(unfuzzy, data);
+        assert_ne!(fuzzy, data);
+        assert_ne!(fuzzy, unfuzzy);
+
+        assert_eq!(fuzzy.len(), data.len());
+    }
+}