Функция декапсуляции ESP пакетов SPI сессии.
Синтаксис
capi_result CAPI_EXTC espDecapFn ( ESP_HANDLE sid, unsigned uFlags, char *pcNextProto, void *pData, unsigned *puDataLen, CPC_CONFIG *config );
Параметры
- sid
-
[in] Дескриптор SPI сессии
- uFlags
-
[in] Функциональные флаги
-
При ESP_DATA_IOVEC pData указатель на массив CSP_iovec, puDataLen указатель на количество CSP_iovec
-
При ESP_DATA_MULTIPACKET pData указатель на массив CSP_Multipacket_DEC, puDataLen указатель на количество CSP_Multipacket_DEC
-
При ESP_PADDING_SEQ паддинг проверяется на последовательность 1, 2, 3 .. 255
-
При ESP_PADDING_ZERO паддинг проверяется на ноль
-
- pcNextProto
-
[out] Идентификатор вложенного протокола (TCP, UDP и т.п.)
-
указатель на массив идентификаторов при ESP_DATA_MULTIPACKET
-
- pData
-
[in/out] Декапсулируемые данные
-
указатель на линейный буфер при отсутствии ESP_DATA_IOVEC и ESP_DATA_MULTIPACKET
-
указатель на массив CSP_iovec при ESP_DATA_IOVEC и отсутствии ESP_DATA_MULTIPACKET
-
указатель на массив CSP_Multipacket_DEC при ESP_DATA_MULTIPACKET
-
- puDataLen
-
[in/out] Размер данных
-
на выходе всегда размер заголовка пакета и данных PAYLOAD
-
массив размеров при ESP_DATA_MULTIPACKET
-
на входе размер линейного буфера данных при отсутствии ESP_DATA_IOVEC и ESP_DATA_MULTIPACKET
-
на входе количество CSP_iovec при ESP_DATA_IOVEC и отсутствии ESP_DATA_MULTIPACKET
-
на входе количество CSP_Multipacket_DEC при ESP_DATA_MULTIPACKET
-
- config
-
[in] Указатель на CPC_CONFIG используемый при создании HCRYPTMODULE
Возвращаемое значение
CAPI_NOERROR Успешное завершение
CAPI_INTERNAL_ERROR Внутренняя ошибка
CAPI_CSP_ERROR Ошибка вызова CSP
CAPI_CALL_ERROR Неверные аргументы и/или неверный SPI
CAPI_PROTOCOL_ERROR Функция вызвана неверно
CAPI_SN_ERROR Ошибка при проверках окна (отстающий/повторный пакет)
CAPI_MAC_ERROR Ошибка HMAC или внешней IMITA
CAPI_IMITA_ERROR Ошибка внутренней IMITA
CAPI_TOO_MANY_THREADS Все доступные HCRYPTMODULE заняты (слишком много потоков)
CAPI_MULTI_RESULT Только при ESP_DATA_MULTIPACKET, означает несколько результатов обработки, необходимо уточнение результатов capi_result для каждого пакета в CSP_Multipacket_DEC::dwDecResult
Примечания
Под декапсуляцией понимается процесс первичной проверки и расшифрования пакета для дальнейшей обработки в зависимости от протокола.
Функция обрабатывает входные пакеты, представленные в форме линейного буфера или в форме IOVEC, или в форме MULTIPACKET + IOVEC для трансформов CPIPSEC_PROTO_IPSEC_ESP, в зависмости от значения флага uFlags.
При работе с пакетами в виде IOVEC воспринимает набор из N+1 координат:
-
[0]..[N]: содержат заголовок пакета, место под IV (в режимах CPESP_NULL отсутствует), PAYLOAD, место под PADDING + 2 байта + все MAC
-
[N+1]: приложением не используется, на входе должны быть обнулены (ptr == NULL, len == 0)
Формат пакета соответствует "Методические рекомендации по использованию комбинированного алгоритма шифрования вложений IPsec ESP на основе ГОСТ 28147-89",
При работе с пакетами в виде IOVEC после успешного выполнения:
-
[0]..[N]: содержат обработанный пакет, включая заголовок пакета, IV (в режимах CPESP_NULL отсутствует), PAYLOAD (в зашифрованном виде), PADDING + 2 (в зашифрованном виде) + MAC (IMITA или HMAC);
-
[N+1] приложением не используется.
При работе с пакетами в виде IOVEC пользовательские координаты финального пакета не изменяются.
При работе с пакетами в виде MULTIPACKET + IOVEC каждый пакет должен быть представлен согласно работе с пакетами в виде IOVEC.
Требования
Заголовочный файл | esp_gost.h |
---|---|
Библиотека | |
Минимальная версия продукта | 1.0 |