RSASSA-PSS на практике всегда используется с MGF1 в качестве функции генерации маски.Единственный вариант - какой Message Digest используется внутри MGF1.
Иногда это тот же Message Digest, что и тот, который используется для хеширования сообщения и построения тега в PSS, потому что это имеет смысл.В других случаях это SHA-1, потому что раньше он был MD по умолчанию для ранних API-интерфейсов RSASSA-PSS, то есть для ассоциированного MGF1.
В идеальном мире какой-то атрибут (в сигнатуре или / и всертификат открытого ключа, используемый для проверки подписи) сообщит MGF1-with-such-MD, возможно, с помощью некоторого Object IDentifier, такого как мы должны указать PSS .Но API шифрования - это ад.
Чтобы контролировать, какой дайджест сообщений используется MGF1, нам нужно что-то похожее на то, что -sigopt rsa_mgf1_md:sha256
делает в команде openssl dgst
.
Мое лучшее предположение - установить дайджест MGF1 с помощью
assert(EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, EVP_sha256)>=0);
или получить его с помощью EVP_PKEY_CTX_get_rsa_mgf1_md()
как задокументировано :
EVP_PKEY_CTX_get_rsa_mgf1_md()
макрос получает дайджест MGF1 для ctx
.Если не указано иное, используется подписывающий дайджест.Режим заполнения должен быть установлен на RSA_PKCS1_OAEP_PADDING
или RSA_PKCS1_PSS_PADDING
.