使用内存EnvelopedData
时,我在访问签名CMS_ContentInfo*
对象中的BIO
时遇到问题。
使用以下代码,一切正常:
BIO* output = BIO_new_file("/absolute/path/test.txt", "r+");
if (CMS_verify(cms, stack, store, dcont, output, CMS_NOINTERN)) {
BIO_flush(output);
BIO_reset(output);
CMS_ContentInfo* cms2 = SMIME_read_CMS(output, nullptr);
}
cms2正确实例化,我能够解密其内容。虽然,我不希望将文件写入磁盘,所以我试图在内存中使这个工作如下:
BIO* output = BIO_new(BIO_s_mem());
if (CMS_verify(cms, stack, store, dcont, output, CMS_NOINTERN)) {
BIO_flush(output);
BIO_seek(output, 0);
CMS_ContentInfo* cms2 = SMIME_read_CMS(output, nullptr);
}
出于某种原因,似乎SMIME_read_CMS
函数永远无法从BIO
读取。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
我找到了解决方案。这是我用过的一段代码:
BIO* output = BIO_new(BIO_s_mem());
if (CMS_verify(cms, stack, store, dcont, nullptr, CMS_NOINTERN)) {
CMS_ContentInfo* cms2 = SMIME_read_CMS(dcont, nullptr);
}
显然,持有BIO
的dcont SignedData
我可以使用cms2
变量对其进行正确解密。