如何复制openssl命令解密cms文件

How to replicate openssl command decrypting cms file

我曾尝试在 Go 中解密 CMS 文件,但未能成功。我用来通过 openssl 解密它的命令是 openssl cms -decrypt -inform DER -recip X -inkey Y。这很好用,文件被正确解密。目前我在 Go 中使用 os/exec 来使用相同的命令解密它,但我希望有一些库可以执行相同的功能。但是我已经能够弄清楚这是如何完成的。

我试过使用 pkcs7 解密,但没有成功,虽然我怀疑这个包是正确的。我目前的尝试:

pkey, _ := ioutil.ReadFile(privKeyLoc)

//decrypt attempt 1
pk_obj, _ := pkcs7.Parse(data)
_, err := pk_obj.DecryptUsingPSK(pkey)
//err = "pkcs7: content data is a decryptable data type"

//attempt 2
rs, _ := ssh.ParseRawPrivateKey(pkey)
crt, _ := tls.LoadX509KeyPair(pubKeyLoc, privKeyLoc)
x509cert, _ := x509.ParseCertificate(crt.Certificate[0])
_, err = pk_obj.Decrypt(x509cert, rs.(crypto.PrivateKey))
//err = "crypto/rsa: decryption error"

问题原来是 mozilla pkcs7 library has very limited support when it comes to key decryption and used 'rsa.DecryptPKCS1v15' no matter what the pkcs7 object key algorithm identifier was. My key was encrypted using id-RSAES-OAEP, for which 'rsa.DecryptOAEP' must be used. My solution was forking the library and updating the Decrypt 检查使用哪种算法并在适用时使用 DecryptOAEP 的函数。