Compare commits

..

137 Commits

Author SHA1 Message Date
dependabot[bot]
d8622ff6df
Bump webpack from 5.75.0 to 5.97.1 (#55)
Bumps [webpack](https://github.com/webpack/webpack) from 5.75.0 to 5.97.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.75.0...v5.97.1)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Artem Vasilev <kernusr@users.noreply.github.com>
2025-02-07 14:22:09 +03:00
dependabot[bot]
d4b7a9cb29
Bump @babel/traverse from 7.20.1 to 7.26.7 (#53)
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.20.1 to 7.26.7.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.7/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Artem Vasilev <kernusr@users.noreply.github.com>
2025-02-07 14:20:41 +03:00
dependabot[bot]
f0ae6b76f0
Bump ws from 7.5.9 to 7.5.10 (#51)
Bumps [ws](https://github.com/websockets/ws) from 7.5.9 to 7.5.10.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.5.9...7.5.10)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-07 14:15:40 +03:00
dependabot[bot]
1f59f7e97e
Bump json5, ts-loader, webpack and webpack-cli (#44)
Bumps [json5](https://github.com/json5/json5) to 2.2.3 and updates ancestor dependencies [json5](https://github.com/json5/json5), [ts-loader](https://github.com/TypeStrong/ts-loader), [webpack](https://github.com/webpack/webpack) and [webpack-cli](https://github.com/webpack/webpack-cli). These dependencies need to be updated together.


Updates `json5` from 2.2.1 to 2.2.3
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)

Updates `ts-loader` from 6.2.2 to 9.4.2
- [Release notes](https://github.com/TypeStrong/ts-loader/releases)
- [Changelog](https://github.com/TypeStrong/ts-loader/blob/main/CHANGELOG.md)
- [Commits](https://github.com/TypeStrong/ts-loader/compare/v6.2.2...v9.4.2)

Updates `webpack` from 4.46.0 to 5.75.0
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v4.46.0...v5.75.0)

Updates `webpack-cli` from 3.3.12 to 5.0.1
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/v3.3.12...webpack-cli@5.0.1)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
- dependency-name: ts-loader
  dependency-type: direct:development
- dependency-name: webpack
  dependency-type: direct:development
- dependency-name: webpack-cli
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Artem Vasilev <kernusr@users.noreply.github.com>
2025-02-07 13:52:43 +03:00
dependabot[bot]
e69224b8b9
Bump decode-uri-component from 0.2.0 to 0.2.2 (#42)
Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Artem Vasilev <kernusr@users.noreply.github.com>
2025-02-07 13:47:01 +03:00
dependabot[bot]
3f84487ee8
Bump minimatch from 3.0.4 to 3.1.2 in /examples/script-tag (#32)
Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.0.4 to 3.1.2.
- [Release notes](https://github.com/isaacs/minimatch/releases)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-07 13:45:23 +03:00
Artem Vasilev
c09fac36c3
Исправления в соответсвии с приказом ФСБ России (#40)
Внесены изменения с учётом Приказа ФСБ России от 13.04.2021 N 142 "О внесении изменения в приказ ФСБ России от 27 декабря 2011 г. N 796 "Об утверждении Требований к средствам электронной подписи и Требований к средствам удостоверяющего центра"

* Добавил чтение полей, перечисленных в приказе ФСБ России от 27 декабря 2011 г. N 796

* Добавил OIDы полей, перечисленных в приказе ФСБ России от 27 декабря 2011 г. N 796

* Расширил варианты названия для полей подписи, в соответствии с рекомендациями ISO/IEC 9594-8:2008

* Выпуск версии 2.3.3
2022-11-11 19:40:20 +03:00
Artem Vasilev
35d99909a8
Обновил зависимости (#39) 2022-11-11 15:37:35 +03:00
Artem Vasilev
319068ffdd
run test only on node 16 (#38)
* run test on node 16 and LTS (18)

* specify the required Node.js version

* run only on node 16
2022-11-10 18:30:19 +03:00
dependabot[bot]
aab6c56ca9
Bump terser from 4.8.0 to 4.8.1 (#30)
Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 4.8.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-11-10 14:59:03 +03:00
Artem Vasilev
db9b5e0a6b
2.3.2 release (#29) 2022-06-23 13:48:07 +03:00
Artem Vasilev
51ed50491a
Добавил новые методы для получения сертификатов (#28)
* Добавил новые методы для получения сертификатов

* Методы загрузки объединённого списка сертификатов из личного хранилища и из закрытого ключа

* Поиск сертификата в объединённом списке сертификатов из личного хранилища и из закрытого ключа

* Получение сертификата в формате Cades из личного хранилища пользователя и хранилища закрытого ключа

* в примере получает список сертификатов из всех доступных источников

* build с последними изменениями

* linter fixes
2022-06-23 13:13:33 +03:00
Artem Vasilev
652cc4d23e
Обновил adesplagin_api.js до 2.3.2 (#26) 2022-06-22 21:30:20 +03:00
dependabot[bot]
484c1148ea
Bump ansi-regex from 4.1.0 to 4.1.1 (#25)
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Artem Vasilev <kernusr@users.noreply.github.com>
2022-06-22 19:53:21 +03:00
dependabot[bot]
5ebb1a0200
Bump minimist from 1.2.5 to 1.2.6 (#23)
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Artem Vasilev <kernusr@users.noreply.github.com>
2022-06-22 19:51:10 +03:00
Artem Vasilev
b5e77486ab
GitHub actions (#24)
* Добавил workflows для github actions
2022-06-22 19:45:45 +03:00
Artem Vasilev
7e43d21286
Merge pull request #22 from webmasterskaya/stage
Потерял dist
2021-09-15 14:10:43 +03:00
Artem Vasilev
9d60469625
Merge branch 'master' into stage 2021-09-15 14:03:12 +03:00
73dd1c82e1 Release 2.3.1 2021-09-15 14:00:09 +03:00
Artem Vasilev
15a1b84e94
v.2.3.1 Release (#21)
- Обновил cadesplugin_api до версии `2.3.1`
 - Обновления безопасности
 - Обновления зависимостей
 - Исправлена работа примера script-tag
 - Прекращена поддержка примеров на React и Angular
 - Исправления в Readme
 - Изменения в лицензии
2021-09-15 13:57:05 +03:00
f21a69bee5 FIX bower config 2021-09-15 13:48:00 +03:00
9f38d4694a Release 2.3.1 2021-09-15 13:26:23 +03:00
d18436d1d5 Удалил поддержку примеров Angular и React 2021-09-15 12:25:29 +03:00
0a315c5a19 Добавил в readme описание по вопросу ошибки в #20 2021-09-14 19:27:10 +03:00
34b4e23404 Update cadesplugin_api to v.2.3.1 2021-09-14 19:21:59 +03:00
a99231bc9a Поправил меню 2021-09-14 16:53:30 +03:00
c9d3f4931d Поправил пример для работы с crypto-pro-js 2021-09-14 16:48:39 +03:00
52f4ba1647 Update dependencies 2021-09-14 16:27:42 +03:00
dependabot[bot]
5cf3738e6b
Bump tar from 6.0.1 to 6.1.9 (#19)
Bumps [tar](https://github.com/npm/node-tar) from 6.0.1 to 6.1.9.
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/npm/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v6.0.1...v6.1.9)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-14 16:15:11 +03:00
9cda106243 Передал репозиторий в webmasterskaya 2021-09-14 16:08:44 +03:00
ca1411d670 Поправил описание 2021-09-14 16:07:49 +03:00
31669dd18f Исправления в readme 2021-09-14 16:06:13 +03:00
bbd5434cec Прекращена поддержка примеров на React и Angular 2021-09-14 16:03:27 +03:00
6656c5d09c change license authors 2021-09-14 14:59:13 +03:00
Artem Vasilev
d8f2ba6c23
Merge pull request #17 from kernusr/release-2.3.0-prepare
2.3.0
2021-06-04 22:31:13 +03:00
91934ecc9e 2.3.0-examples 2021-06-04 22:29:23 +03:00
edca31abae 2.3.0 2021-06-04 18:44:56 +03:00
Artem Vasilev
dcae2f3987
Merge pull request #16 from kernusr/updates
updates
2021-06-04 13:56:32 +03:00
5a40870cec Обновил зависимости
Поправил тесты
linter fixes
2021-06-04 13:46:38 +03:00
Artem Vasilev
0938089f8d
Merge pull request #8 from kernusr/dependabot/npm_and_yarn/examples/angular/url-parse-1.5.1
Bump url-parse from 1.4.7 to 1.5.1 in /examples/angular
2021-06-04 12:44:49 +03:00
Artem Vasilev
741fd5cf7c
Merge pull request #9 from kernusr/dependabot/npm_and_yarn/examples/angular/y18n-4.0.3
Bump y18n from 4.0.0 to 4.0.3 in /examples/angular
2021-06-04 12:44:31 +03:00
Artem Vasilev
9a8295dc14
Merge pull request #10 from kernusr/dependabot/npm_and_yarn/examples/angular/elliptic-6.5.4
Bump elliptic from 6.5.2 to 6.5.4 in /examples/angular
2021-06-04 12:44:12 +03:00
dependabot[bot]
47c9083a72
Bump elliptic from 6.5.2 to 6.5.4 in /examples/angular
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.2 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.2...v6.5.4)

---
updated-dependencies:
- dependency-name: elliptic
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-04 08:39:19 +00:00
dependabot[bot]
12b62540de
Bump y18n from 4.0.0 to 4.0.3 in /examples/angular
Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.3.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/y18n-v4.0.3/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/compare/v4.0.0...y18n-v4.0.3)

---
updated-dependencies:
- dependency-name: y18n
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-04 08:39:12 +00:00
dependabot[bot]
4345d56ee1
Bump url-parse from 1.4.7 to 1.5.1 in /examples/angular
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.4.7 to 1.5.1.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.4.7...1.5.1)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-04 08:38:48 +00:00
Artem Vasilev
541648c258
Merge pull request #5 from kernusr/dependabot/npm_and_yarn/examples/angular/browserslist-4.16.6
Bump browserslist from 4.10.0 to 4.16.6 in /examples/angular
2021-06-04 11:38:30 +03:00
Artem Vasilev
0ee6b79ceb
Merge pull request #4 from kernusr/dependabot/npm_and_yarn/examples/angular/ssri-6.0.2
Bump ssri from 6.0.1 to 6.0.2 in /examples/angular
2021-06-04 11:38:22 +03:00
Artem Vasilev
38130ecf82
Merge pull request #6 from kernusr/dependabot/npm_and_yarn/examples/angular/hosted-git-info-2.8.9
Bump hosted-git-info from 2.8.8 to 2.8.9 in /examples/angular
2021-06-04 11:38:12 +03:00
Artem Vasilev
b4372dcb47
Merge pull request #7 from kernusr/dependabot/npm_and_yarn/examples/angular/lodash-4.17.21
Bump lodash from 4.17.15 to 4.17.21 in /examples/angular
2021-06-04 11:38:01 +03:00
dependabot[bot]
fd657ed409
Bump lodash from 4.17.15 to 4.17.21 in /examples/angular
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.21.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.21)

---
updated-dependencies:
- dependency-name: lodash
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-04 08:37:09 +00:00
dependabot[bot]
ca0781bc85
Bump hosted-git-info from 2.8.8 to 2.8.9 in /examples/angular
Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.8.8 to 2.8.9.
- [Release notes](https://github.com/npm/hosted-git-info/releases)
- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)
- [Commits](https://github.com/npm/hosted-git-info/compare/v2.8.8...v2.8.9)

---
updated-dependencies:
- dependency-name: hosted-git-info
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-04 08:36:20 +00:00
dependabot[bot]
1c5bd5c3e8
Bump browserslist from 4.10.0 to 4.16.6 in /examples/angular
Bumps [browserslist](https://github.com/browserslist/browserslist) from 4.10.0 to 4.16.6.
- [Release notes](https://github.com/browserslist/browserslist/releases)
- [Changelog](https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/browserslist/browserslist/compare/4.10.0...4.16.6)

---
updated-dependencies:
- dependency-name: browserslist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-04 08:36:19 +00:00
dependabot[bot]
a905e541a8
Bump ssri from 6.0.1 to 6.0.2 in /examples/angular
Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/npm/ssri/releases)
- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md)
- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2)

---
updated-dependencies:
- dependency-name: ssri
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-04 08:36:18 +00:00
Artem Vasilev
8ad740c7ad
Merge pull request #1 from kernusr/dependabot/npm_and_yarn/ws-7.4.6
Bump ws from 7.2.3 to 7.4.6
2021-06-04 11:36:14 +03:00
Artem Vasilev
119501f967
Merge pull request #2 from kernusr/dependabot/npm_and_yarn/examples/angular/dns-packet-1.3.4
Bump dns-packet from 1.3.1 to 1.3.4 in /examples/angular
2021-06-04 11:36:04 +03:00
Artem Vasilev
7256536037
Merge pull request #3 from kernusr/custom
Custom
2021-06-04 11:35:31 +03:00
06e68c92ec Поправил тесты
linter fixes
2021-06-04 11:30:37 +03:00
dependabot[bot]
f9c521462f
Bump dns-packet from 1.3.1 to 1.3.4 in /examples/angular
Bumps [dns-packet](https://github.com/mafintosh/dns-packet) from 1.3.1 to 1.3.4.
- [Release notes](https://github.com/mafintosh/dns-packet/releases)
- [Changelog](https://github.com/mafintosh/dns-packet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mafintosh/dns-packet/compare/v1.3.1...v1.3.4)

---
updated-dependencies:
- dependency-name: dns-packet
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-04 08:29:26 +00:00
da4763661c Merge remote-tracking branch 'cosign/master' into custom
# Conflicts:
#	dist/crypto-pro.d.ts
#	dist/crypto-pro.js
#	dist/crypto-pro.js.map
#	dist/crypto-pro.min.js
#	dist/crypto-pro.min.js.map
#	lib/crypto-pro.d.ts
#	lib/crypto-pro.js
#	lib/crypto-pro.js.map
#	package-lock.json
#	package.json
2021-06-04 10:29:44 +03:00
8549f412a7 Поправил тесты 2021-06-04 09:56:27 +03:00
dependabot[bot]
1d21551fe5
Bump ws from 7.2.3 to 7.4.6
Bumps [ws](https://github.com/websockets/ws) from 7.2.3 to 7.4.6.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/7.2.3...7.4.6)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-31 08:45:50 +00:00
German Arutyunov
e27a801fdc
Update index.ts 2021-05-13 01:39:57 +03:00
German Arutyunov
bccc0c9146
Merge pull request #1 from gaarutyunov/systeminfo
Closes SystemInfo
2021-05-13 01:38:18 +03:00
Alexander Zakharov
a7a3ea86ec fix package-lock 2021-05-12 21:04:03 +03:00
Alexander Zakharov
ebe130c9b0 fix test 2021-05-12 20:56:15 +03:00
Alexander Zakharov
a0d60b0de8 add getPluginVersion & getCspVersion methods 2021-05-12 20:53:44 +03:00
German Arutyunov
4f29faf3c3 added all user certificates 2021-05-07 14:47:38 +03:00
German Arutyunov
bf3be501a1 added all user certificates 2021-05-07 14:40:36 +03:00
German Arutyunov
fdb8c7c136 added all user certificates 2021-05-07 14:38:58 +03:00
German Arutyunov
67ed9f61ab added all user certificates 2021-05-07 14:37:46 +03:00
German Arutyunov
5225ee99c8 doc fix 2021-03-23 18:53:35 +03:00
German Arutyunov
19a9bab9f7 fixed signature verification 2021-03-23 17:31:39 +03:00
German Arutyunov
17e248e495 added verfification 2021-03-23 16:14:57 +03:00
German Arutyunov
4096e085a1 added exports 2021-03-23 15:32:35 +03:00
German Arutyunov
419afe47e3 lint fix 2021-03-23 14:20:07 +03:00
German Arutyunov
a81294a60a add attached and detached signature 2021-03-23 14:15:01 +03:00
af73897b00 Release 2.2.2 2021-03-17 20:36:30 +03:00
60a134d8b6 Merge branch 'master' into custom
# Conflicts:
#	dist/crypto-pro.js
#	dist/crypto-pro.js.map
#	dist/crypto-pro.min.js
#	dist/crypto-pro.min.js.map
#	lib/crypto-pro.js
#	lib/crypto-pro.js.map
2021-03-17 18:22:20 +03:00
c0b100ab7f Очистка CommonName от лишних кавычек 2021-03-17 18:15:29 +03:00
b0e09742ce 2.2.1 2021-02-14 00:49:48 +03:00
8754d5924e fix 2021-02-14 00:44:23 +03:00
e70f108675 Возврат ошибок с кодом. 2021-02-14 00:15:27 +03:00
70a563ed53 custom errors 2021-02-12 18:33:39 +03:00
vgoma
c0566b7654 2.2.0 2021-02-06 22:10:00 +03:00
vgoma
9958c9884a Добавил иконку со ссылкой на примеры 2020-12-19 17:17:53 +03:00
vgoma
a82f7b1ebc Добавил ссылку на Jetbrains в рамках поддержки OpenSource проекта 2020-12-19 17:13:23 +03:00
vgoma
a5211ba248 Добавил ссылки на запуск примера 2020-11-08 14:38:08 +03:00
vgoma
f4ece3c0c9 Привел npm скрипты к общепринятым конвенциям 2020-11-08 14:33:40 +03:00
vgoma
759494898d Актуализировал анимированные примеры 2020-11-08 13:05:45 +03:00
vgoma
00e128423d Добавил пример с подписью файла 2020-11-07 21:56:02 +03:00
vgoma
26bf41091e Обновил анимированные примеры 2020-10-17 21:45:46 +03:00
vgoma
29c27119de 2.1.0 2020-10-17 16:47:27 +03:00
vgoma
4739fe3b9f Привел обработку ошибок в примерах к единообразию 2020-10-17 12:56:14 +03:00
vgoma
56e5e2ff17 Добавил тесты для создания хеша 2020-10-17 12:29:05 +03:00
vgoma
bdcb3d7542 Добавил тесты для создания отсоединенной подписи 2020-10-17 12:14:34 +03:00
vgoma
cfd244df02 Добавил тесты для создания присоединенной подписи 2020-10-17 12:06:10 +03:00
vgoma
e4d93c64dd Исправил хэш -> хеш 2020-10-17 10:49:24 +03:00
vgoma
b090fa4e6c Добавил атрибут времени подписания для отсоединенной подписи 2020-10-17 10:46:07 +03:00
vgoma
864c05f81c Актуализировал пример использования с React 2020-10-07 18:54:57 +03:00
vgoma
3d71049078 Актуализировал пример использования с Angular 2020-09-01 18:39:43 +03:00
vgoma
d9797b31a5 Убрал избыточный сброс формы, добавил уточнение о типе подписи 2020-09-01 18:37:59 +03:00
vgoma
b2ca997be6 Актуализировал пример использования через тэг script 2020-08-27 21:48:20 +03:00
vgoma
242794d3bf Методы создания отделенной и присоединенной подписи разделены и реализованы с поддержкой их проверки на сайте госуслуг 2020-08-27 21:47:21 +03:00
vgoma
b400e8c670 Оставил генерацию хэша только для алгоритма ГОСТ Р 34.11-2012 256 бит 2020-08-27 21:40:10 +03:00
vgoma
019e825895 Merge branch 'master' into release/2.1.0 2020-07-11 23:09:35 +03:00
vgoma
7eaab650a0 2.0.5 2020-07-04 09:37:44 +03:00
vgoma
59752af1a8 Merge remote-tracking branch 'origin/master' 2020-07-04 08:49:09 +03:00
Vitalii Goma
43501d5639
Merge pull request #20 from vgoma/dependabot/npm_and_yarn/examples/angular/websocket-extensions-0.1.4
Bump websocket-extensions from 0.1.3 to 0.1.4 in /examples/angular
2020-07-04 08:48:57 +03:00
vgoma
a5552b5065 изменил blacklist-инг на whitelist-инг публикуемых файлов в NPM 2020-07-04 08:46:04 +03:00
vgoma
733449d20c исправил гифку с примером для es модулей 2020-07-04 08:37:18 +03:00
Vitalii Goma
ebeb4761e6
Merge pull request #19 from versh23/add-space-subject
add support to translation tag with space
2020-07-04 08:03:45 +03:00
vershinin_so
f4f2e02a53 add tag with space 2020-06-08 09:41:38 +03:00
dependabot[bot]
41069656bb
Bump websocket-extensions from 0.1.3 to 0.1.4 in /examples/angular
Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4.
- [Release notes](https://github.com/faye/websocket-extensions-node/releases)
- [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4)

Signed-off-by: dependabot[bot] <support@github.com>
2020-06-08 01:21:40 +00:00
vgoma
e456be7eda Добавил метод вычисления хэша, обновил пример с тэгом script 2020-05-05 09:56:07 +03:00
vgoma
1f452c4ca0 2.0.4 2020-04-05 18:28:49 +03:00
vgoma
889213670e исправил отступы и кодстайл ссылок 2020-04-05 18:28:07 +03:00
vgoma
b70ebd3706 добавил файл с лицензией 2020-04-05 18:27:07 +03:00
vgoma
e77bbb46f7 убрал из-под версионного контроля линк на папку с пакетом во время работы примера с тэгом script 2020-03-29 21:01:05 +03:00
vgoma
984b9cdf2e обновил версию пакета в примерах 2020-03-29 15:26:26 +03:00
vgoma
9236bc1b3d 2.0.3 2020-03-29 15:19:39 +03:00
vgoma
b0c5d2911b символ рубля на кнопке "спасибо" 2020-03-29 15:06:37 +03:00
vgoma
b968d4ec82 добавил кнопку "спасибо" 2020-03-29 15:03:47 +03:00
vgoma
ac98504840 реорганизация примеров подключения библиотеки 2020-03-29 14:18:39 +03:00
vgoma
adc25fd95e реорганизация разделов в шапке 2020-03-29 14:04:57 +03:00
vgoma
5c3ffffaa2 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	README.md
2020-03-29 13:52:45 +03:00
vgoma
365fa08369 изменил способ отображения поддерживаемых браузеров 2020-03-29 13:52:12 +03:00
vgoma
746d464cb1 изменил способ отображения поддерживаемых браузеров 2020-03-29 13:42:31 +03:00
vgoma
2613fb6199 добавил информацию о покрытии 2020-03-29 13:07:38 +03:00
vgoma
da8723b31b добавил отправку отчетов о покрытии в coveralls 2020-03-29 13:02:44 +03:00
vgoma
1412bb0be5 добавил шильдик со статусом билда 2020-03-29 12:47:22 +03:00
vgoma
66e4e31028 добавил конфиг для Travis CI 2020-03-29 12:41:12 +03:00
vgoma
6d96ca5182 для bower сборка добавлена под версионный контроль для возможности устанавливать пакет напрямую с github 2020-03-29 10:05:07 +03:00
vgoma
a3df6e77a8 обновлена версия пакета в примерах 2020-03-29 09:55:34 +03:00
vgoma
39070001a9 2.0.2 2020-03-29 09:46:04 +03:00
vgoma
2a54ed063c 2.0.1 2020-03-29 09:44:37 +03:00
vgoma
5ad18c54e6 исправил ссылки в TOC 2020-03-28 21:18:25 +03:00
vgoma
a4c2d294c9 2.0.0 2020-03-28 21:11:00 +03:00
235 changed files with 36780 additions and 7928 deletions

10
.editorconfig Normal file
View File

@ -0,0 +1,10 @@
root = true
[*]
end_of_line = lf
insert_final_newline = true
[*.{js, ts}]
charset = utf-8
indent_style = space
indent_size = 2

51
.eslintrc.js Normal file
View File

@ -0,0 +1,51 @@
module.exports = {
env: {
browser: true,
es6: true
},
parser: '@typescript-eslint/parser',
extends: [
'plugin:@typescript-eslint/recommended',
'prettier/@typescript-eslint',
'plugin:prettier/recommended'
],
globals: {
Atomics: 'readonly',
SharedArrayBuffer: 'readonly'
},
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module'
},
plugins: [
'@typescript-eslint'
],
rules: {
'@typescript-eslint/no-inferrable-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/ban-ts-ignore': 'off',
'@typescript-eslint/camelcase': 'off',
'@typescript-eslint/no-unused-vars': 'off'
},
overrides: [
{
files: ['*.test.ts'],
rules: {
'@typescript-eslint/explicit-function-return-type': 'off'
}
},
{
files: ['./types/**/*'],
rules: {
'no-var': 'off'
}
}
],
ignorePatterns: [
'*.js',
'lib/**/*',
'dist/**/*',
'coverage/**/*',
'examples/**/*'
]
};

46
.github/workflows/test.yml vendored Executable file
View File

@ -0,0 +1,46 @@
name: CryptoPRO tests
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
buildAndTest:
runs-on: ubuntu-20.04
strategy:
matrix:
node-version: [ 16 ]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
check-latest: true
- name: Clean install, build, test
run: |
npm ci
npm run build --if-present --openssl-legacy-provider
npm test
lint:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: Use Node.js 16
uses: actions/setup-node@v3
with:
node-version: 16
check-latest: true
- name: Clean install, lint
run: |
npm ci
npm run lint

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
.idea .idea
node_modules/ node_modules/
package/
coverage/

8
.prettierrc.js Normal file
View File

@ -0,0 +1,8 @@
module.exports = {
semi: true,
trailingComma: 'all',
singleQuote: true,
printWidth: 120,
tabWidth: 2,
arrowParens: 'always',
};

View File

@ -1,65 +0,0 @@
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'ом

22
LICENSE Normal file
View File

@ -0,0 +1,22 @@
MIT License
Copyright (c) 2020 Vitalii Goma
Copyright (c) 2021 Artem Vasilev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

384
README.md Executable file → Normal file
View File

@ -1,186 +1,216 @@
# CryptoPro [![License][license-image]][license-url]
Единое, асинхронное API для взаимодействия с КриптоПРО ЭЦП Browser Plug-In (IE8+) [![NPM version][npm-version-image]][npm-url]
[![NPM downloads][npm-downloads-image]][downloads-url]
[![Build Status][actions-image]][actions-url]
## Поддерживаемые браузеры
- [Google Chrome](https://www.google.ru/chrome/browser/desktop/) (v45+) с расширением [CryptoPro Extension for CAdES Browser Plug-in](https://chrome.google.com/webstore/detail/cryptopro-extension-for-c/iifchhfnnmpdbibifmljnfjhpififfog?utm_source=chrome-app-launcher-info-dialog)
- [Opera](https://www.google.ru/chrome/browser/desktop/) (v40+) с расширением [CryptoPro Extension for CAdES Browser Plug-in](https://addons.opera.com/en/extensions/details/cryptopro-extension-for-cades-browser-plug-in/)
- [Mozilla Firefox](https://www.mozilla.org/ru/firefox/new/) (v43+). Начиная с версии 52, с [расширением](https://www.cryptopro.ru/sites/default/files/products/cades/extensions/cryptopro_extension_for_cades_browser_plug_in-1.1.1-an+fx-windows.xpi).
- [Internet Explorer](http://windows.microsoft.com/ru-ru/internet-explorer/download-ie) (v8+).
Список необходимых полифиллов (подключаются самостоятельно): <a name="cryptopro"></a>
# cryptoPro
Асинхронный JavaScript API для работы с КриптоПРО ЭЦП Browser Plug-In
> **Это форк проекта [vgoma/crypto-pro](https://github.com/vgoma/crypto-pro)**
>
> **API форка отличается от оригинала**: внимательно читайте README
| [![Chrome](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/chrome/chrome_64x64.png)](https://www.chromium.org/getting-involved/download-chromium#TOC-Downloading-old-builds-of-Chrome-Chromium) | [![Firefox](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/firefox/firefox_64x64.png)](https://ftp.mozilla.org/pub/firefox/releases/) | [![IE](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/archive/internet-explorer_9-11/internet-explorer_9-11_64x64.png)](https://www.microsoft.com/ru-ru/download/details.aspx?id=43374) | [![Opera](https://raw.githubusercontent.com/alrra/browser-logos/62.2.25/src/opera/opera_64x64.png)](http://get.opera.com/ftp/pub/opera/desktop/) |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| __v45+__ с расширением [CryptoPro Extension for CAdES Browser Plug-in](https://chrome.google.com/webstore/detail/cryptopro-extension-for-c/iifchhfnnmpdbibifmljnfjhpififfog?utm_source=chrome-app-launcher-info-dialog) | __v43+__. Начиная с версии 52, с [расширением](https://www.cryptopro.ru/sites/default/files/products/cades/extensions/cryptopro_extension_for_cades_browser_plug_in-1.1.1-an+fx-windows.xpi) | __v9+__ с установленным [КриптоПро ЭЦП Browser plug-in](https://www.cryptopro.ru/products/cades/plugin) | __v40+__ с расширением [CryptoPro Extension for CAdES Browser Plug-in](https://addons.opera.com/en/extensions/details/cryptopro-extension-for-cades-browser-plug-in/) |
## Ошибка `Параметр задан неверно. (0x80070057)`
Если при попытке подписать сообщение с использованием PKCS#7 подписи падает такая ошибка, то читайте [этот issue](https://github.com/webmasterskaya/crypto-pro-js/issues/20)
- [cryptoPro](#cryptopro)
- [Зачем мне этот пакет?](#why)
- [Установка](#install)
- [API](#api)
- [Методы объекта cryptoPro](#api-cryptopro)
- [Методы объекта сертификата](#api-certificate)
- [Поддерживаемые СКЗИ](#supported-cist)
- [Примеры](#examples)
- [Тэг script (UMD)](#example-script-tag)
- [Тем, кто хочет помочь](#developers)
- [Запуск режима разработки](#dev-mode)
- [Запуск тестов](#tests-execution)
- [Проверка пакета перед публикацией в NPM](#final-check)
- [Лицензия](#lisense)
<a name="why"></a>
## Зачем мне этот пакет?
КриптоПРО ЭЦП Browser Plug-In доступен в разных браузерах в двух версиях.
Асинхронной (в современных браузерах) и синхронной (в браузерах постарше).
С помощью этого пакета можно не писать реализацию под каждую версию плагина дважды.
<a name="install"></a>
## Установка
Для NPM:
```bash
npm install crypto-pro-js
```
Для Yarn:
```bash
yarn add crypto-pro-js
```
Для Bower:
```bash
bower install webmasterskaya/crypto-pro-js
```
Подключение пакета как UMD модуля через тэг script:
```html
<script src="crypto-pro-js/dist/crypto-pro.min.js"></script>
<script>
window.cryptoPro.getUserCertificates()
.then(function (certificates) {
//...
})
.catch(function (error) {
//...
});
</script>
```
Подключение пакета как ES модуля с Typescript или JavaScript:
```typescript
import { getUserCertificates, Certificate } from 'crypto-pro-js';
(async () => {
let certificates: Certificate[];
try {
certificates = await getUserCertificates();
} catch(error) {
// ...
}
})();
```
Список требуемых полифиллов (если необходимы, подключаются самостоятельно):
- Promise - Promise
- EventTarget.addEventListener - Array.prototype.find
- Array.prototype.forEach
- Array.prototype.map
## Установка и настройка
### NPM
```bash
npm install crypto-pro
```
### Bower
```bash
bower install crypto-pro
```
Для корректной работы используйте:
1. [КриптоПРО CSP](https://www.cryptopro.ru/products/csp/downloads) (v3.6+) *рекомендуется использование только сертифицированных версий*. Инструкция по установке:
- [Linux / OSX](#install_csp_linux)
- (в Windows следуйте указаниям программы-установщика)
1. [КриптоПРО ЭЦП browser plug-in](https://www.cryptopro.ru/products/cades/plugin) (v1.5+). Инструкция по установке:
- [Linux](#install_plugin_linux)
- (в Windows и OSX следуйте указаниям программы-установщика)
Затем установите необходимые сертификаты в систему. [Инструкция](#install_cert_linux) для Linux / OSX.
### <a name="install_csp_linux"></a> Установка КриптоПРО CSP в Linux / OSX
> Процесс установки в OSX незначительно отличается от Linux, поэтому описание приведено на примере дистрибутива семейства Debian (x64).
Некоторые команды могут потребовать запуска с `sudo`.
Названия файлов и директорий могут отличаться из-за различий в версиях.
После загрузки [КриптоПРО CSP](https://www.cryptopro.ru/products/csp/downloads) для нужной платформы, распакуйте архив:
```bash
tar -xzvf linux-amd64_deb.tgz
chmod 777 -R linux-amd64_deb/
```
Запустите скрипт установки:
```bash
linux-amd64_deb/install.sh
```
Проверьте **отсутствие** `cprocsp-rdr-gui`:
```bash
dpkg -l | grep cprocsp-rdr
```
Установите дополнительно `cprocsp-rdr-gui-gtk`:
```bash
dpkg -i linux-amd64_deb/cprocsp-rdr-gui-gtk-64_4.0.0-4_amd64.deb
```
[Дополнительная информация по установке](https://www.cryptopro.ru/faq/gde-vzyat-dokumentatsiyu-po-ustanovke-kakie-pakety-stavit)
### <a name="install_plugin_linux"></a> Установка КриптоПРО ЭЦП browser plug-in в Linux
Загрузите [КриптоПРО ЭЦП browser plug-in](https://www.cryptopro.ru/products/cades/plugin) и распакуйте его:
```bash
mkdir cades_linux_amd64
tar -xzvf cades_linux_amd64.tar.gz -C cades_linux_amd64
```
Сконвертируйте `rpm` в `deb` пакеты при помощи утилиты `alien`:
```bash
apt-get update && apt-get install alien
cd cades_linux_amd64
alien *
```
Установите пакеты:
```bash
dpkg -i cprocsp-pki-cades_2.0.0-2_amd64.deb
dpkg -i cprocsp-pki-plugin_2.0.0-2_amd64.deb
```
Проверьте наличие файлов плагина:
```bash
ls -la /opt/cprocsp/lib/amd64 | grep libnpcades
lrwxrwxrwx 1 root root 19 Окт 21 12:33 libnpcades.so -> libnpcades.so.2.0.0
lrwxrwxrwx 1 root root 19 Окт 21 12:33 libnpcades.so.2 -> libnpcades.so.2.0.0
-rwxr-xr-x 1 root root 2727236 Июн 8 14:33 libnpcades.so.2.0.0
```
#### Настройка плагина для Firefox (до версии 52):
> После настройки плагина на страницах, запрашивающих работу с ЭП в панели навигации, рядом с url будет кнопка,
позволяющая "разрешить и запомнить" использование установленного плагина.
```bash
cd /usr/lib/mozilla/plugins
cp /opt/cprocsp/lib/amd64/libnpcades.so.2.0.0 ./
ldd libnpcades.so.2.0.0
cp /opt/cprocsp/lib/amd64/libnpcades.so.2.0.0 ./libnpcades.so
ldd libnpcades.so
```
Перезапустите Firefox, и убедитесь в наличии CryptoPRO Cades plugin (см. Menu -> Addons).
### <a name="install_cert_linux"></a> Установка сертификатов в Linux
> В OSX процесс схож с Linux.
Подключите USB носитель с ключевыми контейнерами и проверьте результат команды:
```bash
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc
CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 16188003
\\.\FLASH\ivanov
\\.\FLASH\petrov
\\.\FLASH\sidorov
\\.\FLASH\vasiliev
\\.\FLASH\smirnov
OK.
Total: SYS: 0,020 sec USR: 0,060 sec UTC: 0,180 sec
```
Скопируйте ключевой контейнер `\\.\FLASH\.\sidorov` на жесткий диск:
```bash
/opt/cprocsp/bin/amd64/csptest -keycopy -contsrc '\\.\FLASH\sidorov' -contdest '\\.\HDIMAGE\sidor'
CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
CryptAcquireContext succeeded.HCRYPTPROV: 38556259
CryptAcquireContext succeeded.HCRYPTPROV: 38770755
Total: SYS: 0,000 sec USR: 0,100 sec UTC: 14,920 sec
[ErrorCode: 0x00000000]
```
> Наличие [ErrorCode: 0x00000000] в завершении каждой команды КриптоПРО говорит о ее успешном выполнении.
Проверьте наличие нового контейнера `\\.\HDIMAGE\sidor`:
```bash
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc
CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 34554467
\\.\FLASH\ivanov
\\.\FLASH\petrov
\\.\FLASH\sidorov
\\.\FLASH\vasiliev
\\.\FLASH\smirnov
\\.\HDIMAGE\sidor
OK.
Total: SYS: 0,010 sec USR: 0,050 sec UTC: 0,130 sec
[ErrorCode: 0x00000000]
```
Установите личный сертификат:
```bash
/opt/cprocsp/bin/amd64/certmgr -inst -cont '\\.\HDIMAGE\sidor'
```
> Возможно в выводе вы ссылку на сертификат УЦ
При необходимости загрузите сертификат удостоверяющего центра и установите его командой:
```bash
/opt/cprocsp/bin/amd64/certmgr -inst -store uroot -file <файл сертификата>.crt
```
После чего, при проверке установленного личного сертификата вы увидите `PrivateKey Link: Yes`:
```bash
/opt/cprocsp/bin/amd64/certmgr -list -store uMy
```
<a name="api"></a>
## API ## API
Пример работы с API лежит в папке `example`.
``` js <a name="api-cryptopro"></a>
window.CryptoPro.call('getCertsList').then(function (certList) { ### Методы объекта cryptoPro
console.log(certList); - [getUserCertificates](src/api/getUserCertificates.ts) - возвращает список [сертификатов](#api-certificate), доступных пользователю в системе
}); - [getAllUserCertificates](src/api/getAllUserCertificates.ts) - возвращает список [сертификатов](#api-certificate), доступных пользователю в системе, в том числе просроченные и без закрытого ключа
- [getContainerCertificates](src/api/getContainerCertificates.ts) - возвращает список [сертификатов](#api-certificate), из закрытых ключей и/или сертификаты не установленные всистеме*
- [getAllContainerCertificates](src/api/getAllContainerCertificates.ts) - возвращает список [сертификатов](#api-certificate), из закрытых ключей и/или сертификаты не установленные всистеме*, в том числе просроченные и без закрытого ключа
- [getCertificate](src/api/getCertificate.ts) - возвращает [сертификат](#api-certificate) по отпечатку
- [createAttachedSignature](src/api/createAttachedSignature.ts) - создает совмещенную (присоединенную) подпись сообщения
- [createDetachedSignature](src/api/createDetachedSignature.ts) - создает отсоединенную (открепленную) подпись сообщения
- [addAttachedSignature](src/api/addAttachedSignature.ts) - добавляет совмещенную (присоединенную) подпись к раннее подписанному документу (реализует метод coSign)
- [addDetachedSignature](src/api/addDetachedSignature.ts) - добавляет отсоединенную (открепленную) подпись к раннее подписанному документу (реализует метод coSign)
- [createXMLSignature](src/api/createXMLSignature.ts) - создает XML подпись для документа в формате XML
- [createHash](src/api/createHash.ts) - создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
- [getSystemInfo](src/api/getSystemInfo.ts) - возвращает информацию о CSP и плагине
- [isValidSystemSetup](src/api/isValidSystemSetup.ts) - возвращает флаг корректности настроек ЭП на машине
> *Методы `getContainerCertificates` и `getAllContainerCertificates` позволяют получить сертификаты из закрытых ключей, записанных на обыкновенную флэшку
<a name="api-certificate"></a>
### Методы объекта сертификата
[Сертификат](src/api/certificate/certificate.ts) предоставляет следущее API:
- [isValid](src/api/certificate/isValid.ts) - возвращает флаг действительности сертификата
- [getCadesProp](src/api/certificate/getCadesProp.ts) - возвращает указанное внутренее свойство у сертификата в формате Cades
- [exportBase64](src/api/certificate/exportBase64.ts) - возвращает сертификат в формате base64
- [getAlgorithm](src/api/certificate/getAlgorithm.ts) - возвращает информацию об алгоритме сертификата
- [getOwnerInfo](src/api/certificate/getInfo.ts) - возвращает расшифрованную информацию о владельце сертификата
- [getIssuerInfo](src/api/certificate/getInfo.ts) - возвращает расшифрованную информацию об издателе сертификата
- [getExtendedKeyUsage](src/api/certificate/getExtendedKeyUsage.ts) - возвращает ОИД'ы сертификата
- [getDecodedExtendedKeyUsage](src/api/certificate/getDecodedExtendedKeyUsage.ts) - возвращает расшифрованные ОИД'ы
- [hasExtendedKeyUsage](src/api/certificate/hasExtendedKeyUsage.ts) - проверяет наличие ОИД'а (ОИД'ов) у сертификата
<a name="supported-cist"></a>
## Поддерживаемые СКЗИ
[КриптоПРО CSP](https://www.cryptopro.ru/products/csp/downloads) (v4.0+)
<a name="examples"></a>
## Примеры
Для их запуска необходим NodeJS LTS.
<a name="example-script-tag"></a>
### Тэг script (UMD)
```bash
cd examples/script-tag
npm i
npm start
``` ```
### Доступные методы <a name="developers"></a>
Список доступных методов можно посмотреть в файле `src/api.js`. # Тем, кто хочет помочь
Буду благодарен за расширение/улучшение/доработку API.
Вам будут полезны [примеры](http://cpdn.cryptopro.ru/?url=/content/cades/plugin-samples-sign.html),
предоставляемые Крипто ПРО.
### License <a name="dev-mode"></a>
Licensed as MIT. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details. ## Запуск режима разработки
Устанавливаем зависимости:
```bash
npm i
```
Во время работы с кодом необходим запущенный сборщик:
```bash
npm start
```
И пример, на котором можно тестировать изменения.
Удобнее всего тестировать на примере с тэгом script, тк он отвязан от фреймворков
и использует сборку в формате UMD из папки `dist/`, постоянно обновляемую пока работает
сборщик. Запускаем его таким образом:
```bash
cd examples/script-tag
npm i
npm link ../../
npm start
```
> После выполнения `npm link ../../` в директории `examples/script-tag/node_modules` папка `crypto-pro-js` станет ярлыком,
> указывающим на папку содержащую локально собранный пакет.
<a name="tests-execution"></a>
## Запуск тестов
Тесты написаны с использованием [Jest](https://jestjs.io/docs/en/configuration#testpathignorepatterns-arraystring):
```bash
npm test
```
<a name="final-check"></a>
## Проверка пакета перед публикацией в NPM
Необходимо протестировать работу в заявленных браузерах, сделав это на локально запакованной версии пакета.
Для этого собираем пакет:
```bash
npm run package
mv package ..
```
> Важно переместить папку `package` куда-нибудь выше для избежания конфликтов при линковке с текущим `package.json`.
Переходим в любую директорию с примером и создаем там ссылку на только что собранный пакет:
```bash
cd examples/script-tag
npm link ../../../package
```
Проверяем работу примеров в режимах разработки и продакшн.
После завершения экспериментов можно удалить глобальную ссылку из директории `../../../package` таким образом:
```bash
cd ../../../package
npm unlink
```
<a name="lisense"></a>
# Лицензия
[MIT](/LICENSE)
[license-url]: /LICENSE
[license-image]: https://img.shields.io/github/license/webmasterskaya/crypto-pro-js
[npm-url]: https://npmjs.org/package/crypto-pro-js
[npm-version-image]: https://img.shields.io/npm/v/crypto-pro-js.svg?style=flat
[npm-downloads-image]: https://img.shields.io/npm/dm/crypto-pro-js.svg?style=flat
[downloads-url]: https://npmcharts.com/compare/crypto-pro-js?minimal=true
[actions-url]: https://github.com/webmasterskaya/crypto-pro-js/actions
[actions-image]: https://img.shields.io/github/workflow/status/webmasterskaya/crypto-pro-js/test?event=push

View File

@ -1,24 +1,32 @@
{ {
"name": "crypto-pro", "name": "crypto-pro-js",
"description": "API для взаимодействия с КриптоПро", "description": "Асинхронный JavaScript API для работы с КриптоПРО ЭЦП Browser Plug-In. Forked from https://github.com/vgoma/crypto-pro",
"main": "dist/crypto-pro.js", "main": "./lib/crypto-pro-js.js",
"authors": [ "authors": [
"kern.usr <kern.usr@gmail.com>",
"vgoma <vgoma@yandex.ru>" "vgoma <vgoma@yandex.ru>"
], ],
"license": "ISC", "license": "MIT",
"keywords": [ "keywords": [
"crypto", "crypto",
"cryptopro", "cryptopro",
"crypto-pro", "crypto-pro",
"crypto-pro-js",
"cades", "cades",
"КриптоПро" "КриптоПро",
"Крипто ПРО"
], ],
"homepage": "https://github.com/vgoma/crypto-pro", "homepage": "https://github.com/webmasterskaya/crypto-pro-js",
"ignore": [ "ignore": [
"**/.*", "**/.*",
"/*.js",
"/*.gif",
"/tsconfig*",
"node_modules", "node_modules",
"bower_components", "bower_components",
"test", "examples",
"tests" "src",
"types",
"package"
] ]
} }

18
definition-header.js Normal file
View File

@ -0,0 +1,18 @@
const path = require('path');
const fs = require('fs');
const tsConfig = require(`./${process.env.TS_CONFIG}`);
const packageJson = require('./package.json');
const typingsPath = path.resolve(__dirname, tsConfig.compilerOptions.outDir, `${packageJson.name}.d.ts`);
const typings = fs.readFileSync(typingsPath, 'utf8');
let header = [
`// Type definitions for ${packageJson.name} ${packageJson.version}`,
`// Project: ${packageJson.name}`,
`// Definitions by: ${packageJson.author.name} ${packageJson.author.url}`
].join('\n');
if (tsConfig.compilerOptions.target === 'es5') {
header += '\n\nexport as namespace cryptoPro;';
}
fs.writeFileSync(typingsPath, `${header}\n\n${typings}`);

1071
dist/1.crypto-pro.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

1047
dist/2.crypto-pro.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

8
dist/api/addAttachedSignature.d.ts vendored Normal file
View File

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

9
dist/api/addDetachedSignature.d.ts vendored Normal file
View File

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

22
dist/api/certificate/certificate.d.ts vendored Normal file
View File

@ -0,0 +1,22 @@
import { TagTranslation } from '../../helpers/_parseCertInfo';
import { ExtendedKeysTranslations } from './getDecodedExtendedKeyUsage';
export declare type CadesCertificate = any;
export declare class Certificate {
_cadesCertificate: CadesCertificate;
name: string;
issuerName: string;
subjectName: string;
thumbprint: string;
validFrom: string;
validTo: string;
constructor(_cadesCertificate: CadesCertificate, name: string, issuerName: string, subjectName: string, thumbprint: string, validFrom: string, validTo: string);
getOwnerInfo(): Promise<TagTranslation[]>;
getIssuerInfo(): Promise<TagTranslation[]>;
getExtendedKeyUsage(): Promise<string[]>;
getDecodedExtendedKeyUsage(): Promise<ExtendedKeysTranslations>;
getAlgorithm(): Promise<string>;
getCadesProp(propName: any): Promise<any>;
isValid(): Promise<boolean>;
exportBase64(): Promise<string>;
hasExtendedKeyUsage(oids: any): Promise<boolean>;
}

View File

@ -0,0 +1,6 @@
/**
* Экспортирует сертификат в формате base64
*
* @returns сертификат в формате base64
*/
export declare const exportBase64: () => Promise<string>;

11
dist/api/certificate/getAlgorithm.d.ts vendored Normal file
View File

@ -0,0 +1,11 @@
interface AlgorithmInfo {
algorithm: string;
oid: string;
}
/**
* Возвращает информацию об алгоритме сертификата
*
* @returns информацию об алгоритме и его OID'е
*/
export declare const getAlgorithm: () => Promise<AlgorithmInfo>;
export {};

View File

@ -0,0 +1,7 @@
/**
* Возвращает указанное внутренее свойство у сертификата в формате Cades
*
* @param propName = наименование свойства
* @returns значение запрошенного свойства
*/
export declare const getCadesProp: (propName: string) => Promise<any>;

View File

@ -0,0 +1,9 @@
export interface ExtendedKeysTranslations {
[key: string]: string | null;
}
/**
* Возвращает расшифрованные ОИД'ы сертификата
*
* @returns словарь расшифрованных ОИД'ов
*/
export declare const getDecodedExtendedKeyUsage: () => Promise<ExtendedKeysTranslations>;

View File

@ -0,0 +1,6 @@
/**
* Возвращает ОИД'ы сертификата
*
* @returns список ОИД'ов
*/
export declare const getExtendedKeyUsage: () => Promise<string[]>;

10
dist/api/certificate/getInfo.d.ts vendored Normal file
View File

@ -0,0 +1,10 @@
import { TagsTranslations } from '../../constants/tags-translations';
import { TagTranslation } from '../../helpers/_parseCertInfo';
/**
* Возвращает расшифрованную информацию о сертификате из указанного свойства по тэгам
*
* @param tags = словарь
* @param entitiesPath = путь к разбираемой сущности
* @returns расшифрованная информация по отдельным тэгам
*/
export declare const getInfo: (tags: TagsTranslations[], entitiesPath: string) => Promise<TagTranslation[]>;

View File

@ -0,0 +1,7 @@
/**
* Проверяет наличие ОИД'а (ОИД'ов) у сертификата
*
* @param oids - ОИД'ы для проверки
* @returns флаг наличия ОИД'ов у сертификата
*/
export declare const hasExtendedKeyUsage: (oids: string | string[]) => Promise<boolean>;

1
dist/api/certificate/index.d.ts vendored Normal file
View File

@ -0,0 +1 @@
export * from './certificate';

6
dist/api/certificate/isValid.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
/**
* Проверяет действительность сертификата
*
* @returns флаг валидности
*/
export declare const isValid: () => Promise<boolean>;

8
dist/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
dist/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>;

9
dist/api/createHash.d.ts vendored Normal file
View File

@ -0,0 +1,9 @@
/**
* Создает хеш сообщения по ГОСТ Р 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 хеш
*/
export declare const createHash: (unencryptedMessage: string | ArrayBuffer) => Promise<string>;

8
dist/api/createXMLSignature.d.ts vendored Normal file
View File

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

8
dist/api/getAllCertificates.d.ts vendored Normal file
View File

@ -0,0 +1,8 @@
import { Certificate } from './certificate';
/**
* Возвращает список сертификатов, доступных пользователю из пользовательского хранилища и закрытых ключей, не установленных в системе, без фильтрации по дате и наличию приватного ключа
*
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
* @returns список сертификатов
*/
export declare const getAllCertificates: (resetCache?: boolean) => Promise<Certificate[]>;

View File

@ -0,0 +1,9 @@
import { Certificate } from './certificate';
/**
* Начиная с версии плагина 2.0.13292 есть возможность получить сертификаты из закрытых ключей
* Возвращает все сертификаты без фильтрации по дате и наличию приватного ключа
*
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
* @returns список сертификатов
*/
export declare const getAllContainerCertificates: (resetCache?: boolean) => Promise<Certificate[]>;

8
dist/api/getAllUserCertificates.d.ts vendored Normal file
View File

@ -0,0 +1,8 @@
import { Certificate } from './certificate';
/**
* Возвращает все сертификаты без фильтрации по дате и наличию приватного ключа
*
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
* @returns список сертификатов
*/
export declare const getAllUserCertificates: (resetCache?: boolean) => Promise<Certificate[]>;

9
dist/api/getCertificate.d.ts vendored Normal file
View File

@ -0,0 +1,9 @@
import { Certificate } from './certificate';
/**
* Возвращает сертификат по отпечатку
*
* @param thumbprint - отпечаток сертификата
* @param validOnly - проверять сертификаты по дате и наличию приватного ключа
* @returns сертификат
*/
export declare const getCertificate: (thumbprint: string, validOnly?: boolean) => Promise<Certificate>;

8
dist/api/getCertificates.d.ts vendored Normal file
View File

@ -0,0 +1,8 @@
import { Certificate } from './certificate';
/**
* Возвращает список сертификатов, доступных пользователю из пользовательского хранилища и закрытых ключей, не установленных в системе
*
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
* @returns список сертификатов
*/
export declare const getCertificates: (resetCache?: boolean) => Promise<Certificate[]>;

View File

@ -0,0 +1,9 @@
import { Certificate } from './certificate';
/**
* Начиная с версии плагина 2.0.13292 есть возможность получить сертификаты из закрытых ключей
* Возвращает список сертификатов, доступных пользователю в системе
*
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
* @returns список сертификатов
*/
export declare const getContainerCertificates: (resetCache?: boolean) => Promise<Certificate[]>;

6
dist/api/getCspVersion.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
/**
* Предоставляет информацию о системе
*
* @returns информацию о CSP
*/
export declare const getCspVersion: () => Promise<string>;

6
dist/api/getPluginVersion.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
/**
* Предоставляет информацию о системе
*
* @returns информацию о плагине
*/
export declare const getPluginVersion: () => Promise<string>;

10
dist/api/getSystemInfo.d.ts vendored Normal file
View File

@ -0,0 +1,10 @@
export interface SystemInfo {
cadesVersion: string;
cspVersion: string;
}
/**
* Предоставляет информацию о системе
*
* @returns информацию о CSP и плагине
*/
export declare const getSystemInfo: () => Promise<SystemInfo>;

8
dist/api/getUserCertificates.d.ts vendored Normal file
View File

@ -0,0 +1,8 @@
import { Certificate } from './certificate';
/**
* Возвращает список сертификатов, доступных пользователю в системе
*
* @param resetCache = false - позволяет сбросить кэш ранее полученных сертификатов
* @returns список сертификатов
*/
export declare const getUserCertificates: (resetCache?: boolean) => Promise<Certificate[]>;

18
dist/api/index.d.ts vendored Normal file
View File

@ -0,0 +1,18 @@
export * from './getCertificate';
export * from './getUserCertificates';
export * from './getAllUserCertificates';
export * from './getContainerCertificates';
export * from './getAllContainerCertificates';
export * from './getCertificates';
export * from './getAllCertificates';
export * from './getSystemInfo';
export * from './isValidSystemSetup';
export * from './createXMLSignature';
export * from './createDetachedSignature';
export * from './addDetachedSignature';
export * from './createAttachedSignature';
export * from './addAttachedSignature';
export * from './createHash';
export * from './certificate';
export * from './getCspVersion';
export * from './getPluginVersion';

6
dist/api/isValidSystemSetup.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
/**
* Проверяет корректность настроек ЭП на машине
*
* @returns флаг корректности настроек
*/
export declare const isValidSystemSetup: () => Promise<boolean>;

149
dist/constants/cades-constants.d.ts vendored Normal file
View File

@ -0,0 +1,149 @@
export declare const CADESCOM_ATTRIBUTE_OTHER = -1;
export declare const CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION = 2;
export declare const CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME = 1;
export declare const CADESCOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;
export declare const CADESCOM_AllowNoOutstandingRequest = 1;
export declare const CADESCOM_AllowNone = 0;
export declare const CADESCOM_AllowUntrustedCertificate = 2;
export declare const CADESCOM_AllowUntrustedRoot = 4;
export declare const CADESCOM_BASE64_TO_BINARY = 1;
export declare const CADESCOM_CADES_BES = 1;
export declare const CADESCOM_CADES_DEFAULT = 0;
export declare const CADESCOM_CADES_T = 5;
export declare const CADESCOM_CADES_X_LONG_TYPE_1 = 93;
export declare const CADESCOM_CONTAINER_STORE = 100;
export declare const CADESCOM_CURRENT_USER_STORE = 2;
export declare const CADESCOM_DISPLAY_DATA_ATTRIBUTE = 2;
export declare const CADESCOM_DISPLAY_DATA_CONTENT = 1;
export declare const CADESCOM_DISPLAY_DATA_NONE = 0;
export declare const CADESCOM_ENCODE_ANY = -1;
export declare const CADESCOM_ENCODE_BASE64 = 0;
export declare const CADESCOM_ENCODE_BINARY = 1;
export declare const CADESCOM_ENCRYPTION_ALGORITHM_3DES = 3;
export declare const CADESCOM_ENCRYPTION_ALGORITHM_AES = 4;
export declare const CADESCOM_ENCRYPTION_ALGORITHM_DES = 2;
export declare const CADESCOM_ENCRYPTION_ALGORITHM_GOST_28147_89 = 25;
export declare const CADESCOM_ENCRYPTION_ALGORITHM_RC2 = 0;
export declare const CADESCOM_ENCRYPTION_ALGORITHM_RC4 = 1;
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411 = 100;
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 = 101;
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256_HMAC = 111;
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512 = 102;
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_512_HMAC = 112;
export declare const CADESCOM_HASH_ALGORITHM_CP_GOST_3411_HMAC = 110;
export declare const CADESCOM_HASH_ALGORITHM_MD2 = 1;
export declare const CADESCOM_HASH_ALGORITHM_MD4 = 2;
export declare const CADESCOM_HASH_ALGORITHM_MD5 = 3;
export declare const CADESCOM_HASH_ALGORITHM_SHA1 = 0;
export declare const CADESCOM_HASH_ALGORITHM_SHA_256 = 4;
export declare const CADESCOM_HASH_ALGORITHM_SHA_384 = 5;
export declare const CADESCOM_HASH_ALGORITHM_SHA_512 = 6;
export declare const CADESCOM_LOCAL_MACHINE_STORE = 1;
export declare const CADESCOM_PKCS7_TYPE = 65535;
export declare const CADESCOM_STRING_TO_UCS2LE = 0;
export declare const CADESCOM_SkipInstallToStore = 268435456;
export declare const CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED = 0;
export declare const CADESCOM_XML_SIGNATURE_TYPE_ENVELOPING = 1;
export declare const CADESCOM_XML_SIGNATURE_TYPE_TEMPLATE = 2;
export declare const CAPICOM_ACTIVE_DIRECTORY_USER_STORE = 3;
export declare const CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_DESCRIPTION = 2;
export declare const CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME = 1;
export declare const CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;
export declare const CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY = 7;
export declare const CAPICOM_CERTIFICATE_FIND_CERTIFICATE_POLICY = 8;
export declare const CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY = 6;
export declare const CAPICOM_CERTIFICATE_FIND_EXTENSION = 5;
export declare const CAPICOM_CERTIFICATE_FIND_ISSUER_NAME = 2;
export declare const CAPICOM_CERTIFICATE_FIND_KEY_USAGE = 12;
export declare const CAPICOM_CERTIFICATE_FIND_ROOT_NAME = 3;
export declare const CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
export declare const CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
export declare const CAPICOM_CERTIFICATE_FIND_TEMPLATE_NAME = 4;
export declare const CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED = 11;
export declare const CAPICOM_CERTIFICATE_FIND_TIME_NOT_YET_VALID = 10;
export declare const CAPICOM_CERTIFICATE_FIND_TIME_VALID = 9;
export declare const CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT = 0;
export declare const CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY = 2;
export declare const CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN = 1;
export declare const CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME = 1;
export declare const CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME = 0;
export declare const CAPICOM_CURRENT_USER_STORE = 2;
export declare const CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE = 128;
export declare const CAPICOM_EKU_CLIENT_AUTH = 2;
export declare const CAPICOM_EKU_OTHER = 0;
export declare const CAPICOM_EKU_SMARTCARD_LOGON = 5;
export declare const CAPICOM_LOCAL_MACHINE_STORE = 1;
export declare const CAPICOM_MEMORY_STORE = 0;
export declare const CAPICOM_MY_STORE = "My";
export declare const CAPICOM_OID_KEY_USAGE_EXTENSION = 10;
export declare const CAPICOM_OID_OTHER = 0;
export declare const CAPICOM_PROPID_ACCESS_STATE = 14;
export declare const CAPICOM_PROPID_ARCHIVED = 19;
export declare const CAPICOM_PROPID_ARCHIVED_KEY_HASH = 65;
export declare const CAPICOM_PROPID_AUTO_ENROLL = 21;
export declare const CAPICOM_PROPID_CROSS_CERT_DIST_POINTS = 23;
export declare const CAPICOM_PROPID_CTL_USAGE = 9;
export declare const CAPICOM_PROPID_DATE_STAMP = 27;
export declare const CAPICOM_PROPID_DESCRIPTION = 13;
export declare const CAPICOM_PROPID_EFS = 17;
export declare const CAPICOM_PROPID_ENHKEY_USAGE = 9;
export declare const CAPICOM_PROPID_ENROLLMENT = 26;
export declare const CAPICOM_PROPID_EXTENDED_ERROR_INFO = 30;
export declare const CAPICOM_PROPID_FIRST_RESERVED = 66;
export declare const CAPICOM_PROPID_FIRST_USER = 32768;
export declare const CAPICOM_PROPID_FORTEZZA_DATA = 18;
export declare const CAPICOM_PROPID_FRIENDLY_NAME = 11;
export declare const CAPICOM_PROPID_HASH_PROP = 3;
export declare const CAPICOM_PROPID_IE30_RESERVED = 7;
export declare const CAPICOM_PROPID_ISSUER_PUBLIC_KEY_MD5_HASH = 24;
export declare const CAPICOM_PROPID_ISSUER_SERIAL_NUMBER_MD5_HASH = 28;
export declare const CAPICOM_PROPID_KEY_CONTEXT = 5;
export declare const CAPICOM_PROPID_KEY_IDENTIFIER = 20;
export declare const CAPICOM_PROPID_KEY_PROV_HANDLE = 1;
export declare const CAPICOM_PROPID_KEY_PROV_INFO = 2;
export declare const CAPICOM_PROPID_KEY_SPEC = 6;
export declare const CAPICOM_PROPID_LAST_RESERVED = 32767;
export declare const CAPICOM_PROPID_LAST_USER = 65535;
export declare const CAPICOM_PROPID_MD5_HASH = 4;
export declare const CAPICOM_PROPID_NEXT_UPDATE_LOCATION = 10;
export declare const CAPICOM_PROPID_PUBKEY_ALG_PARA = 22;
export declare const CAPICOM_PROPID_PUBKEY_HASH_RESERVED = 8;
export declare const CAPICOM_PROPID_PVK_FILE = 12;
export declare const CAPICOM_PROPID_RENEWAL = 64;
export declare const CAPICOM_PROPID_SHA1_HASH = 3;
export declare const CAPICOM_PROPID_SIGNATURE_HASH = 15;
export declare const CAPICOM_PROPID_SMART_CARD_DATA = 16;
export declare const CAPICOM_PROPID_SUBJECT_NAME_MD5_HASH = 29;
export declare const CAPICOM_PROPID_SUBJECT_PUBLIC_KEY_MD5_HASH = 25;
export declare const CAPICOM_PROPID_UNKNOWN = 0;
export declare const CAPICOM_SMART_CARD_USER_STORE = 4;
export declare const CAPICOM_STORE_OPEN_EXISTING_ONLY = 128;
export declare const CAPICOM_STORE_OPEN_INCLUDE_ARCHIVED = 256;
export declare const CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
export declare const CAPICOM_STORE_OPEN_READ_ONLY = 0;
export declare const CAPICOM_STORE_OPEN_READ_WRITE = 1;
export declare const CHECK_NONE = 0;
export declare const CHECK_OFFLINE_REVOCATION_STATUS = 16;
export declare const CHECK_ONLINE_REVOCATION_STATUS = 8;
export declare const CHECK_SIGNATURE_VALIDITY = 4;
export declare const CHECK_TIME_VALIDITY = 2;
export declare const CHECK_TRUSTED_ROOT = 1;
export declare const LOG_LEVEL_DEBUG = 4;
export declare const LOG_LEVEL_ERROR = 1;
export declare const LOG_LEVEL_INFO = 2;
export declare const TRUST_CTL_IS_NOT_SIGNATURE_VALID = 262144;
export declare const TRUST_CTL_IS_NOT_TIME_VALID = 131072;
export declare const TRUST_CTL_IS_NOT_VALID_FOR_USAGE = 524288;
export declare const TRUST_IS_CYCLIC = 128;
export declare const TRUST_IS_NOT_SIGNATURE_VALID = 8;
export declare const TRUST_IS_NOT_TIME_NESTED = 2;
export declare const TRUST_IS_NOT_TIME_VALID = 1;
export declare const TRUST_IS_NOT_VALID_FOR_USAGE = 16;
export declare const TRUST_IS_PARTIAL_CHAIN = 65536;
export declare const TRUST_IS_REVOKED = 4;
export declare const TRUST_IS_UNTRUSTED_ROOT = 32;
export declare const TRUST_REVOCATION_STATUS_UNKNOWN = 64;
export declare const XmlDsigGost3410Url = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411";
export declare const XmlDsigGost3410UrlObsolete = "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411";
export declare const XmlDsigGost3411Url = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411";
export declare const XmlDsigGost3411UrlObsolete = "http://www.w3.org/2001/04/xmldsig-more#gostr3411";

4
dist/constants/index.d.ts vendored Normal file
View File

@ -0,0 +1,4 @@
export * from './cades-constants';
export * from './issuer-tags-translations';
export * from './oids-dictionary';
export * from './subject-tags-translations';

View File

@ -0,0 +1,2 @@
import { TagsTranslations } from './tags-translations';
export declare const ISSUER_TAGS_TRANSLATIONS: TagsTranslations[];

48
dist/constants/oids-dictionary.d.ts vendored Normal file
View File

@ -0,0 +1,48 @@
export declare const OIDS_DICTIONARY: {
'1.2.643.2.2.34.6': string;
'1.2.643.2.39.1.1': string;
'1.2.643.3.131.1.1': string;
'1.2.643.100.4': string;
'1.2.643.100.1': string;
'1.2.643.100.5': string;
'1.2.643.100.3': string;
'1.2.643.3.141.1.1': string;
'1.2.643.3.141.1.2': string;
'1.2.643.3.2.100.65.13.11': string;
'1.2.643.3.8.100.1': string;
'1.2.643.3.8.100.1.1': string;
'1.2.643.3.8.100.1.10': string;
'1.2.643.3.8.100.1.11': string;
'1.2.643.3.8.100.1.12': string;
'1.2.643.3.8.100.1.13': string;
'1.2.643.3.8.100.1.14': string;
'1.2.643.3.8.100.1.2': string;
'1.2.643.3.8.100.1.3': string;
'1.2.643.3.8.100.1.4': string;
'1.2.643.3.8.100.1.5': string;
'1.2.643.3.8.100.1.6': string;
'1.2.643.3.8.100.1.7': string;
'1.2.643.3.8.100.1.8': string;
'1.2.643.3.8.100.1.9': string;
'1.2.643.5.1.24.2.1.3': string;
'1.2.643.5.1.24.2.1.3.1': string;
'1.2.643.5.1.24.2.2.2': string;
'1.2.643.5.1.24.2.2.3': string;
'1.2.643.6.2.1.7.1': string;
'1.2.643.6.2.1.7.2': string;
'1.2.643.6.3': string;
'1.2.643.6.3.1.1': string;
'1.2.643.6.3.1.2.1': string;
'1.2.643.6.3.1.2.2': string;
'1.2.643.6.3.1.2.3': string;
'1.2.643.6.3.1.3.1': string;
'1.2.643.6.3.1.4.1': string;
'1.2.643.6.3.1.4.2': string;
'1.2.643.6.3.1.4.3': string;
'1.2.840.113549.1.9.2': string;
'1.3.6.1.4.1.24138.1.1.8.1': string;
'1.3.6.1.4.1.29919.21': string;
'1.3.6.1.5.5.7.3.2': string;
'1.3.6.1.5.5.7.3.4': string;
'1.3.643.3.8.100.15': string;
};

View File

@ -0,0 +1,2 @@
import { TagsTranslations } from './tags-translations';
export declare const SUBJECT_TAGS_TRANSLATIONS: TagsTranslations[];

4
dist/constants/tags-translations.d.ts vendored Normal file
View File

@ -0,0 +1,4 @@
export interface TagsTranslations {
possibleNames: string[];
translation: string;
}

7
dist/crypto-pro-js.d.ts vendored Normal file
View File

@ -0,0 +1,7 @@
// Type definitions for crypto-pro-js 2.3.3
// Project: crypto-pro-js
// Definitions by: Artem Vasilev https://github.com/kernusr
export as namespace cryptoPro;
export * from './api';

6071
dist/crypto-pro-js.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/crypto-pro-js.js.map vendored Normal file

File diff suppressed because one or more lines are too long

11
dist/crypto-pro-js.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/crypto-pro-js.min.js.map vendored Normal file

File diff suppressed because one or more lines are too long

2557
dist/crypto-pro.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

3
dist/helpers/_afterPluginsLoaded.d.ts vendored Normal file
View File

@ -0,0 +1,3 @@
declare type Unpromisify<T> = T extends Promise<infer R> ? R : T;
export declare const _afterPluginsLoaded: <T extends (...args: any[]) => any>(fn: T) => (...args: Parameters<T>) => Promise<Unpromisify<ReturnType<T>>>;
export {};

1
dist/helpers/_extractCommonName.d.ts vendored Normal file
View File

@ -0,0 +1 @@
export declare const _extractCommonName: (subjectName: string) => string | undefined;

View File

@ -0,0 +1 @@
export declare const _extractMeaningfulErrorMessage: (error: Error) => string | null;

3
dist/helpers/_generateCadesFn.d.ts vendored Normal file
View File

@ -0,0 +1,3 @@
export declare const __cadesAsyncToken__: {};
export declare const __createCadesPluginObject__: (...args: any[]) => any;
export declare const _generateCadesFn: (callback: Function) => string;

7
dist/helpers/_getCadesCert.d.ts vendored Normal file
View File

@ -0,0 +1,7 @@
/**
* Возвращает сертификат в формате Cades по отпечатку
*
* @param thumbprint - отпечаток сертификата
* @returns сертификат в формате Cades
*/
export declare const _getCadesCert: (thumbprint: string) => Promise<any>;

View File

@ -0,0 +1,7 @@
/**
* Возвращает сертификат в формате Cades по отпечатку из хранилища закрытого ключа
*
* @param thumbprint - отпечаток сертификата
* @returns сертификат в формате Cades
*/
export declare const _getCadesContainerCert: (thumbprint: string) => Promise<any>;

7
dist/helpers/_getCadesUserCert.d.ts vendored Normal file
View File

@ -0,0 +1,7 @@
/**
* Возвращает сертификат в формате Cades по отпечатку из хранилища пользователя
*
* @param thumbprint - отпечаток сертификата
* @returns сертификат в формате Cades
*/
export declare const _getCadesUserCert: (thumbprint: string) => Promise<any>;

7
dist/helpers/_getDateObj.d.ts vendored Normal file
View File

@ -0,0 +1,7 @@
/**
* Возвращает объект даты, совместимый с Cades plugin'ом, зависящий от браузера.
*
* В IE необходимо использовать специфичный формат "VT_DATE"
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Microsoft_Extensions/Date.getVarDate
*/
export declare const _getDateObj: (dateObj: any) => Date;

View File

@ -0,0 +1 @@
export declare const _isSupportedCSPVersion: (version: string) => boolean;

View File

@ -0,0 +1 @@
export declare const _isSupportedCadesVersion: (version: string) => boolean;

14
dist/helpers/_parseCertInfo.d.ts vendored Normal file
View File

@ -0,0 +1,14 @@
import { TagsTranslations } from '../constants/tags-translations';
export interface TagTranslation {
description: string;
title: string;
isTranslated: boolean;
}
/**
* Парсит информацию из строки с информацией о сертификате
*
* @param tagsTranslations - словарь с расшифровками тэгов
* @param rawInfo - данные для парсинга
* @returns расшифрованная информация по отдельным тэгам
*/
export declare const _parseCertInfo: (tagsTranslations: TagsTranslations[], rawInfo: string) => TagTranslation[];

View File

@ -1,26 +0,0 @@
;(function () {
'use strict';
var $certs = document.querySelector('#certList');
/**
* Пример получения списка сертификатов
* */
window.CryptoPro.call('getCertsList').then(function (list) {
list.forEach(function (cert) {
var $certOption = document.createElement('option');
if (typeof $certOption.textContent !== 'undefined') {
$certOption.textContent = cert.label;
} else {
$certOption.innerText = cert.label;
}
$certOption.value = cert.thumbprint;
$certs.appendChild($certOption);
});
}, function (error) {
console.error(error);
});
}());

View File

@ -1,24 +0,0 @@
;(function () {
'use strict';
/**
* Пример создания подписи данных, сгенерированных по ГОСТ Р 34.11-94
* https://ru.wikipedia.org/wiki/%D0%93%D0%9E%D0%A1%D0%A2_%D0%A0_34.11-94
* */
var $certs = document.querySelector('#certList'),
$createSignBtn = document.querySelector('#createSign'),
$signatureCnt = document.querySelector('#createdSign'),
// Вычислинный hash по ГОСТ Р 34.11-94 для строки: "abc"
hash = 'b285056dbf18d7392d7677369524dd14747459ed8143997e163b2986f92fd42c',
hashBase64 = window.btoa(hash);
$createSignBtn.addEventListener('click', function () {
var thumbprint = $certs.value;
window.CryptoPro.call('signData', thumbprint, hashBase64).then(function (signature) {
$signatureCnt.value = signature;
});
});
}());

View File

@ -1,29 +0,0 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Пример использования CryptoPro</title>
</head>
<body>
<select id="certList"></select>
<button id="createSign" type="button">Создать подпись</button>
<br>
<textarea id="createdSign" cols="90" rows="30"></textarea>
<!-- Полифиллы для работы библиотеки -->
<script src="polyfills/addEventListener.js"></script>
<script src="polyfills/promise.js"></script>
<script src="polyfills/forEach.js"></script>
<script src="polyfills/map.js"></script>
<!-- Библиотека -->
<script src="../dist/crypto-pro.js"></script>
<!-- Полифиллы для работы демо скриптов -->
<script src="polyfills/atob-btoa.js"></script>
<!-- Демо скрипты -->
<script src="cert-list.js"></script>
<script src="create-sign.js"></script>
</body>
</html>

View File

@ -1,32 +0,0 @@
!window.addEventListener && (function (WindowPrototype, DocumentPrototype, ElementPrototype, addEventListener, removeEventListener, dispatchEvent, registry) {
WindowPrototype[addEventListener] = DocumentPrototype[addEventListener] = ElementPrototype[addEventListener] = function (type, listener) {
var target = this;
registry.unshift([target, type, listener, function (event) {
event.currentTarget = target;
event.preventDefault = function () {
event.returnValue = false
};
event.stopPropagation = function () {
event.cancelBubble = true
};
event.target = event.srcElement || target;
listener.call(target, event);
}]);
this.attachEvent("on" + type, registry[0][3]);
};
WindowPrototype[removeEventListener] = DocumentPrototype[removeEventListener] = ElementPrototype[removeEventListener] = function (type, listener) {
for (var index = 0, register; register = registry[index]; ++index) {
if (register[0] == this && register[1] == type && register[2] == listener) {
return this.detachEvent("on" + type, registry.splice(index, 1)[0][3]);
}
}
};
WindowPrototype[dispatchEvent] = DocumentPrototype[dispatchEvent] = ElementPrototype[dispatchEvent] = function (eventObject) {
return this.fireEvent("on" + eventObject.type, eventObject);
};
})(Window.prototype, HTMLDocument.prototype, Element.prototype, "addEventListener", "removeEventListener", "dispatchEvent", []);

View File

@ -1,59 +0,0 @@
// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.18
// Ссылка (en): http://es5.github.io/#x15.4.4.18
// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.18
if (!Array.prototype.forEach) {
Array.prototype.forEach = function (callback, thisArg) {
var T, k;
if (this == null) {
throw new TypeError(' this is null or not defined');
}
// 1. Положим O равным результату вызова ToObject passing the |this| value as the argument.
var O = Object(this);
// 2. Положим lenValue равным результату вызова внутреннего метода Get объекта O с аргументом "length".
// 3. Положим len равным ToUint32(lenValue).
var len = O.length >>> 0;
// 4. Если IsCallable(callback) равен false, выкинем исключение TypeError.
// Смотрите: http://es5.github.com/#x9.11
if (typeof callback !== 'function') {
throw new TypeError(callback + ' is not a function');
}
// 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined.
if (arguments.length > 1) {
T = thisArg;
}
// 6. Положим k равным 0
k = 0;
// 7. Пока k < len, будем повторять
while (k < len) {
var kValue;
// a. Положим Pk равным ToString(k).
// Это неявное преобразование для левостороннего операнда в операторе in
// b. Положим kPresent равным результату вызова внутреннего метода HasProperty объекта O с аргументом Pk.
// Этот шаг может быть объединён с шагом c
// c. Если kPresent равен true, то
if (k in O) {
// i. Положим kValue равным результату вызова внутреннего метода Get объекта O с аргументом Pk.
kValue = O[k];
// ii. Вызовем внутренний метод Call функции callback с объектом T в качестве значения this и
// списком аргументов, содержащим kValue, k и O.
callback.call(T, kValue, k, O);
}
// d. Увеличим k на 1.
k++;
}
// 8. Вернём undefined.
};
}

View File

@ -1,91 +0,0 @@
// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.19
// Ссылка (en): http://es5.github.com/#x15.4.4.19
// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.19
if (!Array.prototype.map) {
Array.prototype.map = function(callback, thisArg) {
var T, A, k;
if (this == null) {
throw new TypeError(' this is null or not defined');
}
// 1. Положим O равным результату вызова ToObject с передачей ему
// значения |this| в качестве аргумента.
var O = Object(this);
// 2. Положим lenValue равным результату вызова внутреннего метода Get
// объекта O с аргументом "length".
// 3. Положим len равным ToUint32(lenValue).
var len = O.length >>> 0;
// 4. Если вызов IsCallable(callback) равен false, выкидываем исключение TypeError.
// Смотрите (en): http://es5.github.com/#x9.11
// Смотрите (ru): http://es5.javascript.ru/x9.html#x9.11
if (typeof callback !== 'function') {
throw new TypeError(callback + ' is not a function');
}
// 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined.
if (arguments.length > 1) {
T = thisArg;
}
// 6. Положим A равным новому масиву, как если бы он был создан выражением new Array(len),
// где Array является стандартным встроенным конструктором с этим именем,
// а len является значением len.
A = new Array(len);
// 7. Положим k равным 0
k = 0;
// 8. Пока k < len, будем повторять
while (k < len) {
var kValue, mappedValue;
// a. Положим Pk равным ToString(k).
// Это неявное преобразование для левостороннего операнда в операторе in
// b. Положим kPresent равным результату вызова внутреннего метода HasProperty
// объекта O с аргументом Pk.
// Этот шаг может быть объединён с шагом c
// c. Если kPresent равен true, то
if (k in O) {
// i. Положим kValue равным результату вызова внутреннего метода Get
// объекта O с аргументом Pk.
kValue = O[k];
// ii. Положим mappedValue равным результату вызова внутреннего метода Call
// функции callback со значением T в качестве значения this и списком
// аргументов, содержащим kValue, k и O.
mappedValue = callback.call(T, kValue, k, O);
// iii. Вызовем внутренний метод DefineOwnProperty объекта A с аргументами
// Pk, Описатель Свойства
// { Value: mappedValue,
// Writable: true,
// Enumerable: true,
// Configurable: true }
// и false.
// В браузерах, поддерживающих Object.defineProperty, используем следующий код:
// Object.defineProperty(A, k, {
// value: mappedValue,
// writable: true,
// enumerable: true,
// configurable: true
// });
// Для лучшей поддержки браузерами, используем следующий код:
A[k] = mappedValue;
}
// d. Увеличим k на 1.
k++;
}
// 9. Вернём A.
return A;
};
}

1
examples/script-tag/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/public/dist

485
examples/script-tag/package-lock.json generated Normal file
View File

@ -0,0 +1,485 @@
{
"name": "crypto-pro-example-es5-script-tag",
"version": "2.3.3",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "crypto-pro-example-es5-script-tag",
"version": "2.3.3",
"dependencies": {
"crypto-pro-js": "^2.3.3"
},
"devDependencies": {
"node-static": "0.7.11",
"symlink-dir": "3.1.2"
}
},
"node_modules/balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"node_modules/better-path-resolve": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz",
"integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==",
"dev": true,
"dependencies": {
"is-windows": "^1.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"node_modules/colors": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
"integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
"dev": true,
"engines": {
"node": ">=0.1.90"
}
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"node_modules/crypto-pro-js": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/crypto-pro-js/-/crypto-pro-js-2.3.3.tgz",
"integrity": "sha512-ge6PXRw6pu2kXeaqwEpHvmQEuSRQWJcVfQfPfF5gGONIi+jUHFsvkeS5ojFcKKBDqFHnYUQXFZ1aMKDGdoVRqg==",
"engines": {
"node": "~16"
}
},
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"node_modules/glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
}
},
"node_modules/graceful-fs": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
"dev": true
},
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"node_modules/is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/make-dir": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz",
"integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==",
"dev": true,
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"dev": true,
"bin": {
"mime": "cli.js"
},
"engines": {
"node": ">=4"
}
},
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"node_modules/minimist": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
"dev": true
},
"node_modules/node-static": {
"version": "0.7.11",
"resolved": "https://registry.npmjs.org/node-static/-/node-static-0.7.11.tgz",
"integrity": "sha512-zfWC/gICcqb74D9ndyvxZWaI1jzcoHmf4UTHWQchBNuNMxdBLJMDiUgZ1tjGLEIe/BMhj2DxKD8HOuc2062pDQ==",
"dev": true,
"dependencies": {
"colors": ">=0.6.0",
"mime": "^1.2.9",
"optimist": ">=0.3.4"
},
"bin": {
"static": "bin/cli.js"
},
"engines": {
"node": ">= 0.4.1"
}
},
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"dependencies": {
"wrappy": "1"
}
},
"node_modules/optimist": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
"dev": true,
"dependencies": {
"minimist": "~0.0.1",
"wordwrap": "~0.0.2"
}
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/rename-overwrite": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/rename-overwrite/-/rename-overwrite-2.0.2.tgz",
"integrity": "sha512-XodkUmbg11ZzZoAkYfJYEmj8FscfeRL2KHGALeDSB76ia8A1zqQq0+WkcepXm7QkuzmW0CE3uiFUBr/UJfin+w==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.1.11",
"rimraf": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
}
},
"node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/symlink-dir": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/symlink-dir/-/symlink-dir-3.1.2.tgz",
"integrity": "sha512-wuqI+beQTU3XQq6bHTg4tcFiXlAN5uWNus+R0/I/R9O/ORpVHdCo2JQp04dCexBIb94VarosKFU+kjVEgzIQpQ==",
"dev": true,
"dependencies": {
"better-path-resolve": "^1.0.0",
"graceful-fs": "^4.1.11",
"make-dir": "^3.0.0",
"rename-overwrite": "^2.0.1"
},
"bin": {
"symlink-dir": "dist/cli.js"
},
"engines": {
"node": ">=8.15"
}
},
"node_modules/wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
}
},
"dependencies": {
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"better-path-resolve": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz",
"integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==",
"dev": true,
"requires": {
"is-windows": "^1.0.0"
}
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"colors": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
"integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"crypto-pro-js": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/crypto-pro-js/-/crypto-pro-js-2.3.3.tgz",
"integrity": "sha512-ge6PXRw6pu2kXeaqwEpHvmQEuSRQWJcVfQfPfF5gGONIi+jUHFsvkeS5ojFcKKBDqFHnYUQXFZ1aMKDGdoVRqg=="
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"graceful-fs": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
"dev": true
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true
},
"make-dir": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz",
"integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==",
"dev": true,
"requires": {
"semver": "^6.0.0"
}
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"dev": true
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
"dev": true
},
"node-static": {
"version": "0.7.11",
"resolved": "https://registry.npmjs.org/node-static/-/node-static-0.7.11.tgz",
"integrity": "sha512-zfWC/gICcqb74D9ndyvxZWaI1jzcoHmf4UTHWQchBNuNMxdBLJMDiUgZ1tjGLEIe/BMhj2DxKD8HOuc2062pDQ==",
"dev": true,
"requires": {
"colors": ">=0.6.0",
"mime": "^1.2.9",
"optimist": ">=0.3.4"
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"optimist": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
"dev": true,
"requires": {
"minimist": "~0.0.1",
"wordwrap": "~0.0.2"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"rename-overwrite": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/rename-overwrite/-/rename-overwrite-2.0.2.tgz",
"integrity": "sha512-XodkUmbg11ZzZoAkYfJYEmj8FscfeRL2KHGALeDSB76ia8A1zqQq0+WkcepXm7QkuzmW0CE3uiFUBr/UJfin+w==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.11",
"rimraf": "^3.0.0"
}
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
},
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
},
"symlink-dir": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/symlink-dir/-/symlink-dir-3.1.2.tgz",
"integrity": "sha512-wuqI+beQTU3XQq6bHTg4tcFiXlAN5uWNus+R0/I/R9O/ORpVHdCo2JQp04dCexBIb94VarosKFU+kjVEgzIQpQ==",
"dev": true,
"requires": {
"better-path-resolve": "^1.0.0",
"graceful-fs": "^4.1.11",
"make-dir": "^3.0.0",
"rename-overwrite": "^2.0.1"
}
},
"wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
"integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
"dev": true
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
}
}
}

View File

@ -0,0 +1,18 @@
{
"name": "crypto-pro-example-es5-script-tag",
"version": "2.3.3",
"description": "Пример использования пакета crypto-pro через тэг script",
"private": true,
"scripts": {
"link-library": "symlink-dir ./node_modules/crypto-pro-js/dist ./public/dist",
"serve": "static --host-address localhost --port 8080 public",
"start": "npm run link-library && npm run serve"
},
"devDependencies": {
"node-static": "0.7.11",
"symlink-dir": "3.1.2"
},
"dependencies": {
"crypto-pro-js": "^2.3.3"
}
}

View File

@ -0,0 +1,31 @@
/**
* Пример получения списка сертификатов
* */
;(function () {
'use strict';
var $certificate = document.getElementById('certificate'),
$createSignature = document.getElementById('createSignature'),
$certificateDetails = document.getElementById('certificateDetails'),
$certificateError = document.getElementById('certificateListError');
$certificate.addEventListener('change', function handleCertSelection() {
var thumbprint = $certificate.value;
$createSignature.disabled = !thumbprint;
$certificateDetails.style.display = thumbprint ? 'block' : 'none';
});
window.cryptoPro.getCertificates().then(function (certificateList) {
certificateList.forEach(function (certificate) {
var $certOption = document.createElement('option');
$certOption.textContent = certificate.name + ' (действителен до: ' + certificate.validTo + ')';
$certOption.value = certificate.thumbprint;
$certificate.appendChild($certOption);
});
}, function (error) {
$certificateError.textContent = error.message;
});
})();

View File

@ -0,0 +1,104 @@
/**
* Пример создания подписи данных
* */
;(function () {
'use strict';
var $createSignature = document.forms.createSignature,
$certificate = document.getElementById('certificate'),
$message = document.getElementById('message'),
$messageFile = document.getElementById('messageFile'),
$messageFileError = document.getElementById('messageFileError'),
$hash = document.getElementById('hash'),
$hashError = document.getElementById('hashError'),
$signature = document.getElementById('signature'),
$signatureError = document.getElementById('signatureError'),
// https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/213/12/ogrnichenie-n-rzmer-podpisyvemogo-fjjl-v-bruzere
MAX_FILE_SIZE = 25000000;
function readFile(messageFile) {
return new Promise(function (resolve, reject) {
var fileReader = new FileReader();
fileReader.onload = function () {
resolve(this.result);
};
if (messageFile.size > MAX_FILE_SIZE) {
reject('Файл для подписи не должен превышать ' + MAX_FILE_SIZE / 1000000 + 'МБ');
return;
}
fileReader.readAsArrayBuffer(messageFile);
});
}
function createSignature(message, hash) {
var thumbprint = $certificate.value,
signatureType = document.querySelector('input[name="signatureType"]:checked').value,
signaturePromise;
$hash.value = hash;
$signature.placeholder = 'Создается...';
$signature.value = '';
switch (signatureType) {
case 'attached':
signaturePromise = window.cryptoPro.createAttachedSignature(thumbprint, message);
break;
case 'xml':
signaturePromise = window.cryptoPro.createXMLSignature(thumbprint, message);
break;
case 'detached':
signaturePromise = window.cryptoPro.createDetachedSignature(thumbprint, hash);
break;
}
signaturePromise.then(function (signature) {
$signature.value = signature;
$signatureError.textContent = '';
}, function (error) {
$signature.placeholder = 'Не создана';
$signatureError.textContent = error.message;
});
}
$message.addEventListener('keydown', function() {
$messageFile.value = null;
});
if ($messageFile) {
$messageFile.addEventListener('change', function() {
$message.value = '';
});
}
$createSignature.addEventListener('submit', function (event) {
var messageFile = $messageFile && $messageFile.files.length && $messageFile.files[0],
messagePromise = Promise.resolve($message.value);
if (messageFile) {
messagePromise = readFile(messageFile);
}
event.preventDefault();
messagePromise.then(function (message) {
$hash.placeholder = 'Вычисляется...';
$hash.value = '';
window.cryptoPro.createHash(message).then(createSignature.bind(null, message), function (hashError) {
$hash.placeholder = 'Не вычислен';
$hashError.textContent = hashError.message;
});
}, function (fileError) {
$messageFileError.textContent = fileError;
})
});
})();

View File

@ -0,0 +1,21 @@
/**
* Пример получения сведений о системе
*/
;(function () {
'use strict';
var $systemInfo = document.getElementById('systemInfo'),
$systemInfoError = document.getElementById('systemInfoError');
window.cryptoPro.getSystemInfo().then(function (systemInfo) {
window.cryptoPro.isValidSystemSetup().then(function (isValidSystemSetup) {
systemInfo.isValidSystemSetup = isValidSystemSetup;
$systemInfo.textContent = JSON.stringify(systemInfo, null, ' ');
}, handleError);
}, handleError);
function handleError(error) {
$systemInfoError.textContent = error.message;
}
})();

View File

@ -0,0 +1,97 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Пример использования cryptoPro</title>
</head>
<body>
<form name="createSignature" novalidate>
<fieldset>
<legend>Создание подписи</legend>
<label for="message">Подписываемое сообщение: *</label>
<br>
<textarea id="message" cols="80" rows="5" placeholder="Введите сообщение" autofocus required>Привет мир!</textarea>
<br><br>
<!--[if gte IE 10]><!-->
<label for="messageFile">Или файл для подписи:</label>
<br/>
<input id="messageFile" type="file">
<pre id="messageFileError"></pre>
<!--<![endif]-->
<hr>
<label for="certificate">Сертификат: *</label>
<br>
<select id="certificate" tabindex="-1" required>
<option disabled selected>Не выбран</option>
</select>
<pre id="certificateListError"></pre>
<details id="certificateDetails">
<summary>Информация о сертификате</summary>
<pre id="certificateInfo"></pre>
</details>
<pre id="certificateInfoError"></pre>
<label>Тип подписи: *</label>
<br>
<label><input type="radio" name="signatureType" value="attached">Совмещенная</label>
<br>
<label><input type="radio" name="signatureType" value="xml">XML</label>
<br>
<label><input type="radio" name="signatureType" value="detached" checked>Отделенная</label>
<br><br>
<hr>
<button id="createSignature" type="submit" disabled>Создать подпись</button>
</fieldset>
<fieldset>
<legend>Результат</legend>
<label for="hash">Хеш (ГОСТ Р 34.11-2012 256 бит):</label><br>
<textarea id="hash" cols="80" rows="5" placeholder="Не вычислен"></textarea>
<br>
<pre id="hashError"></pre>
<label for="signature">Подпись (PKCS7):</label><br>
<textarea id="signature" cols="80" rows="30" placeholder="Не создана"></textarea>
<pre id="signatureError"></pre>
<p>
Для
<a href="https://www.gosuslugi.ru/pgu/eds/"
target="_blank"
rel="nofollow noopener noreferrer"
title="Перейти к проверке подписи">проверки</a>
нужно создать файл со сгенерированной подписью в кодировке UTF-8 с расширением *.sgn
<br>
для отделенной подписи (или *.sig для совмещенной).
</p>
</fieldset>
<fieldset>
<legend>Информация о системе</legend>
<pre id="systemInfo"></pre>
<pre id="systemInfoError"></pre>
</fieldset>
</form>
<!-- Полифиллы для работы библиотеки -->
<script src="polyfills/promise.js"></script>
<script src="polyfills/find.js"></script>
<!-- Библиотека -->
<script src="dist/crypto-pro-js.js"></script>
<!-- Полифиллы для работы демо скриптов -->
<script src="polyfills/atob-btoa.js"></script>
<script src="polyfills/details-element-polyfill.js"></script>
<!-- Демо скрипты -->
<script src="cert-list.js"></script>
<script src="create-sign.js"></script>
<script src="get-env-info.js"></script>
<script src="show-cert.js"></script>
</body>
</html>

View File

@ -0,0 +1,194 @@
/*
Details Element Polyfill 2.4.0
Copyright © 2019 Javan Makhmali
*/
(function() {
"use strict";
var element = document.createElement("details");
var elementIsNative = typeof HTMLDetailsElement != "undefined" && element instanceof HTMLDetailsElement;
var support = {
open: "open" in element || elementIsNative,
toggle: "ontoggle" in element
};
var styles = '\ndetails, summary {\n display: block;\n}\ndetails:not([open]) > *:not(summary) {\n display: none;\n}\nsummary::before {\n content: "►";\n padding-right: 0.3rem;\n font-size: 0.6rem;\n cursor: default;\n}\n[open] > summary::before {\n content: "▼";\n}\n';
var _ref = [], forEach = _ref.forEach, slice = _ref.slice;
if (!support.open) {
polyfillStyles();
polyfillProperties();
polyfillToggle();
polyfillAccessibility();
}
if (support.open && !support.toggle) {
polyfillToggleEvent();
}
function polyfillStyles() {
document.head.insertAdjacentHTML("afterbegin", "<style>" + styles + "</style>");
}
function polyfillProperties() {
var prototype = document.createElement("details").constructor.prototype;
var setAttribute = prototype.setAttribute, removeAttribute = prototype.removeAttribute;
var open = Object.getOwnPropertyDescriptor(prototype, "open");
Object.defineProperties(prototype, {
open: {
get: function get() {
if (this.tagName == "DETAILS") {
return this.hasAttribute("open");
} else {
if (open && open.get) {
return open.get.call(this);
}
}
},
set: function set(value) {
if (this.tagName == "DETAILS") {
return value ? this.setAttribute("open", "") : this.removeAttribute("open");
} else {
if (open && open.set) {
return open.set.call(this, value);
}
}
}
},
setAttribute: {
value: function value(name, _value) {
var _this = this;
var call = function call() {
return setAttribute.call(_this, name, _value);
};
if (name == "open" && this.tagName == "DETAILS") {
var wasOpen = this.hasAttribute("open");
var result = call();
if (!wasOpen) {
var summary = this.querySelector("summary");
if (summary) summary.setAttribute("aria-expanded", true);
triggerToggle(this);
}
return result;
}
return call();
}
},
removeAttribute: {
value: function value(name) {
var _this2 = this;
var call = function call() {
return removeAttribute.call(_this2, name);
};
if (name == "open" && this.tagName == "DETAILS") {
var wasOpen = this.hasAttribute("open");
var result = call();
if (wasOpen) {
var summary = this.querySelector("summary");
if (summary) summary.setAttribute("aria-expanded", false);
triggerToggle(this);
}
return result;
}
return call();
}
}
});
}
function polyfillToggle() {
onTogglingTrigger(function(element) {
element.hasAttribute("open") ? element.removeAttribute("open") : element.setAttribute("open", "");
});
}
function polyfillToggleEvent() {
if (window.MutationObserver) {
new MutationObserver(function(mutations) {
forEach.call(mutations, function(mutation) {
var target = mutation.target, attributeName = mutation.attributeName;
if (target.tagName == "DETAILS" && attributeName == "open") {
triggerToggle(target);
}
});
}).observe(document.documentElement, {
attributes: true,
subtree: true
});
} else {
onTogglingTrigger(function(element) {
var wasOpen = element.getAttribute("open");
setTimeout(function() {
var isOpen = element.getAttribute("open");
if (wasOpen != isOpen) {
triggerToggle(element);
}
}, 1);
});
}
}
function polyfillAccessibility() {
setAccessibilityAttributes(document);
if (window.MutationObserver) {
new MutationObserver(function(mutations) {
forEach.call(mutations, function(mutation) {
forEach.call(mutation.addedNodes, setAccessibilityAttributes);
});
}).observe(document.documentElement, {
subtree: true,
childList: true
});
} else {
document.addEventListener("DOMNodeInserted", function(event) {
setAccessibilityAttributes(event.target);
});
}
}
function setAccessibilityAttributes(root) {
findElementsWithTagName(root, "SUMMARY").forEach(function(summary) {
var details = findClosestElementWithTagName(summary, "DETAILS");
summary.setAttribute("aria-expanded", details.hasAttribute("open"));
if (!summary.hasAttribute("tabindex")) summary.setAttribute("tabindex", "0");
if (!summary.hasAttribute("role")) summary.setAttribute("role", "button");
});
}
function eventIsSignificant(event) {
return !(event.defaultPrevented || event.ctrlKey || event.metaKey || event.shiftKey || event.target.isContentEditable);
}
function onTogglingTrigger(callback) {
addEventListener("click", function(event) {
if (eventIsSignificant(event)) {
if (event.which <= 1) {
var element = findClosestElementWithTagName(event.target, "SUMMARY");
if (element && element.parentNode && element.parentNode.tagName == "DETAILS") {
callback(element.parentNode);
}
}
}
}, false);
addEventListener("keydown", function(event) {
if (eventIsSignificant(event)) {
if (event.keyCode == 13 || event.keyCode == 32) {
var element = findClosestElementWithTagName(event.target, "SUMMARY");
if (element && element.parentNode && element.parentNode.tagName == "DETAILS") {
callback(element.parentNode);
event.preventDefault();
}
}
}
}, false);
}
function triggerToggle(element) {
var event = document.createEvent("Event");
event.initEvent("toggle", false, false);
element.dispatchEvent(event);
}
function findElementsWithTagName(root, tagName) {
return (root.tagName == tagName ? [ root ] : []).concat(typeof root.getElementsByTagName == "function" ? slice.call(root.getElementsByTagName(tagName)) : []);
}
function findClosestElementWithTagName(element, tagName) {
if (typeof element.closest == "function") {
return element.closest(tagName);
} else {
while (element) {
if (element.tagName == tagName) {
return element;
} else {
element = element.parentNode;
}
}
}
}
})();

View File

@ -0,0 +1,43 @@
// https://tc39.github.io/ecma262/#sec-array.prototype.find
if (!Array.prototype.find) {
Array.prototype.find = function(predicate) {
'use strict';
// 1. Let O be ? ToObject(this value).
if (this == null) {
throw new TypeError('"this" is null or not defined');
}
var o = Object(this);
// 2. Let len be ? ToLength(? Get(O, "length")).
var len = o.length >>> 0;
// 3. If IsCallable(predicate) is false, throw a TypeError exception.
if (typeof predicate !== 'function') {
throw new TypeError('predicate must be a function');
}
// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
var thisArg = arguments[1];
// 5. Let k be 0.
var k = 0;
// 6. Repeat, while k < len
while (k < len) {
// a. Let Pk be ! ToString(k).
// b. Let kValue be ? Get(O, Pk).
// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
// d. If testResult is true, return kValue.
var kValue = o[k];
if (predicate.call(thisArg, kValue, k, o)) {
return kValue;
}
// e. Increase k by 1.
k++;
}
// 7. Return undefined.
return undefined;
};
}

View File

@ -0,0 +1,67 @@
/**
* Пример извлечения информации о сертификате
* */
;(function () {
'use strict';
var $certificate = document.getElementById('certificate'),
$certificateDetails = document.getElementById('certificateDetails'),
$certificateInfo = document.getElementById('certificateInfo'),
$certificatesError = document.getElementById('certificateInfoError');
$certificateDetails.style.display = 'none';
$certificateDetails.addEventListener('toggle', function () {
if ($certificateDetails.open) {
var thumbprint = $certificate.value;
$certificateInfo.textContent = 'Запрашивается...';
window.cryptoPro.getCertificate(thumbprint).then(function (certificate) {
Promise.all([
certificate.isValid(),
certificate.getCadesProp('Version'),
certificate.exportBase64(),
certificate.getAlgorithm(),
certificate.getExtendedKeyUsage(),
certificate.getOwnerInfo(),
certificate.getIssuerInfo(),
certificate.getDecodedExtendedKeyUsage(),
certificate.hasExtendedKeyUsage('1.3.6.1.4.1.311.80.1'),
certificate.hasExtendedKeyUsage(['1.3.6.1.5.5.7.3.2', '1.3.6.1.4.1.311.10.3.12']),
certificate.hasExtendedKeyUsage('1.3.6.1.4.1.311.80.2'),
certificate.hasExtendedKeyUsage(['1.3.6.1.5.5.7.3.3', '1.3.6.1.4.1.311.10.3.12']),
]).then(function (results) {
$certificateInfo.textContent = JSON.stringify({
name: certificate.name,
issuerName: certificate.issuerName,
subjectName: certificate.subjectName,
thumbprint: certificate.thumbprint,
validFrom: certificate.validFrom,
validTo: certificate.validTo,
isValid: results[0],
version: results[1],
base64: results[2],
algorithm: results[3],
extendedKeyUsage: results[4],
ownerInfo: results[5],
issuerInfo: results[6],
decodedExtendedKeyUsage: results[7],
'1.3.6.1.4.1.311.80.1': results[8],
"['1.3.6.1.5.5.7.3.2', '1.3.6.1.4.1.311.10.3.12']": results[9],
'1.3.6.1.4.1.311.80.2': results[10],
"'1.3.6.1.5.5.7.3.3', '1.3.6.1.4.1.311.10.3.12'": results[11],
}, null, ' ');
}, handleError);
}, handleError);
return;
}
$certificateInfo.textContent = '';
});
function handleError(error) {
$certificatesError.textContent = '\n' + error.message;
}
})();

10
jest.config.js Normal file
View File

@ -0,0 +1,10 @@
module.exports = {
preset: 'ts-jest',
testEnvironment: 'jsdom',
coveragePathIgnorePatterns: [
'<rootDir>/src/vendor/',
],
testPathIgnorePatterns: [
'<rootDir>/examples/',
],
};

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

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

9
lib/api/addDetachedSignature.d.ts vendored Normal file
View File

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

22
lib/api/certificate/certificate.d.ts vendored Normal file
View File

@ -0,0 +1,22 @@
import { TagTranslation } from '../../helpers/_parseCertInfo';
import { ExtendedKeysTranslations } from './getDecodedExtendedKeyUsage';
export declare type CadesCertificate = any;
export declare class Certificate {
_cadesCertificate: CadesCertificate;
name: string;
issuerName: string;
subjectName: string;
thumbprint: string;
validFrom: string;
validTo: string;
constructor(_cadesCertificate: CadesCertificate, name: string, issuerName: string, subjectName: string, thumbprint: string, validFrom: string, validTo: string);
getOwnerInfo(): Promise<TagTranslation[]>;
getIssuerInfo(): Promise<TagTranslation[]>;
getExtendedKeyUsage(): Promise<string[]>;
getDecodedExtendedKeyUsage(): Promise<ExtendedKeysTranslations>;
getAlgorithm(): Promise<string>;
getCadesProp(propName: any): Promise<any>;
isValid(): Promise<boolean>;
exportBase64(): Promise<string>;
hasExtendedKeyUsage(oids: any): Promise<boolean>;
}

6
lib/api/certificate/exportBase64.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
/**
* Экспортирует сертификат в формате base64
*
* @returns сертификат в формате base64
*/
export declare const exportBase64: () => Promise<string>;

11
lib/api/certificate/getAlgorithm.d.ts vendored Normal file
View File

@ -0,0 +1,11 @@
interface AlgorithmInfo {
algorithm: string;
oid: string;
}
/**
* Возвращает информацию об алгоритме сертификата
*
* @returns информацию об алгоритме и его OID'е
*/
export declare const getAlgorithm: () => Promise<AlgorithmInfo>;
export {};

7
lib/api/certificate/getCadesProp.d.ts vendored Normal file
View File

@ -0,0 +1,7 @@
/**
* Возвращает указанное внутренее свойство у сертификата в формате Cades
*
* @param propName = наименование свойства
* @returns значение запрошенного свойства
*/
export declare const getCadesProp: (propName: string) => Promise<any>;

View File

@ -0,0 +1,9 @@
export interface ExtendedKeysTranslations {
[key: string]: string | null;
}
/**
* Возвращает расшифрованные ОИД'ы сертификата
*
* @returns словарь расшифрованных ОИД'ов
*/
export declare const getDecodedExtendedKeyUsage: () => Promise<ExtendedKeysTranslations>;

View File

@ -0,0 +1,6 @@
/**
* Возвращает ОИД'ы сертификата
*
* @returns список ОИД'ов
*/
export declare const getExtendedKeyUsage: () => Promise<string[]>;

10
lib/api/certificate/getInfo.d.ts vendored Normal file
View File

@ -0,0 +1,10 @@
import { TagsTranslations } from '../../constants/tags-translations';
import { TagTranslation } from '../../helpers/_parseCertInfo';
/**
* Возвращает расшифрованную информацию о сертификате из указанного свойства по тэгам
*
* @param tags = словарь
* @param entitiesPath = путь к разбираемой сущности
* @returns расшифрованная информация по отдельным тэгам
*/
export declare const getInfo: (tags: TagsTranslations[], entitiesPath: string) => Promise<TagTranslation[]>;

View File

@ -0,0 +1,7 @@
/**
* Проверяет наличие ОИД'а (ОИД'ов) у сертификата
*
* @param oids - ОИД'ы для проверки
* @returns флаг наличия ОИД'ов у сертификата
*/
export declare const hasExtendedKeyUsage: (oids: string | string[]) => Promise<boolean>;

1
lib/api/certificate/index.d.ts vendored Normal file
View File

@ -0,0 +1 @@
export * from './certificate';

6
lib/api/certificate/isValid.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
/**
* Проверяет действительность сертификата
*
* @returns флаг валидности
*/
export declare const isValid: () => Promise<boolean>;

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>;

9
lib/api/createHash.d.ts vendored Normal file
View File

@ -0,0 +1,9 @@
/**
* Создает хеш сообщения по ГОСТ Р 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 хеш
*/
export declare const createHash: (unencryptedMessage: string | ArrayBuffer) => Promise<string>;

Some files were not shown because too many files have changed in this diff Show More