Статус: Новичок
Группы: Участники
Зарегистрирован: 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)
| Причина: уточнение
|