| ||||
| ||||
Добрый день? Хочу добавить к CMSG_SIGNER_ENCODE_INFO аутентифицируемый аттрибут в виде строки текста. Какой ОИД мне нужно указать в параметре pszObjId структуры CRYPT_ATTRIBUTE? И нужно ли кодировать эту строку (если нужно, то в какой тип)? Спасибо. | ||||
Ответы: | ||||
| ||||
Есть стандартизованный набор атрибутов. Они определены в PKCS#9. http://www.rsasecurity.com/rsalabs/node.asp?id=2124 Если не подходит существующий, можно определить свой. | ||||
| ||||
Ни один тип аттрибута для использования в PKCS#7 мне не подходит. Ведь мне нужно добавить, по сути дела, комментарии. как мне зарегистрировать свой ОИД? и будут ли этот тип аттрибута понимать другие приложения? | ||||
| ||||
Конечно не будут понимать. Ведь если вы хотите добавить атрибут, то добавляете какие то определенные требования по его интерпретированию. А их нужно огласить. | ||||
| ||||
Пояните пожалуйста как мне это можно сделать. | ||||
| ||||
Описывает атрибут, его назначение, порядок его создания и требования по его интерпретации при обработке. Если он используется только в вашем ПО сами обеспечиваете его создание и обработку. Если хотите чтобы он обрабатывался в другом ПО (если это технически возможно), ту нужно это отразить в трребованиях (нр, порядок использования ЭЦП в документообороте). | ||||
| ||||
Какими функциями CryptoApi это можно сделать? | ||||
| ||||
Может быть вопрос не совсем понятен. Я имел в виду: какими функциями CryptoApi можно зарегистрировать свой ОИД, и какими функциями с ним потом работать? | ||||
| ||||
Аутентифицируемые атрибуты входят в структуру CMSG_SIGNER_ENCODE_INFO typedef struct _CMSG_SIGNER_ENCODE_INFO { DWORD cbSize; PCERT_INFO pCertInfo; HCRYPTPROV hCryptProv; DWORD dwKeySpec; CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; void* pvHashAuxInfo; DWORD cAuthAttr; PCRYPT_ATTRIBUTE rgAuthAttr; DWORD cUnauthAttr; PCRYPT_ATTRIBUTE rgUnauthAttr; CERT_ID SignerId; CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm; void* pvHashEncryptionAuxInfo; } CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO; Соответственно атрибут это структура typedef struct _CRYPT_ATTRIBUTE { LPSTR pszObjId; DWORD cValue; PCRYPT_ATTR_BLOB rgValue; } CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE; идентификатор - LPSTR | ||||
| ||||
Аутентифицируемые атрибуты входят в структуру CMSG_SIGNER_ENCODE_INFO typedef struct _CMSG_SIGNER_ENCODE_INFO { DWORD cbSize; PCERT_INFO pCertInfo; HCRYPTPROV hCryptProv; DWORD dwKeySpec; CRYPT_ALGORITHM_IDENTIFIER HashAlgorithm; void* pvHashAuxInfo; DWORD cAuthAttr; PCRYPT_ATTRIBUTE rgAuthAttr; DWORD cUnauthAttr; PCRYPT_ATTRIBUTE rgUnauthAttr; CERT_ID SignerId; CRYPT_ALGORITHM_IDENTIFIER HashEncryptionAlgorithm; void* pvHashEncryptionAuxInfo; } CMSG_SIGNER_ENCODE_INFO, *PCMSG_SIGNER_ENCODE_INFO; Соответственно атрибут это структура typedef struct _CRYPT_ATTRIBUTE { LPSTR pszObjId; DWORD cValue; PCRYPT_ATTR_BLOB rgValue; } CRYPT_ATTRIBUTE, *PCRYPT_ATTRIBUTE; идентификатор - LPSTR | ||||
| ||||
Всё то, что Вы написали, мне известно, а меня интересовало как программно это можно реализовать. Ладно оставим этот вопрос. :=) | ||||