mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-04-24 03:50:14 +10:00
integrity_verification.py: Deduplicate chunklist logic
This commit is contained in:
@@ -5,16 +5,11 @@
|
|||||||
|
|
||||||
import binascii
|
import binascii
|
||||||
import hashlib
|
import hashlib
|
||||||
import struct
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
CHUNK_LENGTH = 4 + 32
|
CHUNK_LENGTH = 4 + 32
|
||||||
|
|
||||||
|
|
||||||
def hexswap(i):
|
|
||||||
return struct.unpack("<I", struct.pack(">I", i))[0]
|
|
||||||
|
|
||||||
|
|
||||||
def generate_chunklist_dict(chunklist):
|
def generate_chunklist_dict(chunklist):
|
||||||
chunklist = Path(chunklist).read_bytes() if isinstance(chunklist, str) else 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):
|
def chunk(file_path, chunklist, verbose):
|
||||||
chunklist = Path(chunklist).read_bytes() if isinstance(
|
chunks = generate_chunklist_dict(chunklist)
|
||||||
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)]
|
|
||||||
|
|
||||||
with Path(file_path).open("rb") as f:
|
with Path(file_path).open("rb") as f:
|
||||||
for chunk in chunks:
|
for chunk in chunks:
|
||||||
status = hashlib.sha256(f.read(chunk["length"])).digest()
|
status = hashlib.sha256(f.read(chunk["length"])).digest()
|
||||||
|
|||||||
Reference in New Issue
Block a user