Не могу никак понять, откуда CryptSignHash берёт скрытый ключ? В неё он не передаётся, значит он в контексте провайдера указывается (выбирается). А где? В частности, у меня есть сертификат из MY (т.е. с ключом скрытым связаный), как мне указать чтоб именно его ключом подпись делалась?
CryptSignMessage вроде как сертификаты ест, и мне её запустить удалось и подпись она сделала, но в описании написано, что она кодирует как-то всё, а как и каким ключом не сказано. Или она его из второго сертификата берёт?
CryptVerifyMessageSignature бросает ошибку 0x80092004 и непонятно что там должна делать: CRYPT_VERIFY_MESSAGE_PARA::pfnGetSignerCertificate?
И ещщё вопрос, закрывать перед тем как закрыть дескриптор Certificate Store я должен все дескрипторы сертификатов из этого хранилища позакрывать? Так?
Спасите помогите. Мануалов я уже перекурил до смеющихся Гейтсов на клавиатуре.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Здравствуйте, ZAMUNDA, Вы писали:
ZAM>Не могу никак понять, откуда CryptSignHash берёт скрытый ключ? В неё он не передаётся, значит он в контексте провайдера указывается (выбирается). А где? В частности, у меня есть сертификат из MY (т.е. с ключом скрытым связаный), как мне указать чтоб именно его ключом подпись делалась?
Явно загрузить ключ через CryptImportKey
ZAM>CryptSignMessage вроде как сертификаты ест, и мне её запустить удалось и подпись она сделала, но в описании написано, что она кодирует как-то всё, а как и каким ключом не сказано. Или она его из второго сертификата берёт?
Берется приватный ключ из контекста, а уж что и как туда загружено зависит от программиста.
Здравствуйте, 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) Козьма Прутков
Здравствуйте, ZAMUNDA, Вы писали:
ZAM>Вот теперь остаётся вопрос как имея CERT_CONTEXT проверить подпись публичным ключом? Т.к. CryptVerifySignature hPubKey в себя хочет, я нашёл в CERT_INFO указатель на CERT_PUBLIC_KEY_INFO только как из него получить HCRYPTKEY никак не найду?
Нашёл: CryptImportPublicKeyInfo! Ну если проблем не возникнет, то вопрос исчерпан, пожалуй.
Спасибо всем, т.е. Conr.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков