import os
import hashlib
def sha256sum(file):
block_size = 16 * 1024 * 1024 b = bytearray(block_size)
file_hash = hashlib.sha256()
mv = memoryview(b)
with open(file, 'rb', buffering=0) as f:
while True:
n = f.readinto(mv)
if not n:
break
file_hash.update(mv[:n])
return file_hash.hexdigest()
llama_path = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
hash_list_file = os.path.join(llama_path, "SHA256SUMS")
if not os.path.exists(hash_list_file):
print(f"Hash list file not found: {hash_list_file}")
exit(1)
with open(hash_list_file, "r") as f:
hash_list = f.read().splitlines()
results = []
for line in hash_list:
hash_value, filename = line.split(" ")
file_path = os.path.join(llama_path, filename)
print(f"Verifying the checksum of {file_path}")
if os.path.exists(file_path):
file_hash = sha256sum(file_path)
if file_hash == hash_value:
valid_checksum = "V"
file_missing = ""
else:
valid_checksum = ""
file_missing = ""
else:
valid_checksum = ""
file_missing = "X"
results.append({
"filename": filename,
"valid checksum": valid_checksum,
"file missing": file_missing
})
print("\n" + "filename".ljust(40) + "valid checksum".center(20) + "file missing".center(20))
print("-" * 80)
for r in results:
print(f"{r['filename']:40} {r['valid checksum']:^20} {r['file missing']:^20}")