Procedura per la codifica e la decodifica dei messaggi

La procedura per la codifica di un messaggio generale è la seguente.

Per codificare un messaggio

  1. Inizializzare le strutture di dati appropriate per il tipo di dati desiderato.
  2. Chiamare CryptMsgOpenToEncode, passando gli argomenti necessari. Quando si chiama CryptMsgOpenToEncode, se i dati da fornire a CryptMsgUpdate sono già stati codificati con messaggi, passare l'identificatore dell'oggetto appropriato in pszInnerContentObjID , ad esempio "1.2.840.113549.1.7.2" per szOID_RSA_signedData. Se pszInnerContentObjID è NULL, si presuppone che il tipo di contenuto interno non sia stato codificato in precedenza ed è elaborato in modo appropriato.
  3. Chiamare CryptMsgUpdate quante volte necessario per completare il messaggio. Nell'ultima chiamata impostare il parametro fFinal su TRUE. Per informazioni dettagliate, vedere CryptMsgUpdate.
  4. Chiamare CryptMsgGetParam per ottenere un puntatore ai parametri desiderati, ad esempio il contenuto. Per la codifica di dati semplici, generali, usare CMSG_CONTENT_PARAM per dwParamtype.
  5. Chiudere il messaggio chiamando CryptMsgClose.

Questa procedura comporta un messaggio codificato di un tipo specificato nelle chiamate alla funzione.

La procedura per decodificare un messaggio generale è la seguente.

Per decodificare un messaggio

  1. Determinare la lunghezza necessaria per il buffer per contenere i dati codificati usando CryptMsgCalculateEncodedLength.
  2. Chiamare CryptMsgOpenToDecode, passando gli argomenti necessari. Per mantenere la compatibilità con Internet Explorer versione 3.0, viene fornito il parametro dwMsgType . I dati firmati creati in Internet Explorer 3.0 non contengono informazioni sull'intestazione. Pertanto, se tale messaggio viene estratto dalle firme di file, il tipo di messaggio deve essere passato alla funzione. Se zero viene passato al parametro dwMsgType , la funzione leggerà il tipo di messaggio dall'intestazione nel messaggio. Se l'intestazione è mancante, la chiamata alla funzione avrà esito negativo. In caso di esito positivo, viene restituito un handle per il messaggio aperto.
  3. Chiamare CryptMsgUpdate una volta. In questo modo, le azioni appropriate devono essere eseguite sul messaggio, a seconda del tipo di messaggio.
  4. Per l'elaborazione aggiuntiva del messaggio, ad esempio la decrittografia aggiuntiva o la verifica della firma, chiamare CryptMsgControl, passando l'azione desiderata in dwCtrlType.
  5. Chiamare CryptMsgGetParam per ottenere un puntatore ai parametri desiderati, ad esempio il contenuto. Per decodificare i dati generali semplici, usare CMSG_CONTENT_PARAM per il parametro dwParamtype .
  6. Chiamare CryptMsgClose per chiudere il messaggio.

Per un esempio che implementa questi passaggi, vedere Esempio di programma C: codifica e decodifica dei dati. Per le procedure e un esempio che illustra il processo di codifica, decodifica e verifica della firma di un messaggio firmato, vedere Programma C di esempio: firma, codifica, decodifica e verifica di un messaggio.