Функция
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 ,SecBuffer ,SecBufferDesc