Библиотека: esp_gost.o (linux), cpesp_api.dll, cpesp_drv.sys (windows)
Функция декапсуляции ESP и AH пакетов SPI сессии.
Синтаксис
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
Примечания
Под декапсуляцией понимается процесс первичной проверки и расшифрования пакета для дальнейшей обработки в зависимости от протокола.
Функция обрабатывает входные пакеты, представленные в форме линейного буфера или в форме 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.