Как подписать фаил с помощью алогритмов ГОСТ используя OpenSSL?
Искал в интернете примеры того, как можно с помощью OpenSSL подписать файл используя алгоритмы ГОСТ 2012. Нашел очень древний код который работает только под Windows. На данный момент использую версию OpenSSL 1.1.1k.
Сам я пришел к такому: (Не проверял на работоспособность, пока только накидал)
int signMessage() {
BIO *in = nullptr, *out = nullptr, *tbio = nullptr;
X509 *scert = nullptr;
EVP_PKEY *skey = nullptr;
CMS_ContentInfo *cms = nullptr;
int ret = 1;
int flags = CMS_DETACHED | CMS_STREAM;
OpenSSL_add_all_algorithms();
ERR_load_CRYPTO_strings();
/* Read in signer certificate and private key */
tbio = BIO_new_file("signer.pem", "r");
scert = PEM_read_bio_X509(tbio, nullptr, 0, nullptr);
BIO_reset(tbio);
skey = PEM_read_bio_PrivateKey(tbio, nullptr, 0, nullptr);
/* Open content being signed */
in = BIO_new_file("sign.txt", "r");
/* Sign content */
cms = CMS_sign(scert, skey, nullptr, in, flags);
out = BIO_new_file("smout.txt", "w");
if (!(flags & CMS_STREAM))
BIO_reset(in);
if (!SMIME_write_CMS(out, cms, in, flags)) {
// Error
}
ret = 0;
return ret;
}
В какую сторону вообще копать нужно? Есть хорошие примеры реализации с ГОСТ 2012, pkcs7?