Compare commits

...
320 Commits
Author SHA1 Message Date
github-actions[bot] 54c600a676 [CI Skip] release/stable 6.0.1
skip-checks: true
2022-04-09 07:27:33 +00:00
Jaco 763cd473b4 6.0.1 (#330)
* 5.2.1

* 6.0.1

* CHANGELOG

* Bump dev
2022-04-09 10:22:29 +03:00
github-actions[bot] e435c1e7b8 [CI Skip] release/beta 5.1.2-4
skip-checks: true
2022-04-05 05:08:16 +00:00
Jaco 59bf7495b4 Bump dev deps (#328) 2022-04-05 08:03:29 +03:00
github-actions[bot] ec36f55ed8 [CI Skip] release/beta 5.1.2-3
skip-checks: true
2022-04-05 04:34:07 +00:00
Jaco 03f38cb07b Adjust test for updated dev (#327)
* Adjust test for updated dev

* Bump dev
2022-04-05 07:29:17 +03:00
github-actions[bot] 36719449c2 [CI Skip] release/beta 5.1.2-2
skip-checks: true
2022-04-04 08:44:43 +00:00
Jaco efb0c51648 Allow for CJS file locations under cjs/** root (#326) 2022-04-04 11:39:55 +03:00
github-actions[bot] 2faf907296 [CI Skip] release/beta 5.1.2-1
skip-checks: true
2022-04-04 06:31:16 +00:00
Jaco 33b77fed37 Update ed25519 secret key format return description (#325) 2022-04-04 09:25:39 +03:00
github-actions[bot] 8cc2a167e1 [CI Skip] release/beta 5.1.2-0
skip-checks: true
2022-03-28 05:45:28 +00:00
Jaco 09f33968b9 Bump dev deps (@polkadot/util) (#323) 2022-03-28 08:40:40 +03:00
github-actions[bot] 346720f384 [CI Skip] release/stable 5.1.1
skip-checks: true
2022-03-27 07:06:01 +00:00
Jaco aeade5636a 5.1.1 (#322) 2022-03-27 10:01:06 +03:00
github-actions[bot] 9f3c8f1f74 [CI Skip] release/beta 5.0.2-7
skip-checks: true
2022-03-27 06:29:19 +00:00
Jaco 3d1e48ec4b Bump TypeScript (#321) 2022-03-27 09:23:31 +03:00
github-actions[bot] cbffca3984 [CI Skip] release/beta 5.0.2-6
skip-checks: true
2022-03-26 20:05:39 +00:00
Jaco 9d6427d9da Bump dev deps (#320) 2022-03-26 18:10:18 +02:00
github-actions[bot] 368cb6806f [CI Skip] release/beta 5.0.2-5
skip-checks: true
2022-03-26 15:44:48 +00:00
Jaco 9795eaf31c Don't run auto-init, but set input (#319)
* Don't run auto-init, but set input

* Adjust
2022-03-26 17:39:57 +02:00
github-actions[bot] b4f7b0b177 [CI Skip] release/beta 5.0.2-4
skip-checks: true
2022-03-24 11:38:15 +00:00
Jaco 44048626cd Update secp256k1 library (#318)
* Update secp256k1 library

* Adjust

* compress/uncompress

* All of them?

* Test removal of lazy section hack

* Run tests sequentially

* build:mac target

* s/sepc256k1/secp256k1/

* CHANGELOG
2022-03-24 13:31:57 +02:00
github-actions[bot] 7fb8a1cb93 [CI Skip] release/beta 5.0.2-3
skip-checks: true
2022-03-23 13:26:55 +00:00
Jaco 2d544e7bc3 Check instantiate as function (#317)
* Check instantiate as function

* Rename wbg
2022-03-23 15:20:10 +02:00
github-actions[bot] 0f0a8131c5 [CI Skip] release/beta 5.0.2-2
skip-checks: true
2022-03-23 12:00:49 +00:00
Jaco f7e6acbf9c Add initNone (#316)
* Add initNone

* Add force to explicit call
2022-03-23 13:54:11 +02:00
github-actions[bot] eb445e79e2 [CI Skip] release/beta 5.0.2-1
skip-checks: true
2022-03-23 05:21:23 +00:00
Jaco ddee3dfd25 Bump dev (#314) 2022-03-23 07:15:15 +02:00
github-actions[bot] 8b7e6b90a1 [CI Skip] release/beta 5.0.2-0
skip-checks: true
2022-03-19 08:57:25 +00:00
Jaco dd571dd35f Update dev deps to latest util (#313) 2022-03-19 10:52:05 +02:00
Jaco c4e4414bbf FAQ link 2022-03-19 10:43:05 +02:00
github-actions[bot] 221b50e905 [CI Skip] release/stable 5.0.1
skip-checks: true
2022-03-19 07:42:08 +00:00
Jaco 42598dc36b 5.0.1 (#312) 2022-03-19 09:37:11 +02:00
github-actions[bot] ea9d986a48 [CI Skip] release/beta 4.6.2-6
skip-checks: true
2022-03-19 07:25:36 +00:00
Jaco 64b10dd4ad Deps & CHANGELOG (#311) 2022-03-19 09:20:33 +02:00
github-actions[bot] 729b46ee5f [CI Skip] release/beta 4.6.2-5
skip-checks: true
2022-03-19 07:08:10 +00:00
Jaco 0dfb491e9d Reproduction for secp256k1 asm.js failure (#310)
* Reproduction for secp256k1 asm.js failure

* Make test output more readable

* Additional test cleanups

* Bump build deps

* Adjust output sizing flags

* Bump wasm-bindgen

* secp256k1 HACK

* Update packages/wasm-crypto/src/bundle.ts

* Update packages/wasm-crypto/src/bundle.ts

* Update packages/wasm-crypto/test/all/index.cjs
2022-03-19 09:02:52 +02:00
github-actions[bot] 63585ff3a7 [CI Skip] release/beta 4.6.2-4
skip-checks: true
2022-03-18 12:46:20 +00:00
Jaco 698e62d70a Adjust init to allow for asm/wasm or combo (#309)
* Additional known secp256k1 test

* Fix test

* typo

* ... one more typo

* Adjust init to allow for asm/wasm or combo

* Cleanup export, no internal cjs

* Adjust sideEffects

* CHANGELOG
2022-03-18 14:40:59 +02:00
github-actions[bot] ab9ca9f49d [CI Skip] release/beta 4.6.2-3
skip-checks: true
2022-03-18 12:00:14 +00:00
Jaco 257080e1f9 Additional known secp256k1 test (#308)
* Additional known secp256k1 test

* Fix test

* typo

* ... one more typo
2022-03-18 13:54:52 +02:00
github-actions[bot] 068c83b9fb [CI Skip] release/beta 4.6.2-2
skip-checks: true
2022-03-17 05:42:55 +00:00
Jaco cb86c48bc4 Bump @polkadot/dev (#306)
* Bump @polkadot/dev

* trigger
2022-03-17 07:36:16 +02:00
github-actions[bot] f0ceed5454 [CI Skip] release/beta 4.6.2-1
skip-checks: true
2022-03-16 08:04:19 +00:00
Jaco f0e4b29d73 Bump dev deps (#305) 2022-03-16 09:58:59 +02:00
github-actions[bot] 4d23c75fa4 [CI Skip] release/beta 4.6.2-0
skip-checks: true
2022-03-12 10:12:21 +00:00
Jaco 0ae73cbad3 Bump common (#303) 2022-03-12 12:07:27 +02:00
github-actions[bot] 44b70b745a [CI Skip] release/stable 4.6.1
skip-checks: true
2022-03-12 07:52:01 +00:00
Jaco 3bf0e29d94 4.6.1 (#302) 2022-03-12 09:46:59 +02:00
github-actions[bot] 60759e7a1a [CI Skip] release/beta 4.5.2-52
skip-checks: true
2022-03-10 07:42:35 +00:00
Jaco 28f4457e0a Bump deps (& yarn 3.2.0) (#301) 2022-03-10 09:36:44 +02:00
github-actions[bot] aca9e2655b [CI Skip] release/beta 4.5.2-51
skip-checks: true
2022-03-07 08:12:11 +00:00
Jaco 567ebe69d0 Support bundlers where import.meta.url is undefined (#300) 2022-03-07 10:06:55 +02:00
github-actions[bot] 6c3b30fe53 [CI Skip] release/beta 4.5.2-50
skip-checks: true
2022-03-03 13:31:11 +00:00
Jaco e9b2ba93c4 Rename auto step (#299) 2022-03-03 15:25:52 +02:00
github-actions[bot] a9fa4ce1a5 [CI Skip] release/beta 4.5.2-49
skip-checks: true
2022-03-03 09:32:31 +00:00
Jaco 18e2ab6389 Remove checkout from auto-{approve, merge} actions (#298) 2022-03-03 11:27:28 +02:00
github-actions[bot] 917b654c63 [CI Skip] release/beta 4.5.2-48
skip-checks: true
2022-03-02 05:19:27 +00:00
Jaco c7a202525c Replace mergify with action (#297) 2022-03-02 05:14:25 +00:00
github-actions[bot] 4c80c9bd0f [CI Skip] release/beta 4.5.2-47
skip-checks: true
2022-03-01 10:23:23 +00:00
Jaco 480d8e2dc8 Bump TS (#296) 2022-03-01 10:18:28 +00:00
github-actions[bot] 73a4c5d37f [CI Skip] release/beta 4.5.2-46
skip-checks: true
2022-02-27 17:47:34 +00:00
Jaco b003749832 Approve action adjust (#295)
* Approve action adjust

* Only labelled
2022-02-27 17:41:20 +00:00
github-actions[bot] 0ef6797ce9 [CI Skip] release/beta 4.5.2-45
skip-checks: true
2022-02-23 10:40:29 +00:00
Jaco 0013bbc14d Skip job on non-local repo 2022-02-23 12:33:31 +02:00
github-actions[bot] 93c4f62b3d [CI Skip] release/beta 4.5.2-44
skip-checks: true
2022-02-23 10:07:10 +00:00
Jaco 0008428ae0 Use jacogr/action-approve (#292) 2022-02-23 12:00:24 +02:00
github-actions[bot] 49818a5aef [CI Skip] release/beta 4.5.2-43
skip-checks: true
2022-02-21 10:33:38 +00:00
Jaco 9acb068f26 Bump dev (#291) 2022-02-21 10:27:24 +00:00
github-actions[bot] 2e35918650 [CI Skip] release/beta 4.5.2-42
skip-checks: true
2022-02-15 18:25:23 +00:00
Jaco c6877b7207 Bump deps (#290) 2022-02-15 18:18:17 +00:00
github-actions[bot] af598af917 [CI Skip] release/beta 4.5.2-41
skip-checks: true
2022-02-15 07:51:47 +00:00
Jaco fd98695a1c Add mergify (#289) 2022-02-15 09:45:41 +02:00
github-actions[bot] 737c373706 [CI Skip] release/beta 4.5.2-40
skip-checks: true
2022-02-14 05:49:16 +00:00
Jaco 2fe9d88068 Bump common (#288) 2022-02-14 07:43:21 +02:00
github-actions[bot] 81f6e8b214 [CI Skip] release/beta 4.5.2-39
skip-checks: true
2022-02-13 08:36:51 +00:00
Jaco b484c66f9c Disable yarn scripts on CI (#287) 2022-02-13 10:31:21 +02:00
github-actions[bot] a30354dd22 [CI Skip] release/beta 4.5.2-38
skip-checks: true
2022-02-10 04:57:15 +00:00
Jaco 98ba005cbc Bump dev deps (#286) 2022-02-10 06:51:45 +02:00
github-actions[bot] 5ef4c0c3e3 [CI Skip] release/beta 4.5.2-37
skip-checks: true
2022-02-07 09:20:18 +00:00
Jaco 748cf146c2 Bump deps (#285) 2022-02-07 11:14:33 +02:00
github-actions[bot] 9d86641a09 [CI Skip] release/beta 4.5.2-36
skip-checks: true
2022-02-04 07:43:15 +00:00
Jaco 4940a58942 Bump dev & util (#284) 2022-02-04 09:37:50 +02:00
github-actions[bot] 56560d767b [CI Skip] release/beta 4.5.2-35
skip-checks: true
2022-01-22 12:03:33 +00:00
Jaco c024262479 Bump deps (#283) 2022-01-22 13:58:03 +02:00
github-actions[bot] 91616be8c1 [CI Skip] release/beta 4.5.2-34
skip-checks: true
2022-01-17 07:49:35 +00:00
Jaco 14bf2209c1 Remove unused *.json type definition (#282) 2022-01-17 09:43:01 +02:00
github-actions[bot] 26352dfb2c [CI Skip] release/beta 4.5.2-33
skip-checks: true
2022-01-17 06:30:44 +00:00
Jaco 56a5bc7f4e Bump common (util deps) (#281) 2022-01-17 08:24:40 +02:00
github-actions[bot] c5cca3da2d [CI Skip] release/beta 4.5.2-32
skip-checks: true
2022-01-14 10:24:27 +00:00
Jaco b8b72adc38 Manual format of tsconfig.build.json (#280) 2022-01-14 12:18:07 +02:00
github-actions[bot] e69571d469 [CI Skip] release/beta 4.5.2-31
skip-checks: true
2022-01-14 05:43:26 +00:00
Jaco 859bef5d24 Bump dependencies (#279) 2022-01-14 07:38:15 +02:00
github-actions[bot] 1b6ffdd728 [CI Skip] release/beta 4.5.2-30
skip-checks: true
2022-01-13 08:11:25 +00:00
Jaco cedfc3ddc2 Update .mailmap 2022-01-13 10:05:36 +02:00
github-actions[bot] 317d837c26 [CI Skip] release/beta 4.5.2-29
skip-checks: true
2022-01-12 13:49:01 +00:00
Jaco 10e42c4a5f Adjust .mailmap (#278) 2022-01-12 15:42:18 +02:00
github-actions[bot] ccd71cc6fe [CI Skip] release/beta 4.5.2-28
skip-checks: true
2022-01-12 08:22:57 +00:00
Jaco 4981ca3f50 Adjust with tsconfig.build.json inside packages (#277) 2022-01-12 10:17:26 +02:00
github-actions[bot] 20f9969b90 [CI Skip] release/beta 4.5.2-27
skip-checks: true
2022-01-11 10:26:22 +00:00
Jaco f34deb94be Bump dev (w/ babel updates) (#276)
* Bump dev (w/ babel updates)

* codeclimate.yml
2022-01-11 12:20:57 +02:00
github-actions[bot] b98d787dd9 [CI Skip] release/beta 4.5.2-26
skip-checks: true
2022-01-11 06:49:58 +00:00
Jaco fa8ab999d3 Add tsconfig.build.json (#275) 2022-01-11 08:43:55 +02:00
github-actions[bot] b9e7d5a2c1 [CI Skip] release/beta 4.5.2-25
skip-checks: true
2022-01-09 07:13:25 +00:00
Jaco 6b8634462d Bump dev & common (#273)
* Bump dev & common

* Adjust alias
2022-01-09 09:07:40 +02:00
github-actions[bot] f3706b4975 [CI Skip] release/beta 4.5.2-24
skip-checks: true
2022-01-05 09:29:15 +00:00
Jaco 66c70aba9a Adjust for new packageInfo (#272) 2022-01-05 11:23:46 +02:00
github-actions[bot] 2ee13d5063 [CI Skip] release/beta 4.5.2-23
skip-checks: true
2022-01-05 06:46:05 +00:00
Jaco b81eb9037d Bump dev (#270) 2022-01-05 08:40:00 +02:00
github-actions[bot] 2a261ab180 [CI Skip] release/beta 4.5.2-22
skip-checks: true
2022-01-04 17:13:37 +00:00
Jaco b3facfeafe Add git .mailmap (#269) 2022-01-04 19:07:16 +02:00
github-actions[bot] edbd81d6a6 [CI Skip] release/beta 4.5.2-21
skip-checks: true
2022-01-04 10:24:20 +00:00
Jaco c22c861534 fetch-depth 0 (#268) 2022-01-04 12:18:55 +02:00
github-actions[bot] b256423ee7 [CI Skip] release/beta 4.5.2-20
skip-checks: true
2022-01-04 09:58:45 +00:00
Jaco cda39039ea Bump dev (w/ CONTRIBUTORS & umd) (#267) 2022-01-04 11:52:12 +02:00
github-actions[bot] 64242926e2 [CI Skip] release/beta 4.5.2-19
skip-checks: true
2022-01-02 05:58:56 +00:00
Jaco a6357d8b23 Bump deps (#266) 2022-01-02 07:52:08 +02:00
github-actions[bot] 84387bc56d [CI Skip] release/beta 4.5.2-18
skip-checks: true
2022-01-01 16:39:41 +00:00
Jaco 3d1dee1164 2022 (#265)
* 2022

* Update scripts/rust-version.sh
2022-01-01 18:33:38 +02:00
github-actions[bot] b9c627d4c3 [CI Skip] release/beta 4.5.2-17
skip-checks: true
2022-01-01 08:10:22 +00:00
Jaco c588a37cc3 Bump dev (#264) 2022-01-01 10:03:47 +02:00
github-actions[bot] 372bfccb68 [CI Skip] release/beta 4.5.2-16
skip-checks: true
2022-01-01 07:36:23 +00:00
Jaco be4f3ce82c 2022 (#263)
* 2022

* Update scripts/rust-version.sh
2022-01-01 09:30:22 +02:00
github-actions[bot] d7ced7c0e4 [CI Skip] release/beta 4.5.2-15
skip-checks: true
2021-12-31 15:29:22 +00:00
Jaco 3454f0685c Introduce detectOther (#262) 2021-12-31 17:23:05 +02:00
github-actions[bot] 3810eff007 [CI Skip] release/beta 4.5.2-14
skip-checks: true
2021-12-31 09:49:19 +00:00
Jaco a03283fe32 Mock for __dirname (#261)
* Mock for __dirname

* undefined

* CHANGELOG
2021-12-31 11:43:30 +02:00
github-actions[bot] 96d016f0a4 [CI Skip] release/beta 4.5.2-13
skip-checks: true
2021-12-31 08:01:02 +00:00
Jaco 622e60990a Bump babel (#260) 2021-12-31 09:54:41 +02:00
github-actions[bot] 112fbaa97d [CI Skip] release/beta 4.5.2-12
skip-checks: true
2021-12-29 17:25:48 +00:00
Jaco 516cf8347c Additional ed25519 cleanups (#259)
* Adjust ed25519 internals (speed & size)

* Additional ed25519 cleanups
2021-12-29 19:19:41 +02:00
github-actions[bot] 9f0fff863f [CI Skip] release/beta 4.5.2-11
skip-checks: true
2021-12-29 16:15:16 +00:00
Jaco 44c77e5bf3 Adjust ed25519 internals (speed & size) (#258) 2021-12-29 18:08:56 +02:00
github-actions[bot] 1fa4de4276 [CI Skip] release/beta 4.5.2-10
skip-checks: true
2021-12-29 15:29:09 +00:00
Jaco 9f6aa8dd33 Wrapped verification test (#257)
* Wrapped verification test

* tabs
2021-12-29 17:22:34 +02:00
github-actions[bot] f5563c9ed3 [CI Skip] release/beta 4.5.2-9
skip-checks: true
2021-12-25 10:17:50 +00:00
Jaco 32245f5b61 Bump berry (#255) 2021-12-25 12:12:23 +02:00
github-actions[bot] edcd6ee44b [CI Skip] release/beta 4.5.2-8
skip-checks: true
2021-12-24 14:28:20 +00:00
Jaco 93fae330ae Bump deps (#254) 2021-12-24 16:22:00 +02:00
github-actions[bot] 2f13511810 [CI Skip] release/beta 4.5.2-7
skip-checks: true
2021-12-23 07:01:39 +00:00
Jaco 9d1b58917b Dev bump (w/ types key in export map) (#253) 2021-12-23 08:55:27 +02:00
github-actions[bot] 0eb06843f7 [CI Skip] release/beta 4.5.2-6
skip-checks: true
2021-12-22 06:39:49 +00:00
Jaco a977c8fc9f Bump deps (#252) 2021-12-22 08:33:43 +02:00
github-actions[bot] c33ccd1cf9 [CI Skip] release/beta 4.5.2-5
skip-checks: true
2021-12-20 09:55:54 +00:00
Jaco 55c3107e91 Bump dev (w/ output linting adjustments) (#251) 2021-12-20 11:48:59 +02:00
github-actions[bot] 387334854e [CI Skip] release/beta 4.5.2-4
skip-checks: true
2021-12-19 07:26:05 +00:00
Jaco 19a852bee3 Bump common deps (#250) 2021-12-19 09:19:52 +02:00
github-actions[bot] 4c06f8c69b [CI Skip] release/beta 4.5.2-3
skip-checks: true
2021-12-14 06:01:00 +00:00
Jaco 39deef5b8b tsconfig project references (#249)
* Use tsconfig references

* Working :)

* Ignore bytes outputs

* spacing

* Adjust

* tsconfig.eslint.json

* Upgrade

* Include scripts in linting
2021-12-14 07:54:31 +02:00
github-actions[bot] bc605481d2 [CI Skip] release/beta 4.5.2-2
skip-checks: true
2021-12-13 06:19:07 +00:00
Jaco 60dc2ce9c5 Add tsconfig.base (#248) 2021-12-13 08:13:04 +02:00
github-actions[bot] 7ba258f750 [CI Skip] release/beta 4.5.2-1
skip-checks: true
2021-12-12 09:32:17 +00:00
Jaco 4ec72cac9e Bump tsc (#247) 2021-12-12 11:26:31 +02:00
github-actions[bot] cd4ec3ece5 [CI Skip] release/beta 4.5.2-0
skip-checks: true
2021-12-09 11:12:31 +00:00
Jaco 30385b85e4 Align codeclimate.yml (#246) 2021-12-09 13:06:16 +02:00
github-actions[bot] 27bef46818 [CI Skip] release/stable 4.5.1
skip-checks: true
2021-12-03 11:48:36 +00:00
Jaco 2b4ed56dcb 4.5.1 (#245)
* 4.5.1

* Bump deps
2021-12-03 13:43:15 +02:00
github-actions[bot] e167eba7d8 [CI Skip] release/beta 4.4.2-9
skip-checks: true
2021-12-03 09:54:40 +00:00
Jaco 272050938f Local variable cleanups (#244)
* Local variable cleanups

* Fixup

* Revert res moves
2021-12-03 11:49:41 +02:00
github-actions[bot] 3ee381512b [CI Skip] release/beta 4.4.2-8
skip-checks: true
2021-12-03 07:11:06 +00:00
Jaco a2d5affb88 Adjust formatting (#243)
* Adjust formatting

* Remove all unwrap

* Err(_) => _
2021-12-03 09:05:43 +02:00
github-actions[bot] 2b759aab12 [CI Skip] release/beta 4.4.2-7
skip-checks: true
2021-12-03 04:54:44 +00:00
Jaco 223d7bf514 publicKey from slice in secp256k1 compress/expand (#242) 2021-12-03 06:48:02 +02:00
github-actions[bot] fa2eb4e214 [CI Skip] release/beta 4.4.2-6
skip-checks: true
2021-12-02 12:24:51 +00:00
Jaco 7689afb616 Add secp256k1 interfaces (#241)
* Add secp256k1 functions

* features for rand

* JS tests

* signing

* CHANGELOG

* Add secp256k1 seed
2021-12-02 14:19:33 +02:00
github-actions[bot] 10002e9ec5 [CI Skip] release/beta 4.4.2-5
skip-checks: true
2021-12-01 08:12:11 +00:00
Jaco b2a0af0df4 Adjust stale cron (#240) 2021-12-01 10:07:03 +02:00
github-actions[bot] 4966fd2837 [CI Skip] release/beta 4.4.2-4
skip-checks: true
2021-11-30 11:24:34 +00:00
Jaco 421d36d159 Simplify base64 bytes decoding (#239) 2021-11-30 13:19:24 +02:00
github-actions[bot] 74270adba7 [CI Skip] release/beta 4.4.2-3
skip-checks: true
2021-11-30 09:23:58 +00:00
Jaco 2b97759fa7 WASM function JS interface construction (#238) 2021-11-30 11:17:08 +02:00
github-actions[bot] b8b9784763 [CI Skip] release/beta 4.4.2-2
skip-checks: true
2021-11-28 07:17:05 +00:00
Jaco 8439d5c668 Bump common (#237) 2021-11-28 09:12:15 +02:00
Github Actions cb3a0f667a [CI Skip] release/beta 4.4.2-1
skip-checks: true
2021-11-24 14:57:49 +00:00
Jaco adf21a5fc2 Adjust stale schedule (#236) 2021-11-24 16:52:47 +02:00
Github Actions 4c28fadc07 [CI Skip] release/beta 4.4.2-0
skip-checks: true
2021-11-22 06:27:27 +00:00
Jaco 2849a05507 Bump dev & common (#235) 2021-11-22 08:22:24 +02:00
Github Actions 801ed235cf [CI Skip] release/stable 4.4.1
skip-checks: true
2021-11-22 05:03:50 +00:00
Jaco 98433c7399 4.4.1 (#234) 2021-11-22 06:58:30 +02:00
Github Actions b537dcf3f4 [CI Skip] release/beta 4.3.2-0
skip-checks: true
2021-11-21 05:54:49 +00:00
Jaco eaf8ecf2c1 Add hmacSha{256, 512} functions (#233)
* Add hmacSha{256, 512} functions

* type

* Adjust

* Apply suggestions from code review

* Update packages/wasm-crypto/src/rs/hashing.rs

* Update packages/wasm-crypto/src/rs/hashing.rs

* Update packages/wasm-crypto/src/rs/hashing.rs

* Fix Rust side

* naming for wasm interfaces

* Remove type

* Bump common
2021-11-21 07:49:53 +02:00
Github Actions 9f232459d9 [CI Skip] release/stable 4.3.1
skip-checks: true
2021-11-19 13:14:30 +00:00
Jaco b92661cfe0 4.3.1 (#232) 2021-11-19 15:08:46 +02:00
Github Actions 6ca4470752 [CI Skip] release/beta 4.2.2-17
skip-checks: true
2021-11-19 12:34:40 +00:00
Jaco 6cecb67edd keccak512 & sha256 (#231)
* keccak512 & sha256

* Update interface

* Correct test
2021-11-19 14:28:44 +02:00
Github Actions 91388ca10d [CI Skip] release/beta 4.2.2-16
skip-checks: true
2021-11-18 08:28:57 +00:00
Jaco 11e2acbdb5 Bump deps (#230) 2021-11-18 10:24:03 +02:00
Github Actions 4e3d1b631c [CI Skip] release/beta 4.2.2-15
skip-checks: true
2021-11-12 07:39:59 +00:00
Jaco 4f06de4844 Bump deps (#229) 2021-11-12 09:34:30 +02:00
Github Actions affb3c57e3 [CI Skip] release/beta 4.2.2-14
skip-checks: true
2021-11-07 10:44:51 +00:00
Jaco 39e762a419 Bump @polkadot deps (#227) 2021-11-07 12:38:53 +02:00
Github Actions fe966c8576 [CI Skip] release/beta 4.2.2-13
skip-checks: true
2021-11-06 11:42:08 +00:00
Jaco 12c90dfb53 Bump deps (#226) 2021-11-06 13:37:22 +02:00
Github Actions 03aabfd6d1 [CI Skip] release/beta 4.2.2-12
skip-checks: true
2021-11-03 12:50:00 +00:00
Jaco 49b3cf552b Bump dev (#225) 2021-11-03 14:45:06 +02:00
Github Actions 6300012c32 [CI Skip] release/beta 4.2.2-11
skip-checks: true
2021-10-26 07:25:50 +00:00
Jaco 9d0773c185 Bump dev (#224) 2021-10-26 10:20:33 +03:00
Github Actions 96bd2f466e [CI Skip] release/beta 4.2.2-10
skip-checks: true
2021-10-25 13:28:49 +00:00
Jaco c6151e1a7d Bump dev deps (#223) 2021-10-25 16:22:19 +03:00
Github Actions c0c6671bd0 [CI Skip] release/beta 4.2.2-9
skip-checks: true
2021-10-25 11:38:15 +00:00
Jaco 2b9d90ff49 Bump dev (#222) 2021-10-25 14:32:37 +03:00
Github Actions 2caa6fb41a [CI Skip] release/beta 4.2.2-8
skip-checks: true
2021-10-25 09:13:13 +00:00
Jaco df00473ae2 Adjust package.json consistency (#221)
* Adjust package.json consistency

* Bump deps
2021-10-25 12:08:38 +03:00
Github Actions 2acce9283f [CI Skip] release/beta 4.2.2-7
skip-checks: true
2021-10-25 08:52:12 +00:00
Zhongpeng Zhouandmsftenanceprovenance 7971624cf9 Update package.json to include the repository (#220)
* Update package.json to include the repository

Hi there!
This change adds the repository property to your package.json file(s). Having this available provides a number of benefits to security tooling. For example, it allows for greater trust by checking for signed commits, contributors to a release and validating history with the project. It also allows for comparison between the source code and the published artifact in order to detect attacks on authors during the publication process.
We validate that we're making a PR against the correct repository by comparing the metadata for the published artifact on [npmjs.com](www.npmjs.com) against the metadata in the package.json file in the repository.
This change is provided by a team at Microsoft -- we're happy to answer any questions you may have. (Members of this team include [@s-tuli](https://github.com/s-tuli), [@iarna](https://github.com/iarna), [@v-rr](https://github.com/v-rr), [@v-jiepeng](https://github.com/v-jiepeng), [@v-zhzhou](https://github.com/v-zhzhou) and [@v-gjy](https://github.com/v-gjy)). If you would prefer that we not make these sorts of PRs to projects you maintain, please just say. If you'd like to learn more about what we're doing here, we've prepared a document talking about both this project and some of our other activities around supply chain security here: [microsoft/Secure-Supply-Chain](https://github.com/microsoft/Secure-Supply-Chain)
This PR provides repository metadata for the following packages:
* @polkadot/wasm-crypto
* @polkadot/wasm-crypto-asmjs
* @polkadot/wasm-crypto-wasm

* update

* update

Co-authored-by: msftenanceprovenance <msftenanceprovenance@microsoft.com>
2021-10-25 11:45:36 +03:00
Github Actions e353fe7f2c [CI Skip] release/beta 4.2.2-6
skip-checks: true
2021-10-17 09:37:46 +00:00
Jaco e797e7a7e4 Bump dev (#219)
* Bump dev

* Bump
2021-10-17 12:32:50 +03:00
Github Actions cb91f766c7 [CI Skip] release/beta 4.2.2-5
skip-checks: true
2021-10-16 06:46:50 +00:00
Jaco c983de54f6 Bump deps (#218) 2021-10-16 09:40:31 +03:00
Github Actions 9d9b983694 [CI Skip] release/beta 4.2.2-4
skip-checks: true
2021-09-27 05:45:44 +00:00
Jaco 6db930d03d Bump deps (#217) 2021-09-27 07:39:52 +02:00
Github Actions 0233a868ab [CI Skip] release/beta 4.2.2-3
skip-checks: true
2021-09-20 08:39:48 +00:00
Jaco ed98d4820e Bump util (#216) 2021-09-20 10:33:18 +02:00
Github Actions 971d40ba18 [CI Skip] release/beta 4.2.2-2
skip-checks: true
2021-09-14 11:29:28 +00:00
Jaco f3e1e30838 Bump deps (#215) 2021-09-14 13:24:17 +02:00
Github Actions bff8604c8a [CI Skip] release/beta 4.2.2-1
skip-checks: true
2021-09-05 08:28:45 +00:00
Jaco 6cf4fc0989 Bump deps (#214) 2021-09-05 10:22:39 +02:00
Github Actions 308374c7da [CI Skip] release/beta 4.2.2-0
skip-checks: true
2021-09-01 16:49:58 +00:00
Jaco 06bb7ae090 Jest config cleanup (#213)
* Jest config cleanup

* Bump
2021-09-01 18:43:16 +02:00
Github Actions b236d50c3c [CI Skip] release/stable 4.2.1
skip-checks: true
2021-08-28 05:30:23 +00:00
Jaco e2ac301993 4.2.1 (#212) 2021-08-28 07:24:12 +02:00
Github Actions d6bdcaccd7 [CI Skip] release/beta 4.1.3-7
skip-checks: true
2021-08-26 07:36:51 +00:00
Jaco Greeff a7f0e68443 Bump deps 2021-08-26 10:31:04 +03:00
Github Actions dc24ab5804 [CI Skip] release/beta 4.1.3-6
skip-checks: true
2021-08-25 10:01:34 +00:00
Jaco d5512418d2 Use stable as nightly compiler (#192)
* Use stable as nightly compiler

* detect stable

* Apply suggestions from code review

* CHANGELOG

* De-dupe Rust version

* Adjust script location

* Script cleanups

* trigger

* Script location
2021-08-25 11:55:17 +02:00
Github Actions 7a8e570dfa [CI Skip] release/beta 4.1.3-5
skip-checks: true
2021-08-25 08:58:11 +00:00
Jaco 3794a30b4b Adjust JS tests (#211) 2021-08-25 10:53:04 +02:00
Github Actions 700acfe764 [CI Skip] release/beta 4.1.3-4
skip-checks: true
2021-08-24 11:07:21 +00:00
Shunfan ZhouandJaco 9b8d6e0b64 Support sr25519 agreement (#209)
* Support sr25519 ecdh agreement

* Align version of curve25519-dalek

Co-authored-by: Jaco <jacogr@gmail.com>

* Reduce code size

Co-authored-by: Jaco <jacogr@gmail.com>

* Add explicit tests on sr25519 key agreement

* Fix linting issues

* Fix sr25519 key_agreement test

Co-authored-by: Jaco <jacogr@gmail.com>
2021-08-24 13:00:54 +02:00
Github Actions 3575f57a2a [CI Skip] release/beta 4.1.3-3
skip-checks: true
2021-08-24 07:05:13 +00:00
Jaco 8838651405 Bump deps (#210) 2021-08-24 08:59:29 +02:00
Github Actions 6cb8f2254a [CI Skip] release/beta 4.1.3-2
skip-checks: true
2021-08-16 06:04:41 +00:00
Jaco 72c2a70a32 Bump deps (#208) 2021-08-16 07:58:49 +02:00
Github Actions 51b1d12aab [CI Skip] release/beta 4.1.3-1
skip-checks: true
2021-08-13 11:52:29 +00:00
Jaco Greeff 93159192bb berry 3.0.1 2021-08-13 14:46:26 +03:00
Github Actions d208694d05 [CI Skip] release/beta 4.1.3-0
skip-checks: true
2021-08-13 11:40:39 +00:00
Jaco e7cb8a4907 Bump deps (#207) 2021-08-13 13:35:19 +02:00
Github Actions 01dfe6e35c [CI Skip] release/stable 4.1.2
skip-checks: true
2021-07-09 05:54:46 +00:00
Jaco a5d4c4b43c 4.1.2 (#206) 2021-07-09 07:49:27 +02:00
Github Actions 9a5107534d [CI Skip] release/stable 4.1.1
skip-checks: true
2021-07-07 16:04:14 +00:00
Jaco d50d04318e 4.1 (#205) 2021-07-07 17:59:17 +02:00
Github Actions a0afa3cef6 [CI Skip] release/beta 4.0.3-35
skip-checks: true
2021-07-07 15:40:39 +00:00
Jaco cf20e027af Single module bundle via rollup (#203)
* Single module bundle via rollup

* Adjust naming

* Allow multiple bundles (consistency)

* Remove unused rollup plugins

* Update rollup.config.js

* preferConst

* Rollup with dev build

* Use createBundle

* Update rollup.config.mjs

* Add bundle entrypoint

* Bump dev

* Bump dev

* Remove x-* overrides
2021-07-07 17:34:32 +02:00
Github Actions b68ab94939 [CI Skip] release/beta 4.0.3-34
skip-checks: true
2021-07-06 11:16:52 +00:00
Jaco Greeff af94bc472d Bump dev 2021-07-06 14:11:15 +03:00
Github Actions 289b102b38 [CI Skip] release/beta 4.0.3-33
skip-checks: true
2021-07-06 07:13:57 +00:00
Jaco Greeff ba6cbc2247 Bump deps 2021-07-06 10:08:04 +03:00
Jaco Greeff 379b574b84 Bump dev 2021-07-06 09:56:08 +03:00
Github Actions f1c44a65b1 [CI Skip] release/beta 4.0.3-32
skip-checks: true
2021-07-06 05:52:17 +00:00
Jaco Greeff 7ddb5ebbe5 Bump dev 2021-07-06 08:46:29 +03:00
Github Actions afd2fe3228 [CI Skip] release/beta 4.0.3-31
skip-checks: true
2021-07-05 15:00:16 +00:00
Jaco 292197a3a2 Bump dev (#204) 2021-07-05 16:54:53 +02:00
Github Actions 8fac7feabd [CI Skip] release/beta 4.0.3-30
skip-checks: true
2021-07-02 07:12:59 +00:00
Jaco ca69955332 Bump TS (#202) 2021-07-02 09:08:21 +02:00
Github Actions eacb24a133 [CI Skip] release/beta 4.0.3-29
skip-checks: true
2021-06-27 08:19:12 +00:00
Jaco 21b3dbbb94 Bump deps (#201) 2021-06-27 10:14:23 +02:00
Github Actions 57ff683121 [CI Skip] release/beta 4.0.3-28
skip-checks: true
2021-06-22 13:51:08 +00:00
Jaco 8b7e35ad0b Bump deps (#200) 2021-06-22 15:45:31 +02:00
Github Actions 0732f053b8 [CI Skip] release/beta 4.0.3-27
skip-checks: true
2021-06-08 15:09:51 +00:00
Jaco 831a72b519 Prettier ignore all (#199)
* Prettier ignore all

* Add scripts
2021-06-08 17:04:07 +02:00
Github Actions a5dad40521 [CI Skip] release/beta 4.0.3-26
skip-checks: true
2021-06-07 14:05:43 +00:00
Jaco Greeff e8263b2597 Adjust cron locks 2021-06-07 16:59:58 +03:00
Github Actions 9d6c0afc8e [CI Skip] release/beta 4.0.3-25
skip-checks: true
2021-06-06 19:30:29 +00:00
Jaco Greeff 6393d078e8 Adjust semgrep check 2021-06-06 22:25:08 +03:00
Github Actions c62f6493d9 [CI Skip] release/beta 4.0.3-24
skip-checks: true
2021-06-05 11:13:51 +00:00
Jaco Greeff e8737c403e No semgrep.yml on forks 2021-06-05 14:07:33 +03:00
Github Actions f279a89dc7 [CI Skip] release/beta 4.0.3-23
skip-checks: true
2021-06-05 06:43:12 +00:00
Jaco Greeff 30463cfe75 push-master.yml adjust skip 2021-06-05 09:38:11 +03:00
Github Actions c1405bbe2e [CI Skip] release/beta 4.0.3-22
skip-checks: true
2021-06-05 06:28:05 +00:00
Jaco 7d9dafd9e1 semgrep.yml on PR (#198)
* semgrep.yml on PR

* if

* if adjust

* if test

* Check
2021-06-05 08:22:35 +02:00
Github Actions e0e3634714 [CI Skip] release/beta 4.0.3-21
skip-checks: true
2021-06-04 14:38:13 +00:00
Jaco Greeff a5818af5fe Update semgrep.yml 2021-06-04 17:32:21 +03:00
Github Actions 6ebec52ffc [CI Skip] release/beta 4.0.3-20
skip-checks: true
2021-06-04 10:50:23 +00:00
Jaco Greeff ebd96dea49 semgrep skip 2021-06-04 13:44:52 +03:00
Github Actions d692383d80 [CI Skip] release/beta 4.0.3-19
skip-checks: true
2021-06-04 08:44:52 +00:00
Jaco Greeff cefc8c97ec semgrep on master only 2021-06-04 11:38:32 +03:00
Github Actions 8ce18ff065 [CI Skip] release/beta 4.0.3-18
skip-checks: true
2021-06-04 05:41:43 +00:00
Jaco Greeff 40a97d2206 semgrep only for non-forked 2021-06-04 08:35:56 +03:00
Github Actions e111d9e91d [CI Skip] release/beta 4.0.3-17
skip-checks: true
2021-06-02 16:09:06 +00:00
Jaco Greeff faf407d62d fix stale.yml 2021-06-02 19:03:33 +03:00
Github Actions cf5759a324 [CI Skip] release/beta 4.0.3-16
skip-checks: true
2021-06-02 07:11:39 +00:00
Jaco Greeff d220a69ab1 cron workflows 2021-06-02 10:05:48 +03:00
Github Actions 4d8dde58dc [CI Skip] release/beta 4.0.3-15
skip-checks: true
2021-06-01 10:04:28 +00:00
Jaco Greeff c5b98fcd5b semgrep.yml 2021-06-01 12:58:33 +03:00
Github Actions 482576be81 [CI Skip] release/beta 4.0.3-14
skip-checks: true
2021-06-01 06:08:44 +00:00
Jaco Greeff fdea2aa4dc cron daily only 2021-06-01 09:03:50 +03:00
Github Actions e4dbdc570d [CI Skip] release/beta 4.0.3-13
skip-checks: true
2021-05-31 20:21:54 +00:00
Jaco Greeff 7f3146ce64 cron locks 2021-05-31 23:15:39 +03:00
Github Actions 1bf001b2f3 [CI Skip] release/beta 4.0.3-12
skip-checks: true
2021-05-31 07:55:52 +00:00
Jaco 2a99496e9a Update .123trigger 2021-05-31 09:49:34 +02:00
Github Actions 59ba89a032 [CI Skip] release/beta 4.0.3-11
skip-checks: true
2021-05-31 07:48:52 +00:00
Jaco Greeff be9786fc4c Bump dev 2021-05-31 10:42:50 +03:00
Jaco 629140e6c3 Bump dev (#197) 2021-05-31 09:15:12 +02:00
Jaco Greeff 5f46f9e698 lock.yml 2021-05-30 22:22:16 +03:00
Github Actions d4daf14c77 [CI Skip] release/beta 4.0.3-11
skip-checks: true
2021-05-30 09:38:55 +00:00
Jaco cfdaab8f86 Bump berry (#196)
* Bump berry

* Bumps
2021-05-30 11:33:41 +02:00
Github Actions 70ca570a66 [CI Skip] release/beta 4.0.3-10
skip-checks: true
2021-05-29 08:24:22 +00:00
Jaco Greeff ab7e12a30d Update stale.yml 2021-05-29 11:18:37 +03:00
Github Actions 87a95b9ab2 [CI Skip] release/beta 4.0.3-9
skip-checks: true
2021-05-28 08:45:18 +00:00
Jaco Greeff 9aff03c5b6 Update stale.yml 2021-05-28 11:39:36 +03:00
Github Actions adfa4fb099 [CI Skip] release/beta 4.0.3-8
skip-checks: true
2021-05-28 08:11:42 +00:00
Jaco 5e8b3c1c24 Add stale.yml (#195) 2021-05-28 10:06:59 +02:00
Github Actions 714b9ebf48 [CI Skip] release/beta 4.0.3-7
skip-checks: true
2021-05-28 06:45:01 +00:00
Jaco c93dbd2d2e Apply lgtm alert fixes (#194) 2021-05-28 08:40:18 +02:00
Github Actions 7139f1fe42 [CI Skip] release/beta 4.0.3-6
skip-checks: true
2021-05-26 20:20:07 +00:00
Jaco 7e490f1f96 Bump deps (#193) 2021-05-26 22:15:16 +02:00
Github Actions b6aa432b26 [CI Skip] release/beta 4.0.3-5
skip-checks: true
2021-05-07 05:26:26 +00:00
Jaco 547e31ffef Bump dev (#191) 2021-05-07 07:20:53 +02:00
Github Actions 092ee15603 [CI Skip] release/beta 4.0.3-4
skip-checks: true
2021-04-30 05:55:01 +00:00
Jaco dd52d5158e Bump deps (#190) 2021-04-30 07:47:21 +02:00
Github Actions 88d8f79e3c [CI Skip] release/beta 4.0.3-3
skip-checks: true
2021-04-24 07:39:11 +00:00
Jaco 3a1a75f99f Add engines field to package.json (#189) 2021-04-24 09:32:52 +02:00
Github Actions 422c23dbbd [CI Skip] release/beta 4.0.3-2
skip-checks: true
2021-04-21 07:20:11 +00:00
Jaco 13fd02d455 Bump deps (#188) 2021-04-21 09:13:36 +02:00
Github Actions b75e2e4778 [CI Skip] release/beta 4.0.3-1
skip-checks: true
2021-04-08 08:22:23 +00:00
Jaco Greeff 43222700be Bump deps (#187) 2021-04-08 10:16:07 +02:00
Github Actions 05abb02b64 [CI Skip] release/beta 4.0.3-0
skip-checks: true
2021-03-08 15:27:35 +00:00
Jaco Greeff bf1590ab70 Bump TS (#186) 2021-03-08 16:21:16 +01:00
Github Actions f9b5b9f55f [CI Skip] release/stable 4.0.2
skip-checks: true
2021-03-05 22:01:17 +00:00
Jaco Greeff 25d9e21b38 Adjust esm -> cjs imports (4.0.2) (#185)
* Adjust esm -> cjs impors

* cleanups

* CHANGELOG

* Apply suggestions from code review

* Apply suggestions from code review

* Apply suggestions from code review

* Update packages/wasm-crypto-wasm/src/empty.ts

* Apply suggestions from code review

* Update packages/wasm-crypto-wasm/src/cjs/bytes.d.ts
2021-03-05 22:55:19 +01:00
103 changed files with 7020 additions and 5320 deletions
+4 -1
View File
@@ -1,5 +1,8 @@
4
7
3.2.2
3.2.3
3.2.4
4.0.2
4.1.2
+15
View File
@@ -1,5 +1,20 @@
checks:
argument-count:
config:
threshold: 5
method-complexity:
config:
threshold: 7
method-count:
config:
threshold: 25
method-lines:
config:
threshold: 30
exclude_patterns:
- "**/*.spec.js"
- "**/*.spec.ts"
- "docs/**/*.js"
- "**/test/**/*.js"
- "packages/wasm-crypto-wasm/src/fflate.ts"
+5 -12
View File
@@ -1,4 +1,4 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const base = require('@polkadot/dev/config/eslint.cjs');
@@ -6,21 +6,14 @@ const base = require('@polkadot/dev/config/eslint.cjs');
module.exports = {
...base,
ignorePatterns: [
'.eslintrc.js',
'.github/**',
'.vscode/**',
'.yarn/**',
'**/binaryen/*',
'**/build/*',
'**/coverage/*',
'**/node_modules/*',
'**/pkg/*',
'**/target/*'
...base.ignorePatterns,
'**/target/*',
'packages/bytes/*'
],
parserOptions: {
...base.parserOptions,
project: [
'./tsconfig.json'
'./tsconfig.eslint.json'
]
}
};
+16
View File
@@ -0,0 +1,16 @@
name: bot
on:
pull_request:
types: [labeled]
jobs:
approve:
if: "! startsWith(github.event.head_commit.message, '[CI Skip]') && (!github.event.pull_request || github.event.pull_request.head.repo.full_name == github.repository)"
runs-on: ubuntu-latest
steps:
- uses: jacogr/action-approve@master
with:
authors: jacogr
labels: -auto
token: ${{ secrets.GH_PAT_BOT }}
+16
View File
@@ -0,0 +1,16 @@
name: bot
on:
pull_request:
types: [labeled]
jobs:
merge:
runs-on: ubuntu-latest
steps:
- uses: jacogr/action-merge@master
with:
checks: build,lint,test
labels: -auto
strategy: squash
token: ${{ secrets.GH_PAT_BOT }}
+25
View File
@@ -0,0 +1,25 @@
name: 'Lock Threads'
on:
schedule:
- cron: '20 1/3 * * *'
jobs:
lock:
runs-on: ubuntu-latest
env:
YARN_ENABLE_SCRIPTS: false
steps:
- uses: dessant/lock-threads@v2
with:
github-token: ${{ secrets.GH_PAT_BOT }}
issue-lock-inactive-days: '7'
issue-lock-comment: >
This thread has been automatically locked since there has not been
any recent activity after it was closed. Please open a new issue
if you think you have a related problem or query.
pr-lock-inactive-days: '2'
pr-lock-comment: >
This pull request has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new issue for related bugs.
+2
View File
@@ -8,6 +8,8 @@ jobs:
step: ['lint', 'test', 'build']
name: ${{ matrix.step }}
runs-on: ubuntu-latest
env:
YARN_ENABLE_SCRIPTS: false
steps:
- uses: actions/checkout@v2
- name: ${{ matrix.step }}
+8 -13
View File
@@ -6,30 +6,25 @@ on:
jobs:
master:
if: "! startsWith(github.event.head_commit.message, '[CI Skip]')"
strategy:
matrix:
step: ['build:release']
name: ${{ matrix.step }}
if: "! startsWith(github.event.head_commit.message, '[CI Skip]') && github.repository == 'polkadot-js/wasm'"
runs-on: ubuntu-latest
env:
YARN_ENABLE_SCRIPTS: false
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
GH_PAT: ${{ secrets.GH_PAT }}
GH_RELEASE_GITHUB_API_TOKEN: ${{ secrets.GH_PAT }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT }}
- name: build
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
GH_PAT: ${{ secrets.GH_PAT }}
GH_RELEASE_GITHUB_API_TOKEN: ${{ secrets.GH_PAT }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
yarn install --immutable | grep -v 'YN0013'
./scripts/install-build-deps.sh
yarn ${{ matrix.step }}
dummy:
runs-on: ubuntu-latest
steps:
- name: dummy
run: |
echo "Dummy skip step"
+20
View File
@@ -0,0 +1,20 @@
name: Semgrep
on:
pull_request: {}
push:
branches:
- master
jobs:
check:
if: "! startsWith(github.event.head_commit.message, '[CI Skip]') && (!github.event.pull_request || github.event.pull_request.head.repo.full_name == github.repository)"
runs-on: ubuntu-latest
env:
YARN_ENABLE_SCRIPTS: false
steps:
- uses: actions/checkout@v2
- uses: returntocorp/semgrep-action@v1
with:
auditOn: push
publishToken: ${{ secrets.SEMGREP_APP_TOKEN }}
publishDeployment: 1395
+19
View File
@@ -0,0 +1,19 @@
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '35 1/3 * * *'
jobs:
stale:
runs-on: ubuntu-latest
env:
YARN_ENABLE_SCRIPTS: false
steps:
- uses: actions/stale@v3
with:
repo-token: ${{ secrets.GH_PAT_BOT }}
stale-issue-message: 'This issue has been open for 21 days with no activity and is not labelled as an enhancement. It will be closed in 7 days.'
stale-issue-label: 'stale'
exempt-issue-labels: '-size-l,-size-m,-size-s,-size-xl,-size-xs,[bug]'
days-before-stale: 21
days-before-close: 7
+3
View File
@@ -1,6 +1,8 @@
binaryen/
bindgen/
build/
build-cjs/
build-esm/
build-docs/
bytes/
coverage/
@@ -26,5 +28,6 @@ lerna-debug.log*
npm-debug.log*
package-lock.json
report.*.json
tsconfig.*buildinfo
yarn-debug.log*
yarn-error.log*
+3
View File
@@ -0,0 +1,3 @@
Jaco <jacogr@gmail.com>
github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> <action@github.com>
github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Github Actions <action@github.com>
+4
View File
@@ -0,0 +1,4 @@
build
coverage
packages
scripts
+4
View File
@@ -0,0 +1,4 @@
// Copyright 2017-2022 @polkadot/dev authors & contributors
// SPDX-License-Identifier: Apache-2.0
module.exports = require('@polkadot/dev/config/prettier.cjs');
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
+785
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -10,4 +10,4 @@ plugins:
- path: .yarn/plugins/@yarnpkg/plugin-version.cjs
spec: "@yarnpkg/plugin-version"
yarnPath: .yarn/releases/yarn-2.4.1.cjs
yarnPath: .yarn/releases/yarn-3.2.0.cjs
+107
View File
@@ -1,5 +1,112 @@
# CHANGELOG
## 6.0.1 Apr 9, 2022
- **Breaking change** In this major version the commonjs outputs are moved to a sub-folder. Since the `export` map and `main` field in `package.json` does reflect this change, there should be no usage changes. However the packages here will all need to be on the same version for internal linkage.
Changes:
- Update ed25519 secret key format return description
- Output commonjs files under the `cjs/**` root
## 5.1.1 Mar 27, 2022
Changes:
- Swap from `libsecp256k1` to `secp256k1` (this aligns with the Substrate use)
- Adjust `wasm-crypto/init*` to also export `initWasm(): Promise<void>` (optional manual init)
- Allow for `wasm-crypto/initNone` with no defined Wasm or Asm interfaces
- Fix initialization on React Native with only ASM
## 5.0.1 Mar 19, 2022
- **Breaking change** For users of React Native, you are now required to add `import '@polkadot/wasm-crypto/initOnlyAsm'` at your project top-level to ensure that asm.js is initialized. (Or alternatively `import '@polkadot/wasm-crypto/initWasmAsm'` to future-proof when WASM does become available)
- **Breaking change** For users who used to map the `data` and `empty` of the internal `wasm-crypto-{wasm, asmjs}` packages in their bundlers, swap to one of the `@polkadot/wasm-crypto/init*` top-level imports to set the type of interfaces you would prefer. A full writeup of the rationale and other options can be found [in the FAQ](https://polkadot.js.org/docs/util-crypto/FAQ#i-dont-have-wasm-available-in-my-environment)
Changes:
- Add (optional) `@polkadot/wasm-crypto/init{OnlyAsm, OnlyWasm, WasmAsm}` to allow specific interface types
- Add work-around for lazy secp256k1 init in asm.js environments
- Optimize asm.js output size
- Use latest `wasm-bindgen`, `binaryen` & `wabt` packages in build
- Additional workaround for Vite bundling
## 4.6.1 Mar 12, 2022
Changes:
- Adjust ed25519 internals, consistency in code
- Ensure package path is available under ESM & CJS
- JS wrapped bytes interoperability test
- Adjust for bundlers where `import.meta.url` is undefined
## 4.5.1 Dec 3, 2021
Changes:
- Add `secp256k1{Compress, Expand, Recover, Sign}` functions
- Remove all occurences of `.unwrap()` (match everywhere)
- Adjust and optimize WASM function JS interface construction
- Simplify base64 bytes decoding on construction
## 4.4.1 Nov 22, 2021
Changes:
- Add `hmacSha256` & `hmacSha512` functions
## 4.3.1 Nov 19, 2021
Contributed:
- Updated package.json to include repo (Thanks to https://github.com/v-zhzhou)
Changes:
- Add `keccak512` function
- Add `sha256` function
## 4.2.1 Aug 28, 2021
Contributed:
- Add sr25519 agreement external (Thanks to https://github.com/shelvenzhou)
Changes:
- Adjust tests to align with JS coding standards
- Allow for optional build with Rust stable bootstrap
## 4.1.2 Jul 9, 2021
Changes:
- Bump `@polkadot/dev` to allow for bundles with new-format
## 4.1.1 Jul 7, 2021
Changes:
- Add an explicit `engines` field to `package.json`
- Allow building as a completely stand-alone browser bundle (experimental)
## 4.0.2 Mar 5, 2021
Changes:
- Add import indirection for both CJS & ESM (where generated source file is commonjs)
## 4.0.1 Mar 4, 2021
**Important** In the 4.0 version the default package type has been changed to ESM modules by default. This should not affect usage, however since the output formats changed, a new major version is required.
+5
View File
@@ -0,0 +1,5 @@
400 Jaco 6.0.1 (#330)
1 Evgeny Fixed type (#121)
1 Shunfan Zhou Support sr25519 agreement (#209)
1 Steve Degosserie Expose Schnorrkel's VRF capabilities (#170)
1 Zhongpeng Zhou Update package.json to include the repository (#220)
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
module.exports = require('@polkadot/dev/config/babel-config-cjs.cjs');
+6 -12
View File
@@ -1,19 +1,13 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const config = require('@polkadot/dev/config/jest.cjs');
module.exports = Object.assign({}, config, {
module.exports = {
...config,
moduleNameMapper: {
'@polkadot/wasm-crypto-asmjs(.*)$': '<rootDir>/packages/wasm-crypto-asmjs/build/$1',
'@polkadot/wasm-crypto-wasm(.*)$': '<rootDir>/packages/wasm-crypto-wasm/build/$1',
'@polkadot/wasm-crypto-(asmjs|wasm)(.*)$': '<rootDir>/packages/wasm-crypto-$1/build/$2',
// eslint-disable-next-line sort-keys
'@polkadot/wasm-crypto(.*)$': '<rootDir>/packages/wasm-crypto/src/$1'
},
modulePathIgnorePatterns: [
'<rootDir>/packages/wasm-crypto-asmjs/build',
'<rootDir>/packages/wasm-crypto-wasm/build',
'<rootDir>/packages/wasm-crypto/build'
],
transformIgnorePatterns: ['/node_modules/(?!@polkadot|@babel/runtime/helpers/esm/)']
});
}
};
+21 -11
View File
@@ -1,32 +1,42 @@
{
"repository": "https://github.com/polkadot-js/wasm",
"author": "Jaco Greeff <jacogr@gmail.com>",
"license": "Apache-2",
"bugs": "https://github.com/polkadot-js/wasm/issues",
"homepage": "https://github.com/polkadot-js/wasm#readme",
"license": "Apache-2.0",
"packageManager": "yarn@3.2.0",
"private": true,
"repository": {
"type": "git",
"url": "https://github.com/polkadot-js/wasm.git"
},
"sideEffects": false,
"version": "6.0.1",
"workspaces": [
"packages/*"
],
"resolutions": {
"typescript": "^4.2.2"
},
"scripts": {
"build": "yarn build:wasm",
"build:js": "./scripts/build-js.sh",
"build:mac": "PATH=\"/opt/homebrew/opt/llvm/bin:$PATH\" CC=/opt/homebrew/opt/llvm/bin/clang AR=/opt/homebrew/opt/llvm/bin/llvm-ar yarn build",
"build:release": "polkadot-ci-ghact-build",
"build:rollup": "polkadot-exec-rollup --config",
"build:wasm": "./scripts/build.sh",
"lint": "polkadot-dev-run-lint",
"clean": "./scripts/clean.sh",
"lint": "polkadot-dev-run-lint",
"postinstall": "polkadot-dev-yarn-only",
"test": "yarn test:wasm:rust",
"test:wasm:js": "yarn test:wasm:js:jest && yarn test:wasm:js:node",
"test:wasm:js:jest": "polkadot-dev-run-test ./test/jest.spec.js",
"test:wasm:js:node": "cd packages/wasm-crypto && node ./test/wasm.cjs && node ./test/asm.cjs",
"test:wasm:rust": "cd packages/wasm-crypto && RUST_BACKTRACE=full cargo test --release -- --nocapture"
"test:wasm:rust": "cd packages/wasm-crypto && RUST_BACKTRACE=full cargo test --release -- --test-threads=1 --nocapture"
},
"devDependencies": {
"@babel/core": "^7.13.8",
"@polkadot/dev": "^0.62.5",
"fflate": "^0.6.7",
"@babel/core": "^7.17.9",
"@polkadot/dev": "^0.66.1",
"fflate": "^0.7.3",
"override-require": "^1.1.1"
},
"version": "4.0.1"
"resolutions": {
"typescript": "^4.6.3"
}
}
+25 -13
View File
@@ -1,19 +1,31 @@
{
"name": "@polkadot/wasm-crypto-asmjs",
"version": "4.0.1",
"type": "module",
"description": "Asm.js content for wasm-crypto",
"browser": "empty.js",
"main": "empty.js",
"react-native": "data.js",
"sideEffects": false,
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
"license": "Apache-2.0",
"bugs": "https://github.com/polkadot-js/wasm/issues",
"homepage": "https://github.com/polkadot-js/wasm",
"contributors": [],
"description": "Asm.js content for wasm-crypto",
"engines": {
"node": ">=14.0.0"
},
"homepage": "https://github.com/polkadot-js/wasm/tree/master/packages/wasm-crypto-asmjs#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/wasm-crypto-asmjs",
"repository": {
"directory": "packages/wasm-crypto-asmjs",
"type": "git",
"url": "https://github.com/polkadot-js/wasm.git"
},
"sideEffects": false,
"type": "module",
"version": "6.0.1",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.13.9"
"@babel/runtime": "^7.17.9"
},
"devDependencies": {
"@polkadot/util": "^8.7.1"
},
"peerDependencies": {
"@polkadot/util": "*"
}
}
+5
View File
@@ -0,0 +1,5 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-asmjs authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { asmJsInit } from './cjs/data.js';
export { packageInfo } from './packageInfo';
@@ -0,0 +1,6 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
const data = require('../data');
module.exports = data;
+4
View File
@@ -0,0 +1,4 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-asmjs authors & contributors
// SPDX-License-Identifier: Apache-2.0
export declare const asmJsInit: null;
@@ -0,0 +1,6 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-asmjs authors & contributors
// SPDX-License-Identifier: Apache-2.0
const asmJsInit = null;
module.exports.asmJsInit = asmJsInit;
@@ -0,0 +1,3 @@
{
"type": "commonjs"
}
-4
View File
@@ -1,4 +0,0 @@
// Copyright 2019-2021 @polkadot/wasm-crypto-asmjs authors & contributors
// SPDX-License-Identifier: Apache-2.0
export const asmJsInit = null;
@@ -0,0 +1,4 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-asmjs authors & contributors
// SPDX-License-Identifier: Apache-2.0
export default [];
@@ -0,0 +1,11 @@
// Copyright 2017-2022 @polkadot/wasm-crypto-asmjs authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
detectPackage(packageInfo, null, others);
-4
View File
@@ -1,4 +0,0 @@
// Copyright 2019-2021 @polkadot/wasm-crypto-asmjs authors & contributors
// SPDX-License-Identifier: Apache-2.0
export const asmJsInit = null;
+6
View File
@@ -0,0 +1,6 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-asmjs authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
export * from './bundle';
@@ -1,6 +1,6 @@
// Copyright 2017-2021 @polkadot/wasm-crypto-asmjs authors & contributors
// Copyright 2017-2022 @polkadot/wasm-crypto-asmjs authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Auto-generated by @polkadot/dev, do not edit
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/wasm-crypto-asmjs', version: '4.0.1' };
export const packageInfo = { name: '@polkadot/wasm-crypto-asmjs', path: 'auto', type: 'auto', version: '6.0.1' };
@@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src"
},
"references": []
}
+25 -13
View File
@@ -1,19 +1,31 @@
{
"name": "@polkadot/wasm-crypto-wasm",
"version": "4.0.1",
"type": "module",
"description": "Wasm content for wasm-crypto",
"browser": "data.js",
"main": "data.js",
"react-native": "data.js",
"sideEffects": false,
"author": "Jaco Greeff <jacogr@gmail.com>",
"maintainers": [],
"contributors": [],
"license": "Apache-2.0",
"bugs": "https://github.com/polkadot-js/wasm/issues",
"homepage": "https://github.com/polkadot-js/wasm",
"contributors": [],
"description": "Wasm content for wasm-crypto",
"engines": {
"node": ">=14.0.0"
},
"homepage": "https://github.com/polkadot-js/wasm/tree/master/packages/wasm-crypto-wasm#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/wasm-crypto-wasm",
"repository": {
"directory": "packages/wasm-crypto-wasm",
"type": "git",
"url": "https://github.com/polkadot-js/wasm.git"
},
"sideEffects": false,
"type": "module",
"version": "6.0.1",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.13.9"
"@babel/runtime": "^7.17.9"
},
"devDependencies": {
"@polkadot/util": "^8.7.1"
},
"peerDependencies": {
"@polkadot/util": "*"
}
}
+14 -78
View File
@@ -1,86 +1,22 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// MIT License
//
// Copyright (c) 2014 Jameson Little
//
// https://github.com/beatgammit/base64-js/blob/88957c9943c7e2a0f03cdf73e71d579e433627d3/index.js
// This only contains the toByteArray function (no encoding)
//
// Only tweaks make here are some TS adjustments (we use strict null checks), the code is otherwise as-is with
// only the single required function provided
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
const CODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
export function base64Decode (data: string): Uint8Array {
const bytes = [];
let byte = 0;
let bits = 0;
const lookup: string[] = [];
const revLookup: number[] = [];
for (let i = 0; i < data.length && data[i] !== '='; i++) {
// each character represents 6 bits
byte = (byte << 6) | chars.indexOf(data[i]);
for (let i = 0; i < CODE.length; ++i) {
lookup[i] = CODE[i];
revLookup[CODE.charCodeAt(i)] = i;
}
// Support decoding URL-safe base64 strings, as Node.js does.
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
revLookup['-'.charCodeAt(0)] = 62;
revLookup['_'.charCodeAt(0)] = 63;
function getLens (b64: string): [number, number] {
const len = b64.length;
if (len % 4 > 0) {
throw new Error('Invalid string. Length must be a multiple of 4');
// each byte needs to contain 8 bits
if ((bits += 6) >= 8) {
bytes.push((byte >>> (bits -= 8)) & 0xff);
}
}
// Trim off extra bytes after placeholder bytes are found
// See: https://github.com/beatgammit/base64-js/issues/42
const validLen = b64.indexOf('=');
return validLen === -1
? [len, 0]
: [validLen, 4 - (validLen % 4)];
}
export function toByteArray (b64: string): Uint8Array {
const [validLen, placeHoldersLen] = getLens(b64);
const arr = new Uint8Array(((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen);
let curByte = 0;
let i;
let tmp;
// if there are placeholders, only get up to the last complete 4 chars
const len = placeHoldersLen > 0
? validLen - 4
: validLen;
for (i = 0; i < len; i += 4) {
tmp =
(revLookup[b64.charCodeAt(i)] << 18) |
(revLookup[b64.charCodeAt(i + 1)] << 12) |
(revLookup[b64.charCodeAt(i + 2)] << 6) |
revLookup[b64.charCodeAt(i + 3)];
arr[curByte++] = (tmp >> 16) & 0xFF;
arr[curByte++] = (tmp >> 8) & 0xFF;
arr[curByte++] = tmp & 0xFF;
}
if (placeHoldersLen === 2) {
tmp =
(revLookup[b64.charCodeAt(i)] << 2) |
(revLookup[b64.charCodeAt(i + 1)] >> 4);
arr[curByte++] = tmp & 0xFF;
} else if (placeHoldersLen === 1) {
tmp =
(revLookup[b64.charCodeAt(i)] << 10) |
(revLookup[b64.charCodeAt(i + 1)] << 4) |
(revLookup[b64.charCodeAt(i + 2)] >> 2);
arr[curByte++] = (tmp >> 8) & 0xFF;
arr[curByte++] = tmp & 0xFF;
}
return arr;
return Uint8Array.from(bytes);
}
+10
View File
@@ -0,0 +1,10 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { bytes, sizeUncompressed } from './cjs/bytes';
import { base64Decode } from './base64';
import { unzlibSync } from './fflate';
export { packageInfo } from './packageInfo';
export const wasmBytes = unzlibSync(base64Decode(bytes), new Uint8Array(sizeUncompressed));
-8
View File
@@ -1,8 +0,0 @@
// Copyright 2019-2021 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
export const bytes = '';
export const sizeCompressed = 0;
export const sizeUncompressed = 0;
+6
View File
@@ -0,0 +1,6 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
export declare const bytes = '';
export declare const sizeCompressed = 0;
export declare const sizeUncompressed = 0;
@@ -0,0 +1,8 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
module.exports.bytes = '';
module.exports.sizeCompressed = 0;
module.exports.sizeUncompressed = 0;
@@ -0,0 +1,6 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
const bytes = require('../bytes');
module.exports = bytes;
@@ -0,0 +1,3 @@
{
"type": "commonjs"
}
-8
View File
@@ -1,8 +0,0 @@
// Copyright 2019-2021 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { toByteArray } from './base64';
import { bytes, sizeUncompressed } from './bytes';
import { unzlibSync } from './fflate';
export const wasmBytes = unzlibSync(toByteArray(bytes), new Uint8Array(sizeUncompressed));
@@ -0,0 +1,4 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
export default [];
@@ -0,0 +1,11 @@
// Copyright 2017-2022 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
detectPackage(packageInfo, null, others);
-4
View File
@@ -1,4 +0,0 @@
// Copyright 2019-2021 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
export const wasmBytes = null;
+3 -3
View File
@@ -1,4 +1,4 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// MIT License
@@ -265,7 +265,7 @@ const inflt = (dat: Uint8Array, buf?: Uint8Array, st?: InflateState) => {
// length tree distance tree
const lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
// max length bits
lbt = max(lt)
lbt = max(lt);
// max dist bits
dbt = max(dt);
lm = hMap(lt, lbt, 1);
@@ -321,7 +321,7 @@ const inflt = (dat: Uint8Array, buf?: Uint8Array, st?: InflateState) => {
}
st.l = lm, st.p = pos, st.b = bt;
if (lm) final = 1, st.m = lbt, st.d = dm, st.n = dbt;
} while (!final)
} while (!final);
return bt == buf.length ? buf : slc(buf, 0, bt);
}
+6
View File
@@ -0,0 +1,6 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
export * from './bundle';
+3 -3
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2021 @polkadot/wasm-crypto-wasm authors & contributors
// Copyright 2017-2022 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Auto-generated by @polkadot/dev, do not edit
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/wasm-crypto-wasm', version: '4.0.1' };
export const packageInfo = { name: '@polkadot/wasm-crypto-wasm', path: 'auto', type: 'auto', version: '6.0.1' };
@@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src"
},
"references": []
}
+89 -26
View File
@@ -1,5 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "addr2line"
version = "0.13.0"
@@ -43,7 +45,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46254cf2fdcdf1badb5934448c1bcbe046a56537b3987d96c51a7afc5d03f293"
dependencies = [
"addr2line",
"cfg-if",
"cfg-if 0.1.10",
"libc",
"miniz_oxide",
"object",
@@ -105,12 +107,24 @@ version = "1.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
[[package]]
name = "cc"
version = "1.0.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
[[package]]
name = "cfg-if"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "cloudabi"
version = "0.0.3"
@@ -230,9 +244,22 @@ version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
dependencies = [
"cfg-if",
"cfg-if 0.1.10",
"libc",
"wasi",
"wasi 0.9.0+wasi-snapshot-preview1",
"wasm-bindgen",
]
[[package]]
name = "getrandom"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753"
dependencies = [
"cfg-if 1.0.0",
"js-sys",
"libc",
"wasi 0.10.2+wasi-snapshot-preview1",
"wasm-bindgen",
]
@@ -271,6 +298,15 @@ dependencies = [
"digest",
]
[[package]]
name = "js-sys"
version = "0.3.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52732a3d3ad72c58ad2dc70624f9c17b46ecd0943b9a4f1ee37c4c18c5d983e2"
dependencies = [
"wasm-bindgen",
]
[[package]]
name = "keccak"
version = "0.1.0"
@@ -285,9 +321,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.74"
version = "0.2.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2f02823cf78b754822df5f7f268fb59822e7296276d3e069d8e8cb26a14bd10"
checksum = "8521a1b57e76b1ec69af7599e75e38e7b7fad6610f037db8c79b127201b5d119"
[[package]]
name = "lock_api"
@@ -304,7 +340,7 @@ version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
dependencies = [
"cfg-if",
"cfg-if 0.1.10",
]
[[package]]
@@ -377,7 +413,7 @@ version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3"
dependencies = [
"cfg-if",
"cfg-if 0.1.10",
"cloudabi",
"libc",
"redox_syscall",
@@ -409,9 +445,9 @@ checksum = "99c605b9a0adc77b7211c6b1f722dcb613d68d66859a44f3d485a6da332b0598"
[[package]]
name = "proc-macro2"
version = "1.0.19"
version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04f5f085b5d71e2188cb8271e5da0161ad52c3f227a661a3c135fdf28e258b12"
checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
dependencies = [
"unicode-xid",
]
@@ -431,7 +467,7 @@ version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
dependencies = [
"getrandom",
"getrandom 0.1.14",
"libc",
"rand_chacha",
"rand_core",
@@ -454,7 +490,7 @@ version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
dependencies = [
"getrandom",
"getrandom 0.1.14",
]
[[package]]
@@ -493,7 +529,7 @@ dependencies = [
"arrayref",
"arrayvec 0.5.1",
"curve25519-dalek",
"getrandom",
"getrandom 0.1.14",
"merlin",
"rand",
"rand_core",
@@ -521,6 +557,24 @@ dependencies = [
"sha2",
]
[[package]]
name = "secp256k1"
version = "0.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c42e6f1735c5f00f51e43e28d6634141f2bcad10931b2609ddd74a86d751260"
dependencies = [
"secp256k1-sys",
]
[[package]]
name = "secp256k1-sys"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "957da2573cde917463ece3570eab4a0b3f19de6f1646cde62e6fd3868f566036"
dependencies = [
"cc",
]
[[package]]
name = "serde"
version = "1.0.114"
@@ -565,9 +619,9 @@ checksum = "502d53007c02d7605a05df1c1a73ee436952781653da5d0bf57ad608f66932c1"
[[package]]
name = "syn"
version = "1.0.38"
version = "1.0.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e69abc24912995b3038597a7a593be5053eb0fb44f3cc5beec0deb421790c1f4"
checksum = "ea297be220d52398dcc07ce15a209fce436d361735ac1db700cab3b6cdfb9f54"
dependencies = [
"proc-macro2",
"quote",
@@ -653,13 +707,21 @@ version = "0.9.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
[[package]]
name = "wasi"
version = "0.10.2+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
[[package]]
name = "wasm"
version = "0.0.0"
dependencies = [
"blake2-rfc",
"byteorder",
"curve25519-dalek",
"ed25519-dalek",
"getrandom 0.2.3",
"hex-literal",
"hmac",
"merlin",
@@ -667,6 +729,7 @@ dependencies = [
"rand",
"schnorrkel",
"scrypt",
"secp256k1",
"sha2",
"tiny-bip39",
"tiny-keccak",
@@ -677,19 +740,19 @@ dependencies = [
[[package]]
name = "wasm-bindgen"
version = "0.2.65"
version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3edbcc9536ab7eababcc6d2374a0b7bfe13a2b6d562c5e07f370456b1a8f33d"
checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06"
dependencies = [
"cfg-if",
"cfg-if 1.0.0",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.65"
version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89ed2fb8c84bfad20ea66b26a3743f3e7ba8735a69fe7d95118c33ec8fc1244d"
checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca"
dependencies = [
"bumpalo",
"lazy_static",
@@ -702,9 +765,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.65"
version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb071268b031a64d92fc6cf691715ca5a40950694d8f683c5bb43db7c730929e"
checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -712,9 +775,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.65"
version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf592c807080719d1ff2f245a687cbadb3ed28b2077ed7084b47aba8b691f2c6"
checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc"
dependencies = [
"proc-macro2",
"quote",
@@ -725,9 +788,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.65"
version = "0.2.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b6c0220ded549d63860c78c38f3bcc558d1ca3f4efa74942c536ddbbb55e87"
checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2"
[[package]]
name = "wee_alloc"
@@ -735,7 +798,7 @@ version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e"
dependencies = [
"cfg-if",
"cfg-if 0.1.10",
"libc",
"memory_units",
"winapi",
+6 -2
View File
@@ -9,6 +9,7 @@ license = "Apache-2.0"
name = "wasm"
publish = false
repository = "https://github.com/polkadot-js/wasm/"
resolver = "2"
version = "0.0.0"
[lib]
@@ -17,18 +18,21 @@ crate-type = ["cdylib"]
[dependencies]
blake2-rfc = "0.2.18"
byteorder = "1.3.1"
curve25519-dalek = { version = "2.1.0", default-features = false }
ed25519-dalek = { version = "1.0.0-pre.4", features = [] }
getrandom = { version="0.2.3", features = ["js"] }
hmac = "0.7.0"
# libsecp256k1 = "0.2.2"
secp256k1 = { version = "0.21.2", default-features = false, features = ["recovery", "global-context"] }
merlin = { version = "2.0", default-features = false }
pbkdf2 = { version = "0.3.0", default-features = false }
rand = { version="0.7.3", default-features = false, features = ["wasm-bindgen"] }
schnorrkel = { version = "0.9.1", features = ["preaudit_deprecated", "u64_backend"] }
scrypt = { version = "0.2", default-features = false }
sha2 = "0.8.1"
tiny-bip39 = { version = "0.7", default-features = false }
tiny-keccak = { version = "2.0.1", features = ["keccak"] }
twox-hash = "1.5.0"
wasm-bindgen = "=0.2.65"
wasm-bindgen = "=0.2.79"
wee_alloc = "0.4.3"
[dev-dependencies]
+32 -10
View File
@@ -1,21 +1,43 @@
{
"name": "@polkadot/wasm-crypto",
"version": "4.0.1",
"type": "module",
"author": "Jaco Greeff <jacogr@gmail.com>",
"main": "index.js",
"bugs": "https://github.com/polkadot-js/wasm/issues",
"contributors": [],
"description": "A wasm interface layer for use by @polkadot/util-crypto",
"engines": {
"node": ">=14.0.0"
},
"homepage": "https://github.com/polkadot-js/wasm/tree/master/packages/wasm-crypto#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/wasm-crypto",
"repository": {
"directory": "packages/wasm-crypto",
"type": "git",
"url": "https://github.com/polkadot-js/wasm.git"
},
"sideEffects": [
"./detectPackage.js",
"./detectPackage.cjs"
"./detectPackage.cjs",
"./initNone.js",
"./initNone.cjs",
"./initOnlyAsm.js",
"./initOnlyAsm.cjs",
"./initOnlyWasm.js",
"./initOnlyWasm.cjs",
"./initWasmAsm.js",
"./initWasmAsm.cjs"
],
"type": "module",
"version": "6.0.1",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.13.9",
"@polkadot/wasm-crypto-asmjs": "^4.0.1",
"@polkadot/wasm-crypto-wasm": "^4.0.1"
"@babel/runtime": "^7.17.9",
"@polkadot/wasm-crypto-asmjs": "^6.0.1",
"@polkadot/wasm-crypto-wasm": "^6.0.1"
},
"devDependencies": {
"@polkadot/util": "^6.0.1-6",
"@polkadot/x-randomvalues": "^6.0.1-6"
"@polkadot/util": "^8.7.1",
"@polkadot/x-randomvalues": "^8.7.1"
},
"peerDependencies": {
"@polkadot/util": "*",
+36 -39
View File
@@ -1,64 +1,61 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import type { AsmCreator, WasmCryptoInstance } from './types';
import type { WasmCryptoInstance } from './types';
import { assert, stringToU8a, u8aToString } from '@polkadot/util';
let wasm: WasmCryptoInstance | null = null;
let cachegetInt32: Int32Array | null = null;
let cachegetUint8: Uint8Array | null = null;
type PopFirst<T extends unknown[]> =
T extends [WasmCryptoInstance, ...infer N]
? N
: [];
export async function initWasm (wasmBytes: Uint8Array | null, asmFn: AsmCreator | null, wbg: Record<string, WebAssembly.ImportValue>): Promise<void> {
try {
assert(typeof WebAssembly !== 'undefined' && wasmBytes && wasmBytes.length, 'WebAssembly is not available in your environment');
const source = await WebAssembly.instantiate(wasmBytes, { wbg });
wasm = source.instance.exports as unknown as WasmCryptoInstance;
} catch (error) {
// if we have a valid supplied asm.js, return that
if (asmFn) {
wasm = asmFn(wbg);
} else {
console.error('FATAL: Unable to initialize @polkadot/wasm-crypto');
console.error(error);
wasm = null;
}
}
interface Bridge {
cachegetInt32: Int32Array | null;
cachegetUint8: Uint8Array | null;
type: 'wasm' | 'asm';
wasm: WasmCryptoInstance | null;
wasmPromise: Promise<void> | null;
wasmPromiseFn: null | (() => Promise<void>);
}
// FIXME We really would love to clean this up and have a sign like (wasm, ...params) => T
// Alas, TypeScript foo is not that great today, so we sadly have an extra closure here
export function withWasm <T, F extends (...params: never[]) => T> (fn: (wasm: WasmCryptoInstance) => F): F {
return ((...params: never[]): T => {
assert(wasm, 'The WASM interface has not been initialized. Ensure that you wait for the initialization Promise with waitReady() from @polkadot/wasm-crypto (or cryptoWaitReady() from @polkadot/util-crypto) before attempting to use WASM-only interfaces.');
export const __bridge: Bridge = {
cachegetInt32: null,
cachegetUint8: null,
type: 'wasm',
wasm: null,
wasmPromise: null,
wasmPromiseFn: null
};
return fn(wasm)(...params);
}) as unknown as F;
export function withWasm <T, F extends (wasm: WasmCryptoInstance, ...params: never[]) => T> (fn: F): (...params: PopFirst<Parameters<F>>) => ReturnType<F> {
return (...params: PopFirst<Parameters<F>>): ReturnType<F> => {
assert(__bridge.wasm, 'The WASM interface has not been initialized. Ensure that you wait for the initialization Promise with waitReady() from @polkadot/wasm-crypto (or cryptoWaitReady() from @polkadot/util-crypto) before attempting to use WASM-only interfaces.');
return fn(__bridge.wasm, ...params) as ReturnType<F>;
};
}
export function getWasm (): WasmCryptoInstance {
return wasm!;
return __bridge.wasm!;
}
export function getInt32 (): Int32Array {
if (cachegetInt32 === null || cachegetInt32.buffer !== wasm!.memory.buffer) {
cachegetInt32 = new Int32Array(wasm!.memory.buffer);
if (__bridge.cachegetInt32 === null || __bridge.cachegetInt32.buffer !== __bridge.wasm!.memory.buffer) {
__bridge.cachegetInt32 = new Int32Array(__bridge.wasm!.memory.buffer);
}
return cachegetInt32;
return __bridge.cachegetInt32;
}
export function getUint8 (): Uint8Array {
if (cachegetUint8 === null || cachegetUint8.buffer !== wasm!.memory.buffer) {
cachegetUint8 = new Uint8Array(wasm!.memory.buffer);
if (__bridge.cachegetUint8 === null || __bridge.cachegetUint8.buffer !== __bridge.wasm!.memory.buffer) {
__bridge.cachegetUint8 = new Uint8Array(__bridge.wasm!.memory.buffer);
}
return cachegetUint8;
return __bridge.cachegetUint8;
}
export function getU8a (ptr: number, len: number): Uint8Array {
@@ -70,7 +67,7 @@ export function getString (ptr: number, len: number): string {
}
export function allocU8a (arg: Uint8Array): [number, number] {
const ptr = wasm!.__wbindgen_malloc(arg.length * 1);
const ptr = __bridge.wasm!.__wbindgen_malloc(arg.length * 1);
getUint8().set(arg, ptr / 1);
@@ -86,7 +83,7 @@ export function resultU8a (): Uint8Array {
const r1 = getInt32()[8 / 4 + 1];
const ret = getU8a(r0, r1).slice();
wasm!.__wbindgen_free(r0, r1 * 1);
__bridge.wasm!.__wbindgen_free(r0, r1 * 1);
return ret;
}
+221
View File
@@ -0,0 +1,221 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { __bridge, allocString, allocU8a, getWasm, resultString, resultU8a, withWasm } from './bridge';
import { initWasm } from './init';
export { packageInfo } from './packageInfo';
export const bip39Generate = withWasm((wasm, words: 12 | 15 | 18 | 21 | 24): string => {
wasm.ext_bip39_generate(8, words);
return resultString();
});
export const bip39ToEntropy = withWasm((wasm, phrase: string): Uint8Array => {
wasm.ext_bip39_to_entropy(8, ...allocString(phrase));
return resultU8a();
});
export const bip39ToMiniSecret = withWasm((wasm, phrase: string, password: string): Uint8Array => {
wasm.ext_bip39_to_mini_secret(8, ...allocString(phrase), ...allocString(password));
return resultU8a();
});
export const bip39ToSeed = withWasm((wasm, phrase: string, password: string): Uint8Array => {
wasm.ext_bip39_to_seed(8, ...allocString(phrase), ...allocString(password));
return resultU8a();
});
export const bip39Validate = withWasm((wasm, phrase: string): boolean => {
const ret = wasm.ext_bip39_validate(...allocString(phrase));
return ret !== 0;
});
export const ed25519KeypairFromSeed = withWasm((wasm, seed: Uint8Array): Uint8Array => {
wasm.ext_ed_from_seed(8, ...allocU8a(seed));
return resultU8a();
});
export const ed25519Sign = withWasm((wasm, pubkey: Uint8Array, seckey: Uint8Array, message: Uint8Array): Uint8Array => {
wasm.ext_ed_sign(8, ...allocU8a(pubkey), ...allocU8a(seckey), ...allocU8a(message));
return resultU8a();
});
export const ed25519Verify = withWasm((wasm, signature: Uint8Array, message: Uint8Array, pubkey: Uint8Array): boolean => {
const ret = wasm.ext_ed_verify(...allocU8a(signature), ...allocU8a(message), ...allocU8a(pubkey));
return ret !== 0;
});
export const secp256k1FromSeed = withWasm((wasm, seckey: Uint8Array): Uint8Array => {
wasm.ext_secp_from_seed(8, ...allocU8a(seckey));
return resultU8a();
});
export const secp256k1Compress = withWasm((wasm, pubkey: Uint8Array): Uint8Array => {
wasm.ext_secp_pub_compress(8, ...allocU8a(pubkey));
return resultU8a();
});
export const secp256k1Expand = withWasm((wasm, pubkey: Uint8Array): Uint8Array => {
wasm.ext_secp_pub_expand(8, ...allocU8a(pubkey));
return resultU8a();
});
export const secp256k1Recover = withWasm((wasm, msgHash: Uint8Array, sig: Uint8Array, recovery: number): Uint8Array => {
wasm.ext_secp_recover(8, ...allocU8a(msgHash), ...allocU8a(sig), recovery);
return resultU8a();
});
export const secp256k1Sign = withWasm((wasm, msgHash: Uint8Array, seckey: Uint8Array): Uint8Array => {
wasm.ext_secp_sign(8, ...allocU8a(msgHash), ...allocU8a(seckey));
return resultU8a();
});
export const sr25519DeriveKeypairHard = withWasm((wasm, pair: Uint8Array, cc: Uint8Array): Uint8Array => {
wasm.ext_sr_derive_keypair_hard(8, ...allocU8a(pair), ...allocU8a(cc));
return resultU8a();
});
export const sr25519DeriveKeypairSoft = withWasm((wasm, pair: Uint8Array, cc: Uint8Array): Uint8Array => {
wasm.ext_sr_derive_keypair_soft(8, ...allocU8a(pair), ...allocU8a(cc));
return resultU8a();
});
export const sr25519DerivePublicSoft = withWasm((wasm, pubkey: Uint8Array, cc: Uint8Array): Uint8Array => {
wasm.ext_sr_derive_public_soft(8, ...allocU8a(pubkey), ...allocU8a(cc));
return resultU8a();
});
export const sr25519KeypairFromSeed = withWasm((wasm, seed: Uint8Array): Uint8Array => {
wasm.ext_sr_from_seed(8, ...allocU8a(seed));
return resultU8a();
});
export const sr25519Sign = withWasm((wasm, pubkey: Uint8Array, secret: Uint8Array, message: Uint8Array): Uint8Array => {
wasm.ext_sr_sign(8, ...allocU8a(pubkey), ...allocU8a(secret), ...allocU8a(message));
return resultU8a();
});
export const sr25519Verify = withWasm((wasm, signature: Uint8Array, message: Uint8Array, pubkey: Uint8Array): boolean => {
const ret = wasm.ext_sr_verify(...allocU8a(signature), ...allocU8a(message), ...allocU8a(pubkey));
return ret !== 0;
});
export const sr25519Agree = withWasm((wasm, pubkey: Uint8Array, secret: Uint8Array): Uint8Array => {
wasm.ext_sr_agree(8, ...allocU8a(pubkey), ...allocU8a(secret));
return resultU8a();
});
export const vrfSign = withWasm((wasm, secret: Uint8Array, context: Uint8Array, message: Uint8Array, extra: Uint8Array): Uint8Array => {
wasm.ext_vrf_sign(8, ...allocU8a(secret), ...allocU8a(context), ...allocU8a(message), ...allocU8a(extra));
return resultU8a();
});
export const vrfVerify = withWasm((wasm, pubkey: Uint8Array, context: Uint8Array, message: Uint8Array, extra: Uint8Array, outAndProof: Uint8Array): boolean => {
const ret = wasm.ext_vrf_verify(...allocU8a(pubkey), ...allocU8a(context), ...allocU8a(message), ...allocU8a(extra), ...allocU8a(outAndProof));
return ret !== 0;
});
export const blake2b = withWasm((wasm, data: Uint8Array, key: Uint8Array, size: number): Uint8Array => {
wasm.ext_blake2b(8, ...allocU8a(data), ...allocU8a(key), size);
return resultU8a();
});
export const hmacSha256 = withWasm((wasm, key: Uint8Array, data: Uint8Array): Uint8Array => {
wasm.ext_hmac_sha256(8, ...allocU8a(key), ...allocU8a(data));
return resultU8a();
});
export const hmacSha512 = withWasm((wasm, key: Uint8Array, data: Uint8Array): Uint8Array => {
wasm.ext_hmac_sha512(8, ...allocU8a(key), ...allocU8a(data));
return resultU8a();
});
export const keccak256 = withWasm((wasm, data: Uint8Array): Uint8Array => {
wasm.ext_keccak256(8, ...allocU8a(data));
return resultU8a();
});
export const keccak512 = withWasm((wasm, data: Uint8Array): Uint8Array => {
wasm.ext_keccak512(8, ...allocU8a(data));
return resultU8a();
});
export const pbkdf2 = withWasm((wasm, data: Uint8Array, salt: Uint8Array, rounds: number): Uint8Array => {
wasm.ext_pbkdf2(8, ...allocU8a(data), ...allocU8a(salt), rounds);
return resultU8a();
});
export const scrypt = withWasm((wasm, password: Uint8Array, salt: Uint8Array, log2n: number, r: number, p: number): Uint8Array => {
wasm.ext_scrypt(8, ...allocU8a(password), ...allocU8a(salt), log2n, r, p);
return resultU8a();
});
export const sha256 = withWasm((wasm, data: Uint8Array): Uint8Array => {
wasm.ext_sha256(8, ...allocU8a(data));
return resultU8a();
});
export const sha512 = withWasm((wasm, data: Uint8Array): Uint8Array => {
wasm.ext_sha512(8, ...allocU8a(data));
return resultU8a();
});
export const twox = withWasm((wasm, data: Uint8Array, rounds: number) => {
wasm.ext_twox(8, ...allocU8a(data), rounds);
return resultU8a();
});
export function isReady (): boolean {
return !!getWasm();
}
export async function waitReady (): Promise<boolean> {
try {
if (!__bridge.wasmPromise) {
if (!__bridge.wasmPromiseFn) {
__bridge.wasmPromiseFn = initWasm;
}
__bridge.wasmPromise = __bridge.wasmPromiseFn();
}
await __bridge.wasmPromise;
return isReady();
} catch {
return false;
}
}
+7
View File
@@ -0,0 +1,7 @@
// Copyright 2017-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { packageInfo as asmInfo } from '@polkadot/wasm-crypto-asmjs/packageInfo';
import { packageInfo as wasmInfo } from '@polkadot/wasm-crypto-wasm/packageInfo';
export default [asmInfo, wasmInfo];
+6 -5
View File
@@ -1,10 +1,11 @@
// Copyright 2017-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2017-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { detectPackage } from '@polkadot/util';
import { packageInfo as asmInfo } from '@polkadot/wasm-crypto-asmjs/packageInfo';
import { packageInfo as wasmInfo } from '@polkadot/wasm-crypto-wasm/packageInfo';
// Do not edit, auto-generated by @polkadot/dev
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
detectPackage(packageInfo, typeof __dirname !== 'undefined' && __dirname, [asmInfo, wasmInfo]);
detectPackage(packageInfo, null, others);
+5 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint-disable camelcase */
@@ -51,6 +51,10 @@ export function __wbindgen_is_undefined (idx: number): boolean {
return getObject(idx) === undefined;
}
export function __wbindgen_throw (ptr: number, len: number): boolean {
throw new Error(getString(ptr, len));
}
export function __wbg_self_1b7a39e3a92c949c (): number {
return addObject(DEFAULT_SELF);
}
+2 -255
View File
@@ -1,259 +1,6 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
import { asmJsInit } from '@polkadot/wasm-crypto-asmjs';
import { wasmBytes } from '@polkadot/wasm-crypto-wasm';
import { allocString, allocU8a, getWasm, initWasm, resultString, resultU8a, withWasm } from './bridge';
import * as imports from './imports';
export { packageInfo } from './packageInfo';
const wasmPromise = initWasm(wasmBytes, asmJsInit, imports).catch(() => null);
export const bip39Generate = withWasm((wasm) =>
(words: 12 | 15 | 18 | 21 | 24): string => {
wasm.ext_bip39_generate(8, words);
return resultString();
}
);
export const bip39ToEntropy = withWasm((wasm) =>
(phrase: string): Uint8Array => {
const [ptr0, len0] = allocString(phrase);
wasm.ext_bip39_to_entropy(8, ptr0, len0);
return resultU8a();
}
);
export const bip39ToMiniSecret = withWasm((wasm) =>
(phrase: string, password: string): Uint8Array => {
const [ptr0, len0] = allocString(phrase);
const [ptr1, len1] = allocString(password);
wasm.ext_bip39_to_mini_secret(8, ptr0, len0, ptr1, len1);
return resultU8a();
}
);
export const bip39ToSeed = withWasm((wasm) =>
(phrase: string, password: string): Uint8Array => {
const [ptr0, len0] = allocString(phrase);
const [ptr1, len1] = allocString(password);
wasm.ext_bip39_to_seed(8, ptr0, len0, ptr1, len1);
return resultU8a();
}
);
export const bip39Validate = withWasm((wasm) =>
(phrase: string): boolean => {
const [ptr0, len0] = allocString(phrase);
const ret = wasm.ext_bip39_validate(ptr0, len0);
return ret !== 0;
}
);
export const ed25519KeypairFromSeed = withWasm((wasm) =>
(seed: Uint8Array): Uint8Array => {
const [ptr0, len0] = allocU8a(seed);
wasm.ext_ed_from_seed(8, ptr0, len0);
return resultU8a();
}
);
export const ed25519Sign = withWasm((wasm) =>
(pubkey: Uint8Array, seckey: Uint8Array, message: Uint8Array): Uint8Array => {
const [ptr0, len0] = allocU8a(pubkey);
const [ptr1, len1] = allocU8a(seckey);
const [ptr2, len2] = allocU8a(message);
wasm.ext_ed_sign(8, ptr0, len0, ptr1, len1, ptr2, len2);
return resultU8a();
}
);
export const ed25519Verify = withWasm((wasm) =>
(signature: Uint8Array, message: Uint8Array, pubkey: Uint8Array): boolean => {
const [ptr0, len0] = allocU8a(signature);
const [ptr1, len1] = allocU8a(message);
const [ptr2, len2] = allocU8a(pubkey);
const ret = wasm.ext_ed_verify(ptr0, len0, ptr1, len1, ptr2, len2);
return ret !== 0;
}
);
export const sr25519DeriveKeypairHard = withWasm((wasm) =>
(pair: Uint8Array, cc: Uint8Array): Uint8Array => {
const [ptr0, len0] = allocU8a(pair);
const [ptr1, len1] = allocU8a(cc);
wasm.ext_sr_derive_keypair_hard(8, ptr0, len0, ptr1, len1);
return resultU8a();
}
);
export const sr25519DeriveKeypairSoft = withWasm((wasm) =>
(pair: Uint8Array, cc: Uint8Array): Uint8Array => {
const [ptr0, len0] = allocU8a(pair);
const [ptr1, len1] = allocU8a(cc);
wasm.ext_sr_derive_keypair_soft(8, ptr0, len0, ptr1, len1);
return resultU8a();
}
);
export const sr25519DerivePublicSoft = withWasm((wasm) =>
(pubkey: Uint8Array, cc: Uint8Array): Uint8Array => {
const [ptr0, len0] = allocU8a(pubkey);
const [ptr1, len1] = allocU8a(cc);
wasm.ext_sr_derive_public_soft(8, ptr0, len0, ptr1, len1);
return resultU8a();
}
);
export const sr25519KeypairFromSeed = withWasm((wasm) =>
(seed: Uint8Array): Uint8Array => {
const [ptr0, len0] = allocU8a(seed);
wasm.ext_sr_from_seed(8, ptr0, len0);
return resultU8a();
}
);
export const sr25519Sign = withWasm((wasm) =>
(pubkey: Uint8Array, secret: Uint8Array, message: Uint8Array): Uint8Array => {
const [ptr0, len0] = allocU8a(pubkey);
const [ptr1, len1] = allocU8a(secret);
const [ptr2, len2] = allocU8a(message);
wasm.ext_sr_sign(8, ptr0, len0, ptr1, len1, ptr2, len2);
return resultU8a();
}
);
export const sr25519Verify = withWasm((wasm) =>
(signature: Uint8Array, message: Uint8Array, pubkey: Uint8Array): boolean => {
const [ptr0, len0] = allocU8a(signature);
const [ptr1, len1] = allocU8a(message);
const [ptr2, len2] = allocU8a(pubkey);
const ret = wasm.ext_sr_verify(ptr0, len0, ptr1, len1, ptr2, len2);
return ret !== 0;
}
);
export const vrfSign = withWasm((wasm) =>
(secret: Uint8Array, context: Uint8Array, message: Uint8Array, extra: Uint8Array): Uint8Array => {
const [ptr0, len0] = allocU8a(secret);
const [ptr1, len1] = allocU8a(context);
const [ptr2, len2] = allocU8a(message);
const [ptr3, len3] = allocU8a(extra);
wasm.ext_vrf_sign(8, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3);
return resultU8a();
}
);
export const vrfVerify = withWasm((wasm) =>
(pubkey: Uint8Array, context: Uint8Array, message: Uint8Array, extra: Uint8Array, outAndProof: Uint8Array): boolean => {
const [ptr0, len0] = allocU8a(pubkey);
const [ptr1, len1] = allocU8a(context);
const [ptr2, len2] = allocU8a(message);
const [ptr3, len3] = allocU8a(extra);
const [ptr4, len4] = allocU8a(outAndProof);
const ret = wasm.ext_vrf_verify(ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, ptr4, len4);
return ret !== 0;
}
);
export const blake2b = withWasm((wasm) =>
(data: Uint8Array, key: Uint8Array, size: number): Uint8Array => {
const [ptr0, len0] = allocU8a(data);
const [ptr1, len1] = allocU8a(key);
wasm.ext_blake2b(8, ptr0, len0, ptr1, len1, size);
return resultU8a();
}
);
export const keccak256 = withWasm((wasm) =>
(data: Uint8Array): Uint8Array => {
const [ptr0, len0] = allocU8a(data);
wasm.ext_keccak256(8, ptr0, len0);
return resultU8a();
}
);
export const pbkdf2 = withWasm((wasm) =>
(data: Uint8Array, salt: Uint8Array, rounds: number): Uint8Array => {
const [ptr0, len0] = allocU8a(data);
const [ptr1, len1] = allocU8a(salt);
wasm.ext_pbkdf2(8, ptr0, len0, ptr1, len1, rounds);
return resultU8a();
}
);
export const scrypt = withWasm((wasm) =>
(password: Uint8Array, salt: Uint8Array, log2n: number, r: number, p: number): Uint8Array => {
const [ptr0, len0] = allocU8a(password);
const [ptr1, len1] = allocU8a(salt);
wasm.ext_scrypt(8, ptr0, len0, ptr1, len1, log2n, r, p);
return resultU8a();
}
);
export const sha512 = withWasm((wasm) =>
(data: Uint8Array): Uint8Array => {
const [ptr0, len0] = allocU8a(data);
wasm.ext_sha512(8, ptr0, len0);
return resultU8a();
}
);
export const twox = withWasm((wasm) =>
(data: Uint8Array, rounds: number) => {
const [ptr0, len0] = allocU8a(data);
wasm.ext_twox(8, ptr0, len0, rounds);
return resultU8a();
}
);
export function isReady (): boolean {
return !!getWasm();
}
export function waitReady (): Promise<boolean> {
return wasmPromise.then(() => isReady());
}
export * from './bundle';
+44
View File
@@ -0,0 +1,44 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { AsmCreator, WasmCryptoInstance } from './types';
import { assert } from '@polkadot/util';
import { wasmBytes } from '@polkadot/wasm-crypto-wasm';
import { __bridge } from './bridge';
import * as wbg from './imports';
async function createPromise (wasmBytes: Uint8Array | null, asmFn: AsmCreator | null): Promise<void> {
try {
assert(typeof WebAssembly === 'object' && typeof WebAssembly.instantiate === 'function' && wasmBytes && wasmBytes.length, 'WebAssembly is not available in your environment');
const source = await WebAssembly.instantiate(wasmBytes, { wbg });
__bridge.wasm = (source.instance.exports as unknown as WasmCryptoInstance);
} catch (error) {
// if we have a valid supplied asm.js, return that
if (asmFn) {
__bridge.type = 'asm';
__bridge.wasm = asmFn(wbg);
} else {
console.error(`FATAL: Unable to initialize @polkadot/wasm-crypto:: ${(error as Error).message}`);
__bridge.wasm = null;
}
}
}
export function setWasmPromise (wasmBytes: Uint8Array | null, asmFn: AsmCreator | null): Promise<void> {
__bridge.wasmPromise = createPromise(wasmBytes, asmFn);
return __bridge.wasmPromise;
}
export function setWasmPromiseFn (fn: () => Promise<void>): void {
__bridge.wasmPromiseFn = fn;
}
export function initWasm (): Promise<void> {
return setWasmPromise(wasmBytes, null);
}
+27
View File
@@ -0,0 +1,27 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { AsmCreator } from './types';
import { __bridge } from './bridge';
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function setWasmPromise (_wasmBytes: Uint8Array | null, _asmFn: AsmCreator | null): Promise<void> {
__bridge.wasmPromise = Promise.resolve();
return __bridge.wasmPromise;
}
export function setWasmPromiseFn (fn: () => Promise<void>): void {
__bridge.wasmPromiseFn = fn;
}
export function setWasmOnlyPromise (): Promise<void> {
return setWasmPromise(null, null);
}
export function initWasm (): Promise<void> {
return setWasmOnlyPromise();
}
setWasmPromiseFn(initWasm);
+12
View File
@@ -0,0 +1,12 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { asmJsInit } from '@polkadot/wasm-crypto-asmjs';
import { setWasmPromise, setWasmPromiseFn } from './init';
export function initWasm (): Promise<void> {
return setWasmPromise(null, asmJsInit);
}
setWasmPromiseFn(initWasm);
+10
View File
@@ -0,0 +1,10 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { initWasm as baseInitWasm, setWasmPromiseFn } from './init';
export function initWasm (): Promise<void> {
return baseInitWasm();
}
setWasmPromiseFn(initWasm);
+13
View File
@@ -0,0 +1,13 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { asmJsInit } from '@polkadot/wasm-crypto-asmjs';
import { wasmBytes } from '@polkadot/wasm-crypto-wasm';
import { setWasmPromise, setWasmPromiseFn } from './init';
export function initWasm (): Promise<void> {
return setWasmPromise(wasmBytes, asmJsInit);
}
setWasmPromiseFn(initWasm);
-11
View File
@@ -1,11 +0,0 @@
// Copyright 2017-2021 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Be able to import json in TS
// https://stackoverflow.com/questions/49996456/importing-json-file-in-typescript
declare module '*.json' {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const value: any;
export default value;
}
+4 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Use `wee_alloc` as the global allocator.
@@ -14,6 +14,9 @@ pub mod ed25519;
#[path = "rs/hashing.rs"]
pub mod hashing;
#[path = "rs/secp256k1.rs"]
pub mod secp256k1;
#[path = "rs/sr25519.rs"]
pub mod sr25519;
+3 -3
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2017-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Auto-generated by @polkadot/dev, do not edit
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/wasm-crypto', version: '4.0.1' };
export const packageInfo = { name: '@polkadot/wasm-crypto', path: 'auto', type: 'auto', version: '6.0.1' };
+38 -25
View File
@@ -1,4 +1,4 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
use bip39::{Mnemonic, MnemonicType, Language, Seed};
@@ -14,8 +14,11 @@ use wasm_bindgen::prelude::*;
/// Returns the bip 39 phrase
#[wasm_bindgen]
pub fn ext_bip39_generate(words: u32) -> String {
Mnemonic::new(MnemonicType::for_word_count(words as usize).unwrap(), Language::English)
.into_phrase()
match MnemonicType::for_word_count(words as usize) {
Ok(p) => Mnemonic::new(p, Language::English)
.into_phrase(),
_ => panic!("Invalid count provided.")
}
}
/// Create entropy from a bip39 phrase
@@ -25,10 +28,12 @@ pub fn ext_bip39_generate(words: u32) -> String {
/// Returns the entropy
#[wasm_bindgen]
pub fn ext_bip39_to_entropy(phrase: &str) -> Vec<u8> {
Mnemonic::from_phrase(phrase, Language::English)
.unwrap()
.entropy()
.to_vec()
match Mnemonic::from_phrase(phrase, Language::English) {
Ok(m) => m
.entropy()
.to_vec(),
_ => panic!("Invalid phrase provided.")
}
}
/// Create a mini-secret from a bip39 phrase
@@ -38,13 +43,20 @@ pub fn ext_bip39_to_entropy(phrase: &str) -> Vec<u8> {
/// Returns the 32-byte mini-secret via entropy
#[wasm_bindgen]
pub fn ext_bip39_to_mini_secret(phrase: &str, password: &str) -> Vec<u8> {
let salt = format!("mnemonic{}", password);
let mnemonic = Mnemonic::from_phrase(phrase, Language::English).unwrap();
let mut result = [0u8; 64];
match Mnemonic::from_phrase(phrase, Language::English) {
Ok(m) => {
let mut res = [0u8; 64];
let mut seed = vec![];
pbkdf2::<Hmac<Sha512>>(mnemonic.entropy(), salt.as_bytes(), 2048, &mut result);
seed.extend_from_slice(b"mnemonic");
seed.extend_from_slice(password.as_bytes());
result[..32].to_vec()
pbkdf2::<Hmac<Sha512>>(m.entropy(), &seed, 2048, &mut res);
res[..32].to_vec()
},
_ => panic!("Invalid phrase provided.")
}
}
/// Creates a BTC/ETH compatible seed from a bip-39 phrase
@@ -54,11 +66,12 @@ pub fn ext_bip39_to_mini_secret(phrase: &str, password: &str) -> Vec<u8> {
/// Returns a 32-byte seed
#[wasm_bindgen]
pub fn ext_bip39_to_seed(phrase: &str, password: &str) -> Vec<u8> {
let mnemonic = Mnemonic::from_phrase(phrase, Language::English).unwrap();
Seed::new(&mnemonic, password)
.as_bytes()[..32]
.to_vec()
match Mnemonic::from_phrase(phrase, Language::English) {
Ok(m) => Seed::new(&m, password)
.as_bytes()[..32]
.to_vec(),
_ => panic!("Invalid phrase provided.")
}
}
/// Validates a bip39 phrase
@@ -69,8 +82,8 @@ pub fn ext_bip39_to_seed(phrase: &str, password: &str) -> Vec<u8> {
#[wasm_bindgen]
pub fn ext_bip39_validate(phrase: &str) -> bool {
match Mnemonic::validate(phrase, Language::English) {
Err(_) => false,
_ => true
Ok(_) => true,
_ => false
}
}
@@ -83,9 +96,9 @@ pub mod tests {
fn can_bip39_entropy() {
let phrase = "legal winner thank year wave sausage worth useful legal winner thank yellow";
let entropy = hex!("7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f");
let result = ext_bip39_to_entropy(phrase);
let res = ext_bip39_to_entropy(phrase);
assert_eq!(result, entropy);
assert_eq!(res, entropy);
}
#[test]
@@ -93,18 +106,18 @@ pub mod tests {
let phrase = "legal winner thank year wave sausage worth useful legal winner thank yellow";
let password = "Substrate";
let mini = hex!("4313249608fe8ac10fd5886c92c4579007272cb77c21551ee5b8d60b78041685");
let result = ext_bip39_to_mini_secret(phrase, password);
let res = ext_bip39_to_mini_secret(phrase, password);
assert_eq!(result[..], mini[..]);
assert_eq!(res[..], mini[..]);
}
#[test]
fn can_bip39_seed() {
let phrase = "seed sock milk update focus rotate barely fade car face mechanic mercy";
let seed = hex!("3c121e20de068083b49c2315697fb59a2d9e8643c24e5ea7628132c58969a027");
let result = ext_bip39_to_seed(phrase, "");
let res = ext_bip39_to_seed(phrase, "");
assert_eq!(result[..], seed[..]);
assert_eq!(res[..], seed[..]);
}
#[test]
+25 -41
View File
@@ -1,41 +1,20 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
use std::convert::TryFrom;
use ed25519_dalek::{Keypair, PublicKey, SecretKey, Signature, Signer as _, Verifier as _};
use wasm_bindgen::prelude::*;
/// Keypair helper function.
fn create_from_pair(pair: &[u8]) -> Keypair {
match Keypair::from_bytes(pair) {
Ok(pair) => return pair,
Err(_) => panic!("Provided pair is invalid.")
}
}
/// Keypair helper function
fn create_from_parts(pubkey: &[u8], seckey: &[u8]) -> Keypair {
fn new_from_parts(pubkey: &[u8], seckey: &[u8]) -> Keypair {
let mut pair = vec![];
pair.extend_from_slice(seckey);
pair.extend_from_slice(pubkey);
create_from_pair(&pair)
}
/// Keypair helper function.
fn create_from_seed(seed: &[u8]) -> Keypair {
let seckey = SecretKey::from_bytes(seed).unwrap();
let pubkey: PublicKey = (&seckey).into();
create_from_parts(pubkey.as_bytes(), seed)
}
/// PublicKey helper
fn create_public(pubkey: &[u8]) -> PublicKey {
match PublicKey::from_bytes(pubkey) {
Ok(pubkey) => return pubkey,
Err(_) => panic!("Provided public key is invalid.")
match Keypair::from_bytes(&pair) {
Ok(p) => p,
_ => panic!("Provided pair is invalid.")
}
}
@@ -43,13 +22,20 @@ fn create_public(pubkey: &[u8]) -> PublicKey {
///
/// * seed: UIntArray with 32 element
///
/// returned vector is the concatenation of first the private key (64 bytes)
/// followed by the public key (32) bytes.
/// returned vector is the concatenation of first the seed (32 bytes)
/// followed by the public key (32) bytes, as the full secret keys.
#[wasm_bindgen]
pub fn ext_ed_from_seed(seed: &[u8]) -> Vec<u8> {
create_from_seed(seed)
.to_bytes()
.to_vec()
match &SecretKey::from_bytes(seed) {
Ok(s) => {
let pubkey: PublicKey = s.into();
new_from_parts(pubkey.as_bytes(), seed)
.to_bytes()
.to_vec()
},
_ => panic!("Invalid seed provided.")
}
}
/// Sign a message
@@ -64,7 +50,7 @@ pub fn ext_ed_from_seed(seed: &[u8]) -> Vec<u8> {
/// * returned vector is the signature consisting of 64 bytes.
#[wasm_bindgen]
pub fn ext_ed_sign(pubkey: &[u8], seckey: &[u8], message: &[u8]) -> Vec<u8> {
create_from_parts(pubkey, seckey)
new_from_parts(pubkey, seckey)
.sign(message)
.to_bytes()
.to_vec()
@@ -77,14 +63,12 @@ pub fn ext_ed_sign(pubkey: &[u8], seckey: &[u8], message: &[u8]) -> Vec<u8> {
/// * pubkey: UIntArray with 32 element
#[wasm_bindgen]
pub fn ext_ed_verify(signature: &[u8], message: &[u8], pubkey: &[u8]) -> bool {
let signature = match Signature::try_from(signature) {
Ok(signature) => signature,
Err(_) => return false
};
create_public(pubkey)
.verify(message, &signature)
.is_ok()
match (Signature::try_from(signature), PublicKey::from_bytes(pubkey)) {
(Ok(s), Ok(k)) => k
.verify(message, &s)
.is_ok(),
_ => false
}
}
#[cfg(test)]
@@ -100,7 +84,7 @@ pub mod tests {
}
#[test]
fn can_create_keypair() {
fn can_new_keypair() {
let seed = generate_random_seed();
let keypair = ext_ed_from_seed(seed.as_slice());
+131 -32
View File
@@ -1,31 +1,16 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
use blake2_rfc::blake2b::blake2b;
use byteorder::{ByteOrder, LittleEndian};
use hmac::Hmac;
use hmac::{Hmac, Mac};
use pbkdf2::pbkdf2;
use scrypt::{ScryptParams, scrypt};
use sha2::{Digest, Sha512};
use sha2::{Digest, Sha256, Sha512};
use tiny_keccak::{Hasher, Keccak};
use twox_hash::XxHash;
use wasm_bindgen::prelude::*;
/// helper function for a single twox round with a seed
fn create_twox(data: &[u8], seed: u64) -> [u8; 8] {
use ::std::hash::Hasher;
let mut hasher = XxHash::with_seed(seed);
hasher.write(data);
let hash64 = hasher.finish();
let mut result = [0u8; 8];
LittleEndian::write_u64(&mut result, hash64);
result
}
/// blake2b hash for the specified input
///
/// * data: Arbitrary data to be hashed
@@ -41,6 +26,39 @@ pub fn ext_blake2b(data: &[u8], key: &[u8], size: u32) -> Vec<u8> {
.to_vec()
}
/// hmac with sha256
#[wasm_bindgen]
pub fn ext_hmac_sha256(key: &[u8], data: &[u8]) -> Vec<u8> {
match Hmac::<Sha256>::new_varkey(key) {
Ok(mut m) => {
m.input(data);
m
.result()
.code()
.to_vec()
},
_ => panic!("Invalid key provided.")
}
}
/// hmac with sha512
#[wasm_bindgen]
pub fn ext_hmac_sha512(key: &[u8], data: &[u8]) -> Vec<u8> {
match Hmac::<Sha512>::new_varkey(key) {
Ok(mut m) => {
m.input(data);
m
.result()
.code()
.to_vec()
},
_ => panic!("Invalid key provided.")
}
}
/// Create a keccak256 hash for the specified input
///
// * data: Arbitrary data to be hashed
@@ -49,12 +67,28 @@ pub fn ext_blake2b(data: &[u8], key: &[u8], size: u32) -> Vec<u8> {
#[wasm_bindgen]
pub fn ext_keccak256(data: &[u8]) -> Vec<u8> {
let mut keccak = Keccak::v256();
let mut result = [0u8; 32];
let mut res = [0u8; 32];
keccak.update(data);
keccak.finalize(&mut result);
keccak.finalize(&mut res);
result.to_vec()
res.to_vec()
}
/// Create a keccak512 hash for the specified input
///
// * data: Arbitrary data to be hashed
///
/// Returns the hash as a vector
#[wasm_bindgen]
pub fn ext_keccak512(data: &[u8]) -> Vec<u8> {
let mut keccak = Keccak::v512();
let mut res = [0u8; 64];
keccak.update(data);
keccak.finalize(&mut res);
res.to_vec()
}
/// pbkdf2 kdf from an input, salt for the number of specified rounds
@@ -66,12 +100,12 @@ pub fn ext_keccak256(data: &[u8]) -> Vec<u8> {
/// Returns a vector with the hashed result
#[wasm_bindgen]
pub fn ext_pbkdf2(data: &[u8], salt: &[u8], rounds: u32) -> Vec<u8> {
let mut result = [0u8; 64];
let mut res = [0u8; 64];
// we cast to usize here - due to the WASM, we'd rather have u32 inputs
pbkdf2::<Hmac<Sha512>>(data, salt, rounds as usize, &mut result);
pbkdf2::<Hmac::<Sha512>>(data, salt, rounds as usize, &mut res);
result.to_vec()
res.to_vec()
}
/// scrypt kdf from input, salt and config
@@ -85,13 +119,34 @@ pub fn ext_pbkdf2(data: &[u8], salt: &[u8], rounds: u32) -> Vec<u8> {
/// Returns vector with the hashed result
#[wasm_bindgen]
pub fn ext_scrypt(password: &[u8], salt: &[u8], log2_n: u8, r: u32, p: u32) -> Vec<u8> {
let params = ScryptParams::new(log2_n, r, p).unwrap();
let mut result = [0u8; 64];
match ScryptParams::new(log2_n, r, p) {
Ok(p) => {
let mut res = [0u8; 64];
match scrypt(password, salt, &params, &mut result) {
Ok(_) => return result.to_vec(),
Err(_) => panic!("Invalid scrypt hash.")
match scrypt(password, salt, &p, &mut res) {
Ok(_) => res.to_vec(),
_ => panic!("Invalid scrypt hash.")
}
},
_ => panic!("Invalid scrypt params.")
}
}
/// sha256 hash for the specified input
///
/// * data: Arbitrary data to be hashed
///
/// Returns a vector with the hash result
#[wasm_bindgen]
pub fn ext_sha256(data: &[u8]) -> Vec<u8> {
let mut hasher = Sha256::new();
hasher.input(data);
hasher
.result()
.to_vec()
}
/// sha512 hash for the specified input
@@ -118,14 +173,20 @@ pub fn ext_sha512(data: &[u8]) -> Vec<u8> {
/// Returns a vector with the hash result
#[wasm_bindgen]
pub fn ext_twox(data: &[u8], rounds: u32) -> Vec<u8> {
let mut vec = vec![];
use ::std::hash::Hasher;
let mut res = vec![];
let mut buf = [0u8; 8];
for round in 0..rounds {
// we cast to u64 here - due to the WASM, we'd rather have u32 inputs
vec.extend_from_slice(&create_twox(data, round as u64));
let mut hasher = XxHash::with_seed(round as u64);
hasher.write(data);
LittleEndian::write_u64(&mut buf, hasher.finish());
res.extend_from_slice(&buf);
}
vec
res
}
#[cfg(test)]
@@ -154,6 +215,35 @@ pub mod tests {
assert_eq!(hash[..], expected[..]);
}
#[test]
fn can_hmac_sha256() {
let key = b"secret";
let data = b"some message";
let expected = hex!("f28a70b41263840e5c059a0a733336e0957efba87902aa8cca11441d4b0c96d7");
let hash = ext_hmac_sha256(key, data);
assert_eq!(hash[..], expected[..]);
}
#[test]
fn can_hmac_sha512() {
let key = b"secret";
let data = b"some message";
let expected = hex!("295832e97ed77be75a9fa98029497e4a722c4b9a2f21b39d34f1befa931a39ec520fd24711d6f5c03501384ea66b83066a01a82c57a0460f8cd1f471fcce5841");
let hash = ext_hmac_sha512(key, data);
assert_eq!(hash[..], expected[..]);
}
#[test]
fn can_keccak512() {
let data = b"test";
let expected = hex!("1e2e9fc2002b002d75198b7503210c05a1baac4560916a3c6d93bcce3a50d7f00fd395bf1647b9abb8d1afcc9c76c289b0c9383ba386a956da4b38934417789e");
let hash = ext_keccak512(data);
assert_eq!(hash[..], expected[..]);
}
#[test]
fn can_pbkdf2() {
let salt = b"this is a salt";
@@ -174,6 +264,15 @@ pub mod tests {
assert_eq!(hash[..], expected[..]);
}
#[test]
fn can_sha256() {
let data = b"hello world";
let expected = hex!("b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9");
let hash = ext_sha256(data);
assert_eq!(hash[..], expected[..]);
}
#[test]
fn can_sha512() {
let data = b"hello world";
+130
View File
@@ -0,0 +1,130 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
use secp256k1::{ecdsa::{RecoverableSignature, RecoveryId}, Message, PublicKey, SecretKey, SECP256K1};
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn ext_secp_pub_compress(pubkey: &[u8]) -> Vec<u8> {
match PublicKey::from_slice(&pubkey) {
Ok(p) => p
.serialize()
.to_vec(),
_ => panic!("Invalid pubkey provided.")
}
}
#[wasm_bindgen]
pub fn ext_secp_pub_expand(pubkey: &[u8]) -> Vec<u8> {
match PublicKey::from_slice(&pubkey) {
Ok(p) => p
.serialize_uncompressed()
.to_vec(),
_ => panic!("Invalid pubkey provided.")
}
}
#[wasm_bindgen]
pub fn ext_secp_from_seed(seed: &[u8]) -> Vec<u8> {
match SecretKey::from_slice(seed) {
Ok(s) => {
let mut res = vec![];
let pubkey = PublicKey::from_secret_key(SECP256K1, &s);
res.extend_from_slice(&s.serialize_secret());
res.extend_from_slice(&pubkey.serialize());
res
},
_ => panic!("Invalid seed provided.")
}
}
#[wasm_bindgen]
pub fn ext_secp_recover(hash: &[u8], sig: &[u8], rec: i32) -> Vec<u8> {
match RecoveryId::from_i32(rec) {
Ok(r) => match (Message::from_slice(hash), RecoverableSignature::from_compact(&sig, r)) {
(Ok(m), Ok(s)) => match s.recover(&m) {
Ok(k) => k
.serialize()
.to_vec(),
_ => panic!("Unable to recover.")
},
_ => panic!("Invalid signature provided.")
},
_ => panic!("Invalid recovery data provided.")
}
}
#[wasm_bindgen]
pub fn ext_secp_sign(hash: &[u8], seckey: &[u8]) -> Vec<u8> {
match (Message::from_slice(hash), SecretKey::from_slice(seckey)) {
(Ok(m), Ok(s)) => {
let mut res = vec![];
let (rec, sig) = SECP256K1
.sign_ecdsa_recoverable(&m, &s)
.serialize_compact();
res.extend_from_slice(&sig);
res.push(rec.to_i32() as u8);
res
},
_ => panic!("Invalid message or secret provided.")
}
}
#[cfg(test)]
pub mod tests {
use hex_literal::hex;
use super::*;
#[test]
fn can_create_pair() {
let seckey = hex!("4380de832af797688026ce24f85204d508243f201650c1a134929e5458b7fbae");
let expected = hex!("4380de832af797688026ce24f85204d508243f201650c1a134929e5458b7fbae03fd8c74f795ced92064b86191cb2772b1e3a0947740aa0a5a6e379592471fd85b");
let res = ext_secp_from_seed(&seckey);
assert_eq!(res[..], expected[..]);
}
#[test]
fn can_pub_compress_full() {
let pubkey = hex!("04b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb1307763fe926c273235fd979a134076d00fd1683cbd35868cb485d4a3a640e52184af");
let expected = hex!("03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077");
let res = ext_secp_pub_compress(&pubkey);
assert_eq!(res[..], expected[..]);
}
#[test]
fn can_pub_expand_comp() {
let pubkey = hex!("03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077");
let expected = hex!("04b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb1307763fe926c273235fd979a134076d00fd1683cbd35868cb485d4a3a640e52184af");
let res = ext_secp_pub_expand(&pubkey);
assert_eq!(res[..], expected[..]);
}
#[test]
fn can_recover() {
let expected = hex!("028d13da15a02f3a70677339d51b14177ee9b49657662b35e56a9d9dee17db1d30");
let sig = hex!("7505f2880114da51b3f5d535f8687953c0ab9af4ab81e592eaebebf53b728d2b6dfd9b5bcd70fee412b1f31360e7c2774009305cb84fc50c1d0ff8034dfa5fff");
let msg = hex!("a30b64ce1eedf409c8afb801d72c05234e64849ea538c15dd3c8cf4ffcf166c9");
let res = ext_secp_recover(&msg, &sig, 0);
assert_eq!(res[..], expected[..]);
}
#[test]
fn can_sign() {
// JS expectation - doesn't match?
// let expected = hex!("df92f73d9f060cefacf187b5414491cb992998ace017fa48839b5cda3e264ba8c4efa521361678d9b8582744d77aa4b8d886d7380b7808a683174afad9c4700300");
let expected = hex!("df92f73d9f060cefacf187b5414491cb992998ace017fa48839b5cda3e264ba83b105adec9e9872647a7d8bb28855b45e22805aea3d097953cbb1391f671d13e01");
let seckey = hex!("4380de832af797688026ce24f85204d508243f201650c1a134929e5458b7fbae");
let msg = hex!("68c731589a583d08b70861683b59ce3dd56284cb2f0da5b6cd83e6641dac3aab");
let res = ext_secp_sign(&msg, &seckey);
assert_eq!(res[..], expected[..]);
}
}
+128 -42
View File
@@ -1,4 +1,4 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Copyright 2019 Paritytech via https://github.com/paritytech/schnorrkel-js/
@@ -7,6 +7,7 @@
// which was adpated from the initial https://github.com/paritytech/schnorrkel-js/
// forked at commit eff430ddc3090f56317c80654208b8298ef7ab3f
use curve25519_dalek::scalar::Scalar;
use schnorrkel::{
ExpansionMode, Keypair, MiniSecretKey, PublicKey, SecretKey, Signature,
derive::{Derivation, ChainCode, CHAIN_CODE_LENGTH},
@@ -14,10 +15,10 @@ use schnorrkel::{
use wasm_bindgen::prelude::*;
// We must make sure that this is the same as declared in the substrate source code.
const SIGNING_CTX: &'static [u8] = b"substrate";
const CTX: &'static [u8] = b"substrate";
/// ChainCode construction helper
fn create_cc(data: &[u8]) -> ChainCode {
fn new_cc(data: &[u8]) -> ChainCode {
let mut cc = [0u8; CHAIN_CODE_LENGTH];
cc.copy_from_slice(&data);
@@ -33,13 +34,14 @@ fn create_cc(data: &[u8]) -> ChainCode {
/// returned vector the derived keypair as a array of 96 bytes
#[wasm_bindgen]
pub fn ext_sr_derive_keypair_hard(pair: &[u8], cc: &[u8]) -> Vec<u8> {
Keypair::from_half_ed25519_bytes(pair)
.unwrap()
.secret
.hard_derive_mini_secret_key(Some(create_cc(cc)), &[]).0
.expand_to_keypair(ExpansionMode::Ed25519)
.to_half_ed25519_bytes()
.to_vec()
match Keypair::from_half_ed25519_bytes(pair) {
Ok(p) => p.secret
.hard_derive_mini_secret_key(Some(new_cc(cc)), &[]).0
.expand_to_keypair(ExpansionMode::Ed25519)
.to_half_ed25519_bytes()
.to_vec(),
_ => panic!("Invalid pair provided.")
}
}
/// Perform a derivation on a secret
@@ -50,11 +52,13 @@ pub fn ext_sr_derive_keypair_hard(pair: &[u8], cc: &[u8]) -> Vec<u8> {
/// returned vector the derived keypair as a array of 96 bytes
#[wasm_bindgen]
pub fn ext_sr_derive_keypair_soft(pair: &[u8], cc: &[u8]) -> Vec<u8> {
Keypair::from_half_ed25519_bytes(pair)
.unwrap()
.derived_key_simple(create_cc(cc), &[]).0
.to_half_ed25519_bytes()
.to_vec()
match Keypair::from_half_ed25519_bytes(pair) {
Ok(p) => p
.derived_key_simple(new_cc(cc), &[]).0
.to_half_ed25519_bytes()
.to_vec(),
_ => panic!("Invalid pair provided.")
}
}
/// Perform a derivation on a publicKey
@@ -65,11 +69,13 @@ pub fn ext_sr_derive_keypair_soft(pair: &[u8], cc: &[u8]) -> Vec<u8> {
/// returned vector is the derived publicKey as a array of 32 bytes
#[wasm_bindgen]
pub fn ext_sr_derive_public_soft(pubkey: &[u8], cc: &[u8]) -> Vec<u8> {
PublicKey::from_bytes(pubkey)
.unwrap()
.derived_key_simple(create_cc(cc), &[]).0
.to_bytes()
.to_vec()
match PublicKey::from_bytes(pubkey) {
Ok(k) => k
.derived_key_simple(new_cc(cc), &[]).0
.to_bytes()
.to_vec(),
_ => panic!("Invalid pubkey provided.")
}
}
/// Generate a key pair.
@@ -80,11 +86,13 @@ pub fn ext_sr_derive_public_soft(pubkey: &[u8], cc: &[u8]) -> Vec<u8> {
/// followed by the public key (32) bytes.
#[wasm_bindgen]
pub fn ext_sr_from_seed(seed: &[u8]) -> Vec<u8> {
MiniSecretKey::from_bytes(seed)
.unwrap()
.expand_to_keypair(ExpansionMode::Ed25519)
.to_half_ed25519_bytes()
.to_vec()
match MiniSecretKey::from_bytes(seed) {
Ok(s) => s
.expand_to_keypair(ExpansionMode::Ed25519)
.to_half_ed25519_bytes()
.to_vec(),
_ => panic!("Invalid seed provided.")
}
}
/// Generate a key pair from a known pair. (This is not exposed via WASM)
@@ -94,10 +102,12 @@ pub fn ext_sr_from_seed(seed: &[u8]) -> Vec<u8> {
/// returned vector is the concatenation of first the private key (64 bytes)
/// followed by the public key (32) bytes.
pub fn ext_sr_from_pair(pair: &[u8]) -> Vec<u8> {
Keypair::from_half_ed25519_bytes(pair)
.unwrap()
.to_half_ed25519_bytes()
.to_vec()
match Keypair::from_half_ed25519_bytes(pair) {
Ok(p) => p
.to_half_ed25519_bytes()
.to_vec(),
_ => panic!("Invalid pair provided.")
}
}
/// Sign a message
@@ -112,11 +122,13 @@ pub fn ext_sr_from_pair(pair: &[u8]) -> Vec<u8> {
/// * returned vector is the signature consisting of 64 bytes.
#[wasm_bindgen]
pub fn ext_sr_sign(pubkey: &[u8], secret: &[u8], message: &[u8]) -> Vec<u8> {
SecretKey::from_ed25519_bytes(secret)
.unwrap()
.sign_simple(SIGNING_CTX, message, &PublicKey::from_bytes(pubkey).unwrap())
.to_bytes()
.to_vec()
match (SecretKey::from_ed25519_bytes(secret), PublicKey::from_bytes(pubkey)) {
(Ok(s), Ok(k)) => s
.sign_simple(CTX, message, &k)
.to_bytes()
.to_vec(),
_ => panic!("Invalid secret or pubkey provided.")
}
}
/// Verify a message and its corresponding against a public key;
@@ -126,11 +138,37 @@ pub fn ext_sr_sign(pubkey: &[u8], secret: &[u8], message: &[u8]) -> Vec<u8> {
/// * pubkey: UIntArray with 32 element
#[wasm_bindgen]
pub fn ext_sr_verify(signature: &[u8], message: &[u8], pubkey: &[u8]) -> bool {
match Signature::from_bytes(signature) {
Ok(signature) => PublicKey::from_bytes(pubkey).unwrap()
.verify_simple(SIGNING_CTX, message, &signature)
match (Signature::from_bytes(signature), PublicKey::from_bytes(pubkey)) {
(Ok(s), Ok(k)) => k
.verify_simple(CTX, message, &s)
.is_ok(),
Err(_) => false
_ => false
}
}
/// Key agreement between other's public key and self secret key.
///
/// * pubkey: UIntArray with 32 element
/// * secret: UIntArray with 64 element
///
/// * returned vector is the generated secret of 32 bytes.
#[wasm_bindgen]
pub fn ext_sr_agree(pubkey: &[u8], secret: &[u8]) -> Vec<u8> {
match SecretKey::from_ed25519_bytes(secret) {
Ok(s) => {
// The first 32 bytes holds the canonical private key
let mut key = [0u8; 32];
key.copy_from_slice(&s.to_bytes()[0..32]);
match (Scalar::from_canonical_bytes(key), PublicKey::from_bytes(pubkey)) {
(Some(n), Ok(k)) => (&n * k.as_point())
.compress().0
.to_vec(),
_ => panic!("Invalid scalar or pubkey provided.")
}
},
_ => panic!("Invalid secret provided.")
}
}
@@ -139,16 +177,16 @@ pub mod tests {
extern crate rand;
extern crate schnorrkel;
use hex_literal::hex;
use super::*;
use hex_literal::hex;
use schnorrkel::{SIGNATURE_LENGTH, KEYPAIR_LENGTH, SECRET_KEY_LENGTH};
fn generate_random_seed() -> Vec<u8> {
(0..32).map(|_| rand::random::<u8>() ).collect()
(0..32).map(|_| rand::random::<u8>()).collect()
}
#[test]
fn can_create_keypair() {
fn can_new_keypair() {
let seed = generate_random_seed();
let keypair = ext_sr_from_seed(seed.as_slice());
@@ -166,7 +204,7 @@ pub mod tests {
}
#[test]
fn create_pair_from_known_pair() {
fn new_pair_from_known_pair() {
let input = hex!("28b0ae221c6bb06856b287f60d7ea0d98552ea5a16db16956849aa371db3eb51fd190cce74df356432b410bd64682309d6dedb27c76845daf388557cbac3ca3446ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a");
let keypair = ext_sr_from_pair(&input);
let expected = hex!("46ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a");
@@ -210,6 +248,26 @@ pub mod tests {
assert!(is_valid);
}
#[test]
fn can_verify_known_wrapped_message() {
let message = b"<Bytes>message to sign</Bytes>";
let public = hex!("f84d048da2ddae2d9d8fd6763f469566e8817a26114f39408de15547f6d47805");
let signature = hex!("48ce2c90e08651adfc8ecef84e916f6d1bb51ebebd16150ee12df247841a5437951ea0f9d632ca165e6ab391532e75e701be6a1caa88c8a6bcca3511f55b4183");
let is_valid = ext_sr_verify(&signature, message, &public);
assert!(is_valid);
}
#[test]
fn can_verify_known_wrapped_message_fail() {
let message = b"message to sign";
let public = hex!("f84d048da2ddae2d9d8fd6763f469566e8817a26114f39408de15547f6d47805");
let signature = hex!("48ce2c90e08651adfc8ecef84e916f6d1bb51ebebd16150ee12df247841a5437951ea0f9d632ca165e6ab391532e75e701be6a1caa88c8a6bcca3511f55b4183");
let is_valid = ext_sr_verify(&signature, message, &public);
assert!(!is_valid);
}
#[test]
fn soft_derives_pair() {
let cc = hex!("0c666f6f00000000000000000000000000000000000000000000000000000000"); // foo
@@ -243,4 +301,32 @@ pub mod tests {
assert_eq!(public, expected);
}
#[test]
fn key_agreement() {
let self_seed = hex!("98b3d305d5a5eace562387e47e59badd4d77e3f72cabfb10a60f8a197059f0a8");
let other_seed = hex!("9732eea001851ff862d949a1699c9971f3a26edbede2ad7922cbbe9a0701f366");
let expected = hex!("b03a0b198c34c16f35cae933d88b16341b4cef3e84e851f20e664c6a30527f4e");
let self_pair = ext_sr_from_seed(&self_seed);
let self_sk = &self_pair[0..SECRET_KEY_LENGTH];
let self_pk = &self_pair[SECRET_KEY_LENGTH..KEYPAIR_LENGTH];
let other_pair = ext_sr_from_seed(&other_seed);
let other_sk = &other_pair[0..SECRET_KEY_LENGTH];
let other_pk = &other_pair[SECRET_KEY_LENGTH..KEYPAIR_LENGTH];
assert_eq!(ext_sr_agree(self_pk, other_sk), expected);
assert_eq!(ext_sr_agree(other_pk, self_sk), expected);
let seed = generate_random_seed();
let self_pair = ext_sr_from_seed(seed.as_slice());
let self_sk = &self_pair[0..SECRET_KEY_LENGTH];
let self_pk = &self_pair[SECRET_KEY_LENGTH..KEYPAIR_LENGTH];
let seed = generate_random_seed();
let other_pair = ext_sr_from_seed(seed.as_slice());
let other_sk = &other_pair[0..SECRET_KEY_LENGTH];
let other_pk = &other_pair[SECRET_KEY_LENGTH..KEYPAIR_LENGTH];
assert_eq!(ext_sr_agree(self_pk, other_sk), ext_sr_agree(other_pk, self_sk));
}
}
+38 -47
View File
@@ -1,4 +1,4 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Copyright 2019 Paritytech via https://github.com/paritytech/schnorrkel-js/
@@ -12,21 +12,21 @@ use schnorrkel::{signing_context, vrf::{VRFOutput, VRFProof}, PublicKey, SecretK
use wasm_bindgen::prelude::*;
/// Size of VRF output, bytes
pub const VRF_OUTPUT_SIZE: usize = 32;
pub const OUTPUT_SIZE: usize = 32;
/// Size of VRF proof, bytes
pub const VRF_PROOF_SIZE: usize = 64;
pub const PROOF_SIZE: usize = 64;
/// Size of VRF raw output, bytes
pub const VRF_RAW_OUTPUT_SIZE: usize = 16;
pub const RAW_OUTPUT_SIZE: usize = 16;
/// Size of VRF limit, bytes
pub const VRF_THRESHOLD_SIZE: usize = 16;
pub const THRESHOLD_SIZE: usize = 16;
/// Size of the final full output
pub const VRF_RESULT_SIZE: usize = VRF_OUTPUT_SIZE + VRF_PROOF_SIZE;
pub const RESULT_SIZE: usize = OUTPUT_SIZE + PROOF_SIZE;
pub fn create_transcript(extra: &[u8]) -> Transcript {
pub fn new_transcript(extra: &[u8]) -> Transcript {
let mut transcript = Transcript::new(b"VRF");
// if is important that we don't append when empty, since the
@@ -38,7 +38,7 @@ pub fn create_transcript(extra: &[u8]) -> Transcript {
transcript
}
// We don't use the non-extra vrf_sign and vrf_verify internally since in sr25519 they only wrap -
// We don't use the non-extra sign and verify internally since in sr25519 they only wrap -
//
// https://github.com/w3f/schnorrkel/blob/8fa2ad3e9fbf0b652c724df6a87a4b3c5500f759/src/vrf.rs#L660
@@ -53,15 +53,21 @@ pub fn create_transcript(extra: &[u8]) -> Transcript {
///
/// * returned vector is the 32-byte output (signature) and 64-byte proof.
#[wasm_bindgen]
pub fn ext_vrf_sign(secret: &[u8], context: &[u8], message: &[u8], extra: &[u8]) -> Vec<u8> {
let keypair = SecretKey::from_ed25519_bytes(secret).unwrap().to_keypair();
let transcript = create_transcript(extra);
let (io, proof, _) = keypair.vrf_sign_extra(signing_context(context).bytes(message), transcript);
let mut result: [u8; VRF_RESULT_SIZE] = [0u8; VRF_RESULT_SIZE];
pub fn ext_vrf_sign(secret: &[u8], ctx: &[u8], msg: &[u8], extra: &[u8]) -> Vec<u8> {
match SecretKey::from_ed25519_bytes(secret) {
Ok(s) => {
let mut res: [u8; RESULT_SIZE] = [0u8; RESULT_SIZE];
let (io, proof, _) = s
.to_keypair()
.vrf_sign_extra(signing_context(ctx).bytes(msg), new_transcript(extra));
result[..VRF_OUTPUT_SIZE].copy_from_slice(io.as_output_bytes());
result[VRF_OUTPUT_SIZE..].copy_from_slice(&proof.to_bytes());
result.to_vec()
res[..OUTPUT_SIZE].copy_from_slice(io.as_output_bytes());
res[OUTPUT_SIZE..].copy_from_slice(&proof.to_bytes());
res.to_vec()
},
_ => panic!("Invalid secret provided.")
}
}
/// Verify VRF proof for one single input transcript, and an extra message transcript,
@@ -71,24 +77,13 @@ pub fn ext_vrf_sign(secret: &[u8], context: &[u8], message: &[u8], extra: &[u8])
/// * context: Arbitrary length UIntArray
/// * message: Arbitrary length UIntArray
/// * extra: Arbitrary length UIntArray
/// * out_and_proof: 96-byte output & proof array from the ext_vrf_sign function.
/// * out_and_proof: 96-byte output & proof array from the ext_sign function.
#[wasm_bindgen]
pub fn ext_vrf_verify(pubkey: &[u8], context: &[u8], message: &[u8], extra: &[u8], out_and_proof: &[u8]) -> bool {
match (
PublicKey::from_bytes(pubkey),
VRFOutput::from_bytes(&out_and_proof[..VRF_OUTPUT_SIZE]),
VRFProof::from_bytes(&out_and_proof[VRF_OUTPUT_SIZE..VRF_RESULT_SIZE])
) {
(Ok(public), Ok(out), Ok(proof)) => {
public
.vrf_verify_extra(
signing_context(context).bytes(message),
&out,
&proof,
create_transcript(extra)
)
.is_ok()
}
pub fn ext_vrf_verify(pubkey: &[u8], ctx: &[u8], msg: &[u8], extra: &[u8], out: &[u8]) -> bool {
match (PublicKey::from_bytes(pubkey), VRFOutput::from_bytes(&out[..OUTPUT_SIZE]), VRFProof::from_bytes(&out[OUTPUT_SIZE..RESULT_SIZE])) {
(Ok(k), Ok(o), Ok(p)) => k
.vrf_verify_extra(signing_context(ctx).bytes(msg), &o, &p, new_transcript(extra))
.is_ok(),
_ => false,
}
}
@@ -107,7 +102,7 @@ pub mod tests {
}
#[test]
fn vrf_sign_extra_and_verify() {
fn sign_extra_and_verify() {
let seed = generate_random_seed();
let keypair = ext_sr_from_seed(seed.as_slice());
let private = &keypair[0..SECRET_KEY_LENGTH];
@@ -116,23 +111,19 @@ pub mod tests {
let message = b"this is a message";
let extra = b"this is an extra";
// Perform multiple vrf_sign_extra calls w/ same context, message, extra args
let out_and_proof1 = ext_vrf_sign(private, context, message, extra);
let out_and_proof2 = ext_vrf_sign(private, context, message, extra);
// Perform multiple sign_extra calls w/ same context, message, extra args
let out1 = ext_vrf_sign(private, context, message, extra);
let out2 = ext_vrf_sign(private, context, message, extra);
// Basic size checks
assert!(out_and_proof1.len() == VRF_RESULT_SIZE);
assert!(out_and_proof2.len() == VRF_RESULT_SIZE);
assert!(out1.len() == RESULT_SIZE);
assert!(out2.len() == RESULT_SIZE);
// Given the same context, message & extra, output should be deterministic
let out1 = &out_and_proof1[..VRF_OUTPUT_SIZE];
let out2 = &out_and_proof2[..VRF_OUTPUT_SIZE];
assert_eq!(out1, out2);
assert_eq!(&out1[..OUTPUT_SIZE], &out2[..OUTPUT_SIZE]);
// But proof is non-deterministic
let proof1 = &out_and_proof1[VRF_OUTPUT_SIZE..];
let proof2 = &out_and_proof2[VRF_OUTPUT_SIZE..];
assert_ne!(proof1, proof2);
assert_ne!(&out1[OUTPUT_SIZE..], &out2[OUTPUT_SIZE..]);
// VRF outputs can verified w/ original context, message & extra args
assert!(ext_vrf_verify(
@@ -140,14 +131,14 @@ pub mod tests {
context,
message,
extra,
&out_and_proof1
&out1
));
assert!(ext_vrf_verify(
public,
context,
message,
extra,
&out_and_proof2
&out2
));
}
}
+71 -23
View File
@@ -1,4 +1,4 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint-disable camelcase */
@@ -7,33 +7,81 @@
export interface WasmCryptoInstance {
memory: WebAssembly.Memory;
// wbindgen functions (required and used internally)
__wbindgen_free(a: number, b: number): void;
__wbindgen_malloc(a: number): number;
__wbindgen_realloc(a: number, b: number, c: number): number;
__wbindgen_exn_store(a: number): void;
ext_bip39_generate(a: number, b: number): void;
ext_bip39_to_entropy(a: number, b: number, c: number): void;
ext_bip39_to_mini_secret(a: number, b: number, c: number, d: number, e: number): void;
ext_bip39_to_seed(a: number, b: number, c: number, d: number, e: number): void;
ext_bip39_validate(a: number, b: number): number;
ext_ed_from_seed(a: number, b: number, c: number): void;
ext_ed_sign(a: number, b: number, c: number, d: number, e: number, f: number, g: number): void;
ext_ed_verify(a: number, b: number, c: number, d: number, e: number, f: number): number;
ext_blake2b(a: number, b: number, c: number, d: number, e: number, f: number): void;
ext_keccak256(a: number, b: number, c: number): void;
ext_pbkdf2(a: number, b: number, c: number, d: number, e: number, f: number): void;
ext_scrypt(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number): void;
ext_sha512(a: number, b: number, c: number): void;
ext_twox(a: number, b: number, c: number, d: number): void;
ext_sr_derive_keypair_hard(a: number, b: number, c: number, d: number, e: number): void;
ext_sr_derive_keypair_soft(a: number, b: number, c: number, d: number, e: number): void;
ext_sr_derive_public_soft(a: number, b: number, c: number, d: number, e: number): void;
ext_sr_from_seed(a: number, b: number, c: number): void;
ext_sr_sign(a: number, b: number, c: number, d: number, e: number, f: number, g: number): void;
ext_sr_verify(a: number, b: number, c: number, d: number, e: number, f: number): number;
ext_vrf_sign(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number): void;
ext_vrf_verify(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number): number;
// exposed functions
ext_bip39_generate(resLen: 8, words: number): void;
ext_bip39_to_entropy(resLen: 8, ptrPhrase: number, lenPhrase: number): void;
ext_bip39_to_mini_secret(resLen: 8, ptrPhrase: number, lenPhrase: number, ptrPass: number, lenPass: number): void;
ext_bip39_to_seed(resLen: 8, ptrPhrase: number, lenPhrase: number, ptrPass: number, lenPass: number): void;
ext_bip39_validate(ptrPhrase: number, lenPhrase: number): number;
ext_ed_from_seed(resLen: 8, ptrSeed: number, lenSeed: number): void;
ext_ed_sign(resLen: 8, ptrPub: number, lenPub: number, ptrSec: number, lenSec: number, ptrMsg: number, lenMsg: number): void;
ext_ed_verify(ptrSig: number, lenSig: number, ptrMsg: number, lenMsg: number, ptrPub: number, lenPub: number): number;
ext_blake2b(resLen: 8, ptrData: number, lenData: number, ptrKey: number, lenKey: number, size: number): void;
ext_hmac_sha256(resLen: 8, ptrKey: number, lenKey: number, ptrData: number, lenData: number): void;
ext_hmac_sha512(resLen: 8, ptrKey: number, lenKey: number, ptrData: number, lenData: number): void;
ext_keccak256(resLen: 8, ptrData: number, lenData: number): void;
ext_keccak512(resLen: 8, ptrData: number, lenData: number): void;
ext_pbkdf2(resLen: 8, ptrData: number, lenData: number, ptrSalt: number, lenSalt: number, rounds: number): void;
ext_scrypt(resLen: 8, ptrPass: number, lenPass: number, ptrSalt: number, lenSalt: number, log2n: number, r: number, p: number): void;
ext_sha256(resLen: 8, ptrData: number, lenData: number): void;
ext_sha512(resLen: 8, ptrData: number, lenData: number): void;
ext_twox(resLen: 8, ptrData: number, lenData: number, rounds: number): void;
ext_secp_from_seed(reslen: 8, ptrSec: number, lenSec: number): void;
ext_secp_pub_compress(resLen: 8, ptrPub: number, lenPub: number): void;
ext_secp_pub_expand(resLen: 8, ptrPub: number, lenPub: number): void;
ext_secp_recover(resLen: 8, ptrMsgHash: number, lenMsgHash: number, ptrSig: number, lenSig: number, recovery: number): void;
ext_secp_sign(resLen: 8, ptrMsgHash: number, lenMsgHash: number, ptrSec: number, lenSec: number): void;
ext_sr_derive_keypair_hard(resLen: 8, ptrPair: number, lenPair: number, ptrCc: number, lenCc: number): void;
ext_sr_derive_keypair_soft(resLen: 8, ptrPub: number, lenPub: number, ptrCc: number, lenCc: number): void;
ext_sr_derive_public_soft(resLen: 8, ptrPub: number, lenPub: number, ptrCc: number, lenCc: number): void;
ext_sr_from_seed(resLen: 8, ptrSeed: number, lenSeed: number): void;
ext_sr_sign(resLen: 8, ptrPub: number, lenPub: number, ptrSec: number, lenSec: number, ptrMsg: number, lenMsg: number): void;
ext_sr_verify(ptrSig: number, lenSig: number, ptrMsg: number, lenMsg: number, ptrPub: number, lenPub: number): number;
ext_sr_agree(resLen: 8, ptrPub: number, lenPub: number, ptrSec: number, lenSec: number): void;
ext_vrf_sign(resLen: 8, ptrSec: number, lenSec: number, ptrCtx: number, lenCtx: number, ptrMsg: number, lenMsg: number, ptrExtra: number, lenExtra: number): void;
ext_vrf_verify(ptrPub: number, lenPub: number, ptrCtx: number, lenCtx: number, ptrMsg: number, lenMsg: number, ptrExtra: number, lenExtra: number, ptrProof: number, lenProof: number): number;
}
export type AsmCreator = (wbg: Record<string, WebAssembly.ImportValue>) => WasmCryptoInstance;
+11 -5
View File
@@ -1,8 +1,11 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const rootIncl = ['@polkadot/wasm-crypto-asmjs', '@polkadot/wasm-crypto-wasm'];
const detcIncl = rootIncl.map((p) => `${p}/packageInfo`);
const rootIncl = ['@polkadot/wasm-crypto', '@polkadot/wasm-crypto-asmjs', '@polkadot/wasm-crypto-wasm'];
const detcIncl = [
...rootIncl.map((p) => `${p}/initOnlyAsm`),
...rootIncl.map((p) => `${p}/cjs/packageInfo`)
];
require('override-require')(
(request) =>
@@ -10,6 +13,9 @@ require('override-require')(
detcIncl.some((p) => request.endsWith(p)),
(request) =>
rootIncl.some((p) => request.endsWith(p))
? require(`${rootIncl.find((p) => request.endsWith(p))}/build/data.cjs`)
: require(`${detcIncl.find((p) => request.endsWith(p)).replace('packageInfo', 'build/packageInfo.cjs')}`)
? require(`${rootIncl.find((p) => request.endsWith(p))}/build/cjs`)
: require(`${detcIncl.find((p) => request.endsWith(p))
.replace('initOnlyAsm', 'build/cjs/initOnlyAsm.js')
.replace('/cjs/packageInfo', '/build/cjs/packageInfo.js')
}`)
);
+13 -15
View File
@@ -1,11 +1,9 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint-disable camelcase */
const { assert, u8aToHex } = require('@polkadot/util');
function bip39_generate (wasm) {
function bip39Generate (wasm) {
const res = wasm.bip39Generate(21);
console.log('\tPHR', res);
@@ -13,7 +11,7 @@ function bip39_generate (wasm) {
assert(res.split(' ').length === 21, 'ERROR: Invalid bip39 Phase length');
}
function bip39_generate_subsequent (wasm) {
function bip39GenerateSubsequent (wasm) {
const val1 = wasm.bip39Generate(24);
const val2 = wasm.bip39Generate(24);
@@ -23,7 +21,7 @@ function bip39_generate_subsequent (wasm) {
assert(val1 !== val2, 'ERROR: Subsequent mnemonics are the same');
}
function bip39_validate (wasm) {
function bip39Validate (wasm) {
const res = wasm.bip39Validate(wasm.bip39Generate(12));
console.log('\tVAL', res);
@@ -31,7 +29,7 @@ function bip39_validate (wasm) {
assert(res, 'ERROR: Invalid bip39 validation');
}
function bip39_toEntropy (wasm) {
function bip39ToEntropy (wasm) {
const res = u8aToHex(wasm.bip39ToEntropy('legal winner thank year wave sausage worth useful legal winner thank yellow'));
console.log('\tENT', res);
@@ -39,7 +37,7 @@ function bip39_toEntropy (wasm) {
assert(res === '0x7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f', 'ERROR: Invalid bip39 entropy');
}
function bip39_toMiniSecret (wasm) {
function bip39ToMiniSecret (wasm) {
const res = u8aToHex(wasm.bip39ToMiniSecret('legal winner thank year wave sausage worth useful legal winner thank yellow', 'Substrate'));
console.log('\tMIN', res);
@@ -47,7 +45,7 @@ function bip39_toMiniSecret (wasm) {
assert(res === '0x4313249608fe8ac10fd5886c92c4579007272cb77c21551ee5b8d60b78041685', 'ERROR: Invalid bip39 mini secret');
}
function bip39_toSeed (wasm) {
function bip39ToSeed (wasm) {
const res = u8aToHex(wasm.bip39ToSeed('seed sock milk update focus rotate barely fade car face mechanic mercy', ''));
console.log('\tSEE', res);
@@ -56,10 +54,10 @@ function bip39_toSeed (wasm) {
}
module.exports = {
bip39_generate,
bip39_generate_subsequent,
bip39_toEntropy,
bip39_toMiniSecret,
bip39_toSeed,
bip39_validate
bip39Generate,
bip39GenerateSubsequent,
bip39ToEntropy,
bip39ToMiniSecret,
bip39ToSeed,
bip39Validate
};
+9 -11
View File
@@ -1,8 +1,6 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint-disable camelcase */
const crypto = require('crypto');
const { assert, hexToU8a, stringToU8a, u8aToHex } = require('@polkadot/util');
@@ -14,7 +12,7 @@ function randomPair (wasm) {
return extractKeys(wasm.ed25519KeypairFromSeed(crypto.randomBytes(32)));
}
function ed25519_pairFromSeed (wasm) {
function ed25519PairFromSeed (wasm) {
const [pair, pk, sk] = extractKeys(wasm.ed25519KeypairFromSeed(stringToU8a('12345678901234567890123456789012')));
console.log('\tSEC', u8aToHex(sk));
@@ -23,7 +21,7 @@ function ed25519_pairFromSeed (wasm) {
assert(u8aToHex(pair) === '0x31323334353637383930313233343536373839303132333435363738393031322f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee', 'ERROR: pairFromSeed() does not match');
}
function ed25519_signAndVerify (wasm) {
function ed25519SignAndVerify (wasm) {
const [, pk, sk] = randomPair(wasm);
const signature = wasm.ed25519Sign(pk, sk, stringToU8a('this is a message'));
const isValid = wasm.ed25519Verify(signature, stringToU8a('this is a message'), pk);
@@ -34,7 +32,7 @@ function ed25519_signAndVerify (wasm) {
assert(isValid, 'ERROR: Unable to verify signature');
}
function ed25519_verifyExisting (wasm) {
function ed25519VerifyExisting (wasm) {
const isValid = wasm.ed25519Verify(hexToU8a('0x90588f3f512496f2dd40571d162e8182860081c74e2085316e7c4396918f07da412ee029978e4dd714057fe973bd9e7d645148bf7b66680d67c93227cde95202'), stringToU8a('this is a message'), hexToU8a('0x2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee'));
console.log('\tRES', isValid);
@@ -42,7 +40,7 @@ function ed25519_verifyExisting (wasm) {
assert(isValid, 'ERROR: Unable to verify signature');
}
function ed25519_benchmark (wasm) {
function ed25519Benchmark (wasm) {
const MESSAGE = stringToU8a('this is a message');
for (let i = 0; i < 256; i++) {
@@ -53,8 +51,8 @@ function ed25519_benchmark (wasm) {
}
module.exports = {
ed25519_benchmark,
ed25519_pairFromSeed,
ed25519_signAndVerify,
ed25519_verifyExisting
ed25519Benchmark,
ed25519PairFromSeed,
ed25519SignAndVerify,
ed25519VerifyExisting
};
+37 -3
View File
@@ -1,8 +1,6 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint-disable camelcase */
const { assert, stringToU8a, u8aToHex } = require('@polkadot/util');
function blake2bHash (wasm) {
@@ -13,6 +11,22 @@ function blake2bHash (wasm) {
assert(hash === '0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923', 'ERROR: blake2bHash does not match');
}
function hmacSha256 (wasm) {
const hash = u8aToHex(wasm.hmacSha256(stringToU8a('secret'), stringToU8a('some message')));
console.log('\tRES', hash);
assert(hash === '0xf28a70b41263840e5c059a0a733336e0957efba87902aa8cca11441d4b0c96d7', 'ERROR: hmacSha256 does not match');
}
function hmacSha512 (wasm) {
const hash = u8aToHex(wasm.hmacSha512(stringToU8a('secret'), stringToU8a('some message')));
console.log('\tRES', hash);
assert(hash === '0x295832e97ed77be75a9fa98029497e4a722c4b9a2f21b39d34f1befa931a39ec520fd24711d6f5c03501384ea66b83066a01a82c57a0460f8cd1f471fcce5841', 'ERROR: hmacSha512 does not match');
}
function keccak256 (wasm) {
const hash = u8aToHex(wasm.keccak256(stringToU8a('test value')));
@@ -21,6 +35,14 @@ function keccak256 (wasm) {
assert(hash === '0x2d07364b5c231c56ce63d49430e085ea3033c750688ba532b24029124c26ca5e', 'ERROR: keccak256 does not match');
}
function keccak512 (wasm) {
const hash = u8aToHex(wasm.keccak512(stringToU8a('test')));
console.log('\tRES', hash);
assert(hash === '0x1e2e9fc2002b002d75198b7503210c05a1baac4560916a3c6d93bcce3a50d7f00fd395bf1647b9abb8d1afcc9c76c289b0c9383ba386a956da4b38934417789e', 'ERROR: keccak512 does not match');
}
function pbkdf2Hash (wasm) {
const hash = u8aToHex(wasm.pbkdf2(stringToU8a('hello world'), stringToU8a('this is a salt'), 2048));
@@ -37,6 +59,14 @@ function scryptHash (wasm) {
assert(hash === '0x745731af4484f323968969eda289aeee005b5903ac561e64a5aca121797bf7734ef9fd58422e2e22183bcacba9ec87ba0c83b7a2e788f03ce0da06463433cda6', 'ERROR: scryptHash does not match');
}
function sha256Hash (wasm) {
const hash = u8aToHex(wasm.sha256(stringToU8a('hello world')));
console.log('\tRES', hash);
assert(hash === '0xb94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9', 'ERROR: sha256Hash does not match');
}
function sha512Hash (wasm) {
const hash = u8aToHex(wasm.sha512(stringToU8a('hello world')));
@@ -57,9 +87,13 @@ function twoxHash (wasm) {
module.exports = {
blake2bHash,
hmacSha256,
hmacSha512,
keccak256,
keccak512,
pbkdf2Hash,
scryptHash,
sha256Hash,
sha512Hash,
twoxHash
};
+24 -13
View File
@@ -1,26 +1,31 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const wasm = require('../../build/index.cjs');
const wasm = require('../../build');
const bip39 = require('./bip39.cjs');
const ed25519 = require('./ed25519.cjs');
const hashing = require('./hashing.cjs');
const secp256k1 = require('./secp256k1.cjs');
const sr25519 = require('./sr25519.cjs');
const vrf = require('./vrf.cjs');
const tests = {
...bip39,
// We place secp256k1 first, this allows the interaction with it in the
// hashing (specifically scrypt) test not be an issue (ASM.js only)
// https://github.com/polkadot-js/wasm/issues/307
...secp256k1,
...ed25519,
...hashing,
...sr25519,
...vrf
...vrf,
...bip39,
...hashing
};
function beforeAll () {
return wasm.waitReady();
}
function runAll () {
function runAll (name) {
const failed = [];
let count = 0;
@@ -36,23 +41,29 @@ function runAll () {
console.timeEnd(name);
} catch (error) {
console.error();
console.error(error);
failed.push(name);
}
});
if (failed.length) {
throw new Error(`Failed: ${failed.length} of ${count}: ${failed.concat(', ')}`);
throw new Error(`\n*** ${name}: FAILED: ${failed.length} of ${count}: ${failed.join(', ')}`);
}
}
function runUnassisted () {
beforeAll()
.then(() => runAll())
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
function runUnassisted (name) {
console.log(`\n*** ${name}: Running tests`);
beforeAll()
.then(() => runAll(name))
.then(() => {
console.log(`\n*** ${name}: All passed`);
process.exit(0);
})
.catch((error) => {
console.error(error.message, '\n');
process.exit(-1);
});
}
@@ -0,0 +1,82 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const { assert, hexToU8a, u8aToHex } = require('@polkadot/util');
function secp256k1Compress (wasm) {
const pubkey = '0x04b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb1307763fe926c273235fd979a134076d00fd1683cbd35868cb485d4a3a640e52184af';
const result = u8aToHex(wasm.secp256k1Compress(hexToU8a(pubkey)));
console.log('\tRES', result);
assert(result === '0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077', 'ERROR: secp256k1Compress does not match');
}
function secp256k1Expand (wasm) {
const pubkey = '0x03b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb13077';
const result = u8aToHex(wasm.secp256k1Expand(hexToU8a(pubkey)));
console.log('\tRES', result);
assert(result === '0x04b9dc646dd71118e5f7fda681ad9eca36eb3ee96f344f582fbe7b5bcdebb1307763fe926c273235fd979a134076d00fd1683cbd35868cb485d4a3a640e52184af', 'ERROR: secp256k1Expand does not match');
}
function secp256k1FromSeed1 (wasm) {
const seckey = '0x4380de832af797688026ce24f85204d508243f201650c1a134929e5458b7fbae';
const result = u8aToHex(wasm.secp256k1FromSeed(hexToU8a(seckey)));
console.log('\tRES', result);
assert(result === '0x4380de832af797688026ce24f85204d508243f201650c1a134929e5458b7fbae03fd8c74f795ced92064b86191cb2772b1e3a0947740aa0a5a6e379592471fd85b', 'ERROR: secp256k1FromSeed does not match');
}
function secp256k1FromSeed2 (wasm) {
// https://github.com/polkadot-js/wasm/issues/307
const seckey = new Uint8Array([
203, 109, 249, 222, 30, 252, 167, 163, 153, 138, 142,
173, 78, 2, 21, 157, 95, 169, 156, 62, 13, 79,
214, 67, 38, 103, 57, 11, 180, 114, 104, 84
]);
const expected = u8aToHex(new Uint8Array([
203, 109, 249, 222, 30, 252, 167, 163, 153, 138, 142,
173, 78, 2, 21, 157, 95, 169, 156, 62, 13, 79,
214, 67, 38, 103, 57, 11, 180, 114, 104, 84, 2,
10, 16, 145, 52, 31, 229, 102, 75, 250, 23, 130,
213, 224, 71, 121, 104, 144, 104, 201, 22, 176, 76,
179, 101, 236, 49, 83, 117, 86, 132, 217, 161
]));
const result = u8aToHex(wasm.secp256k1FromSeed(seckey));
console.log('\tRES', result);
assert(result === expected, 'ERROR: secp256k1FromSeed does not match');
}
function secp256k1Recover (wasm) {
const sig = '0x7505f2880114da51b3f5d535f8687953c0ab9af4ab81e592eaebebf53b728d2b6dfd9b5bcd70fee412b1f31360e7c2774009305cb84fc50c1d0ff8034dfa5fff';
const msg = '0xa30b64ce1eedf409c8afb801d72c05234e64849ea538c15dd3c8cf4ffcf166c9';
const result = u8aToHex(wasm.secp256k1Recover(hexToU8a(msg), hexToU8a(sig), 0));
console.log('\tRES', result);
assert(result === '0x028d13da15a02f3a70677339d51b14177ee9b49657662b35e56a9d9dee17db1d30', 'ERROR: secp256k1Recover does not match');
}
function secp256k1Sign (wasm) {
const sec = '0x4380de832af797688026ce24f85204d508243f201650c1a134929e5458b7fbae';
const msg = '0x68c731589a583d08b70861683b59ce3dd56284cb2f0da5b6cd83e6641dac3aab';
const result = u8aToHex(wasm.secp256k1Sign(hexToU8a(msg), hexToU8a(sec)));
console.log('\tRES', result);
assert(result === '0xdf92f73d9f060cefacf187b5414491cb992998ace017fa48839b5cda3e264ba83b105adec9e9872647a7d8bb28855b45e22805aea3d097953cbb1391f671d13e01', 'ERROR: secp256k1Sign does not match');
}
module.exports = {
secp256k1Compress,
secp256k1Expand,
secp256k1FromSeed1,
secp256k1FromSeed2,
secp256k1Recover,
secp256k1Sign
};
+41 -25
View File
@@ -1,8 +1,6 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint-disable camelcase */
const crypto = require('crypto');
const { assert, hexToU8a, stringToU8a, u8aToHex } = require('@polkadot/util');
@@ -14,7 +12,7 @@ function randomPair (wasm) {
return extractKeys(wasm.sr25519KeypairFromSeed(crypto.randomBytes(32)));
}
function sr25519_pairFromSeed (wasm) {
function sr25519PairFromSeed (wasm) {
const pair = wasm.sr25519KeypairFromSeed(stringToU8a('12345678901234567890123456789012'));
console.log('\tSEC', u8aToHex(pair.slice(0, 64)));
@@ -23,7 +21,7 @@ function sr25519_pairFromSeed (wasm) {
assert(u8aToHex(pair) === '0xf0106660c3dda23f16daa9ac5b811b963077f5bc0af89f85804f0de8e424f050f98d66f39442506ff947fd911f18c7a7a5da639a63e8d3b4e233f74143d951c1741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63', 'ERROR: pairFromSeed() does not match');
}
function sr25519_devFromSeed (wasm) {
function sr25519DevFromSeed (wasm) {
const pair = wasm.sr25519KeypairFromSeed(hexToU8a('0xfac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e'));
console.log('\tSEC', u8aToHex(pair.slice(0, 64)));
@@ -32,7 +30,7 @@ function sr25519_devFromSeed (wasm) {
assert(u8aToHex(pair) === '0x28b0ae221c6bb06856b287f60d7ea0d98552ea5a16db16956849aa371db3eb51fd190cce74df356432b410bd64682309d6dedb27c76845daf388557cbac3ca3446ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a', 'ERROR: devFromSeed() does not match');
}
function sr25519_verifyExisting (wasm) {
function sr25519VerifyExisting (wasm) {
const PK = hexToU8a('0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d');
const MESSAGE = stringToU8a('I hereby verify that I control 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY');
const SIGNATURE = hexToU8a('0xb83881d3bd7302981ee1c504fe5b7b394682927131fc0846fd616bb40fa14d02640fd2aca785b4cb57904765c2e4e75f59a7dd30154c209964369912091f6981');
@@ -44,7 +42,7 @@ function sr25519_verifyExisting (wasm) {
assert(isValid, 'ERROR: Unable to verify signature');
}
function sr25519_sign_deterministic (wasm) {
function sr25519SignDeterministic (wasm) {
const [, pk, sk] = randomPair(wasm);
const sig1 = u8aToHex(wasm.sr25519Sign(pk, sk, stringToU8a('this is a message')));
const sig2 = u8aToHex(wasm.sr25519Sign(pk, sk, stringToU8a('this is a message')));
@@ -55,7 +53,7 @@ function sr25519_sign_deterministic (wasm) {
assert(sig1 !== sig2, 'ERROR: Signatures are deterministic');
}
function sr25519_signAndVerify (wasm) {
function sr25519SignAndVerify (wasm) {
const [, pk, sk] = randomPair(wasm);
const signature = wasm.sr25519Sign(pk, sk, stringToU8a('this is a message'));
const isValid = wasm.sr25519Verify(signature, stringToU8a('this is a message'), pk);
@@ -66,7 +64,7 @@ function sr25519_signAndVerify (wasm) {
assert(isValid, 'ERROR: Unable to verify signature');
}
function sr25519_deriveHard (wasm) {
function sr25519DeriveHard (wasm) {
const [pair] = randomPair(wasm);
const derived = wasm.sr25519DeriveKeypairHard(pair, hexToU8a('0x0c666f6f00000000000000000000000000000000000000000000000000000000'));
@@ -74,7 +72,7 @@ function sr25519_deriveHard (wasm) {
console.log('\tPUB', u8aToHex(derived.slice(64)));
}
function sr25519_deriveHardKnown (wasm) {
function sr25519DeriveHardKnown (wasm) {
const derived = wasm.sr25519DeriveKeypairHard(hexToU8a('0x28b0ae221c6bb06856b287f60d7ea0d98552ea5a16db16956849aa371db3eb51fd190cce74df356432b410bd64682309d6dedb27c76845daf388557cbac3ca3446ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a'), hexToU8a('0x14416c6963650000000000000000000000000000000000000000000000000000'));
const publicKey = u8aToHex(derived.slice(64));
@@ -84,7 +82,7 @@ function sr25519_deriveHardKnown (wasm) {
assert(publicKey === '0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d', 'Unmatched resulting public keys');
}
function sr25519_deriveSoft (wasm) {
function sr25519DeriveSoft (wasm) {
const [pair] = randomPair(wasm);
const derived = wasm.sr25519DeriveKeypairSoft(pair, hexToU8a('0x0c666f6f00000000000000000000000000000000000000000000000000000000'));
@@ -92,7 +90,7 @@ function sr25519_deriveSoft (wasm) {
console.log('\tPUB', u8aToHex(derived.slice(64)));
}
function sr25519_deriveSoftKnown (wasm) {
function sr25519DeriveSoftKnown (wasm) {
const derived = wasm.sr25519DeriveKeypairSoft(hexToU8a('0x28b0ae221c6bb06856b287f60d7ea0d98552ea5a16db16956849aa371db3eb51fd190cce74df356432b410bd64682309d6dedb27c76845daf388557cbac3ca3446ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a'), hexToU8a('0x0c666f6f00000000000000000000000000000000000000000000000000000000'));
const publicKey = u8aToHex(derived.slice(64));
@@ -102,7 +100,7 @@ function sr25519_deriveSoftKnown (wasm) {
assert(publicKey === '0x40b9675df90efa6069ff623b0fdfcf706cd47ca7452a5056c7ad58194d23440a', 'Unmatched resulting public keys');
}
function sr25519_deriveSoftPubkey (wasm) {
function sr25519DeriveSoftPubkey (wasm) {
const derived = u8aToHex(wasm.sr25519DerivePublicSoft(hexToU8a('0x46ebddef8cd9bb167dc30878d7113b7e168e6f0646beffd77d69d39bad76b47a'), hexToU8a('0x0c666f6f00000000000000000000000000000000000000000000000000000000')));
console.log('\tPUB', derived);
@@ -110,7 +108,24 @@ function sr25519_deriveSoftPubkey (wasm) {
assert(derived === '0x40b9675df90efa6069ff623b0fdfcf706cd47ca7452a5056c7ad58194d23440a', 'Unmatched resulting public keys');
}
function sr25519_benchmark (wasm) {
function sr25519KeyAgreement (wasm) {
const pair1 = wasm.sr25519KeypairFromSeed(hexToU8a('0x3b44c558f9a8f3dc9690d53088558c1ba2529b677e316c6054d1852595b004af'));
const pair2 = wasm.sr25519KeypairFromSeed(hexToU8a('0x923b80f79c6981fe756272128ec236eb510ae016dd20bdccbd77a9416b7ab94e'));
const [, pk1, sk1] = extractKeys(pair1);
const [, pk2, sk2] = extractKeys(pair2);
assert(u8aToHex(wasm.sr25519Agree(pk1, sk2)) === '0xfa7b90001b790fe42ff78b8cd86f6cf7a7c0a70b72f6b4c771b5d67536450222', 'Unmatched agreement keys');
assert(u8aToHex(wasm.sr25519Agree(pk2, sk1)) === '0xfa7b90001b790fe42ff78b8cd86f6cf7a7c0a70b72f6b4c771b5d67536450222', 'Unmatched agreement keys');
for (let i = 0; i < 256; i++) {
const [, pk1, sk1] = randomPair(wasm);
const [, pk2, sk2] = randomPair(wasm);
assert(u8aToHex(wasm.sr25519Agree(pk1, sk2)) === u8aToHex(wasm.sr25519Agree(pk2, sk1)), 'Unmatched agreement keys');
}
}
function sr25519Benchmark (wasm) {
const MESSAGE = stringToU8a('this is a message');
for (let i = 0; i < 256; i++) {
@@ -121,15 +136,16 @@ function sr25519_benchmark (wasm) {
}
module.exports = {
sr25519_benchmark,
sr25519_deriveHard,
sr25519_deriveHardKnown,
sr25519_deriveSoft,
sr25519_deriveSoftKnown,
sr25519_deriveSoftPubkey,
sr25519_devFromSeed,
sr25519_pairFromSeed,
sr25519_signAndVerify,
sr25519_sign_deterministic,
sr25519_verifyExisting
sr25519Benchmark,
sr25519DeriveHard,
sr25519DeriveHardKnown,
sr25519DeriveSoft,
sr25519DeriveSoftKnown,
sr25519DeriveSoftPubkey,
sr25519DevFromSeed,
sr25519KeyAgreement,
sr25519PairFromSeed,
sr25519SignAndVerify,
sr25519SignDeterministic,
sr25519VerifyExisting
};
+7 -9
View File
@@ -1,8 +1,6 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint-disable camelcase */
const crypto = require('crypto');
const { assert, stringToU8a, u8aToHex } = require('@polkadot/util');
@@ -14,7 +12,7 @@ function randomPair (wasm) {
return extractKeys(wasm.sr25519KeypairFromSeed(crypto.randomBytes(32)));
}
function vrf_signAndVerify_compat (wasm) {
function vrfSignAndVerifyCompat (wasm) {
const [, pk, sk] = randomPair(wasm);
const outAndProof = wasm.vrfSign(sk, stringToU8a('my VRF context'), stringToU8a('this is a message'), new Uint8Array());
const isValid = wasm.vrfVerify(pk, stringToU8a('my VRF context'), stringToU8a('this is a message'), new Uint8Array(), outAndProof);
@@ -25,7 +23,7 @@ function vrf_signAndVerify_compat (wasm) {
assert(isValid, 'ERROR: Unable to verify VRF output & proof');
}
function vrf_signAndVerify (wasm) {
function vrfSignAndVerify (wasm) {
const [, pk, sk] = randomPair(wasm);
const outAndProof = wasm.vrfSign(sk, stringToU8a('my VRF context'), stringToU8a('this is a message'), stringToU8a('extra param'));
const isValid = wasm.vrfVerify(pk, stringToU8a('my VRF context'), stringToU8a('this is a message'), stringToU8a('extra param'), outAndProof);
@@ -36,7 +34,7 @@ function vrf_signAndVerify (wasm) {
assert(isValid, 'ERROR: Unable to verify VRF extra output & proof');
}
function vrf_signAndVerify_deterministic (wasm) {
function vrfSignAndVerifyDeterministic (wasm) {
const [,, sk] = randomPair(wasm);
const outAndProof1 = wasm.vrfSign(sk, stringToU8a('my VRF context'), stringToU8a('this is a message'), stringToU8a('extra param'));
const outAndProof2 = wasm.vrfSign(sk, stringToU8a('my VRF context'), stringToU8a('this is a message'), stringToU8a('extra param'));
@@ -50,7 +48,7 @@ function vrf_signAndVerify_deterministic (wasm) {
}
module.exports = {
vrf_signAndVerify,
vrf_signAndVerify_compat,
vrf_signAndVerify_deterministic
vrfSignAndVerify,
vrfSignAndVerifyCompat,
vrfSignAndVerifyDeterministic
};
+3 -4
View File
@@ -1,10 +1,9 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
global.WebAssembly = null;
require('./alias-imports.cjs');
require('@polkadot/wasm-crypto/initOnlyAsm');
const { runUnassisted } = require('./all/index.cjs');
runUnassisted();
runUnassisted('ASM');
+1 -3
View File
@@ -1,12 +1,10 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/**
* @jest-environment jsdom
*/
// override-require in jest.config.js
import { beforeAll, tests, wasm } from './all/index.cjs';
describe('wasm-crypto', () => {
+2 -2
View File
@@ -1,8 +1,8 @@
// Copyright 2019-2021 @polkadot/wasm-crypto authors & contributors
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
require('./alias-imports.cjs');
const { runUnassisted } = require('./all/index.cjs');
runUnassisted();
runUnassisted('WASM');
+12
View File
@@ -0,0 +1,12 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src"
},
"references": [
{ "path": "../wasm-crypto-asmjs/tsconfig.build.json" },
{ "path": "../wasm-crypto-wasm/tsconfig.build.json" }
]
}
+30
View File
@@ -0,0 +1,30 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { createBundle } from '@polkadot/dev/config/rollup';
const pkgs = [
'@polkadot/wasm-crypto'
];
const external = [
...pkgs,
'@polkadot/util'
];
const overrides = {
'@polkadot/wasm-crypto': {
entries: ['asmjs', 'wasm'].map((p) => `wasm-crypto-${p}`).reduce((all, p) => ({
...all,
[`@polkadot/${p}`]: `../../${p}/build`
}), {})
}
};
export default pkgs.map((pkg) =>
createBundle({
external,
pkg,
...(overrides[pkg] || {})
})
);
+1 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# Copyright 2019-2021 @polkadot/wasm authors & contributors
# Copyright 2019-2022 @polkadot/wasm authors & contributors
# This software may be modified and distributed under the terms
# of the Apache-2.0 license. See the LICENSE file for details.
+14 -16
View File
@@ -1,32 +1,32 @@
#!/usr/bin/env bash
# Copyright 2019-2021 @polkadot/wasm authors & contributors
# Copyright 2019-2022 @polkadot/wasm authors & contributors
# This software may be modified and distributed under the terms
# of the Apache-2.0 license. See the LICENSE file for details.
set -e
# also change in install-build-deps
RUST_VER=nightly-2020-10-25
source ../scripts/rust-version.sh
WSM=bytes/wasm_bg.wasm
OPT=bytes/wasm_opt.wasm
ASM=wasm-crypto-asmjs/build/data.cjs
ASM=wasm-crypto-asmjs/build/cjs/data.js
# build new via wasm-pack
echo "*** Building Rust sources"
cd wasm-crypto
rustup run $RUST_VER xargo build --target wasm32-unknown-unknown --release
# rustup run $RUST_VER cargo build --target wasm32-unknown-unknown --release -Z build-std=std,panic_abort
if [ "$RUST_VER" == "stable" ]; then
RUSTC_BOOTSTRAP=1 cargo build --target wasm32-unknown-unknown --release -Z build-std=std,panic_abort
else
rustup run $RUST_VER xargo build --target wasm32-unknown-unknown --release
fi
cd ..
echo "*** Converting to WASM"
../bindgen/wasm-bindgen wasm-crypto/target/wasm32-unknown-unknown/release/wasm.wasm --out-dir bytes --target web
# wasm-pack build --release --scope polkadot --target web
# optimise
echo "*** Optimising WASM output"
# ../../wabt/bin/wasm-strip $WSM
../binaryen/bin/wasm-opt $WSM -Os -o $OPT
../binaryen/bin/wasm-opt $WSM -Oz -o $OPT
# convert wasm to base64 structure
echo "*** Packing WASM into baseX"
@@ -34,15 +34,13 @@ node ../scripts/pack-wasm-base.cjs
# build asmjs version from the input (optimised) WASM
echo "*** Building asm.js version"
../binaryen/bin/wasm2js --output $ASM $OPT
../binaryen/bin/wasm2js -Oz --output $ASM $OPT
# cleanup the generated asm, converting to cjs
sed -i -e '/import {/d' $ASM
sed -i -e '/export var /d' $ASM
sed -i -e 's/{abort.*},memasmFunc/wbg, memasmFunc/g' $ASM
sed -i -e 's/var retasmFunc = /const asmJsInit = (wbg) => /' $ASM
echo "module.exports = { asmJsInit };" >> $ASM
sed -i -e '1,/var retasmFunc = /!d' $ASM
sed -i -e 's/var retasmFunc = .*/const asmJsInit = (wbg) => asmFunc(wbg);\n\nmodule.exports = { asmJsInit };/g' $ASM
# cleanups
rm -rf wasm-crypto-asmjs/build/*-e
rm -rf wasm-crypto-wasm/build/*-e
rm -rf wasm-crypto-asmjs/build/cjs/*-e
rm -rf wasm-crypto-wasm/build/cjs/*-e
+3 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# Copyright 2019-2021 @polkadot/wasm authors & contributors
# Copyright 2019-2022 @polkadot/wasm authors & contributors
# This software may be modified and distributed under the terms
# of the Apache-2.0 license. See the LICENSE file for details.
@@ -26,3 +26,5 @@ echo "*** wasm-crypto-wasm"
ls -alR wasm-crypto-wasm/build
cd ..
yarn build:rollup
+2 -2
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# Copyright 2019-2021 @polkadot/wasm authors & contributors
# Copyright 2019-2022 @polkadot/wasm authors & contributors
# This software may be modified and distributed under the terms
# of the Apache-2.0 license. See the LICENSE file for details.
@@ -7,4 +7,4 @@ set -e
# cleanup old
echo "*** Cleaning old builds"
rm -rf packages/*/build packages/bytes
rm -rf build packages/*/build packages/bytes
+1 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# Copyright 2019-2021 @polkadot/wasm authors & contributors
# Copyright 2019-2022 @polkadot/wasm authors & contributors
# This software may be modified and distributed under the terms
# of the Apache-2.0 license. See the LICENSE file for details.
+13 -10
View File
@@ -1,30 +1,33 @@
#!/usr/bin/env bash
# Copyright 2019-2021 @polkadot/wasm authors & contributors
# Copyright 2019-2022 @polkadot/wasm authors & contributors
# This software may be modified and distributed under the terms
# of the Apache-2.0 license. See the LICENSE file for details.
set -e
# also change in build-package
RUST_VER=nightly-2020-10-25
BINARYEN_REPO=https://github.com/WebAssembly/binaryen
BINARYEN_VER=version_97
BINARYEN_ZIP=
source ./scripts/rust-version.sh
# NOTE If this is bumped, bump the version in Cargo.toml as well
BINDGEN_REPO=https://github.com/rustwasm/wasm-bindgen
BINDGEN_VER=0.2.65
BINDGEN_VER=0.2.79
BINDGEN_ZIP=
BINARYEN_REPO=https://github.com/WebAssembly/binaryen
BINARYEN_VER=version_105
BINARYEN_ZIP=
WABT_REPO=https://github.com/WebAssembly/wabt
WABT_VER=1.0.19
WABT_VER=1.0.27
WABT_ZIP=
unamestr=`uname`
# toolchain with rust-src (for panic overrdides) and the right wasm32 toolchain
rustup toolchain install $RUST_VER -c rust-src -t wasm32-unknown-unknown
cargo install xargo
if [ "$RUST_VER" != "stable" ]; then
cargo install xargo
fi
if [[ "$unamestr" == 'Linux' ]]; then
echo "*** Detected Linux"
+8 -27
View File
@@ -1,43 +1,24 @@
// Copyright 2019-2021 @polkadot/wasm authors & contributors
// Copyright 2019-2022 @polkadot/wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
const fflate = require('fflate/node');
const fs = require('fs');
const { formatNumber } = require('@polkadot/util');
const A_NAME = 'wasm-crypto-asmjs';
const W_NAME = 'wasm-crypto-wasm';
function hdr (package) {
return `// Copyright 2019-2021 @polkadot/${package} authors & contributors
const data = fs.readFileSync('./bytes/wasm_opt.wasm');
const compressed = Buffer.from(fflate.zlibSync(data, { level: 9 }));
console.log(`*** Compressed WASM: ${formatNumber(data.length)} -> ${formatNumber(compressed.length)} (${(100 * compressed.length / data.length).toFixed(2)}%)`);
fs.writeFileSync(`./${W_NAME}/build/cjs/bytes.js`, `// Copyright 2019-2022 @polkadot/${W_NAME} authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Generated as part of the build, do not edit
`;
}
function getWasmBuffer () {
const data = fs.readFileSync('./bytes/wasm_opt.wasm');
const compressed = Buffer.from(fflate.zlibSync(data, { level: 9 }));
console.log(`*** Compressed WASM: ${formatNumber(data.length)} -> ${formatNumber(compressed.length)} (${(100 * compressed.length / data.length).toFixed(2)}%)`);
return { compressed, sizeUncompressed: data.length };
}
fs.writeFileSync(`./${A_NAME}/build/data.js`, `${hdr(A_NAME)}
export { asmJsInit } from './data.cjs';
`);
fs.writeFileSync(`./${W_NAME}/build/bytes.js`, `${hdr(W_NAME)}
export { bytes, sizeCompressed, sizeUncompressed } from './bytes.cjs';
`);
const { compressed, sizeUncompressed } = getWasmBuffer();
fs.writeFileSync(`./${W_NAME}/build/bytes.cjs`, `${hdr(W_NAME)}
const sizeCompressed = ${compressed.length};
const sizeUncompressed = ${sizeUncompressed};
const sizeUncompressed = ${data.length};
const bytes = '${compressed.toString('base64')}';
module.exports = { bytes, sizeCompressed, sizeUncompressed };
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
# Copyright 2019-2022 @polkadot/wasm authors & contributors
# This software may be modified and distributed under the terms
# of the Apache-2.0 license. See the LICENSE file for details.
RUST_VER=nightly-2021-12-02
# RUST_VER=stable
+14
View File
@@ -0,0 +1,14 @@
{
"extends": "@polkadot/dev/config/tsconfig.json",
"compilerOptions": {
"composite": true,
"paths": {
"@polkadot/wasm-crypto-asmjs/packageInfo": ["wasm-crypto-asmjs/src/packageInfo"],
"@polkadot/wasm-crypto-asmjs": ["wasm-crypto-asmjs/src"],
"@polkadot/wasm-crypto-wasm/packageInfo": ["wasm-crypto-wasm/src/packageInfo"],
"@polkadot/wasm-crypto-wasm": ["wasm-crypto-wasm/src"],
"@polkadot/wasm-crypto": ["wasm-crypto/src"]
},
"skipLibCheck": true
}
}
+11
View File
@@ -0,0 +1,11 @@
{
"compilerOptions": {
"composite": true
},
"files": [],
"references": [
{ "path": "./packages/wasm-crypto/tsconfig.build.json" },
{ "path": "./packages/wasm-crypto-asmjs/tsconfig.build.json" },
{ "path": "./packages/wasm-crypto-wasm/tsconfig.build.json" }
]
}

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