CMS определенно поддерживает последовательность операций, которую вы ищете. С другой стороны, сам формат CMS и API OpenSSL для него довольно сложны.
Одна незначительная проблема - CMS в основном работает с сертификатами X.509, а не с открытыми ключами. Вы можете справиться с этим в своей системе, либо фактически внедрив PKI, либо просто используя самозаверяющие сертификаты (которые в основном эквивалентны передаче обнаженных ключей RSA, но имеют преимущество в виде общего формата для привязки ключа и метаданных что иногда бывает очень полезно иметь).
OpenSSL практически не имеет документации по CMS API; Лучшая ссылка на это - cms.c в каталоге apps / исходного кода OpenSSL; код структурирован как одна основная функция из 1000 строк, что немного беспокоит, но он выполняет шифрование с открытым ключом, так что вы, вероятно, можете использовать его в качестве руководства.