Funzione CryptVerifyMessageSignature (wincrypt.h)
La funzione CryptVerifyMessageSignature verifica la firma di un messaggio firmato.
Questa funzione non deve essere utilizzata per verificare la firma di un messaggio scollegato. È consigliabile usare la funzione CryptVerifyDetachedMessageSignature per verificare la firma di un messaggio scollegato.
Sintassi
BOOL CryptVerifyMessageSignature(
[in] PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
[in] DWORD dwSignerIndex,
[in] const BYTE *pbSignedBlob,
[in] DWORD cbSignedBlob,
[out] BYTE *pbDecoded,
[in, out] DWORD *pcbDecoded,
[out, optional] PCCERT_CONTEXT *ppSignerCert
);
Parametri
[in] pVerifyPara
Puntatore a una struttura CRYPT_VERIFY_MESSAGE_PARA che contiene parametri di verifica.
[in] dwSignerIndex
Indice della firma desiderata. Possono essere presenti più firme. CryptVerifyMessageSignature può essere chiamato ripetutamente, incrementando dwSignerIndex ogni volta. Impostare questo parametro su zero per il primo firmatario oppure se è presente un solo firmatario. Se la funzione restituisce FALSE e GetLastError restituisce CRYPT_E_NO_SIGNER, la chiamata precedente ha elaborato l'ultimo firmatario del messaggio.
[in] pbSignedBlob
Puntatore a un buffer contenente il messaggio firmato.
[in] cbSignedBlob
Dimensione, in byte, del buffer dei messaggi firmati.
[out] pbDecoded
Puntatore a un buffer per ricevere il messaggio decodificato.
Questo parametro può essere NULL se il messaggio decodificato non è necessario per l'elaborazione aggiuntiva o per impostare le dimensioni del messaggio a scopo di allocazione della memoria. Per altre informazioni, vedere Recupero di dati di lunghezza sconosciuta.
[in, out] pcbDecoded
Puntatore a un valore DWORD che specifica le dimensioni, in byte, del buffer pbDecoded . Quando la funzione viene restituita, questo DWORD contiene le dimensioni, in byte, del messaggio decodificato. Il messaggio decodificato non verrà restituito se questo parametro è NULL.
[out, optional] ppSignerCert
Indirizzo di un puntatore della struttura CERT_CONTEXT che riceve il certificato del firmatario. Al termine dell'uso di questa struttura, liberarlo passando questo puntatore alla funzione CertFreeCertificateContext . Questo parametro può essere NULL se il certificato del firmatario non è necessario.
Valore restituito
Se la funzione ha esito positivo, la funzione restituisce un valore diverso da zero. Ciò non significa necessariamente che la firma sia stata verificata. Nel caso di un messaggio scollegato, la variabile a cui punta pcbDecoded conterrà zero. In questo caso, questa funzione restituirà un valore diverso da zero, ma la firma non viene verificata. Per verificare la firma di un messaggio scollegato, usare la funzione CryptVerifyDetachedMessageSignature .
Se la funzione ha esito negativo, restituisce zero. Per informazioni sugli errori estesi, chiamare GetLastError.
Nella tabella seguente vengono illustrati i codici di errore restituiti più comunemente dalla funzione GetLastError .
Codice restituito | Descrizione |
---|---|
|
Se il buffer specificato dal parametro pbDecoded non è sufficientemente grande da contenere i dati restituiti, la funzione imposta il codice ERROR_MORE_DATA e archivia le dimensioni del buffer necessarie, in byte, nella variabile a cui punta il pcbDecoded. |
|
Tipi di codifica di messaggi e certificati non validi. Attualmente sono supportati solo PKCS_7_ASN_ENCODING e X509_ASN_ENCODING_TYPE. CbSize non valido in *pVerifyPara. |
|
Messaggio di crittografia non firmato. |
|
Il messaggio non ha firmatari o firmatari per l'oggetto dwSignerIndex specificato. |
|
Il messaggio è stato sottoposto a hashing e firmato usando un algoritmo sconosciuto o non supportato. |
|
La firma del messaggio non è stata verificata. |
Se la funzione ha esito negativo, GetLastError può restituire un errore di codifica/decodifica ASN.1 ( Abstract Syntax Notation One ). Per informazioni su questi errori, vedere Codifica ASN.1/Decodifica dei valori restituiti.
Commenti
Per un firmatario e un messaggio verificati, ppSignerCert viene aggiornato con il CERT_CONTEXT del firmatario. Deve essere liberato chiamando CertFreeCertificateContext. In caso contrario , ppSignerCert è impostato su NULL.
Per un messaggio che contiene solo certificati e CRL, pcbDecoded è impostato su NULL.
Esempio
Per un esempio che usa questa funzione, vedere Esempio di programma C: firma di un messaggio e verifica di una firma del messaggio.
Requisiti
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 |