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

Essa é uma classe abstrata.

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

Interface abstrata para a qual 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 peering.
EndValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
virtual void
Chamado 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
Chamado após o carregamento dos certificados de peering.

Funções públicas

BeginValidation

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

Chamado 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 do certificado. No momento, as implementações podem carregar certificados raiz ou CA confiáveis no conjunto de certificados ou esperar até que OnPeerCertsLoaded() seja chamado.

Cada certificado carregado no conjunto 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 de 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 precisa definir o campo "EffectiveTime" ou as sinalizações de validação apropriadas 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 BeginValidation() até que o EndValidation() correspondente seja chamado. As implementações garantem que EndValidation() será chamada exatamente uma vez para cada chamada bem-sucedida para 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 de CASE do nó local. Quando chamada, a implementação precisa gravar uma estrutura CertificateInformation que contém, pelo menos, 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 a ser incluído na mensagem CASE para o peering.

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 realizar uma limpeza depois que a validação da certificação for concluída. As implementações garantem que EndValidation() será chamada exatamente uma vez para cada chamada bem-sucedida para 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 escrita na forma de uma estrutura ECDSASignature CASE para o TLV fornecido 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 de pares. Se a validação tiver sido bem-sucedida, "validRes" será definido como WEAVE_NO_ERROR. Nesse caso, o contexto de validação vai incluir detalhes sobre o resultado. Mais especificamente, o campo "TrustAnchor" será definido como o certificado de âncora de confiança.

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

As implementações podem substituir isso definindo validRes como um valor de erro, causando falha na validação.

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

OnPeerCertsLoaded

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

Chamado após o carregamento dos certificados de peering.

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 de pares. No momento da chamada, os certificados fornecidos pelo parceiro serão carregados no conjunto de certificados (incluindo o próprio certificado, se houver). Além disso, os argumentos "subjectDN" e "subjectKeyId" foram inicializados com valores que serão usados para resolver o certificado do peer com base no conjunto de certificados. Se a pessoa forneceu o próprio certificado (em vez de uma referência), o campo EntityCert dentro do argumento validCtx 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. Mais importante, as implementações precisam ajustar os campos de tipo de certificado com o certificado definido antes de retornar para garantir o tratamento correto dos certificados durante a validação e as verificações de controle de acesso subsequentes.

OBSERVAÇÃO: caso o parceiro forneça uma referência de certificado para si mesmo, em vez de um certificado completo, o campo EntityCert no contexto de validação conterá um 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 peering ao conjunto de certificados antes de retornar.

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