DAT
Documentation

Codes d'erreur

Voici les codes d'erreur communs aux bibliothèques de service officiellement prises en charge par DAT.

Chaque code porte deux valeurs — impact et nouvelle tentative — et certains reçoivent en plus l'étiquette suspect.

Impact — ce que le service encaisse

C'est le critère pour déclencher une alerte. On ne regarde qu'une chose : « le service est-il à l'arrêt en ce moment ? »

ImpactSignificationExemple
CritiqueLe service ou une fonction précise s'arrête. Émission impossible, synchronisation définitivement en échec, initialisation en échecLe serveur émetteur n'a pas un seul certificat utilisable
PartielCertaines requêtes ou certains cycles échouent, mais le service continue de tourner. Il se rétablit généralement de lui-mêmeUn cycle CMS échoue. Tout continue avec les certificats déjà en place
Aucun impactUne requête est rejetée, et c'est toutUn token falsifié arrive. Il suffit de le filtrer

Aucun impact n'est pas un cas d'alerte. Si toute l'équipe d'astreinte devait vérifier parce qu'une entrée erronée est arrivée une fois, l'alerte perdrait tout son sens.

Suspect — enquêter si cela persiste

Les codes portant l'étiquette Suspect font partie du fonctionnement normal lorsqu'ils sont isolés. Un client peut envoyer une valeur erronée à tout moment, et le rôle de la bibliothèque est précisément de la filtrer.

Mais si ces erreurs surviennent de façon persistante, ou en rafale depuis une source précise, il s'agit de l'un de ces deux cas.

  • Anomalie de configuration — un déploiement incorrect, des clients d'une ancienne version encore en service, ou des certificats désalignés.
  • Tentative d'intrusion — une tentative de passer la vérification avec des tokens ou des clés falsifiés, ou un balayage à la recherche de valeurs valides.

C'est pourquoi il convient, pour ces codes, de suivre le nombre d'occurrences comme métrique. Il suffit d'alerter au franchissement d'un seuil.

Nouvelle tentative

Nouvelle tentativeSignification
TransitoireSe résout en réessayant après un backoff
PermanentNe pas réessayer. La configuration ou l'entrée doit être corrigée
ÉtatCe n'est pas une erreur mais un signal

Token

Problèmes portant sur la chaîne du token reçu elle-même.

DAT_TOKEN_MALFORMEDAucun impactPermanentshieldSuspect

Les parties séparées par des points ne sont pas exactement cinq, expire n'est pas un décimal pur, cid n'est pas un hexadécimal pur, plain ou secure ne sont pas en base64url, ou un champ numérique dépasse la plage entière représentable.

arrow_forwardRejeter la requête

DAT_TOKEN_EXPIREDAucun impactPermanent

expire <= now. L'instant pile compte aussi comme expiré — si expire == now, le token est déjà expiré.

arrow_forwardAmener à réémettre le token

DAT_TOKEN_UNKNOWNPartielPermanent

Une erreur de token qui ne se range dans aucune des catégories ci-dessus.

arrow_forwardConsulter les journaux

Ne jamais confondre expiration et erreur de format

Les réactions sont opposées — l'expiration est une fin de vie normale, il suffit de faire renouveler le token ; une erreur de format signifie que le token n'a jamais été émis par nous et doit être rejeté.

L'analyse établit d'abord la structure, puis examine les valeurs. Une chaîne comme "1.2.3", à qui il manque des parties, n'est pas un token expiré mais n'est pas un token du tout : c'est donc DAT_TOKEN_MALFORMED.

Un signe dans le champ expire, comme +100, n'est pas non plus une expiration mais une erreur de format. Seuls les chiffres ASCII purs sont admis.


Certificat

Le format de la chaîne du certificat, et la question de savoir si ce certificat est utilisable maintenant.

DAT_CERT_MALFORMEDCritiquePermanent

Les parties séparées par des points ne sont pas exactement huit, l'analyse de cid, start, duration ou ttl a échoué, un champ de clé n'est pas en base64url, ou start + duration + ttl dépasse u64.

arrow_forwardRedéployer le certificat

DAT_CERT_EXPIREDCritiquePermanent

start + duration + ttl < now. Entièrement expiré : ni l'émission ni la vérification ne sont possibles.

arrow_forwardRenouveler le certificat

DAT_CERT_NOT_YET_ISSUABLECritiqueTransitoire

now < start. La fenêtre d'émission n'est pas encore ouverte.

arrow_forwardAttendre

DAT_CERT_ISSUANCE_ENDEDCritiquePermanent

now > start + duration, mais il reste du ttl. L'émission n'est plus possible, seule la vérification l'est.

arrow_forwardDéployer un nouveau certificat

DAT_CERT_VERIFY_ONLYCritiquePermanent

Un certificat qui ne contient que la clé publique, sans clé privée de signature. La vérification fonctionne, l'émission non.

arrow_forwardVérifier la configuration de déploiement

DAT_CERT_NOT_FOUNDAucun impactPermanentshieldSuspect

Aucun certificat ne correspond au cid du token. Soit un token falsifié, soit une erreur de déploiement.

arrow_forwardRejeter la requête

DAT_CERT_NOT_SYNCEDPartielTransitoire

Ce cid n'a pas encore été reçu du CMS. Survient brièvement juste après le déploiement d'un nouveau certificat.

arrow_forwardRéessayer après la synchronisation

DAT_CERT_DUPLICATE_CIDCritiquePermanent

Le même cid apparaît plus d'une fois dans la liste importée.

arrow_forwardVérifier la réponse du serveur

DAT_CERT_UNKNOWNPartielPermanent

Une erreur de certificat qui ne se range dans aucune des catégories ci-dessus.

arrow_forwardConsulter les journaux

DAT_CERT_NOT_FOUND et DAT_CERT_NOT_SYNCED présentent les mêmes symptômes, mais appellent des réactions différentes. Le premier concerne un cid que nous n'avons jamais émis : attendre n'y changera rien. Le second se résout dès que la synchronisation a lieu.

Un DAT_CERT_NOT_FOUND isolé se filtre sans plus ; si le nombre augmente brusquement, c'est que le déploiement est désaligné ou que des tokens falsifiés circulent.


Signature

DAT_SIG_MISMATCHAucun impactPermanentshieldSuspect

La vérification de signature s'est terminée sur une divergence. La valeur HMAC ne correspond pas, ou ECDSA verify renvoie false.

arrow_forwardBloquer la session, journal de sécurité

DAT_SIG_MALFORMEDAucun impactPermanentshieldSuspect

La partie signature est vide, n'est pas en base64url, la longueur de r‖s ECDSA ne correspond pas à la courbe, ou la conversion DER a échoué.

arrow_forwardRejeter la requête

DAT_SIG_KEY_MISSINGCritiquePermanent

Une signature a été tentée avec une clé de vérification seule. Aucune clé privée n'est présente à l'exécution.

arrow_forwardVérifier la configuration du serveur émetteur

DAT_SIG_BACKENDPartielPermanent

L'opération de signature ou de vérification n'a pas pu s'exécuter du tout. Type de clé incorrect, handle libéré, ou erreur interne de la bibliothèque cryptographique.

arrow_forwardVérifier le type de clé et la bibliothèque

DAT_SIG_UNKNOWNPartielPermanent

Une erreur de signature qui ne se range dans aucune des catégories ci-dessus.

arrow_forwardConsulter les journaux

Ne pas mélanger divergence et échec du backend

Les deux codes se situent sur des axes opposés.

  • DAT_SIG_MISMATCH — une signature entrante qui ne correspond pas, donc sans impact sur le service ; en revanche, si cela persiste, c'est un cas suspect.
  • DAT_SIG_BACKEND — l'opération de vérification elle-même n'a pas tourné : c'est un problème de notre côté, et ce n'est pas un cas suspect.

Signaler un type de clé incorrect ou un bug de bibliothèque comme une « divergence de signature » revient à mêler aux indicateurs d'attaque une situation où c'est en réalité notre code qui est cassé. À l'inverse, une véritable falsification classée en erreur de backend disparaît entièrement des métriques de suspicion.


Chiffrement

Problèmes de chiffrement et de déchiffrement de la charge utile secure.

DAT_CRYPTO_TAG_MISMATCHAucun impactPermanentshieldSuspect

Le tag d'authentification AES-GCM ne correspond pas. Soit secure a été altéré, soit la clé du certificat est différente.

arrow_forwardBloquer la session, journal de sécurité

DAT_CRYPTO_DATA_INVALIDAucun impactPermanentshieldSuspect

Le chiffré n'est pas vide mais ne dépasse pas la taille de l'IV (12 octets), ou l'entrée dépasse la limite de l'implémentation (INT_MAX, etc.).

arrow_forwardRejeter la requête

DAT_CRYPTO_BACKENDPartielPermanent

L'opération de chiffrement ou de déchiffrement n'a pas pu s'exécuter. Plateforme sans prise en charge de GCM, ou échec d'initialisation du contexte.

arrow_forwardVérifier la prise en charge par la plateforme

DAT_CRYPTO_UNKNOWNPartielPermanent

Une erreur de chiffrement/déchiffrement qui ne se range dans aucune des catégories ci-dessus.

arrow_forwardConsulter les journaux

Une charge utile secure vide n'est pas une erreur. Une entrée vide donne une sortie vide, et aucun code n'est émis.

Sur le chemin qui saute la vérification de signature, le tag GCM est le seul contrôle d'intégrité. C'est pourquoi DAT_CRYPTO_TAG_MISMATCH n'est pas regroupé avec les autres échecs de déchiffrement sous un même code.


Clé

DAT_KEY_INVALIDAucun impactPermanentshieldSuspect

La longueur de clé ne correspond pas à l'algorithme déclaré (HMAC 32/48/64, AES 16/32), le point n'est pas sur la courbe, d ∉ [1,n-1], le format n'est pas non compressé (0x04), ou la clé privée et la clé publique ne forment pas une paire.

arrow_forwardRemplacer la clé

DAT_KEY_VERIFY_ONLY_UNSUPPORTEDCritiquePermanent

Un export en vérification seule a été demandé pour un algorithme de la famille HMAC.

arrow_forwardChanger d'algorithme

DAT_KEY_UNKNOWNPartielPermanent

Une erreur de clé qui ne se range dans aucune des catégories ci-dessus.

arrow_forwardConsulter les journaux

Trois cas qui se ressemblent mais diffèrent :

CodeSignification
DAT_KEY_VERIFY_ONLY_UNSUPPORTEDLimite structurelle de l'algorithme. HMAC est symétrique et n'a pas de notion de clé publique
DAT_SIG_KEY_MISSINGÉtat à l'exécution. Cette clé ne contient actuellement pas de clé privée
DAT_CERT_VERIFY_ONLYForme de déploiement. Ce certificat a été déployé en vérification seule

Gestionnaire

L'état de l'objet qui détient les certificats et sert à émettre et vérifier.

DAT_MANAGER_NO_CERTIFICATECritiqueTransitoire

Aucun certificat n'est détenu. Soit avant l'import, soit après l'échec de la première synchronisation CMS.

arrow_forwardVérifier la connexion au CMS

DAT_MANAGER_NO_ISSUABLE_CERTIFICATECritiquePermanent

Des certificats existent, mais aucun n'est utilisable pour émettre en ce moment. La cause est transmise avec l'erreur.

arrow_forwardDécider selon la cause — voir le tableau ci-dessous

DAT_MANAGER_DISPOSEDCritiquePermanent

Un gestionnaire ou un certificat déjà libéré a été utilisé.

arrow_forwardCorriger le code appelant

DAT_MANAGER_UNKNOWNPartielPermanent

Une erreur de gestionnaire qui ne se range dans aucune des catégories ci-dessus.

arrow_forwardConsulter les journaux

La cause (cause) de DAT_MANAGER_NO_ISSUABLE_CERTIFICATE est l'une des quatre suivantes. Ce qu'il faut faire diffère complètement selon l'origine.

CauseSignificationNouvelle tentativeRéaction
DAT_CERT_NOT_YET_ISSUABLEAvant le début de la fenêtre d'émissionTransitoireSe résout en attendant
DAT_CERT_ISSUANCE_ENDEDFenêtre d'émission close, vérification seule possiblePermanentUn nouveau certificat doit être déployé
DAT_CERT_EXPIREDTout le stock est expiréPermanentLes certificats doivent être renouvelés
DAT_CERT_VERIFY_ONLYTout le stock est en vérification seulePermanentUne erreur de configuration de déploiement

Si le serveur émetteur est configuré pour ne recevoir que des certificats de vérification, DAT_CERT_VERIFY_ONLY apparaît. Attendre n'y changera jamais rien : ce n'est donc pas un cas de nouvelle tentative.


Configuration

Problèmes portant sur les valeurs transmises par l'appelant. La famille CONFIG regroupe uniquement des erreurs à corriger dans le code ; si elles surviennent en exploitation, c'est que le déploiement est incorrect.

DAT_CONFIG_ALG_UNSUPPORTEDCritiquePermanent

Nom d'algorithme inconnu. Il doit correspondre exactement à la notation de transport (ECDSA-P256, IV-AES256-GCM).

arrow_forwardVérifier le nom de l'algorithme

DAT_CONFIG_ARGUMENT_INVALIDCritiquePermanent

Un argument obligatoire est null, se situe hors de la plage autorisée (valeur temporelle négative, interval <= 0), est d'un type non pris en charge (un nombre ou un booléen passé en charge utile dans un langage à typage dynamique), ou le corps à signer est vide.

arrow_forwardCorriger le code appelant

DAT_CONFIG_URI_INVALIDCritiquePermanent

L'URI du serveur CMS n'est pas conforme. Non analysable, schéma autre que http/https, ou présence d'un chemin ou d'une chaîne de requête.

arrow_forwardCorriger l'URI

DAT_CONFIG_UNKNOWNCritiquePermanent

Une erreur de configuration qui ne se range dans aucune des catégories ci-dessus.

arrow_forwardConsulter les journaux


Interne

Problèmes de l'environnement d'exécution et du runtime.

DAT_INTERNAL_UNAVAILABLECritiquePermanent

Le backend cryptographique ou l'API du runtime est purement et simplement absent. crypto.subtle manquant, plateforme sans prise en charge d'AES-GCM, ou version de runtime insuffisante.

arrow_forwardVérifier le déploiement et la plateforme

DAT_INTERNAL_UNKNOWNCritiquePermanent

Échec d'allocation mémoire, échec de génération d'aléa, échec d'acquisition de verrou, ou branche conçue comme inatteignable qui a été atteinte.

arrow_forwardConsulter les journaux

DAT_INTERNAL_UNAVAILABLE se résout en corrigeant l'environnement de déploiement ; DAT_INTERNAL_UNKNOWN relève généralement d'une défaillance du runtime ou d'un bug de la bibliothèque.


Synchronisation CMS

Sans synchronisation CMS, ces codes n'apparaissent pas.

DAT_CMS_UNREACHABLEPartielTransitoire

Échec DNS, connexion refusée, échec TLS, délai dépassé. Le délai dépassé n'a pas de code propre et est inclus ici — la réaction est la même.

arrow_forwardRéessayer après un backoff

DAT_CMS_UNAUTHORIZEDCritiquePermanent401

Le serveur a répondu 401. Le token est absent ou incorrect.

arrow_forwardVérifier la configuration du token

DAT_CMS_FORBIDDENCritiquePermanent403

Le serveur a répondu 403. Le token est valide mais n'a pas les droits sur cet endpoint.

arrow_forwardVérifier le niveau du token

DAT_CMS_ENDPOINT_NOT_FOUNDCritiquePermanent404

Le serveur a répondu 404. L'URL est incorrecte.

arrow_forwardVérifier la configuration de l'URL

DAT_CMS_SERVER_ERRORPartielTransitoire5xx

Le serveur a répondu 5xx.

arrow_forwardRéessayer après un backoff

DAT_CMS_HTTP_STATUSCritiquePermanent

Une réponse non-2xx qui ne correspond à aucun des cas ci-dessus.

arrow_forwardVérifier le code de statut

DAT_CMS_MALFORMEDCritiquePermanent

La réponse ne comporte pas de ligne de version, la ligne de version n'est pas un décimal pur, ou elle dépasse la plage.

arrow_forwardVérifier la version du serveur

DAT_CMS_IMPORT_FAILEDCritiquePermanent

La réponse est bien arrivée, mais les certificats n'ont pas pu être appliqués. L'origine est portée par cause.

arrow_forwardVérifier CERT_* / KEY_* dans cause

DAT_CMS_VERSION_RESETAucun impactÉtat200

Le serveur a renvoyé une version antérieure à la nôtre. C'est l'instruction de resynchronisation complète.

arrow_forwardTraité automatiquement

DAT_CMS_NOT_SYNCEDCritiqueTransitoire

Aucune synchronisation n'a encore réussi.

arrow_forwardAttendre la première synchronisation

DAT_CMS_SYNC_IN_PROGRESSAucun impactÉtat

La synchronisation précédente tourne encore, ce cycle a donc été sauté. Ce n'est pas une erreur.

DAT_CMS_NOT_SUPPORTEDCritiquePermanent

La fonctionnalité CMS n'est pas incluse dans la compilation. Feature désactivée ou CURL absent.

arrow_forwardVérifier les options de compilation

DAT_CMS_UNKNOWNPartielPermanent

Une erreur CMS qui ne se range dans aucune des catégories ci-dessus.

arrow_forwardConsulter les journaux

Les codes pour lesquels la synchronisation est jugée définitivement en échec (UNAUTHORIZED, FORBIDDEN, ENDPOINT_NOT_FOUND, MALFORMED, IMPORT_FAILED) sont tous critiques. Réessayer n'y change rien alors que les certificats continuent d'expirer : laissé sans réaction, le service finira nécessairement par s'arrêter.

À l'inverse, UNREACHABLE et SERVER_ERROR sont partiels. Tout continue avec les certificats en place et la synchronisation se rétablit d'elle-même au cycle suivant — mais si les échecs se répètent, on bascule à terme en critique. Placez l'alerte sur le nombre d'échecs consécutifs.

Les échecs de synchronisation ne sont pas levés en exception

Même si la première synchronisation échoue, le gestionnaire est renvoyé normalement — il vaut mieux que la synchronisation finisse par aboutir, même tardivement. L'échec est en revanche conservé comme état consultable.

ClientConsultation
Rustmanager.last_error().await
Gomanager.LastError()
JavaScriptmanager.lastError()
Pythonmanager.last_error()
Rubymanager.last_error
Java/Kotlinmanager.lastError
C#manager.LastError
C/C++dat_cms_manager_last_error(m)

Si aucune synchronisation n'a jamais réussi, on y trouve DAT_CMS_NOT_SYNCED ; en fonctionnement normal, la valeur est vide.


Serveur

Codes émis par le serveur CMS. Les clients ne les produisent pas, ils les reçoivent seulement.

DAT_AUTH_UNAUTHORIZEDAucun impactPermanentshieldSuspect401

L'en-tête Authorization est absent, ou le token n'est enregistré à aucun niveau.

DAT_AUTH_FORBIDDENAucun impactPermanentshieldSuspect403

Le token est bien enregistré, mais pas au niveau exigé par cet endpoint.

DAT_AUTH_DISABLEDCritiqueÉtat

Aucun token n'est configuré, l'authentification est donc entièrement désactivée. Même l'API d'émission de certificats est alors ouverte sans authentification. N'apparaît pas dans la réponse, uniquement dans le journal de démarrage.

arrow_forwardConfigurer un token immédiatement

DAT_REQ_MALFORMEDAucun impactPermanentshieldSuspect400

Les paramètres de chemin ou de requête sont ininterprétables, ou un argument est hors de la plage autorisée (delay négatif, plus de dix ans, etc.).

DAT_REQ_ALG_UNSUPPORTEDAucun impactPermanent400

Le nom d'algorithme du chemin de la requête est inconnu.

DAT_REQ_NOT_FOUNDAucun impactPermanentshieldSuspect404·405

Cette route n'existe pas, ou la méthode diffère.

DAT_REQ_TOO_LARGEAucun impactPermanentshieldSuspect413

La taille du corps de la requête est dépassée.

DAT_REQ_UNKNOWNAucun impactPermanent400

Une erreur de requête qui ne se range dans aucune des catégories ci-dessus.

DAT_STORE_UNAVAILABLEPartielTransitoire503

Connexion à la base perdue, pool de connexions épuisé, contention de verrou, délai dépassé. Le seul code qui utilise 503 — le signal qui permet au client de savoir que « cela s'arrangera en attendant ».

arrow_forwardRéessayer après un backoff

DAT_STORE_UNKNOWNCritiquePermanent500

Échec de lecture ou d'écriture, table absente, schéma non concordant, ligne de certificat corrompue.

arrow_forwardVérifier l'état de la base

Enveloppe de réponse :

json
{
  "code": "DAT_REQ_ALG_UNSUPPORTED",
  "details": { "algorithm": "BOGUS-ALG" }
}

Pour les erreurs survenant lors de la création et de la manipulation des certificats, le serveur utilise tels quels les codes communs ci-dessus (DAT_CERT_*, DAT_KEY_*, DAT_CONFIG_*).

À la réception d'un code serveur

Le client enveloppe le code serveur dans son propre code CMS et conserve l'original dans cause.

ReçuHTTPCode émis par le client
DAT_AUTH_UNAUTHORIZED401DAT_CMS_UNAUTHORIZED
DAT_AUTH_FORBIDDEN403DAT_CMS_FORBIDDEN
DAT_REQ_NOT_FOUND404DAT_CMS_ENDPOINT_NOT_FOUND
DAT_REQ_* (autres)400·405·413DAT_CMS_HTTP_STATUS
DAT_STORE_UNAVAILABLE503DAT_CMS_SERVER_ERROR
DAT_STORE_UNKNOWN500DAT_CMS_SERVER_ERROR
(rétrogradation de version)200DAT_CMS_VERSION_RESET

Rechercher par symptôme

SymptômeCode
Cela fonctionne juste après la connexion, puis c'est rejeté peu aprèsDAT_TOKEN_EXPIRED — La durée de vie du token est écoulée. Une réémission suffit
La vérification n'échoue que sur un serveur précisDAT_CERT_NOT_SYNCED — Ce serveur n'a pas encore reçu le nouveau CID
Le même token est rejeté sur tous les serveursDAT_CERT_NOT_FOUND — Un CID que nous n'avons jamais émis
Le serveur émetteur n'arrive pas à créer de tokenDAT_MANAGER_NO_ISSUABLE_CERTIFICATE + DAT_CERT_VERIFY_ONLYLe déploiement est en verify-only
L'émission n'échoue que juste après le démarrageDAT_MANAGER_NO_CERTIFICATE — Avant la première synchronisation. Cela se résout sous peu
La synchronisation CMS échoue continuellementDAT_CMS_UNAUTHORIZED — Le token est incorrect. Réessayer n'y change rien
Aucun certificat n'arriveDAT_CMS_ENDPOINT_NOT_FOUND — Une faute de frappe dans l'URL
L'échec ne se produit que sur une plateforme préciseDAT_INTERNAL_UNAVAILABLE — Le backend cryptographique est absent
Les échecs de vérification augmentent brusquementDAT_SIG_MISMATCH — Isolé c'est inoffensif, mais en rafale c'est une tentative de falsification
Le déchiffrement de secure échoue brusquementDAT_CRYPTO_TAG_MISMATCH — Certificats désalignés ou tentative d'altération
Avertissement dans le journal de démarrage du CMSDAT_AUTH_DISABLEDL'authentification est désactivée. L'API d'émission est ouverte

Annexe

Syntaxe des codes

DAT_<domaine>_<cause>
  • Lorsqu'une même cause survient dans des domaines différents, le nom de la cause est identique. DAT_TOKEN_MALFORMED et DAT_CERT_MALFORMED ne diffèrent que par l'objet concerné, le sens est le même.
  • _UNKNOWN est réservé au repli de chaque domaine. Il n'est pas employé dans un autre sens, par exemple « algorithme inconnu » (c'est _UNSUPPORTED qui sert à cela).
  • La chaîne de code est un contrat public. Le message peut être modifié librement, le code non.
CatégoriePréfixe de code
TokenDAT_TOKEN_
CertificatDAT_CERT_
SignatureDAT_SIG_
ChiffrementDAT_CRYPTO_
CléDAT_KEY_
GestionnaireDAT_MANAGER_
ConfigurationDAT_CONFIG_
InterneDAT_INTERNAL_
Synchronisation CMSDAT_CMS_
ServeurDAT_AUTH_ · DAT_REQ_ · DAT_STORE_

Accès selon le client

ClientType d'erreurCodeClasse de nouvelle tentativeÉvénement de sécurité
RustDatError enumerr.code()err.retry()err.security_event()
Go*dat.Errorerr.Codedat.Retry(err)dat.SecurityEvent(err)
JavaScriptDatError extends Errore.codee.retrye.securityEvent
PythonDatError(ValueError, RuntimeError)e.codee.retrye.security_event
RubySaro::Dat::Errore.codee.retrye.security_event?
Java/KotlinDatExceptione.codee.retrye.securityEvent
C#DatExceptione.Codee.Retrye.SecurityEvent
C/C++dat_error_tdat_error_code(e)dat_error_retry(e)dat_error_is_security_event(e)
Serveur CMSEnveloppe JSONchamp code

Événement de sécurité ne renvoie true que pour les deux cas où la falsification ou l'altération est avérée (DAT_SIG_MISMATCH, DAT_CRYPTO_TAG_MISMATCH). L'étiquette suspect de ce document couvre un périmètre plus large (jusqu'aux tokens, clés et requêtes falsifiés) ; il ne s'agit pour l'instant que d'une classification documentaire, non exposée par l'API cliente.

Le niveau d'impact est lui aussi une classification documentaire. Un même code peut frapper différemment selon l'endroit où il survient — DAT_KEY_INVALID n'a par exemple aucun impact lorsqu'il sert à filtrer un token entrant, mais fait échouer toute la synchronisation lorsqu'il survient à la lecture d'un certificat pendant la synchronisation CMS.

Les causes sous-jacentes ne sont pas perdues. DAT_MANAGER_NO_ISSUABLE_CERTIFICATE et DAT_CMS_IMPORT_FAILED transmettent l'origine via le chaînage d'exceptions propre à chaque langage (cause / __cause__ / InnerException / Unwrap()).

C/C++ conserve aussi les valeurs entières

Les valeurs entières existantes de dat_error_t sont conservées pour la compatibilité ABI, mais c'est le code textuel qui fait foi. La bibliothèque ne renvoie plus les anciennes valeurs : une comparaison comme err == DAT_ERROR_INVALID_DAT n'est donc plus juste. Comparez plutôt via dat_error_code(e).

C ne dispose pas de chaînage d'exceptions ; la cause se consulte séparément avec dat_manager_issuable_cause().