Добрый день!
Мы используем версию SDK, полученную 24.02.2014.
У нас стоит следующая задача: подписывать простые данные и проверять их.
Для подписи мы используем сертификат в формате .p12. Для проверки у нас будет доступен только открытый ключ (сертификат в формате .cer).
Пример кода:
var iolaCOMSign = new IolaCOM2();
IOLACOM_OPERFLAGS flagsSign = 0;
flagsSign |= IOLACOM_OPERFLAGS.CF_IN_BASE64;
flagsSign |= IOLACOM_OPERFLAGS.CF_OUT_BASE64;
flagsSign |= IOLACOM_OPERFLAGS.CF_IN2_BASE64;
flagsSign |= IOLACOM_OPERFLAGS.SF_DETACHED_DATA;
flagsSign |= IOLACOM_OPERFLAGS.CF_DRAFT_DATA;
iolaCOMSign.KeyType = (int)IOLACOM_STORETYPE.ST_IOLA_PKCS12;
iolaCOMSign.CertType = (int)IOLACOM_STORETYPE.ST_IOLA_PKCS12;
iolaCOMSign.CertPath = "C:\\";
iolaCOMSign.KeyPath = "C:\\";
iolaCOMSign.SetPIN("123456");
var signedData = iolaCOMSign.SignData2("GOSTKZ_ba22f3a484dfa4c1547bbfedc908cd175e1e593e", (int)(flagsSign), "Data to sign", "");
var iolaCOMVerify = new IolaCOM2();
IOLACOM_OPERFLAGS flagsVerify = 0;
flagsVerify |= IOLACOM_OPERFLAGS.CF_IN_BASE64;
flagsVerify |= IOLACOM_OPERFLAGS.CF_OUT_BASE64;
flagsVerify |= IOLACOM_OPERFLAGS.CF_IN2_BASE64;
flagsVerify |= IOLACOM_OPERFLAGS.SF_DETACHED_DATA;
flagsVerify |= IOLACOM_OPERFLAGS.CF_DRAFT_DATA;
iolaCOMVerify.CertType = (int)IOLACOM_STORETYPE.ST_IOLA_FILE;
iolaCOMVerify.KeyType = (int)IOLACOM_STORETYPE.ST_IOLA_FILE;
iolaCOMVerify.CertPath = "C:\\GOSTKZ_ba22f3a484dfa4c1547bbfedc908cd175e1e593e.cer";
iolaCOMVerify.KeyPath = "C:\\GOSTKZ_ba22f3a484dfa4c1547bbfedc908cd175e1e593e.cer";
iolaCOMVerify.SetPIN("");
var verifyResult = iolaCOMVerify.VerifyData2("GOSTKZ_ba22f3a484dfa4c1547bbfedc908cd175e1e593e", (int)(flagsVerify), "Data to sign", signedData);
На проверке подписанных данных вываливается ошибка: Verify signature - verifying signature error.
Метод GetLastErrorString() возвращает то же самое сообщение, код ошибки - 30.
Может есть какие-либо ошибки в коде?
В функции VerifyData2 указывал keyUID и не указывал, разницы никакой. Также поигрался с флагами для функции проверки - та же самая ошибка. Также указывал различные флаги. Подпись данных проходит только в случае если результат выполнения функции SignData2() будет содержать в себе сертификат, но для нас это не подходит.
Тем более, что данные, подписанные IolaCOM могут быть проверены на java-версии Iola. Для Java версии Iola реализована подпись и проверка данных и все работает отлично. Но подпись, сформированная на IolaCOM, не проходит проверку на java.
Сертифкаты использовались тестовые из последней версии SDK, которую получили от вас (приложил к письму)