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

為本機節點編碼 CASE 憑證資訊。

實作可以覆寫本機節點的 CASE CertificateInformation 結構預設編碼,呼叫此方法時,實作應至少寫入包含本機節點實體憑證的 CertificateInformation 結構,可選擇納入一組相關憑證和/或信任錨點。

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 簽章結構,寫入提供的 TLV,並使用指定的標記。

如果節點的私密金鑰存放於本機緩衝區,GenerateAndEncodeWeaveECDSASignature() 公用程式函式可用來實作這個方法。

HandleValidationResult

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

使用憑證驗證結果呼叫。

實作可能會使用這個呼叫來檢查,並可能變更對等端憑證的驗證結果。如果驗證成功,有效 Res 會設為 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 相符的憑證。

您可以選擇是否要實作這個方法。預設的實作不會執行任何動作。