File size: 1,180 Bytes
f80a01b
7519c08
f80a01b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env python3
"""Fail-closed integrity check for the nyx package."""

from __future__ import annotations

import hashlib
import json
from pathlib import Path


ROOT = Path(__file__).resolve().parent


def digest(path: Path) -> str:
    checksum = hashlib.sha256()
    with path.open("rb") as stream:
        for block in iter(lambda: stream.read(8 * 1024 * 1024), b""):
            checksum.update(block)
    return checksum.hexdigest()


manifest = json.loads((ROOT / "release-manifest.json").read_text())
if manifest.get("repository") != "devanshbatham/nyx":
    raise SystemExit("Unexpected repository identity")

for name, metadata in manifest["files"].items():
    path = ROOT / name
    if not path.is_file() or path.is_symlink():
        raise SystemExit(f"Missing or unsafe release file: {name}")
    if path.stat().st_size != metadata["bytes"]:
        raise SystemExit(f"Size mismatch: {name}")
    if digest(path) != metadata["sha256"]:
        raise SystemExit(f"SHA-256 mismatch: {name}")

print(json.dumps({
    "verified": True,
    "files": len(manifest["files"]),
    "total_bytes": manifest["total_bytes"],
    "repository": manifest["repository"],
}))