nl::Weave::Profiles::安全性::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 字段。

在调用相应的 EndValidation() 之前,实现会保持在 BeginValidation() 期间分配的所有资源。实现可以保证,每次成功调用 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 消息中。

实现此方法是可选的。默认实现会返回零长度的载荷。

最终验证

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。

已加载 OnPeerCerts

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

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