Condividi tramite


Funzione CryptSignCertificate (wincrypt.h)

La funzione CryptSignCertificate firma le informazioni "da firmare" nel contenuto firmato codificato.

Sintassi

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

Parametri

[in] hBCryptKey

Handle del CSP che esegue la firma. Questo handle deve essere 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 l'handle NCRYPT_KEY_HANDLE di un CNG CSP.

[in] dwKeySpec

Identifica la chiave privata da usare dal contenitore del provider. Può essere AT_KEYEXCHANGE o AT_SIGNATURE. Questo parametro viene ignorato se viene usato un NCRYPT_KEY_HANDLE nel parametro hCryptProvOrNCryptKey .

[in] dwCertEncodingType

Specifica il tipo di codifica usato. È sempre accettabile specificare sia i tipi di codifica del certificato che dei messaggi combinandoli con un'operazione bit per bit or , come illustrato nell'esempio seguente:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

I tipi di codifica attualmente definiti sono:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pbEncodedToBeSigned

Puntatore al contenuto codificato da firmare.

[in] cbEncodedToBeSigned

Dimensioni, in byte, del contenuto codificato, pbEncodedToBeSigned.

[in] pSignatureAlgorithm

Puntatore a una struttura CRYPT_ALGORITHM_IDENTIFIER con un membro pszObjId impostato su uno dei seguenti:

  • szOID_RSA_MD5RSA
  • szOID_RSA_SHA1RSA
  • szOID_X957_SHA1DSA
  • szOID_RSA_SSA_PSS
  • szOID_ECDSA_SPECIFIED
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

Attualmente non utilizzato. Deve essere NULL.

[out] pbSignature

Puntatore a un buffer per ricevere l'hash firmato del contenuto.

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] pcbSignature

Puntatore a un DWORD contenente le dimensioni, in byte, del buffer a cui punta il parametro pbSignature . 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.
 
Questa funzione contiene i codici di errore seguenti.
Codice restituito Descrizione
ERROR_MORE_DATA
Se il buffer specificato dal parametro pbSignature 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 pcbSignature.
NTE_BAD_ALGID
L'identificatore dell'oggetto dell'algoritmo di firma (OID) non esegue il mapping a un algoritmo hash noto o supportato.

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

CryptSignAndEncodeCertificate

Funzioni Gestione dati