нл:: Переплетение:: Профили:: Безопасность:: СЛУЧАЙ:: WeaveCASEAuthDelegate
Это абстрактный класс.#include <src/lib/profiles/security/WeaveCASE.h>
Абстрактный интерфейс, которому делегируются действия аутентификации во время установления сеанса CASE .
Краткое содержание
Наследование
Непосредственно известные подклассы: nl::Weave::DeviceManager::WeaveDeviceManagerОбщественные функции | |
---|---|
BeginValidation (const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0 | virtual WEAVE_ERROR Вызывается в начале проверки сертификата. |
EncodeNodeCertInfo (const BeginSessionContext & msgCtx, TLVWriter & writer)=0 | virtual WEAVE_ERROR Закодируйте информацию сертификата CASE для локального узла. |
EncodeNodePayload (const BeginSessionContext & msgCtx, uint8_t *payloadBuf, uint16_t payloadBufSize, uint16_t & payloadLen) | virtual WEAVE_ERROR Закодируйте полезные данные, специфичные для приложения, которые будут включены в сообщение CASE для однорангового узла. |
EndValidation (const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet)=0 | virtual void Вызывается в конце проверки сертификата. |
GenerateNodeSignature (const BeginSessionContext & msgCtx, const uint8_t *msgHash, uint8_t msgHashLen, TLVWriter & writer, uint64_t tag)=0 | virtual WEAVE_ERROR Создайте подпись, используя закрытый ключ локального узла. |
HandleValidationResult (const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet, WEAVE_ERROR & validRes)=0 | virtual WEAVE_ERROR Вызывается с результатом проверки сертификата. |
OnPeerCertsLoaded (const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet) | virtual WEAVE_ERROR Вызывается после загрузки сертификатов узла. |
Общественные функции
Начать проверку
virtual WEAVE_ERROR BeginValidation( const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet )=0
Вызывается в начале проверки сертификата.
Реализации должны инициализировать предоставленный объект WeaveCertificateSet с достаточными ресурсами для обработки предстоящей проверки сертификата. В это время реализации могут загружать доверенные корневые сертификаты или сертификаты CA в набор сертификатов или ждать, пока не будет вызван OnPeerCertsLoaded() .
Каждому сертификату, загруженному в набор сертификатов, с помощью функции загрузки будет присвоен тип сертификата по умолчанию. Реализации должны корректировать эти типы по мере необходимости, чтобы обеспечить правильную обработку сертификата во время проверки и правильное назначение WeaveAuthMode для взаимодействий CASE .
Предоставленный контекст проверки будет инициализирован набором критериев проверки по умолчанию, которые реализация может изменить по мере необходимости. Реализация должна либо установить поле «Эффективное время», либо установить соответствующие флаги проверки, чтобы подавить проверку срока действия сертификата.
Если желательны подробные результаты проверки, реализация может инициализировать поля CertValidationResults и CertValidationLen.
Реализации должны поддерживать любые ресурсы, выделенные во время BeginValidation() , до тех пор, пока не будет вызван соответствующий EndValidation() . Реализации гарантируют, что EndValidation() будет вызываться ровно один раз для каждого успешного вызова BeginValidation() .
Энкоденодецертинфо
virtual WEAVE_ERROR EncodeNodeCertInfo( const BeginSessionContext & msgCtx, TLVWriter & writer )=0
Закодируйте информацию сертификата CASE для локального узла.
Реализации могут использовать этот вызов для переопределения кодировки по умолчанию структуры CASE CertificateInformation для локального узла. При вызове реализация должна записать структуру CertificateInformation, содержащую как минимум сертификат объекта локального узла. Реализация может дополнительно включать набор связанных сертификатов и/или якорей доверия.
EncodeNodePayload
virtual WEAVE_ERROR EncodeNodePayload( const BeginSessionContext & msgCtx, uint8_t *payloadBuf, uint16_t payloadBufSize, uint16_t & payloadLen )
Закодируйте полезные данные, специфичные для приложения, которые будут включены в сообщение CASE для однорангового узла.
Реализация этого метода не является обязательной. Реализация по умолчанию возвращает полезную нагрузку нулевой длины.
EndValidation
virtual void EndValidation( const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet )=0
Вызывается в конце проверки сертификата.
Реализации могут использовать этот вызов для выполнения очистки после завершения проверки сертификации. Реализации гарантируют, что EndValidation() будет вызываться ровно один раз для каждого успешного вызова BeginValidation() .
Генератнодеподпись
virtual WEAVE_ERROR GenerateNodeSignature( const BeginSessionContext & msgCtx, const uint8_t *msgHash, uint8_t msgHashLen, TLVWriter & writer, uint64_t tag )=0
Создайте подпись, используя закрытый ключ локального узла.
При вызове реализации должны вычислить подпись по заданному значению хеш-функции, используя закрытый ключ узла. Сгенерированная подпись затем должна быть записана в форме структуры CASE ECDSASignature в предоставленную запись TLV с использованием указанного тега.
В тех случаях, когда закрытый ключ узла хранится в локальном буфере, для реализации этого метода может быть полезна служебная функция GenerateAndEncodeWeaveECDSASignature() .
HandleValidationResult
virtual WEAVE_ERROR HandleValidationResult( const BeginSessionContext & msgCtx, ValidationContext & validCtx, WeaveCertificateSet & certSet, WEAVE_ERROR & validRes )=0
Вызывается с результатом проверки сертификата.
Реализации могут использовать этот вызов для проверки и, возможно, изменения результата проверки сертификата узла. Если проверка прошла успешно, для параметра validRes будет установлено значение WEAVE_NO_ERROR. В этом случае контекст проверки будет содержать подробную информацию о результате. В частности, в поле TrustAnchor будет указан сертификат привязки доверия.
Если реализация инициализировала поля CertValidationResults и CertValidationLen в структуре ValidationContext во время вызова BeginValidation() , то эти поля будут содержать подробные результаты проверки для каждого сертификата в наборе сертификатов.
Реализации могут переопределить это, установив validRes в значение ошибки, что приведет к сбою проверки.
Если проверка не удалась, validRes отразит причину сбоя. Реализации могут переопределить результат на другое значение ошибки, но НЕ ДОЛЖНЫ устанавливать результат в WEAVE_NO_ERROR.
OnPeerCertsLoaded
virtual WEAVE_ERROR OnPeerCertsLoaded( const BeginSessionContext & msgCtx, WeaveDN & subjectDN, CertificateKeyId & subjectKeyId, ValidationContext & validCtx, WeaveCertificateSet & certSet )
Вызывается после загрузки сертификатов узла.
Реализации могут использовать этот вызов для завершения входных сертификатов и критериев проверки, которые будут использоваться для проверки сертификата узла. Во время вызова сертификаты, предоставленные партнером, будут загружены в набор сертификатов (включая собственный сертификат, если он присутствует). Кроме того, аргументы subjectDN и subjectKeyId будут инициализированы значениями, которые будут использоваться для разрешения сертификата узла из набора сертификатов. Если партнер предоставил свой собственный сертификат (а не ссылку на сертификат), то поле EntityCert в аргументе validCtx будет содержать указатель на этот сертификат.
Во время этого вызова реализации могут изменять содержимое набора сертификатов, включая добавление новых сертификатов. При необходимости они также могут изменить аргументы subjectDN, subjectKeyId или validCtx. Самое главное, реализации должны скорректировать поля типа сертификата с набором сертификатов перед возвратом, чтобы обеспечить правильную обработку сертификатов во время проверки и последующих проверок контроля доступа.
ПРИМЕЧАНИЕ. Если партнер предоставляет ссылку на сертификат для себя, а не полный сертификат, поле EntityCert в контексте проверки будет содержать NULL. Если реализация желает поддерживать ссылки на сертификаты, она должна добавить сертификат, соответствующий DN субъекта и идентификатору ключа партнера, в набор сертификатов перед возвратом.
Реализация этого метода не является обязательной. Реализация по умолчанию ничего не делает.