"""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."""
