Заголовочный файл: esp_gost.h
Библиотека: esp_gost.o (linux), cpesp_api.dll, cpesp_drv.sys (windows)

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

Expand imageСинтаксис

C/C++ Copy Code
 capi_result CAPI_EXTC espDecapFn (
   ESP_HANDLE sid,
   unsigned uFlags,
   char *pcNextProto,
   void *pData,
   unsigned *puDataLen,
   CPC_CONFIG *config
 );

Параметры

sid
[in] Дескриптор SPI сессии
uFlags
[in] Для трансформов CPIPSEC_PROTO_IPSEC_ESP может принимать значение 0 или ESP_DATA_IOVEC.
  • Значение ESP_DATA_IOVEC означает, что pData интерпретируются как указатель на массив CSP_iovec.

  • Значение 0 означает, что pData интерпретируются как указатель на линейный буфер.

  • Для трансформов CPIPSEC_PROTO_IPSEC_AH в младшем байте uFlags передаётся значение смещения заголовка AH относительно pData

pcNextProto
[out] ID вложенного протокола инкапсуляции (например, сжатия данных)
pData
[in/out] Декапсулируемые данные,
  • указатель на линейный буфер при uFlags == 0,

  • указатель на массив IOVec при uFlags == ESP_DATA_IOVEC.

puDataLen
[in/out] Размер данных, на входе в функцию
  • размер буфера, если uFlags & ESP_DATA_IOVEC == 0,

  • число координат векторов ввода вывода, если uFlags & ESP_DATA_IOVEC == ESP_DATA_IOVEC;

  • на выходе - суммарный размер ESP-заголовка и payload

config
[in] Указатель на CPC_CONFIG используемый при создании HCRYPTMODULE

Возвращаемое значение

CAPI_NOERROR Успешное завершение

CAPI_INTERNAL_ERROR Внутренняя ошибка

CAPI_CSP_ERROR Ошибка вызова CSP

CAPI_CALL_ERROR Неверные аргументы и/или неверный SPI

CAPI_PROTOCOL_ERROR Функция вызвана неверно

CAPI_SN_ERROR Ошибка SN/ESN (повторный пакет)

CAPI_PRELIMINARY_CHK_ERROR Ошибка предварительного контроля (пакет не соответствует сессии, SPI и SN/ESN)

CAPI_HMAC_ERROR Ошибка внешней имитозащиты режима CPIPSEC_PROTO_IPSEC_ESP, CPESP_GOST_1K_IMIT, CPESP_MAC_NULL. В других режимах возвращается в случае несовпадения HMAC

CAPI_IMITA_ERROR Ошибка внутренней имитозащиты в режиме CPIPSEC_PROTO_IPSEC_ESP, CPESP_GOST_1K_IMIT, CPESP_MAC_NULL, и имитозащиты в режиме CPIPSEC_PROTO_IPSEC_ESP, CPESP_GOST_4M_IMIT, CPESP_MAC_NULL. В перечисленных режимах вычисленные значения могут быть получены функцией espGetParamFn


Expand imageПримечания

Под декапсуляцией понимается процесс первичной проверки и расшифрования пакета для дальнейшей обработки в зависимости от протокола.

Функция обрабатывает входные пакеты, представленные в форме линейного буфера или в форме IOVEC, для трансформов CPIPSEC_PROTO_IPSEC_ESP, в зависмости от значения флага uFlags. Функция обрабатывает входные пакеты, представленные в форме линейного буфера, для трансформов CPIPSEC_PROTO_IPSEC_AH.

Функция espDecap() при работе с пакетом в виде iovec воспринимает набор из N+2 координат.

  • [0]: приложением не используется, на входе должны быть обнулены, ptr - NULL, len == 0

  • [1]/[N]: содержат заголовок пакета, IV (в режимах CPESP_NULL отсутствует), PAYLOAD, padding + 2 + сумма размеров Imit-ы либо Hmac.

  • [N+1]: приложением не используется, на входе должны быть обнулены, ptr - NULL, len == 0

После успешного выполнения помещает расшифрованные значения полей PL, padding, padlen, nextproto в соответствии со структурой входного пакета этой функции. Другие поля не изменяются. Функция возвращает сумму длин заголовка пакета и PL.

При несовпадении имиты приложение имеет возможность получить значение рассчитанной имиты вызовом espGetParamFn с параметром ESP_PACKETIMITA.