from pathlib import Path
import json,hashlib,stat
H=Path(__file__).resolve().parent
def sha(p):return hashlib.sha256(p.read_bytes()).hexdigest()
m=H/'manifest.json';d=json.loads(m.read_text());n=0
for root,entries in [(H,d['public_files'])]+[(Path(g['root']),g['files']) for g in d['canonical_private_groups'].values()]:
 actual={p.relative_to(root).as_posix() for p in root.rglob('*') if p.is_file() and p!=m};assert actual=={e['path'] for e in entries}
 for e in entries:
  p=root/e['path'];assert not p.is_symlink() and sha(p)==e['sha256'] and p.stat().st_size==e['bytes'] and oct(stat.S_IMODE(p.stat().st_mode))==e['mode'];n+=1
for name,old in d['old_seals_verified_immutable'].items():
 p=H.parent/name/'manifest.json';assert sha(p)==old['manifest_SHA'];v=json.loads(p.read_text())
 for root,entries in [(p.parent,v['public_files'])]+[(Path(g['root']),g['files']) for g in v['canonical_private_groups'].values()]:
  for e in entries:
   p2=root/e['path'];assert sha(p2)==e['sha256'] and p2.stat().st_size==e['bytes'] and oct(stat.S_IMODE(p2.stat().st_mode))==e['mode'];n+=1
print(json.dumps({'all_seals_immutable':True,'verified_assets':n,'manifest_SHA':sha(m),'SQL':0,'HTTP':0,'DML':0}))
