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()。
載入函式會為每個載入憑證集的憑證指派一個預設的憑證類型。實作時,應視需要調整這些類型,以確保憑證在驗證期間能正確地處理,並對 CASE 互動指派正確的 WeaveAuthMode。
您所提供的驗證內容將以一組預設的驗證標準初始化,實作項目可能會視需要更改。實作時必須設定 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 ECDSA Signature 結構的形式,寫入提供的 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 引數將初始化為值,用於解析憑證集內的對等點憑證。如果對等點提供自己的憑證 (而非憑證參照),則有效 Ctx 引數中的 EntityCert 欄位會包含該憑證的指標。
在呼叫過程中,實作可能會修改憑證集的內容,包括新增憑證。也可以視需要變更 SubjectDN、subjectKeyId 或有效的 Ctx 引數。最重要的是,實作項目應在傳回之前使用憑證組合調整憑證類型欄位,以確保驗證和後續存取控制檢查期間對憑證的處理方式正確無誤。
注意:如果節點自行提供憑證參照,而非完整憑證,驗證內容中的 EntityCert 欄位會包含空值。如果實作項目想要支援憑證參照,則必須在傳回前,在傳回前新增與對等點主體 DN 和金鑰 ID 相符的憑證。
不過,您可以選擇是否導入這個方法。預設的實作方式不會有任何作用。