Статус: Сотрудник
Группы: Участники
Зарегистрирован: 30.06.2016(UTC) Сообщений: 3,483   Сказал «Спасибо»: 53 раз Поблагодарили: 802 раз в 741 постах
|
Автор: CryptoSanEffect  Автор: Андрей Писарев  Обновил криптопровайдер. К сожалению, не помогло. Уточните, где и что Вы пытаетесь подписать и получаете ошибку (приложите скриншот)? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.08.2018(UTC) Сообщений: 12  Сказал(а) «Спасибо»: 5 раз
|
Автор: Александр Лавник  Уточните, где и что Вы пытаетесь подписать и получаете ошибку (приложите скриншот)?
Подписать пытаюсь на веб-форме. Последовательность действий следующая: 1. Сначала выбираю сертификат (который указан выше). 2. Прикладываю zip-файл 3. Отправляю форму и в процессе отправки пытаюсь подписать приложенный файл. Скриншот функции подписания файла (вставка ссылок на изображение через форму почему-то не работает): http://prntscr.com/kddxuzОшибка возникает на строке - yield oSignedData.SignHash(oHashedData, oSigner, SIGN_TYPE); // SIGN_TYPE = 1 Объект ошибки: Цитата:{message: "Invalid algorithm specified. (0x80090008)", requestid: 85, type: "error"} Отредактировано пользователем 1 августа 2018 г. 17:05:36(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Хеш с каким алгоритмом считаете после создания oHashedData? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.08.2018(UTC) Сообщений: 12  Сказал(а) «Спасибо»: 5 раз
|
Автор: cross  Хеш с каким алгоритмом считаете после создания oHashedData? Изначально, алгоритм хэширования использовался по умолчанию. Но потом пробовал указывать вручную: Цитата: oHashedData.Algorithm = cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256; // также *_512
Или нужно каким-то другим образом его указывать?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
судя по куску куда что вы приводили вы пишете код для асинхронной версии. Там свойства нужно задавать немного по другому. yield oHashedData.propset_Algorithm(cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256); |
|
 1 пользователь поблагодарил Анатолий Беляев за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.08.2018(UTC) Сообщений: 12  Сказал(а) «Спасибо»: 5 раз
|
Автор: cross  судя по куску куда что вы приводили вы пишете код для асинхронной версии. Там свойства нужно задавать немного по другому. yield oHashedData.propset_Algorithm(cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256); Сделал как Вы сказали: Цитата: yield oHashedData.propset_Algorithm(cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256);
var sSignedMessage = yield oSignedData.SignHash(oHashedData, oSigner, SIGN_TYPE);
В результате появилась другая ошибка: Цитата:{message: "The parameter is incorrect. (0x80070057)", requestid: 86, type: "error"}
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
А можете полный код показать? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.08.2018(UTC) Сообщений: 12  Сказал(а) «Спасибо»: 5 раз
|
Автор: cross  А можете полный код показать? После вставки, форматирование кода стало ужасным, но если надо, могу отдельным файлом приложить. Цитата: ... //подписываем и шифруем чанк, затем отправляем на сервер return SignAndEncryptFileChunk_Async(certThumbprint, progressBox, originalBlob) .then(/* sending to server */); ...
//подписание и шифрование чанка function SignAndEncryptFileChunk_Async(certThumbprint, progressBox, fileChunk) { return cadesplugin.async_spawn(function*(arg) { let pb = arg[1]; var objForSignAndEnc = pb.signAndEnvelopObj; if (!objForSignAndEnc) throw "Возникла ошибка! Файл не содержит объект CPSigner и CadesSignedData";
var oHashedData = objForSignAndEnc.oHashedData; if (!oHashedData) throw "Возникла ошибка! Файл не содержит объект HashedData";
var oEnvelop = objForSignAndEnc.oEnvelop; if (!oEnvelop) throw "Возникла ошибка! Файл не содержит объект CPEnvelopedData";
var isLastChunk = pb.isLastChunk; //получение base64 строки из чанка let data = yield ReadFileChunk(arg[2]); if (!data) throw "Возникла ошибка при чтении части файла";
//Подписание try { //при разрыве соединения чанк мог быть уже подписан, проверяем для валидности oHashedData if (pb.lastSucceededSignedChunkIndex !== pb.chunkIndex) { yield oHashedData.Hash(data); console.log("Часть № " + pb.chunkIndex + " подписана"); } else console.log("Часть № " + pb.chunkIndex + " уже была ранее подписана, подписание не требуется");
} catch (err) { let error = "Возникла ошибка при подписании: " + err; console.log(error); throw error; }
//Шифрование let encryptedData = ""; try { //при разрыве соединения чанк мог быть уже зашифрован, проверяем для валидности шифрования if (pb.lastSucceededSignedChunkIndex !== pb.chunkIndex && objForSignAndEnc.lastEncryptedData === "") { encryptedData = yield oEnvelop.StreamEncrypt(data, isLastChunk); console.log("Часть № " + pb.chunkIndex + " зашифрована"); } else { encryptedData = objForSignAndEnc.lastEncryptedData; console.log("Часть № " + pb.chunkIndex + " уже была ранее зашифрована, шифрование не требуется"); } //очищаем base64 чанка data = null; } catch (err) { let error = "Возникла ошибка при шифровании: " + err; console.log(error); throw error; }
let resultObj = { hashedData: oHashedData, encryptedData: encryptedData }
//если это была последняя часть и отдельного файла с подписью нет, то создаем подпись if (isLastChunk && !SigExistsForFile(progressBox.fileName)) {
try { resultObj.sign = yield signCreate_Async(arg[0], oHashedData, objForSignAndEnc); if (!resultObj.sign) throw "Ошибка при создании подписи";
console.log("Подпись успешно создана");
var verifyResult = yield Verify(resultObj.sign, oHashedData); if (!verifyResult) throw "Ошибка при проверке подписи";
console.log("Подпись проверена");
} catch (error) {
console.log(error); throw error; } }
return resultObj; }, certThumbprint, progressBox, fileChunk); };
//создание подписи для файла, подписанного по чанкам function signCreate_Async(certSubjectName, oHashedData, signerObj) { return cadesplugin.async_spawn(function*(arg) { var oSigner = signerObj.oSigner; var oSignedData = signerObj.oSignedData; try { yield oHashedData.propset_Algorithm(cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256);
var sSignedMessage = yield oSignedData.SignHash(oHashedData, oSigner, SIGN_TYPE); } catch (err) { console.log("Failed to create signature. Error: " + cadesplugin.getLastError(err)); throw err; }
return sSignedMessage; }, certSubjectName, oHashedData, signerObj); }
Отредактировано пользователем 1 августа 2018 г. 17:59:00(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
yield oHashedData.propset_Algorithm(cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256); вот это надо делать перед первым хешированием данных, сразу после создания обьекта |
|
 1 пользователь поблагодарил Анатолий Беляев за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.08.2018(UTC) Сообщений: 12  Сказал(а) «Спасибо»: 5 раз
|
Автор: cross  yield oHashedData.propset_Algorithm(cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256); вот это надо делать перед первым хешированием данных, сразу после создания обьекта Сделал следующим образом: Цитата: ... try { var oHashedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.HashedData"); } catch (err) { errormes = "Failed to create CAdESCOM.HashedData: " + err.number; throw errormes; } if (oHashedData) { yield oHashedData.propset_Algorithm(cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256); yield oHashedData.propset_DataEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY); } else { errormes = "Failed to create CAdESCOM.HashedData"; throw errormes; } ...
Ошибка та же - Invalid algorithm specified. (0x80090008).
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close