nl:: Weave:: Perfis:: Segurança:: CASE:: WeaveCASEAuthDelegate
Esta é uma classe abstrata.
#include <src/lib/profiles/security/WeaveCASE.h>
Interface abstrata a que ações de autenticação são delegadas durante o estabelecimento da sessão de 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 de CASE do 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
Gerar 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 de certificado.
|
OnPeerCertsLoaded(const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet)
|
virtual WEAVE_ERROR
Chamado após o carregamento dos certificados de apps semelhantes.
|
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 lidar com a próxima validação de certificado. No momento, as implementações podem carregar certificados raiz ou de CA confiáveis no conjunto de certificados ou aguardar até que OnPeerCertsLoaded() seja chamado.
Cada tipo de 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 do WeaveAuthMode para interações de 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 definir as sinalizações de validação adequadas para suprimir a validação do ciclo de vida do certificado.
Se você quiser ver resultados de validação detalhados, a implementação poderá inicializar os campos CertValidationResults e CertValidationLen.
As implementações são necessárias para manter os recursos alocados durante BeginValidation() até que a classe EndValidation() correspondente seja chamada. As implementações têm a garantia de que EndValidation() será chamado 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 de CASE do nó local.
As implementações podem usar essa chamada para substituir a codificação padrão da estrutura Certificate CertificateInformation do nó local. Quando chamada, a implementação precisa gravar uma estrutura de CertificateInformation, que contém, no mínimo, o certificado da entidade do nó local. A implementação pode incluir um conjunto de certificados relacionados e/ou âncoras de confiança.
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.
Validação final
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 a limpeza após a conclusão da validação da certificação. As implementações têm a garantia de que EndValidation() será chamado 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
Gerar uma assinatura usando a chave privada do nó local.
Quando invocadas, as implementações precisam calcular uma assinatura no valor de hash informado usando a chave privada do nó. A assinatura gerada precisa ser gravada na forma de uma estrutura CASE ECDSASignature na 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.
ResultValidationResult
virtual WEAVE_ERROR HandleValidationResult( const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet, WEAVE_ERROR & validRes )=0
Chamado com o resultado da validação de certificado.
As implementações podem usar essa chamada para inspecionar e possivelmente alterar o resultado da validação do certificado de apps semelhantes. Se a validação for bem-sucedida, validRes será definido como WEAVE_NO_ERROR. Nesse caso, o contexto de validação conterá detalhes sobre o resultado. Especificamente, o campo "TrustAnchor" será definido como o certificado de âncora de confiança.
Se a implementação inicializou os campos CertValidationResults e CertValidationLen na estrutura ValidationContext durante o método BeginValidation() chamado, então esses campos contêm resultados detalhados de validação para cada certificado no conjunto de certificados.
As implementações podem substituir esse valor definindo validRes como um valor de erro, causando falha na validação.
Se a validação falhou, validRes refletirá o motivo da falha. As implementações podem substituir o resultado por um valor de erro diferente, mas NÃO PODE 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 apps semelhantes.
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 executar a validação do certificado do grupo. No momento da chamada, os certificados fornecidos pelo semelhante serão carregados no conjunto de certificados (incluindo o próprio certificado, se houver). Além disso, os argumentos "subjectDN" e "subjectKeyId" foram inicializados como valores usados para resolver o certificado de apps semelhantes a partir do conjunto de certificados. Se o semelhante enviar o próprio certificado (em vez de uma referência de certificado), o campo EntityCert no argumento validCtx conterá um ponteiro para esse certificado.
Durante esse processo, as implementações podem modificar o conteúdo do conjunto de certificados, incluindo a adição de novos certificados. Eles também podem mudar os argumentos subjectDN, subjectKeyId ou validCtx conforme necessário. O mais importante é que as implementações precisam ajustar os campos do 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 peer forneça uma referência de certificado, em vez de um certificado completo, o campo EntityCert no contexto da validação conterá um NULL. Se uma implementação quiser oferecer suporte a referências de certificado, ela precisa adicionar um certificado que corresponda ao DN de assunto e ao ID da chave do par ao certificado definido antes de retornar.
A implementação desse método é opcional. A implementação padrão não faz nada.