Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.12.2011(UTC) Сообщений: 78
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 5 раз в 2 постах
|
У меня ещё вопрос: В старой версии плагина был возможен следующий код Код:oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
Есть ли возможность указать способ кодирования данных в новом плагине? Или там по дефолту ContentEncoding = CADESCOM_BASE64_TO_BINARY?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Автор: VoimiX  У меня ещё вопрос: В старой версии плагина был возможен следующий код Код:oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
Есть ли возможность указать способ кодирования данных в новом плагине? Или там по дефолту ContentEncoding = CADESCOM_BASE64_TO_BINARY? oSignedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY) |
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Автор: pp00578  Вы имеете ввиду, если сайт был разработан с использованием архитектуры NPAPI
Да. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.05.2015(UTC) Сообщений: 32  Поблагодарили: 3 раз в 3 постах
|
Спасибо. У меня на Windows всё получилось. Приложение переделал на новый API, на первый взгляд работает нормально. Есть небольшие замечания, скорее придирки, не критичные.
1) Расширение может быть установлено, но отключено в chrome://extensions тогда в консоль выпадает ошибка
cadesplugin_api.js:143 GET chrome-extension://iifchhfnnmpdbibifmljnfjhpififfog/nmcades_plugin_api.js net::ERR_FAILED
после таймаута работа продолжится, но возможно, имеет смысл как-то обрабатывать эту ошибку в cadesplugin_api.
2) В примере async_cades_bes_sample.html при загрузке страницы в консоли ошибка
async_cades_bes_sample.html:1 Uncaught (in promise) Object {message: "Provider type not defined. (0x80090017)", requestid: 19, type: "error"}
в нашем приложении такая проблема нигде не проявляется, но мне не понятен её источник поэтому немного напрягает.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.12.2011(UTC) Сообщений: 78
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 5 раз в 2 постах
|
Исправьте ещё грамматические ошибки в cadesplugin_api.js
"Не доступен" пишется слитно в данном контексте.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Автор: ve2  2) В примере async_cades_bes_sample.html при загрузке страницы в консоли ошибка
async_cades_bes_sample.html:1 Uncaught (in promise) Object {message: "Provider type not defined. (0x80090017)", requestid: 19, type: "error"}
в нашем приложении такая проблема нигде не проявляется, но мне не понятен её источник поэтому немного напрягает.
У вас нет провайдеров 75 типа, тестовая страница еще выводит версию провайдера если он установлен. |
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Автор: VoimiX  Исправьте ещё грамматические ошибки в cadesplugin_api.js
"Не доступен" пишется слитно в данном контексте.
Исправим. Спасибо! |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 07.12.2011(UTC) Сообщений: 78
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 5 раз в 2 постах
|
Ещё вопрос: По асинхронному вызову. Я написал ф-ию sign, которая подписывает данные используя новый асинхронный api. Но как вызывать её, чтоб получить значение подписи на выходе? В старом api всё было синхронно, и я в коде везде писал var signatureBase64 = sign('hello world'); Но если внутри ф-ии асинхронные вызовы, то такой подход не работает. Как в данном случае можно возвратить значение? Необязательно, чтоб это было именно возвращаемое значение. Может существуют уже асинхронные механизмы? Может можно подписаться на какой-нибудь callback? Как узнать что ф-ия sign() уже завершилась из вне? Что-нибудь типа Код:sign('hello', function (data)
{
alert('signature from sign()=' + data)
}
);
Прикладываю свою ф-ию Как передать значение переменной Signature наружу?Код:
function sign(dataToSign, thumbprint) {
cadesplugin.async_spawn(function*(arg) {
if (thumbprint == null) {
thumbprint = 'a145929a81885726e8ddfe73d6ae4fd5429b734d';
// thumbprint = $('#CertificateThumbprint').val();
}
if (thumbprint == null || thumbprint == '') {
alert('Отпечаток не задан');
return "";
}
try {
var oStore = yield cadesplugin.CreateObjectAsync("CAPICOM.store");
yield oStore.Open();
} catch (err) {
alert('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 ;
}
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 Signature;
}
catch (err) {
errormes = "Не удалось создать подпись из-за ошибки: " + GetErrorMessage(err);
throw errormes;
}
}
// document.getElementById("SignatureTxtBox").innerHTML = Signature;
//SignatureFieldTitle[0].innerHTML = "Подпись сформирована успешно:";
}
catch(err)
{
//SignatureFieldTitle[0].innerHTML = "Возникла ошибка:";
//document.getElementById("SignatureTxtBox").innerHTML = err;
alert('Signature Error:' + err);
}
}); //cadesplugin.async_spawn
}
Отредактировано пользователем 28 августа 2015 г. 22:06:55(UTC)
| Причина: Не указана
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Автор: VoimiX  Я написал ф-ию sign, которая подписывает данные используя новый асинхронный api. Но как вызывать её, чтоб получить значение подписи на выходе? Например, с помощью того же Promise: Код:sign('hello').then(function (data)
{
alert('signature from sign()=' + data)
}
);
Код:
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) {
...
alert('Signature OK-' + Signature);
//return Signature;
return sign_resolve(Signature);
...
}); //cadesplugin.async_spawn
return result;
}
Только по-хорошему надо ещё с reject разобраться. |
|
 1 пользователь поблагодарил Павел Смирнов за этот пост.
|
IOFeed оставлено 31.08.2015(UTC)
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.05.2015(UTC) Сообщений: 32  Поблагодарили: 3 раз в 3 постах
|
Не уверен, что в эту ветку, но обнаружилась эта проблема при тестировании нового плагина. Берем условный код 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 г. 12:48:19(UTC)
| Причина: дополнительно проверял в разных браузерах
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close