Работа с отсоединенной подписью

Здравствуйте. Имеется задача по верификации отсоединенной подписи с помощью Рутокен ЭЦП Флеш. Столкнулся с проблемой, что каждый раз при попытке проверить отсоединенную подпись, мне возвращается ошибка "1102:error:0D07207B:asn1 encoding routines:func(114):reason(123)"

Работаю с оболочкой для C# rtpkicoreCSharp.
Метод для верификации подписи имеет следующую сигнатуру:
bool verify(uint deviceId, string cms, string data, StringVector userCerts, StringVector ca, StringVector crl, OptionsMap options)

Вопрос следующий: как получить cms и data, чтобы не возникала ошибка декодирования ASN1 структуры?
Пробовал получать cms и data как base64 строки и указывал при этом в options атрибут "base64" как true. Это не помогло.
Если файлы прочитать как строки и передать их как есть, то так же ошибка. Пробовал различные кодировки.

Re: Работа с отсоединенной подписью

Здравствуйте, miron_valentin!

Могли бы нам прислать пример использования (какие данные туда уходят)?

Re: Работа с отсоединенной подписью

Код такой:

var core = CryptoCore.getInstance();
var devs = core.enumerateDevices();
var dev = devs[0];
core.login(dev, pass);
string cms = Convert.ToBase64String(File.ReadAllBytes(@"res_31617d0b-ba19-f044-0e05-30a800690e40.zip.sig"));
string data = Convert.ToBase64String(File.ReadAllBytes(@"res_31617d0b-ba19-f044-0e05-30a800690e40.zip"));
var options = new OptionsMap()
{
    {"verifyCertificate", false},
    {"detached", true},
    { "base64", true}
};
var result = core.verify(dev, cms, data, new StringVector(), new StringVector(), new StringVector(), options);

Могу скинуть сами файлы

(2017-04-20 11:28:14 отредактировано Анатолий Убушаев)

Re: Работа с отсоединенной подписью

miron_valentin пишет:

Код такой:

var core = CryptoCore.getInstance();
var devs = core.enumerateDevices();
var dev = devs[0];
core.login(dev, pass);
string cms = Convert.ToBase64String(File.ReadAllBytes(@"res_31617d0b-ba19-f044-0e05-30a800690e40.zip.sig"));
string data = Convert.ToBase64String(File.ReadAllBytes(@"res_31617d0b-ba19-f044-0e05-30a800690e40.zip"));
var options = new OptionsMap()
{
    {"verifyCertificate", false},
    {"detached", true},
    { "base64", true}
};
var result = core.verify(dev, cms, data, new StringVector(), new StringVector(), new StringVector(), options);

В base64 надо переводить только data. Cms не надо перекодировать.

Re: Работа с отсоединенной подписью

Анатолий Убушаев пишет:

В base64 надо переводить только data. Cms не надо перекодировать.

Если заменить на

string cms = File.ReadAllText(@"res_31617d0b-ba19-f044-0e05-30a800690e40.zip.sig");

ошибка сохраняется

Re: Работа с отсоединенной подписью

Как формируется подпись? В cms присутствует сертификат? Если нет, то его надо передавать параметром.

Re: Работа с отсоединенной подписью

Анатолий Убушаев пишет:

Как формируется подпись?

Не знаю, ко мне приходит уже готовая подпись с самим файлом.

Анатолий Убушаев пишет:

В cms присутствует сертификат?

Если смотреть через криптопро АРМ, то сертификат есть:https://forum.rutoken.ru/uploads/transfer/10000/500/10774/thumb/p1be5gvqde14a610d2sr01dgs1vqg1.png

(2017-05-15 11:13:06 отредактировано Анатолий Убушаев)

Re: Работа с отсоединенной подписью

Извиняемся за столь долгий ответ и спасибо вам за предоставленную информацию.

К сожалению, мы не поддерживаем данную "оболочку для C# rtpkicoreCSharp".
По данному вопросу можем посоветовать использовать библиотеку PKI-Core, только правда в С++.

Re: Работа с отсоединенной подписью

Анатолий Убушаев пишет:

К сожалению, мы не поддерживаем данную "оболочку для C# rtpkicoreCSharp".

А разве есть разница между моей библиотекой и вашей? Эта оболочка использует методы библиотеки PKI-Core.

Re: Работа с отсоединенной подписью

miron_valentin пишет:
Анатолий Убушаев пишет:

К сожалению, мы не поддерживаем данную "оболочку для C# rtpkicoreCSharp".

А разве есть разница между моей библиотекой и вашей? Эта оболочка использует методы библиотеки PKI-Core.

Да всё верно, но библиотека внутри оболочки устарела, с тех пор интерфейс очень сильно изменился.