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

Функция CryptSignAndEncodeCertificate кодирует и подписывает сертификат, список отзыва сертификатов (CRL), список доверия сертификатов (CTL) или запрос сертификата.

Эта функция выполняет следующие операции:

  • Вызывает CryptEncodeObject с помощью lpszStructType для кодирования сведений о подписи.
  • Вызывает CryptSignCertificate для подписывания этой закодированной информации.
  • Снова вызывает CryptEncodeObject с параметром lpszStructType , для которого задано значение X509_CERT, для дальнейшего кодирования итоговой закодированной информации.

Синтаксис

BOOL CryptSignAndEncodeCertificate(
  [in]      BCRYPT_KEY_HANDLE           hBCryptKey,
  [in]      DWORD                       dwKeySpec,
  [in]      DWORD                       dwCertEncodingType,
  [in]      LPCSTR                      lpszStructType,
  [in]      const void                  *pvStructInfo,
  [in]      PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
  [in]      const void                  *pvHashAuxInfo,
  [out]     BYTE                        *pbEncoded,
  [in, out] DWORD                       *pcbEncoded
);

Параметры

[in] hBCryptKey

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

[in] dwKeySpec

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

Значение Значение
AT_KEYEXCHANGE
Используйте ключ обмена ключами.
AT_SIGNATURE
Используйте ключ цифровой подписи.

[in] dwCertEncodingType

Указывает используемый тип кодирования. Это может быть следующее значение.

Значение Значение
X509_ASN_ENCODING
Задает кодировку сертификата X.509 .

[in] lpszStructType

Указатель на строку ANSI со значением NULL, которая содержит тип данных для кодирования и подписи. Следующие предопределенные константы lpszStructType используются с операциями кодирования.

Значение Значение
X509_CERT_CRL_TO_BE_SIGNED
pvStructInfo — это адрес структуры CRL_INFO .
X509_CERT_REQUEST_TO_BE_SIGNED
pvStructInfo — это адрес структуры CERT_REQUEST_INFO .
X509_CERT_TO_BE_SIGNED
pvStructInfo — это адрес структуры CERT_INFO .
X509_KEYGEN_REQUEST_TO_BE_SIGNED
pvStructInfo — это адрес структуры CERT_KEYGEN_REQUEST_INFO .

[in] pvStructInfo

Адрес структуры, содержащей данные для подписи и кодирования. Формат этой структуры определяется параметром lpszStructType .

[in] pSignatureAlgorithm

Указатель на структуру CRYPT_ALGORITHM_IDENTIFIER , содержащую идентификатор объекта (OID) алгоритма подписи и все необходимые дополнительные параметры. Эта функция использует следующие алгоритмы OID:

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

[in] pvHashAuxInfo

Зарезервировано. Должен иметь значение NULL.

[out] pbEncoded

Указатель на буфер для получения подписанных и закодированных выходных данных.

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

[in, out] pcbEncoded

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

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

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

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

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

Примечание В эту функцию могут распространяться ошибки из вызываемых функций CryptCreateHash, CryptSignHash и CryptHashData .
 
Возможные коды ошибок включают, помимо прочего, следующие.
Код возврата Описание
ERROR_MORE_DATA
Если буфер, заданный параметром pbEncoded , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbEncoded.
ERROR_FILE_NOT_FOUND
Недопустимый тип кодирования сертификата. В настоящее время поддерживается только X509_ASN_ENCODING.
NTE_BAD_ALGID
OID алгоритма сигнатуры не сопоставляет с известным или поддерживаемым хэш-алгоритмом.
CRYPT_E_BAD_ENCODE
При кодировании или декодировании произошла ошибка. Наиболее вероятной причиной этой ошибки является неправильная инициализация полей в структуре, на которую указывает pvStructInfo.
 

В случае сбоя функции GetLastError может вернуть ошибку кодирования и декодирования абстрактного синтаксиса (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.

Требования

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

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

CryptSignCertificate

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