<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум компьютерной помощи &mdash; Lotus и КриптоПро]]></title>
	<link rel="self" href="http://itpmr.ru/extern.php?action=feed&amp;tid=911&amp;type=atom" />
	<updated>2015-11-17T06:47:55Z</updated>
	<generator>PunBB</generator>
	<id>http://itpmr.ru/viewtopic.php?id=911</id>
		<entry>
			<title type="html"><![CDATA[Re: Lotus и КриптоПро]]></title>
			<link rel="alternate" href="http://itpmr.ru/viewtopic.php?pid=124479#p124479" />
			<content type="html"><![CDATA[<p>Попытки проверить ЭЦП поля &quot;signpole&quot;.</p><p>Пример 1:CAdESCOM - проверяем подпись поля в лотус документе.</p><div class="codebox"><pre><code>Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Set uidoc = workspace.CurrentDocument
    Set doc = uidoc.Document
    
    Dim  SignedMsg As String,  Cont As String
    Dim oSignedData
    Set oSignedData = CreateObject(&quot;CAdESCOM.CadesSignedData&quot;)
    
    Cont = doc.GetItemValue(&quot;tosign&quot;)(0) 
    SignedMsg = doc.GetItemValue(&quot;signpole&quot;)(0) &#039;Текст подписанный
    oSignedData.Content =  Cont$ &#039; ЭЦП
    
    zzz= oSignedData.VerifyCades(SignedMsg, 0, 1)   &#039;  не работает!
    
    numberSignature=oSignedData.Signers.Count
    &#039;yyy = oSignedData.Display
    
&#039;oSignedData.VerifyCades
    xxx = oSignedData.VerifyCades (SignedMsg)
    
End Sub</code></pre></div><p>Пример 2: проверка XML фала подписанного криптопро&nbsp; с винта с помошью CAdESCOM </p><div class="codebox"><pre><code>Sub Click(Source As Button)
    &#039; берем с xml файла с ЭЦП - localFile$ содержимое konteyner и signaturesxml.
    &#039; пытаемся с помошью VerifyCades проверить валидность signaturesxml по отношению к konteyner.
    Dim workspace As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Set uidoc = workspace.CurrentDocument
    Set doc = uidoc.Document
    
    Dim  SignedMsg
    Dim oSignedData
    
    
    Set oSignedData = CreateObject(&quot;CAdESCOM.CadesSignedData&quot;)
    
    localFile$ = &quot;c:\XML\123.xml&quot;
    outputFile$ = &quot;c:\XML\0000.xml&quot;
    Dim inputStream As NotesStream, outputStream As NotesStream
    
    Set inputStream = session.CreateStream
    Set outputStream =session.CreateStream    
    
    Call inputStream.Open(localFile$,&quot;UTF-8&quot;)
    
    inputStream.Position = 0
    Cont$=    inputStream.ReadText()
    Call inputStream.Close ()
    Cont$ = Strleftback( Cont$, &quot;&lt;/konteyner&gt;&quot; )
    Cont$ = Strrightback ( Cont$, &quot;&lt;konteyner&gt;&quot; )
    
&#039;    Call outputStream.Open (outputFile$)
&#039;    outputStream.Truncate
&#039;    Dim domParser As NotesDOMParser
&#039;    Set domParser=session.CreateDOMParser(inputStream, outputStream)
&#039;    Call domParser.Serialize( )
&#039;    domParser.Process
&#039;    Dim docNode As NotesDOMDocumentNode
&#039;    Set docNode = domParser.Document
&#039;    Dim documentList As NotesDOMNodeList
&#039;    Set documentList = docNode.GetElementsByTagName    (&quot;konteyner&quot;)
&#039;    Dim eNode As NotesDOMElementNode
&#039;    Set    eNode  =    documentList.GetItem(1) &#039;name
&#039;    Cont$  = eNode.lastchild.NodeValue
    
    
    &#039;oSignedData.Content =  Cont$ &#039; ЭЦП
    &#039;Call inStream.Close
    &#039;yyy = oSignedData.Display
    
    Dim xml As XMLProcessor
    Set xml = New XMLProcessor(&quot;&quot;)
    Call xml.parseFile(localFile$)
    sigXML$ =  xml.selectValue(Nothing, &quot;signaturesxml[id=sigXML]&quot;, &quot;-&quot;)
    
    
    Call doc.ReplaceItemValue(&quot;tosign&quot;,Cont$)
    Call doc.ReplaceItemValue(&quot;signpole&quot;,sigXML$)
    
    &#039;Cont$ =  xml.selectValue(Nothing, &quot;konteyner&quot;, &quot;-&quot;)
    oSignedData.Content =  Cont$ &#039; ЭЦП
    zzz= oSignedData.VerifyCades(sigXML$, 0, 1)
    numberSignature=oSignedData.Signers.Count
    
    xxx = oSignedData.Verify (sigXML$)
    
&#039;oSignedData.VerifyCades
End Sub</code></pre></div><p>Пример 3. Проверка подписанного с криптопро XML файла на винчестере при помощи Msxml2.<br /></p><div class="codebox"><pre><code>Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Set uidoc = workspace.CurrentDocument
    Set doc = uidoc.Document
    
    Dim oXml    
    Set oXml = CreateObject(&quot;Msxml2.DOMDocument&quot;)
    oXml.async = False
    oXml.validateOnParse = True
    localFile$ = &quot;c:\XML\123.xml&quot;
    localFile2$ = &quot;c:\XML\333.xml&quot;
    oXml.Load(localFile$)
    
    If oXml.parseError.ErrorCode = 0 Then 
        Print( &quot;SUCCESS loading XML File&quot;)  
    Else  
        Print(&quot;Ошибка: &quot; &amp; oXml.parseError.reason &amp; &quot; в строке: &quot; &amp; oXml.parseError.line &amp; &quot; позиция: &quot; &amp; oXml.parseError.linepos)
    End If
    
    Set objXMLDOMNodeList = oXml.getElementsByTagName (&quot;konteyner&quot;)
    Set     Item =    objXMLDOMNodeList.item(0)
    cont$ =  Item.xml
    repl$ = |&lt;konteyner xmlns=&quot;http://_.w3.org/1999/xhtml&quot;&gt;|
    cont$ = Replace (cont$,repl$,&quot;&quot;)
    repl$ = |&lt;/konteyner&gt;|
    cont$ = Replace (cont$,repl$,&quot;&quot;)
    
    Set objXMLDOMNodeList = oXml.getElementsByTagName (&quot;signaturesxml&quot;)
    Set     Item =    objXMLDOMNodeList.item(0)
    sig$ =  Item.xml
    repl$ = |&lt;signaturesxml xmlns=&quot;http://_.w3.org/1999/xhtml&quot; id=&quot;sigXML&quot;&gt;|
    sig$ = Replace (sig$,repl$,&quot;&quot;)
    repl$ = |&lt;/signaturesxml&gt;|
    sig$ = Replace (sig$,repl$,&quot;&quot;)
    Call doc.ReplaceItemValue(&quot;tosign&quot;,cont$)
    Call doc.ReplaceItemValue(&quot;signpole&quot;,sig$)
    
    Dim oSignedData
    Set oSignedData = CreateObject(&quot;CAdESCOM.CadesSignedData&quot;)
    oSignedData.Content =  cont$ &#039; ЭЦП
    zzz= oSignedData.VerifyCades(sig$, 0, 1)
    
    numberSignature=oSignedData.Signers.Count
    
    &#039;Dim Strm As NotesStream
    &#039;Set Strm = session.CreateStream
    &#039;Call Strm.Open(localFile2$)
    &#039;Strm.WriteText (cont$)
    &#039;Call Strm.Close
End Sub</code></pre></div>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>http://itpmr.ru/profile.php?id=2</uri>
			</author>
			<updated>2015-11-17T06:47:55Z</updated>
			<id>http://itpmr.ru/viewtopic.php?pid=124479#p124479</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Lotus и КриптоПро]]></title>
			<link rel="alternate" href="http://itpmr.ru/viewtopic.php?pid=124311#p124311" />
			<content type="html"><![CDATA[<p>Пример 2.<br />Работа с компонентом КриптоПро CADESCOM.<br />Окошка выбора сертификата юзером - нет.</p><p>Что подписываем:&nbsp; на форме текстовое поле tosign.<br />Подпись: поле signpole</p><div class="codebox"><pre><code>Sub Click(Source As Button) &#039; CAdESCOM
    
    Dim workspace As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Set uidoc = workspace.CurrentDocument
    Set doc = uidoc.Document
    
    Dim oAbout As Variant
    Dim oVersion As Variant
    Dim Build As Variant
    Dim Certificates As Variant &#039; все сертификаты
    Dim Certif As Variant &#039; поиск непросроч. сертификатов для выбора одного сертификата
    Dim MySert As Variant &#039; один выбранный сертификат
    Dim MySert1 As Variant &#039; один выбранный сертификат (Certificate object)
    Dim privateKey As Variant
    
    ProviderName$ = &quot;Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider&quot;
    Set oAbout = CreateObject(&quot;CAdESCOM.About&quot;)
    Set oVersion= oAbout.CSPVersion(ProviderName$,75)
    Build = oVersion.BuildVersion
    Print Cstr(Build)
    
    Dim Store As Variant &#039; хранилище сертификатов
    Set Store = CreateObject(&quot;CAdESCOM.Store&quot;)
    Build = Store.Open (2,&quot;MY&quot;)
    Set Certificates = Store.Certificates
    Print Cstr(Certificates.Count) &#039; всего сертификатов
    Set Certif = Certificates.Find(9, Now)
    Print Cstr(Certif.Count) &#039; непросроченные сертификаты
    Set MySert = Certif.Item(1)
    Print &quot;Сертификат  для &quot; + (MySert.SubjectName)
    Set privateKey = MySert.PrivateKey
    Print  (privateKey.ProviderName)
    
    Dim oSigner As Variant
    Dim oSignedData  As Variant
    Dim sSignedData
    
    Set oSigner = CreateObject(&quot;CAdESCOM.CPSigner&quot;)
    Set oSignedData = CreateObject(&quot;CAdESCOM.CadesSignedData&quot;)
    
    oSigner.TSAAddress = &quot;http://testca.cryptopro.ru/tsp/tsp.srf&quot;
    Set oSigner.Certificate = MySert
    oSignedData.Content =  doc.GetItemValue(&quot;tosign&quot;)(0) &#039;ЧТО подписываем
    
    sSignedData = oSignedData.Sign(oSigner, False)
    
    
    Call doc.ReplaceItemValue(&quot;signpole&quot;,Cstr(sSignedData))
    
    Msgbox &quot;конец&quot;
    &#039;Print Cstr(sSignedData)
End Sub</code></pre></div>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>http://itpmr.ru/profile.php?id=2</uri>
			</author>
			<updated>2015-05-13T06:02:58Z</updated>
			<id>http://itpmr.ru/viewtopic.php?pid=124311#p124311</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Lotus и КриптоПро]]></title>
			<link rel="alternate" href="http://itpmr.ru/viewtopic.php?pid=124310#p124310" />
			<content type="html"><![CDATA[<p>Пробуем через COM подписывать в лотусскрипте данные с помощью Криптопро.</p><br /><p>На форме:&nbsp; Что подписываем: - поле &quot;tosign&quot;<br />ЭЦП: -&nbsp; поле &quot;signpole&quot;</p><br /><p>Пример 1.<br />Сначала пробуем получить сертификаты в Lotus через виндовый элемент управления CAPICOM.<br />В этом варианте для юзера есть окошечко выбора сертификата.<br />В конце уже присвоили элементу CAdESCOM сертификат из элемента CAPICOM.<br />В данном примере юзер может выбирать сертификат.</p><br /><div class="codebox"><pre><code>Sub Click(Source As Button)  &#039;   через CAPICOM
    
    
    Dim Signer As Variant &#039; кто подписывает
    Dim Store As Variant &#039; хранилище сертификатов
    Dim Certificates As Variant &#039; все сертификаты
    Dim Certif As Variant &#039; поиск непросроч. сертификатов для выбора одного сертификата
    Dim Build As Variant
    Dim MySert As Variant &#039; один выбранный сертификат
    Dim MySert1 As Variant &#039; один выбранный сертификат (Certificate object)
    Dim privateKey As Variant
    
    
    ProviderName$ = &quot;Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider&quot;
    &#039;Set Signer = CreateObject(&quot;CAPICOM.Signer&quot;) 
    Set Store = CreateObject(&quot;CAPICOM.Store&quot;)
    Build = Store.Open (2,&quot;MY&quot;)
    Set Certificates = Store.Certificates
        &#039;xxx = Certificates.Count
        &#039;xxx = Certificates.Select(&quot;123&quot;, &quot;ВЫБЕРИ СЕРТИФИКАТ!&quot;)    все сертификаты
    
    Set Certif = Certificates.Find(9, Now)
    Set MySert = Certif.Select(&quot;123&quot;, &quot;ВЫБЕРИ СЕРТИФИКАТ!&quot;) &#039; непросроченные
    Set MySert1 = MySert.Item(1)
    Print &quot;Сертификат  для &quot; + (MySert1.SubjectName)
    Set privateKey = MySert1.PrivateKey
    Print  (privateKey.ProviderName)
    &#039;Set xxx = Signer.Load (MySert1)
    &#039; -----------------------------------------------------------------------------------------------
    Dim oSigner As Variant
    Set oSigner = CreateObject(&quot;CAdESCOM.CPSigner&quot;)
    oSigner.TSAAddress = &quot;http://testca.cryptopro.ru/tsp/tsp.srf&quot;
    
    Set oSigner.Certificate = MySert1  &#039;  Присвоили CAdESCOM сертификат из CAPICOM


    Dim oSignedData  As Variant
    Set oSignedData = CreateObject(&quot;CAdESCOM.CadesSignedData&quot;)
    oSignedData.Content =  doc.GetItemValue(&quot;tosign&quot;)(0) &#039;ЧТО подписываем
    &#039;sSignedData = oSignedData.Sign(oSigner, False)    
    sSignedData = oSignedData.SignCades(oSigner, 1, False)
        
    Call doc.ReplaceItemValue(&quot;signpole&quot;,Cstr(sSignedData))
    

    Msgbox &quot;конец&quot;
End Sub</code></pre></div>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>http://itpmr.ru/profile.php?id=2</uri>
			</author>
			<updated>2015-05-13T06:00:53Z</updated>
			<id>http://itpmr.ru/viewtopic.php?pid=124310#p124310</id>
		</entry>
</feed>
