nl:: Weave:: Profiles:: Security:: CASE:: WeaveCASEAuthDelegate
Essa é 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 ao par.
|
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 do peer.
|
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 de certificado. No momento, as implementações podem carregar certificados raiz ou CA confiáveis no conjunto de certificados ou aguardar 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 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 garantem que EndValidation() será chamado exatamente uma vez para cada chamada 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 CASE do nó local. Quando chamada, a implementação precisa gravar uma estrutura CertificateInformation que contenha, no mínimo, o certificado de entidade do nó local. A implementação pode incluir, opcionalmente, 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 ao par.
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 a limpeza após a conclusão da validação da certificação. As implementações garantem que EndValidation() será chamado exatamente uma vez para cada chamada 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 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.
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 semelhante. 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 inicializou os campos CertValidationResults e CertValidationLen na estrutura ValidationContext durante a chamada de BeginValidation(), esses campos conteriam 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 )
Chamado 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 realizar a validação do certificado semelhante. No momento da chamada, os certificados fornecidos pelo parceiro terão sido carregados no conjunto de certificados (incluindo o próprio certificado, se houver). Além disso, os argumentos subjectDN e subjectKeyId serão inicializados com valores que serão usados para resolver o certificado do terminal a partir do conjunto de certificados. Se o parceiro tiver fornecido 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 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: 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, será necessário adicionar um certificado que corresponda ao DN do assunto do terminal e ao ID da chave ao conjunto de certificados antes de retornar.
A implementação desse método é opcional. A implementação padrão não faz nada.