Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 08.04.2009(UTC) Сообщений: 30 Откуда: Череповец
  Поблагодарили: 1 раз в 1 постах
  
	 
	
     | 
    
        
            
		      
                Поставил КриптоПро TSP SDK (версия 1.01.0614) Пробую в VS 2008 простой пример консольный: Цитата: #include "stdafx.h" #include <_tspcli.h> #include <_wincryptex.h>
  int main() { 	CRequest Request; 	Request.put_DataHashAlg(szOID_CP_GOST_R3411);     return 0; }
 
  В итоге получаю: Цитата: Error	1	error LNK2028: unresolved token (0A000292) "public: __thiscall CryptoPro::PKI::TSP::Client::CRequest::~CRequest(void)" (??1CRequest@Client@TSP@PKI@CryptoPro@@$$FQAE@XZ)  Error	2	error LNK2028: unresolved token (0A000293) "public: __thiscall CryptoPro::PKI::TSP::Client::CRequest::CRequest(void)" (??0CRequest@Client@TSP@PKI@CryptoPro@@$$FQAE@XZ) .......
 
  Пробую в Builder C++ 6.0, переделав tspcli.lib с помощью coff2omf.exe Цитата: #include <_tspcli.h> #include <_wincryptex.h>
  int CreateTSP(){ //    unsigned char Text[5] = "ABCD";     CRequest Request;
      Request.put_DataHashAlg(szOID_CP_GOST_R3411);     //CStamp Stamp();     //request.put_DataHashAlg(szOID_CP_GOST_R3411); //    request.AddData(Text,4); //    request.put_TSAAddress(L"http://cryptopro.ru/tsp/tsp.srf");     return 0; }
 
  В итоге получаю тот результат: Цитата: [Linker Error] Unresolved external 'CryptoPro::PKI::TSP::Client::CRequest::~CRequest()' referenced from C:\TEST3\UNIT1.OBJ [Linker Error] Unresolved external 'CryptoPro::PKI::TSP::Client::CRequest::CRequest()' referenced from C:\TEST3\UNIT1.OBJ [Linker Error] Unresolved external 'CryptoPro::PKI::TSP::Client::CRequest::put_DataHashAlg(const char *)' referenced from C:\TEST3\UNIT1.OBJ
 
  Пути в проектах прописаны к CryptoPro\SDK\include и CryptoPro\SDK\lib Как я понимаю не правильно создаются классы, хотя если убрать Request.put_DataHashAlg(szOID_CP_GOST_R3411), ошибки пропадают. Как с этим бороться? Отредактировано пользователем 21 июня 2010 г. 14:38:08(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 08.04.2009(UTC) Сообщений: 30 Откуда: Череповец
  Поблагодарили: 1 раз в 1 постах
  
	 
	
     | 
    
        
            
		      
                В VS2008 помогло указанием библиотеки в коде: Цитата: #pragma comment(lib, "tspcli.lib")
 
  Остается побороть Builder, в нем такое не прокатило  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Вам и не снилось
  Группы: Администраторы
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
  
	 
	
     | 
    
        
            
		      
                При компоновке конечно же надо подать tspcli.lib. Один из способов для Visual Studio Вы описали. Ещё можно делать  так. По сути это добавит в вызов link.exe аргументом tspcli.lib.    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 08.04.2009(UTC) Сообщений: 30 Откуда: Череповец
  Поблагодарили: 1 раз в 1 постах
  
	 
	
     | 
    
        
            
		      
                Win XP SP3 OCSP, ЭЦП SDK, TSP SDK Вот код: Цитата: 	Req.put_TSAAddress(L"http://cryptopro.ru/tsp/tsp.srf"); 	unsigned char Text[5] = "ABCD"; 	Req.put_DataHashAlg(CALG_GR3411); 	//Req.AddData(Text,4);	 	Req.put_DataHash(Text, 4);         Req.put_CertReq(true);		 	CStamp Stmp(Req.Send()); 	unsigned long size;         Stmp.Export(NULL, &size);         unsigned char *buffer = (unsigned char *)malloc(size);         Stmp.Export(buffer, &size);
 
  Если использовать Req.put_DataHash() при выполнении CStamp Stmp(Req.Send()); валится в ошибку  "External Exeption E06D7363". Если использовать Req.AddData(Text,4) то создает TSP. На другой машине с winXP SP3 в обоих случаях валится в ошибку. Что ему не хватает и в чем разница между этими методами?  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Вам и не снилось
  Группы: Администраторы
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
  
	 
	
     | 
    
        
            
		      
                Метод put_DataHash() задаёт уже подсчитанное хэш-значение. Для алгоритма CALG_GR3411 длина хэш-значения не равна 4 байтам, что обнаруживает служба штампов времени и выдаёт ошибку.
  На другой машине предположительно не удаётся посчитать хэш по алгоритму CALG_GR3411. Установлен ли КриптоПро CSP? Какой код ошибки и из какого метода прилетает исключение?    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 08.04.2009(UTC) Сообщений: 30 Откуда: Череповец
  Поблагодарили: 1 раз в 1 постах
  
	 
	
     | 
    
        
            
		      
                Смирнов написал:На другой машине предположительно не удаётся посчитать хэш по алгоритму CALG_GR3411. Установлен ли КриптоПро CSP? Какой код ошибки и из какого метода прилетает исключение?  Вылетает на методе Request.AddData() "External Exeption E06D7363", причем вне зависимости от того установлен Алгоритм хеширования данных (put_DataHashAlg(CALG_GR3411)) или нет.  CSP строит csp-win32-kc2-rus_3.6.6253.  На всех машинах один и тот-же. Еще в Руководстве программиста сказано : "Алгоритм хеширования необходимо задавать до первого вызова AddData(), иначе это приведет к ошибке". Но на тех машинах на которых TSP создается нормально работают варианты как с указанием так и без указания алгоритма. P.S. проверил на двух других Win XP3, работает без ошибок. Отредактировано пользователем 2 июля 2010 г. 15:53:23(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Вам и не снилось
  Группы: Администраторы
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
  
	 
	
     | 
    
        
            
		      
                "External Exeption E06D7363" к сожалению нам ни о чём не говорит. Вы можете перехватить исключение CAtlException и глянуть в m_hr?    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 08.04.2009(UTC) Сообщений: 30 Откуда: Череповец
  Поблагодарили: 1 раз в 1 постах
  
	 
	
     | 
    
        
            
		      
                Возвращусь к ошибкам. Вышеописанный код то работает то нет, на одном компьютере нормально создается штамп времени, на другом пишет ошибку: "Нельзя проверить подпись сертификата" на третьем другую: "Указаны неправильные флаги"
  Везде winXP sp3, конфигурация ПО крип-то про одинаковая, пробовал с  ECP SDK 1.01.0482 и TSP SDK 1.01.0614 и с ECP SDK 1.02.0646 и TSP SDK 1.01.0707 история одна и та-же.
  Хотелось бы получить побольше информации по данным ошибкам. 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Вам и не снилось
  Группы: Администраторы
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
  Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
  
	 
	
     | 
    
        
            
		      
                Хотелось бы получить побольше информации о местах возникновения ошибок с примерами кода и логами отладочной печати.    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Активный участник
  Группы: Участники
 Зарегистрирован: 08.04.2009(UTC) Сообщений: 30 Откуда: Череповец
  Поблагодарили: 1 раз в 1 постах
  
	 
	
     | 
    
        
            
		      
                Использую Visual Studio 2008, вот код: Цитата:	 CRequest Req; Req.put_TSAAddress(L"http://cryptopro.ru/tsp/tsp.srf"); Req.put_DataHashAlg(szOID_CP_GOST_R3411); Req.AddData((unsigned char *)s,MessageSizeArray);	 Req.put_CertReq(true);		 CStamp Stmp(Req.Send(false)); Stmp.Verify(); Stmp.VerifyCertificate(); unsigned long size; Stmp.Export(NULL, &size); unsigned char *buffer = (unsigned char *)malloc(size); Stmp.Export(buffer, &size);  Как было замечено валится на проверке сертификата Stmp.VerifyCertificate(); Причем, если использую сервер: "http://cryptopro.ru/tsp/tsp.srf" возникают две ошибки: "Указаны неправильные флаги" и  "Невозможно проверить фунцкцию отзыва т.к. сервер отзыва сертификатов недоступен" - последнее я думаю из-за OCSP клиента который в лог сыплет ошибками при вызове TSP. Еще пробую взять штамп-времени с  http://tsp.pki.transt.ru/tspca1/tsp.srf, но тут возникает другая ошибка: "Нельзя проверить подпись сертификата." Судя по описанию Stmp.VerifyCertificate() - Выполняет проверку сертификата с построением цепочки до доверенного корневого УЦ и проверкой статусов всех сертификатов цепочки, кроме корневого. т.е. не хватает сертификата в цепочке... Вообще тут речь идет о каком сертификате? Вроде как кроме сертификата сервера штампа-времени в получении TSP никакие больше не участвуют... Получается он не может найти цепочку достоверности этого сертификата? P.S. Можно так-то не использовать проверку, только получается не факт что будет достоверность TSP. Хотя все сертификаты и цепочки взяты из последнего установочного пакета от ТрансТелекома. Отредактировано пользователем 6 декабря 2010 г. 17:35:59(UTC)
 | Причина: Не указана  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close