#[derive(Debug, Clone, thiserror::Error, PartialEq, Eq)]
pub enum SharedAuthError {
#[error("M01: alg=none rejected")]
AlgNone,
#[error("M02: algorithm outside whitelist")]
AlgNotWhitelisted,
#[error("M03: HMAC algorithm rejected")]
AlgHmacRejected,
#[error("M04: RSA algorithm rejected")]
AlgRsaRejected,
#[error("M05: ECDSA algorithm rejected")]
AlgEcdsaRejected,
#[error("M07: jku header rejected")]
HeaderJku,
#[error("M08: x5u header rejected")]
HeaderX5u,
#[error("M09: jwk header rejected")]
HeaderJwk,
#[error("M10: x5c header rejected")]
HeaderX5c,
#[error("M11: crit header rejected")]
HeaderCrit,
#[error("M12: kid missing or unknown")]
KidUnknown,
#[error("M13: typ mismatch")]
TypMismatch,
#[error("M14: nested JWS rejected")]
NestedJws,
#[error("M15: JWE rejected")]
JwePayload,
#[error("M16: extra header params")]
HeaderExtraParam,
#[error("M16a: b64=false rejected")]
HeaderB64False,
#[error("M31: JWS JSON serialization rejected — Compact only")]
JwsJsonRejected,
#[error("M32: JSON object contains duplicate keys")]
DuplicateJsonKeys,
#[error("M33: segment contains non-URL-safe base64 characters")]
LaxBase64,
#[error("M34: token exceeds maximum size")]
OversizedToken,
#[error("token is not a JWS Compact serialization")]
NotJwsCompact,
#[error("header is not valid JSON")]
HeaderUnparseable,
#[error("payload is not valid JSON")]
PayloadUnparseable,
}