nl::Weave::Profiles::Security::CASE::WeaveCASEAuthDelegate

Esta é uma classe abstrata.

#include <src/lib/profiles/security/WeaveCASE.h>

Interface abstrata a que as ações de autenticação são delegadas durante o estabelecimento da sessão CASE.

Resumo

Herança

Subclasses conhecidas diretas: nl::Weave::DeviceManager::WeaveDeviceManager

Funções públicas

BeginValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
virtual WEAVE_ERROR
Chamado no início da validação do certificado.
EncodeNodeCertInfo(const BeginSessionContext & msgCtx, TLVWriter & writer)=0
virtual WEAVE_ERROR
Codifique as informações do certificado CASE para o nó local.
EncodeNodePayload(const BeginSessionContext & msgCtx, uint8_t *payloadBuf, uint16_t payloadBufSize, uint16_t & payloadLen)
virtual WEAVE_ERROR
Codifique um payload específico do aplicativo a ser incluído na mensagem CASE para o par.
EndValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
virtual void
Chamada no final da validação do certificado.
GenerateNodeSignature(const BeginSessionContext & msgCtx, const uint8_t *msgHash, uint8_t msgHashLen, TLVWriter & writer, uint64_t tag)=0
virtual WEAVE_ERROR
Gere uma assinatura usando a chave privada do nó local.
HandleValidationResult(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet, WEAVE_ERROR & validRes)=0
virtual WEAVE_ERROR
Chamado com o resultado da validação do certificado.
OnPeerCertsLoaded(const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet)
virtual WEAVE_ERROR
Chamada após o carregamento dos certificados do peer.

Funções públicas

BeginValidation

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

Chamada no início da validação do certificado.

As implementações precisam inicializar o objeto WeaveCertificateSet fornecido com recursos suficientes para processar a próxima validação de certificado. No momento, as implementações podem carregar certificados raiz ou de AC confiáveis no conjunto de certificados ou esperar até que OnPeerCertsLoaded() seja chamado.

Cada certificado carregado no conjunto de certificados vai receber um tipo de certificado padrão pela função de carregamento. As implementações precisam ajustar esses tipos conforme necessário para garantir o tratamento correto do certificado durante a validação e a atribuição correta do WeaveAuthMode para interações CASE.

O contexto de validação fornecido será inicializado com um conjunto de critérios de validação padrão, que a implementação pode alterar conforme necessário. A implementação deve definir o campo EffectiveTime ou configurar os sinalizadores de validação apropriados para suprimir a validação do ciclo de vida do certificado.

Se você quiser resultados de validação detalhados, a implementação poderá inicializar os campos CertValidationResults e CertValidationLen.

As implementações são necessárias para manter todos os recursos alocados durante o BeginValidation() até que o EndValidation() correspondente seja chamado. As implementações têm garantia de que EndValidation() será chamado exatamente uma vez para cada chamada bem-sucedida de BeginValidation().

EncodeNodeCertInfo

virtual WEAVE_ERROR EncodeNodeCertInfo(
  const BeginSessionContext & msgCtx,
  TLVWriter & writer
)=0

Codifique as informações do certificado CASE para o nó local.

As implementações podem usar essa chamada para substituir a codificação padrão da estrutura CertificateInformation CASE do nó local. Quando chamada, a implementação precisa gravar uma estrutura CertificateInformation contendo, no mínimo, o certificado de entidade do nó local. A implementação pode incluir um conjunto de certificados e/ou âncoras de confiança relacionados.

EncodeNodePayload

virtual WEAVE_ERROR EncodeNodePayload(
  const BeginSessionContext & msgCtx,
  uint8_t *payloadBuf,
  uint16_t payloadBufSize,
  uint16_t & payloadLen
)

Codifique um payload específico do aplicativo para ser incluído na mensagem CASE para o peer.

A implementação desse método é opcional. A implementação padrão retorna um payload de tamanho zero.

EndValidation

virtual void EndValidation(
  const BeginSessionContext & msgCtx,
  ValidationContext & validCtx,
  WeaveCertificateSet & certSet
)=0

Chamado no final da validação do certificado.

As implementações podem usar essa chamada para limpar após a conclusão da validação da certificação. As implementações têm garantia de que EndValidation() será chamado exatamente uma vez para cada chamada bem-sucedida de BeginValidation().

GenerateNodeSignature

virtual WEAVE_ERROR GenerateNodeSignature(
  const BeginSessionContext & msgCtx,
  const uint8_t *msgHash,
  uint8_t msgHashLen,
  TLVWriter & writer,
  uint64_t tag
)=0

Gere uma assinatura usando a chave privada do nó local.

Quando invocadas, as implementações precisam calcular uma assinatura no valor de hash fornecido usando a chave privada do nó. A assinatura gerada precisa ser gravada na forma de uma estrutura ECDSASignature CASE para a gravação TLV fornecida usando a tag especificada.

Nos casos em que a chave privada do nó é mantida em um buffer local, a função utilitária GenerateAndEncodeWeaveECDSASignature() pode ser útil para implementar esse método.

HandleValidationResult

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

Chamado com o resultado da validação do certificado.

As implementações podem usar essa chamada para inspecionar e, possivelmente, alterar o resultado da validação do certificado do peer. Se a validação tiver sido bem-sucedida, validRes será definido como WEAVE_NO_ERROR. Nesse caso, o contexto de validação vai conter detalhes sobre o resultado. Em particular, o campo TrustAnchor será definido para o certificado de âncora de confiança.

Se a implementação inicializar os campos CertValidationResults e CertValidationLen na estrutura ValidationContext durante a chamada BeginValidation(), esses campos vão conter resultados de validação detalhados para cada certificado no conjunto de certificados.

As implementações podem modificar isso definindo validRes com um valor de erro, fazendo com que a validação falhe.

Se a validação falhar, o validRes refletirá o motivo da falha. As implementações podem substituir o resultado para um valor de erro diferente, mas NÃO PODEM definir o resultado como WEAVE_NO_ERROR.

OnPeerCertsLoaded

virtual WEAVE_ERROR OnPeerCertsLoaded(
  const BeginSessionContext & msgCtx,
  WeaveDN & subjectDN,
  CertificateKeyId & subjectKeyId,
  ValidationContext & validCtx,
  WeaveCertificateSet & certSet
)

Chamada após o carregamento dos certificados do peer.

As implementações podem usar essa chamada para finalizar os certificados de entrada e os critérios de validação que serão usados para validar o certificado do peer. No momento da chamada, os certificados fornecidos pelo peer serão carregados no conjunto de certificados, incluindo o próprio certificado, se presente. Além disso, os argumentos subjectDN e subjectKeyId foram inicializados com valores que serão usados para resolver o certificado do peer no conjunto de certificados. Se o peer fornecer o próprio certificado (em vez de uma referência de certificado), o campo EntityCert no argumento validCtx vai conter um ponteiro para esse certificado.

Durante essa chamada, as implementações podem modificar o conteúdo do conjunto de certificados, incluindo a adição de novos certificados. Eles também podem alterar os argumentos subjectDN, subjectKeyId ou validCtx conforme necessário. O mais importante é que as implementações precisam ajustar os campos de tipo de certificado com o conjunto de certificados antes de retornar. Isso garante o tratamento correto dos certificados durante a validação e as verificações subsequentes de controle de acesso.

OBSERVAÇÃO: se o peer fornecer uma referência de certificado para si mesmo, em vez de um certificado completo, o campo EntityCert no contexto de validação vai conter um valor NULL. Se uma implementação quiser oferecer suporte a referências de certificado, ela precisará adicionar um certificado correspondente ao DN do assunto e ao ID da chave do par ao conjunto de certificados antes de retornar.

A implementação desse método é opcional. A implementação padrão não faz nada.