This commit is contained in:
vgoma 2020-10-17 16:47:27 +03:00
parent 4739fe3b9f
commit 29c27119de
26 changed files with 279 additions and 160 deletions

View File

@ -1,98 +0,0 @@
2.0.5 / 2020-07-04
==================
* Улучшение: Дополнены словари для расшифровки данных о сертификате
2.0.4 / 2020-04-05
==================
* Улучшение: Исправлены ссылки в README.md
* Улучшение: Добавлен файл с лицензией
* Улучшение: Обновлены версии пакета в примерах
2.0.3 / 2020-03-29
==================
* Улучшение: Дополнен README.md
2.0.2 / 2020-03-29
==================
* Фикс: Исправлены ссылки в README.md с учетом разницы форматов Markdown между Github и NPM
2.0.1 / 2020-03-28
==================
* Фикс: Ссылки на якоря в README.md с учетом особенностей Markdown на Github
2.0.0 / 2020-03-28
==================
* Улучшение: Проект переписан с использованием Typescript
* Улучшение: В Readme обновлены примеры, документация и добавлен [список изменений](README.md#Миграция-с-версии-1-на-2) для миграции с 1 на 2 версию
1.1.2 / 2019-12-07
==================
* Фикс: Дополнена [обработка ошибок](https://github.com/vgoma/crypto-pro/issues/8)
1.1.1 / 2019-12-05
==================
* Улучшение: Добавлены изменения из оригинального js модуля Крипто ПРО "2.1.2" [ссылка на оригинальный файл](https://www.cryptopro.ru/sites/default/files/products/cades/cadesplugin_api.js)
1.1.0 / 2017-12-20
==================
* Улучшение: объединена кодовая база по работе с синхронной и асинхронной версии API Крипто ПРО
1.0.11 / 2017-06-08
==================
* Улучшение: Убрана зависимость от Object.keys и Object.assign
1.0.10 / 2017-04-26
==================
* Фикс: уточнения в README
1.0.9 / 2017-04-26
==================
* Фикс: оформление README
1.0.8 / 2017-04-26
==================
* Улучшение: Добавлена поддержка Firefox >= 52
* Улучшение: Более подробный README
1.0.7 / 2017-01-30
==================
* Улучшение: Указание отпечатка сертификата при ошибке доступа к нему
1.0.6 / 2017-01-30
==================
* Фикс: Проброс ошибки метода получения сертификатов по цепочке промисов
1.0.5 / 2017-01-24
==================
* Улучшение: Фиксация версий всех зависимостей
1.0.4 / 2017-01-20
==================
* Улучшение: Добавлены изменения из оригинального js модуля Крипто ПРО "2.0.3" [ссылка на оригинальный файл](https://www.cryptopro.ru/sites/default/files/products/cades/cadesplugin_api.js)
1.0.3 / 2017-01-20
==================
* Улучшение: Убрана попытка загрузки сразу двух расширений (для Opera и для Chrome)
1.0.2 / 2017-01-16
==================
* Улучшение: Добавлена возможность подключать модуль напрямую из папки src/ для приложений, собираемых webpack'ом

View File

@ -108,7 +108,12 @@ import { getUserCertificates, Certificate } from 'crypto-pro';
### Методы объекта cryptoPro
- [getUserCertificates](src/api/getUserCertificates.ts) - возвращает список [сертификатов](#api-certificate), доступных пользователю в системе
- [getCertificate](src/api/getCertificate.ts) - возвращает [сертификат](#api-certificate) по отпечатку
- [createSignature](src/api/createSignature.ts) - создает подпись данных
- [createAttachedSignature](src/api/createAttachedSignature.ts) - создает совмещенную (присоединенную) подпись сообщения
- [createDetachedSignature](src/api/createDetachedSignature.ts) - создает отсоединенную (открепленную) подпись сообщения
- [createHash](src/api/createHash.ts) - создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
- [createSignature](src/api/createSignature.ts) - создает подпись сообщения
> Является устаревшим и будет убран из будущих версий.
Используйте "createAttachedSignature" и "createDetachedSignature".
- [getSystemInfo](src/api/getSystemInfo.ts) - возвращает информацию о CSP и плагине
- [isValidSystemSetup](src/api/isValidSystemSetup.ts) - возвращает флаг корректности настроек ЭП на машине

View File

@ -1,9 +1,9 @@
/**
* Создает хэш сообщения по ГОСТ Р 34.11-2012 256 бит
* Создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
* https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%B8%D0%B1%D0%BE%D0%B3_(%D1%85%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F)
*
* @param unencryptedMessage - сообщение для хеширования
*
* @returns хэш
* @returns хеш
*/
export declare const createHash: (unencryptedMessage: string | ArrayBuffer) => Promise<string>;

View File

@ -2,7 +2,7 @@
* Создает подпись base64 строки по отпечатку сертификата
*
* @param thumbprint - отпечаток сертификата
* @param messageHash - хэш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
* @param detachedSignature = true - тип подписи открепленная (true) / присоединенная (false)
* @returns подпись
*/

View File

@ -1,8 +0,0 @@
/**
* Создает подпись хеша по отпечатку сертификата
*
* @param thumbprint - отпечаток сертификата
* @param messageHash - хэш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
* @returns подпись
*/
export declare const signHash: (thumbprint: string, messageHash: string) => Promise<string>;

View File

@ -1 +1,7 @@
// Type definitions for crypto-pro 2.1.0
// Project: crypto-pro
// Definitions by: Vitalii Goma https://github.com/vgoma
export as namespace cryptoPro;
export * from './api';

22
dist/crypto-pro.js vendored
View File

@ -2904,10 +2904,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
}
};
Object.defineProperty(exports, "__esModule", { value: true });
var constants_1 = __webpack_require__(/*! ../constants */ "./constants/index.ts");
var _afterPluginsLoaded_1 = __webpack_require__(/*! ../helpers/_afterPluginsLoaded */ "./helpers/_afterPluginsLoaded.ts");
var _extractMeaningfulErrorMessage_1 = __webpack_require__(/*! ../helpers/_extractMeaningfulErrorMessage */ "./helpers/_extractMeaningfulErrorMessage.ts");
var _generateCadesFn_1 = __webpack_require__(/*! ../helpers/_generateCadesFn */ "./helpers/_generateCadesFn.ts");
var _getCadesCert_1 = __webpack_require__(/*! ../helpers/_getCadesCert */ "./helpers/_getCadesCert.ts");
var _getDateObj_1 = __webpack_require__(/*! ../helpers/_getDateObj */ "./helpers/_getDateObj.ts");
/**
* Создает отсоединенную подпись хеша по отпечатку сертификата
*
@ -2925,10 +2927,12 @@ exports.createDetachedSignature = _afterPluginsLoaded_1._afterPluginsLoaded(func
case 1:
cadesCertificate = _a.sent();
return [2 /*return*/, eval(_generateCadesFn_1._generateCadesFn(function createDetachedSignature() {
var cadesAttrs;
var cadesHashedData;
var cadesSignedData;
var cadesSigner;
try {
cadesAttrs = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CADESCOM.CPAttribute');
cadesHashedData = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CAdESCOM.HashedData');
cadesSignedData = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CAdESCOM.CadesSignedData');
cadesSigner = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CAdESCOM.CPSigner');
@ -2937,8 +2941,20 @@ exports.createDetachedSignature = _afterPluginsLoaded_1._afterPluginsLoaded(func
console.error(error);
throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при инициализации подписи');
}
var currentTime = _getDateObj_1._getDateObj(new Date());
try {
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesAttrs.propset_Name(constants_1.CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME));
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesAttrs.propset_Value(currentTime));
}
catch (error) {
console.error(error);
throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при установке времени подписи');
}
var cadesAuthAttrs;
try {
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesSigner.propset_Certificate(cadesCertificate));
cadesAuthAttrs = _generateCadesFn_1.__cadesAsyncToken__ + cadesSigner.AuthenticatedAttributes2;
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesAuthAttrs.Add(cadesAttrs));
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN));
}
catch (error) {
@ -3023,12 +3039,12 @@ var _afterPluginsLoaded_1 = __webpack_require__(/*! ../helpers/_afterPluginsLoad
var _extractMeaningfulErrorMessage_1 = __webpack_require__(/*! ../helpers/_extractMeaningfulErrorMessage */ "./helpers/_extractMeaningfulErrorMessage.ts");
var _generateCadesFn_1 = __webpack_require__(/*! ../helpers/_generateCadesFn */ "./helpers/_generateCadesFn.ts");
/**
* Создает хэш сообщения по ГОСТ Р 34.11-2012 256 бит
* Создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
* https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%B8%D0%B1%D0%BE%D0%B3_(%D1%85%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F)
*
* @param unencryptedMessage - сообщение для хеширования
*
* @returns хэш
* @returns хеш
*/
exports.createHash = _afterPluginsLoaded_1._afterPluginsLoaded(function (unencryptedMessage) { return __awaiter(void 0, void 0, void 0, function () {
var cadesplugin;
@ -3127,7 +3143,7 @@ var _getDateObj_1 = __webpack_require__(/*! ../helpers/_getDateObj */ "./helpers
* Создает подпись base64 строки по отпечатку сертификата
*
* @param thumbprint - отпечаток сертификата
* @param messageHash - хэш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
* @param detachedSignature = true - тип подписи открепленная (true) / присоединенная (false)
* @returns подпись
*/

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -3308,9 +3308,9 @@
}
},
"crypto-pro": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/crypto-pro/-/crypto-pro-2.0.5.tgz",
"integrity": "sha512-YZbVNt9ZmE75H97gdqS2ZGW8xnuHxdvQxLH/SmMQIizIBLmMIylOhY3HvgEUxnrIkL64/m6vrG5H2w7pGTb17Q=="
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/crypto-pro/-/crypto-pro-2.1.0.tgz",
"integrity": "sha512-zLPX/m51fiMS6aWXZ8e8e/Lcw/8VkeIlMo0nvsdvMik6koec+UbNP+syRp07eWJEmRDb8IZLjzLGjrb0oGT64g=="
},
"css": {
"version": "2.2.4",

View File

@ -21,7 +21,7 @@
"@angular/platform-browser": "~9.0.7",
"@angular/platform-browser-dynamic": "~9.0.7",
"@angular/router": "~9.0.7",
"crypto-pro": "2.0.5",
"crypto-pro": "2.1.0",
"rxjs": "~6.5.4",
"tslib": "^1.10.0",
"zone.js": "~0.10.2"

View File

@ -3712,9 +3712,9 @@
}
},
"crypto-pro": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/crypto-pro/-/crypto-pro-2.0.5.tgz",
"integrity": "sha512-YZbVNt9ZmE75H97gdqS2ZGW8xnuHxdvQxLH/SmMQIizIBLmMIylOhY3HvgEUxnrIkL64/m6vrG5H2w7pGTb17Q=="
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/crypto-pro/-/crypto-pro-2.1.0.tgz",
"integrity": "sha512-zLPX/m51fiMS6aWXZ8e8e/Lcw/8VkeIlMo0nvsdvMik6koec+UbNP+syRp07eWJEmRDb8IZLjzLGjrb0oGT64g=="
},
"css": {
"version": "2.2.4",

View File

@ -7,7 +7,7 @@
"@testing-library/jest-dom": "4.2.4",
"@testing-library/react": "9.5.0",
"@testing-library/user-event": "7.2.1",
"crypto-pro": "2.0.5",
"crypto-pro": "2.1.0",
"react": "^16.13.1",
"react-app-polyfill": "1.0.6",
"react-dom": "^16.13.1",

View File

@ -42,9 +42,9 @@
"dev": true
},
"crypto-pro": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/crypto-pro/-/crypto-pro-2.0.5.tgz",
"integrity": "sha512-YZbVNt9ZmE75H97gdqS2ZGW8xnuHxdvQxLH/SmMQIizIBLmMIylOhY3HvgEUxnrIkL64/m6vrG5H2w7pGTb17Q=="
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/crypto-pro/-/crypto-pro-2.1.0.tgz",
"integrity": "sha512-zLPX/m51fiMS6aWXZ8e8e/Lcw/8VkeIlMo0nvsdvMik6koec+UbNP+syRp07eWJEmRDb8IZLjzLGjrb0oGT64g=="
},
"fs.realpath": {
"version": "1.0.0",

View File

@ -13,6 +13,6 @@
"symlink-dir": "3.1.2"
},
"dependencies": {
"crypto-pro": "2.0.5"
"crypto-pro": "2.1.0"
}
}

8
lib/api/createAttachedSignature.d.ts vendored Normal file
View File

@ -0,0 +1,8 @@
/**
* Создает присоединенную подпись сообщения по отпечатку сертификата
*
* @param thumbprint - отпечаток сертификата
* @param message - подписываемое сообщение
* @returns подпись в формате PKCS#7
*/
export declare const createAttachedSignature: (thumbprint: string, unencryptedMessage: string | ArrayBuffer) => Promise<string>;

8
lib/api/createDetachedSignature.d.ts vendored Normal file
View File

@ -0,0 +1,8 @@
/**
* Создает отсоединенную подпись хеша по отпечатку сертификата
*
* @param thumbprint - отпечаток сертификата
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11-2012 256 бит
* @returns подпись в формате PKCS#7
*/
export declare const createDetachedSignature: (thumbprint: string, messageHash: string) => Promise<string>;

View File

@ -1,18 +1,9 @@
declare type Algorithm = 'GOST_3411' | 'GOST_3411_2012_256' | 'GOST_3411_2012_512' | 'GOST_3411_HMAC' | 'GOST_3411_2012_256_HMAC' | 'GOST_3411_2012_512_HMAC';
/**
* Создает хэш сообщения по ГОСТ Р 34.11
* Создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
* https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%B8%D0%B1%D0%BE%D0%B3_(%D1%85%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F)
*
* @param unencryptedMessage - сообщение для хеширования
* @param algorithm - один из алгоритмов хеширования:
* GOST_3411
* GOST_3411_2012_256
* GOST_3411_2012_512 - по умолчанию
* GOST_3411_HMAC
* GOST_3411_2012_256_HMAC
* GOST_3411_2012_512_HMAC
*
* @returns хэш
* @returns хеш
*/
export declare const createHash: (unencryptedMessage: string | ArrayBuffer, algorithm?: Algorithm) => Promise<string>;
export {};
export declare const createHash: (unencryptedMessage: string | ArrayBuffer) => Promise<string>;

View File

@ -2,7 +2,7 @@
* Создает подпись base64 строки по отпечатку сертификата
*
* @param thumbprint - отпечаток сертификата
* @param messageHash - хэш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
* @param detachedSignature = true - тип подписи открепленная (true) / присоединенная (false)
* @returns подпись
*/

2
lib/api/index.d.ts vendored
View File

@ -3,5 +3,7 @@ export * from './getUserCertificates';
export * from './getSystemInfo';
export * from './isValidSystemSetup';
export * from './createSignature';
export * from './createDetachedSignature';
export * from './createAttachedSignature';
export * from './createHash';
export * from './certificate';

2
lib/crypto-pro.d.ts vendored
View File

@ -1,4 +1,4 @@
// Type definitions for crypto-pro 2.0.5
// Type definitions for crypto-pro 2.1.0
// Project: crypto-pro
// Definitions by: Vitalii Goma https://github.com/vgoma

View File

@ -2611,6 +2611,196 @@ exports.isValid = _afterPluginsLoaded_1._afterPluginsLoaded(function () {
});
/***/ }),
/***/ "./api/createAttachedSignature.ts":
/*!****************************************!*\
!*** ./api/createAttachedSignature.ts ***!
\****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(Buffer) {
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = __webpack_require__(/*! ../constants */ "./constants/index.ts");
const _afterPluginsLoaded_1 = __webpack_require__(/*! ../helpers/_afterPluginsLoaded */ "./helpers/_afterPluginsLoaded.ts");
const _extractMeaningfulErrorMessage_1 = __webpack_require__(/*! ../helpers/_extractMeaningfulErrorMessage */ "./helpers/_extractMeaningfulErrorMessage.ts");
const _generateCadesFn_1 = __webpack_require__(/*! ../helpers/_generateCadesFn */ "./helpers/_generateCadesFn.ts");
const _getCadesCert_1 = __webpack_require__(/*! ../helpers/_getCadesCert */ "./helpers/_getCadesCert.ts");
const _getDateObj_1 = __webpack_require__(/*! ../helpers/_getDateObj */ "./helpers/_getDateObj.ts");
/**
* Создает присоединенную подпись сообщения по отпечатку сертификата
*
* @param thumbprint - отпечаток сертификата
* @param message - подписываемое сообщение
* @returns подпись в формате PKCS#7
*/
exports.createAttachedSignature = _afterPluginsLoaded_1._afterPluginsLoaded((thumbprint, unencryptedMessage) => __awaiter(void 0, void 0, void 0, function* () {
const { cadesplugin } = window;
const cadesCertificate = yield _getCadesCert_1._getCadesCert(thumbprint);
return eval(_generateCadesFn_1._generateCadesFn(function createAttachedSignature() {
let cadesAttrs;
let cadesSignedData;
let cadesSigner;
try {
cadesAttrs = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CADESCOM.CPAttribute');
cadesSignedData = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CAdESCOM.CadesSignedData');
cadesSigner = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CAdESCOM.CPSigner');
}
catch (error) {
console.error(error);
throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при инициализации подписи');
}
const currentTime = _getDateObj_1._getDateObj(new Date());
try {
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesAttrs.propset_Name(constants_1.CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME));
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesAttrs.propset_Value(currentTime));
}
catch (error) {
console.error(error);
throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при установке времени подписи');
}
let messageBase64;
try {
messageBase64 = Buffer.from(unencryptedMessage).toString('base64');
}
catch (error) {
console.error(error);
throw new Error('Ошибка при преобразовании сообщения в Base64');
}
let cadesAuthAttrs;
try {
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesSigner.propset_Certificate(cadesCertificate));
cadesAuthAttrs = _generateCadesFn_1.__cadesAsyncToken__ + cadesSigner.AuthenticatedAttributes2;
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesAuthAttrs.Add(cadesAttrs));
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY));
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesSignedData.propset_Content(messageBase64));
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN));
}
catch (error) {
console.error(error);
throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при указании данных для подписи');
}
let signature;
try {
signature = _generateCadesFn_1.__cadesAsyncToken__ + cadesSignedData.SignCades(cadesSigner, cadesplugin.CADESCOM_PKCS7_TYPE);
}
catch (error) {
console.error(error);
throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при подписании данных');
}
return signature;
}));
}));
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/buffer/index.js */ "../node_modules/buffer/index.js").Buffer))
/***/ }),
/***/ "./api/createDetachedSignature.ts":
/*!****************************************!*\
!*** ./api/createDetachedSignature.ts ***!
\****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = __webpack_require__(/*! ../constants */ "./constants/index.ts");
const _afterPluginsLoaded_1 = __webpack_require__(/*! ../helpers/_afterPluginsLoaded */ "./helpers/_afterPluginsLoaded.ts");
const _extractMeaningfulErrorMessage_1 = __webpack_require__(/*! ../helpers/_extractMeaningfulErrorMessage */ "./helpers/_extractMeaningfulErrorMessage.ts");
const _generateCadesFn_1 = __webpack_require__(/*! ../helpers/_generateCadesFn */ "./helpers/_generateCadesFn.ts");
const _getCadesCert_1 = __webpack_require__(/*! ../helpers/_getCadesCert */ "./helpers/_getCadesCert.ts");
const _getDateObj_1 = __webpack_require__(/*! ../helpers/_getDateObj */ "./helpers/_getDateObj.ts");
/**
* Создает отсоединенную подпись хеша по отпечатку сертификата
*
* @param thumbprint - отпечаток сертификата
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11-2012 256 бит
* @returns подпись в формате PKCS#7
*/
exports.createDetachedSignature = _afterPluginsLoaded_1._afterPluginsLoaded((thumbprint, messageHash) => __awaiter(void 0, void 0, void 0, function* () {
const { cadesplugin } = window;
const cadesCertificate = yield _getCadesCert_1._getCadesCert(thumbprint);
return eval(_generateCadesFn_1._generateCadesFn(function createDetachedSignature() {
let cadesAttrs;
let cadesHashedData;
let cadesSignedData;
let cadesSigner;
try {
cadesAttrs = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CADESCOM.CPAttribute');
cadesHashedData = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CAdESCOM.HashedData');
cadesSignedData = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CAdESCOM.CadesSignedData');
cadesSigner = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CAdESCOM.CPSigner');
}
catch (error) {
console.error(error);
throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при инициализации подписи');
}
const currentTime = _getDateObj_1._getDateObj(new Date());
try {
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesAttrs.propset_Name(constants_1.CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME));
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesAttrs.propset_Value(currentTime));
}
catch (error) {
console.error(error);
throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при установке времени подписи');
}
let cadesAuthAttrs;
try {
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesSigner.propset_Certificate(cadesCertificate));
cadesAuthAttrs = _generateCadesFn_1.__cadesAsyncToken__ + cadesSigner.AuthenticatedAttributes2;
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesAuthAttrs.Add(cadesAttrs));
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN));
}
catch (error) {
console.error(error);
throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при установке сертификата');
}
try {
void (_generateCadesFn_1.__cadesAsyncToken__ +
cadesHashedData.propset_Algorithm(cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256));
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesHashedData.SetHashValue(messageHash));
}
catch (error) {
console.error(error);
throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при установке хеша');
}
let signature;
try {
signature =
_generateCadesFn_1.__cadesAsyncToken__ +
cadesSignedData.SignHash(cadesHashedData, cadesSigner, cadesplugin.CADESCOM_PKCS7_TYPE);
}
catch (error) {
console.error(error);
throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при подписании данных');
}
return signature;
}));
}));
/***/ }),
/***/ "./api/createHash.ts":
@ -2636,21 +2826,14 @@ const _afterPluginsLoaded_1 = __webpack_require__(/*! ../helpers/_afterPluginsLo
const _extractMeaningfulErrorMessage_1 = __webpack_require__(/*! ../helpers/_extractMeaningfulErrorMessage */ "./helpers/_extractMeaningfulErrorMessage.ts");
const _generateCadesFn_1 = __webpack_require__(/*! ../helpers/_generateCadesFn */ "./helpers/_generateCadesFn.ts");
/**
* Создает хэш сообщения по ГОСТ Р 34.11
* Создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
* https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%B8%D0%B1%D0%BE%D0%B3_(%D1%85%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F)
*
* @param unencryptedMessage - сообщение для хеширования
* @param algorithm - один из алгоритмов хеширования:
* GOST_3411
* GOST_3411_2012_256
* GOST_3411_2012_512 - по умолчанию
* GOST_3411_HMAC
* GOST_3411_2012_256_HMAC
* GOST_3411_2012_512_HMAC
*
* @returns хэш
* @returns хеш
*/
exports.createHash = _afterPluginsLoaded_1._afterPluginsLoaded((unencryptedMessage, algorithm = 'GOST_3411_2012_512') => __awaiter(void 0, void 0, void 0, function* () {
exports.createHash = _afterPluginsLoaded_1._afterPluginsLoaded((unencryptedMessage) => __awaiter(void 0, void 0, void 0, function* () {
const { cadesplugin } = window;
return eval(_generateCadesFn_1._generateCadesFn(function createHash() {
const cadesHashedData = _generateCadesFn_1.__cadesAsyncToken__ + _generateCadesFn_1.__createCadesPluginObject__('CAdESCOM.HashedData');
@ -2665,7 +2848,7 @@ exports.createHash = _afterPluginsLoaded_1._afterPluginsLoaded((unencryptedMessa
}
try {
void (_generateCadesFn_1.__cadesAsyncToken__ +
cadesHashedData.propset_Algorithm(cadesplugin['CADESCOM_HASH_ALGORITHM_CP_' + algorithm]));
cadesHashedData.propset_Algorithm(cadesplugin.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256));
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesHashedData.propset_DataEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY));
void (_generateCadesFn_1.__cadesAsyncToken__ + cadesHashedData.Hash(messageBase64));
}
@ -2717,11 +2900,15 @@ const _getDateObj_1 = __webpack_require__(/*! ../helpers/_getDateObj */ "./helpe
* Создает подпись base64 строки по отпечатку сертификата
*
* @param thumbprint - отпечаток сертификата
* @param messageHash - хэш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
* @param messageHash - хеш подписываемого сообщения, сгенерированный по ГОСТ Р 34.11
* @param detachedSignature = true - тип подписи открепленная (true) / присоединенная (false)
* @returns подпись
*/
exports.createSignature = _afterPluginsLoaded_1._afterPluginsLoaded((thumbprint, messageHash, detachedSignature = true) => __awaiter(void 0, void 0, void 0, function* () {
console.warn([
'cryptoPro: Метод "createSignature" является устаревшим и будет убран из будущих версий.',
'Используйте "createAttachedSignature" и "createDetachedSignature".',
].join('\n'));
const { cadesplugin } = window;
const cadesCertificate = yield _getCadesCert_1._getCadesCert(thumbprint);
return eval(_generateCadesFn_1._generateCadesFn(function createSignature() {
@ -2972,6 +3159,8 @@ __export(__webpack_require__(/*! ./getUserCertificates */ "./api/getUserCertific
__export(__webpack_require__(/*! ./getSystemInfo */ "./api/getSystemInfo.ts"));
__export(__webpack_require__(/*! ./isValidSystemSetup */ "./api/isValidSystemSetup.ts"));
__export(__webpack_require__(/*! ./createSignature */ "./api/createSignature.ts"));
__export(__webpack_require__(/*! ./createDetachedSignature */ "./api/createDetachedSignature.ts"));
__export(__webpack_require__(/*! ./createAttachedSignature */ "./api/createAttachedSignature.ts"));
__export(__webpack_require__(/*! ./createHash */ "./api/createHash.ts"));
__export(__webpack_require__(/*! ./certificate */ "./api/certificate/index.ts"));

File diff suppressed because one or more lines are too long

2
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "crypto-pro",
"version": "2.0.5",
"version": "2.1.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "crypto-pro",
"version": "2.0.5",
"version": "2.1.0",
"description": "API для взаимодействия с КриптоПро",
"main": "./lib/crypto-pro.js",
"types": "./lib/crypto-pro.d.ts",