File size: 883 Bytes
12496fc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from pathlib import Path
from hashlib import sha256
import argparse
import json
def verify(root):
root = Path(root).resolve()
manifest = json.loads((root / "reports/release-manifest.json").read_text(encoding="utf-8"))
for entry in manifest["files"]:
path = (root / entry["path"]).resolve()
if not path.is_relative_to(root) or not path.is_file():
raise ValueError("Missing file or invalid path: " + entry["path"])
if path.stat().st_size != entry["bytes"] or sha256(path.read_bytes()).hexdigest() != entry["sha256"]:
raise ValueError("Hash mismatch: " + entry["path"])
return {"verified_files": len(manifest["files"]), "source_commit": manifest["source_commit"]}
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("root")
print(json.dumps(verify(parser.parse_args().root)))
|