nl::Weave::Profile::Security::CASE::WeaveCASEAuthDelegate

Dies ist eine abstrakte Klasse.

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

Abstrakte Schnittstelle, an die Authentifizierungsaktionen während der Einrichtung einer CASE-Sitzung 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 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 wird.
EndValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
virtual void
Wird am Ende der Zertifikatsprüfung aufgerufen.
GenerateNodeSignature(const BeginSessionContext & msgCtx, const uint8_t *msgHash, uint8_t msgHashLen, TLVWriter & writer, uint64_t tag)=0
virtual WEAVE_ERROR
Signatur mit privatem 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 Zertifikatsprüfung aufgerufen.
OnPeerCertsLoaded(const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet)
virtual WEAVE_ERROR
Wird aufgerufen, nachdem die Zertifikate der Peers geladen wurden

Öffentliche Funktionen

Validierung starten

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 Validierung des Zertifikats auszuführen. Derzeit können Implementierungen vertrauenswürdige Root- oder CA-Zertifikate in den Zertifikatsatz laden oder warten, bis OnPeerCertsLoaded() aufgerufen wird.

Jedes in den Zertifikatsatz geladene Zertifikat wird durch die Ladefunktion einem Standardzertifikattyp zugewiesen. In Implementierungen sollten diese Typen bei Bedarf angepasst werden, um die korrekte Verarbeitung des Zertifikats während der Validierung und die korrekte Zuweisung von WeaveAuthMode für CASE-Interaktionen zu gewährleisten.

Der bereitgestellte Validierungskontext wird mit einer Reihe von standardmäßigen Validierungskriterien initialisiert. Diese können sich bei Bedarf ändern. In der Implementierung muss entweder das Feld „EffectiveTime“ festgelegt oder die entsprechenden Validierungs-Flags festgelegt werden, um die Validierung der Zertifikatslebensdauer zu unterdrücken.

Wenn Sie detaillierte Validierungsergebnisse wünschen, kann die Implementierung die Felder CertValidationResults und CertValidationLen initialisieren.

Implementierungen müssen alle Ressourcen beibehalten, die während BeginValidation() zugewiesen werden, bis die entsprechende EndValidation() aufgerufen wird. Implementierungen sind garantiert, dass EndValidation() für jeden erfolgreichen Aufruf von BeginValidation() genau einmal aufgerufen wird.

Encoder-Informationen

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

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

Implementierungen können diesen Aufruf verwenden, um die Standardcodierung der Struktur CASE CertificateInformation 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 auch eine Reihe zugehöriger Zertifikate und/oder Trust Anchors enthalten.

Encoder-Nutzlast

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 wird.

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

Endvalidierung

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

Wird am Ende der Zertifikatsprüfung aufgerufen.

Implementierungen können diesen Aufruf zur Bereinigung nach Abschluss der Zertifizierungsprüfung verwenden. Implementierungen sind 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

Signatur mit privatem Schlüssel des lokalen Knotens generieren

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

In Fällen, in denen sich der private Schlüssel des Knotens in einem lokalen Zwischenspeicher befindet, kann die Dienstfunktion GenerateAndEncodeWeaveECDSASignature() nützlich für die Implementierung dieser Methode sein.

HandleValidationResult

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

Wird mit dem Ergebnis der Zertifikatsprüfung aufgerufen.

Implementierungen können diesen Aufruf verwenden, um das Ergebnis der Validierung des Peer-Zertifikats 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. Im Feld „TrustAnchor“ wird insbesondere das Zertifikat für Trust Anchors festgelegt.

Wenn die Implementierung die Felder „CertValidationResults“ und „CertValidationLen“ in der Struktur ValidationContext während der aufgerufenen Methode 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, wodurch die Validierung fehlschlägt.

Wenn die Validierung fehlgeschlagen ist, gibt validRes den Grund für den Fehler wieder. Das Ergebnis kann durch einen anderen Fehlerwert überschrieben werden, das Ergebnis MUSS jedoch NICHT WEAVE_NO_ERROR lauten.

OnPeerCertsLoaded

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

Wird aufgerufen, nachdem die Zertifikate der Peers geladen wurden

Implementierungen können mit diesem Aufruf die Eingabezertifikate und die Validierungskriterien abschließen, die zur Validierung des Peer-Zertifikats verwendet werden. Zum Zeitpunkt des Anrufs wurden die vom Peer bereitgestellten Zertifikate in den Zertifikatsatz geladen (einschließlich des eigenen Zertifikats, falls vorhanden). Außerdem wurden die Argumente „subjectDN“ und „subjectKeyId“ mit Werten initialisiert, die zum Auflösen des Peer-Zertifikats aus dem Zertifikatsatz verwendet werden. Wenn der Peer sein eigenes Zertifikat (und keine Zertifikatreferenz) angegeben hat, enthält das Feld „EntityCert“ im Argument „validCtx“ einen Verweis auf dieses Zertifikat.

Während dieses Aufrufs können Implementierungen den Inhalt des Zertifikatsatzes ändern und beispielsweise neue Zertifikate hinzufügen. Bei Bedarf können sie auch die Argumente subjectDN, subjectKeyId oder validCtx ändern. Vor allem müssen Implementierungen die Felder des Zertifikatstyps mit dem vor der Rückgabe festgelegten Zertifikat anpassen, um die richtige Behandlung von Zertifikaten während der Validierung und nachfolgenden Prüfungen der Zugriffssteuerung sicherzustellen.

HINWEIS: Für den Fall, dass der Peer eine Zertifikatreferenz für sich selbst statt eines vollständigen Zertifikats angibt, enthält das Feld "EntityCert" im Validierungskontext einen NULL-Wert. Wenn eine Implementierung Zertifikatverweise unterstützen möchte, muss vor der Rückgabe ein Zertifikat hinzugefügt werden, das dem DN des Peers und der Schlüssel-ID entspricht.

Die Implementierung dieser Methode ist optional. Die Standardimplementierung hat keine Auswirkung.