КриптоПро TLS

DecryptMessage

Функция DecryptMessage().

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

SECURITY_STATUS DecryptMessage (
  PCtxtHandle phContext, 
  PSecBufferDesc pMessage, 
  ULONG MessageSeqNo, 
  PULONG pfQOP
);

Примечание:

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

Параметры:

phContext
[in] Дескриптор контекста соединения, установленного с отправителем сообщения.
pMessage
[in/out] Указатель на структуру SecBufferDesc, содержащую 4 буфера SecBuffer. Ровно один из них должен иметь тип SECBUFFER_DATA, и содержать зашифрованные данные, которые будут расшифрованы на месте. Остальные буферы должны иметь тип SECBUFFER_EMPTY.
MessageSeqNo
[in] Параметр зарезервирован для будущего использования и должен быть 0.
pfQOP
[in] Параметр зарезервирован для будущего использования и должен быть NULL.

Возвращает:

Если функция завершается успешно, и другая сторона не запросила изменения состояния соединения (renegotiation или shutdown), то возвращается SEC_E_OK. Иначе функция возвращает одно из следующих значений:

Возвращаемые значения Описание
SEC_E_INVALID_HANDLE Параметр phContext содержит недействительный дескриптор контекста.
SEC_E_INVALID_TOKEN Параметр pInput содержит неправильные входные данные.
SEC_E_INCOMPLETE_MESSAGE Данные во входном буфере неполны. Приложение должно прочитать остальные данные, и повторить вызов.
SEC_I_RENEGOTIATE Другая сторона запросила renegotiate. См. заметки.
SEC_I_CONTEXT_EXPIRED Другая сторона закрыла соединение. См. заметки.

Примечание:

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

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


Код возврата SEC_I_RENEGOTIATE означает, что отправитель хочет переустановить соединение. В этом случае необходимо вызвать AcceptSecurityContext (для сервера) или InitializeSecurityContext (для клиента), передав пустой входной буфер. После этого первого вызова, повторяется та же цепочка действий, что и при первоначальном создании контекста.

Требования:

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.

См. также:

AcceptSecurityContext() , InitializeSecurityContext() , DeleteSecurityContext() , EncryptMessage() , SecBuffer() , SecBufferDesc()