如何使用 criptonite 库以这种特殊方式使用 RSA 解密 ByteString?

How to decrypt a ByteString using RSA this particular way, with the criptonite library?

我继承了 Elixir/Erlang 中的一些代码:

  res = :crypto.private_decrypt(:rsa, my_bin_data, rsa_priv_key, [{:rsa_padding, :rsa_pkcs1_oaep_padding}])

我想将其转换为 Haskell。我正在使用 cryptonite 库及其模块 RSA。我的问题是关于必须传递给它的参数才能使它做与 Elixir 代码完全相同的事情。

import qualified Crypto.PubKey.RSA.PKCS15 as RSA
-- [.........]

res <- RSA.decrypt None privateKey myBinData

我应该将什么作为 :rsa_padding:rsa_pkcs1_oaep_padding 参数传递给函数?

根据openssl manpagersa_pkcs1_oaep_padding

EME-OAEP as defined in PKCS #1 v2.0 with SHA-1, MGF1 and an empty encoding parameter

您应该使用 Crypto.PubKey.RSA.OAEP 模块中的 decrypt,并使用 defaultOAEPParamsSHA1 作为散列:

import qualified Crypto.PubKey.RSA.OAEP as RSA
import Crypto.Hash.Algorithms ( SHA1 )

...

res <- RSA.decrypt None (RSA.defaultOAEPParams SHA1) privateKey myBinData