hubAuthVerdict function
Pure auth decision for one upgrade attempt (unit-testable — the socket wrapper stays trivial so the CRAP ratchet holds).
Implementation
HubAuthVerdict hubAuthVerdict(
String? credential,
String? masterSecret,
Iterable<String> enrolledSecrets,
) {
if (masterSecret == null) return (allowed: true, isMaster: false);
if (credential == masterSecret) return (allowed: true, isMaster: true);
return (
allowed: credential != null && enrolledSecrets.contains(credential),
isMaster: false,
);
}