Функция CryptSignMessage (wincrypt.h)

Функция CryptSignMessage создает хэш указанного содержимого, подписывает хэш, а затем кодирует исходное содержимое сообщения и подписанный хэш.

Синтаксис

BOOL CryptSignMessage(
  [in]      PCRYPT_SIGN_MESSAGE_PARA pSignPara,
  [in]      BOOL                     fDetachedSignature,
  [in]      DWORD                    cToBeSigned,
  [in]      const BYTE * []          rgpbToBeSigned,
  [in]      DWORD []                 rgcbToBeSigned,
  [out]     BYTE                     *pbSignedBlob,
  [in, out] DWORD                    *pcbSignedBlob
);

Параметры

[in] pSignPara

Указатель на структуру CRYPT_SIGN_MESSAGE_PARA , содержащую параметры сигнатуры.

[in] fDetachedSignature

Значение TRUE , если это отсоединяемая сигнатура. В противном случае — FALSE. Если для этого параметра задано значение TRUE, в pbSignedBlob кодируется только хэш со знаком. В противном случае кодируются как rgpbToBeSigned , так и хэш со знаком.

[in] cToBeSigned

Количество элементов массива в rgpbToBeSigned и rgcbToBeSigned. Этот параметр должен иметь значение один, если только fDetachedSignature не имеет значение TRUE.

[in] rgpbToBeSigned

Массив указателей на буферы, содержащие содержимое для подписи.

[in] rgcbToBeSigned

Массив размеров (в байтах) буферов содержимого, на которые указывает rgpbToBeSigned.

[out] pbSignedBlob

Указатель на буфер для получения закодированного хэша со знаком, если fDetachedSignature имеет значение TRUE, или на закодированное содержимое и хэш со знаком, если fDetachedSignature имеет значение FALSE.

Этот параметр может иметь значение NULL , чтобы задать размер этих сведений для целей выделения памяти. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.

[in, out] pcbSignedBlob

Указатель на DWORD , указывающий размер буфера pbSignedBlob (в байтах). При возврате функции эта переменная содержит размер подписанного и закодированного сообщения в байтах.

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

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

Если функция выполнена успешно, возвращается ненулевое значение (TRUE).

Если функция завершается сбоем, возвращаемое значение равно нулю (FALSE).

Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError.

Ниже перечислены коды ошибок, наиболее часто возвращаемые функцией GetLastError .

Код возврата Описание
ERROR_MORE_DATA
Если буфер, заданный параметром pbSignedBlob , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbSignedBlob.
E_INVALIDARG
Недопустимый тип кодирования сообщений . В настоящее время поддерживается только PKCS_7_ASN_ENCODING. Недопустимый параметр cbSize в *pSignPara.
CRYPT_E_NO_KEY_PROPERTY
PSigningCert в *pSignPara не имеет свойства CERT_KEY_PROV_INFO_PROP_ID или CERT_KEY_CONTEXT_PROP_ID.
 
Примечание Ошибки из вызываемых функций CryptCreateHash, CryptHashData и CryptSignHash могут быть распространены на эту функцию.
 
В случае сбоя функции GetLastError может вернуть ошибку кодирования и декодирования абстрактного синтаксиса (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

См. также раздел

CryptSignAndEncryptMessage

CryptVerifyMessageSignature

Упрощенные функции сообщений