nl:: Weave:: Profiles:: Security:: CASE:: WeaveCASEAuthDelegate
這是抽象類別。#include <src/lib/profiles/security/WeaveCASE.h>
在 CASE 工作階段建立期間,系統會將驗證動作委派給這個抽象介面。
摘要
繼承
直接已知子類別: nl::Weave::DeviceManager::WeaveDeviceManager
公開函式 |
|
---|---|
BeginValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
|
virtual WEAVE_ERROR
在憑證驗證程序開始時呼叫。
|
EncodeNodeCertInfo(const BeginSessionContext & msgCtx, TLVWriter & writer)=0
|
virtual WEAVE_ERROR
為本機節點編碼 CASE 憑證資訊。
|
EncodeNodePayload(const BeginSessionContext & msgCtx, uint8_t *payloadBuf, uint16_t payloadBufSize, uint16_t & payloadLen)
|
virtual WEAVE_ERROR
對要加入至對等點的 CASE 訊息中的應用程式專屬酬載進行編碼。
|
EndValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
|
virtual void
在憑證驗證結束時呼叫。
|
GenerateNodeSignature(const BeginSessionContext & msgCtx, const uint8_t *msgHash, uint8_t msgHashLen, TLVWriter & writer, uint64_t tag)=0
|
virtual WEAVE_ERROR
使用本機節點的私密金鑰產生簽名。
|
HandleValidationResult(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet, WEAVE_ERROR & validRes)=0
|
virtual WEAVE_ERROR
會傳回憑證驗證結果。
|
OnPeerCertsLoaded(const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet)
|
virtual WEAVE_ERROR
在載入對等方的憑證後呼叫。
|
公開函式
BeginValidation
virtual WEAVE_ERROR BeginValidation( const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet )=0
在憑證驗證程序開始時呼叫。
實作項目必須使用足夠的資源初始化所提供的 WeaveCertificateSet 物件,以便處理即將進行的憑證驗證作業。此時,實作可能會將信任的根憑證或 CA 憑證載入憑證組合,或等到 OnPeerCertsLoaded() 呼叫為止。
載入函式會為載入至憑證集的每個憑證指派預設憑證類型。實作項目應視需要調整這些類型,確保在驗證期間正確處理憑證,以及正確指派 WeaveAuthMode 以供 CASE 互動。
系統會使用一組預設驗證條件初始化提供的驗證內容,實作可能會視需要變更這些條件。實作項目必須設定 EffectiveTime 欄位,或設定適當的驗證標記,以便抑制憑證有效期限驗證。
如果需要詳細的驗證結果,實作可能會初始化 CertValidationResults 和 CertValidationLen 欄位。
實作項目必須在 BeginValidation() 期間保留所有已分配的資源,直到呼叫對應的 EndValidation() 為止。實作項目保證,每當成功呼叫 BeginValidation() 時,系統會將 EndValidation() 呼叫一次。
EncodeNodeCertInfo
virtual WEAVE_ERROR EncodeNodeCertInfo( const BeginSessionContext & msgCtx, TLVWriter & writer )=0
EncodeNodePayload
virtual WEAVE_ERROR EncodeNodePayload( const BeginSessionContext & msgCtx, uint8_t *payloadBuf, uint16_t payloadBufSize, uint16_t & payloadLen )
將應用程式專屬酬載編碼,並納入傳送至對等端的 CASE 訊息中。
不過,您可以選擇是否導入這個方法。預設實作會傳回長度為零的酬載。
EndValidation
virtual void EndValidation( const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet )=0
在憑證驗證結束時呼叫。
導入作業可在認證驗證完成後,使用這個呼叫執行清理作業。實作項目保證,每當成功呼叫 BeginValidation() 時,系統會將 EndValidation() 呼叫一次。
GenerateNodeSignature
virtual WEAVE_ERROR GenerateNodeSignature( const BeginSessionContext & msgCtx, const uint8_t *msgHash, uint8_t msgHashLen, TLVWriter & writer, uint64_t tag )=0
使用本機節點的私密金鑰產生簽章。
在叫用時,實作必須使用節點的私密金鑰,針對指定的散列值計算簽章。接著,您應使用指定的標記,以 CASE ECDSASignature 結構體的形式,將產生的簽章寫入提供的 TLV 寫入。
如果節點的私密金鑰儲存在本機緩衝區中,則可使用 GenerateAndEncodeWeaveECDSASignature() 公用程式碼函式實作此方法。
HandleValidationResult
virtual WEAVE_ERROR HandleValidationResult( const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet, WEAVE_ERROR & validRes )=0
呼叫憑證驗證結果。
實作項目可能會使用這個呼叫來檢查同業憑證的驗證結果,甚至可能會變更。如果驗證成功,validRes 會設為 WEAVE_NO_ERROR。在這種情況下,驗證內容會包含結果的詳細資料。特別是,TrustAnchor 欄位會設為信任錨點憑證。
如果在呼叫 BeginValidation() 時,實作程序在 ValidationContext 結構內初始化 CertValidationResults 和 CertValidationLen 欄位,則這些欄位會包含憑證集合中每個憑證的詳細驗證結果。
實作方式可能會將 validRes 設為錯誤值,以覆寫這項設定,因而導致驗證失敗。
如果驗證失敗,validRes 會反映失敗的原因。實作可能會將結果覆寫為不同的錯誤值,但「不得」將結果設為 WEAVE_NO_ERROR。
OnPeerCertsLoaded
virtual WEAVE_ERROR OnPeerCertsLoaded( const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet )
在載入對等方的憑證後呼叫。
實作項目可能會使用這個呼叫來完成輸入憑證和驗證標準,這些項目將用於驗證對等端的憑證。在呼叫期間,對等端提供的憑證會載入至憑證組合 (包括其本身的憑證,如果有的話)。此外,系統會將 subjectDN 和 subjectKeyId 引數初始化為用於從憑證組合中解析對等端憑證的值。如果對等端提供的是自己的憑證 (而非憑證參照),則 validCtx 引數中的 EntityCert 欄位會包含該憑證的指標。
在這個呼叫期間,實作可能會修改憑證集的內容,包括新增新的憑證。他們也可以視需要變更 subjectDN、subjectKeyId 或 validCtx 引數。最重要的是,實作時應在返回前,使用憑證集合調整憑證類型欄位,確保在驗證和後續存取控管檢查期間,正確處理憑證。
注意:如果對等端提供的是自身的憑證參照,而非完整憑證,驗證內容中的 EntityCert 欄位就會包含空值。如果實作項目想要支援憑證參照,則必須在傳回前,將符合對等端主體 DN 和金鑰 ID 的憑證新增至憑證集。
實作此方法為選用項目。預設實作方式不會執行任何操作。