Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Формат данных в 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