nl:: Weave:: Profiles:: Security:: CASE:: WeaveCASEAuthDelegate
Dies ist eine abstrakte Klasse.
#include <src/lib/profiles/security/WeaveCASE.h>
Abstrakte Schnittstelle, an die Authentifizierungsaktionen beim Einrichten einer CASE-Sitzung delegiert werden.
Zusammenfassung
Übernahme
Direkte bekannte abgeleitete Klassen: 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
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 bevorstehende Zertifikatsprüfung durchzuführen. Derzeit 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. Bei der Implementierung muss entweder das Feld „EffectiveTime“ festgelegt oder die entsprechenden Validierungs-Flags festgelegt werden, um die Validierung der Lebensdauer des Zertifikats 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() zugeordneten Ressourcen beizubehalten, bis die entsprechende EndValidation()-Methode aufgerufen wird. Bei Implementierungen wird garantiert, dass EndValidation() bei jedem 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 mit diesem Aufruf die Standardcodierung der Zertifikatinformationsstruktur CASE für den lokalen Knoten überschreiben. Wenn die Implementierung aufgerufen wird, sollte sie eine CertificateInformation-Struktur schreiben, die mindestens das Entitätszertifikat des lokalen Knotens enthält. Die Implementierung kann optional eine Reihe zugehöriger Zertifikate und/oder Trust-Anchors 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() bei jedem 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.
Wenn Implementierungen aufgerufen werden, müssen sie eine Signatur für den angegebenen Hashwert mithilfe des privaten Schlüssels des Knotens berechnen. Die generierte Signatur sollte dann in Form einer ECDSASignature-Struktur für CASE in die bereitgestellte TLV geschrieben werden. Verwenden Sie dazu das angegebene Tag.
In Fällen, in denen der private Schlüssel des Knotens in einem lokalen Zwischenspeicher aufbewahrt wird, kann die Dienstfunktion 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 prü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. Das TrustAnchor-Feld wird auf das Trust-Anchor-Zertifikat gesetzt.
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 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, gibt „validRes“ die Fehlerursache 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.
Implementierungen können diesen Aufruf verwenden, um die Eingabezertifikate und die Validierungskriterien für die Validierung des Peer-Zertifikats abzuschließen. Zum Zeitpunkt des Aufrufs wurden die vom Peer bereitgestellten Zertifikate in den Zertifikatsatz geladen (einschließlich des eigenen Zertifikats, falls vorhanden). Außerdem werden die Argumente subjectDN und subjectKeyId mit Werten initialisiert, mit denen das Zertifikat des Peers aus dem Zertifikatsatz aufgelöst wird. Wenn der Peer ein eigenes Zertifikat und keine Zertifikatsreferenz bereitgestellt hat, enthält das Feld „EntityCert“ im Argument „validCtx“ einen Zeiger auf dieses Zertifikat.
Während dieses Aufrufs können Implementierungen den Inhalt des Zertifikatsatzes ändern und z. B. neue Zertifikate hinzufügen. Sie können auch die Argumente subjectDN, subjectKeyId oder validCtx nach Bedarf ändern. Vor allem sollten bei Implementierungen die Zertifikatstypfelder mit dem Zertifikatsatz vor der Rückgabe angepasst werden, damit die Zertifikate während der Validierung und nachfolgenden Zugriffskontrollprüfungen richtig verarbeitet werden.
HINWEIS: Für den Fall, dass der Peer eine Zertifikatsreferenz für sich selbst und nicht ein vollständiges Zertifikat bereitstellt, enthält das EntityCert-Feld im Validierungskontext den Wert NULL. Wenn bei einer Implementierung Zertifikatsverweise unterstützt werden sollen, muss vor der Rückgabe ein Zertifikat hinzugefügt werden, das dem Antragsteller-DN und der Schlüssel-ID des Peers entspricht.
Die Implementierung dieser Methode ist optional. Die Standardimplementierung hat keine Auswirkungen.