<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум Рутокен &mdash; Вопросы по работе с OpenSSL C++]]></title>
		<link>https://forum.rutoken.ru/topic/3090/</link>
		<atom:link href="https://forum.rutoken.ru/feed/rss/topic/3090/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Вопросы по работе с OpenSSL C++».]]></description>
		<lastBuildDate>Wed, 04 Dec 2019 08:53:12 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13677/#p13677</link>
			<description><![CDATA[<p>Binger, других вариантов получить issuer через openssl мне не известно.</p>]]></description>
			<author><![CDATA[null@example.com (Павел Анфимов)]]></author>
			<pubDate>Wed, 04 Dec 2019 08:53:12 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13677/#p13677</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13675/#p13675</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, Подскажите, пожалуйста, есть ли в OpenSSL функция подобная CMS_RecipientInfo_ktri_get0_signer_id, которая давала бы мне поле &quot;Issuer&quot;? Или его я могу получить только с помощью парсинга CMS?</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Tue, 03 Dec 2019 12:59:25 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13675/#p13675</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13674/#p13674</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, огромное спасибо</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Tue, 03 Dec 2019 09:47:05 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13674/#p13674</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13673/#p13673</link>
			<description><![CDATA[<p>Binger, вам нужна CMS_get0_RecipientInfos <a href="https://www.openssl.org/docs/man1.0.2/man3/CMS_RecipientInfo_ktri_cert_cmp.html">https://www.openssl.org/docs/man1.0.2/m … t_cmp.html</a></p><p>Пример вызова: <a href="https://github.com/WestCoastRomS/android_device_SM-T350-vendor/blob/72d9680d6aa7eda7f99af25812a3307e5e7a5d0b/vendor/samsung/common/external/strongswan/src/libstrongswan/plugins/openssl/openssl_pkcs7.c#L591">https://github.com/WestCoastRomS/androi … cs7.c#L591</a></p>]]></description>
			<author><![CDATA[null@example.com (Павел Анфимов)]]></author>
			<pubDate>Tue, 03 Dec 2019 09:15:39 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13673/#p13673</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13672/#p13672</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, я хотел получить сертификаты получателей шифрованного сообщения, а не пользовательский. Какую тогда функцию можно использовать?</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Tue, 03 Dec 2019 09:11:28 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13672/#p13672</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13671/#p13671</link>
			<description><![CDATA[<p>CMS не обязательно должна содержать информацию о сертификате подписанта. Вы уверены, что сертификат пользователя есть в&nbsp; CMS?</p>]]></description>
			<author><![CDATA[null@example.com (Павел Анфимов)]]></author>
			<pubDate>Tue, 03 Dec 2019 09:08:30 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13671/#p13671</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13670/#p13670</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, добрый день. Подскажите, пожалуйста, что я не так делаю? Хотел получить сертификаты из cms для дальнейшей работы с ними и получения информации о серийном номере. Однако функция CMS_get1_certs() возвращает NULL. <br /></p><div class="codebox"><pre><code>#include &quot;stdafx.h&quot;

#define HARDWARE_KEYS

#include &lt;assert.h&gt;
#include &lt;CommonOpenSSL.h&gt;
#include &lt;openssl/cms.h&gt;


int main(void)
{
    EVP_PKEY* key;                                        // Описатель ключевой пары
    ENGINE* rtEngine;                                     // rtengine
    BIO* inBio;                                           // Описатель потока ввода
    BIO* outBio;                                          // Описатель потока вывода
    STACK_OF(X509) * certs = NULL;
    CMS_ContentInfo* cms;                                 // Описатель CMS структуры

    int r;                                                // Код возврата
    int errorCode = 1;                                    // Флаг ошибки

    printf(&quot;Sample has started.\n\n&quot;);
    /*************************************************************************
    * Создание rtengine и регистрация его в OpenSSL                          *
    *************************************************************************/
    r = rt_eng_init();
    CHECK(&quot;  rt_eng_init&quot;, r == 1, exit);

    /*************************************************************************
    * Получение rtengine                                                     *
    *************************************************************************/
    rtEngine = rt_eng_get0_engine();
    assert(rtEngine);

    /*************************************************************************
    * Установка rtengine реализацией по умолчанию                            *
    *************************************************************************/
    r = ENGINE_set_default(rtEngine, ENGINE_METHOD_ALL - ENGINE_METHOD_RAND);
    CHECK(&quot;  ENGINE_set_default&quot;, r == 1, finalize_engine);

    /*************************************************************************
    * Получение ключевой пары                                                *
    *************************************************************************/
    printf(&quot;  get_key_pair...\n&quot;);
    key = get_key_pair();
    CHECK(&quot;  get_key_pair&quot;, key != NULL, unregister_engine);

    /*************************************************************************
    * Открытие поточного ввода из файла                                      *
    *************************************************************************/
    inBio = BIO_new_file(&quot;cms_encrypted.pem&quot;, &quot;rb&quot;);
    CHECK(&quot;  BIO_new_file&quot;, inBio != NULL, free_key);

    /*************************************************************************
    * Чтение CMS структуры из файла                                          *
    *************************************************************************/
    cms = PEM_read_bio_CMS(inBio, NULL, NULL, NULL);
    CHECK(&quot;  PEM_read_bio_CMS&quot;, cms != NULL, free_in_bio);

   certs = CMS_get1_certs(cms);
    
   for (int i = 0; certs &amp;&amp; i &lt; sk_X509_num(certs); i++) 
  {
    X509 *cert = sk_X509_value(certs, i);
    const ASN1_INTEGER *serial = X509_get_serialNumber(cert);
  }
    ...</code></pre></div><p><span class="postimg"><a class="fancybox fancybox.image" rel="group" href="https://forum.rutoken.ru/uploads/images/2019/12/5d78454af5ae52dfc84092bada5c49e8.png"><img class="fb_img" src="https://forum.rutoken.ru/uploads/previews/2019/12/5d78454af5ae52dfc84092bada5c49e8.png" alt="" /></a></span></p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Tue, 03 Dec 2019 08:10:09 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13670/#p13670</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13664/#p13664</link>
			<description><![CDATA[<p>Ориентируйтесь на возвращаемое значение CMS_decrypt <a href="https://www.openssl.org/docs/man1.0.2/man3/CMS_decrypt.html">https://www.openssl.org/docs/man1.0.2/m … crypt.html</a></p><p>Особенности функции decrypt: она всегда будет возвращать какие-то данные, даже когда на входе не соответствующий CMS сертификат. Это гарантирует одинаковое время выполнения функции для защиты от <a href="https://access.redhat.com/security/cve/cve-2012-0884">MMA атак</a>.</p>]]></description>
			<author><![CDATA[null@example.com (Павел Анфимов)]]></author>
			<pubDate>Fri, 29 Nov 2019 15:38:43 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13664/#p13664</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13663/#p13663</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, хотя может быть я не так поступал: я изменил значение CK_BYTE g_keyPairIdGost2012RtEngine[] = { &quot;1234567890&quot; } в Common.h,<br />где 1234567890- CKA_ID ключевой пары на токене.<br />Или каким образом можно выбрать ключевую пару для расшифрования?</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Fri, 29 Nov 2019 15:32:42 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13663/#p13663</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13662/#p13662</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, попробовал расшифровать зашифрованный файл, используя ключ сертификата, которого нет в списке получателей и&nbsp; никаких ошибок не было в работе программы. Так и должно разве быть? Я просто в конечном итоге получил неверные данные расшифрованные:<br /></p><div class="codebox"><pre><code>ЎП\жH€s№вlMсAуПSP”e—8¦µўSЮy
ЯЛё‹–</code></pre></div><p>вместо:<br /></p><div class="codebox"><pre><code>1 2 3 4 5 
ONE TWO THREE FOUR FIVE</code></pre></div><p>Павел, как можно данную ситуацию превратить в ошибку?</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Fri, 29 Nov 2019 15:24:15 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13662/#p13662</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13661/#p13661</link>
			<description><![CDATA[<p>Вместо<br /></p><div class="codebox"><pre><code>r = PEM_write_bio_CMS(outBio.get(), cmsCntInfo);
CHECK(&quot;  PEM_write_bio_CMS&quot;, r &gt; 0, free_cms);</code></pre></div><p>на<br /></p><div class="codebox"><pre><code>r = i2d_CMS_bio(outBio.get(), cmsCntInfo);
CHECK(&quot;  i2d_CMS_bio&quot;, r &gt; 0, free_cms);</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Павел Анфимов)]]></author>
			<pubDate>Fri, 29 Nov 2019 13:56:59 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13661/#p13661</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13660/#p13660</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, есть ли аналогия PEM_write_bio_CMS(outBio.get(), cms) для DER формата?</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Fri, 29 Nov 2019 12:26:53 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13660/#p13660</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13658/#p13658</link>
			<description><![CDATA[<div class="codebox"><pre><code>std::vector&lt;uint8_t&gt; readMemBio(BIO* bio) {
    char* ptr;
    int len = BIO_get_mem_data(bio, &amp;ptr);
    if (len &lt; 0) return {};

    std::vector&lt;uint8_t&gt; result(ptr, ptr + len);

    // normally returns 1 for success and 0 or -1 for failure.
    // File BIOs are an exception, they return 0 for success and -1 for failure.
    int r = BIO_reset(bio);
    if (r &lt;= 0) return {};

    return result;
}
...

bioPtr outBio(nullptr, BIO_free_all);
std::vector&lt;uint8_t&gt; cmsBuf;
...
cmsCntInfo = CMS_encrypt(certs, inBio.get(), cipher, 0);
CHECK(&quot;  CMS_encrypt&quot;, cms != NULL, free_sk_certs);

outBio.reset(BIO_new(BIO_s_mem()));
CHECK(&quot;  BIO_new&quot;, outBio != NULL, free_cms);

r = PEM_write_bio_CMS(outBio.get(), cmsCntInfo);
CHECK(&quot;  PEM_write_bio_CMS&quot;, r &gt; 0, free_cms);

cmsBuf = readMemBio(outBio.get());</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Павел Анфимов)]]></author>
			<pubDate>Fri, 29 Nov 2019 11:52:30 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13658/#p13658</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13656/#p13656</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, подскажите, пожалуйста, как шифрованное сообщение не выводить через поток вывода, а передать байты сообщения в массив unsigned char?<br /></p><div class="codebox"><pre><code>       /*************************************************************************
        * Открытие поточного вывода в файл                                       *
        *************************************************************************/
        outBio = BIO_new_file(&quot;cms_encrypted.pem&quot;, &quot;wb&quot;);
        CHECK(&quot;  BIO_new_file&quot;, outBio != NULL, free_cms);

        /*************************************************************************
        * Запись CMS структуры в файл                                            *
        *************************************************************************/
        r = PEM_write_bio_CMS(outBio, cms);
        CHECK(&quot;  PEM_write_bio_CMS&quot;, r == 1, free_out_bio);</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Fri, 29 Nov 2019 11:49:26 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13656/#p13656</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопросы по работе с OpenSSL C++]]></title>
			<link>https://forum.rutoken.ru/post/13652/#p13652</link>
			<description><![CDATA[<p>Binger, вам нужно передать владение сертификатом контейнеру хранения сертификатов STACK_OF(X509) * certs.</p><p>Для этого у unique_ptr есть метод release():</p><div class="codebox"><pre><code>r = sk_X509_push(certs, cert.release());</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Павел Анфимов)]]></author>
			<pubDate>Fri, 29 Nov 2019 10:40:14 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13652/#p13652</guid>
		</item>
	</channel>
</rss>
