Я не думаю, что вы можете разделить это, как у вас.
Когда вы выполняете команду только для дайджеста, вы используете API EVP_DigestInit . Когда вы используете опцию -sign, он использует EVP_DigestSignInit API.
Так что я думаю это немного более сложно, чем то, что вы сломали. Чтобы по-настоящему ощутить разницу, вам нужно начать изучать код механизма, в частности реализацию типа закрытого ключа (например, RSA, EC и т. Д.).
Глядя на реализацию механизма RSA PSS, похоже, что заполнение реализовано в соответствии с самой операцией подписи.
например. в функции pkey_rsa_sign вы видите код вроде:
} else if (rctx->pad_mode == RSA_PKCS1_PSS_PADDING) {
if (!setup_tbuf(rctx, ctx))
return -1;
if (!RSA_padding_add_PKCS1_PSS_mgf1(rsa,
rctx->tbuf, tbs,
rctx->md, rctx->mgf1md,
rctx->saltlen))
return -1;
Если вы хотите проверить дайджест, кажется, что вы действительно хотите использовать EVP_DigestVerifyInit API (так как это то, что использует команда dgst), так как я не уверен, что вы доберетесь куда-либо идти по пути, по которому ты хочешь пойти в своем вопросе.