Funzione CryptDecodeMessage (wincrypt.h)
La funzione CryptDecodeMessage decodifica, decrittografa e verifica un messaggio crittografico.
Questa funzione può essere usata quando il tipo di messaggio crittografico è sconosciuto. Le costanti dwMsgTypeFlags possono essere combinate con un'operazione BIT-OR in modo che la funzione tenterà di trovare uno dei tipi. Quando viene trovato uno dei tipi, la funzione segnala il tipo trovato e restituisce i dati appropriati a tale tipo.
In ogni passaggio, la funzione crepa solo un singolo livello di crittografia o codifica. Per altre cracking, questa funzione o una delle altre funzioni di messaggio semplificate, deve essere chiamata di nuovo.
Sintassi
BOOL CryptDecodeMessage(
[in] DWORD dwMsgTypeFlags,
[in] PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
[in] PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
[in] DWORD dwSignerIndex,
[in] const BYTE *pbEncodedBlob,
[in] DWORD cbEncodedBlob,
[in] DWORD dwPrevInnerContentType,
[out, optional] DWORD *pdwMsgType,
[out, optional] DWORD *pdwInnerContentType,
[out, optional] BYTE *pbDecoded,
[in, out, optional] DWORD *pcbDecoded,
[out, optional] PCCERT_CONTEXT *ppXchgCert,
[out, optional] PCCERT_CONTEXT *ppSignerCert
);
Parametri
[in] dwMsgTypeFlags
Indica il tipo di messaggio. I tipi di messaggio possono essere combinati con l'operatore bit per bit-OR . Questo parametro può essere uno dei tipi di messaggio seguenti:
- CMSG_DATA_FLAG
- CMSG_SIGNED_FLAG
- CMSG_ENVELOPED_FLAG
- CMSG_SIGNED_AND_ENVELOPED_FLAG
- CMSG_HASHED_FLAG
[in] pDecryptPara
Puntatore a una struttura CRYPT_DECRYPT_MESSAGE_PARA che contiene parametri di decrittografia.
[in] pVerifyPara
Puntatore a una struttura CRYPT_VERIFY_MESSAGE_PARA che contiene parametri di verifica.
[in] dwSignerIndex
Indica quale segno, tra i possibili molti firmatari di un messaggio, deve essere verificato. Questo indice può essere modificato in più chiamate alla funzione per verificare altri firmatari.
dwSignerIndex è impostato su zero per il primo firmatario. Se la funzione restituisce FALSE e GetLastError restituisce CRYPT_E_NO_SIGNER, la chiamata precedente ha restituito l'ultimo segno del messaggio. Questo parametro viene usato solo con messaggi di tipi CMSG_SIGNED_AND_ENVELOPED o CMSG_SIGNED. Per tutti gli altri tipi di messaggio, deve essere impostato su zero.
[in] pbEncodedBlob
Puntatore al BLOB codificato da decodificare.
[in] cbEncodedBlob
Dimensioni, in byte, del BLOB codificato.
[in] dwPrevInnerContentType
Applicabile solo quando si elaborano messaggi crittografici annidati. Quando si elabora un messaggio crittografico esterno, deve essere impostato su zero. Quando si decodifica un messaggio crittografico annidato, viene impostato sul valore restituito in pdwInnerContentType da una chiamata precedente di CryptDecodeMessage per il messaggio esterno. Può essere uno dei tipi CMSG elencati in pdwMsgType. Per la compatibilità con le versioni precedenti, impostare dwPrevInnerContentType su zero.
[out, optional] pdwMsgType
Puntatore a un DWORD che specifica il tipo di messaggio restituito. Questo parametro può essere uno dei tipi di messaggio seguenti:
- CMSG_DATA
- CMSG_SIGNED
- CMSG_ENVELOPED
- CMSG_SIGNED_AND_ENVELOPED
- CMSG_HASHED
[out, optional] pdwInnerContentType
Puntatore a un DWORD che specifica il tipo di un messaggio interno. I codici di tipo di messaggio usati per pdwMsgType vengono usati anche qui.
Se non è presente un annidamento crittografico, viene restituito CMSG_DATA.
[out, optional] pbDecoded
Puntatore a un buffer per ricevere il messaggio decodificato.
Questo parametro può essere NULL se il messaggio decodificato non è obbligatorio o per impostare le dimensioni del messaggio decodificato per scopi di allocazione della memoria. Un messaggio decodificato non verrà restituito se questo parametro è NULL. Per altre informazioni, vedere Recupero dei dati di lunghezza sconosciuta.
[in, out, optional] pcbDecoded
Puntatore a una variabile che specifica le dimensioni, in byte, del buffer a cui punta il parametro pbDecoded . Quando la funzione restituisce, questa variabile contiene le dimensioni del messaggio decodificato.
[out, optional] ppXchgCert
Puntatore a un puntatore a una struttura di CERT_CONTEXT con un certificato che corrisponde alla chiave di scambio privata necessaria per decodificare il messaggio. Questo parametro è impostato solo per i tipi di messaggi CMSG_ENVELOPED e CMSG_SIGNED_AND_ENVELOPED.
[out, optional] ppSignerCert
Puntatore a un puntatore a una struttura CERT_CONTEXT del contesto del certificato del firmatario. Questo parametro è impostato solo per i tipi di messaggi CMSG_SIGNED e CMSG_SIGNED_AND_ENVELOPED.
Valore restituito
Se la funzione ha esito positivo, la funzione restituisce non zero (TRUE).
Se la funzione ha esito negativo, restituisce zero (FALSE). Per informazioni sull'errore estese, chiamare GetLastError.
Le funzioni CryptDecryptMessage, CryptVerifyMessageSignature o CryptVerifyMessageHash possono essere propagate a questa funzione.
Il codice di errore seguente viene restituito più comunemente dalla funzione GetLastError .
Codice restituito | Descrizione |
---|---|
|
Se il buffer specificato dal parametro pbDecoded 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 pcbDecoded. |
Commenti
Il parametro dwMsgTypeFlags specifica il set di messaggi consentiti. Ad esempio, per decodificare i messaggi SIGNED o ENVELOPED, impostare dwMsgTypeFlags su CMSG_SIGNED_FLAG | CMSG_ENVELOPED_FLAG. È necessario specificare o entrambi i parametri pDecryptPara o pVerifyPara .
Per un messaggio decodificato o verificato correttamente, i puntatori al contesto del certificato puntati da ppXchgCert e ppSignerCert vengono aggiornati. Devono essere liberati chiamando CertFreeCertificateContext. Se la funzione ha esito negativo, vengono impostate su NULL.
I parametri ppXchgCert o ppSignerCert possono essere impostati su NULL prima che venga chiamata la funzione, che indica che il chiamante non è interessato a ottenere il certificato di exchange o il contesto del certificato di firma.
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 |