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

Das ist eine abstrakte Klasse.

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

Abstrakte Schnittstelle, an die beim Einrichten einer CASE-Sitzung Authentifizierungsaktionen delegiert werden.

Zusammenfassung

Übernahme

Direkte bekannte Unterklassen: nl::Weave::DeviceManager::WeaveDeviceManager

Öffentliche Funktionen

BeginValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
virtual WEAVE_ERROR
Wird zu Beginn der Zertifikatsvalidierung aufgerufen.
EncodeNodeCertInfo(const BeginSessionContext & msgCtx, TLVWriter & writer)=0
virtual WEAVE_ERROR
Codieren Sie die CASE-Zertifikatinformationen für den lokalen Knoten.
EncodeNodePayload(const BeginSessionContext & msgCtx, uint8_t *payloadBuf, uint16_t payloadBufSize, uint16_t & payloadLen)
virtual WEAVE_ERROR
Codieren Sie eine anwendungsspezifische Nutzlast, die an den Peer in die CASE-Nachricht aufgenommen werden soll.
EndValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
virtual void
Wird am Ende der Zertifikatsvalidierung aufgerufen.
GenerateNodeSignature(const BeginSessionContext & msgCtx, const uint8_t *msgHash, uint8_t msgHashLen, TLVWriter & writer, uint64_t tag)=0
virtual WEAVE_ERROR
Generieren Sie eine Signatur mit dem privaten Schlüssel des lokalen Knotens.
HandleValidationResult(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet, WEAVE_ERROR & validRes)=0
virtual WEAVE_ERROR
Wird mit dem Ergebnis der Zertifikatsvalidierung aufgerufen.
OnPeerCertsLoaded(const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet)
virtual WEAVE_ERROR
Wird aufgerufen, nachdem die Zertifikate des Peers geladen wurden.

Öffentliche Funktionen

BeginValidation

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

Wird zu Beginn der Zertifikatsvalidierung aufgerufen.

Implementierungen müssen das bereitgestellte WeaveCertificateSet-Objekt mit genügend Ressourcen initialisieren, um die anstehende Zertifikatvalidierung verarbeiten zu können. Derzeit können Implementierungen vertrauenswürdige Root- oder CA-Zertifikate in den Zertifikatssatz laden oder warten, bis OnPeerCertsLoaded() aufgerufen wird.

Jedem Zertifikat, das in den Zertifikatssatz geladen wird, wird von der Ladefunktion ein Standardzertifikattyp zugewiesen. Implementierungen sollten diese Typen nach Bedarf anpassen, um die korrekte Verarbeitung des Zertifikats während der Validierung und die korrekte Zuweisung von WeaveAuthMode für CASE-Interaktionen sicherzustellen.

Der angegebene Validierungskontext wird mit einer Reihe von Standardvalidierungskriterien initialisiert, die bei Bedarf von der Implementierung geändert werden können. Für die Implementierung muss entweder das Feld „EffectiveTime“ oder die entsprechenden Validierungs-Flags festgelegt werden, um die Validierung der Zertifikatslebensdauer zu unterdrücken.

Wenn detaillierte Validierungsergebnisse gewünscht sind, kann die Implementierung die Felder CertValidationResults und CertValidationLen initialisieren.

Implementierungen sind erforderlich, um alle während BeginValidation() zugewiesenen Ressourcen beizubehalten, bis die entsprechende EndValidation() aufgerufen wird. Bei Implementierungen wird garantiert, dass EndValidation() für jeden erfolgreichen Aufruf von BeginValidation() genau einmal aufgerufen wird.

EncodeNodeCertInfo

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

Codieren Sie die CASE-Zertifikatinformationen für den lokalen Knoten.

Implementierungen können diesen Aufruf verwenden, um die Standardcodierung der CASE-Zertifikatinformationsstruktur für den lokalen Knoten zu überschreiben. Beim Aufruf sollte die Implementierung eine CertificateInformation-Struktur schreiben, die mindestens das Entitätszertifikat des lokalen Knotens enthält. Die Implementierung kann optional eine Reihe verwandter Zertifikate und/oder Trust-Anchors umfassen.

EncodeNodePayload

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

Codieren Sie eine anwendungsspezifische Nutzlast, die an den Peer in die CASE-Nachricht aufgenommen werden soll.

Die Implementierung dieser Methode ist optional. Die Standardimplementierung gibt eine Nutzlast der Länge null zurück.

EndValidation

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

Wird am Ende der Zertifikatsvalidierung aufgerufen.

Implementierungen können diesen Aufruf verwenden, um eine Bereinigung nach Abschluss der Zertifizierungsprüfung durchzuführen. Bei Implementierungen wird garantiert, dass EndValidation() für jeden erfolgreichen Aufruf von BeginValidation() genau einmal aufgerufen wird.

GenerateNodeSignature

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

Generieren Sie eine Signatur mit dem privaten Schlüssel des lokalen Knotens.

Beim Aufrufen müssen Implementierungen mithilfe des privaten Schlüssels des Knotens eine Signatur für den gegebenen Hash-Wert berechnen. Die generierte Signatur sollte dann in Form einer CASE-ECDSASignature-Struktur in das bereitgestellte TLV-Text mithilfe des angegebenen Tags geschrieben werden.

In Fällen, in denen der private Schlüssel des Knotens in einem lokalen Puffer gespeichert ist, kann die Funktion GenerateAndEncodeWeaveECDSASignature() für die Implementierung dieser Methode nützlich sein.

HandleValidationResult

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

Wird mit dem Ergebnis der Zertifikatsvalidierung aufgerufen.

Implementierungen können diesen Aufruf verwenden, um das Ergebnis der Validierung des Peer-Zertifikats zu überprüfen und möglicherweise zu ändern. Wenn die Validierung erfolgreich war, wird validRes auf WEAVE_NO_ERROR gesetzt. In diesem Fall enthält der Validierungskontext Details zum Ergebnis. Insbesondere wird das Feld „TrustAnchor“ auf das Zertifikat des Trust-Anchor festgelegt.

Wenn bei der Implementierung die Felder CertValidationResults und CertValidationLen in der Struktur ValidationContext während des Aufrufs von BeginValidation() initialisiert wurden, enthalten diese Felder detaillierte Validierungsergebnisse für jedes Zertifikat im Zertifikatssatz.

Implementierungen können dies überschreiben, indem „validRes“ auf einen Fehlerwert gesetzt wird, wodurch die Validierung fehlschlägt.

Wenn die Validierung fehlgeschlagen ist, gibt „validRes“ den Grund für den Fehler an. Implementierungen können das Ergebnis mit einem anderen Fehlerwert überschreiben, DARF das Ergebnis jedoch NICHT auf WEAVE_NO_ERROR setzen.

OnPeerCertsLoaded

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

Wird aufgerufen, nachdem die Zertifikate des Peers geladen wurden.

Dieser Aufruf kann in Implementierungen dazu verwendet werden, die Eingabezertifikate und die Validierungskriterien abzuschließen, die zur Validierung des Peer-Zertifikats verwendet werden. Zum Zeitpunkt des Aufrufs wurden die vom Peer bereitgestellten Zertifikate in den Zertifikatssatz geladen (einschließlich ihres eigenen Zertifikats, falls vorhanden). Außerdem werden die Argumente „subjectDN“ und „subjectKeyId“ mit Werten initialisiert, die zur Auflösung des Peer-Zertifikats aus dem Zertifikatssatz verwendet werden. Wenn der Peer sein eigenes Zertifikat (anstelle einer Zertifikatsreferenz) bereitgestellt hat, enthält das Feld EntityCert innerhalb des validCtx-Arguments einen Verweis auf dieses Zertifikat.

Während dieses Aufrufs können Implementierungen den Inhalt des Zertifikatssatzes ändern, einschließlich des Hinzufügens neuer Zertifikate. Sie können bei Bedarf auch die Argumente „subjectDN“, „subjectKeyId“ oder „validCtx“ ändern. Vor allem sollten Implementierungen vor der Rückkehr die Zertifikattypfelder mit dem festgelegten Zertifikat anpassen, um sicherzustellen, dass die Zertifikate während der Validierung und der nachfolgenden Zugriffssteuerungsprüfungen richtig verarbeitet werden.

HINWEIS: Falls der Peer eine Zertifikatsreferenz für sich selbst und kein vollständiges Zertifikat bereitstellt, enthält das Feld EntityCert im Validierungskontext den Wert NULL. Wenn eine Implementierung Zertifikatsreferenzen unterstützen möchte, muss sie vor der Rückgabe ein Zertifikat hinzufügen, das dem Betreff-DN und der Schlüssel-ID des Peers entspricht.

Die Implementierung dieser Methode ist optional. Bei der Standardimplementierung werden keine Änderungen vorgenommen.