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);

Respuestas a la pregunta(1)

Su respuesta a la pregunta