Как добавить данные, которые должны быть зашифрованы в потоковом режиме с использованием OpenSSL? - PullRequest
0 голосов
/ 26 февраля 2020

Мне нужно получить CMS Enveloped Data, зашифровывая входные данные от клиента в несколько этапов. Я могу использовать такие функции в PKCS11: C_EncryptInit(...), C_EncryptUpdate(...), C_EncryptFinal(...). C_EncryptUpdate(...) Позволяет добавлять данные, которые будут зашифрованы (шифрование данных в нескольких частях). В OpenSSL я нашел CMS_encrypt(...) с flag = CMS_STREAM, но я не могу понять, как я могу добавить данные, как я описал выше или другим способом?

1 Ответ

0 голосов
/ 04 марта 2020

Я отвечу сам.

Фрагмент моего кода на 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

Надеюсь, он кому-нибудь пригодится. Если у вас есть какие-либо вопросы - просто спросите меня.

...