6.5 KiB
6.5 KiB
Библиотека для работы с подписью данных @msb/crypto
- Состоит из 4 модулей:
- core - ядро библиотеки для работы с подписью данных
- install - модуль для проверки и установки криптомодуля
- sign - модуль для подписи данных
- verify - модуль для проверки подписи данных
-
Установить зависимости:
npm i @msb/crypto -
Инструкция для установки криптомодуля и сертификатов (https://confluence.gboteam.ru/pages/viewpage.action?pageId=121085377)
-
Пример использования подписания документов:
/* eslint-disable @typescript-eslint/no-confusing-void-expression */
import type { FC } from 'react';
import { Button } from '@fractal-ui/core';
import type { ISignModalProps, ISignModalApi, ISignRequestData, IBaseEntity } from '@msb/crypto';
import { openSignModal } from '@msb/crypto';
const service = {
sign: (docs: ISignRequestData[]) => docs.map((doc, index) => ({ id: doc.id ?? `ID ${index}` })),
getSignData: async () => {
const response = {
data: {
signDocuments: [
{
documentId: 'db20e321-7ed1-41a8-865b-b6b7ef6097a4',
clientId: 'fb188766-6eff-4122-897e-0c24364c4ea2',
signDataList: [
{
id: 'db20e321-7ed1-41a8-865b-b6b7ef6097a4',
label: 'Письмо в Банк №28 от 08.08.2025',
dssLabel: 'Письмо в Банк №28 от 08.08.2025',
digest:
'eyJpZCI6ImRiMjBlMzIxLTdlZDEtNDFhOC04NjViLWI2YjdlZjYwOTdhNCIsImRhdGUiOiIyMDI1LTA4LTA4IiwibnVtYmVyIjoyOCwiYmFua0NsaWVudEluZm8ubmFtZSI6ItCd0JrQniBcItCU0L7RgNGC0LXRhS3Qv9GA0LjRhtC10L9cIiIsImJhbmtDbGllbnRJbmZvLmludGVybmF0aW9uYWxOYW1lIjoiTktPIFwiRG9ydGVraC1wcml0c2VwXCIiLCJiYW5rQ2xpZW50SW5mby5pbm5LaW8iOiI3NzQ1MDMyMzYwIiwiYmFua0NsaWVudEluZm8ub2dybk9ncmlwIjoiNTg1OTQyOTM1MDY4NyIsInR5cGVOYW1lIjoidGVzdDIiLCJhdHRhY2htZW50cy5maWxlTmFtZSI6WyJ0ZXN0LnR4dCJdLCJhdHRhY2htZW50cy5maWxlSGFzaCI6WyIxMmE1MDgzODE5MWI1NTA0ZjFlNWYyZmQwNzg3MTRjZjZiNTkyYjlkMjlhZjk5ZDBiMTBkOGQwMjg4MWMzODU3Il0sImF0dGFjaG1lbnRzLmZpbGVTaXplIjpbNF0sImJyYW5jaEluZm8uZmlsaWFsTmFtZSI6ItCkLdCbINCR0JDQndCa0JAg0JPQn9CRICjQkNCeKSBcItCf0KDQmNCS0J7Qm9CW0KHQmtCY0JlcIiIsImJyYW5jaEluZm8uYmljIjoiMDQyMjAyNzY0IiwiYnJhbmNoSW5mby5jb2RlIjoiMDEwIn0=',
type: 'DOCUMENT',
signDataViewList: [
{
label: 'Основная информация',
signFieldsViewList: [
{
label: 'Тип документа',
value: 'test2',
},
],
},
{
label: 'Отправитель',
signFieldsViewList: [
{
label: 'Организация',
value: 'НКО "Дортех-прицеп"',
},
{
label: 'Международное наименование организации',
value: 'NKO "Dortekh-pritsep"',
},
{
label: 'ИНН',
value: '7745032360',
},
{
label: 'ОГРН',
value: '5859429350687',
},
],
},
{
label: 'Получатель',
signFieldsViewList: [
{
label: 'Филиал',
value: '010 Ф-Л БАНКА ГПБ (АО) "ПРИВОЛЖСКИЙ"',
},
{
label: 'БИК',
value: '042202764',
},
],
},
],
},
{
id: '526e7ed4-019b-489e-8f67-11c540e7179e',
label: 'Вложение №1',
dssLabel: 'Вложение №1',
type: 'ATTACHMENT',
signDataViewList: [
{
label: 'Описание вложения',
signFieldsViewList: [
{
label: 'Наименование файла',
value: 'test.txt',
},
{
label: 'Хешсумма',
value: '12a50838191b5504f1e5f2fd078714cf6b592b9d29af99d0b10d8d02881c3857',
},
{
label: 'Размер',
value: '4 б',
},
],
},
],
},
],
},
],
},
};
if (response?.data?.signDocuments) {
return { signDocuments: (response.data?.signDocuments ?? []).map(signDocument => ({ ...signDocument, clientId: '' })) };
}
return Promise.reject({ error: '' });
},
send: (sendData: IBaseEntity[]) => Promise.resolve(sendData.map((doc, index) => doc.id ?? `ID ${index}`)),
} as unknown as ISignModalApi;
const SignDataComponent: FC<ISignModalProps['modalParams'] & Pick<ISignModalProps, 'type'>> = ({ type, ...props }) => {
const handleClick = async () => {
try {
await openSignModal({
api: service,
signData: {
documentsRegistry: [
{
documents: [{ id: 'db20e321-7ed1-41a8-865b-b6b7ef6097a4' }],
clientId: 'fb188766-6eff-4122-897e-0c24364c4ea2',
clientName: '',
},
],
statistics: {
documentsCount: 10,
documentsSum: 0,
clientsCount: 1,
},
},
type,
});
} catch (e: unknown) {
console.error(JSON.stringify(e));
}
};
return (
<Button dataAction="open-installer" onClick={handleClick}>
Открыть
</Button>
);
};
export { SignDataComponent };
- Пример использования @eco/crypto в стриме @eco/dsf (https://bitbucket.gboteam.ru/projects/ECO_FE/repos/eco-dsf/browse)