integrity_verification.py: Deduplicate chunklist logic

This commit is contained in:
Mykola Grymalyuk
2022-05-14 15:38:28 -06:00
parent 4aec8898d4
commit 858f3b0162

View File

@@ -5,16 +5,11 @@
import binascii
import hashlib
import struct
from pathlib import Path
CHUNK_LENGTH = 4 + 32
def hexswap(i):
return struct.unpack("<I", struct.pack(">I", i))[0]
def generate_chunklist_dict(chunklist):
chunklist = Path(chunklist).read_bytes() if isinstance(chunklist, str) else chunklist
@@ -36,24 +31,7 @@ def generate_chunklist_dict(chunklist):
def chunk(file_path, chunklist, verbose):
chunklist = Path(chunklist).read_bytes() if isinstance(
chunklist, str) else chunklist
header = {
"magic": chunklist[:4],
"length": int.from_bytes(chunklist[4:8], "little"),
"fileVersion": chunklist[8],
"chunkMethod": chunklist[9],
"sigMethod": chunklist[10],
"chunkCount": int.from_bytes(chunklist[12:20], "little"),
"chunkOffset": int.from_bytes(chunklist[20:28], "little"),
"sigOffset": int.from_bytes(chunklist[28:36], "little")
}
all_chunks = chunklist[header["chunkOffset"]:header["chunkOffset"]+header["chunkCount"]*CHUNK_LENGTH]
chunks = [{"length": int.from_bytes(all_chunks[i:i+4], "little"), "checksum": all_chunks[i+4:i+CHUNK_LENGTH]}
for i in range(0, len(all_chunks), CHUNK_LENGTH)]
chunks = generate_chunklist_dict(chunklist)
with Path(file_path).open("rb") as f:
for chunk in chunks:
status = hashlib.sha256(f.read(chunk["length"])).digest()