Compare commits

..
123 Commits
Author SHA1 Message Date
Github Actions 83975e9235 [CI Skip] release/stable 5.2.1
skip-checks: true
2020-12-27 07:44:02 +00:00
Jaco Greeff 3adf475ef4 5.2 (#821)
* 5.2

* Bump
2020-12-27 08:39:14 +01:00
Github Actions ccc6edebbb [CI Skip] release/beta 5.1.2-3
skip-checks: true
2020-12-25 08:58:15 +00:00
Jaco Greeff 0d7ed7420d Add keccak512 (#820)
* Add keccak512

* dedupe

* Adjust hex test

* ss58

* fix expectation
2020-12-25 09:52:49 +01:00
Github Actions dbf1837b97 [CI Skip] release/beta 5.1.2-2
skip-checks: true
2020-12-24 07:56:46 +00:00
Jaco Greeff 9ae738ac51 Add Valiu (#818) 2020-12-24 08:51:22 +01:00
Github Actions a4000efc43 [CI Skip] release/beta 5.1.2-1
skip-checks: true
2020-12-23 11:03:53 +00:00
Jaco Greeff 7871a17942 Add arrayFlatten (#816)
* Add arrayFlatten

* Add test for arrayFlatten

* Add arrayChunk

* Update packages/util/src/array/chunk.ts
2020-12-23 11:58:59 +01:00
Github Actions 5aad1d09b2 [CI Skip] release/beta 5.1.2-0
skip-checks: true
2020-12-22 09:22:25 +00:00
Jaco Greeff 4eb5d7dfd3 Bump deps (#815)
* Bump deps

* Rewrite
2020-12-22 10:16:34 +01:00
Github Actions 0a841e8f4a [CI Skip] release/stable 5.1.1
skip-checks: true
2020-12-19 14:23:05 +00:00
Jaco Greeff 53ffd0c9f0 5.1 (#813) 2020-12-19 15:17:01 +01:00
Github Actions 5d3a9f2e2e [CI Skip] release/beta 5.0.2-9
skip-checks: true
2020-12-19 10:41:44 +00:00
Jaco Greeff 9d6f38edb3 Bump deps 2020-12-19 11:36:55 +01:00
Github Actions 9e5e032e1d [CI Skip] release/beta 5.0.2-8
skip-checks: true
2020-12-18 10:24:04 +00:00
Jaco Greeff 31426858c6 detectPackage import revert 2020-12-18 11:18:02 +01:00
Github Actions 46b4ca0c91 [CI Skip] release/beta 5.0.2-7
skip-checks: true
2020-12-17 13:02:30 +00:00
Jaco Greeff f4cb68c567 Mark detectPackage as sideEffect 2020-12-17 13:57:41 +01:00
Github Actions ab4b234510 [CI Skip] release/beta 5.0.2-6
skip-checks: true
2020-12-17 12:19:30 +00:00
Jaco Greeff d5151c4f01 Adjust detectPackage 2020-12-17 13:14:38 +01:00
Jaco Greeff 6df4689aa3 Cleanup detectPackage 2020-12-17 13:05:26 +01:00
Github Actions 9727a6a9a5 [CI Skip] release/beta 5.0.2-5
skip-checks: true
2020-12-17 11:42:14 +00:00
Jaco Greeff 7f00182fd9 Bump wasm-crypto 2020-12-17 12:37:21 +01:00
Github Actions 261b0add27 [CI Skip] release/beta 5.0.2-4
skip-checks: true
2020-12-17 11:25:06 +00:00
Jaco Greeff 5d6e753384 sideEffects 2020-12-17 12:20:15 +01:00
Github Actions 15c2e79e6e [CI Skip] release/beta 5.0.2-3
skip-checks: true
2020-12-17 11:12:29 +00:00
Jaco Greeff f763a66219 Allow detectPackage with a function (#811) 2020-12-17 12:07:00 +01:00
Jaco Greeff 1061df6e4a Adjust blakejs commonjs imports (#809) 2020-12-17 12:03:21 +01:00
Github Actions 4c121e6f50 [CI Skip] release/beta 5.0.2-2
skip-checks: true
2020-12-17 10:52:01 +00:00
Jaco Greeff 74b3a04c4a Dedupe 2020-12-17 11:46:57 +01:00
Github Actions e4488463ba [CI Skip] release/beta 5.0.2-1
skip-checks: true
2020-12-16 14:48:44 +00:00
Jaco Greeff c6fd67b5d5 detectPackage with import.meta.url (#810)
* detectPackage with import.meta.url

* Bump dev

* Remove duplicate detectPackage

* Fix detectPackage import
2020-12-16 15:44:00 +01:00
Github Actions e5dc596867 [CI Skip] release/beta 5.0.2-0
skip-checks: true
2020-12-15 14:54:43 +00:00
Jaco Greeff a28f8dad37 detectPackage cleanups (#807) 2020-12-15 15:49:00 +01:00
Github Actions 7855658bfd [CI Skip] release/stable 5.0.1
skip-checks: true
2020-12-13 14:19:15 +00:00
Jaco Greeff de14a85817 5.0 (#800)
* 5.0

* Update CHANGELOG.md

* CHANGELOG
2020-12-13 15:13:40 +01:00
Github Actions de2206bb27 [CI Skip] release/beta 4.2.2-21
skip-checks: true
2020-12-13 12:50:35 +00:00
Jaco Greeff 451a7aecde Adjust memoize normalize for BigInt (#806)
* Adjust memoize normalizer to cater for BigInt

* Update memomize typings

* cleanups

* Renames
2020-12-13 13:46:22 +01:00
Github Actions 5170194105 [CI Skip] release/beta 4.2.2-20
skip-checks: true
2020-12-13 12:11:48 +00:00
Jaco Greeff b2286ac06a Add memoize util (#805)
* Add memoize util

* Allow for instanceId & normalize overrides

* memoize tests
2020-12-13 13:05:58 +01:00
Github Actions 57cc6d6d46 [CI Skip] release/beta 4.2.2-19
skip-checks: true
2020-12-13 09:40:57 +00:00
Jaco Greeff 6e1b5901b3 Update .123trigger 2020-12-13 10:36:28 +01:00
Github Actions 203db7467f [CI Skip] release/beta 4.2.2-18
skip-checks: true
2020-12-13 09:33:25 +00:00
Jaco Greeff aa7d4838c7 Bump wasm-crypto (#803) 2020-12-13 10:28:45 +01:00
Github Actions b778f606c5 [CI Skip] release/beta 4.2.2-17
skip-checks: true
2020-12-12 18:00:15 +00:00
Jaco Greeff 45146efce8 Limit logger size via DEBUG_MAX (#802)
* Limit logger size via DEBUG_MAX

* Any negative disables

* Node imports

* Update test
2020-12-12 18:54:31 +01:00
Github Actions 9229f9f295 [CI Skip] release/beta 4.2.2-16
skip-checks: true
2020-12-12 12:35:27 +00:00
Jaco Greeff 2e1c29a5a8 Bump wasm-crypto (#801) 2020-12-12 13:30:36 +01:00
Github Actions 79f925b589 [CI Skip] release/beta 4.2.2-15
skip-checks: true
2020-12-11 22:34:04 +00:00
Jaco Greeff 572c2789cc Bump dev 2020-12-11 23:28:34 +01:00
Github Actions 913f9636ba [CI Skip] release/beta 4.2.2-14
skip-checks: true
2020-12-11 16:42:05 +00:00
Jaco Greeff 83e5592305 Bump WASM, re-add tests 2020-12-11 17:39:58 +01:00
Github Actions b7e579f6b8 [CI Skip] release/beta 4.2.2-13
skip-checks: true
2020-12-11 16:21:40 +00:00
Jaco Greeff c211b811a6 Skip tests until wasm updated 2020-12-11 17:19:35 +01:00
Jaco Greeff 4c02b25a2d Small adjustments for esm (& default build) (#798) 2020-12-11 17:08:16 +01:00
Github Actions 28b2435019 [CI Skip] release/beta 4.2.2-12
skip-checks: true
2020-12-11 08:58:02 +00:00
Jaco Greeff a0e5d60a0a Bump dev 2020-12-11 09:53:45 +01:00
Github Actions 311eceec0d [CI Skip] release/beta 4.2.2-11
skip-checks: true
2020-12-10 16:24:24 +00:00
Jaco Greeff cf24dcdf22 Build esm alongside (unused, but published) (#797) 2020-12-10 17:19:19 +01:00
Github Actions ead3eceef4 [CI Skip] release/beta 4.2.2-10
skip-checks: true
2020-12-10 14:32:25 +00:00
Jaco Greeff 59df9aefc4 Bump wasm (#795)
* Bump wasm

* Bump wasm

* Bump

* Network kilt, etc.
2020-12-10 15:28:02 +01:00
Github Actions cb97cc1786 [CI Skip] release/beta 4.2.2-9
skip-checks: true
2020-12-09 18:19:43 +00:00
Jaco Greeff cf18ecf193 Bump dev (prefer esm in esm mode) (#794) 2020-12-09 19:14:26 +01:00
Github Actions 6e6b13f29a [CI Skip] release/beta 4.2.2-8
skip-checks: true
2020-12-09 16:42:57 +00:00
Jaco Greeff f75a16159d Bump dev (esm type import changes) (#793) 2020-12-09 17:37:15 +01:00
Github Actions b8fe6be9cc [CI Skip] release/beta 4.2.2-7
skip-checks: true
2020-12-09 15:37:44 +00:00
Jaco Greeff 9993325679 Bump WASM, allow esm alongside cjs (#792) 2020-12-09 16:32:12 +01:00
Github Actions ce8fe9f49d [CI Skip] release/beta 4.2.2-6
skip-checks: true
2020-12-09 10:07:34 +00:00
Jaco Greeff 408a6706b1 Adjust imports (#791) 2020-12-09 11:02:55 +01:00
Github Actions 79c7fa3b75 [CI Skip] release/beta 4.2.2-5
skip-checks: true
2020-12-08 10:30:14 +00:00
Jaco Greeff e9713b6c93 Remove --fix on CI (#790) 2020-12-08 11:25:28 +01:00
Github Actions 706a3e0cc2 [CI Skip] release/beta 4.2.2-4
skip-checks: true
2020-12-07 15:19:14 +00:00
Jaco Greeff b1a40516c1 Bump dev (import sorting) (#789) 2020-12-07 16:13:47 +01:00
Github Actions 7cf449074d [CI Skip] release/beta 4.2.2-3
skip-checks: true
2020-12-05 11:40:41 +00:00
Jaco Greeff 2ce7a79263 Bump deps (minor) (#786)
* Bump deps (minor)

* Update Phala
2020-12-05 12:35:10 +01:00
Github Actions cfa5660d54 [CI Skip] release/beta 4.2.2-2
skip-checks: true
2020-12-01 17:56:59 +00:00
Jaco Greeff 1256f2a54a Bump berry (#783)
* Bump berry

* rewrite
2020-12-01 18:33:29 +01:00
Github Actions 2695afa68e [CI Skip] release/beta 4.2.2-1
skip-checks: true
2020-12-01 12:29:57 +00:00
Jaco Greeff af71673c7b import type (#782) 2020-12-01 13:24:37 +01:00
Github Actions 7f489e1a99 [CI Skip] release/beta 4.2.2-0
skip-checks: true
2020-11-24 11:59:02 +00:00
Jaco Greeff 10fb33877c Bump deps (#779)
* Bump deps

* promisify
2020-11-24 12:53:12 +01:00
Github Actions 731def1f56 [CI Skip] release/stable 4.2.1
skip-checks: true
2020-11-23 11:55:30 +00:00
Jaco Greeff 06057da172 4.2 (#778)
* 4.2

* dedupe
2020-11-23 12:49:57 +01:00
Github Actions af3e79e70a [CI Skip] release/beta 4.1.2-3
skip-checks: true
2020-11-23 10:34:05 +00:00
Jaco Greeff 9e5ee72adf Link to Substrate ss58 source (#777) 2020-11-23 11:28:30 +01:00
Github Actions 6a8344020f [CI Skip] release/beta 4.1.2-2
skip-checks: true
2020-11-18 11:28:14 +00:00
Jaco Greeff a1ad6f1dd0 Dedupe bn.js (#775) 2020-11-18 12:22:38 +01:00
Github Actions 71f2b64868 [CI Skip] release/beta 4.1.2-1
skip-checks: true
2020-11-17 15:31:33 +00:00
Jaco Greeff ad7e949c8c s/Tera/Tril/ (#771)
* s/Tera/Tril/

* expentation
2020-11-17 16:26:43 +01:00
Github Actions d24241d656 [CI Skip] release/beta 4.1.2-0
skip-checks: true
2020-11-17 15:01:01 +00:00
Jaco Greeff 91d2e9bbbd s/Giga/Bill/, s/Mega/Mill/ (#770) 2020-11-17 15:54:54 +01:00
Github Actions 8acc5680ac [CI Skip] release/stable 4.1.1
skip-checks: true
2020-11-15 14:42:02 +00:00
Jaco Greeff 4d54ce4686 4.1 (#768) 2020-11-15 15:37:22 +01:00
Github Actions 441e89edd7 [CI Skip] release/beta 4.0.2-14
skip-checks: true
2020-11-15 11:49:59 +00:00
Jaco Greeff f1da9f05fb Cleanup/simplify ETH signing (#767)
* Cleanup/simplify ETH signing

* Cleanup options

* Adjust ETH tests

* checksummed

* mutli ethereum
2020-11-15 12:45:09 +01:00
Github Actions 464d2d38b4 [CI Skip] release/beta 4.0.2-13
skip-checks: true
2020-11-15 09:36:48 +00:00
Jaco Greeff 1ea282c803 Bump deps (#766) 2020-11-15 10:32:04 +01:00
Github Actions 974559bf2e [CI Skip] release/beta 4.0.2-12
skip-checks: true
2020-11-11 10:54:28 +00:00
Jaco Greeff c353003c70 Bump dev (#765) 2020-11-11 11:49:33 +01:00
Github Actions 623bde1a61 [CI Skip] release/beta 4.0.2-11
skip-checks: true
2020-11-10 16:38:24 +00:00
Jaco Greeff 67234fc013 Bumps 2020-11-10 17:32:44 +01:00
Github Actions 4a6d6d647a [CI Skip] release/beta 4.0.2-10
skip-checks: true
2020-11-10 15:12:55 +00:00
Jaco Greeff b375b6c2d5 Mark detectPackage as sideEffects (#764) 2020-11-10 16:07:53 +01:00
Github Actions 1c6fd4558c [CI Skip] release/beta 4.0.2-9
skip-checks: true
2020-11-10 14:40:14 +00:00
Antoine Estienne 3800ffd61a Add eth tests and truncate address for keccak (#763)
* add eth tests and truncate address for keccak

* lint

* refactor
2020-11-10 15:34:45 +01:00
Github Actions d447ed8fc9 [CI Skip] release/beta 4.0.2-8
skip-checks: true
2020-11-10 11:30:18 +00:00
Jaco Greeff abb1062462 Re-enable esm modules (#762) 2020-11-10 12:25:05 +01:00
Github Actions c6bdf78606 [CI Skip] release/beta 4.0.2-7
skip-checks: true
2020-11-09 21:32:14 +00:00
Jaco Greeff 7687d5bf00 Unused esnext 2020-11-09 22:26:52 +01:00
Github Actions 5b246891d7 [CI Skip] release/beta 4.0.2-6
skip-checks: true
2020-11-09 21:15:15 +00:00
Jaco Greeff 3b9617faf4 Extract detectPackage /cryptoWait as side effect (#761) 2020-11-09 22:09:53 +01:00
Github Actions aa57da0806 [CI Skip] release/beta 4.0.2-5
skip-checks: true
2020-11-09 15:34:11 +00:00
Jaco Greeff 66841bba88 Build esnext outputs (#760) 2020-11-09 16:28:42 +01:00
Github Actions 7d963e3602 [CI Skip] release/beta 4.0.2-4
skip-checks: true
2020-11-08 20:40:03 +00:00
Jaco Greeff 82b25aecfb Replace pbkdf2 (#758)
* Replace pbkdf2

* Optional length

* cleanups
2020-11-08 21:34:34 +01:00
Github Actions 9b204fc660 [CI Skip] release/beta 4.0.2-3
skip-checks: true
2020-11-08 19:57:23 +00:00
Jaco Greeff 68bcce7a27 Cleanup pbkdf2 use (#757) 2020-11-08 20:52:02 +01:00
Github Actions 3a57c7da69 [CI Skip] release/beta 4.0.2-2
skip-checks: true
2020-11-08 18:47:26 +00:00
Jaco Greeff 055c4f82f5 Adjust nacl imports (#756) 2020-11-08 19:42:13 +01:00
Github Actions 12d8b07ff1 [CI Skip] release/beta 4.0.2-1
skip-checks: true
2020-11-08 17:12:02 +00:00
Jaco Greeff f07d66562b Remove default exports (#755)
* Remove default exports

* Cleanup tests

* Exports in util

* Single secp256k1 instance

* Length check

* format check

* encoded lengths
2020-11-08 18:07:31 +01:00
Github Actions 80f28da707 [CI Skip] release/beta 4.0.2-0
skip-checks: true
2020-11-08 13:58:25 +00:00
Jaco Greeff 1aec77922f Adjust xxhash imports (only 64 used) (#753) 2020-11-08 14:52:28 +01:00
335 changed files with 2799 additions and 2435 deletions
+3 -2
View File
@@ -1,2 +1,3 @@
5
2.6.22.12.2
6
2.6.2
2.12.2
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
const base = require('@polkadot/dev/config/eslint');
const base = require('@polkadot/dev/config/eslint.cjs');
module.exports = {
...base,
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-55
View File
File diff suppressed because one or more lines are too long
+55
View File
File diff suppressed because one or more lines are too long
+1 -3
View File
@@ -9,7 +9,5 @@ plugins:
spec: "@yarnpkg/plugin-interactive-tools"
- path: .yarn/plugins/@yarnpkg/plugin-version.cjs
spec: "@yarnpkg/plugin-version"
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
spec: "@yarnpkg/plugin-workspace-tools"
yarnPath: .yarn/releases/yarn-2.3.3.cjs
yarnPath: .yarn/releases/yarn-2.4.0.cjs
+59
View File
@@ -1,5 +1,64 @@
# CHANGELOG
## 5.2.1 Dec 27, 2020
Changes:
- Add `arrayFlatten` to merge a series of arrays into a single
- Add `arrayChunk` to chunk an array into multiples of defined size
- Add `bitLength` param (allowed 256, 512) to `keccakAs{Hex, U8a}`
- Align `@polkadot/networks` with Substrate master
## 5.1.1 Dec 19, 2020
Changes:
- `detectPackage` now can take a path-retrieval callback as second argument
- Adjust `blake2js` imports to consistently cater for esm & cjs usage
- Explicitly mark `detectPackage` usage as having side-effects
- Align `@polkadot/networks` with Substrate master
- `@polkadot/wasm-crypto` 3.1.1
## 5.0.1 Dec 13, 2020
**Important** While this package contains no external interface changes, it now compiles and ships both cjs and esm modules. This means that modern bundlers will have more information for tree-shaking available. Additionally when using Node with `.mjs` extensions, the esm version imports will be used on recent Node versions. Adding an export map, as here, may have some impacts so a major semver bump is advised. There may be (small) dragons hiding in the dark corners...
Changes:
- Build and expose both cjs and esm via exports map
- Use `import type { ... }` form for all type imports
- Align with Substrate master network list
- Debug logs now don't depend on `NODE_ENV`, but rather `DEBUG=<type,type,...>` (`*` logs all)
- Limit debug console output via `DEBUG_MAX=<number>` value, trimming when passed
- Add `memoize` util, allowing for function memoization (as used in the API)
- Align `@polkadot/networks` with Substrate master
- `@polkadot/wasm-crypto` 3.0.1
## 4.2.1 Nov 23, 2020
Changes:
- Rename default Mega to Million, Giga to Billion and Tera to Trillion in formatter
- Dedupe bn.js by aligning versions between different libraries
- Add explicit link to base Substrate ss58 formats (as managed in `@polkadot/util`)
## 4.1.1 Nov 16, 2020
Contributed:
- Expand ETH tests, allow for verification against address (Thanks to https://github.com/joelamouche)
Changes:
- Replace pbkdf2 imports with explicit use from sync-only package
- Adjust secp256k1 imports with shared elliptic
- Expand crypto tests for explicit wasm vs JS compares in all cases
## 4.0.1 Nov 8, 2020
- **Breaking change** Polyfills are not injected by these libraries anymore to avoid clobbering external globals, the user should provide them if their environment is missing base functionality.
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2020 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
module.exports = require('@polkadot/dev/config/babel');
module.exports = require('@polkadot/dev/config/babel-config-cjs.cjs');
+2 -2
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
const config = require('@polkadot/dev/config/jest');
const config = require('@polkadot/dev/config/jest.cjs');
module.exports = Object.assign({}, config, {
moduleNameMapper: {
@@ -23,5 +23,5 @@ module.exports = Object.assign({}, config, {
'<rootDir>/packages/x-textencoder/build',
'<rootDir>/packages/x-ws/build'
],
resolver: '@polkadot/dev/config/jest-resolver'
resolver: '@polkadot/dev/config/jest-resolver.cjs'
});
+6 -6
View File
@@ -7,7 +7,7 @@
"packages/*"
],
"resolutions": {
"typescript": "^4.0.5"
"typescript": "^4.1.3"
},
"scripts": {
"build": "polkadot-dev-build-ts",
@@ -20,10 +20,10 @@
"test:one": "polkadot-dev-run-test"
},
"devDependencies": {
"@babel/core": "^7.12.3",
"@polkadot/dev": "^0.59.20",
"@polkadot/ts": "^0.3.53",
"@types/jest": "^26.0.15"
"@babel/core": "^7.12.10",
"@polkadot/dev": "^0.61.16",
"@polkadot/ts": "^0.3.58",
"@types/jest": "^26.0.19"
},
"version": "4.0.1"
"version": "5.2.1"
}
+15 -26
View File
@@ -1,38 +1,27 @@
{
"name": "@polkadot/keyring",
"version": "4.0.1",
"version": "5.2.1",
"description": "Keyring management",
"main": "index.js",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
},
"repository": {
"type": "git",
"url": "git+https://github.com/polkadot-js/common.git"
},
"keywords": [
"Polkadot",
"Keyring",
"ed25519"
],
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [
"Jaco Greeff <jacogr@gmail.com>"
],
"maintainers": [],
"contributors": [],
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/polkadot-js/common/issues"
},
"main": "index.js",
"module": "index.mjs",
"sideEffects": [
"./detectPackage.js",
"./detectPackage.mjs"
],
"repository": "github:polkadot-js/common",
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/keyring#readme",
"dependencies": {
"@babel/runtime": "^7.12.1",
"@polkadot/util": "4.0.1",
"@polkadot/util-crypto": "4.0.1"
"@babel/runtime": "^7.12.5",
"@polkadot/util": "5.2.1",
"@polkadot/util-crypto": "5.2.1"
},
"peerDependencies": {
"@polkadot/util": "4.0.1",
"@polkadot/util-crypto": "4.0.1"
"@polkadot/util": "5.2.1",
"@polkadot/util-crypto": "5.2.1"
}
}
+25
View File
@@ -0,0 +1,25 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// For esm, this should be import.meta.url or to get the same behavior as __dirname, we can use
//
// new URL(import.meta.url).pathname)
//
// The issue is the WP4 has "some" issues with import.meta.url. So because of bundlers, we can't have
// nice things... In this case it is even worse since import.meta.url won't even make it compile, so
// there is a complete dead end with usage thereof
//
// When that is fixed, a solution is to have both .js & .mjs files, with the following content -
//
// cjs: util.detectPackage(packageInfo, () => __dirname);
// esm: detectPackage(packageInfo, () => import.meta.url);
//
// With the above we additionally need a .d.ts to just export the packageInfo
import { detectPackage } from '@polkadot/util';
import packageInfo from './package-info.json';
detectPackage(packageInfo, typeof __dirname !== 'undefined' && __dirname);
export { packageInfo };
+1 -1
View File
@@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
import { hexToU8a, stringToU8a } from '@polkadot/util';
import { cryptoWaitReady, setSS58Format, encodeAddress } from '@polkadot/util-crypto';
import { cryptoWaitReady, encodeAddress, setSS58Format } from '@polkadot/util-crypto';
import Keyring from '.';
+4 -11
View File
@@ -1,19 +1,12 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { detectPackage } from '@polkadot/util';
import { decodeAddress, encodeAddress, setSS58Format } from '@polkadot/util-crypto';
import './detectPackage';
import Keyring from './keyring';
import { Keyring } from './keyring';
// eslint-disable-next-line @typescript-eslint/no-var-requires
detectPackage(require('./package.json'), typeof __dirname !== 'undefined' && __dirname);
export { decodeAddress, encodeAddress, setSS58Format } from '@polkadot/util-crypto';
export default Keyring;
export {
Keyring,
decodeAddress,
encodeAddress,
setSS58Format
};
export { Keyring };
+6 -6
View File
@@ -1,15 +1,15 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeypairType, Keypair } from '@polkadot/util-crypto/types';
import { KeyringInstance, KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta, KeyringOptions } from './types';
import type { Keypair, KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringInstance, KeyringOptions, KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta } from './types';
import { assert, hexToU8a, isHex, isUndefined, stringToU8a } from '@polkadot/util';
import { base64Decode, decodeAddress, encodeAddress, keyExtractSuri, keyFromPath, naclKeypairFromSeed as naclFromSeed, schnorrkelKeypairFromSeed as schnorrkelFromSeed, secp256k1KeypairFromSeed as secp256k1FromSeed, mnemonicToLegacySeed, mnemonicToMiniSecret } from '@polkadot/util-crypto';
import { base64Decode, decodeAddress, encodeAddress, keyExtractSuri, keyFromPath, mnemonicToLegacySeed, mnemonicToMiniSecret, naclKeypairFromSeed as naclFromSeed, schnorrkelKeypairFromSeed as schnorrkelFromSeed, secp256k1KeypairFromSeed as secp256k1FromSeed } from '@polkadot/util-crypto';
import { DEV_PHRASE } from './defaults';
import createPair from './pair';
import Pairs from './pairs';
import { createPair } from './pair';
import { Pairs } from './pairs';
const keypairFromSeed = {
ecdsa: (seed: Uint8Array): Keypair => secp256k1FromSeed(seed),
@@ -34,7 +34,7 @@ const keypairFromSeed = {
* lookup of a pair for a given account address or public key using `getPair`. JSON metadata associated with
* an account may be obtained using `toJson` accompanied by the account passphrase.
*/
export default class Keyring implements KeyringInstance {
export class Keyring implements KeyringInstance {
readonly #pairs: Pairs;
readonly #type: KeypairType;
+2 -2
View File
@@ -1,9 +1,9 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import testingPairs from '../testingPairs';
import { createTestPairs } from '../testingPairs';
const keyring = testingPairs({ type: 'ed25519' }, false);
const keyring = createTestPairs({ type: 'ed25519' }, false);
describe('decode', (): void => {
it('fails when no data provided', (): void => {
+4 -4
View File
@@ -1,13 +1,13 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringPair$JsonEncodingTypes } from '../types';
import { PairInfo } from './types';
import type { KeyringPair$JsonEncodingTypes } from '../types';
import type { PairInfo } from './types';
import { assert, stringToU8a, u8aFixLength } from '@polkadot/util';
import { naclDecrypt, scryptEncode, scryptFromU8a } from '@polkadot/util-crypto';
import { ENCODING, NONCE_LENGTH, PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH, SEED_LENGTH, SCRYPT_LENGTH } from './defaults';
import { ENCODING, NONCE_LENGTH, PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SCRYPT_LENGTH, SEC_LENGTH, SEED_LENGTH } from './defaults';
const SEED_OFFSET = PKCS8_HEADER.length;
@@ -42,7 +42,7 @@ function decodePkcs8 (encoded: Uint8Array): DecodeResult {
};
}
export default function decode (passphrase?: string, encrypted?: Uint8Array | null, encType: KeyringPair$JsonEncodingTypes[] = ENCODING): DecodeResult {
export function decodePair (passphrase?: string, encrypted?: Uint8Array | null, encType: KeyringPair$JsonEncodingTypes[] = ENCODING): DecodeResult {
assert(encrypted, 'No encrypted data available to decode');
assert(passphrase || !encType.includes('xsalsa20-poly1305'), 'Password required to decode encypted data');
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringPair$JsonEncodingTypes } from '../types';
import type { KeyringPair$JsonEncodingTypes } from '../types';
const ENCODING: KeyringPair$JsonEncodingTypes[] = ['scrypt', 'xsalsa20-poly1305'];
const NONCE_LENGTH = 24;
+3 -3
View File
@@ -1,13 +1,13 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import testingPairs from '../testingPairs';
import { PKCS8_DIVIDER, PKCS8_HEADER, NONCE_LENGTH, PUB_LENGTH, SCRYPT_LENGTH, SEC_LENGTH } from './defaults';
import { createTestPairs } from '../testingPairs';
import { NONCE_LENGTH, PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SCRYPT_LENGTH, SEC_LENGTH } from './defaults';
const PKCS8_LENGTH = PKCS8_DIVIDER.length + PKCS8_HEADER.length + PUB_LENGTH + SEC_LENGTH;
const ENCODED_LENGTH = 16 + PKCS8_LENGTH + NONCE_LENGTH + SCRYPT_LENGTH;
const keyring = testingPairs({ type: 'ed25519' }, false);
const keyring = createTestPairs({ type: 'ed25519' }, false);
describe('encode', (): void => {
it('returns PKCS8 when no passphrase supplied', (): void => {
+3 -3
View File
@@ -1,14 +1,14 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { PairInfo } from './types';
import type { PairInfo } from './types';
import { u8aConcat, assert } from '@polkadot/util';
import { assert, u8aConcat } from '@polkadot/util';
import { naclEncrypt, scryptEncode, scryptToU8a } from '@polkadot/util-crypto';
import { PKCS8_DIVIDER, PKCS8_HEADER } from './defaults';
export default function encode ({ publicKey, secretKey }: PairInfo, passphrase?: string): Uint8Array {
export function encodePair ({ publicKey, secretKey }: PairInfo, passphrase?: string): Uint8Array {
assert(secretKey, 'Expected a valid secretKey to be passed to encode');
const encoded = u8aConcat(
+4 -5
View File
@@ -1,15 +1,14 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { hexToU8a } from '@polkadot/util';
import { cryptoWaitReady, encodeAddress as toSS58, setSS58Format } from '@polkadot/util-crypto';
import { hexToU8a } from '@polkadot/util';
import { PAIRS } from '../testing';
import testingPairs from '../testingPairs';
import createPair from '.';
import { createTestPairs } from '../testingPairs';
import { createPair } from '.';
const keyring = testingPairs({ type: 'ed25519' }, false);
const keyring = createTestPairs({ type: 'ed25519' }, false);
describe('pair', (): void => {
beforeEach(async (): Promise<void> => {
+15 -15
View File
@@ -1,16 +1,16 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Keypair, KeypairType } from '@polkadot/util-crypto/types';
import { KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta, SignOptions } from '../types';
import { PairInfo } from './types';
import type { Keypair, KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta, SignOptions } from '../types';
import type { PairInfo } from './types';
import { assert, u8aConcat, u8aToHex } from '@polkadot/util';
import { blake2AsU8a, ethereumEncode, keccakAsU8a, keyExtractPath, keyFromPath, naclKeypairFromSeed as naclFromSeed, naclSign, schnorrkelKeypairFromSeed as schnorrkelFromSeed, schnorrkelSign, secp256k1Expand, secp256k1KeypairFromSeed as secp256k1FromSeed, secp256k1Sign, secp256k1Compress, signatureVerify } from '@polkadot/util-crypto';
import { blake2AsU8a, ethereumEncode, keccakAsU8a, keyExtractPath, keyFromPath, naclKeypairFromSeed as naclFromSeed, naclSign, schnorrkelKeypairFromSeed as schnorrkelFromSeed, schnorrkelSign, secp256k1Compress, secp256k1Expand, secp256k1KeypairFromSeed as secp256k1FromSeed, secp256k1Sign, signatureVerify } from '@polkadot/util-crypto';
import decode from './decode';
import encode from './encode';
import toJson from './toJson';
import { decodePair } from './decode';
import { encodePair } from './encode';
import { pairToJson } from './toJson';
interface Setup {
toSS58: (publicKey: Uint8Array) => string;
@@ -34,9 +34,9 @@ const TYPE_PREFIX = {
};
const TYPE_SIGNATURE = {
ecdsa: (m: Uint8Array, p: Partial<Keypair>) => secp256k1Sign(m, p, { hashType: 'blake2' }),
ecdsa: (m: Uint8Array, p: Partial<Keypair>) => secp256k1Sign(m, p, 'blake2'),
ed25519: naclSign,
ethereum: (m: Uint8Array, p: Partial<Keypair>) => secp256k1Sign(m, p, { hashType: 'keccak' }),
ethereum: (m: Uint8Array, p: Partial<Keypair>) => secp256k1Sign(m, p, 'keccak'),
sr25519: schnorrkelSign
};
@@ -57,7 +57,7 @@ function isLocked (secretKey?: Uint8Array): secretKey is undefined {
}
/**
* @name pair
* @name createPair
* @summary Creates a keyring pair object
* @description Creates a keyring pair object with provided account public key, metadata, and encoded arguments.
* The keyring pair stores the account state including the encoded address and associated metadata.
@@ -87,9 +87,9 @@ function isLocked (secretKey?: Uint8Array): secretKey is undefined {
* an `encoded` property that is assigned with the encoded public key in hex format, and an `encoding`
* property that indicates whether the public key value of the `encoded` property is encoded or not.
*/
export default function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: PairInfo, meta: KeyringPair$Meta = {}, encoded: Uint8Array | null = null, encTypes?: KeyringPair$JsonEncodingTypes[]): KeyringPair {
export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: PairInfo, meta: KeyringPair$Meta = {}, encoded: Uint8Array | null = null, encTypes?: KeyringPair$JsonEncodingTypes[]): KeyringPair {
const decodePkcs8 = (passphrase?: string, userEncoded?: Uint8Array | null): void => {
const decoded = decode(passphrase, userEncoded || encoded, encTypes);
const decoded = decodePair(passphrase, userEncoded || encoded, encTypes);
if (decoded.secretKey.length === 64) {
publicKey = decoded.publicKey;
@@ -105,7 +105,7 @@ export default function createPair ({ toSS58, type }: Setup, { publicKey, secret
const recode = (passphrase?: string): Uint8Array => {
isLocked(secretKey) && encoded && decodePkcs8(passphrase, encoded);
encoded = encode({ publicKey, secretKey }, passphrase); // re-encode, latest version
encoded = encodePair({ publicKey, secretKey }, passphrase); // re-encode, latest version
encTypes = undefined; // swap to defaults, latest version follows
return encoded;
@@ -175,9 +175,9 @@ export default function createPair ({ toSS58, type }: Setup, { publicKey, secret
? u8aToHex(secp256k1Compress(publicKey))
: encodeAddress();
return toJson(type, { address, meta }, recode(passphrase), !!passphrase);
return pairToJson(type, { address, meta }, recode(passphrase), !!passphrase);
},
verify: (message: Uint8Array, signature: Uint8Array): boolean =>
signatureVerify(message, signature, TYPE_ADDRESS[type](publicKey), type === 'ethereum').isValid
signatureVerify(message, signature, TYPE_ADDRESS[type](publicKey)).isValid
};
}
+2 -2
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '../types';
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '../types';
import { encodeAddress } from '@polkadot/util-crypto';
@@ -22,7 +22,7 @@ const json: KeyringPair$Json = {
meta
};
export default function everybody (): KeyringPair {
export function nobody (): KeyringPair {
const pair: KeyringPair = {
address,
addressRaw: publicKey,
+2 -2
View File
@@ -1,9 +1,9 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import testingPairs from '../testingPairs';
import { createTestPairs } from '../testingPairs';
const keyring = testingPairs({ type: 'ed25519' }, false);
const keyring = createTestPairs({ type: 'ed25519' }, false);
describe('toJson', (): void => {
it('creates an unencoded output with no passphrase', (): void => {
+3 -3
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeypairType } from '@polkadot/util-crypto/types';
import { KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta } from '../types';
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta } from '../types';
import { base64Encode } from '@polkadot/util-crypto';
@@ -19,7 +19,7 @@ const VERSION = '3';
const ENC_NONE: KeyringPair$JsonEncodingTypes[] = ['none'];
export default function toJson (type: KeypairType, { address, meta }: PairStateJson, encoded: Uint8Array, isEncrypted: boolean): KeyringPair$Json {
export function pairToJson (type: KeypairType, { address, meta }: PairStateJson, encoded: Uint8Array, isEncrypted: boolean): KeyringPair$Json {
return {
address,
encoded: base64Encode(encoded),
+2 -2
View File
@@ -1,14 +1,14 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringPairs, KeyringPair } from './types';
import type { KeyringPair, KeyringPairs } from './types';
import { assert, isHex, isU8a, u8aToHex, u8aToU8a } from '@polkadot/util';
import { decodeAddress } from '@polkadot/util-crypto';
type KeyringPairMap = Record<string, KeyringPair>;
export default class Pairs implements KeyringPairs {
export class Pairs implements KeyringPairs {
readonly #map: KeyringPairMap = {};
public add (pair: KeyringPair): KeyringPair {
+4 -4
View File
@@ -1,11 +1,11 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringInstance, KeyringOptions } from './types';
import type { KeyringInstance, KeyringOptions } from './types';
import { hexToU8a } from '@polkadot/util';
import createPair from './pair';
import { createPair } from './pair';
import Keyring from '.';
interface PairDef {
@@ -67,9 +67,9 @@ export const PAIRS: PairDef[] = [
* @name testKeyring
* @summary Create an instance of Keyring pre-populated with locked test accounts
* @description The test accounts (i.e. alice, bob, dave, eve, ferdie)
* are available on the dev chain and each test account is initialised with DOT funds.
* are available on the dev chain and each test account is initialized with DOT funds.
*/
export default function testKeyring (options: KeyringOptions = {}, isDerived = true): KeyringInstance {
export function createTestKeyring (options: KeyringOptions = {}, isDerived = true): KeyringInstance {
const keyring = new Keyring(options);
PAIRS.forEach(({ name, publicKey, secretKey, seed, type = 'sr25519' }): void => {
+4 -4
View File
@@ -3,7 +3,7 @@
import { cryptoWaitReady } from '@polkadot/util-crypto';
import testingPairs from './testingPairs';
import { createTestPairs } from './testingPairs';
describe('testingPairs', (): void => {
beforeEach(async (): Promise<void> => {
@@ -12,19 +12,19 @@ describe('testingPairs', (): void => {
it('creates without failing', (): void => {
expect(
Object.keys(testingPairs())
Object.keys(createTestPairs())
).toHaveLength(2 + 0 + 7); // stash, session, pairs
});
it('has the correct address for Alice (non-HDKD)', (): void => {
expect(
testingPairs({ type: 'ed25519' }, false).alice.address
createTestPairs({ type: 'ed25519' }, false).alice.address
).toEqual('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaQua');
});
it('has the correct address for Alice (HDKD)', (): void => {
expect(
testingPairs({ type: 'ed25519' }).alice.address
createTestPairs({ type: 'ed25519' }).alice.address
).toEqual('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY');
});
});
+5 -5
View File
@@ -1,17 +1,17 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { KeyringPair, KeyringOptions } from './types';
import type { KeyringOptions, KeyringPair } from './types';
import createKeyring from './testing';
import nobody from './pair/nobody';
import { nobody } from './pair/nobody';
import { createTestKeyring } from './testing';
export interface TestKeyringMap {
[index: string]: KeyringPair;
}
export default function testKeyringPairs (options?: KeyringOptions, isDerived = true): TestKeyringMap {
const keyring = createKeyring(options, isDerived);
export function createTestPairs (options?: KeyringOptions, isDerived = true): TestKeyringMap {
const keyring = createTestKeyring(options, isDerived);
const pairs = keyring.getPairs();
const map: TestKeyringMap = { nobody: nobody() };
+2 -2
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2020 @polkadot/keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Prefix } from '@polkadot/util-crypto/address/types';
import { KeypairType } from '@polkadot/util-crypto/types';
import type { Prefix } from '@polkadot/util-crypto/address/types';
import type { KeypairType } from '@polkadot/util-crypto/types';
export interface KeyringOptions {
ss58Format?: Prefix;
+9 -22
View File
@@ -1,35 +1,22 @@
{
"name": "@polkadot/networks",
"version": "4.0.1",
"version": "5.2.1",
"description": "A list of all available Substrate networks and their applicable prefixes",
"main": "index.js",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
},
"repository": {
"type": "git",
"url": "git+https://github.com/polkadot-js/common.git"
},
"keywords": [
"Polkadot",
"ss58"
],
"module": "index.mjs",
"sideEffects": false,
"repository": "github:polkadot-js/common",
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [
"Jaco Greeff <jacogr@gmail.com>"
],
"maintainers": [],
"contributors": [],
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/polkadot-js/common/issues"
},
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/networks#readme",
"dependencies": {
"@babel/runtime": "^7.12.1"
"@babel/runtime": "^7.12.5"
},
"devDependencies": {
"@polkadot/util": "4.0.1",
"@polkadot/x-fetch": "4.0.1"
"@polkadot/util": "5.2.1",
"@polkadot/x-fetch": "5.2.1"
}
}
+3 -2
View File
@@ -1,10 +1,11 @@
// Copyright 2017-2020 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Ss58Registry } from './types';
import type { Ss58Registry } from './types';
import fs from 'fs';
import fetch from '@polkadot/x-fetch';
import { fetch } from '@polkadot/x-fetch';
import { all } from './';
+36 -4
View File
@@ -1,7 +1,12 @@
// Copyright 2017-2020 @polkadot/networks authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Network, NetworkFromSubstrate } from './types';
// This contains exactly the same information as available in (with some extensions)
// https://raw.githubusercontent.com/paritytech/substrate/master/ss58-registry.json
//
// Once the above is published as a package, the duplication here can be removed
import type { Network, NetworkFromSubstrate } from './types';
// These are known prefixes that are not sorted
const UNSORTED = [0, 2, 42];
@@ -265,13 +270,13 @@ const all: NetworkFromSubstrate[] = [
website: null
},
{
decimals: null,
decimals: [12],
displayName: 'Phala Network',
network: 'phala',
prefix: 30,
standardAccount: '*25519',
symbols: null,
website: null
symbols: ['PHA'],
website: 'https://phala.network'
},
{
decimals: null,
@@ -291,6 +296,15 @@ const all: NetworkFromSubstrate[] = [
symbols: null,
website: null
},
{
decimals: [15],
displayName: 'Valiu Liquidity Network',
network: 'vln',
prefix: 35,
standardAccount: '*25519',
symbols: ['USDv'],
website: 'https://valiu.com/'
},
{
decimals: [18],
displayName: 'Centrifuge Chain',
@@ -309,6 +323,15 @@ const all: NetworkFromSubstrate[] = [
symbols: ['NODL'],
website: 'https://nodle.io/'
},
{
decimals: [18],
displayName: 'KILT Chain',
network: 'kilt',
prefix: 38,
standardAccount: '*25519',
symbols: ['KILT'],
website: 'https://kilt.io/'
},
{
decimals: [18],
displayName: 'MathChain mainnet',
@@ -327,6 +350,15 @@ const all: NetworkFromSubstrate[] = [
symbols: ['MATH'],
website: 'https://mathwallet.org'
},
{
decimals: null,
displayName: 'Polimec Chain',
network: 'poli',
prefix: 41,
standardAccount: '*25519',
symbols: null,
website: 'https://polimec.io/'
},
{
decimals: null,
displayName: 'Substrate',
+16 -26
View File
@@ -1,42 +1,33 @@
{
"name": "@polkadot/util-crypto",
"version": "4.0.1",
"version": "5.2.1",
"description": "A collection of useful crypto utilities for @polkadot",
"main": "index.js",
"keywords": [
"Polkadot"
"module": "index.mjs",
"sideEffects": [
"./detectPackage.js",
"./detectPackage.mjs"
],
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [
"Jaco Greeff <jacogr@gmail.com>"
],
"maintainers": [],
"contributors": [],
"license": "Apache-2.0",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org"
},
"repository": {
"type": "git",
"url": "git+https://github.com/polkadot-js/common.git"
},
"bugs": {
"url": "https://github.com/polkadot-js/common/issues"
},
"repository": "github:polkadot-js/common",
"bugs": "https://github.com/polkadot-js/common/issues",
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/util-crypto#readme",
"dependencies": {
"@babel/runtime": "^7.12.1",
"@polkadot/networks": "4.0.1",
"@polkadot/util": "4.0.1",
"@polkadot/wasm-crypto": "^2.0.1",
"@polkadot/x-randomvalues": "4.0.1",
"@babel/runtime": "^7.12.5",
"@polkadot/networks": "5.2.1",
"@polkadot/util": "5.2.1",
"@polkadot/wasm-crypto": "^3.1.1",
"@polkadot/x-randomvalues": "5.2.1",
"base-x": "^3.0.8",
"blakejs": "^1.1.0",
"bn.js": "^5.1.3",
"bn.js": "^4.11.9",
"create-hash": "^1.2.0",
"elliptic": "^6.5.3",
"hash.js": "^1.1.7",
"js-sha3": "^0.8.0",
"pbkdf2": "^3.1.1",
"scryptsy": "^2.1.0",
"tweetnacl": "^1.0.3",
"xxhashjs": "^0.2.2"
@@ -45,11 +36,10 @@
"@types/bn.js": "^4.11.6",
"@types/create-hash": "^1.2.2",
"@types/elliptic": "^6.4.12",
"@types/pbkdf2": "^3.1.0",
"@types/scryptsy": "^2.0.0",
"@types/xxhashjs": "^0.2.2"
},
"peerDependencies": {
"@polkadot/util": "4.0.1"
"@polkadot/util": "5.2.1"
}
}
@@ -3,7 +3,7 @@
import { hexToU8a } from '@polkadot/util';
import addressToEvm from './addressToEvm';
import { addressToEvm } from './addressToEvm';
describe('addressToEvm', (): void => {
it('creates a valid known EVM address', (): void => {
@@ -1,14 +1,14 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import decode from './decode';
import { decodeAddress } from './decode';
/**
* @name addressToEvm
* @summary Converts an SS58 address to its corresponding EVM address.
*/
export default function addressToEvm (address: string | Uint8Array, ignoreChecksum?: boolean): Uint8Array {
const decoded = decode(address, ignoreChecksum);
export function addressToEvm (address: string | Uint8Array, ignoreChecksum?: boolean): Uint8Array {
const decoded = decodeAddress(address, ignoreChecksum);
return decoded.subarray(0, 20);
}
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import checkAddress from './check';
import { checkAddress } from '.';
describe('checkAddress', (): void => {
it('returns [true, null] for Kusama', (): void => {
+6 -6
View File
@@ -1,11 +1,11 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Prefix } from './types';
import type { Prefix } from './types';
import base58Decode from '../base58/decode';
import checkChecksum from './checkChecksum';
import defaults from './defaults';
import { base58Decode } from '../base58/decode';
import { checkAddressChecksum } from './checksum';
import { defaults } from './defaults';
/**
* @name checkAddress
@@ -13,7 +13,7 @@ import defaults from './defaults';
* @description
* From the provided input, validate that the address is a valid input.
*/
export default function check (address: string, prefix: Prefix): [boolean, string | null] {
export function checkAddress (address: string, prefix: Prefix): [boolean, string | null] {
let decoded;
try {
@@ -28,7 +28,7 @@ export default function check (address: string, prefix: Prefix): [boolean, strin
return [false, 'Invalid decoded address length'];
}
const [isValid] = checkChecksum(decoded);
const [isValid] = checkAddressChecksum(decoded);
return [isValid, isValid ? null : 'Invalid decoded address checksum'];
}
@@ -1,9 +1,9 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import sshash from './sshash';
import { sshash } from './sshash';
export default function checkChecksum (decoded: Uint8Array): [boolean, number] {
export function checkAddressChecksum (decoded: Uint8Array): [boolean, number] {
const isPublicKey = [35, 36].includes(decoded.length);
// non-publicKeys has 1 byte checksums, else default to 2
+19 -19
View File
@@ -1,21 +1,21 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { stringToU8a, u8aToHex, hexToU8a } from '@polkadot/util';
import { hexToU8a, stringToU8a, u8aToHex } from '@polkadot/util';
import testingPairs, { TestKeyringMap } from '../../../keyring/src/testingPairs';
import decode from './decode';
import { createTestPairs, TestKeyringMap } from '../../../keyring/src/testingPairs';
import { decodeAddress } from '.';
describe('decodeAddress', (): void => {
let keyring: TestKeyringMap;
beforeAll((): void => {
keyring = testingPairs({ type: 'sr25519' });
keyring = createTestPairs({ type: 'sr25519' });
});
it('decodes an address', (): void => {
expect(
decode('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY')
decodeAddress('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY')
).toEqual(
keyring.alice.publicKey
);
@@ -23,13 +23,13 @@ describe('decodeAddress', (): void => {
it('decodes the council address', (): void => {
expect(
u8aToHex(decode('F3opxRbN5ZbjJNU511Kj2TLuzFcDq9BGduA9TgiECafpg29'))
u8aToHex(decodeAddress('F3opxRbN5ZbjJNU511Kj2TLuzFcDq9BGduA9TgiECafpg29'))
).toEqual(u8aToHex(stringToU8a('modlpy/trsry'.padEnd(32, '\0'))));
});
it('converts a publicKey (u8a) as-is', (): void => {
expect(
decode(new Uint8Array([1, 2, 3]))
decodeAddress(new Uint8Array([1, 2, 3]))
).toEqual(
new Uint8Array([1, 2, 3])
);
@@ -37,7 +37,7 @@ describe('decodeAddress', (): void => {
it('converts a publicKey (hex) as-is', (): void => {
expect(
decode('0x01020304')
decodeAddress('0x01020304')
).toEqual(
new Uint8Array([1, 2, 3, 4])
);
@@ -45,37 +45,37 @@ describe('decodeAddress', (): void => {
it('decodes a short address', (): void => {
expect(
decode('F7NZ')
decodeAddress('F7NZ')
).toEqual(new Uint8Array([1]));
});
it('decodes a 1-byte accountId (with prefix)', (): void => {
expect(
decode('PqtB', false, 68)
decodeAddress('PqtB', false, 68)
).toEqual(new Uint8Array([1]));
});
it('decodes a 2-byte accountId', (): void => {
expect(
decode('2jpAFn', false, 68)
decodeAddress('2jpAFn', false, 68)
).toEqual(new Uint8Array([0, 1]));
});
it('encodes a 4-byte address', (): void => {
expect(
decode('as7QnGMf', false, 68)
decodeAddress('as7QnGMf', false, 68)
).toEqual(new Uint8Array([1, 2, 3, 4]));
});
it('decodes a 8-byte address', (): void => {
expect(
decode('4q7qY5RBG7Z4wv', false, 68)
decodeAddress('4q7qY5RBG7Z4wv', false, 68)
).toEqual(new Uint8Array([42, 44, 10, 0, 0, 0, 0, 0]));
});
it('decodes a 33-byte address', (): void => {
expect(
decode('KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou')
decodeAddress('KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou')
).toEqual(
hexToU8a('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077')
);
@@ -83,28 +83,28 @@ describe('decodeAddress', (): void => {
it.skip('allows invalid prefix (in list)', (): void => {
expect(
(): Uint8Array => decode('6GfvWUvHvU8otbZ7sFhXH4eYeMcKdUkL61P3nFy52efEPVUx')
(): Uint8Array => decodeAddress('6GfvWUvHvU8otbZ7sFhXH4eYeMcKdUkL61P3nFy52efEPVUx')
).toThrow(/address prefix/);
});
it('fails when length is invalid', (): void => {
expect(
(): Uint8Array => decode('y9EMHt34JJo4rWLSaxoLGdYXvjgSXEd4zHUnQgfNzwES8b')
(): Uint8Array => decodeAddress('y9EMHt34JJo4rWLSaxoLGdYXvjgSXEd4zHUnQgfNzwES8b')
).toThrow(/address length/);
});
it('fails when the checksum does not match', (): void => {
expect(
(): Uint8Array => decode('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMa9cj')
(): Uint8Array => decodeAddress('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMa9cj')
).toThrow(/address checksum/);
expect(
(): Uint8Array => decode('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaDwU')
(): Uint8Array => decodeAddress('5GoKvZWG5ZPYL1WUovuHW3zJBWBP5eT8CbqjdRY4Q6iMaDwU')
).toThrow(/address checksum/);
});
it('fails when invalid base58 encoded address is found', (): void => {
expect(
() => u8aToHex(decode('F3opIRbN5ZbjJNU511Kj2TLuzFcDq9BGduA9TgiECafpg29'))
() => u8aToHex(decodeAddress('F3opIRbN5ZbjJNU511Kj2TLuzFcDq9BGduA9TgiECafpg29'))
).toThrow(/Decoding F3opIRbN5ZbjJNU511Kj2TLuzFcDq9BGduA9TgiECafpg29: Invalid base58 character "I" \(0x49\) at index 4/);
});
});
+8 -9
View File
@@ -1,18 +1,17 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Prefix } from './types';
import type { Prefix } from './types';
// Original implementation: https://github.com/paritytech/polka-ui/blob/4858c094684769080f5811f32b081dd7780b0880/src/polkadot.js#L6
import { assert, isHex, isU8a, u8aToU8a } from '@polkadot/util';
import base58Decode from '../base58/decode';
import checkChecksum from './checkChecksum';
import defaults from './defaults';
import { base58Decode } from '../base58/decode';
import { checkAddressChecksum } from './checksum';
import { defaults } from './defaults';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export default function decode (encoded: string | Uint8Array, ignoreChecksum?: boolean, ss58Format: Prefix = 99): Uint8Array {
export function decodeAddress (encoded: string | Uint8Array, ignoreChecksum?: boolean, ss58Format: Prefix = -1): Uint8Array {
if (isU8a(encoded) || isHex(encoded)) {
return u8aToU8a(encoded);
}
@@ -30,11 +29,11 @@ export default function decode (encoded: string | Uint8Array, ignoreChecksum?: b
assert(defaults.allowedEncodedLengths.includes(decoded.length), wrapError('Invalid decoded address length'));
// TODO Unless it is an "use everywhere" prefix, throw an error
// if (decoded[0] !== prefix) {
// console.log(`WARN: Expected ${prefix}, found ${decoded[0]}`);
// if (ss58Format !== -1 && (decoded[0] !== ss58Format)) {
// console.log(`WARN: Expected ${ss58Format}, found ${decoded[0]}`);
// }
const [isValid, endPos] = checkChecksum(decoded);
const [isValid, endPos] = checkAddressChecksum(decoded);
assert(ignoreChecksum || isValid, wrapError('Invalid decoded address checksum'));
+1 -3
View File
@@ -3,12 +3,10 @@
import { available } from '@polkadot/networks';
const defaults = {
export const defaults = {
allowedDecodedLengths: [1, 2, 4, 8, 32, 33],
// publicKey has prefix + 2 checksum bytes, short only prefix + 1 checksum byte
allowedEncodedLengths: [3, 4, 6, 10, 35, 36],
allowedPrefix: available.map(({ prefix }) => prefix),
prefix: 42
};
export default defaults;
@@ -3,7 +3,7 @@
import { waitReady } from '@polkadot/wasm-crypto';
import derive from './derive';
import { deriveAddress } from '.';
describe('deriveAddress', (): void => {
beforeEach(async (): Promise<void> => {
@@ -12,13 +12,13 @@ describe('deriveAddress', (): void => {
it('derives a known path', (): void => {
expect(
derive('5CZtJLXtVzrBJq1fMWfywDa6XuRwXekGdShPR4b8i9GWSbzB', '/joe/polkadot/0')
deriveAddress('5CZtJLXtVzrBJq1fMWfywDa6XuRwXekGdShPR4b8i9GWSbzB', '/joe/polkadot/0')
).toEqual('5GZ4srnepXvdsuNVoxCGyVZd8ScDm4gkGLTKuaGARy9akjTa');
});
it('fails on hard paths', (): void => {
expect(
() => derive('5CZtJLXtVzrBJq1fMWfywDa6XuRwXekGdShPR4b8i9GWSbzB', '//bob')
() => deriveAddress('5CZtJLXtVzrBJq1fMWfywDa6XuRwXekGdShPR4b8i9GWSbzB', '//bob')
).toThrow(/Expected suri to contain a combination of non-hard paths/);
});
});
+7 -7
View File
@@ -1,15 +1,15 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Prefix } from './types';
import type { Prefix } from './types';
import { assert } from '@polkadot/util';
import DeriveJunction from '../key/DeriveJunction';
import { keyExtractPath } from '../key';
import { DeriveJunction } from '../key/DeriveJunction';
import { schnorrkelDerivePublic } from '../schnorrkel';
import decode from './decode';
import encode from './encode';
import { decodeAddress } from './decode';
import { encodeAddress } from './encode';
/**
* @name deriveAddress
@@ -17,12 +17,12 @@ import encode from './encode';
* @description
* Creates a sr25519 derived address based on the input address/publicKey and the uri supplied.
*/
export default function deriveAddress (who: Uint8Array | string, suri: string, ss58Format?: Prefix): string {
export function deriveAddress (who: Uint8Array | string, suri: string, ss58Format?: Prefix): string {
const { path } = keyExtractPath(suri);
assert(path.length && !path.some((path) => path.isHard), 'Expected suri to contain a combination of non-hard paths');
return encode(path.reduce((publicKey: Uint8Array, path: DeriveJunction): Uint8Array => {
return encodeAddress(path.reduce((publicKey: Uint8Array, path: DeriveJunction): Uint8Array => {
return schnorrkelDerivePublic(publicKey, path.chainCode);
}, decode(who)), ss58Format);
}, decodeAddress(who)), ss58Format);
}
+12 -12
View File
@@ -1,11 +1,11 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import testingPairs from '@polkadot/keyring/testingPairs';
import { createTestPairs } from '@polkadot/keyring/testingPairs';
import encode from './encode';
import { encodeAddress } from '.';
const keyring = testingPairs({ type: 'ed25519' }, false);
const keyring = createTestPairs({ type: 'ed25519' }, false);
describe('encode', (): void => {
it('encodes an address to a valid value', (): void => {
@@ -16,19 +16,19 @@ describe('encode', (): void => {
it('can re-encode an address', (): void => {
expect(
encode('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY', 68)
encodeAddress('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY', 68)
).toEqual('7sL6eNJj5ZGV5cn3hhV2deRUsivXfBfMH76wCALCqWj1EKzv');
});
it('can re-encode an address to Polkadot live', (): void => {
expect(
encode('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY', 0)
encodeAddress('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY', 0)
).toEqual('15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5');
});
it('fails when non-valid publicKey provided', (): void => {
expect(
(): string => encode(
(): string => encodeAddress(
keyring.alice.publicKey.slice(0, 30)
)
).toThrow(/Expected a valid key/);
@@ -36,7 +36,7 @@ describe('encode', (): void => {
it('encodes a 1-byte address', (): void => {
expect(
encode(
encodeAddress(
new Uint8Array([1])
)
).toEqual('F7NZ');
@@ -44,7 +44,7 @@ describe('encode', (): void => {
it('encodes a 1-byte address (with prefix)', (): void => {
expect(
encode(
encodeAddress(
new Uint8Array([1]), 68
)
).toEqual('PqtB');
@@ -52,7 +52,7 @@ describe('encode', (): void => {
it('encodes a 2-byte address', (): void => {
expect(
encode(
encodeAddress(
new Uint8Array([0, 1]), 68
)
).toEqual('2jpAFn');
@@ -60,7 +60,7 @@ describe('encode', (): void => {
it('encodes a 4-byte address', (): void => {
expect(
encode(
encodeAddress(
new Uint8Array([1, 2, 3, 4]), 68
)
).toEqual('as7QnGMf');
@@ -68,7 +68,7 @@ describe('encode', (): void => {
it('encodes a 8-byte address', (): void => {
expect(
encode(
encodeAddress(
new Uint8Array([42, 44, 10, 0, 0, 0, 0, 0]), 68
)
).toEqual('4q7qY5RBG7Z4wv');
@@ -76,7 +76,7 @@ describe('encode', (): void => {
it('encodes an 33-byte address', (): void => {
expect(
encode('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077')
encodeAddress('0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077')
).toEqual('KWCv1L3QX9LDPwY4VzvLmarEmXjVJidUzZcinvVnmxAJJCBou');
});
});
+7 -8
View File
@@ -1,20 +1,19 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Prefix } from './types';
import type { Prefix } from './types';
// Original implementation: https://github.com/paritytech/polka-ui/blob/4858c094684769080f5811f32b081dd7780b0880/src/polkadot.js#L34
import { assert, u8aConcat } from '@polkadot/util';
import base58Encode from '../base58/encode';
import decode from './decode';
import defaults from './defaults';
import sshash from './sshash';
import { base58Encode } from '../base58/encode';
import { decodeAddress } from './decode';
import { defaults } from './defaults';
import { sshash } from './sshash';
export default function encode (_key: Uint8Array | string, ss58Format: Prefix = defaults.prefix): string {
export function encodeAddress (_key: Uint8Array | string, ss58Format: Prefix = defaults.prefix): string {
// decode it, this means we can re-encode an address
const key = decode(_key);
const key = decodeAddress(_key);
assert(defaults.allowedDecodedLengths.includes(key.length), `Expected a valid key to convert, with length ${defaults.allowedDecodedLengths.join(', ')}`);
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import encodeDerivedAddress from './encodeDerived';
import { encodeDerivedAddress } from '.';
describe('encodeDerivedAddress', (): void => {
it('creates a valid known derived address', (): void => {
@@ -1,13 +1,12 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Prefix } from './types';
import type BN from 'bn.js';
import type { Prefix } from './types';
import BN from 'bn.js';
import decode from './decode';
import encode from './encode';
import keyDerived from './keyDerived';
import { decodeAddress } from './decode';
import { encodeAddress } from './encode';
import { createKeyDerived } from './keyDerived';
/**
* @name encodeDerivedAddress
@@ -15,6 +14,6 @@ import keyDerived from './keyDerived';
* @description
* Creates a Substrate derived address based on the input address/publicKey and the index supplied.
*/
export default function encodeDerivedAddress (who: Uint8Array | string, index: BigInt | BN | number, ss58Format?: Prefix): string {
return encode(keyDerived(decode(who), index), ss58Format);
export function encodeDerivedAddress (who: Uint8Array | string, index: BigInt | BN | number, ss58Format?: Prefix): string {
return encodeAddress(createKeyDerived(decodeAddress(who), index), ss58Format);
}
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import encodeMultiAddress from './encodeMulti';
import { encodeMultiAddress } from '.';
describe('encodeMultiAddress', (): void => {
it('creates a valid known multi address', (): void => {
@@ -1,12 +1,11 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Prefix } from './types';
import type BN from 'bn.js';
import type { Prefix } from './types';
import BN from 'bn.js';
import encode from './encode';
import keyMulti from './keyMulti';
import { encodeAddress } from './encode';
import { createKeyMulti } from './keyMulti';
/**
* @name encodeMultiAddress
@@ -14,6 +13,6 @@ import keyMulti from './keyMulti';
* @description
* Creates a Substrate multisig address based on the input address and the required threshold.
*/
export default function encodeMultiAddress (who: (Uint8Array | string)[], threshold: BigInt | BN | number, ss58Format?: Prefix): string {
return encode(keyMulti(who, threshold), ss58Format);
export function encodeMultiAddress (who: (Uint8Array | string)[], threshold: BigInt | BN | number, ss58Format?: Prefix): string {
return encodeAddress(createKeyMulti(who, threshold), ss58Format);
}
+3 -2
View File
@@ -1,7 +1,8 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import testingPairs from '@polkadot/keyring/testingPairs';
import { createTestPairs } from '@polkadot/keyring/testingPairs';
import { addressEq } from '.';
describe('addressEq', (): void => {
@@ -33,7 +34,7 @@ describe('addressEq', (): void => {
});
it('returns true for equal, address vs publicKey', (): void => {
const keyring = testingPairs({ type: 'sr25519' });
const keyring = createTestPairs({ type: 'sr25519' });
expect(
addressEq(
+3 -3
View File
@@ -3,7 +3,7 @@
import { u8aEq } from '@polkadot/util';
import decode from './decode';
import { decodeAddress } from './decode';
/**
* @name addressEq
@@ -19,6 +19,6 @@ import decode from './decode';
* u8aEq(new Uint8Array([0x68, 0x65]), new Uint8Array([0x68, 0x65])); // true
* ```
*/
export default function addressEq (a: string | Uint8Array, b: string | Uint8Array): boolean {
return u8aEq(decode(a), decode(b));
export function addressEq (a: string | Uint8Array, b: string | Uint8Array): boolean {
return u8aEq(decodeAddress(a), decodeAddress(b));
}
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import evmToAddress from './evmToAddress';
import { evmToAddress } from '.';
describe('evmToAddress', (): void => {
it('creates a valid known SS58 address', (): void => {
@@ -1,19 +1,19 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import encode from './encode';
import { Prefix } from './types';
import hasher from '../secp256k1/hasher';
import { HashType } from '../secp256k1/types';
import type { HashType } from '../secp256k1/types';
import type { Prefix } from './types';
import { u8aConcat } from '@polkadot/util';
import { secp256k1Hasher } from '../secp256k1/hasher';
import { encodeAddress } from './encode';
/**
* @name evmToAddress
* @summary Converts an EVM address to its corresponding SS58 address.
*/
export default function evmToAddress (evmAddress: string | Uint8Array, ss58Format?: Prefix, hashType: HashType = 'blake2'): string {
export function evmToAddress (evmAddress: string | Uint8Array, ss58Format?: Prefix, hashType: HashType = 'blake2'): string {
const wrapError = (message: string) => `Converting ${evmAddress as string}: ${message}`;
const message = u8aConcat('evm:', evmAddress);
@@ -22,7 +22,7 @@ export default function evmToAddress (evmAddress: string | Uint8Array, ss58Forma
throw new Error(wrapError('Invalid evm address length'));
}
const address = hasher(hashType, message);
const address = secp256k1Hasher(hashType, message);
return encode(address, ss58Format);
return encodeAddress(address, ss58Format);
}
+14 -31
View File
@@ -1,34 +1,17 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import addressToEvm from './addressToEvm';
import checkAddress from './check';
import checkAddressChecksum from './checkChecksum';
import createKeyMulti from './keyMulti';
import createKeyDerived from './keyDerived';
import decodeAddress from './decode';
import deriveAddress from './derive';
import encodeAddress from './encode';
import encodeDerivedAddress from './encodeDerived';
import encodeMultiAddress from './encodeMulti';
import evmToAddress from './evmToAddress';
import addressEq from './eq';
import setSS58Format from './setSS58Format';
import sortAddresses from './sort';
export {
addressEq,
addressToEvm,
checkAddress,
checkAddressChecksum,
createKeyDerived,
createKeyMulti,
decodeAddress,
deriveAddress,
encodeAddress,
encodeDerivedAddress,
encodeMultiAddress,
evmToAddress,
setSS58Format,
sortAddresses
};
export { addressToEvm } from './addressToEvm';
export { checkAddress } from './check';
export { checkAddressChecksum } from './checksum';
export { createKeyMulti } from './keyMulti';
export { createKeyDerived } from './keyDerived';
export { decodeAddress } from './decode';
export { deriveAddress } from './derive';
export { encodeAddress } from './encode';
export { encodeDerivedAddress } from './encodeDerived';
export { encodeMultiAddress } from './encodeMulti';
export { evmToAddress } from './evmToAddress';
export { addressEq } from './eq';
export { setSS58Format } from './setSS58Format';
export { sortAddresses } from './sort';
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import createKeyDerived from './keyDerived';
import { createKeyDerived } from '.';
describe('createKeyDerived', (): void => {
it('matches sub accounts with Rust', (): void => {
@@ -1,15 +1,16 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import BN from 'bn.js';
import type BN from 'bn.js';
import { bnToU8a, stringToU8a, u8aConcat } from '@polkadot/util';
import blake2AsU8a from '../blake2/asU8a';
import decodeAddress from './decode';
import { blake2AsU8a } from '../blake2/asU8a';
import { decodeAddress } from './decode';
const PREFIX = stringToU8a('modlpy/utilisuba');
export default function createKeyDerived (who: Uint8Array | string, index: BigInt | BN | number): Uint8Array {
export function createKeyDerived (who: Uint8Array | string, index: BigInt | BN | number): Uint8Array {
return blake2AsU8a(
u8aConcat(
PREFIX,
+5 -4
View File
@@ -1,15 +1,16 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import BN from 'bn.js';
import type BN from 'bn.js';
import { bnToU8a, compactToU8a, stringToU8a, u8aConcat, u8aSorted } from '@polkadot/util';
import blake2AsU8a from '../blake2/asU8a';
import decodeAddress from './decode';
import { blake2AsU8a } from '../blake2/asU8a';
import { decodeAddress } from './decode';
const PREFIX = stringToU8a('modlpy/utilisuba');
export default function createKeyMulti (who: (Uint8Array | string)[], threshold: BigInt | BN | number): Uint8Array {
export function createKeyMulti (who: (Uint8Array | string)[], threshold: BigInt | BN | number): Uint8Array {
return blake2AsU8a(
u8aConcat(
PREFIX,
@@ -1,8 +1,7 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import encode from './encode';
import setSS58Format from './setSS58Format';
import { encodeAddress, setSS58Format } from '.';
describe('setSS58Format', (): void => {
beforeEach((): void => {
@@ -11,7 +10,7 @@ describe('setSS58Format', (): void => {
it('sets and allows encoding using', (): void => {
expect(
encode(
encodeAddress(
new Uint8Array([1])
)
).toEqual('PqtB');
@@ -1,14 +1,14 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Prefix } from './types';
import type { Prefix } from './types';
import defaults from './defaults';
import { defaults } from './defaults';
/**
* @description Sets the global SS58 format to use for address encoding
* @deprecated Use keyring.setSS58Format
*/
export default function setSS58Format (prefix: Prefix): void {
export function setSS58Format (prefix: Prefix): void {
defaults.prefix = prefix;
}
+4 -4
View File
@@ -1,14 +1,14 @@
// Copyright 2017-2020 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Prefix } from './types';
import type { Prefix } from './types';
import { u8aSorted } from '@polkadot/util';
import decodeAddress from './decode';
import encodeAddress from './encode';
import { decodeAddress } from './decode';
import { encodeAddress } from './encode';
export default function sortAddresses (addresses: (Uint8Array | string)[], ss58Format?: Prefix): string[] {
export function sortAddresses (addresses: (Uint8Array | string)[], ss58Format?: Prefix): string[] {
return u8aSorted(
addresses.map((who) => decodeAddress(who))
).map((u8a) => encodeAddress(u8a, ss58Format));
+2 -2
View File
@@ -3,10 +3,10 @@
import { stringToU8a, u8aConcat } from '@polkadot/util';
import blake2AsU8a from '../blake2/asU8a';
import { blake2AsU8a } from '../blake2/asU8a';
const SS58_PREFIX = stringToU8a('SS58PRE');
export default function hash (key: Uint8Array): Uint8Array {
export function sshash (key: Uint8Array): Uint8Array {
return blake2AsU8a(u8aConcat(SS58_PREFIX, key), 512);
}
+3 -3
View File
@@ -6,7 +6,7 @@
import { assert } from '@polkadot/util';
import { BASE32_ALPHABET, BITS_PER_CHAR } from './bs32';
import validate from './validate';
import { base32Validate } from './validate';
// Build the character lookup table:
const LOOKUP = BASE32_ALPHABET
@@ -42,8 +42,8 @@ function decode (output: Uint8Array, input: string, offset: number): [Uint8Array
* @description
* From the provided input, decode the base32 and return the result as an `Uint8Array`.
*/
export default function base32Decode (value: string, ipfsCompat = false): Uint8Array {
validate(value, ipfsCompat);
export function base32Decode (value: string, ipfsCompat = false): Uint8Array {
base32Validate(value, ipfsCompat);
const offset = (ipfsCompat ? 1 : 0);
const [output, bits, buffer] = decode(
+1 -1
View File
@@ -15,7 +15,7 @@ const MASK = (1 << BITS_PER_CHAR) - 1;
* @description
* From the provided input, create the base32 and return the result as a string.
*/
export default function base32Encode (value: Uint8Array | string | Buffer | number[], ipfsCompat = false): string {
export function base32Encode (value: Uint8Array | string | Buffer | number[], ipfsCompat = false): string {
const u8a = u8aToU8a(value);
let out = '';
let bits = 0;
+4 -4
View File
@@ -5,7 +5,7 @@
* @summary Encode and decode base32 values
*/
export { default as base32Decode } from './decode';
export { default as base32Encode } from './encode';
export { default as base32Validate } from './validate';
export { default as isBase32 } from './is';
export { base32Decode } from './decode';
export { base32Encode } from './encode';
export { base32Validate } from './validate';
export { isBase32 } from './is';
+3 -3
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import validate from './validate';
import { base32Validate } from './validate';
export function testValidator (validate: (value?: string | null, ipfsCompat?: boolean) => boolean, value?: string | null, ipfsCompat?: boolean): boolean {
try {
@@ -11,6 +11,6 @@ export function testValidator (validate: (value?: string | null, ipfsCompat?: bo
}
}
export default function isBase32 (value?: string | null, ipfsCompat?: boolean): boolean {
return testValidator(validate, value, ipfsCompat);
export function isBase32 (value?: string | null, ipfsCompat?: boolean): boolean {
return testValidator(base32Validate, value, ipfsCompat);
}
+1 -1
View File
@@ -12,6 +12,6 @@ const BASE_CONFIG = { alphabet: BASE32_ALPHABET, ipfsChar: 'b', type: 'base32' }
* @description
* Validates the the supplied value is valid base32
*/
export default function base32Validate (value?: string | null, ipfsCompat?: boolean): true {
export function base32Validate (value?: string | null, ipfsCompat?: boolean): true {
return validateChars(BASE_CONFIG, value, ipfsCompat);
}
+3 -3
View File
@@ -4,7 +4,7 @@
import { bufferToU8a } from '@polkadot/util';
import { bs58 } from './bs58';
import validate from './validate';
import { base58Validate } from './validate';
/**
* @name base58Decode
@@ -12,8 +12,8 @@ import validate from './validate';
* @description
* From the provided input, decode the base58 and return the result as an `Uint8Array`.
*/
export default function base58Decode (value: string, ipfsCompat?: boolean): Uint8Array {
validate(value, ipfsCompat);
export function base58Decode (value: string, ipfsCompat?: boolean): Uint8Array {
base58Validate(value, ipfsCompat);
return bufferToU8a(bs58.decode(value.substr(ipfsCompat ? 1 : 0)));
}
+1 -1
View File
@@ -11,7 +11,7 @@ import { bs58 } from './bs58';
* @description
* From the provided input, create the base58 and return the result as a string.
*/
export default function base58Encode (value: Uint8Array | string | Buffer | number[], ipfsCompat?: boolean): string {
export function base58Encode (value: Uint8Array | string | Buffer | number[], ipfsCompat?: boolean): string {
const out = bs58.encode(
u8aToBuffer(u8aToU8a(value))
);
+4 -4
View File
@@ -5,7 +5,7 @@
* @summary Encode and decode base58 values
*/
export { default as base58Decode } from './decode';
export { default as base58Encode } from './encode';
export { default as base58Validate } from './validate';
export { default as isBase58 } from './is';
export { base58Decode } from './decode';
export { base58Encode } from './encode';
export { base58Validate } from './validate';
export { isBase58 } from './is';
+3 -3
View File
@@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
import { testValidator } from '../base32/is';
import validate from './validate';
import { base58Validate } from './validate';
export default function isBase58 (value?: string | null, ipfsCompat?: boolean): boolean {
return testValidator(validate, value, ipfsCompat);
export function isBase58 (value?: string | null, ipfsCompat?: boolean): boolean {
return testValidator(base58Validate, value, ipfsCompat);
}
+1 -1
View File
@@ -30,6 +30,6 @@ export function validateChars ({ alphabet, ipfsChar, type }: CheckConfig, value?
* @description
* Validates the the supplied value is valid base58
*/
export default function base58Validate (value?: string | null, ipfsCompat?: boolean): true {
export function base58Validate (value?: string | null, ipfsCompat?: boolean): true {
return validateChars(BASE_CONFIG, value, ipfsCompat);
}
+3 -3
View File
@@ -3,7 +3,7 @@
import { bufferToU8a } from '@polkadot/util';
import validate from './validate';
import { base64Validate } from './validate';
/**
* @name base64Decode
@@ -11,8 +11,8 @@ import validate from './validate';
* @description
* From the provided input, decode the base64 and return the result as an `Uint8Array`.
*/
export default function base64Decode (value: string): Uint8Array {
validate(value);
export function base64Decode (value: string): Uint8Array {
base64Validate(value);
return bufferToU8a(Buffer.from(value, 'base64'));
}
+1 -1
View File
@@ -9,6 +9,6 @@ import { u8aToBuffer, u8aToU8a } from '@polkadot/util';
* @description
* From the provided input, create the base64 and return the result as a string.
*/
export default function base58Encode (value: Uint8Array | string | Buffer | number[]): string {
export function base64Encode (value: Uint8Array | string | Buffer | number[]): string {
return u8aToBuffer(u8aToU8a(value)).toString('base64');
}
+6 -6
View File
@@ -5,9 +5,9 @@
* @summary Encode and decode base64 values
*/
export { default as base64Decode } from './decode';
export { default as base64Encode } from './encode';
export { default as base64Pad } from './pad';
export { default as base64Trim } from './trim';
export { default as base64Validate } from './validate';
export { default as isBase64 } from './is';
export { base64Decode } from './decode';
export { base64Encode } from './encode';
export { base64Pad } from './pad';
export { base64Trim } from './trim';
export { base64Validate } from './validate';
export { isBase64 } from './is';
+3 -3
View File
@@ -1,11 +1,11 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import validate from './validate';
import { base64Validate } from './validate';
export default function isBase64 (value?: string | null): boolean {
export function isBase64 (value?: string | null): boolean {
try {
return validate(value);
return base64Validate(value);
} catch (error) {
return false;
}
+1 -1
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
export default function base64Trim (value: string): string {
export function base64Pad (value: string): string {
return value.padEnd(value.length + (value.length % 4), '=');
}
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
export default function base64Trim (value: string): string {
export function base64Trim (value: string): string {
while (value.length && value[value.length - 1] === '=') {
value = value.slice(0, -1);
}
+1 -1
View File
@@ -9,7 +9,7 @@ import { assert } from '@polkadot/util';
* @description
* Validates the the supplied value is valid base64
*/
export default function base64Validate (value?: string | null): true {
export function base64Validate (value?: string | null): true {
assert(value, 'Expected non-null, non-empty base64 input');
assert(/^(?:[A-Za-z0-9+/]{2}[A-Za-z0-9+/]{2})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(value), 'Invalid base64 encoding');
+2 -2
View File
@@ -3,7 +3,7 @@
import { u8aToHex } from '@polkadot/util';
import blake2AsU8a from './asU8a';
import { blake2AsU8a } from './asU8a';
/**
* @name blake2AsHex
@@ -19,7 +19,7 @@ import blake2AsU8a from './asU8a';
* blake2AsHex('abc'); // => 0xba80a53f981c4d0d
* ```
*/
export default function blake2AsHex (data: Uint8Array | string, bitLength = 256): string {
export function blake2AsHex (data: Uint8Array | string, bitLength = 256): string {
return u8aToHex(
blake2AsU8a(data, bitLength)
);
+32 -24
View File
@@ -11,36 +11,44 @@ describe('blake2AsU8a', (): void => {
await waitReady();
});
it('returns a 64-bit value by default', (): void => {
expect(
blake2AsU8a('abc')
).toEqual(
new Uint8Array([189, 221, 129, 60, 99, 66, 57, 114, 49, 113, 239, 63, 238, 152, 87, 155, 148, 150, 78, 59, 177, 203, 62, 66, 114, 98, 200, 192, 104, 213, 35, 25])
);
[false, true].forEach((onlyJs): void => {
it(`returns a 64-bit value by default (onlyJs=${onlyJs.toString()})`, (): void => {
expect(
blake2AsU8a('abc', undefined, undefined, onlyJs)
).toEqual(
new Uint8Array([189, 221, 129, 60, 99, 66, 57, 114, 49, 113, 239, 63, 238, 152, 87, 155, 148, 150, 78, 59, 177, 203, 62, 66, 114, 98, 200, 192, 104, 213, 35, 25])
);
});
});
it('returns a 128-bit value (as specified)', (): void => {
expect(
blake2AsU8a('abc', 128)
).toEqual(
new Uint8Array([207, 74, 183, 145, 198, 43, 141, 43, 33, 9, 201, 2, 117, 40, 120, 22])
);
[false, true].forEach((onlyJs): void => {
it(`returns a 128-bit value (as specified, onlyJs=${onlyJs.toString()})`, (): void => {
expect(
blake2AsU8a('abc', 128, undefined, onlyJs)
).toEqual(
new Uint8Array([207, 74, 183, 145, 198, 43, 141, 43, 33, 9, 201, 2, 117, 40, 120, 22])
);
});
});
it('returns a 256-bit value (as specified)', (): void => {
expect(
blake2AsU8a('abc', 256)
).toEqual(
new Uint8Array([189, 221, 129, 60, 99, 66, 57, 114, 49, 113, 239, 63, 238, 152, 87, 155, 148, 150, 78, 59, 177, 203, 62, 66, 114, 98, 200, 192, 104, 213, 35, 25])
);
[false, true].forEach((onlyJs): void => {
it(`returns a 256-bit value (as specified, onlyJs=${onlyJs.toString()})`, (): void => {
expect(
blake2AsU8a('abc', 256, undefined, onlyJs)
).toEqual(
new Uint8Array([189, 221, 129, 60, 99, 66, 57, 114, 49, 113, 239, 63, 238, 152, 87, 155, 148, 150, 78, 59, 177, 203, 62, 66, 114, 98, 200, 192, 104, 213, 35, 25])
);
});
});
it('returns a 512-bit value (as specified)', (): void => {
expect(
blake2AsU8a('abc', 512)
).toEqual(
hexToU8a('0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923')
);
[false, true].forEach((onlyJs): void => {
it(`returns a 512-bit value (as specified, onlyJs=${onlyJs.toString()})`, (): void => {
expect(
blake2AsU8a('abc', 512, undefined, onlyJs)
).toEqual(
hexToU8a('0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923')
);
});
});
it('has equivalent Wasm/Js outputs on hex inputs', (): void => {
+4 -3
View File
@@ -1,7 +1,8 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import blakejs from 'blakejs';
import js from 'blakejs';
import { u8aToU8a } from '@polkadot/util';
import { blake2b, isReady } from '@polkadot/wasm-crypto';
@@ -19,10 +20,10 @@ import { blake2b, isReady } from '@polkadot/wasm-crypto';
* blake2AsU8a('abc'); // => [0xba, 0x80, 0xa53, 0xf98, 0x1c, 0x4d, 0x0d]
* ```
*/
export default function blake2AsU8a (data: Uint8Array | string, bitLength = 256, key: Uint8Array | null = null, onlyJs = false): Uint8Array {
export function blake2AsU8a (data: Uint8Array | string, bitLength = 256, key: Uint8Array | null = null, onlyJs = false): Uint8Array {
const byteLength = Math.ceil(bitLength / 8);
return isReady() && !onlyJs
? blake2b(u8aToU8a(data), u8aToU8a(key), byteLength)
: blakejs.blake2b(u8aToU8a(data), key, byteLength);
: js.blake2b(u8aToU8a(data), key, byteLength);
}
+2 -2
View File
@@ -5,5 +5,5 @@
* @summary Create blake2b values with specified bitlengths
*/
export { default as blake2AsHex } from './asHex';
export { default as blake2AsU8a } from './asU8a';
export { blake2AsHex } from './asHex';
export { blake2AsU8a } from './asU8a';
@@ -1,15 +1,14 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import wasmCrypto from '@polkadot/wasm-crypto';
import { isReady, waitReady } from '@polkadot/wasm-crypto';
export function cryptoIsReady (): boolean {
return wasmCrypto.isReady();
return isReady();
}
export function cryptoWaitReady (): Promise<boolean> {
return wasmCrypto
.waitReady()
return waitReady()
.then((): boolean => true)
.catch((error): boolean => {
console.error('Unable to initialize @polkadot/util-crypto', error);
@@ -17,8 +16,3 @@ export function cryptoWaitReady (): Promise<boolean> {
return false;
});
}
// start init process immediately
cryptoWaitReady().catch((): void => {
// shouldn't happen, logged above
});
+9
View File
@@ -0,0 +1,9 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { cryptoWaitReady } from './crypto';
// start init process immediately
cryptoWaitReady().catch((): void => {
// shouldn't happen, logged above
});
+25
View File
@@ -0,0 +1,25 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// For esm, this should be import.meta.url or to get the same behavior as __dirname, we can use
//
// new URL(import.meta.url).pathname)
//
// The issue is the WP4 has "some" issues with import.meta.url. So because of bundlers, we can't have
// nice things... In this case it is even worse since import.meta.url won't even make it compile, so
// there is a complete dead end with usage thereof
//
// When that is fixed, a solution is to have both .js & .mjs files, with the following content -
//
// cjs: util.detectPackage(packageInfo, () => __dirname);
// esm: detectPackage(packageInfo, () => import.meta.url);
//
// With the above we additionally need a .d.ts to just export the packageInfo
import { detectPackage } from '@polkadot/util';
import packageInfo from './package-info.json';
detectPackage(packageInfo, typeof __dirname !== 'undefined' && __dirname);
export { packageInfo };
+1 -1
View File
@@ -14,7 +14,7 @@ function getH160 (u8a: Uint8Array): Uint8Array {
return u8a.slice(-20);
}
export default function ethereumEncode (addressOrPublic?: string | Uint8Array): string {
export function ethereumEncode (addressOrPublic?: string | Uint8Array): string {
if (!addressOrPublic) {
return '0x';
}
+3 -3
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { default as ethereumEncode } from './encode';
export { default as isEthereumAddress } from './isAddress';
export { default as isEthereumChecksum } from './isChecksum';
export { ethereumEncode } from './encode';
export { isEthereumAddress } from './isAddress';
export { isEthereumChecksum } from './isChecksum';
@@ -3,9 +3,9 @@
import { isHex } from '@polkadot/util';
import isEthereumChecksum from './isChecksum';
import { isEthereumChecksum } from './isChecksum';
export default function isEthereumAddress (address?: string): boolean {
export function isEthereumAddress (address?: string): boolean {
if (!address || address.length !== 42 || !isHex(address)) {
return false;
}
@@ -9,7 +9,7 @@ function isInvalidChar (char: string, byte: number): boolean {
return (byte > 7 && char !== char.toUpperCase()) || (byte <= 7 && char !== char.toLowerCase());
}
export default function isEthereumChecksum (_address: string): boolean {
export function isEthereumChecksum (_address: string): boolean {
const address = _address.replace('0x', '');
const hash = u8aToHex(keccakAsU8a(address.toLowerCase()), -1, false);
+3 -2
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// out of order and early in the chain, this also kicks off initialization on require
export * from './init';
import './cryptoInit';
import './detectPackage';
// all internal exports
export * from './address';
@@ -10,6 +10,7 @@ export * from './base32';
export * from './base58';
export * from './base64';
export * from './blake2';
export * from './crypto';
export * from './ethereum';
export * from './keccak';
export * from './key';
+13 -6
View File
@@ -5,17 +5,24 @@ import { waitReady } from '@polkadot/wasm-crypto';
import { keccakAsHex } from '.';
const value = 'test value';
const result = '2d07364b5c231c56ce63d49430e085ea3033c750688ba532b24029124c26ca5e';
const BITS: (256 | 512)[] = [256, 512];
const value = 'test';
const result = {
256: '9c22ff5f21f0b81b113e63f7db6da94fedef11b2119b4088b89664fb9a3cb658',
512: '1e2e9fc2002b002d75198b7503210c05a1baac4560916a3c6d93bcce3a50d7f00fd395bf1647b9abb8d1afcc9c76c289b0c9383ba386a956da4b38934417789e'
};
describe('keccakAsHex', (): void => {
beforeEach(async (): Promise<void> => {
await waitReady();
});
it('returns a prefixed hex representation', (): void => {
expect(
keccakAsHex(value)
).toEqual(`0x${result}`);
BITS.forEach((bitLength): void => {
it('returns a prefixed hex representation', (): void => {
expect(
keccakAsHex(value, bitLength)
).toEqual(`0x${result[bitLength]}`);
});
});
});
+3 -3
View File
@@ -3,7 +3,7 @@
import { u8aToHex } from '@polkadot/util';
import keccakAsU8a from './asU8a';
import { keccakAsU8a } from './asU8a';
/**
* @name keccakAsHex
@@ -19,8 +19,8 @@ import keccakAsU8a from './asU8a';
* keccakAsHex('123'); // => 0x...
* ```
*/
export default function keccakAsHex (value: Buffer | Uint8Array | string): string {
export function keccakAsHex (value: Buffer | Uint8Array | string, bitLength?: 256 | 512): string {
return u8aToHex(
keccakAsU8a(value)
keccakAsU8a(value, bitLength)
);
}
+34 -19
View File
@@ -6,35 +6,50 @@ import { waitReady } from '@polkadot/wasm-crypto';
import { keccakAsU8a } from '.';
const BITS: (256 | 512)[] = [256, 512];
describe('keccakAsU8a', (): void => {
beforeEach(async (): Promise<void> => {
await waitReady();
});
const input = 'test value';
const output = hexToU8a(
'0x2d07364b5c231c56ce63d49430e085ea3033c750688ba532b24029124c26ca5e'
);
const output = {
256: hexToU8a(
'0x2d07364b5c231c56ce63d49430e085ea3033c750688ba532b24029124c26ca5e'
),
512: hexToU8a(
'0xc1b50cc57f85ccd968a9d7c7a809dcebd140a548c8e0b67f3afcdd6fc14cca2b1d04187aef24ba0081b74f2ec362431e425760febe94a5607790854cafe5b197'
)
};
it('returns an hex representation (string)', (): void => {
expect(
keccakAsU8a(input)
).toEqual(output);
BITS.forEach((bitLength): void => {
[false, true].forEach((onlyJs): void => {
it(`returns an hex representation (string, bitLength=${bitLength}, onlyJs=${onlyJs.toString()})`, (): void => {
expect(
keccakAsU8a(input, bitLength, onlyJs)
).toEqual(output[bitLength]);
});
});
});
it('returns an hex representation (Buffer)', (): void => {
expect(
keccakAsU8a(
Buffer.from(input)
)
).toEqual(output);
BITS.forEach((bitLength): void => {
[false, true].forEach((onlyJs): void => {
it(`returns an hex representation (Buffer, bitLength=${bitLength}, onlyJs=${onlyJs.toString()})`, (): void => {
expect(
keccakAsU8a(Buffer.from(input), bitLength, onlyJs)
).toEqual(output[bitLength]);
});
});
});
it('returns an hex representation (Uint8Array)', (): void => {
expect(
keccakAsU8a(
stringToU8a(input)
)
).toEqual(output);
BITS.forEach((bitLength): void => {
[false, true].forEach((onlyJs): void => {
it(`returns an hex representation (Uint8Array, bitLength=${bitLength}, onlyJs=${onlyJs.toString()})`, (): void => {
expect(
keccakAsU8a(stringToU8a(input), bitLength, onlyJs)
).toEqual(output[bitLength]);
});
});
});
});
+7 -4
View File
@@ -1,7 +1,8 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import jssha3 from 'js-sha3';
import js from 'js-sha3';
import { u8aToU8a } from '@polkadot/util';
import { isReady, keccak256 } from '@polkadot/wasm-crypto';
@@ -19,10 +20,12 @@ import { isReady, keccak256 } from '@polkadot/wasm-crypto';
* keccakAsU8a('123'); // => Uint8Array
* ```
*/
export default function keccakAsU8a (value: Buffer | Uint8Array | string): Uint8Array {
return isReady()
export function keccakAsU8a (value: Buffer | Uint8Array | string, bitLength: 256 | 512 = 256, onlyJs = false): Uint8Array {
const is256 = bitLength === 256;
return isReady() && is256 && !onlyJs
? keccak256(u8aToU8a(value))
: new Uint8Array(
jssha3.keccak256.update(u8aToU8a(value)).arrayBuffer()
(is256 ? js.keccak256 : js.keccak512).update(u8aToU8a(value)).arrayBuffer()
);
}
+3 -3
View File
@@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
/**
* @summary Create Keccak256 values as hex & Uint8Array output
* @summary Create Keccak256/512 values as hex & Uint8Array output
*/
export { default as keccakAsHex } from './asHex';
export { default as keccakAsU8a } from './asU8a';
export { keccakAsHex } from './asHex';
export { keccakAsU8a } from './asU8a';
@@ -5,7 +5,7 @@ import type BN from 'bn.js';
import { bnToHex, compactAddLength, hexToU8a, isBigInt, isBn, isHex, isNumber, isString, stringToU8a } from '@polkadot/util';
import blake2AsU8a from '../blake2/asU8a';
import { blake2AsU8a } from '../blake2/asU8a';
const RE_NUMBER = /^\d+$/;
@@ -15,7 +15,7 @@ const BN_OPTIONS = {
isLe: true
};
export default class DeriveJunction {
export class DeriveJunction {
readonly #chainCode: Uint8Array = new Uint8Array(32);
#isHard = false;
@@ -1,7 +1,7 @@
// Copyright 2017-2020 @polkadot/util-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import keyExtractPath, { ExtractResult } from './extractPath';
import { ExtractResult, keyExtractPath } from './extractPath';
describe('keyExtractPath', (): void => {
it('extracts properly from soft', (): void => {

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