Múltiples métodos de firma RSA de OpenSSL producen resultados diferentes
Tratando de entender cómo firmar y usar / probar varias opciones.
Puedo firmar usando este comando:
openssl dgst -sha256 -sign private_key.pem -binary -out sig_file data_file
Pero la documentación parece decir que también puedo usar este método
openssl dgst -sha256 -binary data_file > hash_file
openssl rsautl -sign -inkey private_key.pem -keyform PEM -in hash_file > sig_file2
Pero las firmas son diferentes cuando esperaría que fueran idénticas. O me perdí algo en las opciones o algo más está mal en mis suposiciones.
La verdadera pregunta de este problema: ¿Hay alguna forma de firmar usando las opciones de la línea de comandos dado que ya tengo el valor hash y produzco una firma que es idéntica al primer comando anterior.
Para agregar más a esto, puedo reproducir el primer comando fácilmente en código y coincide con el primer comando anterior, lo que significa que puedo firmar con el valor hash calculado primero.
mdctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL);
EVP_DigestUpdate(mdctx, data, len);
EVP_DigestFinal_ex(mdctx, hash, &s);
EVP_MD_CTX_destroy(mdctx);
kfile = fopen64(key_file, "r");
key = PEM_read_RSAPrivateKey(kfile, NULL, NULL, NULL);
fclose(kfile);
*sig = malloc(RSA_size(key));
RSA_sign(NID_sha256, hash, hlen, *sig, siglen, key);