Функция 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 .
Значение | Значение |
---|---|
|
Используйте ключ обмена ключами. |
|
Используйте ключ цифровой подписи. |
[in] dwCertEncodingType
Указывает используемый тип кодирования. Это может быть следующее значение.
Значение | Значение |
---|---|
|
Задает кодировку сертификата X.509 . |
[in] lpszStructType
Указатель на строку ANSI со значением NULL, которая содержит тип данных для кодирования и подписи. Следующие предопределенные константы lpszStructType используются с операциями кодирования.
Значение | Значение |
---|---|
|
pvStructInfo — это адрес структуры CRL_INFO . |
|
pvStructInfo — это адрес структуры CERT_REQUEST_INFO . |
|
pvStructInfo — это адрес структуры CERT_INFO . |
|
pvStructInfo — это адрес структуры CERT_KEYGEN_REQUEST_INFO . |
[in] pvStructInfo
Адрес структуры, содержащей данные для подписи и кодирования. Формат этой структуры определяется параметром lpszStructType .
[in] pSignatureAlgorithm
Указатель на структуру CRYPT_ALGORITHM_IDENTIFIER , содержащую идентификатор объекта (OID) алгоритма подписи и все необходимые дополнительные параметры. Эта функция использует следующие алгоритмы OID:
- szOID_RSA_MD5RSA
- szOID_RSA_SHA1RSA
- szOID_X957_SHA1DSA
[in] pvHashAuxInfo
Зарезервировано. Должен иметь значение NULL.
[out] pbEncoded
Указатель на буфер для получения подписанных и закодированных выходных данных.
Этот параметр может иметь значение NULL , чтобы задать размер этих сведений для целей выделения памяти. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.
[in, out] pcbEncoded
Указатель на DWORD , содержащий размер (в байтах) буфера, на который указывает параметр pbEncoded . При возврате функции значение DWORD содержит количество байтов, хранящихся или хранимых в буфере.
Возвращаемое значение
Если функция выполнена успешно, возвращается ненулевое значение (TRUE).
Если функция завершается сбоем, возвращаемое значение равно нулю (FALSE). Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError.
Код возврата | Описание |
---|---|
|
Если буфер, заданный параметром pbEncoded , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbEncoded. |
|
Недопустимый тип кодирования сертификата. В настоящее время поддерживается только X509_ASN_ENCODING. |
|
OID алгоритма сигнатуры не сопоставляет с известным или поддерживаемым хэш-алгоритмом. |
|
При кодировании или декодировании произошла ошибка. Наиболее вероятной причиной этой ошибки является неправильная инициализация полей в структуре, на которую указывает pvStructInfo. |
В случае сбоя функции GetLastError может вернуть ошибку кодирования и декодирования абстрактного синтаксиса (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |