<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум Рутокен &mdash; Работа с библиотекой pkicore]]></title>
		<link>https://forum.rutoken.ru/topic/3067/</link>
		<atom:link href="https://forum.rutoken.ru/feed/rss/topic/3067/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Работа с библиотекой pkicore».]]></description>
		<lastBuildDate>Wed, 06 Nov 2019 07:00:11 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Работа с библиотекой pkicore]]></title>
			<link>https://forum.rutoken.ru/post/13490/#p13490</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, Спасибо Павел.</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Wed, 06 Nov 2019 07:00:11 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13490/#p13490</guid>
		</item>
		<item>
			<title><![CDATA[Re: Работа с библиотекой pkicore]]></title>
			<link>https://forum.rutoken.ru/post/13488/#p13488</link>
			<description><![CDATA[<p>Здравствуйте, Binger!</p><p>Чтобы получить сертификаты с токена:<br /></p><div class="codebox"><pre><code>...
cms::EnvelopParams params(device);

auto certs = device.enumerateCerts();

for (size_t i = 0; i != certs.size(); ++i) {
    auto&amp; cert = certs[i];
    ExternalCert cert(cert.toPem());
    params.addRecipient(cert);
}
} catch (const exception&amp; e) {
    cerr &lt;&lt; e.what() &lt;&lt; endl;
    return 1;
}

/**********************************************************************
 *                            Задаем параметры и шифруем сообщение.                               *
**********************************************************************/
...</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Павел Анфимов)]]></author>
			<pubDate>Tue, 05 Nov 2019 15:33:52 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13488/#p13488</guid>
		</item>
		<item>
			<title><![CDATA[Работа с библиотекой pkicore]]></title>
			<link>https://forum.rutoken.ru/post/13487/#p13487</link>
			<description><![CDATA[<p>Здравствуйте. В SDK есть пример по созданию упакованного CMS сообщения. Там сертификаты получателей читаются из файлов в папке. Подскажите, пожалуйста, как реализовать возможность чтения сертификатов с токена. Сам никак не могу сообразить. Буду рад любой помощи. Спасибо.</p><div class="codebox"><pre><code>#include &lt;common.h&gt;

using namespace std;
using namespace rutoken::pkicore;

int main()
{
    try {
        cout &lt;&lt; boolalpha;

        /**********************************************************************
        * Инициализируем pkicore, передав путь до директории с библиотекой    *
        * rtPKCS11ECP.                                                        *
        **********************************************************************/
        rutoken::pkicore::initialize(&quot;.&quot;);
        SCOPE_EXIT() {
            /**********************************************************************
            * Завершаем работу с pkicore при выходе из текущего блока.            *
            **********************************************************************/
            rutoken::pkicore::deinitialize();
        };

        /**********************************************************************
        * Получаем список подключенных устройств и продолжаем работу с первым *
        * доступным устройством.                                              *
        **********************************************************************/
        auto devices = Pkcs11Device::enumerate();
        if (devices.empty()) {
            throw runtime_error(&quot;There must be at least one device connected&quot;);
        }

        auto device = move(devices.front());

        /**********************************************************************
        * Аутентифицируемся на устройстве.                                    *
        **********************************************************************/
        device.login(&quot;12345678&quot;);
        SCOPE_EXIT(&amp;device) {
            /**********************************************************************
            * Сбрасываем права доступа при выходе из текущего блока.              *
            **********************************************************************/
            device.logout();
        };

        /**********************************************************************
        * Читаем файлы с сертификатами получателей сообщения в DER формате.   *
        **********************************************************************/
        const auto certFileName1 = &quot;cert1.cer&quot;;
        const auto certFileName2 = &quot;cert2.cer&quot;;

        cout &lt;&lt; &quot;Reading certificate from &quot; &lt;&lt; certFileName1 &lt;&lt; endl;

        auto certData = readFile(certFileName1);
        ExternalCert cert1(certData.data(), certData.size());

        cout &lt;&lt; &quot;Reading certificate from &quot; &lt;&lt; certFileName2 &lt;&lt; endl;

        certData = readFile(certFileName2);
        ExternalCert cert2(certData.data(), certData.size());

        /**********************************************************************
        * Задаем параметры и шифруем сообщение.                               *
        **********************************************************************/
        string message = &quot;This is a message&quot;;
        cout &lt;&lt; &quot;Message for enveloping: &quot; &lt;&lt; message &lt;&lt; endl;

        cms::Data data(vector&lt;uint8_t&gt;(message.begin(), message.end()));
        cms::EnvelopParams params(device);
        params.addRecipient(cert1).addRecipient(cert2);

        auto envelopedData = cms::envelop(data, params);

        /**********************************************************************
        * Пишем зашифрованное сообщение в файл.                               *
        **********************************************************************/
        const auto outFileName = &quot;enveloped_data&quot;;

        cout &lt;&lt; &quot;Writing enveloped message to &quot; &lt;&lt; outFileName &lt;&lt; endl;

        auto outBuf = envelopedData.toBer();
        writeFile(outFileName, outBuf.data(), outBuf.size());
    } catch (const exception&amp; e) {
        cerr &lt;&lt; e.what() &lt;&lt; endl;
        return 1;
    }

    return 0;
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Tue, 05 Nov 2019 14:17:51 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/13487/#p13487</guid>
		</item>
	</channel>
</rss>
