Приветствую!
Возникла необходимость в таком функционале:
1) на сервере из большого файла сделать хэш
2) передать его удаленному клиенту
3) он его подписывает CryptSignHash
4) заворачивает подпись с сертифкатом в PKCS7 как отделенную подпись
5) возвращает PKCS7 на сервер
по сообщениям #30 - Смирнова и далее #31 - Влада Степанова сделал такой алгоритм
0) клиент передает серверу алгоритм хэша из сертификата
1) сервер делает хэш из файла по этому алгоритму
2) передает клиенту полученный хэш
3) клиент подписывает его методом CryptSignHash - получает simpleSig и переворачивает
4.1) затем подписывает служебную-константу(любую информацию, в приложенных файлах три байта 00, 11, 22) через CryptMsgOpenToEncode, CryptMsgUpdate - получается отделенная подпись PKCS7Sig
4.2) потом делает CryptMsgOpenToDecode берет из PKCS7Sig структуру cmsSignerInfo типа CMSG_CMS_SIGNER_INFO методом CryptMsgGetParam(,CMSG_CMS_SIGNER_INFO_PARAM,)
4.3) меняет cmsSignerInfo.EncryptedHash на simpleSig
4.4) через CryptMsgControl(,CMSG_CTRL_ADD_CMS_SIGNER_INFO,) кладется в PKCS7Sig структура cmsSignerInfo
4.5) через CryptMsgControl(,CMSG_CTRL_DEL_SIGNER,) удаляется старая подпись
4.6) получает PKCS7Sig методом CryptMsgGetParam(,CMSG_ENCODED_MESSAGE,)
5) возвращает полученные PKCS7Sig на сервер
Если подписывать sha1 ключем то проверяется хорошо, а вот если ГОСТ то говорит что подпись не верна. :(
Подскажите, где ошибся, что не доделал?
Вложение(я):
Archive.zip
(3kb) загружен 12 раз(а).У Вас нет прав для просмотра или загрузки вложений. Попробуйте зарегистрироваться.