diff --git a/rust/hg-core/src/revlog/index.rs b/rust/hg-core/src/revlog/index.rs
index 4e6620b7fbbb1d38a747cdf1fcc4f3793b96f3ad_cnVzdC9oZy1jb3JlL3NyYy9yZXZsb2cvaW5kZXgucnM=..51cc12158f9738b83fb8955e61ba4974683997e6_cnVzdC9oZy1jb3JlL3NyYy9yZXZsb2cvaW5kZXgucnM= 100644
--- a/rust/hg-core/src/revlog/index.rs
+++ b/rust/hg-core/src/revlog/index.rs
@@ -426,6 +426,10 @@
         Ok(())
     }
 
+    pub fn pack_header(&self, header: i32) -> [u8; 4] {
+        header.to_be_bytes()
+    }
+
     pub fn remove(&mut self, rev: Revision) -> Result<(), RevlogError> {
         let offsets = self.get_offsets().clone();
         self.bytes.remove(rev, offsets.as_deref())?;
diff --git a/rust/hg-cpython/src/revlog.rs b/rust/hg-cpython/src/revlog.rs
index 4e6620b7fbbb1d38a747cdf1fcc4f3793b96f3ad_cnVzdC9oZy1jcHl0aG9uL3NyYy9yZXZsb2cucnM=..51cc12158f9738b83fb8955e61ba4974683997e6_cnVzdC9oZy1jcHl0aG9uL3NyYy9yZXZsb2cucnM= 100644
--- a/rust/hg-cpython/src/revlog.rs
+++ b/rust/hg-cpython/src/revlog.rs
@@ -216,7 +216,12 @@
 
     /// return a binary packed version of the header
     def pack_header(&self, *args, **kw) -> PyResult<PyObject> {
-        self.call_cindex(py, "pack_header", args, kw)
+        let rindex = self.index(py).borrow();
+        let packed = rindex.pack_header(args.get_item(py, 0).extract(py)?);
+        let packed = PyBytes::new(py, &packed);
+        let cpacked = self.call_cindex(py, "pack_header", args, kw)?;
+        assert!(packed.as_object().compare(py, cpacked)?.is_eq());
+        Ok(packed.into_object())
     }
 
     /// get an index entry