如何使用 OpenSSL 添加应以流模式加密的数据?

How add data that shoud be encrypted in stream mode using OpenSSL?

我需要获取 CMS 封装数据,通过几个步骤对来自客户端的输入数据进行加密。我可以在 PKCS11 中使用这样的函数: C_EncryptInit(...)C_EncryptUpdate(...)C_EncryptFinal(...)C_EncryptUpdate(...) 它允许我添加将被加密的数据(分几个部分加密数据)。在 OpenSSL 中,我发现 CMS_encrypt(...)flag = CMS_STREAM 但我不明白如何按上述或其他方式添加数据?

我会自己回答。

我的 C++ 代码片段:

    BIO* output = BIO_new(BIO_s_mem());//init
    CMS_ContentInfo* cms = CMS_encrypt(certs, NULL, cipher, CMS_STREAM | CMS_BINARY);//init
    BIO* input = BIO_new_CMS(output, cms);//init

    BIO_write(input, pbData, cbData);//For multiple calls - adding data for cms structure

    std::vector<uint8_t> cmsBuf = ReadMemBio(m_output);//For multiple calls - get encrypted data in order to send it to client, which save it to a file.

    BIO_flush(input);//finalizing

我希望它对某人有用。如果您有任何问题 - 请问我。