Форум КриптоПро
	 » 
	Общие вопросы
	 » 
	Общие вопросы
	 » 
	Формат данных в attached подписи
	 
	
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 20.09.2010(UTC) Сообщений: 12
  
	 
	
     | 
    
        
            
		      
                Добрый день. Есть pkcs#7 контейнер с attached подписью.  Вытаскиваю подписанные данные с помощью CryptMsgGetParam с типом CMSG_CONTENT_PARAM. Как мне определить тип файла который был подписан? Допустим был *.txt или *.xml файл. Его подписали. Получили attached подпись. Как определить, что был именно *.txt или *.xml, а не какой-либо другой. Возможно это где-то написано, а я просто упустил из виду. Или может это вообще не реально(т.е подобные данные не сохраняются)?
  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 20.09.2010(UTC) Сообщений: 12
  
	 
	
     | 
    
        
            
		      
                И еще вопрос вдогонку..
  Я правильно понимаю, что attached подпись от detached подписи только и отличается наличием опционального поля content в ContentInfo? ( в detached оно отсутствует или пустое?)
  Если только этим и отличается, то есть возможность как-то удалить(очистить) именно это поле чтобы получить detached подпись? 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
  
	 
	
     | 
    
        
            
		      
                Цитата:Или может это вообще не реально(т.е подобные данные не сохраняются)?  Ни имя файла, ни его расширение специально нигде не сохраняются.  Если Вам это нужно - можно вручную добавить атрибут с этими значениями. Цитата:Если только этим и отличается, то есть возможность как-то удалить(очистить) именно это поле чтобы получить detached подпись?  Да, с помощью CryptDecodeObject/CryptEncodeObject.    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 20.09.2010(UTC) Сообщений: 12
  
	 
	
     | 
    
        
            
		      
                Цитата:Да, с помощью CryptDecodeObject/CryptEncodeObject.   Спасибо, буду пробовать. Цитата:Если Вам это нужно - можно вручную добавить атрибут с этими значениями.  А можно поподробней куда и как добавить?   
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
  
	 
	
     | 
    
        
            
		      
                Добавить в подпись, с помощью CryptMsgControl(.., CMSG_CTRL_ADD_SIGNER, ..), поля rgAuthAttr и rgUnauthAttr  структуры CMSG_SIGNER_ENCODE_INFO - в зависимости от того, нужно ли Вам подписывать эту информацию или нет.    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 20.09.2010(UTC) Сообщений: 12
  
	 
	
     | 
    
        
            
		      
                Цитата:Да, с помощью CryptDecodeObject/CryptEncodeObject.   Что-то я разобраться не могу.  Приведу последовательность своих действий, поправьте, пожалуйста, где неправ. DWORD lenght; CryptDecodeObject(                         X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, 			PKCS_CONTENT_INFO, 			SrcData,                                        //BYTE массив со всем pkcs сообщением  			SrcDataSize,                                  //соответственно его размер 			CRYPT_DECODE_NOCOPY_FLAG, 			NULL, 			&lenght); BYTE *data = new BYTE[lenght]; CryptDecodeObject(                         X509_ASN_ENCODING|PKCS_7_ASN_ENCODING, 			PKCS_CONTENT_INFO, 			SrcData,                                        //BYTE массив со всем pkcs сообщением  			SrcDataSize,                                  //соответственно его размер 			CRYPT_DECODE_NOCOPY_FLAG, 			data,                                              			&lenght); CRYPT_CONTENT_INFO *cont; cont= (CRYPT_CONTENT_INFO *)data; Теперь в cont структура типа PKCS_CONTENT_INFO с полем CRYPT_DER_BLOB Content , которое можно расшифровать аналогичным образом и получить собственно подписанные данные? Если так, то далее в cont очищаю поле Content, кодирую CryptEncodeObject. Получу закодированную структуру. Как мне далее ее поместить обратно в pkcs контейнер?  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
  
	 
	
     | 
    
        
            
		      
                Проще декодировать и кодировать с константой PKCS_CONTENT_INFO_SEQUENCE_OF_ANY. Формат этой структуры описан в  RFC 3852.    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 20.09.2010(UTC) Сообщений: 12
  
	 
	
     | 
    
        
            
		      
                Вот такая структура контейнера
  SEQUENCE {    OBJECT IDENTIFIER signedData (1 2 840 113549 1 7 2)    [0] {        SEQUENCE {           INTEGER 1           SET {              SEQUENCE {                 OBJECT IDENTIFIER GOST R 34.11-94 (1 2 643 2 2 9)                 NULL              }           }           SEQUENCE {              OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)              [0] {                 OCTET STRING  ...                                                              <--- Нужно добраться до сюда и удалить это поле                 }            } ..............
  Если я весь массив с контейнером декодирую как структуру CRYPT_CONTENT_INFO_SEQUENCE_OF_ANY,  то в pszObjId окажется OID: 1 2 840 113549 1 7 2. А что будет в rgValue ? Все что вложено а скобки после первой метки [0]? Как мне добраться до нужной структуры? 
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
        
            
            
    
        
	Статус: Сотрудник
  Группы: Участники
 Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733  Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
  
	 
	
     | 
    
        
            
		      
                В массиве rgValue будет  Код:SEQUENCE {
        version CMSVersion,
        digestAlgorithms DigestAlgorithmIdentifiers,
        encapContentInfo EncapsulatedContentInfo,
        certificates [0] IMPLICIT CertificateSet OPTIONAL,
        crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
        signerInfos SignerInfos }
 
 Я все-таки настойчиво рекомендую прочитать RFC3852, п 5.1 .    | 
 | 
            
	 
        
    
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
            
        
            
            
    
        
	Статус: Участник
  Группы: Участники
 Зарегистрирован: 20.09.2010(UTC) Сообщений: 12
  
	 
	
     | 
    
        
            
		      
                Ну на главный вопрос, вы так и не ответили. Как добраться до  Цитата:encapContentInfo EncapsulatedContentInfo  ?  Побитово разбирать rgValue в поисках нужного OIDa, основываясь на правилах кодирования?  Или можно это как-то распарсить используя апишные функции?  
            
	  
         
     | 
    | 
         
             
     | 
    
         
            
         
     | 
    | 
        
	
     | 
        
        
        
    
	                           
	Форум КриптоПро
	 » 
	Общие вопросы
	 » 
	Общие вопросы
	 » 
	Формат данных в attached подписи
	 
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close