<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум Рутокен &mdash; Как реализовать программное поточное хеширование?]]></title>
		<link>https://forum.rutoken.ru/topic/3150/</link>
		<atom:link href="https://forum.rutoken.ru/feed/rss/topic/3150/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Как реализовать программное поточное хеширование?».]]></description>
		<lastBuildDate>Thu, 09 Apr 2020 08:49:19 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link>https://forum.rutoken.ru/post/14070/#p14070</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, всё, понял. Огромное спасибо, Павел.</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Thu, 09 Apr 2020 08:49:19 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/14070/#p14070</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link>https://forum.rutoken.ru/post/14069/#p14069</link>
			<description><![CDATA[<p><strong>Binger</strong>, Рутокены имеют аппаратно реализованные ГОСТ-алгоритмы хеширования. SHA-1-- считается программно.</p><p>параметр для C_DigestInit:<br /></p><div class="codebox"><pre><code>/* Механизм хеширования SHA-1 */
CK_MECHANISM sha1Mech = {CKM_SHA_1, NULL_PTR, 0};</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Павел Анфимов)]]></author>
			<pubDate>Thu, 09 Apr 2020 08:46:23 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/14069/#p14069</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link>https://forum.rutoken.ru/post/14066/#p14066</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, для SHA-1 нет подобных решений? Для ГОСТ алгоритмов только нашёл наборы параметров в Common.h из SDK Rutoken</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Wed, 08 Apr 2020 15:52:14 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/14066/#p14066</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link>https://forum.rutoken.ru/post/14065/#p14065</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, понял вас. Спасибо, буду пробовать.</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Wed, 08 Apr 2020 14:36:24 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/14065/#p14065</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link>https://forum.rutoken.ru/post/14064/#p14064</link>
			<description><![CDATA[<p><strong>Binger</strong>, возможно, главное правильные механизмы передать в C_DigestInit.</p>]]></description>
			<author><![CDATA[null@example.com (Павел Анфимов)]]></author>
			<pubDate>Wed, 08 Apr 2020 10:41:21 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/14064/#p14064</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link>https://forum.rutoken.ru/post/14063/#p14063</link>
			<description><![CDATA[<p><strong>Павел Анфимов</strong>, а возможно это реализовать с использованием поточных функций? C_DigestUpdate()...? Мне просто именно поточное хеширование нужно</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Wed, 08 Apr 2020 09:52:08 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/14063/#p14063</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link>https://forum.rutoken.ru/post/14061/#p14061</link>
			<description><![CDATA[<p><strong>Binger</strong>, здравствуйте!</p><p>Программное хеширование реализуется c помощью C_DigestInit\C_Digest, если в качестве CK_MECHANISM передать:</p><div class="codebox"><pre><code>CK_MECHANISM gostR3411_2012_256HashMech = { CKM_GOSTR3411_12_256, parametersGostR3411_2012_256, sizeof(parametersGostR3411_2012_256)};
 
CK_MECHANISM gostR3411_2012_512HashMech = { CKM_GOSTR3411_12_512, parametersGostR3411_2012_512, sizeof(parametersGostR3411_2012_512)};</code></pre></div><br /><p>Для программного подсчета хеша, нужно вычислять хеш с помощью функций C_DigestInit и C_Diigest, а затем только звать C_Sign:</p><div class="codebox"><pre><code>CK_MECHANISM gostR3411_2012_256HashMech = { CKM_GOSTR3411_12_256, parametersGostR3411_2012_256, sizeof(parametersGostR3411_2012_256)};
 
/* Механизм подписи по алгоритму ГОСТ Р 34.10-2012(256)*/
CK_MECHANISM gostR3410_2001SigVerMech = {CKM_GOSTR3410, nullptr, 0};
 
     /*************************************************************************
     * Инициализировать хэш-функцию                                           *
     *************************************************************************/
     rv = functionList-&gt;C_DigestInit(session, &amp;gostR3411_2012_256HashMech);
     CHECK_AND_LOG(&quot;  C_DigestInit&quot;, rv == CKR_OK, rvToStr(rv), free_objects1);
 
     /*************************************************************************
     * Определить размер хэш-кода                                             *
     *************************************************************************/
     rv = functionList-&gt;C_Digest(session, data, sizeof(data), NULL_PTR, &amp;hashSize1);
     CHECK_AND_LOG(&quot;  C_Digest(get size)&quot;, rv == CKR_OK, rvToStr(rv), free_objects1);
 
     /*************************************************************************
     * Вычислить хэш-код данных                                               *
     *************************************************************************/
 
     hash1 = (CK_BYTE*)malloc(hashSize1 * sizeof(CK_BYTE));
     CHECK(&quot;  Memory allocation for hash&quot;, hash1 != NULL, free_objects1);
 
     rv = functionList-&gt;C_Digest(session, data, sizeof(data), hash1, &amp;hashSize1);
     CHECK_AND_LOG(&quot;  C_Digest (get hash)&quot;, rv == CKR_OK, rvToStr(rv), free_hash1);
 
     /*************************************************************************
     * Сформировать цифровую подпись данных                                   *
     * по алгоритму ГОСТ Р 34.10-2012(256)                                    *
     *************************************************************************/
    /*************************************************************************
     * Инициализировать операцию подписи данных                               *
     *************************************************************************/
     rv = functionList-&gt;C_SignInit(session, &amp;gostR3410_2012_256SigVerMech, objects1[0]);
     CHECK_AND_LOG(&quot;  C_SignInit&quot;, rv == CKR_OK, rvToStr(rv), free_hash1);
 
     /*************************************************************************
     * Определить размер данных подписи                                       *
     *************************************************************************/
    rv = functionList-&gt;C_Sign(session, hash1, 32, NULL_PTR, &amp;signatureSize);
     CHECK_AND_LOG(&quot;  C_Sign (get size)&quot;, rv == CKR_OK, rvToStr(rv), free_hash1);
 
     /*************************************************************************
     * Подписать данные                                                      *
     ************************************************************************/
     signature = (CK_BYTE*)malloc(signatureSize * sizeof(CK_BYTE));
     CHECK(&quot;  Memory allocation for signature&quot;, signature != NULL, free_hash1);
 
     rv = functionList-&gt;C_Sign(session, hash1, hashSize1, signature, &amp; signatureSize);
     CHECK_AND_LOG(&quot;  C_Sign (signing)&quot;, rv == CKR_OK, rvToStr(rv), free_signature);</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Павел Анфимов)]]></author>
			<pubDate>Wed, 08 Apr 2020 08:21:57 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/14061/#p14061</guid>
		</item>
		<item>
			<title><![CDATA[Как реализовать программное поточное хеширование?]]></title>
			<link>https://forum.rutoken.ru/post/14060/#p14060</link>
			<description><![CDATA[<p>Здравствуйте. Знаю такие функции: </p><div class="codebox"><pre><code>C_DigestInit(), C_DigestUpdate(), C_DigestFinal()</code></pre></div><p>на сколько я понял - они реализуют аппаратное хеширование на токене. Как я могу реализовать поточное хеширование не на борту токена, а программно? Аппаратное хеширование уж очень долгое. Буду рад любой помощи, спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (Binger)]]></author>
			<pubDate>Tue, 07 Apr 2020 18:44:34 +0000</pubDate>
			<guid>https://forum.rutoken.ru/post/14060/#p14060</guid>
		</item>
	</channel>
</rss>
