diff --git a/core/embed/rust/src/trezorhal/uzlib.rs b/core/embed/rust/src/trezorhal/uzlib.rs index 672deb45c..bfd3246fe 100644 --- a/core/embed/rust/src/trezorhal/uzlib.rs +++ b/core/embed/rust/src/trezorhal/uzlib.rs @@ -40,7 +40,7 @@ impl<'a> UzlibContext<'a> { ctx } - /// returns Ok(true) if DONE + /// Returns `Ok(true)` if all data was read. pub fn uncompress(&mut self, dest_buf: &mut [u8]) -> Result { unsafe { self.uncomp.dest = dest_buf.as_mut_ptr(); @@ -55,4 +55,18 @@ impl<'a> UzlibContext<'a> { } } } + + /// Skips a specified number of bytes (`nbytes`) in the uncompressed stream. + /// + /// Returns `Ok(true)` if all data was read. + pub fn skip(&mut self, nbytes: usize) -> Result { + let mut result = false; // false => OK, true => DONE + let mut sink = [0u8; 256]; + for i in (0..nbytes).step_by(sink.len()) { + let chunk_len = core::cmp::min(sink.len(), nbytes - i); + let chunk = &mut sink[0..chunk_len]; + result = self.uncompress(chunk)?; + } + Ok(result) + } }