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 字段。

实现必须在调用相应的 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 消息中的应用专用载荷进行编码。

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

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

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