nl::Weave::Profiles::Security::CASE::WeaveCASEAuthDelegate

Il s'agit d'une classe abstraite.

#include <src/lib/profiles/security/WeaveCASE.h>

Interface abstraite à laquelle les actions d'authentification sont déléguées lors de l'établissement de la session CASE.

Résumé

Héritage

Sous-classes directes connues : nl::Weave::DeviceManager::WeaveDeviceManager

Fonctions publiques

BeginValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
virtual WEAVE_ERROR
Appelé au début de la validation du certificat.
EncodeNodeCertInfo(const BeginSessionContext & msgCtx, TLVWriter & writer)=0
virtual WEAVE_ERROR
Encodez les informations de certificat CASE pour le nœud local.
EncodeNodePayload(const BeginSessionContext & msgCtx, uint8_t *payloadBuf, uint16_t payloadBufSize, uint16_t & payloadLen)
virtual WEAVE_ERROR
Encodez une charge utile spécifique à l'application à inclure dans le message CASE envoyé à l'homologue.
EndValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
virtual void
Appelé à la fin de la validation du certificat.
GenerateNodeSignature(const BeginSessionContext & msgCtx, const uint8_t *msgHash, uint8_t msgHashLen, TLVWriter & writer, uint64_t tag)=0
virtual WEAVE_ERROR
Générez une signature à l'aide de la clé privée du nœud local.
HandleValidationResult(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet, WEAVE_ERROR & validRes)=0
virtual WEAVE_ERROR
Appelé avec le résultat de la validation du certificat.
OnPeerCertsLoaded(const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet)
virtual WEAVE_ERROR
Appelée après le chargement des certificats du pair.

Fonctions publiques

BeginValidation

virtual WEAVE_ERROR BeginValidation(
  const BeginSessionContext & msgCtx,
  ValidationContext & validCtx,
  WeaveCertificateSet & certSet
)=0

Appelé au début de la validation du certificat.

Les implémentations doivent initialiser l'objet WeaveCertificateSet fourni avec suffisamment de ressources pour gérer la validation de certificat à venir. À ce stade, les implémentations peuvent charger des certificats racine ou d'autorité de certification approuvés dans l'ensemble de certificats, ou attendre l'appel de OnPeerCertsLoaded().

Chaque certificat chargé dans l'ensemble de certificats se voit attribuer un type de certificat par défaut par la fonction de chargement. Les implémentations doivent ajuster ces types si nécessaire pour garantir le traitement correct du certificat lors de la validation et l'attribution correcte de WeaveAuthMode pour les interactions CASE.

Le contexte de validation fourni sera initialisé avec un ensemble de critères de validation par défaut, que l'implémentation peut modifier si nécessaire. L'implémentation doit définir le champ EffectiveTime ou les indicateurs de validation appropriés pour supprimer la validation de la durée de validité du certificat.

Si des résultats de validation détaillés sont souhaités, l'implémentation peut initialiser les champs CertValidationResults et CertValidationLen.

Les implémentations doivent conserver toutes les ressources allouées lors de BeginValidation() jusqu'à l'appel de EndValidation() correspondant. Les implémentations sont garanties, car EndValidation() est appelé exactement une fois pour chaque appel réussi à BeginValidation().

EncodeNodeCertInfo

virtual WEAVE_ERROR EncodeNodeCertInfo(
  const BeginSessionContext & msgCtx,
  TLVWriter & writer
)=0

Encodez les informations de certificat CASE pour le nœud local.

Les implémentations peuvent utiliser cet appel pour remplacer l'encodage par défaut de la structure CertificateInformation CASE pour le nœud local. Lorsqu'elle est appelée, l'implémentation doit écrire une structure CertificateInformation contenant au moins le certificat d'entité du nœud local. L'implémentation peut éventuellement inclure un ensemble de certificats et/ou d'ancres de confiance associés.

EncodeNodePayload

virtual WEAVE_ERROR EncodeNodePayload(
  const BeginSessionContext & msgCtx,
  uint8_t *payloadBuf,
  uint16_t payloadBufSize,
  uint16_t & payloadLen
)

Encodez une charge utile spécifique à l'application à inclure dans le message CASE envoyé à l'homologue.

L'implémentation de cette méthode est facultative. L'implémentation par défaut renvoie une charge utile de longueur nulle.

EndValidation

virtual void EndValidation(
  const BeginSessionContext & msgCtx,
  ValidationContext & validCtx,
  WeaveCertificateSet & certSet
)=0

Appelée à la fin de la validation du certificat.

Les implémentations peuvent utiliser cet appel pour effectuer un nettoyage une fois la validation de la certification terminée. Les implémentations sont garanties, car EndValidation() est appelé exactement une fois pour chaque appel réussi à BeginValidation().

GenerateNodeSignature

virtual WEAVE_ERROR GenerateNodeSignature(
  const BeginSessionContext & msgCtx,
  const uint8_t *msgHash,
  uint8_t msgHashLen,
  TLVWriter & writer,
  uint64_t tag
)=0

Générez une signature à l'aide de la clé privée du nœud local.

Lorsqu'elles sont appelées, les implémentations doivent calculer une signature sur la valeur de hachage donnée à l'aide de la clé privée du nœud. La signature générée doit ensuite être écrite sous la forme d'une structure ECDSASignature CASE dans l'écriture TLV fournie à l'aide de la balise spécifiée.

Lorsque la clé privée du nœud est stockée dans un tampon local, la fonction utilitaire GenerateAndEncodeWeaveECDSASignature() peut être utile pour implémenter cette méthode.

HandleValidationResult

virtual WEAVE_ERROR HandleValidationResult(
  const BeginSessionContext & msgCtx,
  ValidationContext & validCtx,
  WeaveCertificateSet & certSet,
  WEAVE_ERROR & validRes
)=0

Appelé avec le résultat de la validation du certificat.

Les implémentations peuvent utiliser cet appel pour inspecter et éventuellement modifier le résultat de la validation du certificat de l'émetteur. Si la validation a réussi, validRes est défini sur WEAVE_NO_ERROR. Dans ce cas, le contexte de validation contient des informations sur le résultat. En particulier, le champ "TrustAnchor" sera défini sur le certificat de l'ancre de confiance.

Si l'implémentation a initialisé les champs CertValidationResults et CertValidationLen dans la structure ValidationContext lors de l'appel de BeginValidation(), ces champs contiennent des résultats de validation détaillés pour chaque certificat de l'ensemble de certificats.

Les implémentations peuvent remplacer ce paramètre en définissant validRes sur une valeur d'erreur, entraînant ainsi l'échec de la validation.

Si la validation échoue, validRes indique le motif de l'échec. Les implémentations peuvent remplacer le résultat par une valeur d'erreur différente, mais NE DOIVENT PAS définir le résultat sur WEAVE_NO_ERROR.

OnPeerCertsLoaded

virtual WEAVE_ERROR OnPeerCertsLoaded(
  const BeginSessionContext & msgCtx,
  WeaveDN & subjectDN,
  CertificateKeyId & subjectKeyId,
  ValidationContext & validCtx,
  WeaveCertificateSet & certSet
)

Appelée après le chargement des certificats du pair.

Les implémentations peuvent utiliser cet appel pour finaliser les certificats d'entrée et les critères de validation qui seront utilisés pour valider le certificat de l'émetteur. Au moment de l'appel, les certificats fournis par l'homologue auront été chargés dans l'ensemble de certificats (y compris son propre certificat, le cas échéant). De plus, les arguments subjectDN et subjectKeyId auront été initialisés avec des valeurs qui seront utilisées pour résoudre le certificat de l'émetteur à partir de l'ensemble de certificats. Si le pair a fourni son propre certificat (et non une référence de certificat), le champ EntityCert de l'argument validCtx contient un pointeur vers ce certificat.

Au cours de cet appel, les implémentations peuvent modifier le contenu de l'ensemble de certificats, y compris en ajoutant de nouveaux certificats. Ils peuvent également modifier les arguments subjectDN, subjectKeyId ou validCtx si nécessaire. Plus important encore, les implémentations doivent ajuster les champs du type de certificat avec l'ensemble de certificats avant de les renvoyer afin de s'assurer que les certificats sont traités correctement lors de la validation et des contrôles d'accès ultérieurs.

REMARQUE : Si l'homologue fournit une référence de certificat pour lui-même, plutôt qu'un certificat complet, le champ EntityCert du contexte de validation contient une valeur NULL. Si une implémentation souhaite prendre en charge les références à des certificats, elle doit ajouter un certificat correspondant au nom distinctif de l'objet du pair et à l'ID de clé à l'ensemble de certificats avant d'être renvoyé.

L'implémentation de cette méthode est facultative. L'implémentation par défaut ne fait rien.