КриптоПро SSPI  

Seal

Функция Seal() зашифровывает сообщение с использованием сессионного ключа, выработанного совместно с удаленной стороной, и вычисляет имитовставку.

DWORD Seal(
  ktls_gost_handle h,
  CPKTLS_HANDLE hCtx,
  IN ULONG fQOP,
  IN OUT PSecBufferDesc Message,
  IN ULONG MessageSeqNo
);

Примечания

Функция не может быть вызвана асинхронно (одновременно из разных нитей) над одним и тем же контекстом. Последовательность пакетов существенна для TLS.

Аргументы

h
[in/out] хендл TLS уровня ядра
hCtx
[in] Дескриптор контекста соединения уровня ядра, установленного с получателем сообщения.
fQOP
[in] Параметр зарезервирован для будущего использования и должен быть 0.
Message
[in/out] Указатель на структуру SecBufferDesc, содержащую 4 буфера SecBuffer.
ТипЗаполнение
SECBUFFER_STREAM_HEADERМожно не инициализировать
SECBUFFER_DATAДолжен содержать данные, которые будут зашифрованы, и их длину
SECBUFFER_STREAM_TRAILERМожно не инициализировать
SECBUFFER_EMPTYПустой
Размеры буферов могут быть получены вызовом QueryContextAttributes с параметром SECPKG_ATTR_STREAM_SIZES. Она возвращает структуру SecPkgContext_StreamSizes, поля которой cbHeader, cbMaximumMessage и cbTrailer содержат размеры соответственно первого, второго и третьего буферов.

Память для этих буферов должна идти подряд одним куском.
MessageSeqNo
[in] Параметр зарезервирован для будущего использования и должен быть 0.

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

Если функция завершается успешно, то возвращается SEC_E_OK. Иначе функция возвращает одно из следующих значений:
Коды возвратаОписание
SEC_E_INVALID_HANDLEПараметр hCtx содержит недействительный дескриптор контекста.
SEC_E_INVALID_TOKENПараметр сообщение содержит неправильные входные данные.
SEC_E_CONTEXT_EXPIREDДругая сторона закрыла соединение. См. заметки.

Примечания

Приложение должно отправить получателю все три полученные буфера - header, data и trailer.

Функция возвращает SEC_E_CONTEXT_EXPIRED, если получатель завершил соединение. После получения этого сообщения нужно:

  • Отправить полученный вывод.
  • Удалить контекст вызовом DeleteContext()
  • См. также

    QueryAttributes() ,SecPkgContext_StreamSizes World Wide Web link ,SecBuffer World Wide Web link ,SecBufferDesc World Wide Web link