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

Esta es una clase abstracta.

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

Interfaz abstracta a la que se delegan las acciones de autenticación durante el establecimiento de la sesión CASE.

Resumen

Herencia

Subclases conocidas directas: nl::Weave::DeviceManager::WeaveDeviceManager

Funciones públicas

BeginValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
virtual WEAVE_ERROR
Se llama al comienzo de la validación del certificado.
EncodeNodeCertInfo(const BeginSessionContext & msgCtx, TLVWriter & writer)=0
virtual WEAVE_ERROR
Codifica la información del certificado CASE para el nodo local.
EncodeNodePayload(const BeginSessionContext & msgCtx, uint8_t *payloadBuf, uint16_t payloadBufSize, uint16_t & payloadLen)
virtual WEAVE_ERROR
Codifica una carga útil específica de la aplicación para que se incluya en el mensaje CASE para el par.
EndValidation(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0
virtual void
Se llama al final de la validación del certificado.
GenerateNodeSignature(const BeginSessionContext & msgCtx, const uint8_t *msgHash, uint8_t msgHashLen, TLVWriter & writer, uint64_t tag)=0
virtual WEAVE_ERROR
Genera una firma con la clave privada del nodo local.
HandleValidationResult(const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet, WEAVE_ERROR & validRes)=0
virtual WEAVE_ERROR
Se llama con el resultado de la validación del certificado.
OnPeerCertsLoaded(const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet)
virtual WEAVE_ERROR
Se llama después de que se cargan los certificados del par.

Funciones públicas

BeginValidation

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

Se llama al comienzo de la validación del certificado.

Las implementaciones deben inicializar el objeto WeaveCertificateSet proporcionado con recursos suficientes para controlar la validación del certificado que se realizará próximamente. En este momento, las implementaciones pueden cargar certificados raíz o de AC de confianza en el conjunto de certificados, o esperar hasta que se llame a OnPeerCertsLoaded().

La función de carga asignará un tipo de certificado predeterminado a cada certificado que se cargue en el conjunto de certificados. Las implementaciones deben ajustar estos tipos según sea necesario para garantizar el tratamiento correcto del certificado durante la validación y la asignación correcta de WeaveAuthMode para las interacciones CASE.

El contexto de validación proporcionado se inicializará con un conjunto de criterios de validación predeterminados, que la implementación puede modificar según sea necesario. La implementación debe establecer el campo EffectiveTime o las marcas de validación adecuadas para suprimir la validación del ciclo de vida del certificado.

Si se desea obtener resultados de validación detallados, la implementación puede inicializar los campos CertValidationResults y CertValidationLen.

Las implementaciones son necesarias para mantener los recursos asignados durante BeginValidation() hasta que se llame a EndValidation() correspondiente. En las implementaciones, se garantiza que se llamará a EndValidation() exactamente una vez por cada llamada exitosa a BeginValidation().

EncodeNodeCertInfo

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

Codifica la información del certificado CASE para el nodo local.

Las implementaciones pueden usar esta llamada para anular la codificación predeterminada de la estructura CertificateInformation CASE para el nodo local. Cuando se la llama, la implementación debe escribir una estructura CertificateInformation que contenga, como mínimo, el certificado de entidad del nodo local. De manera opcional, la implementación puede incluir un conjunto de certificados relacionados o anclas de confianza.

EncodeNodePayload

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

Codifica una carga útil específica de la aplicación para que se incluya en el mensaje CASE para el par.

La implementación de este método es opcional. La implementación predeterminada muestra una carga útil de longitud cero.

EndValidation

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

Se llama al final de la validación del certificado.

Las implementaciones pueden usar esta llamada para realizar la limpieza una vez que se complete la validación de la certificación. En las implementaciones, se garantiza que se llamará a EndValidation() exactamente una vez por cada llamada exitosa a BeginValidation().

GenerateNodeSignature

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

Genera una firma con la clave privada del nodo local.

Cuando se invocan, las implementaciones deben calcular una firma en el valor de hash determinado usando la clave privada del nodo. La firma generada se debe escribir en la forma de una estructura de firma ECDSA CASE en la escritura TLV proporcionada con la etiqueta especificada.

En los casos en que la clave privada del nodo se guarda en un búfer local, la función de utilidad GenerateAndEncodeWeaveECDSASignature() puede ser útil para implementar este método.

HandleValidationResult

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

Se llama con el resultado de la validación del certificado.

Las implementaciones pueden usar esta llamada para inspeccionar y, posiblemente, alterar el resultado de la validación del certificado de apps similares. Si la validación se realiza correctamente, validRes se establecerá en WEAVE_NO_ERROR. En este caso, el contexto de validación contendrá detalles sobre el resultado. En particular, el campo TrustAnchor se configurará como el certificado de ancla de confianza.

Si la implementación inicializó los campos CertValidationResults y CertValidationLen dentro de la estructura ValidationContext durante la llamada BeginValidation(), entonces estos campos contendrán resultados de validación detallados para cada certificado en el conjunto de certificados.

Las implementaciones pueden anular esto configurando validRes en un valor de error, lo que provoca que la validación falle.

Si la validación falló, validRes reflejará el motivo. Las implementaciones pueden anular el resultado con un valor de error diferente, pero NO DEBEN establecer el resultado en WEAVE_NO_ERROR.

OnPeerCertsLoaded

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

Se llama después de que se cargan los certificados del par.

Las implementaciones pueden usar esta llamada para finalizar los certificados de entrada y los criterios de validación que se usarán para realizar la validación del certificado de apps similares. En el momento de la llamada, los certificados proporcionados por el par se habrán cargado en el conjunto de certificados (incluido su propio certificado, si está presente). Además, los argumentos subjectDN y subjectKeyId se inicializarán en valores que se usarán para resolver el certificado del par a partir del conjunto de certificados. Si la app similar proporcionó su propio certificado (en lugar de una referencia de certificado), el campo EntityCert dentro del argumento validCtx contendrá un puntero hacia ese certificado.

Durante esta llamada, las implementaciones pueden modificar el contenido del conjunto de certificados, incluida la adición de certificados nuevos. También pueden modificar los argumentos subjectDN, subjectKeyId o validCtx según sea necesario. Lo más importante es que las implementaciones deben ajustar los campos de tipo de certificado con el certificado establecido antes de mostrarlo para garantizar el tratamiento correcto de los certificados durante la validación y las verificaciones de control de acceso posteriores.

NOTA: En el caso de que la app similar proporcione una referencia de certificado para sí misma, en lugar de un certificado completo, el campo EntityCert en el contexto de validación contendrá un valor NULL. Si una implementación desea admitir referencias de certificados, debe agregar un certificado que coincida con el DN del asunto y el ID de clave del par al certificado establecido antes de devolverlo.

La implementación de este método es opcional. La implementación predeterminada no realiza ninguna acción.