Decodificação de dados enveloped
As tarefas gerais necessárias para decodificar uma mensagem em envelope são descritas na ilustração a seguir e descritas na lista que a segue.
A sequência de eventos para decodificar dados em envelope usando o gerenciamento de chaves de transporte de chaves, conforme descrito na ilustração anterior, é a seguinte:
- Um ponteiro para a mensagem em envelope digital é recuperado.
- Um repositório de certificados é aberto.
- Na mensagem, a ID do destinatário (Minha ID) é recuperada.
- A ID do destinatário é usada para recuperar o certificado.
- A chave privada associada a esse certificado é recuperada.
- A chave privada é usada para descriptografar a chave simétrica (sessão).
- O algoritmo de criptografia é recuperado da mensagem.
- Usando a chave privada e o algoritmo de criptografia, os dados são descriptografados.
O procedimento a seguir usa funções de mensagem de baixo nível para realizar as tarefas listadas.
Para decodificar uma mensagem em envelope
- Obtenha um ponteiro para o BLOB codificado.
- Chame CryptMsgOpenToDecode, passando os argumentos necessários.
- Chame CryptMsgUpdate uma vez, passando o identificador recuperado na etapa 2 e um ponteiro para os dados que devem ser decodificados. Isso faz com que as ações apropriadas sejam executadas na mensagem, dependendo do tipo de mensagem.
- Chame CryptMsgGetParam, passando o identificador recuperado na etapa 2 e CMSG_TYPE_PARAM para verificar se a mensagem é do tipo de dados enveloped.
- Chame novamente CryptMsgGetParam, passando CMSG_INNER_CONTENT_TYPE_PARAM para obter o tipo de dados do conteúdo interno.
- Se o tipo de dados de conteúdo interno for dados, prossiga para descriptografar e decodificar o conteúdo. Caso contrário, execute um procedimento de decodificação apropriado para o tipo de dados de conteúdo.
- Supondo que o tipo de conteúdo interno seja "data", inicialize a estrutura de dados CMSG_CTRL_DECRYPT_PARA e chame CryptMsgControl, passando CMSG_CTRL_DECRYPT e o endereço da estrutura. O conteúdo será descriptografado.
- Chame CryptMsgGetParam, passando CMSG_CONTENT_PARAM para obter um ponteiro para o BLOB de dados de conteúdo decodificado (cadeia de caracteres BYTE ).
- Chame CryptMsgClose para fechar a mensagem.
O resultado desse procedimento é que a mensagem é decodificada e descriptografada e um ponteiro é recuperado para o BLOB de dados de conteúdo.
Tópicos relacionados