Пытаемся настроить верификацию подписей файлов на стороне сервера на С#. Код верификации:
string inDataStr = System.IO.File.ReadAllText(@"C:\Users\Vitaliy\Desktop\doc1.docx");
string signedDataStr = "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";
string signResult = "";
string outData = " ";
string outVerifyInfo = " ";
string outCert = " ";
const KALKANCRYPTCOM_FLAGS flagsVerify =
KALKANCRYPTCOM_FLAGS.KC_SIGN_CMS |
KALKANCRYPTCOM_FLAGS.KC_OUT_PEM |
KALKANCRYPTCOM_FLAGS.KC_DETACHED_DATA |
KALKANCRYPTCOM_FLAGS.KC_IN_BASE64;
IKalkanCryptCOM kalkan = new KalkanCryptCOMLib.KalkanCryptCOM();
kalkan.Init();
if (kalkan.GetLastError() > 0)
throw new CryptographicException("KalkanCrypt не инициализирован.");
string errorStr = "";
uint rv;
kalkan.VerifyData("", (int)flagsVerify, 0, inDataStr, signedDataStr, out outData, out outVerifyInfo, out outCert);
kalkan.GetLastErrorString(out errorStr, out rv);
Console.WriteLine(String.Format(" errorStr: {3}, outVerifyInfo: {1}, outData:{0}, outCert:{2}", outData, outVerifyInfo, outCert, errorStr));
Console.ReadKey();
В outVerifyInfo появляется: Verify - FAILED. error:2E09A09E:CMS routines:func(154):reason(158)
Подпись была получена через createCMSSignatureFromFile в веб-интерфейсе. Данный код работает для txt файлов. Я пытался считывать doc-файл вот так:
string inDataStr = Convert.ToBase64String(System.IO.File.ReadAllBytes(@"C:\Users\Vitaliy\Desktop\doc1.docx"));
Но так проверку тоже не проходит