<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум Рутокен &mdash; Как реализовать программное поточное хеширование?]]></title>
	<link rel="self" href="https://forum.rutoken.ru/feed/atom/topic/3150/" />
	<updated>2020-04-09T08:49:19Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.rutoken.ru/topic/3150/</id>
		<entry>
			<title type="html"><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/14070/#p14070" />
			<content type="html"><![CDATA[<p><strong>Павел Анфимов</strong>, всё, понял. Огромное спасибо, Павел.</p>]]></content>
			<author>
				<name><![CDATA[Binger]]></name>
				<uri>https://forum.rutoken.ru/user/11270/</uri>
			</author>
			<updated>2020-04-09T08:49:19Z</updated>
			<id>https://forum.rutoken.ru/post/14070/#p14070</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/14069/#p14069" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Павел Анфимов]]></name>
				<uri>https://forum.rutoken.ru/user/7338/</uri>
			</author>
			<updated>2020-04-09T08:46:23Z</updated>
			<id>https://forum.rutoken.ru/post/14069/#p14069</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/14066/#p14066" />
			<content type="html"><![CDATA[<p><strong>Павел Анфимов</strong>, для SHA-1 нет подобных решений? Для ГОСТ алгоритмов только нашёл наборы параметров в Common.h из SDK Rutoken</p>]]></content>
			<author>
				<name><![CDATA[Binger]]></name>
				<uri>https://forum.rutoken.ru/user/11270/</uri>
			</author>
			<updated>2020-04-08T15:52:14Z</updated>
			<id>https://forum.rutoken.ru/post/14066/#p14066</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/14065/#p14065" />
			<content type="html"><![CDATA[<p><strong>Павел Анфимов</strong>, понял вас. Спасибо, буду пробовать.</p>]]></content>
			<author>
				<name><![CDATA[Binger]]></name>
				<uri>https://forum.rutoken.ru/user/11270/</uri>
			</author>
			<updated>2020-04-08T14:36:24Z</updated>
			<id>https://forum.rutoken.ru/post/14065/#p14065</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/14064/#p14064" />
			<content type="html"><![CDATA[<p><strong>Binger</strong>, возможно, главное правильные механизмы передать в C_DigestInit.</p>]]></content>
			<author>
				<name><![CDATA[Павел Анфимов]]></name>
				<uri>https://forum.rutoken.ru/user/7338/</uri>
			</author>
			<updated>2020-04-08T10:41:21Z</updated>
			<id>https://forum.rutoken.ru/post/14064/#p14064</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/14063/#p14063" />
			<content type="html"><![CDATA[<p><strong>Павел Анфимов</strong>, а возможно это реализовать с использованием поточных функций? C_DigestUpdate()...? Мне просто именно поточное хеширование нужно</p>]]></content>
			<author>
				<name><![CDATA[Binger]]></name>
				<uri>https://forum.rutoken.ru/user/11270/</uri>
			</author>
			<updated>2020-04-08T09:52:08Z</updated>
			<id>https://forum.rutoken.ru/post/14063/#p14063</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как реализовать программное поточное хеширование?]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/14061/#p14061" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Павел Анфимов]]></name>
				<uri>https://forum.rutoken.ru/user/7338/</uri>
			</author>
			<updated>2020-04-08T08:21:57Z</updated>
			<id>https://forum.rutoken.ru/post/14061/#p14061</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Как реализовать программное поточное хеширование?]]></title>
			<link rel="alternate" href="https://forum.rutoken.ru/post/14060/#p14060" />
			<content type="html"><![CDATA[<p>Здравствуйте. Знаю такие функции: </p><div class="codebox"><pre><code>C_DigestInit(), C_DigestUpdate(), C_DigestFinal()</code></pre></div><p>на сколько я понял - они реализуют аппаратное хеширование на токене. Как я могу реализовать поточное хеширование не на борту токена, а программно? Аппаратное хеширование уж очень долгое. Буду рад любой помощи, спасибо.</p>]]></content>
			<author>
				<name><![CDATA[Binger]]></name>
				<uri>https://forum.rutoken.ru/user/11270/</uri>
			</author>
			<updated>2020-04-07T18:44:34Z</updated>
			<id>https://forum.rutoken.ru/post/14060/#p14060</id>
		</entry>
</feed>
