<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Рутокен &mdash; Работа с библиотекой pkicore]]></title>
	<link rel="self" href="https://forum.rutoken.ru/feed/atom/topic/3067/" />
	<updated>2019-11-06T07:00:11Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.rutoken.ru/topic/3067/</id>
		<entry>
			<title type="html"><![CDATA[Re: Работа с библиотекой pkicore]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/13490/#p13490" />
			<content type="html"><![CDATA[<p><strong>Павел Анфимов</strong>, Спасибо Павел.</p>]]></content>
			<author>
				<name><![CDATA[Binger]]></name>
				<uri>https://forum.rutoken.ru/user/11270/</uri>
			</author>
			<updated>2019-11-06T07:00:11Z</updated>
			<id>https://forum.rutoken.ru/post/13490/#p13490</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Работа с библиотекой pkicore]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/13488/#p13488" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Павел Анфимов]]></name>
				<uri>https://forum.rutoken.ru/user/7338/</uri>
			</author>
			<updated>2019-11-05T15:33:52Z</updated>
			<id>https://forum.rutoken.ru/post/13488/#p13488</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Работа с библиотекой pkicore]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/13487/#p13487" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Binger]]></name>
				<uri>https://forum.rutoken.ru/user/11270/</uri>
			</author>
			<updated>2019-11-05T14:17:51Z</updated>
			<id>https://forum.rutoken.ru/post/13487/#p13487</id>
		</entry>
</feed>
