"""Fehlerklassen des Lizenzprotokolls. Alle Fehler sind bewusst so gebaut, dass sie *keine* Geheimnisse (Schluessel, Signaturen, Payload-Inhalte) in ihrer Textform tragen -- sie landen in Logs und teilweise in HTTP-Antworten. """ from __future__ import annotations class LicensingError(Exception): """Basisklasse aller Protokollfehler.""" class InvalidLicenseFile(LicensingError): """Lizenzdatei ist strukturell kaputt, unvollstaendig oder falsch versioniert.""" class UntrustedIssuer(LicensingError): """Signatur ist in sich gueltig, der Aussteller aber nicht vertrauenswuerdig (Pinning).""" class SignatureInvalid(LicensingError): """Signatur passt nicht zur Payload.""" class ReplayDetected(LicensingError): """Nonce wurde schon gesehen oder Zeitstempel liegt ausserhalb des Frischefensters.""" class ProtocolViolation(LicensingError): """Anfrage/Antwort verletzt das erwartete Format oder die erwartete Aktion."""