КриптоПро SSPI  

UnSeal

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

DWORD CAPI_EXTC UnSeal(
  ktls_gost_handle h,
  CPKTLS_HANDLE hCtx,
  IN OUT PSecBufferDesc Message,
  IN ULONG MessageSeqNo,
  OUT PULONG pfQOP
);

Примечания

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

Аргументы

h
[in/out] хендл TLS уровня ядра
hCtx
[in] Дескриптор контекста соединения уровня ядра, установленного с получателем сообщения.
Message
[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Данные во входном буфере неполны. Приложение должно прочитать остальные данные, и повторить вызов. При этом буфер с данными (SECBUFFER_DATA) и первый пустой буфер (SECBUFFER_EMPTY) будут содержать длину недостающих данных и иметь тип SECBUFFER_EMPTY.
SEC_I_RENEGOTIATEДругая сторона запросила renegotiate. См. заметки.
SEC_I_CONTEXT_EXPIREDДругая сторона закрыла соединение.

Примечания

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

См. также

ImportContext() ,ExportContext() ,DeleteContext() ,Seal() ,SecBuffer World Wide Web link ,SecBufferDesc World Wide Web link