Funzione CryptSignAndEncodeCertificate (wincrypt.h)

La funzione CryptSignAndEncodeCertificate codifica e firma un certificato, un elenco di revoche di certificati (CRL), un elenco di attendibilità certificato (CTL) o una richiesta di certificato.

Questa funzione esegue le operazioni seguenti:

  • Chiama CryptEncodeObject usando lpszStructType per codificare le informazioni "da firmare".
  • Chiama CryptSignCertificate per firmare queste informazioni codificate.
  • Chiama di nuovo CryptEncodeObject , con lpszStructType impostato su X509_CERT, per codificare ulteriormente le informazioni firmate e codificate risultanti.

Sintassi

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
);

Parametri

[in] hBCryptKey

Handle del provider di servizi di crittografia (CSP) per eseguire la firma. Questo handle è un handle HCRYPTPROV creato usando la funzione CryptAcquireContext o un handle NCRYPT_KEY_HANDLE creato usando la funzione NCryptOpenKey . Le nuove applicazioni devono sempre passare un handle NCRYPT_KEY_HANDLE di un CNG CSP.

[in] dwKeySpec

Identifica la chiave privata da usare dal contenitore del provider. Questo deve essere uno dei valori seguenti. Questo parametro viene ignorato se viene passata una chiave CNG nel parametro hCryptProvOrNCryptKey .

Valore Significato
AT_KEYEXCHANGE
Usare la chiave di scambio delle chiavi.
AT_SIGNATURE
Usare la chiave di firma digitale.

[in] dwCertEncodingType

Specifica il tipo di codifica usato. Questo può essere il valore seguente.

Valore Significato
X509_ASN_ENCODING
Specifica la codifica del certificato X.509 .

[in] lpszStructType

Puntatore a una stringa ANSI con terminazione null contenente il tipo di dati da codificare e firmare. Le costanti lpszStructType predefinite seguenti vengono usate con operazioni di codifica.

Valore Significato
X509_CERT_CRL_TO_BE_SIGNED
pvStructInfo è l'indirizzo di una struttura CRL_INFO .
X509_CERT_REQUEST_TO_BE_SIGNED
pvStructInfo è l'indirizzo di una struttura CERT_REQUEST_INFO .
X509_CERT_TO_BE_SIGNED
pvStructInfo è l'indirizzo di una struttura CERT_INFO .
X509_KEYGEN_REQUEST_TO_BE_SIGNED
pvStructInfo è l'indirizzo di una struttura CERT_KEYGEN_REQUEST_INFO .

[in] pvStructInfo

Indirizzo di una struttura che contiene i dati da firmare e codificare. Il formato di questa struttura è determinato dal parametro lpszStructType .

[in] pSignatureAlgorithm

Puntatore a una struttura CRYPT_ALGORITHM_IDENTIFIER contenente l'identificatore dell'oggetto (OID) dell'algoritmo di firma e tutti i parametri aggiuntivi necessari. Questa funzione usa gli OID dell'algoritmo seguenti:

  • szOID_RSA_MD5RSA
  • szOID_RSA_SHA1RSA
  • szOID_X957_SHA1DSA
Se l'algoritmo di firma è un algoritmo hash, la firma contiene solo i ottet hash non crittografati. Una chiave privata non viene usata per crittografare l'hash. dwKeySpec non viene usato e hCryptProvOrNCryptKey può essere NULL se è possibile usare un CSP predefinito appropriato per l'hashing.

[in] pvHashAuxInfo

Riservato. Deve essere NULL.

[out] pbEncoded

Puntatore a un buffer per ricevere l'output firmato e codificato.

Questo parametro può essere NULL per impostare le dimensioni di queste informazioni per scopi di allocazione della memoria. Per altre informazioni, vedere Recupero dei dati di lunghezza sconosciuta.

[in, out] pcbEncoded

Puntatore a un DWORD contenente le dimensioni, in byte, del buffer a cui punta il parametro pbEncoded . Quando la funzione restituisce, la DWORD contiene il numero di byte archiviati o da archiviare nel buffer.

Nota Quando si elaborano i dati restituiti nel buffer, le applicazioni devono usare le dimensioni effettive dei dati restituiti. Le dimensioni effettive possono essere leggermente inferiori rispetto alle dimensioni del buffer specificato nell'input. In base all'input, le dimensioni del buffer vengono in genere specificate abbastanza grandi per garantire che i dati di output più grandi siano adatti al buffer. Nell'output la variabile a cui punta questo parametro viene aggiornata per riflettere le dimensioni effettive dei dati copiati nel buffer.
 

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero (TRUE).

Se la funzione ha esito negativo, il valore restituito è zero (FALSE). Per informazioni sull'errore estese, chiamare GetLastError.

Nota Gli errori delle funzioni denominate CryptCreateHash, CryptSignHash e CryptHashData potrebbero essere propagati a questa funzione.
 
I codici di errore possibili includono, ma non sono limitati a, quanto segue.
Codice restituito Descrizione
ERROR_MORE_DATA
Se il buffer specificato dal parametro pbEncoded non è sufficiente per contenere i dati restituiti, la funzione imposta il codice ERROR_MORE_DATA e archivia le dimensioni del buffer necessarie, in byte, nella variabile puntata da pcbEncoded.
ERROR_FILE_NOT_FOUND
Tipo di codifica del certificato non valido. Attualmente è supportato solo X509_ASN_ENCODING.
NTE_BAD_ALGID
L'OID dell'algoritmo di firma non esegue il mapping a un algoritmo hash noto o supportato.
CRYPT_E_BAD_ENCODE
Si è verificato un errore durante la codifica o la decodifica. La causa più probabile di questo errore è l'inizializzazione non corretta dei campi nella struttura puntata da pvStructInfo.
 

Se la funzione ha esito negativo, GetLastError potrebbe restituire un errore di codifica astratta Notation One (ASN.1). Per informazioni su questi errori, vedere Codifica ASN.1/Decodifica dei valori restituiti.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione wincrypt.h
Libreria Crypt32.lib
DLL Crypt32.dll

Vedi anche

CryptSignCertificate

Funzioni Gestione dati