带有 BIO、char * 和二进制数据的 SMIME

SMIME with BIO, char * and binary data

问题

1- 我想创建一个 MIME 消息。像这样:

MIME-Version: 1.0
Content-Type: multipart/mixed;
        boundary="---12345"

This is a multipart message in MIME format.

---12345
Content-Type: text/plain

This is the plain text

---12345
Content-Type: application/pdf

>> PDF binary code here <<

---12345

2- 然后我需要以 BIO * data.

的形式将它传递给 OpenSSL 函数
PKCS7 *PKCS7_sign(..., ..., ..., BIO *data, ...);

第一种方法

从文件系统加载纯文本和附件数据并将其分配给 char * data,操作数据以添加相应的 MIME headers,最后将其分配给 BIO * memoryBIO BIO_puts(memoryBIO, data);.

但是这种方法不起作用,因为二进制数据包含“\0”(NULL),这与 char 类型不兼容。

第二种方法

将纯文本和附件分配给 BIO 每个 然后 "concatenate" 它们。但是找不到办法做到这一点。

结论

我想知道是否有办法实现这样的壮举。 我还想避免使用中间文件并构建所有内容 in-memory.

按照jww的建议,我最终使用的是BIO_write();

BIO * inBIO = NULL;
std::vector<unsigned char> data = GetData();
inBIO = BIO_new(BIO_s_mem());
BIO_write(inBIO, data.data(), data.size());

再次感谢 jww 的回答以及所有其他关于 OpenSSL 的回答,您帮了我大忙。