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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline kassfb  
#1 Оставлено : 3 августа 2022 г. 15:21:09(UTC)
kassfb

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

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

Сказал(а) «Спасибо»: 2 раз
Всем привет. Подскажите что нужно сделать, чтобы на компоненте можно было посчитать хеш переданного сообщения и подписать его с помощью плагина.
Я делаю следующим образом. Закинул cadesplugin_api.js по пути /src/assets/js/cadesplugin_api.js, и в angular.json в массиве "scripts": ["src/assets/js/cadesplugin_api.js"] - указал путь на него.
В шаблоне компонента (.html) подключаю этот скрипт: <script language="javascript" src="/src/assets/js/cadesplugin_api.js"></script>.
Теперь хочу вызвать функцию (она также на JS):
Код:

function customSignedData(data, thumbprint, callback) {
    console.log('js customSignedData scrpt loaded!')
    var CADESCOM_HASH_ALGORITHM_CP_GOST_3411 = 100;
    var CADESCOM_BASE64_TO_BINARY = 1;
    var CAPICOM_CURRENT_USER_STORE = 2;
    var CAPICOM_MY_STORE = "my";
    var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
    var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
    var CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME = 0;
    var CADESCOM_CADES_BES = 1;

    var hashedDataPromise = cadesplugin.createObjectAsync("CAdESCOM.HashedData");
    hashedDataPromise.then(
        function(hashObject) {
            hashObject.Algorithm = CADESCOM_HASH_ALGORITHM_CP_GOST_3411;
            hashObject.DataEncoding = CADESCOM_BASE64_TO_BINARY;
            // Получение сертификата по отпечатку
            var oStorePromise = cadesplugin.createObjectAsync("CAPICOM.Store");
            oStorePromise.then(
                function(oStore) {
                    oStore.Open(CAPICOM_CURRENT_USER_STORE,
                        CAPICOM_MY_STORE,
                        CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
                    var certificate = oStore.Certificates
                        .Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint)
                        .Item(1);

                    // Подпись хэша
                    var signerPromise = cadesplugin.createObjectAsync("CAdESCOM.CPSigner");
                    signerPromise.then(
                        function (signerObject) {
                            signerObject.Certificate = certificate;
                            signerObject.TSAAddress = "https://www.cryptopro.ru/tsp/";

                            var signedDataPromise = cadesplugin.createObjectAsync("CAdESCOM.CadesSignedData");
                            signedDataPromise.then(
                                function (signedDataObject) {
                                    signedDataObject.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
                                    hashObject.Hash(data.Data);
                                    var signatureHex = signedDataObject.SignHash(hashObject, signerObject, CADESCOM_CADES_BES);
                                    data.Signature = signatureHex;
                                    data.SignDate = new Date();
                                    callback(data);
                                })
                        });
                });
        });
};

Я пробовал добавлять ее внутрь cadesplugin_api.js и вызывать оттуда; Создавал отдельный signature_script.js, подключал аналогично как плагин и объявлял в компоненте(.ts): declare function customSignedData(data: any, thumbprint: any, callback: any): any;

При вызове этой функции получаю сообщения: В первом случае: "customSignedData is not defined", во втором: "cadesplugin.createObjectAsync is not a function". т.е. во втором варианте(когда эта функция отдельно в signature_script.js) компонент ее видит, но не видит методы объекта cadesplugin. Что я делаю неправильно (может надо экспортировать что-то из cadesplugin_api.js в компонент? но там функция выглядит так
Код:
;(function () { if(window.cadesplugin) return;
  var pluginObject; ...}());

Не понимаю как заставить это работать?
Offline MikhailSSS  
#2 Оставлено : 13 декабря 2022 г. 13:06:31(UTC)
MikhailSSS

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

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

// Из базовых примеров
в CertListBox = base64_encode('тело_самого_файла'); // Лучше жать на PHP, но можно и их функцией, стандартная btoa() - глючит символы.
sign_file = Common_SignCadesBES_File('CertListBox');
alert(sign_file);

// А на самом деле из неё передаётся
в Common_SignCadesBES_File(id, thumbprint, output_sign_file);
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (3)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.