Здравствуйте.
Верифицирую ЭЦП в формате PKCS#7 функцией CPVerifySignature. Соответсвенно для этого получаю дескриптор CSP, создаю объект функции хеширования, вычисляю значение хеша данных и.т.п./ниже приведу куски кода как все это делаю/.
Вопрос заключается в следующем: при получении подписи из подписанного сообщения без использования каких-либо функций CryptoApi существует необходимость в ее (т.е. подписи) преобразовании или приведению к какому-либо виду, если да то не подскажите каким образом это можно осущесвить. Данный вопрос возник в связи с тем что подпись правильная (создана функцией CryptSignMessage(...)), а при ее верификации выше указанной функцией возвращается ошибка: 2148073478: "Неправильная подпись".
2) Импортирую открытый ключ
CPImportKey(Prov,pbImportBlob,dwImportBlobSize,0,0,&hImportedKey)
3) Нахожу алгоритм хеша по OID, переводя значение OID в значение алгоритма.
hashAlg = CertOIDToAlgId((LPCSTR)data);
[in] data = 1.2.643.2.2.9
[out] hashAlg = 32798
5) Из ранее полученных данных (их получение пропускаю) расчитываю хеш данных
CPHashData(Prov,hHash,signFile.captionOfFile,signFile.sizeOfcaptionFile,0);
Размер хеш последовательности 32 байта
6) Получаю подпись из подписанного файла (размер 64 байта)
7) И все это передаю в функцию
CPVerifySignature(Prov,hHash,signFile.hash,signFile.hashSize,ImportedKey,NULL,0);