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 相匹配的证书添加到证书集中。

实现此方法是可选的。默认实现不执行任何操作。