#!/usr/bin/env python3 """Attended CCR-2026-0028 initial custody and host delivery. Silent, resumable.""" from pathlib import Path import argparse import hashlib import json import os import shlex import subprocess import sys ROOT = Path(__file__).resolve().parents[1] CCR = ROOT / 'credential-change-requests/CCR-2026-0028-railiance-clock-authority-signing.yaml' KV = 'platform/data/workloads/railiance-clock/authority-signing' KID = 'railiance01-clock-20260915-v1' TARGET = '/var/lib/railiance-clock/signing.pem' def validate_contract(ccr): errors=[] expected={'mount':'platform','kv_path':'platform/workloads/railiance-clock/authority-signing', 'fields':['PRIVATE_KEY_PEM','KEY_ID'],'auth':{'method':'attended-oidc','mount':'netkingdom','role':'platform-admin'}, 'runtime_access':False,'initial_cas':0} delivery={'surface':'attended-host-file','host':'92.205.62.239','ssh_user':'tegwick', 'target':TARGET,'owner':'railiance-clock','mode':'0600','directory_mode':'0700', 'procedure':'scripts/railiance_clock_custody.py'} if ccr.get('id')!='CCR-2026-0028' or ccr.get('request_type')!='attended-host-key-delivery': errors.append('unsupported attended host contract') if ccr.get('openbao')!=expected or ccr.get('delivery')!=delivery: errors.append('exact Clock custody and host binding required') if ccr.get('access_frontdoor',{}).get('resolvable') is not False: errors.append('runtime credential frontdoor must remain disabled') if ccr.get('status') in {'approved','applied','verified','active'}: comments=ccr.get('review',{}).get('comments',[]) for role in ['platform-operator','railiance-clock-owner']: if not any(c.get('reviewer')==f'User ({role})' and c.get('decision')=='approved' for c in comments): errors.append('explicit role approval missing: '+role) for section,fields in {'verification':['positive','negative','activation_conditions'], 'lifecycle':['deactivate','rotate','compromised']}.items(): for field in fields: if not ccr.get(section,{}).get(field):errors.append(section+'.'+field+' required') return errors class CustodyError(Exception): pass def run_cmd(argv,payload=None): r=subprocess.run(argv,input=payload,capture_output=True,timeout=90) if r.returncode:raise CustodyError('contained_command_failed') return r.stdout def bao(args,payload=None): return json.loads(run_cmd(['bao',*args],None if payload is None else json.dumps(payload).encode())) REMOTE = '''import os,sys,stat,pwd,subprocess,json,hashlib p='/var/lib/railiance-clock/signing.pem' u=pwd.getpwnam('railiance-clock') d=os.lstat(os.path.dirname(p)) assert stat.S_ISDIR(d.st_mode) and d.st_uid==u.pw_uid and stat.S_IMODE(d.st_mode)==0o700 key=sys.stdin.buffer.read(8193) assert 0