From 8d4f8d53666a0efb0903fb75bcc25bee8ff4ad60 Mon Sep 17 00:00:00 2001 From: theubusu <80545678+theubusu@users.noreply.github.com> Date: Thu, 22 Jan 2026 22:31:01 +0100 Subject: [PATCH] novatek(nfwb): improvements to header and part parsing --- src/formats/novatek.rs | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/formats/novatek.rs b/src/formats/novatek.rs index 083255e..d99c029 100644 --- a/src/formats/novatek.rs +++ b/src/formats/novatek.rs @@ -10,14 +10,16 @@ use crate::utils::common; #[derive(BinRead)] struct Header { #[br(count = 4)] _magic_bytes: Vec, - #[br(count = 4)] _flags: Vec, - _header_size: u32, + version_major: u32, + version_minor: u32, _unused: u32, #[br(count = 16)] firmware_name_bytes: Vec, - #[br(count = 20)] _unknown1: Vec, + data_size: u32, + #[br(count = 16)] _md5_checksum: Vec, //data checksum part_count: u32, - _first_part_offset: u32, - #[br(count = 116)] _unknown2: Vec, + _data_start_offset: u32, + #[br(count = 128)] _signature: Vec, + _header_checksum: u32, //CRC32, calculated with the field set to 0 } impl Header { fn firmware_name(&self) -> String { @@ -27,10 +29,10 @@ impl Header { #[derive(BinRead)] struct PartEntry { - #[br(count = 16)] _unknown: Vec, - index: u32, + id: u32, size: u32, offset: u32, + #[br(count = 16)] _md5_checksum: Vec, } pub fn is_novatek_file(file: &File) -> bool { @@ -45,9 +47,10 @@ pub fn is_novatek_file(file: &File) -> bool { pub fn extract_novatek(mut file: &File, output_folder: &str) -> Result<(), Box> { let header: Header = file.read_le()?; - println!("File info:\nFirmware name: {}\nPart count: {}", header.firmware_name(), header.part_count); - let mut entries: Vec = Vec::new(); + println!("File info:\nFirmware name: {}\nVersion: {}.{}\nData size: {}\nPart count: {}", + header.firmware_name(), header.version_major, header.version_minor, header.data_size, header.part_count); + let mut entries: Vec = Vec::new(); for _i in 0..header.part_count { let part: PartEntry = file.read_le()?; entries.push(part); @@ -56,11 +59,11 @@ pub fn extract_novatek(mut file: &File, output_folder: &str) -> Result<(), Box