КриптоПро TLS

EncryptMessage

Функция EncryptMessage().

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

SECURITY_STATUS EncryptMessage (
  PCtxtHandle phContext, 
  ULONG fQOP, 
  PSecBufferDesc pMessage, 
  ULONG MessageSeqNo
);

Примечание:

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

Параметры:

phContext
[in] Дескриптор контекста соединения, установленного с получателем сообщения.
fQOP
[in] Параметр зарезервирован для будущего использования и должен быть 0.
pMessage
[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 Параметр phContext содержит недействительный дескриптор контекста.
SEC_E_INVALID_TOKEN Параметр pInput содержит неправильные входные данные.
SEC_E_CONTEXT_EXPIRED Другая сторона закрыла соединение. См. заметки.

Примечание:

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

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

  1. Отправить полученный вывод.
  2. Удалить контекст вызовом DeleteSecurityContext()

Требования:

Windows NT/2000/XP: Необходимо Windows NT 4.0 SP5 или старше с Internet Explorer 5.0 или старше.
Windows 98/ME: Необходимо Windows 95 OSR2 или старше с Internet Explorer 5.0 или старше.
Файл описания: Прототип описан в файле Sspi.h.

См. также:

QueryContextAttributes() , SecPkgContext_StreamSizes() , SecBuffer() , SecBufferDesc()