Развернуть все
Свернуть все

Функция espDecapFn

Функция декапсуляции ESP пакетов SPI сессии.

Синтаксис

C/C++
 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