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
Nota Dopo aver restituito, la DWORD a cui fa riferimento pdwMsgType è impostata con il tipo del messaggio.
 

[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.

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.
 

[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
ERROR_MORE_DATA
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

Vedi anche

CryptDecryptMessage

CryptVerifyMessageHash

CryptVerifyMessageSignature

Funzioni di messaggio semplificate