Funzione CryptVerifySignatureW (wincrypt.h)
Prima di chiamare questa funzione, è necessario chiamare CryptCreateHash per creare l'handle di un oggetto hash. CryptHashData o CryptHashSessionKey viene quindi usato per aggiungere dati o chiavi di sessione all'oggetto hash.
Al termine
Sintassi
BOOL CryptVerifySignatureW(
[in] HCRYPTHASH hHash,
[in] const BYTE *pbSignature,
[in] DWORD dwSigLen,
[in] HCRYPTKEY hPubKey,
[in] LPCWSTR szDescription,
[in] DWORD dwFlags
);
Parametri
[in] hHash
Handle per l'oggetto hash da verificare.
[in] pbSignature
Indirizzo dei dati della firma da verificare.
[in] dwSigLen
Numero di byte nei dati della firma pbSignature.
[in] hPubKey
Handle per la chiave pubblica da usare per autenticare la firma. Questa chiave pubblica deve appartenere alla coppia di chiavi usata originariamente per creare la firma digitale .
[in] szDescription
Questo parametro non deve più essere usato e deve essere impostato su NULL per evitare vulnerabilità di sicurezza. Tuttavia, è ancora supportato per la compatibilità con le versioni precedenti nel provider di crittografia di base Microsoft.
[in] dwFlags
Vengono definiti i valori di flag seguenti.
Valore | Significato |
---|---|
|
Questo flag viene usato con i provider RSA. Quando si verifica la firma, l'hash identificatore di oggetto (OID) non deve essere presente o controllato. Se questo flag non è impostato, l'OID hash nella firma predefinita viene verificato come specificato nella definizione di DigestInfo in PKCS #7. |
|
Questo flag non viene utilizzato. |
|
Usare il supporto X.931 per la versione conforme a FIPS 186-2 di RSA (rDSA). |
Valore restituito
Se la funzione ha esito positivo, il valore restituito è TRUE.
Se la funzione non riesce, il valore restituito viene FALSE. Per informazioni sugli errori estesi, chiamare GetLastError.
I codici di errore preceduti da "NTE" vengono generati dal CSP specifico in uso. Di seguito sono riportati alcuni possibili codici di errore.
Codice restituito | Descrizione |
---|---|
|
Uno dei parametri specifica un handle non valido. |
|
Uno dei parametri contiene un valore non valido. Si tratta più spesso di un puntatore non valido. |
|
Il parametro dwFlags è diverso da zero. |
|
L'oggetto hash specificato dal parametro hHash non è valido. |
|
Il parametro hPubKey |
|
Firma non valida. Ciò potrebbe essere dovuto al fatto che i dati stessi sono stati modificati, la stringa di descrizione non corrisponde o la chiave pubblica errata è stata specificata da hPubKey.
Questo errore può essere restituito anche se gli algoritmi hash o di firma non corrispondono a quelli usati per creare la firma. |
|
Impossibile trovare il contesto (CSP) del provider di servizi di crittografia |
|
Il provider di servizi di configurazione ha esaurito la memoria durante l'operazione. |
Osservazioni
La funzione CryptVerifySignature completa l'hash. Dopo questa chiamata, non è possibile aggiungere altri dati all'hash. Chiamate aggiuntive a CryptHashData o CryptHashSessionKey esito negativo. Al termine dell'applicazione con l'hash, è necessario chiamare CryptDestroyHash per eliminare definitivamente l'oggetto hash.
Se si genera una firma usando le API .NET Framework e si tenta di verificarla usando la funzione CryptVerifySignature, la funzione avrà esito negativo e GetLastError restituirà NTE_BAD_SIGNATURE. Ciò è dovuto ai diversi ordini di byte tra l'API Win32 nativa e l'API .NET Framework.
L'API di crittografia nativa usa l'ordine dei byte little-endian mentre l'API .NET Framework usa l'ordine dei byte big-endian. Se si verifica una firma generata tramite un'API .NET Framework, è necessario scambiare l'ordine dei byte di firma prima di chiamare la funzione CryptVerifySignature per verificare la firma.
Esempi
Per un esempio che usa la funzione CryptVerifySignature, vedere esempio di programma C: Firma di un hash e verifica della firma hash.
Nota
L'intestazione wincrypt.h definisce CryptVerifySignature come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows XP [solo app desktop] |
server minimo supportato | Windows Server 2003 [solo app desktop] |
piattaforma di destinazione | Finestre |
intestazione |
wincrypt.h |
libreria |
Advapi32.lib |
dll | Advapi32.dll |