Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.12.2011(UTC) Сообщений: 78
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 5 раз в 2 постах
|
Автор: Смирнов  Автор: VoimiX  Я написал ф-ию sign, которая подписывает данные используя новый асинхронный api. Но как вызывать её, чтоб получить значение подписи на выходе? Например, с помощью того же Promise: ... Только по-хорошему надо ещё с reject разобраться. Спасибо. С подписью получилось. Возвращает то, что нужно в случае успеха. Но с reject почему-то не получилось Вот новое описание ф-ии Код:
function sign(dataToSign, thumbprint) {
var sign_resolve;
var sign_reject;
var result = new Promise(function(resolve, reject)
{
sign_resolve = resolve;
sign_reject = reject;
});
cadesplugin.async_spawn(function*(arg) {
if (thumbprint == null) {
thumbprint = 'a145929a81885726e8ddfe73d6ae4fd5429b734d';//d
// thumbprint = $('#CertificateThumbprint').val();
}
if (thumbprint == null || thumbprint == '') {
return sign_reject('Отпечаток не задан');
}
try {
var oStore = yield cadesplugin.CreateObjectAsync("CAPICOM.store");
yield oStore.Open();
} catch (err) {
//alert('Failed to create CAPICOM.store: ' + err.number);
return sign_reject('Failed to create CAPICOM.store: ' + err.number);
//return "";
}
var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
var all_certs = yield oStore.Certificates;
var oCerts = yield all_certs.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint);
if (yield oCerts.Count == 0) {
//alert("Certificate not found");
//return ;
return sign_reject('Certificate not found');
}
var certificate = yield oCerts.Item(1);
var Signature;
try
{
var errormes = "";
try {
var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
} catch (err) {
errormes = "Failed to create CAdESCOM.CPSigner: " + err.number;
throw errormes;
}
var oSigningTimeAttr = yield cadesplugin.CreateObjectAsync("CADESCOM.CPAttribute");
var CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;
yield oSigningTimeAttr.propset_Name(CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
var oTimeNow = new Date();
yield oSigningTimeAttr.propset_Value(oTimeNow);
var attr = yield oSigner.AuthenticatedAttributes2;
yield attr.Add(oSigningTimeAttr);
var oDocumentNameAttr = yield cadesplugin.CreateObjectAsync("CADESCOM.CPAttribute");
var CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME = 1;
oDocumentNameAttr.propset_Name(CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME);
oDocumentNameAttr.propset_Value("Document Name");
yield attr.Add(oDocumentNameAttr);
if (oSigner) {
oSigner.propset_Certificate(certificate);
}
else {
errormes = "Failed to create CAdESCOM.CPSigner";
throw errormes;
}
var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
var CADES_BES = 1;
var CADESCOM_BASE64_TO_BINARY = 1;
if (dataToSign) {
oSignedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY);
oSignedData.propset_Content(dataToSign);
oSigner.propset_Options(1); //CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
try {
Signature = yield oSignedData.SignCades(oSigner, CADES_BES);
//alert('Signature OK-' + Signature);
return sign_resolve(Signature);
}
catch (err) {
errormes = "Не удалось создать подпись из-за ошибки: " + GetErrorMessage(err);
throw errormes;
}
}
}
catch(err)
{
//alert('Signature Error:' + err);
return sign_reject('Signature Error:' + err);
}
//alert('Signature OK-' + Signature);
//return Signature;
return sign_resolve(Signature);
}); //cadesplugin.async_spawn
return result;
}
Вызываю так Код:
sign('hello').then(function (data) {
// console.log(data);
alert('signature from sign()=' + data);
},
function (err) {
alert('error=' + err);
}
);
Я специально сделал неправильный отпечаток, чтобы сертификат не нашёлся. И ожидалось, что вызовется Код:
function (err) {
alert('error=' + err);
}
Но ничего не происходит, только в консоли браузера ошибка "Uncaught (in promise) Object {message: "Cannot find object or property. (0x80092004)", requestid: 9, type: "error"}" У предыдущего комментатора такая же проблема видимо Автор: ve2  Не уверен, что в эту ветку, но обнаружилась эта проблема при тестировании нового плагина. Берем условный код
var oStore = yield cadesplugin.CreateObjectAsync("CAPICOM.store"); yield oStore.Open(); var certs = yield oStore.Certificates; /* здесь */ var certCnt = yield certs.Count;
если нет ни одного сертификата при получении списка происходит исключение Cannot find object or property при получении списка то есть объект certs не возвращается. В версии NPAPI на Firefox поведение аналогично.
Но в Explorer, при использовании объекта ActiveXObject("CAPICOM.store"), который является прототипом для функции вашего плагина, в аналогичном коде объект списка возвращается, а вот его свойство Count равно нулю. И это поведение представляется логичным, поскольку пустой список это не то же самое, что его отсутствие или ошибка доступа к списку. Отредактировано пользователем 29 августа 2015 г. 13:12:17(UTC)
| Причина: Не указана
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Автор: VoimiX  Но с reject почему-то не получилось У предыдущего комментатора такая же проблема видимо
Эту проблему мы проверим. Но в любом случае, в Вашей функции sign() лучше обернуть в try/catch все вызовы плагина. Тогда вы в любом случае получите информацию об ошибке. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.09.2012(UTC) Сообщений: 34   Сказал «Спасибо»: 1 раз
|
Код:navigator.userAgent
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 YaBrowser/15.2.2214.3645 Safari/537.36"
Неверное определяет яндекс браузер. Думает хром. Плагин не работает Решена проблема. Для этого браузера тоже надо было ставить расширения Хрома. Отредактировано пользователем 31 августа 2015 г. 13:14:21(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Цитата:Неверное определяет яндекс браузер. Думает хром. да он и есть Chrome, только рюшечки от яндекса )) |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.09.2012(UTC) Сообщений: 34   Сказал «Спасибо»: 1 раз
|
Скажите на сколько совместим этот пагин с ViPNet CSP? Сегодня столкнулись с тем, что клиент наш некоторые документы может подписать, а некоторые нет. Закономерность пока не удалось получить. Оказалось, что у него стоит ViPNet CSP. И плагин выходит как то на половину дружит с ViPNet CSP. Это нормальное явление?
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Автор: paradoxm  Скажите на сколько совместим этот пагин с ViPNet CSP? Сегодня столкнулись с тем, что клиент наш некоторые документы может подписать, а некоторые нет. Закономерность пока не удалось получить. Оказалось, что у него стоит ViPNet CSP. И плагин выходит как то на половину дружит с ViPNet CSP. Это нормальное явление? Нормальное. Мы не можем гарантировать совместимость со сторонними CSP. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,785   Сказал «Спасибо»: 582 раз Поблагодарили: 2311 раз в 1810 постах
|
Автор: paradoxm  Скажите на сколько совместим этот пагин с ViPNet CSP? Сегодня столкнулись с тем, что клиент наш некоторые документы может подписать, а некоторые нет. Закономерность пока не удалось получить. Оказалось, что у него стоит ViPNet CSP. И плагин выходит как то на половину дружит с ViPNet CSP. Это нормальное явление? Еще есть вариант - использовать для таких пользователей ViPNet Local Signature Service. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.09.2012(UTC) Сообщений: 34   Сказал «Спасибо»: 1 раз
|
Где брать свежую версию плагина? По тем ссылкам что были раньше качается старая версия и она не работает. 2.012
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Автор: paradoxm  Где брать свежую версию плагина? По тем ссылкам что были раньше качается старая версия и она не работает. 2.012 Здесь: Автор: cross  Для установки требуется удаление предыдущей версии, обновляться пока не умеет. Изменения: 1) Win версия не требует флага для установки Native Message 2) Исправлена страница настройки доверенных сайтов. 3) Исправлена ошибка медленного декодирования больших base64 данных на Windows. Версия для windowsВерсия для Linux amd64Это еще бета-версия, перед тем как рекомендовать ее пользователям проверьте на вашем приложении. Не рекомендуется распространять эту версию пользователям. Релизная версия, скорее всего, не сможет корректно обновить эту бета-версию. Также добавил в шапку темы. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 11.02.2011(UTC) Сообщений: 49   Откуда: E-burg Сказал «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Добрый день!
Столкнулись с аналогичной ошибкой при подписании с помощью последней версии плагина (2.0.12203) и последней версией браузера (Google Chrome 44.0.2403.157 m). При этом сценарий не стандартный, т.е. маленькие файлы (1-5 КБ) подписывает нормально. А при попытке подписать большие файлы (800-900 КБ) возникает ошибка в nmcades.exe (как на 1 странице этой темы)
Подскажите, какую информацию нужно для Вас собрать, чтобы Вы смогли проанализировать её?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close