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 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 字段将包含 NULL。如果实现希望支持证书引用,则必须在返回之前将与对等方的主题 DN 和密钥 ID 匹配的证书添加到证书集中。

您可以自行选择是否实现此方法。默认实现不会执行任何操作。