Предоставляет базовый интерфейс для изменяемых криптоконтекстов с целью потокобезопасного запроса ID алгоритма.
Контекст
Интерфейс ara::crypto::cryp::CryptoContext определяет базовую абстракцию для изменяемых криптографических контекстов (mutable cryptographic contexts) внутри криптографического модуля AUTOSAR Adaptive Platform. В отличие от статических криптографических объектов, такой контекст не привязан жестко к отдельному криптографическому объекту. Он служит скорее общим базовым классом для различных контекстов криптографической обработки, внутреннее состояние которых может изменяться во время выполнения криптографических операций.
Центральным элементом этого базового интерфейса выступает чисто виртуальная функция-член GetAlgId(). Она позволяет партнерам по взаимодействию запрашивать идентификатор криптографического алгоритма, сконфигурированного в данный момент в контексте [SWS_CRYPT_20411]. Конкретные контексты криптографических вычислений и преобразований, например для служб хеширования, подписи или шифрования, вероятно, наследуются в системе от CryptoContext для предоставления специфической функциональности алгоритмов. Вопрос Q-203d40209cd355fa (открытый)
Жизненный цикл
Жизненный цикл CryptoContext характеризуется однозначной идентичностью и строгими отношениями владения. Чтобы предотвратить неконтролируемое дублирование или несогласованную передачу состояний контекста во время компиляции, семантические операции копирования полностью запрещены. Как конструктор копирования [SWS_CRYPT_41003], так и оператор присваивания с копированием [SWS_CRYPT_30214] явно объявлены удаленными (=delete).
Таким же образом определение интерфейса предотвращает перемещение контекстов: как конструктор перемещения [SWS_CRYPT_41004], так и оператор присваивания с перемещением [SWS_CRYPT_30215] удалены (=delete). Экземпляры производных классов поэтому постоянно остаются на своем исходном месте в памяти. Уничтожение и освобождение ресурсов происходят детерминированно через виртуальный деструктор, определенный как default и noexcept [SWS_CRYPT_20401]. Это гарантирует безопасное освобождение производных объектов контекста через указатели на базовый интерфейс без утечек ресурсов.
Что касается параллелизма, требование для GetAlgId() явно специфицирует потокобезопасность [SWS_CRYPT_20411]. Таким образом, несколько потоков могут одновременно и без внешней синхронизации считывать идентификатор алгоритма одного и того же контекста.
Путь использования
Поскольку CryptoContext представляет собой чисто виртуальный интерфейс, разработчики приложений не могут создавать прямые экземпляры. Экземпляры специализированных классов контекста обычно создаются через фабричные функции или компоненты-поставщики криптографического стека и предоставляются вызывающей стороне через указатели или ссылки. Вопрос Q-728a7b6dd526eb64 (открытый) Типичный рабочий процесс использования на уровне базового интерфейса включает следующие фазы:
- Предоставление: вызывающая сторона получает ссылку или указатель на сконфигурированный контекст от криптопровайдера.
- Проверка алгоритма: с помощью вызова
GetAlgId() запрашивается и оценивается идентификатор алгоритма [SWS_CRYPT_20411], чтобы убедиться, что контекст удовлетворяет требуемым спецификациям.
- Операция и очистка: после выполнения алгоритмо-специфичных операций через производный интерфейс контекст автоматически освобождается через виртуальный деструктор [SWS_CRYPT_20401].
Сценарии ошибок
Концепция обработки ошибок CryptoContext следует общему отказоустойчивому дизайну AUTOSAR Adaptive Platform и не использует исключения C++. Метод GetAlgId() специфицирован как безопасный относительно исключений (exception safe) и возвращает свой результат в ara::core::Result<ara::crypto::AlgIdString> [SWS_CRYPT_20411]. Если при определении ID алгоритма возникает ошибка, она передается по каналу ошибок объекта Result.
Согласно спецификации, GetAlgId() не определяет стандартизированных кодов ошибок [SWS_CRYPT_20411]. Вызывающие стороны должны прежде всего проверять, содержит ли Result допустимое значение, прежде чем обращаться к строке ID алгоритма. При удалении объекта объявленный с noexcept виртуальный деструктор гарантирует, что во время уничтожения исключения не распространяются и очистка всегда завершается надежно [SWS_CRYPT_20401].
Настоящее руководство основано на спецификации AUTOSAR Adaptive R25-11 и сгенерировано с помощью ИИ-ассистента курации.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал