Заголовочный файл: 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 espEncapFn (
   ESP_HANDLE sid,
   unsigned uFlags,
   char cNextProto,
   void *pData,
   unsigned *puDataLen,
   unsigned uBufLen,
   CPC_CONFIG *config
 );

Параметры

sid
[in] Дескриптор ESP сессии
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

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

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

  • В случае pData=0, т.е. в случае запроса длины данных инкапсуляции, uFlags д.б. равен 0, расчётная длина буфера данных будет возвращена через параметр puDataLen

puDataLen
[in/out] Входной размер данных (Длина esp header + длина PAYLOAD), на выходе общий размер пакета (сумма длин заголовка пакета, IV (в режимах CPESP_NULL отсутствует), PAYLOAD, padding + 2 + IMITA (HMAC))
uBufLen
[in] Размер линейного буфера данных. Число элементов массива IOVec (N+2) при uFlags == ESP_DATA_IOVEC.
config
[in] Указатель на CPC_CONFIG используемый при создании HCRYPTMODULE

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

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

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

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

CAPI_NOT_ENOUGH_SPACE Размер буфера недостаточен для инкапсуляции и шифрования данных

CAPI_CALL_ERROR Неверные аргументы

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

CAPI_TTL_SECS_EXPIRED_ERROR Превышено время жизни сессии

CAPI_TTL_BYTES_EXPIRED_ERROR Превышен объём данных, который может быть обработан в сессии


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

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

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

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

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

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

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

После успешного выполнения:

  • [0]: приложением не используется

  • [1]/[N]: содержат обработанный пакет (заголовок пакета, IV (в режимах CPESP_NULL отсутствует), PAYLOAD в шифрованном виде), шифрованный паддинг +2 и имиты (HMAC), суммарный размер координат не изменяется.

  • [N+1] приложением не используется.

Финальный пакет представлен набором координат [1..N]