Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline tarkhil  
#1 Оставлено : 20 сентября 2021 г. 18:41:11(UTC)
tarkhil

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.12.2014(UTC)
Сообщений: 60
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 4 раз
Добрый вечер

Пытаюсь использовать КриптоПРО ЭЦП плагин для подписывания файлов.

Код тривиальный

Код:

        cadesplugin.CreateObjectAsync("CAdESCOM.HashedData")
            .then( function( oHashedData ) {
                oHashedData.propset_Algorithm( 111 );
                //oHashedData.propset_DataEncoding(CADESCOM_BASE64_TO_BINARY);
                var readEventHandler = function(evt) {
                    if (evt.target.error == null) {
                        console.log(`Reading ${evt.target.result.length} from ${offset}`);
                        offset += evt.target.result.length;
                        oHashedData.Hash(evt.target.result);
                    } else {
                        console.error("Read error: " + evt.target.error);
                        return;
                    }
                    if (offset >= fileSize) {
                        console.log("Done reading file");
                        //var value = PromiseValue(oHashedData.Value);
                        var value;
                        oHashedData.Value.then(function(v) {
                            value = v;
                            console.log(oHashedData);
                            console.log(value);
                            $("#hash").removeClass("invisible").addClass("visible").text(value);
                            window.cryptoPro.createDetachedSignature(oCertificate, value
                                                                    ).then(
                                                                        function (s) {
                                                                            console.log("Signed ok");
                                                                            oSignature = s;

                                                                            $("#signature").attr('href',URL.createObjectURL(new Blob([s], { type: 'application/pkcs7-signature' })))
                                                                                .attr('download',file.name+'.sign');
                                                                            $("#sign").removeClass("invisible").addClass("visible");
                                                                        } );
                        } );
                        return;
                    }

                    // of to the next chunk
                    chunkReaderBlock(offset, chunkSize, file);
                }

                chunkReaderBlock = function(_offset, length, _file) {
                    var r = new FileReader();
                    var blob = _file.slice(_offset, length + _offset);
                    r.onload = readEventHandler;
                    r.readAsText(blob);
                }

                // now let's start the read with the first block
                chunkReaderBlock(offset, chunkSize, file);
            } );
    } );


Работает почти как настоящее. Но хеш получается неправильный. Если подать эталонный хеш (полученный /opt/cprocsp/bin/amd64/cryptcp -hash -hex файл) - подпись получается правильная.

Перепробовал, по-моему, все варианты Algorithm и DataEncoding, но правильного хеша не получил.

Наверняка у кого-то такой код работает...
Offline tarkhil  
#2 Оставлено : 20 сентября 2021 г. 21:03:22(UTC)
tarkhil

Статус: Активный участник

Группы: Участники
Зарегистрирован: 19.12.2014(UTC)
Сообщений: 60
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 4 раз
Отвечаю.

Дело в том, что плагин работает только с Base64. Нужно читать через readAsDataURL и откусывать заголовок.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.