[CryptoAPI] Цыфровая подпись. Сертификаты.
От: ZAMUNDA Земля для жалоб и предложений
Дата: 17.11.08 12:37
Оценка:
Не могу никак понять, откуда CryptSignHash берёт скрытый ключ? В неё он не передаётся, значит он в контексте провайдера указывается (выбирается). А где? В частности, у меня есть сертификат из MY (т.е. с ключом скрытым связаный), как мне указать чтоб именно его ключом подпись делалась?

CryptSignMessage вроде как сертификаты ест, и мне её запустить удалось и подпись она сделала, но в описании написано, что она кодирует как-то всё, а как и каким ключом не сказано. Или она его из второго сертификата берёт?

CryptVerifyMessageSignature бросает ошибку 0x80092004 и непонятно что там должна делать: CRYPT_VERIFY_MESSAGE_PARA::pfnGetSignerCertificate?

И ещщё вопрос, закрывать перед тем как закрыть дескриптор Certificate Store я должен все дескрипторы сертификатов из этого хранилища позакрывать? Так?

Спасите помогите. Мануалов я уже перекурил до смеющихся Гейтсов на клавиатуре.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re: [CryptoAPI] Цыфровая подпись. Сертификаты.
От: Conr Россия  
Дата: 17.11.08 12:54
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

ZAM>Не могу никак понять, откуда CryptSignHash берёт скрытый ключ? В неё он не передаётся, значит он в контексте провайдера указывается (выбирается). А где? В частности, у меня есть сертификат из MY (т.е. с ключом скрытым связаный), как мне указать чтоб именно его ключом подпись делалась?

Явно загрузить ключ через CryptImportKey

ZAM>CryptSignMessage вроде как сертификаты ест, и мне её запустить удалось и подпись она сделала, но в описании написано, что она кодирует как-то всё, а как и каким ключом не сказано. Или она его из второго сертификата берёт?

Берется приватный ключ из контекста, а уж что и как туда загружено зависит от программиста.
Re[2]: [CryptoAPI] Цыфровая подпись. Сертификаты.
От: ZAMUNDA Земля для жалоб и предложений
Дата: 18.11.08 23:15
Оценка:
Здравствуйте, Conr, Вы писали:

ZAM>>...как мне указать чтоб именно его ключом подпись делалась?

C>Явно загрузить ключ через CryptImportKey
CryptImportKey не подходит, т.к. у меня BLOB'а нет, у меня есть сертификат тока, а точнее указатель на CERT_CONTEXT. Правда я нашёл уже подходящую функцию CryptAcquireCertificatePrivateKey и пример про подписывание и проверку подписи, правда с CryptImportKey; реализовал его с CryptAcquireCertificatePrivateKey -- завтра попробую.

C>Берется приватный ключ из контекста, а уж что и как туда загружено зависит от программиста.

Так у меня и был вопрос как его в этва провайдера запихнуть, показать пример хоть одного способа я просил... ну CryptAcquireCertificatePrivateKey вроде подходит.

Вот теперь остаётся вопрос как имея CERT_CONTEXT проверить подпись публичным ключом? Т.к. CryptVerifySignature hPubKey в себя хочет, я нашёл в CERT_INFO указатель на CERT_PUBLIC_KEY_INFO только как из него получить HCRYPTKEY никак не найду?
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[3]: [CryptoAPI] Цыфровая подпись. Сертификаты.
От: ZAMUNDA Земля для жалоб и предложений
Дата: 18.11.08 23:48
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

ZAM>Вот теперь остаётся вопрос как имея CERT_CONTEXT проверить подпись публичным ключом? Т.к. CryptVerifySignature hPubKey в себя хочет, я нашёл в CERT_INFO указатель на CERT_PUBLIC_KEY_INFO только как из него получить HCRYPTKEY никак не найду?

Нашёл: CryptImportPublicKeyInfo! Ну если проблем не возникнет, то вопрос исчерпан, пожалуй.

Спасибо всем, т.е. Conr.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.