Как подписать фаил с помощью алогритмов ГОСТ используя 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?


Ответы (0 шт):