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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Jacobian  
#1 Оставлено : 31 марта 2016 г. 0:21:56(UTC)
Jacobian

Статус: Участник

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

Сказал(а) «Спасибо»: 4 раз
Пытаюсь заставить вот этот код заработать в Хроме. Для этого использую async_code.js. Дохожу до самой последней строчки, на которой и вылетает эта ошибка. Вот собственно сам код:

Код:

cadesplugin.async_spawn(function *() {
    try {
        var hashAlg = 100;
        var oHashedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.HashedData");
        var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
        yield oStore.Open();
        var certs = yield oStore.Certificates;
        var oCerts = yield certs.Find(cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint);
        var oCert = yield oCerts.Item(1);
        var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
        var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData"),
            sSignedMessage;
        yield oSigner.propset_Certificate(oCert);                
        sSignedMessage = yield oSignedData.SignHash(oHashedData, oSigner, 1);
       // До последней строчки ^^^ все ок, если ее закомментировать, то ошибки не будет       
    } catch (e) {
        alert(GetErrorMessage(e));
        return false;
    }    
});  


Вместо третьего параметра перепробовал все, что только можно. Ничто не помогает.
Offline korshunovarina  
#2 Оставлено : 13 сентября 2016 г. 14:53:56(UTC)
korshunovarina

Статус: Участник

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

Сказал(а) «Спасибо»: 5 раз
Поделитесь, пожалуйста, решением проблемы, если, конечно, вам ее удалось решить.
Offline cyrill  
#3 Оставлено : 30 сентября 2016 г. 13:06:22(UTC)
cyrill

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

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

Сказал «Спасибо»: 3 раз
Поблагодарили: 1 раз в 1 постах
вам нужно инициализировать значением объект HashedData
Ему видимо нечем расчитывать хеш, вот и валится

Пример:
Код:

                          var oHashedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.HashedData");
                          yield oHashedData.propset_Algorithm = cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411;
                          yield oHashedData.propset_DataEncoding = cadesplugin.CADESCOM_BASE64_TO_BINARY;
                          yield oHashedData.SetHashValue(myHash);

Offline zhenia  
#4 Оставлено : 16 октября 2017 г. 11:10:36(UTC)
zhenia

Статус: Новичок

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

Сказал «Спасибо»: 1 раз
У меня аналогичная проблема, но как раз на строке oHashedData.SetHashValue

Получаю хэш так:
Код:

var createObject = function( name, callback ){
    cadesplugin.CreateObjectAsync( name ).then( function( obj ) {
        callback( null, obj );
    }, callback);
};

var getHash = function( str, callback ){
    createObject( 'CAdESCOM.HashedData', function( err, oHashedData ){
        oHashedData.propset_Algorithm( cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411 ).then( function(){
            oHashedData.propset_DataEncoding( cadesplugin.CADESCOM_BASE64_TO_BINARY ).then( function() {
                oHashedData.Hash( Base64.encode( str ) ).then( function(){
                    oHashedData.Value.then( function( hash ){

                        callback( null, Base64.encode( hash, true ) );

                    }, callback);
                }, callback);
            }, callback);
        }, callback);
    }, callback);
};


Потом хочу подписать его:
Код:

var findCert = function( certThumbprint, callback ){
    var onCertDone = function ( err, cert ) {
        try { oStore.Close(); } catch(e) {}
        callback( err, cert );
    };

    createObject( 'CAPICOM.store', function( err, oStore ){
        if ( err ) {
            return callback( err );
        }

        try {
            oStore.Open( cadesplugin.CAPICOM_CURRENT_USER_STORE, cadesplugin.CAPICOM_MY_STORE, cadesplugin.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED ).then( function(){
                oStore.Certificates.then( function( oCertificates ){
                    oCertificates.Find( cadesplugin.CAPICOM_CERTIFICATE_FIND_SHA1_HASH, certThumbprint ).then( function( oListCertificates ){
                        oListCertificates.Count.then( function( count ){
                            if ( count == 0 ) {
                                return onCertDone( new Error('Сертификат не найден') ); // не нашли сертификат
                            }

                            oListCertificates.Item(1).then( function (cert) {
                                onCertDone( null, cert );                               // возвращаем найденный сертификат
                            }, onCertDone);

                        }, onCertDone);
                    }, onCertDone);
                }, onCertDone);
            }, onCertDone );

        } catch(e) {
            onCertDone( e );
        }
    } );
};

var signHash = function ( certThumbprint, hashValue, callback ) {
    findCert( certThumbprint, function( err, oCert ) {
        if ( err ) {
            return callback( err );
        }

        createObject( 'CAdESCOM.RawSignature', function( err, oRawSignature ) {
            if ( err ) {
                return callback( err );
            }

            createObject( 'CAdESCOM.HashedData', function( err, hashObject ) {
                if ( err ) {
                    return callback( err );
                }

                hashValue = Base64.decode( hashValue );

                hashObject.propset_Algorithm( cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411 ).then( function() {
                    hashObject.propset_DataEncoding( cadesplugin.CADESCOM_BASE64_TO_BINARY ).then( function() {
                        hashObject.SetHashValue( hashValue ).then( function() {
                            oRawSignature.SignHash( hashObject, oCert ).then( function( sRawSignature ) {
                                callback( null, sRawSignature );
                            }, callback);
                        }, callback);
                    }, callback);
                }, callback);

            });

        });

    });
};


На 56-й и валится ошибка:
Код:

signHash(
    'D2B89E8EE754C12B2B69304FBA12C438721BE250',
    'CoFS5DjNAm30Fp1ft2guIR2QWODpT5xVkwWU26+Uljs=',
    function(err,dt){
        if(err) console.warn(err);
        if(dt) console.log(dt);
    }
);

// Base64.decode( 'CoFS5DjNAm30Fp1ft2guIR2QWODpT5xVkwWU26+Uljs=' )
// hashValue = "ᒤ8͂m䖝_種!ؠ鏜Uㅔۯ䖻" 
"The data is invalid. (0x8007000D)"

// Base64.decode( 'CoFS5DjNAm30Fp1ft2guIR2QWODpT5xVkwWU26+Uljs=', true )
// hashValue = "0a8152e438cd026df4169d5fb7682e211d9058e0e94f9c55930594dbaf94963b40"
"The parameter is incorrect. (0x80070057)"


В логе ошибки нет при вызове signHash:
Код:

[5236] Externs.cpp(33) : /Init/
[5236] CPSettings.cpp(305) : /Init/
[5236] Externs.cpp(33) : /Init/
[5236] CPSettings.cpp(305) : /Init/
[5236] Externs.cpp(33) : /Init/
[5236] CPSettings.cpp(305) : /Init/
[5236] Externs.cpp(33) : /Init/
[5236] CPSettings.cpp(305) : /Init/
[5236] cpcspi: Thread: file:line function text xcode(dcode) level: 0
[5236] cpcsp: function text level: 0
[5236] cpui: Thread: file:line function text xcode(dcode) level: 0

Отредактировано пользователем 16 октября 2017 г. 12:06:01(UTC)  | Причина: уточнение

Offline zhenia  
#5 Оставлено : 19 октября 2017 г. 12:16:13(UTC)
zhenia

Статус: Новичок

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

Сказал «Спасибо»: 1 раз
Отвечу сам себе, может ещё кому пригодится.

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