Procedimiento para firmar datos

Una sola función, CryptSignMessage, realiza todas las tareas enumeradas en Crear un mensaje firmado. Sin embargo, la inicialización de estructuras y otros datos sigue siendo necesaria. En la ilustración siguiente se muestra la relación entre esos parámetros de función que apuntan a estructuras o matrices y sus datos inicializados. En la ilustración solo se muestran los parámetros de función y los miembros de estructura derivados de otras estructuras o funciones. El resto de los parámetros son inicializaciones sencillas.

asignación de inicialización para una llamada a cryptsignmessage

Para firmar datos mediante CryptSignMessage

  1. Obtenga un puntero a los datos que se van a firmar.
  2. Asigne el puntero a los datos para indexar cero de una matriz de "datos que se van a firmar".
  3. Obtenga un identificador para el proveedor criptográfico.
  4. Abra un almacén de certificados que contenga el certificado del firmante.
  5. Obtenga una dirección al certificado del firmante.
  6. Asigne la dirección del certificado al índice cero de la matriz MsgCert .
  7. Asigne las direcciones de cualquier otro certificado que se incluya con el mensaje a la matriz MsgCert .
  8. Inicialice la estructura CRYPT_ALGORITHM_IDENTIFIER , inicializando el miembro pszObjId en el algoritmo hash deseado y los demás miembros según corresponda.
  9. Inicialice la estructura de CRYPT_SIGN_MESSAGE_PARA , inicializando el miembro pSigningCert en la dirección del certificado del firmante, el miembro de matriz MsgCert a la dirección de los certificados del firmante y otros certificados, el miembro HashAlgorithm a la dirección de la estructura de CRYPT_ALGORITHM_IDENTIFIER y los demás miembros según corresponda.
  10. Llame a la función CryptSignMessage , pasando la estructura de CRYPT_SIGN_MESSAGE_PARA para el parámetro pSignPara , la dirección de la matriz "data to be signed" para el parámetro rgpbToBeSigned , una dirección para el parámetro de salida pbSignedBlob y los valores de los demás parámetros según corresponda.