<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум Guardant &mdash; Guardant API (SDK 7 Update6) для Delphi - проверка цифровой подписи]]></title>
		<link>https://forum.guardant.ru/topic/877/</link>
		<atom:link href="https://forum.guardant.ru/feed/rss/topic/877/" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Guardant API (SDK 7 Update6) для Delphi - проверка цифровой подписи».]]></description>
		<lastBuildDate>Fri, 01 Nov 2019 07:32:58 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Guardant API (SDK 7 Update6) для Delphi - проверка цифровой подписи]]></title>
			<link>https://forum.guardant.ru/post/4230/#p4230</link>
			<description><![CDATA[<p>Спасибо за обращение.</p>]]></description>
			<author><![CDATA[null@example.com (Антон Тихиенко)]]></author>
			<pubDate>Fri, 01 Nov 2019 07:32:58 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4230/#p4230</guid>
		</item>
		<item>
			<title><![CDATA[Re: Guardant API (SDK 7 Update6) для Delphi - проверка цифровой подписи]]></title>
			<link>https://forum.guardant.ru/post/4228/#p4228</link>
			<description><![CDATA[<p>Спасибо, вопрос решен: сделал все по предложенному Вами алгоритму: после составления списка доступных ID всех подключенных USB-донглов, в цикле вызываю&nbsp; GrdSetFindMode с установленным GrdFM_ID для флагов и очередным ID - в результате очередной вызов GrdLogin обеспечивает подключение к очередному донглу, что и требовалось.<br />И как я с опозданием обнаружил, этот алгоритм предлагается в описании API функции GrdLogin в разделе документации на Вашем сайте:<br /><a href="https://dev.guardant.ru/display/DOC/GrdLogin">https://dev.guardant.ru/display/DOC/GrdLogin</a></p>]]></description>
			<author><![CDATA[null@example.com (victordr)]]></author>
			<pubDate>Thu, 31 Oct 2019 15:41:38 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4228/#p4228</guid>
		</item>
		<item>
			<title><![CDATA[Re: Guardant API (SDK 7 Update6) для Delphi - проверка цифровой подписи]]></title>
			<link>https://forum.guardant.ru/post/4227/#p4227</link>
			<description><![CDATA[<p>Благодарю за совет.<br />Правильно ли я Вас понял, что GrdLogin использует dwID ключа, заданный при помощи GrdSetFindMode и никак иначе, т.е. что GrdLogin игнорирует результат выполнения GrdFind?</p>]]></description>
			<author><![CDATA[null@example.com (victordr)]]></author>
			<pubDate>Thu, 31 Oct 2019 13:33:14 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4227/#p4227</guid>
		</item>
		<item>
			<title><![CDATA[Re: Guardant API (SDK 7 Update6) для Delphi - проверка цифровой подписи]]></title>
			<link>https://forum.guardant.ru/post/4226/#p4226</link>
			<description><![CDATA[<div class="quotebox"><cite>victordr пишет:</cite><blockquote><p>Имеются 2 локальных USB-ключа Guardant Code, отличающиеся друг от друга только ключами ECC160</p></blockquote></div><p>Если нет других атрибутов, по которым можно эти ключи различать (например, разные значения в одном или нескольких <a href="https://dev.guardant.ru/x/xoYT">полях общего назначения</a>), то гарантировать что приложение с первого раза залогинится к нужному ключу нельзя.<br /></p><div class="quotebox"><cite>victordr пишет:</cite><blockquote><p>Может быть, между GrdLogout и GrdFind(hGrd, GrdF_Next, @dwID, @GrdFindInfo) необходимо вставить вызов еще какой-то функции API?</p></blockquote></div><p>Можно организовать перебор ключей по ID при помощи <em><a href="https://dev.guardant.ru/x/XYET">GrdSetFindMode</a></em>.<br />Т.е. первый вызов <a href="https://dev.guardant.ru/x/X4ET"><em>GrdFind</em></a> в цикле позволяет сформировать список всех обнаруженных ключей со значениями их ID (<em>pdwID</em>) → дальше выставляется нужный флаг <em>dwFlags</em> и перый ID из списка передается как параметр <em>dwID</em> для <em>GrdSetFindMode</em> → вызов <em>GrdSetFindMode</em> → вызов <em>GrdLogin</em> → ... → проверка подписи.</p><p>Если подпись проверку не прошла, то проделывается все то же самое для второго ID из списка.</p>]]></description>
			<author><![CDATA[null@example.com (Антон Тихиенко)]]></author>
			<pubDate>Thu, 31 Oct 2019 11:07:29 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4226/#p4226</guid>
		</item>
		<item>
			<title><![CDATA[Re: Guardant API (SDK 7 Update6) для Delphi - проверка цифровой подписи]]></title>
			<link>https://forum.guardant.ru/post/4225/#p4225</link>
			<description><![CDATA[<p>Спасибо за быстрый ответ.<br />Да, я пытаюсь проверять, что вставлен нужный USB-донгл, только при помощи одного открытого ключа. Я использую GrdSign для аппаратного подписывания и GrdVerifySignSource (но не GrdVerifySign) для софтверной проверки.<br />Указатель в GrdVerifySignSource я проверил - он показывает на правильный элемент в массиве байт USES_ECC_PUBLIC_KEY. Если же указатель показывает &quot;не туда&quot;, то в случае, когда подключен единственный &quot;правильный&quot; USB-донгл, получается ошибка 67, как и должно быть.<br />Может быть, между GrdLogout и GrdFind(hGrd, GrdF_Next, @dwID, @GrdFindInfo) необходимо вставить вызов еще какой-то функции API?</p>]]></description>
			<author><![CDATA[null@example.com (victordr)]]></author>
			<pubDate>Wed, 30 Oct 2019 16:46:58 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4225/#p4225</guid>
		</item>
		<item>
			<title><![CDATA[Re: Guardant API (SDK 7 Update6) для Delphi - проверка цифровой подписи]]></title>
			<link>https://forum.guardant.ru/post/4224/#p4224</link>
			<description><![CDATA[<p>Здравствуйте.<br /></p><div class="quotebox"><cite>victordr пишет:</cite><blockquote><p>т.е. у них разные и открытый и закрытый ключ ECC160 для алгоритма цифровой подписки</p></blockquote></div><p>Пока все выглядит так, как будто подпись вы пытаетесь проверять всегда при помощи только одного открытого ключа, который подходит лишь для единственного электронного ключа.</p><p>Обратите внимание на что передается указатель в параметре <em>pPublicKey</em> при вызове <em>GrdVerifySign</em>.</p>]]></description>
			<author><![CDATA[null@example.com (Антон Тихиенко)]]></author>
			<pubDate>Wed, 30 Oct 2019 07:46:34 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4224/#p4224</guid>
		</item>
		<item>
			<title><![CDATA[Guardant API (SDK 7 Update6) для Delphi - проверка цифровой подписи]]></title>
			<link>https://forum.guardant.ru/post/4223/#p4223</link>
			<description><![CDATA[<p>Вопрос по Guardant API (SDK 7 Update6) для Delphi </p><p>Имеются 2 локальных USB-ключа Guardant Code, отличающиеся друг от друга только ключами ECC160 (у т.е. у них разные и открытый и закрытый ключ ECC160 для алгоритма цифровой подписки).<br />Я пытаюсь выполнить аппаратное (с помощью USB-ключа и закрытого ключа шифрования) подписывание строки цифровой подписью и последующую программную проверку этой подписи с помощью открытого (Public) ключа:<br />1) инициализируем данную копию GrdAPI<br />2) создаем защищенный контейнер Grd и получаю его хэндл для использования в мультипоточном режиме<br />GrdCreateHandle(nil, GrdCHM_MultiThread, nil);<br />3) запоминаем известные нам коды доступа (публичный и чтения) в защищенном контейнере GuardantHandle<br />4) задаем режим поиска ключа по номеру программы, серийному номеру, номеру версии и битовой маске<br />5) ищем самый первый подходящий ключ GrdFind(hGrd, GrdF_First, @dwID, @GrdFindInfo);<br />6) в цикле<br />6.1) выполняем подключение к ключу GrdLogin(hGrd, $FFFFFFFF, GrdLM_PerStation);<br />6.2) подписываем некую строку с помощью ECC160 аппаратного USB-ключа GrdSign<br />6.3) проверяем цифровую подпись для этой строки (с помощью программного алгоритма на ПК)&nbsp; VerifyECC160Sign(DataForSign, ECCSign)<br />6.4) если подпись не совпадает, то<br />6.4.1) отключаемся от ключа GrdLogout(hGrd, 0);<br />6.4.2) ищем следующий ключ GrdFind(hGrd, GrdF_Next, @dwID, @GrdFindInfo) – при этом получаемое содержимое dwID и структуры GrdFindInfo отличаются от тех, которые были получено на предыдущем вызове GrdFind;<br />6.4.3) повторяем цикл<br />(естественно, после вызова каждой функции API проводится проверка ошибок).<br />Так вот если к ПК подключен всего один ключ – все работает как ожидается.<br />Если ключа два, но только один из них «правильный» (т.е. с нужным ECC160) – то если «правильный» ключ обнаруживается первым (т.е. при GrdF_First) - все нормально, однако если он обнаруживается вторым (т.е. при GrdF_Next) – то для него при проверке подписи всегда будет ошибка 67 = Invalid digital sign.<br />Все выглядит так, что как будто после вызова GrdLogout, последующий вызов GrdLogin подключает не к тому ключу, который был найден GrdFind.</p>]]></description>
			<author><![CDATA[null@example.com (victordr)]]></author>
			<pubDate>Tue, 29 Oct 2019 13:39:52 +0000</pubDate>
			<guid>https://forum.guardant.ru/post/4223/#p4223</guid>
		</item>
	</channel>
</rss>
