Поделиться через


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

Функция CryptSignCertificate подписывает сведения о подписании в закодированном подписанном содержимом.

Синтаксис

BOOL CryptSignCertificate(
  [in]      BCRYPT_KEY_HANDLE           hBCryptKey,
  [in]      DWORD                       dwKeySpec,
  [in]      DWORD                       dwCertEncodingType,
  [in]      const BYTE                  *pbEncodedToBeSigned,
  [in]      DWORD                       cbEncodedToBeSigned,
  [in]      PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
  [in]      const void                  *pvHashAuxInfo,
  [out]     BYTE                        *pbSignature,
  [in, out] DWORD                       *pcbSignature
);

Параметры

[in] hBCryptKey

Дескриптор CSP , который выполняет подпись. Этот дескриптор должен быть дескриптором HCRYPTPROV , который был создан с помощью функции CryptAcquireContext , или дескриптором NCRYPT_KEY_HANDLE , созданным с помощью функции NCryptOpenKey . Новые приложения всегда должны передавать дескриптор NCRYPT_KEY_HANDLE CSP CNG.

[in] dwKeySpec

Определяет закрытый ключ для использования из контейнера поставщика. Это может быть AT_KEYEXCHANGE или AT_SIGNATURE. Этот параметр игнорируется, если в параметре hCryptProvOrNCryptKey используется NCRYPT_KEY_HANDLE.

[in] dwCertEncodingType

Указывает используемый тип кодирования. Всегда допустимо указывать типы кодирования сертификатов и сообщений, объединяя их с побитовой операцией ИЛИ , как показано в следующем примере:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

В настоящее время определены следующие типы кодирования:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pbEncodedToBeSigned

Указатель на закодированное содержимое для подписи.

[in] cbEncodedToBeSigned

Размер закодированного содержимого pbEncodedToBeSigned в байтах.

[in] pSignatureAlgorithm

Указатель на структуру CRYPT_ALGORITHM_IDENTIFIER с элементом pszObjId , равным одному из следующих элементов:

  • szOID_RSA_MD5RSA
  • szOID_RSA_SHA1RSA
  • szOID_X957_SHA1DSA
  • szOID_RSA_SSA_PSS
  • szOID_ECDSA_SPECIFIED
Если алгоритм подписи является хэш-алгоритмом, подпись содержит только незашифрованные хэш-октеты. Закрытый ключ не используется для шифрования хэша. DwKeySpec не используется, и hCryptProvOrNCryptKey может иметь значение NULL , если для хэширования можно использовать соответствующий CSP по умолчанию.

[in] pvHashAuxInfo

В настоящий момент не используется. Должно иметь значение NULL.

[out] pbSignature

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

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

[in, out] pcbSignature

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

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

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

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

Если функция завершается ошибкой, возвращаемое значение равно нулю (FALSE). Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.

Примечание Ошибки из вызываемых функций CryptCreateHash, CryptSignHash и CryptHashData могут распространяться на эту функцию.
 
Эта функция имеет следующие коды ошибок.
Код возврата Описание
ERROR_MORE_DATA
Если буфер, заданный параметром pbSignature , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbSignature.
NTE_BAD_ALGID
Идентификатор объекта (OID) алгоритма подписи не сопоставляет с известным или поддерживаемым хэш-алгоритмом.

Требования

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

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

CryptSignAndEncodeCertificate

Функции Управление данными