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

Dies ist eine abstrakte Klasse.

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

Abstrakte Schnittstelle, an die Authentifizierungsaktionen während der CASE-Sitzungseinrichtung delegiert werden.

Zusammenfassung

Übernahme

Direkt 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 in die CASE-Nachricht an den Peer 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
Signatur mit dem privaten Schlüssel des lokalen Knotens generieren.
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 bevorstehende Zertifikatsprüfung durchzuführen. In diesem Moment können Implementierungen vertrauenswürdige Root- oder CA-Zertifikate in den Zertifikatsatz laden oder warten, bis OnPeerCertsLoaded() aufgerufen wird.

Jedem in den Zertifikatssatz geladenen Zertifikat wird durch die Ladefunktion ein Standardzertifikatstyp zugewiesen. Bei Implementierungen sollten diese Typen bei Bedarf angepasst werden, damit das Zertifikat während der Validierung richtig verarbeitet wird und WeaveAuthMode für CASE-Interaktionen richtig zugewiesen wird.

Der bereitgestellte Validierungskontext wird mit einer Reihe standardmäßiger Validierungskriterien initialisiert, die von der Implementierung bei Bedarf geändert werden können. Die Implementierung muss entweder das Feld „EffectiveTime“ oder die entsprechenden Validierungs-Flags festlegen, um die Validierung der Zertifikatslaufzeit zu unterdrücken.

Wenn detaillierte Validierungsergebnisse gewünscht sind, können die Felder „CertValidationResults“ und „CertValidationLen“ in der Implementierung initialisiert werden.

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

EncodeNodeCertInfo

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

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

Mit diesem Aufruf können Implementierungen die Standardcodierung der CASE-Struktur „CertificateInformation“ für den lokalen Knoten überschreiben. Bei der Ausführung sollte die Implementierung eine Struktur vom Typ „CertificateInformation“ schreiben, die mindestens das Entitätszertifikat des lokalen Knotens enthält. Die Implementierung kann optional eine Reihe zugehöriger Zertifikate und/oder Vertrauensanker enthalten.

EncodeNodePayload

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

Codieren Sie eine anwendungsspezifische Nutzlast, die in die CASE-Nachricht an den Peer 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 nach Abschluss der Zertifizierung eine Bereinigung durchzuführen. Bei Implementierungen wird garantiert, dass EndValidation() genau einmal für jeden erfolgreichen Aufruf von BeginValidation() aufgerufen wird.

GenerateNodeSignature

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

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

Bei der Aufrufung müssen Implementierungen eine Signatur für den angegebenen Hashwert mit dem privaten Schlüssel des Knotens berechnen. Die generierte Signatur sollte dann in Form einer CASE-ECDSASignature-Struktur in das bereitgestellte TLV-Schreiben mit dem angegebenen Tag geschrieben werden.

Wenn der private Schlüssel des Knotens in einem lokalen Puffer gehalten wird, kann die Dienstprogrammfunktion 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 Zertifikats des Peers zu prüfen und gegebenenfalls 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-Anchors gesetzt.

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

Implementierungen können dies überschreiben, indem für „validRes“ ein Fehlerwert festgelegt wird. Dadurch schlägt die Validierung fehl.

Wenn die Validierung fehlgeschlagen ist, enthält „validRes“ den Grund für den Fehler. Implementierungen können das Ergebnis durch einen anderen Fehlerwert überschreiben, dürfen es aber 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.

Implementierungen können diesen Aufruf verwenden, um die Eingabezertifikate und die Validierungskriterien zu finalisieren, die für die Validierung des Zertifikats des Peers verwendet werden. Zum Zeitpunkt des Aufrufs wurden die vom Peer bereitgestellten Zertifikate in den Zertifikatsatz geladen, einschließlich seines eigenen Zertifikats, falls vorhanden. Außerdem wurden die Argumente „subjectDN“ und „subjectKeyId“ mit Werten initialisiert, die zum Auflösen des Zertifikats des Peers aus dem Zertifikatssatz verwendet werden. Wenn der Peer ein eigenes Zertifikat (und keine Zertifikatsreferenz) bereitgestellt hat, enthält das Feld „EntityCert“ im Argument „validCtx“ einen Verweis auf dieses Zertifikat.

Während dieses Aufrufs können Implementierungen den Inhalt des Zertifikatssatzes ändern, z. B. neue Zertifikate hinzufügen. Sie können auch die Argumente „subjectDN“, „subjectKeyId“ oder „validCtx“ nach Bedarf ändern. Vor allem sollten Implementierungen die Felder für den Zertifikatstyp vor der Rückgabe an das Zertifikatsset anpassen, um eine korrekte Behandlung von Zertifikaten bei der Validierung und den nachfolgenden Zugriffssteuerungsüberprüfungen zu gewährleisten.

HINWEIS: Wenn der Peer statt eines vollständigen Zertifikats eine Zertifikatsreferenz für sich selbst angibt, enthält das Feld „EntityCert“ im Validierungskontext den Wert „NULL“. Wenn eine Implementierung Zertifikatsreferenzen unterstützen soll, muss sie dem Zertifikatssatz vor der Rückgabe ein Zertifikat hinzufügen, das der DN des Peers und der Schlüssel-ID entspricht.

Die Implementierung dieser Methode ist optional. Die Standardimplementierung führt nichts aus.