Compare commits

..
478 Commits
Author SHA1 Message Date
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
Github Actions 77641fc43d [CI Skip] release/stable 4.0.1
skip-checks: true
2021-03-04 18:04:12 +00:00
Jaco Greeff 90865fe9c1 4.0 (#184) 2021-03-04 18:56:54 +01:00
Github Actions 15fbfc3c51 [CI Skip] release/beta 4.0.1-7
skip-checks: true
2021-03-04 17:27:21 +00:00
Jaco Greeff 340b6a0cd6 packageInfo exports (#183) 2021-03-04 18:21:00 +01:00
Github Actions 064e13268a [CI Skip] release/beta 4.0.1-6
skip-checks: true
2021-03-04 17:06:29 +00:00
Jaco Greeff 641ea0f9d8 Small cleanups (#182)
* Small cleanups

* Detect wasm-crypt-* alongside detectPackage

* Adjust alias imports

* Adjust

* Adjust
2021-03-04 17:59:38 +01:00
Github Actions 98bc7147e3 [CI Skip] release/beta 4.0.1-5
skip-checks: true
2021-03-03 07:55:20 +00:00
Jaco Greeff 3d9e5d49b8 Bump TS 2021-03-03 08:48:38 +01:00
Github Actions 8bdcfbb049 [CI Skip] release/beta 4.0.1-4
skip-checks: true
2021-03-03 07:39:46 +00:00
Jaco Greeff 13dcd606ea Bump deps (& berry) (#181) 2021-03-03 08:33:29 +01:00
Github Actions 6576688f92 [CI Skip] release/beta 4.0.1-3
skip-checks: true
2021-03-02 17:03:46 +00:00
Jaco Greeff 33e63df4ad reset 2021-03-02 17:40:53 +01:00
Jaco Greeff e910e9fc77 Revert "[CI Skip] release/stable 4.0.0"
This reverts commit a00b36d50d.
2021-03-02 17:39:54 +01:00
Github Actions a00b36d50d [CI Skip] release/stable 4.0.0
skip-checks: true
2021-03-02 16:34:29 +00:00
Jaco Greeff 0f6e143a6f Default build to type: module (#180)
* Defaul build to type: module

* Add packageInfo

* 4.0

* pre

* Adjust tests

* jest js, rest cjs

* Bump dev
2021-03-02 17:27:41 +01:00
Github Actions 854d209be8 [CI Skip] release/beta 3.2.5-0
skip-checks: true
2021-03-01 20:33:12 +00:00
Jaco Greeff 3f50efb951 Bump deps (#179) 2021-03-01 21:27:10 +01:00
Github Actions aceaa90466 [CI Skip] release/stable 3.2.4
skip-checks: true
2021-02-24 16:14:52 +00:00
Jaco Greeff 63622edcf4 Cleanup implicit dependencies, perform base64 decoding using base64-js (#178)
* Cleanup implicit dependencies, perform base64 decoding using base64-js

* base64 decoding

* lint

* remove extra call

* adjust
2021-02-24 17:09:06 +01:00
Github Actions 4a1c0563cb [CI Skip] release/stable 3.2.3
skip-checks: true
2021-02-16 10:55:04 +00:00
Jaco Greeff b34181f104 3.2.3 (#176) 2021-02-16 11:48:28 +01:00
Github Actions 141a067b85 [CI Skip] release/stable 3.2.2
skip-checks: true
2021-01-24 11:00:54 +00:00
Jaco Greeff 4c48d91f8e 3.2.2 (#175) 2021-01-24 11:55:09 +01:00
Github Actions 9158d7c066 [CI Skip] release/stable 3.2.1
skip-checks: true
2021-01-22 08:49:35 +00:00
Jaco Greeff 135affe3e3 3.2 (#174) 2021-01-22 09:44:18 +01:00
Github Actions 1460ce9301 [CI Skip] release/beta 3.1.2-6
skip-checks: true
2021-01-21 12:04:54 +00:00
Jaco Greeff 8510120701 Bumps (#173)
* Bumps

* Update fflate imports
2021-01-21 12:59:06 +01:00
Github Actions 1e5b33413f [CI Skip] release/beta 3.1.2-5
skip-checks: true
2021-01-21 11:34:19 +00:00
Jaco Greeff 16d1b28f77 Cleanups (#172) 2021-01-21 12:28:11 +01:00
Github Actions 33a54be279 [CI Skip] release/beta 3.1.2-4
skip-checks: true
2021-01-20 11:13:40 +00:00
Jaco Greeff e6bc31ac5d Adjust vrf_{sign, verify} with one variant (#171) 2021-01-20 12:08:27 +01:00
Github Actions a7f8342458 [CI Skip] release/beta 3.1.2-3
skip-checks: true
2021-01-17 15:22:02 +00:00
Steve DegosserieandGithub Actions b1752ad001 Expose Schnorrkel's VRF capabilities (#170)
* Expose vrf_sign_extra function from Schnorrkel

* Document function, code cleanup

* Added vrf_sign, vrf_verify, vrf_verify_extra functions.

* Expose VRF functions to js

Co-authored-by: Github Actions <action@github.com>
2021-01-17 16:16:14 +01:00
Github Actions 28e3f6018d [CI Skip] release/beta 3.1.2-2
skip-checks: true
2021-01-03 10:25:39 +00:00
Jaco Greeff 1bb6db86f7 2021 (#167) 2021-01-03 11:20:26 +01:00
Github Actions 571cdabc78 [CI Skip] release/beta 3.1.2-1
skip-checks: true
2021-01-02 16:58:01 +00:00
Jaco Greeff 11c6315409 Bump dev/util deps (#166)
* Bump dev/util deps

* Move dev-only deps
2021-01-02 17:51:35 +01:00
Github Actions 3a1740a5a2 [CI Skip] release/beta 3.1.2-0
skip-checks: true
2020-12-22 09:20:51 +00:00
Jaco Greeff c725e8ee03 Bump deps (#165)
* Bump deps

* rewrite
2020-12-22 10:15:44 +01:00
Github Actions 6650a8e160 [CI Skip] release/stable 3.1.1
skip-checks: true
2020-12-19 13:12:57 +00:00
Jaco Greeff a3d1878453 3.1 (#163) 2020-12-19 14:07:09 +01:00
Github Actions 73b2109666 [CI Skip] release/beta 3.0.2-12
skip-checks: true
2020-12-19 10:31:03 +00:00
Jaco Greeff 3c13f266df Bundle unzlibSync (no worker requirement, stop-gap) (#162)
* Bundle unzlibSync (no worker requirement, stop-gap)

* Bump deps

* Pass uncompressedSize

* mjs fixes
2020-12-19 11:24:59 +01:00
Github Actions d9a4572c7c [CI Skip] release/beta 3.0.2-11
skip-checks: true
2020-12-18 10:10:13 +00:00
Jaco Greeff f6187ca00b Bump dev 2020-12-18 11:04:29 +01:00
Github Actions c0193ba4ad [CI Skip] release/beta 3.0.2-10
skip-checks: true
2020-12-18 09:44:19 +00:00
Jaco Greeff a96c6337a0 WP4 compat :( 2020-12-18 10:39:13 +01:00
Github Actions ba926e920d [CI Skip] release/beta 3.0.2-9
skip-checks: true
2020-12-18 09:22:16 +00:00
Jaco Greeff 29d1ac009a detectPackage test 2020-12-18 10:17:04 +01:00
Github Actions 74c7e05fed [CI Skip] release/beta 3.0.2-8
skip-checks: true
2020-12-17 17:27:18 +00:00
Jaco Greeff 8618b57ee8 __dirname fix 2020-12-17 18:22:13 +01:00
Github Actions bdf7fb55fb [CI Skip] release/beta 3.0.2-7
skip-checks: true
2020-12-17 16:43:10 +00:00
Jaco Greeff e7389c2f15 Remove non-working import.meta wrapper 2020-12-17 17:37:12 +01:00
Github Actions f176d0b733 [CI Skip] release/beta 3.0.2-6
skip-checks: true
2020-12-17 16:24:43 +00:00
Jaco Greeff 81101b69a3 detectPackage protection? 2020-12-17 17:18:57 +01:00
Github Actions 4625944ee4 [CI Skip] release/beta 3.0.2-5
skip-checks: true
2020-12-17 13:02:40 +00:00
Jaco Greeff 15d1166637 Mark detectPackage as sideEffect 2020-12-17 13:57:32 +01:00
Github Actions 40f2990895 [CI Skip] release/beta 3.0.2-4
skip-checks: true
2020-12-17 11:33:59 +00:00
Jaco Greeff 123bb2a09c detectPackage function 2020-12-17 12:28:28 +01:00
Github Actions f863cb418e [CI Skip] release/beta 3.0.2-3
skip-checks: true
2020-12-17 10:41:54 +00:00
Jaco Greeff 0510eb869a Dedupe 2020-12-17 11:36:38 +01:00
Github Actions 16226a1919 [CI Skip] release/beta 3.0.2-2
skip-checks: true
2020-12-16 14:42:41 +00:00
Jaco Greeff 836fa8fb5f Fix detectPackage import 2020-12-16 15:37:44 +01:00
Github Actions 97f02c2dc5 [CI Skip] release/beta 3.0.2-1
skip-checks: true
2020-12-16 14:22:43 +00:00
Jaco Greeff a3ed8293f8 esm detectPackage (#161) 2020-12-16 15:17:47 +01:00
Github Actions b12b73df85 [CI Skip] release/beta 3.0.2-0
skip-checks: true
2020-12-15 15:10:59 +00:00
Jaco Greeff f01a9b187e Single instance package detection (#160)
* Single instance package detection

* s/require/request/

* Internal isReady

* Revert unneeded from-build alias
2020-12-15 16:04:22 +01:00
Github Actions 7898d95844 [CI Skip] release/stable 3.0.1
skip-checks: true
2020-12-13 09:14:12 +00:00
Jaco Greeff 2c4f8bbe4e 3.0 (#158)
* 3.0

* CHANGELOG

* Rename content packages

* final dev bump
2020-12-13 10:09:24 +01:00
Github Actions ef1caeb94e [CI Skip] release/beta 2.0.2-16
skip-checks: true
2020-12-12 12:14:43 +00:00
Jaco Greeff 8837ec9386 Use lz4 on the WASM stream (#159)
* Use lz4 on the WASM stream

* Allow fflate tree-shaking

* Rewrite deps
2020-12-12 13:09:47 +01:00
Github Actions 653aa56f12 [CI Skip] release/beta 2.0.2-15
skip-checks: true
2020-12-11 22:14:28 +00:00
Jaco Greeff 9ece350f21 Bump dev 2020-12-11 23:08:40 +01:00
Github Actions bd6435053d [CI Skip] release/beta 2.0.2-14
skip-checks: true
2020-12-11 16:32:30 +00:00
Jaco Greeff 9c5c22ddbe Bump common x-randomvalues import 2020-12-11 17:27:28 +01:00
Github Actions 77622d8408 [CI Skip] release/beta 2.0.2-13
skip-checks: true
2020-12-11 15:51:42 +00:00
Jaco Greeff 3e1249ca2c Allow esm builds (#157) 2020-12-11 16:45:56 +01:00
Github Actions 9c09490f62 [CI Skip] release/beta 2.0.2-12
skip-checks: true
2020-12-11 08:38:04 +00:00
Jaco Greeff c46c08d296 Bump dev 2020-12-11 09:32:35 +01:00
Github Actions f4d4bb90f0 [CI Skip] release/beta 2.0.2-11
skip-checks: true
2020-12-10 16:04:44 +00:00
Jaco Greeff 45b51adfc7 Build esm (don't use) (#156) 2020-12-10 16:59:50 +01:00
Github Actions aa084bf11b [CI Skip] release/beta 2.0.2-10
skip-checks: true
2020-12-10 14:04:13 +00:00
Jaco Greeff 0a1aec2acf Add missing @babel/runtime dep 2020-12-10 14:59:19 +01:00
Github Actions 463626d75c [CI Skip] release/beta 2.0.2-9
skip-checks: true
2020-12-10 13:51:09 +00:00
Jaco Greeff dc4203fe7c Bump dev 2020-12-10 14:45:49 +01:00
Github Actions 0fa386b93a [CI Skip] release/beta 2.0.2-8
skip-checks: true
2020-12-10 13:13:47 +00:00
Jaco Greeff 5c563bb95f Split bytes packages for easier override (#155) 2020-12-10 14:07:11 +01:00
Github Actions 4a10b7b066 [CI Skip] release/beta 2.0.2-7
skip-checks: true
2020-12-09 17:38:08 +00:00
Jaco Greeff c31c8537be Babel config update (#154) 2020-12-09 18:32:56 +01:00
Github Actions 7aebad00eb [CI Skip] release/beta 2.0.2-6
skip-checks: true
2020-12-09 15:17:51 +00:00
Jaco Greeff 7af6734e26 Fix sr25519 soft derive signature (#153) 2020-12-09 16:11:56 +01:00
Github Actions edcdd48830 [CI Skip] release/beta 2.0.2-5
skip-checks: true
2020-12-09 14:57:56 +00:00
Jaco Greeff ad4ac2e101 Convert to TypeScript sources (#152) 2020-12-09 15:52:04 +01:00
Github Actions 2a44e076c2 [CI Skip] release/beta 2.0.2-4
skip-checks: true
2020-12-08 10:30:08 +00:00
Jaco Greeff 9ed88fe53a Remove --fix on CI (#151) 2020-12-08 11:25:18 +01:00
Github Actions 856bf68abd [CI Skip] release/beta 2.0.2-3
skip-checks: true
2020-12-07 14:05:32 +00:00
Jaco Greeff b36ad6fdf2 Bump dev (#150)
* Bump dev

* Rebump
2020-12-07 14:59:44 +01:00
Github Actions 78d56fa82e [CI Skip] release/beta 2.0.2-2
skip-checks: true
2020-12-05 09:57:02 +00:00
Jaco Greeff 294d30cb3b Bump deps (minor) (#149) 2020-12-05 10:51:49 +01:00
Github Actions 3185b23a97 [CI Skip] release/beta 2.0.2-1
skip-checks: true
2020-12-01 17:52:56 +00:00
Jaco Greeff a8df6878b8 Bump berry (#148)
* Bump berry

* rewrite
2020-12-01 18:33:20 +01:00
Github Actions 148b1c1f98 [CI Skip] release/beta 2.0.2-0
skip-checks: true
2020-11-24 11:46:09 +00:00
Jaco Greeff 355b225428 Bump dev deps (#147) 2020-11-24 12:41:05 +01:00
Jaco Greeff 7e0cfe73f1 Bump dev (#146)
* Bump dev

* Update babel config
2020-11-11 11:28:47 +01:00
Jaco Greeff 618d5ad6d6 Adjust CC excludes (#145) 2020-11-08 10:10:36 +01:00
Github Actions 23df722466 [CI Skip] release/stable 2.0.1
skip-checks: true
2020-11-08 09:05:25 +00:00
Jaco Greeff d3a90d7362 2.0 (#144) 2020-11-08 09:59:49 +01:00
Github Actions 2b8ee5f655 [CI Skip] release/beta 2.0.0-10
skip-checks: true
2020-11-07 14:47:09 +00:00
Jaco Greeff 1db2f57b8c Remove jest polyfill (#143) 2020-11-07 15:41:59 +01:00
Github Actions 8d93a4b665 [CI Skip] release/beta 2.0.0-9
skip-checks: true
2020-11-07 13:23:44 +00:00
Jaco Greeff 2fca9b83c1 Flatten JS (#142)
* Flatten JS

* JS locations in build
2020-11-07 14:18:41 +01:00
Jaco Greeff 5be84df651 Use x-randomvalues (#140)
* Use x-randomvalues

* Install
2020-11-07 13:46:27 +01:00
Github Actions 11997092c3 [CI Skip] release/beta 2.0.0-8
skip-checks: true
2020-11-07 09:47:26 +00:00
Jaco Greeff 15788efd34 Replace default crypto import, remove requires (#139)
* Replace default crypto import, remove requires

* TS 4.0.5
2020-11-07 10:42:14 +01:00
Github Actions cbb7e6f9e8 [CI Skip] release/beta 2.0.0-7
skip-checks: true
2020-11-05 13:54:17 +00:00
Jaco Greeff 141f5e6488 Fix binaryen binaries (mac with shared libs) (#137) 2020-11-05 14:47:38 +01:00
Github Actions 1c54650396 [CI Skip] release/beta 2.0.0-6
skip-checks: true
2020-11-05 13:29:12 +00:00
Jaco Greeff ae748a828d Build via xargo (#136)
* Build via xargo

* xargo as dev dep

* Install xargo explicitly

* Fix binaryen dep

* Update deps

* Remove unused wasm-pack section

* Uname
2020-11-05 14:23:27 +01:00
Github Actions 9d840d89e6 [CI Skip] release/beta 2.0.0-5
skip-checks: true
2020-11-03 11:26:56 +00:00
Jaco Greeff c03750d97c No rlib 2020-11-03 12:22:26 +01:00
Github Actions df579b6ab0 [CI Skip] release/beta 2.0.0-4
skip-checks: true
2020-11-03 09:03:39 +00:00
Jaco Greeff 5455b1bc8c Bump dev polyfill (#135) 2020-11-03 09:58:31 +01:00
Github Actions 4095777139 [CI Skip] release/beta 2.0.0-3
skip-checks: true
2020-11-03 08:47:10 +00:00
Jaco Greeff be0a41e4b0 Test for deterministic outputs (#134) 2020-11-03 09:42:53 +01:00
Github Actions bf9aceb4a9 [CI Skip] release/beta 2.0.0-2
skip-checks: true
2020-11-03 07:51:58 +00:00
Jaco Greeff c6135e28d4 2.0 (#133)
* 2.0

* prerelease

* Bumps

* CHANGELOG

* Don't init with no WASM bytes

* {asm,bytes}-empty

* asm-empty import

* WasmCryptoInstance
2020-11-03 08:46:57 +01:00
Github Actions 9f199fee77 [CI Skip] release/beta 1.5.0-beta.19
skip-checks: true
2020-11-02 21:16:28 +00:00
Jaco Greeff d937dda6ba Drop actual polyfill 2020-11-02 22:12:10 +01:00
Github Actions 5bdc33d0cd [CI Skip] release/beta 1.5.0-beta.18
skip-checks: true
2020-11-02 20:29:49 +00:00
Jaco Greeff 511986b7cf Update steps 2020-11-02 21:25:00 +01:00
Jaco Greeff 1d7addf6ef Remove auto-injected crypto polyfill (#132)
* Remove auto-injected crypto polyfill

* Update
2020-11-02 21:17:11 +01:00
Github Actions cc63edbd5c [CI Skip] release/beta 1.5.0-beta.17
skip-checks: true
2020-11-02 18:07:58 +00:00
Jaco Greeff f8efe32b43 Align stub.js with asm.js 2020-11-02 19:03:52 +01:00
Jaco Greeff bb748c0225 Simplify asm creation (#131) 2020-11-02 19:02:28 +01:00
Github Actions 9e9535cc2b [CI Skip] release/beta 1.5.0-beta.16
skip-checks: true
2020-11-02 17:37:55 +00:00
Jaco Greeff e2d0726608 Split js/wasm (#130)
* Split js/wasm

* require
2020-11-02 18:34:00 +01:00
Github Actions 5209c934a6 [CI Skip] release/beta 1.5.0-beta.15
skip-checks: true
2020-11-02 15:43:50 +00:00
Jaco Greeff da946b18ce Cleanup build, no sed mangling (#129)
* Polyfill require adjust

* Assert in promise for getRandomBytes

* Adjust jest

* Revert explicit overrides (from base)

* use typeof

* Re-add crypto-polyfill (backwards, direct imports)

* crypto log

* Fix dev

* Adjust

* Cleanups, no sed mangling

* Cleanup build folder

* Remove exports

* Cleanups

* Adjust env vs util

* Remove Buffer alloc

* Cleant ext vs int

* Rework naming

* Mapping rename

* Combine index & exports

* withWasm wrapper

* pass{String, U8a} -> alloc{String, U8a}

* Internal reuse

* Explict package-only test
2020-11-02 16:39:54 +01:00
Github Actions 2ac68bdb18 [CI Skip] release/beta 1.5.0-beta.14
skip-checks: true
2020-11-01 17:57:29 +00:00
Jaco Greeff 83762d9997 Polyfill require adjust (#128)
* Polyfill require adjust

* Assert in promise for getRandomBytes

* Adjust jest

* Revert explicit overrides (from base)

* use typeof

* Re-add crypto-polyfill (backwards, direct imports)

* crypto log

* Fix dev

* Adjust
2020-11-01 18:53:09 +01:00
Github Actions 311263ad83 [CI Skip] release/beta 1.5.0-beta.13
skip-checks: true
2020-10-27 08:28:27 +00:00
Jaco Greeff b3ae90f330 Stick to base64 2020-10-27 09:23:46 +01:00
Github Actions 327f35143d [CI Skip] release/beta 1.5.0-beta.12
skip-checks: true
2020-10-27 08:08:48 +00:00
Jaco Greeff 35b2bb2d13 Use base122 encoding for WASM buffer (#127) 2020-10-27 09:04:37 +01:00
Github Actions 08b72cc782 [CI Skip] release/beta 1.5.0-beta.11
skip-checks: true
2020-10-26 10:33:23 +00:00
Jaco Greeff f5c439cee4 Bump gh actions, cleanups (#126)
* Bump gh actions, cleanups

* Bumps
2020-10-26 11:29:15 +01:00
Github Actions 0eb440d93a [CI Skip] release/beta 1.5.0-beta.10
skip-checks: true
2020-10-25 12:31:09 +00:00
Jaco Greeff 5860c204e1 Bump berry (#125)
* Bump berry

* Bump dev
2020-10-25 13:27:00 +01:00
Github Actions 597ded7e79 [CI Skip] release/beta 1.5.0-beta.9
skip-checks: true
2020-10-23 10:42:21 +00:00
Jaco Greeff 1c5a9e8152 Bump deps (#124) 2020-10-23 12:37:57 +02:00
EvgenyandEvgeny Svirsky 6bdeda218c Fixed type (#121)
Co-authored-by: Evgeny Svirsky <evgeny@cere.io>
2020-10-23 12:28:56 +02:00
Github Actions e8cfce5ede [CI Skip] release/beta 1.5.0-beta.8
skip-checks: true
2020-10-23 09:37:41 +00:00
Jaco Greeff 2276c06826 Remove usused NIGHLTLY env (#123) 2020-10-23 11:33:10 +02:00
Github Actions bf1307fda2 [CI Skip] release/beta 1.5.0-beta.7
skip-checks: true
2020-10-23 09:19:01 +00:00
Jaco Greeff 696d369a29 Add docs root (#122) 2020-10-23 11:14:40 +02:00
Github Actions d419f2e919 [CI Skip] release/beta 1.5.0-beta.6
skip-checks: true
2020-10-17 08:10:48 +00:00
Jaco Greeff f966423808 Remove (unused) typedoc config (#120) 2020-10-17 10:06:25 +02:00
Github Actions 15a1020321 [CI Skip] release/beta 1.5.0-beta.5
skip-checks: true
2020-10-15 10:47:10 +00:00
Jaco Greeff 29ab5f2e50 Swap to stable Rustc (non-nightly) (#118)
* Swap to stable Rustc (non-nightly)

* Remove toolchain?

* cargo run?
2020-10-15 12:42:50 +02:00
Jaco Greeff 4ce48c701f Bump dev (no lerna) (#116) 2020-10-04 15:39:48 +02:00
Jaco Greeff 52c5a506ac SPDX (#114) 2020-09-17 16:13:19 +02:00
Github Actions ecf02ec26d [CI Skip] release/beta 1.5.0-beta.4
skip-checks: true
2020-09-13 11:14:13 +00:00
Jaco Greeff 6611c3d136 Bump deps (#112) 2020-09-13 13:09:26 +02:00
Github Actions e5a4d644ab [CI Skip] release/beta 1.5.0-beta.3
skip-checks: true
2020-09-08 08:39:46 +00:00
Jaco Greeff 90853435d8 Rewrite yarn.lock (#111) 2020-09-08 10:35:27 +02:00
Github Actions 5211b58995 [CI Skip] release/beta 1.5.0-beta.2
skip-checks: true
2020-09-06 16:10:52 +00:00
Jaco Greeff a68aaeceba Bump deps (#110) 2020-09-06 18:06:14 +02:00
Github Actions cfddf2bdb6 [CI Skip] release/beta 1.5.0-beta.1
skip-checks: true
2020-09-05 06:04:20 +00:00
Jaco Greeff 597c1bf0d0 Bump deps (#109) 2020-09-05 07:59:31 +02:00
Github Actions 25ecaf51bf [CI Skip] release/beta 1.5.0-beta.0
skip-checks: true
2020-09-03 12:48:48 +00:00
Jaco Greeff 445585309b Bump dev (#108) 2020-09-03 14:43:43 +02:00
Github Actions b139d44907 [CI Skip] release/stable 1.4.1
skip-checks: true
2020-08-27 10:11:37 +00:00
Jaco Greeff a81698c61c 1.4 (#107) 2020-08-27 12:07:17 +02:00
Github Actions 9e1d439c55 [CI Skip] release/beta 1.4.0-beta.7
skip-checks: true
2020-08-26 07:35:52 +00:00
Jaco Greeff a18d50f501 Bumps (#106) 2020-08-26 09:30:37 +02:00
Github Actions 55a3e96698 [CI Skip] release/beta 1.4.0-beta.6
skip-checks: true
2020-08-25 18:53:03 +00:00
Jaco Greeff c4ab178926 Re-add bip39ToSeed interface (#104)
* Re-add bip39ToSeed interface

* import
2020-08-25 20:48:28 +02:00
Github Actions be787021c7 [CI Skip] release/beta 1.4.0-beta.5
skip-checks: true
2020-08-19 13:54:11 +00:00
Jaco Greeff 037d857085 Adjust init message with possible fixes (#103) 2020-08-19 15:49:06 +02:00
Github Actions c140ac97e5 [CI Skip] release/beta 1.4.0-beta.4
skip-checks: true
2020-08-18 10:08:04 +00:00
Jaco Greeff 8e370e4c19 Bump deps (#102) 2020-08-18 12:03:01 +02:00
Github Actions 6ab362ea57 [CI Skip] release/beta 1.4.0-beta.3
skip-checks: true
2020-08-12 14:28:01 +00:00
Jaco Greeff 666d679b4e Bump deps (#101) 2020-08-12 16:23:25 +02:00
Github Actions 1228617330 [CI Skip] release/beta 1.4.0-beta.2
skip-checks: true
2020-08-11 12:28:35 +00:00
Jaco Greeff 5da4f3a324 Additional size-related cargo opts (#100) 2020-08-11 14:23:37 +02:00
Github Actions 07742c9d03 [CI Skip] release/beta 1.4.0-beta.1
skip-checks: true
2020-08-10 07:56:01 +00:00
Jaco Greeff af94d0d001 yarn node_modules 2020-08-10 09:51:17 +02:00
Github Actions 8d96c8aed4 [CI Skip] release/beta 1.4.0-beta.0
skip-checks: true
2020-08-09 13:47:00 +00:00
Jaco Greeff 2d48df8986 yarn pnp (#99) 2020-08-09 15:43:06 +02:00
125 changed files with 9265 additions and 14720 deletions
+8 -1
View File
@@ -1 +1,8 @@
4
7
3.2.2
3.2.3
3.2.4
4.0.2
4.1.2
-5
View File
@@ -1,5 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
module.exports = require('./babel.config.js');
+16
View File
@@ -1,4 +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"
-8
View File
@@ -1,8 +0,0 @@
.eslintrc.js
.github/**
.vscode/**
.yarn/**
**/binaryen/*
**/build/*
**/coverage/*
**/node_modules/*
+9 -5
View File
@@ -1,15 +1,19 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const base = require('@polkadot/dev/config/eslint');
const base = require('@polkadot/dev/config/eslint.cjs');
module.exports = {
...base,
ignorePatterns: [
...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.
+4 -1
View File
@@ -8,9 +8,12 @@ jobs:
step: ['lint', 'test', 'build']
name: ${{ matrix.step }}
runs-on: ubuntu-latest
env:
YARN_ENABLE_SCRIPTS: false
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2
- name: ${{ matrix.step }}
run: |
yarn install --immutable | grep -v 'YN0013'
./scripts/install-build-deps.sh
yarn ${{ matrix.step }}
+10 -14
View File
@@ -6,29 +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@v1
- 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
+7 -2
View File
@@ -1,26 +1,31 @@
binaryen*
binaryen/
bindgen/
build/
build-docs/
bytes/
coverage/
docs/.vuepress/dist/
node_modules/
pkg/
target/
tmp/
wabt/
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
.npmrc
.pnp.*
.yarn/*
!.yarn/releases
!.yarn/plugins
.pnp.*
!.yarn/sdks
cc-test-reporter
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>
-1
View File
@@ -1 +0,0 @@
10
+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');
-11
View File
@@ -1,11 +0,0 @@
{
"editor.tabSize": 2,
"files.eol": "\n",
"npm.packageManager": "yarn",
"eslint.enable": true,
"eslint.validate": [
"javascript",
"typescript",
"typescriptreact"
]
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-86
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
+4 -2
View File
@@ -5,7 +5,9 @@ enableProgressBars: false
nodeLinker: node-modules
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.js
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
- path: .yarn/plugins/@yarnpkg/plugin-version.cjs
spec: "@yarnpkg/plugin-version"
yarnPath: .yarn/releases/yarn-2.1.1.js
yarnPath: .yarn/releases/yarn-3.2.0.cjs
+225
View File
@@ -1,92 +1,317 @@
# CHANGELOG
## 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.
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.
Changes:
- Build to ESM by default (with cjs versions via export map)
## 3.2.4 Feb 24, 2021
Changes:
- Cleanup implicit dependencies, perform base64 decoding using base64-js
## 3.2.3 Feb 16, 2021
Changes:
- Change package detect import to use `.js` source, not `.json`
## 3.2.2 Jan 24, 2021
Changes:
- Remove `module` field in `package.json`
## 3.2.1 Jan 22, 2021
Contributed:
- Expose sr25519 `ext_vrf_{sign, verify}` methods (Thanks to https://github.com/stiiifff)
Changes:
- Add explicit `.editorconfig` for Rust sources
- Remove unused code bundles (`vrf_{sign,verify}_extra`, `secp256k1` with tests)
- Test run wrapper cleanups
## 3.1.1 Dec 19, 2020
Changes:
- Single-instance package detection
- Adjust WASM inflate with localized methods
## 3.0.1 Dec 13, 2020
**Important** This assumes `@polkadot/util` 5+ peerDependencies
**Important** While this package contains no external interface changes, it doe now compile and ship both cjs and esm modules. This means that modern bundlers will have more information for tree-shaking available. Additionally when using Node with `.mjs` extensions, the esm version imports will be used on recent Node versions. Adding an export map, as here, may have some impacts so a major semver bump is advised. There may be (small) dragons hiding in the dark corners...
Changes:
- Build and expose both cjs and esm via exports map
- Split wasm and asmjs files into the `@polkadot/wasm-crypto-{wasm,asmjs}` packages
- Add fflate WASM compression, with 180K raw savings (37K over-the-wire)
- Convert the package to full TypeScript sources
## 2.0.1 Nov 8, 2020
Changes:
- Rework generation of WASM interfaces (proper cross-platform JS support)
- Remove explicit `crypto` dependency, this is now applied by `@polkadot/x-randomvalues`
- Build via xargo for panic abort, an overall small sizes without stack (Pinned nightly)
- Move Rust library sources in to `rs/` subfolder
## 1.4.1 Aug 27, 2020
Changes:
- Re-add the BTC/ETH compatible `bip39ToSeed` dropped in the previous version (ETH-compatible pairs)
## 1.3.1 Aug 9, 2020
Changes:
- Add `scrypt` function for KDF generation
- Remove `bip39ToSeed`, we only use the `bip39ToMiniSecret` variant in Substrate
- Update ed25519-dalek to 1.0.0-pre.4
- Rework generation based on latest wasm-pack generator
## 1.2.1 Feb 29, 2020
Changes:
- Adjust build process for smaller wasm bundle outputs (~50K dropped from base bundle)
- Unpin nightly from nightly-2020-02-17 version
- Swap to yarn 2 and add support for use by yarn 2 projects
## 1.1.1 Feb 24, 2020
- **Important** The sr25519 interface dropped the use of `verify_simple_preaudit_deprecated` for signature verification, instead it now uses `verify_simple`. Only schnorrkel 0.8+ signatures will now pass verification. This is a follow-up of the 0.1 signing support that was dropped in a previous version.
Changes:
- Rework schnorrkel signatures test vectors based on the above change (Rust, WASM and ASM.js tests)
- Rust nightly pinned to last-known-working 2020-02-17 on CI (compiler issues, should to be reverted in a future release)
## 1.0.1 Feb 15, 2020
Changes:
- No functionality changes from 0.20.1. The interfaces here are stable in the current iteration.
## 0.20.1 Jan 30, 2020
Changes:
- Pull in schnorrkel 0.8.5 for full Substrate 2.x compatibility
## 0.14.1 Sep 09, 2019
Changes:
- No functionality changes at all, everything done is "under the hood" to give the codebase better maintainability
## 0.13.1 Jul 20, 2019
Changes:
- Added an asm.js fallback which is active for React Native via the `"react-native"` entry in `package.json`. Ensure that you run the build step with the `NODE_OPTIONS=--max_old_space_size=8192` flags, since the asm.js bundle is large. (For RN the full command would therefore be `NODE_OPTIONS=--max_old_space_size=8192 npm start`)
## 0.12.1 Jul 17, 2019
Changes:
- Remove deprecated `@polkadot/wasm-schnorrkel` & `@polkadot/wasm-dalek-ed25519` source (all combined in `@polkadot/wasm-crypto`, was kept for historical purposes)
- Security dependency bumps
- Updated Rust `hex-literal` for recent versions of the compiler (used in tests only)
## 0.11.1 May 31, 2019
Changes:
- Security dependency bumps
## 0.10.1 May 09, 2019
Changes:
- w3f/schnorrkel updated to 0.1.1 as per substrate
- Added known subkey signature test (Rust & JS)
## 0.9.1 Apr 29, 2019
Changes:
- Dependency bumps
## 0.8.1 Mar 31, 2019
Changes:
- Pull ed25519 & sr25519 into `@polkadot/wasm-crypto` as well (smaller final size)
- Disable build/publish of `wasm-dalek-ed25519` & `wasm-schnorrkel`
- Improve error messaging, instead of `__wasm_malloc of null`
## 0.7.1 Mar 30, 2019
Changes:
- Fix build scripts to properly attach errors in the log (dropped in 0.6.1)
## 0.6.1 Mar 27, 2019
Changes:
- Log init errors for both non-WebAssembly usage as well as WebAssembly errors
## 0.5.1 Mar 23, 2019
Changes:
- Add password argument to bip39ToSeed
## 0.4.1 Mar 23, 2019
Changes:
- Add bip39ToSeed
## 0.3.1 Mar 23, 2019
Changes:
- Add wasm-dalek-ed25519 for all used crypto there
- Add keccak256
- Try secp256k1 (bloating code, not used atm)
## 0.2.1 Mar 20, 2019
Changes:
- Add basic crypto functions, creation of wasm-crypto package
- blake2, bip39, sha2, xxhash
## 0.1.1 Mar 18, 2019
Changes:
- Initial release
+5
View File
@@ -0,0 +1,5 @@
384 Jaco 5.0.1 (#312)
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)
+4
View File
@@ -0,0 +1,4 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
module.exports = require('@polkadot/dev/config/babel-config-cjs.cjs');
-5
View File
@@ -1,5 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
module.exports = require('@polkadot/dev/config/babel');
View File
+12
View File
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=0.5, maximum-scale=1">
<meta http-equiv="refresh" content="0;URL='https://polkadot.js.org/docs/'" />
<title>Redirecting to https://polkadot.js.org/docs/</title>
</head>
<body>
Redirecting to <a href="https://polkadot.js.org/docs/">https://polkadot.js.org/docs/</a>
</body>
</html>
+12
View File
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="initial-scale=0.5, maximum-scale=1">
<meta http-equiv="refresh" content="0;URL='https://polkadot.js.org/docs/'" />
<title>Redirecting to https://polkadot.js.org/docs/</title>
</head>
<body>
Redirecting to <a href="https://polkadot.js.org/docs/">https://polkadot.js.org/docs/</a>
</body>
</html>
+13
View File
@@ -0,0 +1,13 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const config = require('@polkadot/dev/config/jest.cjs');
module.exports = {
...config,
moduleNameMapper: {
'@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'
}
};
-15
View File
@@ -1,15 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
const config = require('@polkadot/dev/config/jest');
module.exports = Object.assign({}, config, {
moduleNameMapper: {
'@polkadot/wasm-(schnorrkel)(.*)$': '<rootDir>/packages/wasm-$1/src/$2'
},
modulePathIgnorePatterns: [
'<rootDir>/packages/wasm-schnorrkel/build'
],
resolver: './jest.resolver.js'
});
-11
View File
@@ -1,11 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
const path = require('path');
module.exports = function resolver (file, config) {
return file.includes('package.json')
? path.join(config.basedir.replace('/src', '/'), file)
: config.defaultResolver(file, config);
};
-13
View File
@@ -1,13 +0,0 @@
{
"npmClient": "yarn",
"useWorkspaces": true,
"command": {
"publish": {
"allowBranch": "master"
}
},
"packages": [
"packages/*"
],
"version": "1.3.1"
}
+28 -12
View File
@@ -1,25 +1,41 @@
{
"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": "5.0.1",
"workspaces": [
"packages/*"
],
"resolutions": {
"babel-core": "^7.0.0-bridge.0"
},
"scripts": {
"build": "NIGHTLY= ./scripts/build.sh",
"build:release": "NIGHTLY= ./scripts/build-release.sh",
"lint": "polkadot-dev-run-lint",
"build": "yarn build:wasm",
"build:js": "./scripts/build-js.sh",
"build:release": "polkadot-ci-ghact-build",
"build:rollup": "polkadot-exec-rollup --config",
"build:wasm": "./scripts/build.sh",
"clean": "./scripts/clean.sh",
"lint": "polkadot-dev-run-lint",
"postinstall": "polkadot-dev-yarn-only",
"test": "./scripts/test-rust.sh"
"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"
},
"devDependencies": {
"@babel/core": "^7.11.1",
"@polkadot/dev": "^0.55.35"
"@babel/core": "^7.17.8",
"@polkadot/dev": "^0.65.97",
"fflate": "^0.7.3",
"override-require": "^1.1.1"
},
"version": "1.3.1"
"resolutions": {
"typescript": "^4.6.2"
}
}
+31
View File
@@ -0,0 +1,31 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/wasm/issues",
"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": "5.0.1",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.17.8"
},
"devDependencies": {
"@polkadot/util": "^8.5.1"
},
"peerDependencies": {
"@polkadot/util": "*"
}
}
+8
View File
@@ -0,0 +1,8 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-asmjs authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { asmJsInit as _asmJsInit } from './cjs/data.js';
export { packageInfo } from './packageInfo';
export const asmJsInit = _asmJsInit;
+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;
exports.asmJsInit = asmJsInit;
@@ -0,0 +1,3 @@
{
"type": "commonjs"
}
@@ -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);
+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';
@@ -0,0 +1,6 @@
// Copyright 2017-2022 @polkadot/wasm-crypto-asmjs authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/wasm-crypto-asmjs', path: 'auto', type: 'auto', version: '5.0.1' };
@@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src"
},
"references": []
}
+31
View File
@@ -0,0 +1,31 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/wasm/issues",
"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": "5.0.1",
"main": "index.js",
"dependencies": {
"@babel/runtime": "^7.17.8"
},
"devDependencies": {
"@polkadot/util": "^8.5.1"
},
"peerDependencies": {
"@polkadot/util": "*"
}
}
+22
View File
@@ -0,0 +1,22 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
export function base64Decode (data: string): Uint8Array {
const bytes = [];
let byte = 0;
let bits = 0;
for (let i = 0; i < data.length && data[i] !== '='; i++) {
// each character represents 6 bits
byte = (byte << 6) | chars.indexOf(data[i]);
// each byte needs to contain 8 bits
if ((bits += 6) >= 8) {
bytes.push((byte >>> (bits -= 8)) & 0xff);
}
}
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 { base64Decode } from './base64';
import { bytes, sizeUncompressed } from './bytes';
import { unzlibSync } from './fflate';
export { packageInfo } from './packageInfo';
export const wasmBytes = unzlibSync(base64Decode(bytes), new Uint8Array(sizeUncompressed));
+10
View File
@@ -0,0 +1,10 @@
// Copyright 2019-2022 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { bytes as _bytes, sizeCompressed as _sizeCompressed, sizeUncompressed as _sizeUncompressed } from './cjs/bytes';
export const bytes = _bytes;
export const sizeCompressed = _sizeCompressed;
export const sizeUncompressed = _sizeUncompressed;
+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
exports.bytes = '';
exports.sizeCompressed = 0;
exports.sizeUncompressed = 0;
@@ -0,0 +1,3 @@
{
"type": "commonjs"
}
@@ -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);
+342
View File
@@ -0,0 +1,342 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// MIT License
//
// Copyright (c) 2020 Arjun Barrett
//
// Copied from https://github.com/101arrowz/fflate/blob/73c737941ec89d85cdf0ad39ee6f26c5fdc95fd7/src/index.ts
// This only contains the unzlibSync function, no compression, no async, no workers
//
// These 2 issues are addressed as a short-term, stop-gap solution
// - https://github.com/polkadot-js/api/issues/2963
// - https://github.com/101arrowz/fflate/issues/17
//
// 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 (compression is still being done in the build with fflate)
/* eslint-disable */
// inflate state
type InflateState = {
// lmap
l?: Uint16Array;
// dmap
d?: Uint16Array;
// lbits
m?: number;
// dbits
n?: number;
// final
f?: number;
// pos
p?: number;
// byte
b?: number;
// lstchk
i?: boolean;
};
// aliases for shorter compressed code (most minifers don't do this)
const u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;
// code length index map
const clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
// fixed length extra bits
const fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);
// fixed distance extra bits
// see fleb note
const fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);
// get base, reverse index map from extra bits
const freb = (eb: Uint8Array, start: number) => {
const b = new u16(31);
for (let i = 0; i < 31; ++i) {
b[i] = start += 1 << eb[i - 1];
}
// numbers here are at max 18 bits
const r = new u32(b[30]);
for (let i = 1; i < 30; ++i) {
for (let j = b[i]; j < b[i + 1]; ++j) {
r[j] = ((j - b[i]) << 5) | i;
}
}
return [b, r] as const;
}
const [fl, revfl] = freb(fleb, 2);
// we can ignore the fact that the other numbers are wrong; they never happen anyway
fl[28] = 258, revfl[258] = 28;
const [fd] = freb(fdeb, 0);
// map of value to reverse (assuming 16 bits)
const rev = new u16(32768);
for (let i = 0; i < 32768; ++i) {
// reverse table algorithm from SO
let x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);
x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);
x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);
rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;
}
// create huffman tree from u8 "map": index -> code length for code index
// mb (max bits) must be at most 15
// TODO: optimize/split up?
const hMap = ((cd: Uint8Array, mb: number, r: 0 | 1) => {
const s = cd.length;
// index
let i = 0;
// u16 "map": index -> # of codes with bit length = index
const l = new u16(mb);
// length of cd must be 288 (total # of codes)
for (; i < s; ++i) ++l[cd[i] - 1];
// u16 "map": index -> minimum code for bit length = index
const le = new u16(mb);
for (i = 0; i < mb; ++i) {
le[i] = (le[i - 1] + l[i - 1]) << 1;
}
let co: Uint16Array;
if (r) {
// u16 "map": index -> number of actual bits, symbol for code
co = new u16(1 << mb);
// bits to remove for reverser
const rvb = 15 - mb;
for (i = 0; i < s; ++i) {
// ignore 0 lengths
if (cd[i]) {
// num encoding both symbol and bits read
const sv = (i << 4) | cd[i];
// free bits
const r = mb - cd[i];
// start value
let v = le[cd[i] - 1]++ << r;
// m is end value
for (const m = v | ((1 << r) - 1); v <= m; ++v) {
// every 16 bit value starting with the code yields the same result
co[rev[v] >>> rvb] = sv;
}
}
}
} else {
co = new u16(s);
for (i = 0; i < s; ++i) co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);
}
return co;
});
// fixed length tree
const flt = new u8(288);
for (let i = 0; i < 144; ++i) flt[i] = 8;
for (let i = 144; i < 256; ++i) flt[i] = 9;
for (let i = 256; i < 280; ++i) flt[i] = 7;
for (let i = 280; i < 288; ++i) flt[i] = 8;
// fixed distance tree
const fdt = new u8(32);
for (let i = 0; i < 32; ++i) fdt[i] = 5;
// fixed length map
const flrm = hMap(flt, 9, 1);
// fixed distance map
const fdrm = hMap(fdt, 5, 1);
// read d, starting at bit p and mask with m
const bits = (d: Uint8Array, p: number, m: number) => {
const o = p >>> 3;
return ((d[o] | (d[o + 1] << 8)) >>> (p & 7)) & m;
}
// read d, starting at bit p continuing for at least 16 bits
const bits16 = (d: Uint8Array, p: number) => {
const o = p >>> 3;
return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >>> (p & 7));
}
// get end of byte
const shft = (p: number) => (p >>> 3) + (p & 7 && 1);
// typed array slice - allows garbage collector to free original reference,
// while being more compatible than .slice
const slc = <T extends Uint8Array | Uint16Array | Uint32Array>(v: T, s: number, e?: number): T => {
if (s == null || s < 0) s = 0;
if (e == null || e > v.length) e = v.length;
// can't use .constructor in case user-supplied
const n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s) as T;
n.set(v.subarray(s, e));
return n;
}
// find max of array
const max = (a: Uint8Array | number[]) => {
let m = a[0];
for (let i = 1; i < a.length; ++i) {
if (a[i] > m) m = a[i];
}
return m;
};
// expands raw DEFLATE data
const inflt = (dat: Uint8Array, buf?: Uint8Array, st?: InflateState) => {
const noSt = !st || st.i;
if (!st) st = {};
// source length
const sl = dat.length;
// have to estimate size
const noBuf = !buf || !noSt;
// Assumes roughly 33% compression ratio average
if (!buf) buf = new u8(sl * 3);
// ensure buffer can fit at least l elements
const cbuf = (l: number) => {
let bl = buf!.length;
// need to increase size to fit
if (l > bl) {
// Double or set to necessary, whichever is greater
const nbuf = new u8(Math.max(bl << 1, l));
nbuf.set(buf!);
buf = nbuf;
}
};
// last chunk bitpos bytes
let final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
if (final && !lm) return buf;
// total bits
const tbts = sl << 3;
do {
if (!lm) {
// BFINAL - this is only 1 when last chunk is next
st.f = final = bits(dat, pos, 1);
// type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman
const type = bits(dat, pos + 1, 3);
pos += 3;
if (!type) {
// go to end of byte boundary
const s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
if (t > sl) {
if (noSt) throw 'unexpected EOF';
break;
}
// ensure size
if (noBuf) cbuf(bt + l);
// Copy over uncompressed data
buf.set(dat.subarray(s, t), bt);
// Get new bitpos, update byte count
st.b = bt += l, st.p = pos = t << 3;
continue;
}
else if (type == 1) lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
else if (type == 2) {
// literal lengths
const hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
const tl = hLit + bits(dat, pos + 5, 31) + 1;
pos += 14;
// length+distance tree
const ldt = new u8(tl);
// code length tree
const clt = new u8(19);
for (let i = 0; i < hcLen; ++i) {
// use index map to get real code
clt[clim[i]] = bits(dat, pos + i * 3, 7);
}
pos += hcLen * 3;
// code lengths bits
const clb = max(clt), clbmsk = (1 << clb) - 1;
if (!noSt && pos + tl * (clb + 7) > tbts) break;
// code lengths map
const clm = hMap(clt, clb, 1);
for (let i = 0; i < tl;) {
const r = clm[bits(dat, pos, clbmsk)];
// bits read
pos += r & 15;
// symbol
const s = r >>> 4;
// code length to copy
if (s < 16) {
ldt[i++] = s;
} else {
// copy count
let c = 0, n = 0;
if (s == 16) n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
else if (s == 17) n = 3 + bits(dat, pos, 7), pos += 3;
else if (s == 18) n = 11 + bits(dat, pos, 127), pos += 7;
while (n--) ldt[i++] = c;
}
}
// length tree distance tree
const lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
// max length bits
lbt = max(lt);
// max dist bits
dbt = max(dt);
lm = hMap(lt, lbt, 1);
dm = hMap(dt, dbt, 1);
} else throw 'invalid block type';
if (pos > tbts) throw 'unexpected EOF';
}
// Make sure the buffer can hold this + the largest possible addition
// maximum chunk size (practically, theoretically infinite) is 2^17;
if (noBuf) cbuf(bt + 131072);
const lms = (1 << lbt!) - 1, dms = (1 << dbt!) - 1;
const mxa = lbt! + dbt! + 18;
while (noSt || pos + mxa < tbts) {
// bits read, code
const c = lm[bits16(dat, pos) & lms], sym = c >>> 4;
pos += c & 15;
if (pos > tbts) throw 'unexpected EOF';
if (!c) throw 'invalid length/literal';
if (sym < 256) buf[bt++] = sym;
else if (sym == 256) {
lm = undefined;
break;
}
else {
let add = sym - 254;
// no extra bits needed if less
if (sym > 264) {
// index
const i = sym - 257, b = fleb[i];
add = bits(dat, pos, (1 << b) - 1) + fl[i];
pos += b;
}
// dist
const d = dm![bits16(dat, pos) & dms], dsym = d >>> 4;
if (!d) throw 'invalid distance';
pos += d & 15;
let dt = fd[dsym];
if (dsym > 3) {
const b = fdeb[dsym];
dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;
}
if (pos > tbts) throw 'unexpected EOF';
if (noBuf) cbuf(bt + 131072);
const end = bt + add;
for (; bt < end; bt += 4) {
buf[bt] = buf[bt - dt];
buf[bt + 1] = buf[bt + 1 - dt];
buf[bt + 2] = buf[bt + 2 - dt];
buf[bt + 3] = buf[bt + 3 - dt];
}
bt = end;
}
}
st.l = lm, st.p = pos, st.b = bt;
if (lm) final = 1, st.m = lbt, st.d = dm, st.n = dbt;
} while (!final);
return bt == buf.length ? buf : slc(buf, 0, bt);
}
// zlib valid
const zlv = (d: Uint8Array) => {
if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31)) throw 'invalid zlib data';
if (d[1] & 32) throw 'invalid zlib data: preset dictionaries not supported';
}
/**
* Expands Zlib data
* @param data The data to decompress
* @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.
* @returns The decompressed version of the data
*/
export function unzlibSync(data: Uint8Array, out?: Uint8Array) {
return inflt((zlv(data), data.subarray(2, -4)), out);
}
+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';
@@ -0,0 +1,6 @@
// Copyright 2017-2022 @polkadot/wasm-crypto-wasm authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/wasm-crypto-wasm', path: 'auto', type: 'auto', version: '5.0.1' };
@@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src"
},
"references": []
}
+479 -260
View File
File diff suppressed because it is too large Load Diff
+17 -10
View File
@@ -3,32 +3,36 @@
[package]
authors = ["Jaco Greeff <jacogr@gmail.com>"]
description = "WASM bindings to Rust crypto libaries."
description = "WASM bindings to Rust crypto libraries."
edition = "2018"
license = "Apache-2.0"
name = "wasm"
publish = false
repository = "https://github.com/polkadot-js/wasm/"
resolver = "2"
version = "0.0.0"
[lib]
crate-type = ["cdylib", "rlib"]
crate-type = ["cdylib"]
[dependencies]
backtrace = "0.3.38"
blake2-rfc = "0.2.18"
byteorder = "1.3.1"
ed25519-dalek = { version = "1.0.0-pre.4", features = ["nightly"] }
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"
libsecp256k1 = { version = "0.7.0", default-features = false, features=["hmac", "lazy-static-context"] }
merlin = { version = "2.0", default-features = false }
pbkdf2 = { version = "0.3.0", default-features = false }
schnorrkel = { version = "0.9.1", features = ["nightly", "preaudit_deprecated", "u64_backend"] }
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]
@@ -36,8 +40,11 @@ hex-literal = "0.2.0"
rand = { version = "0.7.3", features = ["wasm-bindgen"] }
[profile.release]
codegen-units = 1
debug = false
debug-assertions = false
incremental = false
lto = true
opt-level = "z"
[package.metadata.wasm-pack.profile.release]
wasm-opt = false
panic = "abort"
rpath = false
+1 -1
View File
@@ -12,7 +12,7 @@ Use it -
```js
const { u8aToHex } = require('@polkadot/util');
const { bio39Generate, bip39ToSeed, waitReady } = require('@polkadot/wasm-crypto');
const { bip39Generate, bip39ToSeed, waitReady } = require('@polkadot/wasm-crypto');
async function main () {
// first wait until the WASM has been loaded (async init)
+2
View File
@@ -0,0 +1,2 @@
[dependencies]
std = { default-features = false, features = ["panic_immediate_abort"] }
+35 -21
View File
@@ -1,30 +1,44 @@
{
"name": "@polkadot/wasm-crypto",
"version": "1.3.1",
"author": "Jaco Greeff <jacogr@gmail.com>",
"files": [
"crypto-polyfill.js",
"exports.js",
"index.d.ts",
"index.js",
"wasm.d.ts",
"wasm.js",
"wasm_asm.js",
"wasm_asm_stub.js",
"wasm_promise.js",
"wasm_wasm.js"
],
"react-native": {
"./wasm_asm_stub.js": "./wasm_asm.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",
"./initOnlyAsm.js",
"./initOnlyAsm.cjs",
"./initOnlyWasm.js",
"./initOnlyWasm.cjs",
"./initWasmAsm.js",
"./initWasmAsm.cjs"
],
"type": "module",
"version": "5.0.1",
"main": "index.js",
"types": "index.d.ts",
"dependencies": {
"@babel/runtime": "^7.17.8",
"@polkadot/wasm-crypto-asmjs": "^5.0.1",
"@polkadot/wasm-crypto-wasm": "^5.0.1"
},
"devDependencies": {
"@polkadot/dev": "^0.55.35",
"@polkadot/util": "^3.0.1",
"override-require": "^1.1.1"
"@polkadot/util": "^8.5.1",
"@polkadot/x-randomvalues": "^8.5.1"
},
"peerDependencies": {
"@polkadot/util": "*"
"@polkadot/util": "*",
"@polkadot/x-randomvalues": "*"
}
}
+91
View File
@@ -0,0 +1,91 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import type { WasmCryptoInstance } from './types';
import { assert, stringToU8a, u8aToString } from '@polkadot/util';
type PopFirst<T extends unknown[]> =
T extends [WasmCryptoInstance, ...infer N]
? N
: [];
interface Bridge {
cachegetInt32: Int32Array | null;
cachegetUint8: Uint8Array | null;
type: 'wasm' | 'asm';
wasm: WasmCryptoInstance | null;
wasmPromise: Promise<void> | null;
}
export const __bridge: Bridge = {
cachegetInt32: null,
cachegetUint8: null,
type: 'wasm',
wasm: null,
wasmPromise: null
};
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 __bridge.wasm!;
}
export function getInt32 (): Int32Array {
if (__bridge.cachegetInt32 === null || __bridge.cachegetInt32.buffer !== __bridge.wasm!.memory.buffer) {
__bridge.cachegetInt32 = new Int32Array(__bridge.wasm!.memory.buffer);
}
return __bridge.cachegetInt32;
}
export function getUint8 (): Uint8Array {
if (__bridge.cachegetUint8 === null || __bridge.cachegetUint8.buffer !== __bridge.wasm!.memory.buffer) {
__bridge.cachegetUint8 = new Uint8Array(__bridge.wasm!.memory.buffer);
}
return __bridge.cachegetUint8;
}
export function getU8a (ptr: number, len: number): Uint8Array {
return getUint8().subarray(ptr / 1, ptr / 1 + len);
}
export function getString (ptr: number, len: number): string {
return u8aToString(getU8a(ptr, len));
}
export function allocU8a (arg: Uint8Array): [number, number] {
const ptr = __bridge.wasm!.__wbindgen_malloc(arg.length * 1);
getUint8().set(arg, ptr / 1);
return [ptr, arg.length];
}
export function allocString (arg: string): [number, number] {
return allocU8a(stringToU8a(arg));
}
export function resultU8a (): Uint8Array {
const r0 = getInt32()[8 / 4 + 0];
const r1 = getInt32()[8 / 4 + 1];
const ret = getU8a(r0, r1).slice();
__bridge.wasm!.__wbindgen_free(r0, r1 * 1);
return ret;
}
export function resultString (): string {
return u8aToString(resultU8a());
}
+222
View File
@@ -0,0 +1,222 @@
// 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 { setWasmOnlyPromise } 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;
});
let secpLazyInit = false;
export const secp256k1FromSeed = withWasm((wasm, seckey: Uint8Array): Uint8Array => {
// HACK In an asm.js environment, the static initialization seems to trip up the
// first usage of the keypair generation
// https://github.com/polkadot-js/wasm/issues/307
if (!secpLazyInit && __bridge.type === 'asm') {
wasm.ext_secp_from_seed(8, ...allocU8a(seckey));
resultU8a();
}
secpLazyInit = true;
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 function waitReady (): Promise<boolean> {
return (
__bridge.wasmPromise || setWasmOnlyPromise()
)
.then(() => isReady())
.catch(() => 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];
+11
View File
@@ -0,0 +1,11 @@
// Copyright 2017-2022 @polkadot/wasm-crypto 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);
+94
View File
@@ -0,0 +1,94 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint-disable camelcase */
import { getRandomValues } from '@polkadot/x-randomvalues';
import { getString, getU8a } from './bridge';
const DEFAULT_CRYPTO = { getRandomValues };
const DEFAULT_SELF = { crypto: DEFAULT_CRYPTO };
const heap: Array<unknown> = new Array(32).fill(undefined).concat(undefined, null, true, false);
let heapNext = heap.length;
function getObject (idx: number): unknown {
return heap[idx];
}
function dropObject (idx: number) {
if (idx < 36) {
return;
}
heap[idx] = heapNext;
heapNext = idx;
}
function takeObject (idx: number): unknown {
const ret = getObject(idx);
dropObject(idx);
return ret;
}
function addObject (obj: unknown): number {
if (heapNext === heap.length) {
heap.push(heap.length + 1);
}
const idx = heapNext;
heapNext = heap[idx] as number;
heap[idx] = obj;
return idx;
}
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);
}
export function __wbg_require_604837428532a733 (ptr: number, len: number): never {
throw new Error(`Unable to require ${getString(ptr, len)}`);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function __wbg_crypto_968f1772287e2df0 (_idx: number): number {
return addObject(DEFAULT_CRYPTO);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function __wbg_getRandomValues_a3d34b4fee3c2869 (_idx: number): number {
return addObject(DEFAULT_CRYPTO.getRandomValues);
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function __wbg_getRandomValues_f5e14ab7ac8e995d (_arg0: number, ptr: number, len: number): void {
DEFAULT_CRYPTO.getRandomValues(getU8a(ptr, len));
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export function __wbg_randomFillSync_d5bd2d655fdf256a (_idx: number, _ptr: number, _len: number): never {
throw new Error('randomFillsync is not available');
// getObject(idx).randomFillSync(getU8a(ptr, len));
}
export function __wbindgen_object_drop_ref (idx: number): void {
takeObject(idx);
}
export function abort (): never {
throw new Error('abort');
}
+6
View File
@@ -0,0 +1,6 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
export * from './bundle';
+41
View File
@@ -0,0 +1,41 @@
// 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 imports from './imports';
async function createPromise (wasmBytes: Uint8Array | null, asmFn: AsmCreator | null): Promise<void> {
try {
assert(typeof WebAssembly !== 'undefined' && wasmBytes && wasmBytes.length, 'WebAssembly is not available in your environment');
const source = await WebAssembly.instantiate(wasmBytes, { wbg: imports });
__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(imports);
} else {
console.error('FATAL: Unable to initialize @polkadot/wasm-crypto');
console.error(error);
__bridge.wasm = null;
}
}
}
export function setPromise (wasmBytes: Uint8Array | null, asmFn: AsmCreator | null): Promise<void> {
__bridge.wasmPromise = createPromise(wasmBytes, asmFn);
return __bridge.wasmPromise;
}
export function setWasmOnlyPromise (): Promise<void> {
return setPromise(wasmBytes, null);
}
+8
View File
@@ -0,0 +1,8 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { asmJsInit } from '@polkadot/wasm-crypto-asmjs';
import { setPromise } from './init';
setPromise(null, asmJsInit).catch(() => undefined);
+6
View File
@@ -0,0 +1,6 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { setWasmOnlyPromise } from './init';
setWasmOnlyPromise().catch(() => undefined);
+9
View File
@@ -0,0 +1,9 @@
// 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 { setPromise } from './init';
setPromise(wasmBytes, asmJsInit).catch(() => undefined);
@@ -1,21 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
const crypto = require('crypto');
if (!global.crypto) {
global.crypto = {};
}
if (!global.crypto.getRandomValues) {
global.crypto.getRandomValues = function (arr) {
const buffer = crypto.randomBytes(arr.length);
return buffer.reduce((arr, value, index) => {
arr[index] = value;
return arr;
}, arr);
};
}
-51
View File
@@ -1,51 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
/* eslint-disable sort-keys */
const { assert } = require('@polkadot/util');
const INIT_ERRROR = '@polkadot/wasm-crypto has not been initialized';
module.exports = function (stubbed) {
const wrapReady = (fn) =>
(...params) => {
assert(stubbed.isReady(), INIT_ERRROR);
return fn(...params);
};
return {
bip39Generate: wrapReady(stubbed.ext_bip39_generate),
bip39ToEntropy: wrapReady(stubbed.ext_bip39_to_entropy),
bip39ToMiniSecret: wrapReady(stubbed.ext_bip39_to_mini_secret),
bip39ToSeed: wrapReady(stubbed.ext_bip39_to_seed),
bip39Validate: wrapReady(stubbed.ext_bip39_validate),
ed25519KeypairFromSeed: wrapReady(stubbed.ext_ed_from_seed),
ed25519Sign: wrapReady(stubbed.ext_ed_sign),
ed25519Verify: wrapReady(stubbed.ext_ed_verify),
sr25519DeriveKeypairHard: wrapReady(stubbed.ext_sr_derive_keypair_hard),
sr25519DeriveKeypairSoft: wrapReady(stubbed.ext_sr_derive_keypair_soft),
sr25519DerivePublicSoft: wrapReady(stubbed.ext_sr_derive_public_soft),
sr25519KeypairFromSeed: wrapReady(stubbed.ext_sr_from_seed),
sr25519Sign: wrapReady(stubbed.ext_sr_sign),
sr25519Verify: wrapReady(stubbed.ext_sr_verify),
blake2b: wrapReady(stubbed.ext_blake2b),
keccak256: wrapReady(stubbed.ext_keccak256),
pbkdf2: wrapReady(stubbed.ext_pbkdf2),
scrypt: wrapReady(stubbed.ext_scrypt),
// secp256k1IsRecoverable: wrapReady(stubbed.ext_secp256k1_is_recoverable);
// secp256k1Recover: wrapReady(stubbed.ext_secp256k1_recover);
sha512: wrapReady(stubbed.ext_sha512),
twox: wrapReady(stubbed.ext_twox),
isReady: stubbed.isReady,
waitReady: stubbed.waitReady
};
};
-31
View File
@@ -1,31 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
export function bip39Generate (words: 12 | 15 | 18 | 21 | 24): string;
export function bip39ToEntropy (phrase: string): Uint8Array;
export function bip39ToMiniSecret (phrase: string, password: string): Uint8Array;
export function bip39Validate (phrase: string): boolean;
export function ed25519KeypairFromSeed (seed: Uint8Array): Uint8Array;
export function ed25519Sign (publicKey: Uint8Array, secretKey: Uint8Array, message: Uint8Array): Uint8Array;
export function ed25519Verify (signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array): boolean;
export function sr25519DeriveKeypairHard (pair: Uint8Array, chainCode: Uint8Array): Uint8Array;
export function sr25519DeriveKeypairSoft (pair: Uint8Array, chainCode: Uint8Array): Uint8Array;
export function sr25519DerivePublicSoft (publicKey: Uint8Array, chainCode: Uint8Array): Uint8Array;
export function sr25519KeypairFromSeed (seed: Uint8Array): Uint8Array;
export function sr25519Sign (publicKey: Uint8Array, secretKey: Uint8Array, message: Uint8Array): Uint8Array;
export function sr25519Verify (signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array): boolean;
export function blake2b (data: Uint8Array, key: Uint8Array, byteSize: number): Uint8Array;
export function keccak256 (data: Uint8Array): Uint8Array;
export function pbkdf2 (data: Uint8Array, salt: Uint8Array, rounds: number): Uint8Array;
export function scrypt (password: Uint8Array, salt: Uint8Array, log2N: number, r: number, p: number): Uint8Array;
// export function secp256k1IsRecoverable (message: Uint8Array, signature: Uint8Array): number;
// export function secp256k1Recover (message: Uint8Array, signature: Uint8Array): Uint8Array;
export function sha512 (data: Uint8Array): Uint8Array;
export function twox (data: Uint8Array, rounds: number): Uint8Array;
export function isReady (): boolean;
export function waitReady (): Promise<boolean>;
-7
View File
@@ -1,7 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
const stubbed = require('./wasm');
module.exports = require('./exports')(stubbed);
@@ -1,5 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
module.exports = {};
@@ -1,26 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
const pkg = require('./package.json');
const asm = require('./wasm_asm_stub');
const bytes = require('./wasm_wasm');
const imports = require('./wasm');
module.exports = async function createExportPromise () {
try {
const { instance } = await WebAssembly.instantiate(bytes, { __wbindgen_placeholder__: imports });
return instance.exports;
} catch (error) {
// if we have a valid supplied asm.js, return that
if (asm && asm.ext_blake2b) {
return asm;
}
console.error(`ERROR: Unable to initialize ${pkg.name} ${pkg.version}`);
console.error(error);
return null;
}
};
+15 -3
View File
@@ -1,12 +1,24 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Use `wee_alloc` as the global allocator.
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
#[path = "rs/bip39.rs"]
pub mod bip39;
#[path = "rs/ed25519.rs"]
pub mod ed25519;
#[path = "rs/hashing.rs"]
pub mod hashing;
#[path = "rs/secp256k1.rs"]
pub mod secp256k1;
#[path = "rs/sr25519.rs"]
pub mod sr25519;
#[path = "rs/vrf.rs"]
pub mod vrf;
+6
View File
@@ -0,0 +1,6 @@
// Copyright 2017-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/wasm-crypto', path: 'auto', type: 'auto', version: '5.0.1' };
+10
View File
@@ -0,0 +1,10 @@
root = true
[*]
indent_style=tab
indent_size=tab
tab_width=4
end_of_line=lf
charset=utf-8
trim_trailing_whitespace=true
max_line_length=100
insert_final_newline=true
@@ -1,8 +1,7 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
use bip39::{Mnemonic, MnemonicType, Language};
use bip39::{Mnemonic, MnemonicType, Language, Seed};
use hmac::Hmac;
use pbkdf2::pbkdf2;
use sha2::Sha512;
@@ -15,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
@@ -26,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
@@ -39,13 +43,35 @@ 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
///
/// @phrase: mnemonic phrase
///
/// Returns a 32-byte seed
#[wasm_bindgen]
pub fn ext_bip39_to_seed(phrase: &str, password: &str) -> Vec<u8> {
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
@@ -56,8 +82,8 @@ pub fn ext_bip39_to_mini_secret(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
}
}
@@ -70,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]
@@ -80,9 +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 res = ext_bip39_to_seed(phrase, "");
assert_eq!(res[..], seed[..]);
}
#[test]
@@ -1,42 +1,20 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
// 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.")
}
}
@@ -48,9 +26,16 @@ fn create_public(pubkey: &[u8]) -> PublicKey {
/// followed by the public key (32) bytes.
#[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
@@ -65,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()
@@ -78,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)]
@@ -101,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());
@@ -1,33 +1,16 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
// 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 secp256k1;
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
@@ -43,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
@@ -51,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
@@ -68,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
@@ -87,72 +119,41 @@ 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.")
}
}
// /// Checks for the recoverability of a signature from message
// ///
// /// * message: The message
// /// * signature: The signature
// ///
// /// Returns 0 on success, or a specific error code
// #[wasm_bindgen]
// pub fn ext_secp256k1_is_recoverable(message: &[u8], signature: &[u8]) -> u32 {
// let rs = match secp256k1::Signature::parse_slice(&signature[0..64]) {
// Ok(rs) => rs,
// _ => return 1
// };
// let v = match secp256k1::RecoveryId::parse(if signature[64] > 26 { signature[64] - 27 } else { signature[64] } as u8) {
// Ok(v) => v,
// _ => return 2
// };
// let mut msg = [0u8; 32];
/// 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();
// msg.copy_from_slice(&message);
hasher.input(data);
// match secp256k1::recover(&secp256k1::Message::parse(&msg), &rs, &v) {
// Ok(_) => 0,
// _ => 3
// }
// }
// /// Recovers the secp256k1 signature from the input
// ///
// /// * message: The message
// /// * signature: The signature
// ///
// /// Returns a vector with the recovered public key
// #[wasm_bindgen]
// pub fn ext_secp256k1_recover(message: &[u8], signature: &[u8]) -> Vec<u8> {
// let rs = match secp256k1::Signature::parse_slice(&signature[0..64]) {
// Ok(rs) => rs,
// _ => panic!("Unable to recover r,s")
// };
// let v = match secp256k1::RecoveryId::parse(if signature[64] > 26 { signature[64] - 27 } else { signature[64] } as u8) {
// Ok(v) => v,
// _ => panic!("Unable to recover v")
// };
// let mut msg = [0u8; 32];
// msg.copy_from_slice(&message);
// match secp256k1::recover(&secp256k1::Message::parse(&msg), &rs, &v) {
// Ok(pk) => return pk.serialize()[1..65].to_vec(),
// _ => panic!("Unable to recover publickey")
// }
// }
hasher
.result()
.to_vec()
}
/// sha512 hash for the specified input
///
/// * data: Arbitrary data to be hashed
///
/// Returns a vecor with the hash result
/// Returns a vector with the hash result
#[wasm_bindgen]
pub fn ext_sha512(data: &[u8]) -> Vec<u8> {
let mut hasher = Sha512::new();
@@ -169,17 +170,23 @@ pub fn ext_sha512(data: &[u8]) -> Vec<u8> {
/// * data: Arbitrary data to be hashed
/// * rounds: Number of 8-byte rounds to add to the output
///
/// Returns a vecor with the hash result
/// 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)]
@@ -187,24 +194,6 @@ pub mod tests {
use hex_literal::hex;
use super::*;
// // Constructs the message that Ethereum RPC's `personal_sign` and `eth_sign` would sign.
// fn ethereum_signable_message(data: &[u8]) -> Vec<u8> {
// let prefix = b"Pay DOTs to the Polkadot account:";
// let mut l = prefix.len() + data.len();
// let mut rev = Vec::new();
// let mut v = b"\x19Ethereum Signed Message:\n".to_vec();
// while l > 0 {
// rev.push(b'0' + (l % 10) as u8);
// l /= 10;
// }
// v.extend(rev.into_iter().rev());
// v.extend_from_slice(&prefix[..]);
// v.extend_from_slice(data);
// v
// }
#[test]
fn can_blake2b() {
let data = b"abc";
@@ -226,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";
@@ -246,16 +264,14 @@ pub mod tests {
assert_eq!(hash[..], expected[..]);
}
// #[test]
// fn can_secp256k1_real_eth_sig() {
// let sig = hex!("7505f2880114da51b3f5d535f8687953c0ab9af4ab81e592eaebebf53b728d2b6dfd9b5bcd70fee412b1f31360e7c2774009305cb84fc50c1d0ff8034dfa5fff1c");
// let pk = hex!("DF67EC7EAe23D2459694685257b6FC59d1BAA1FE");
// let data = [42, 0, 0, 0, 0, 0, 0, 0];
// let msg = ext_keccak256(&ethereum_signable_message(&data));
// let result = ext_keccak256(&ext_secp256k1_recover(&msg[..], &sig[..]));
#[test]
fn can_sha256() {
let data = b"hello world";
let expected = hex!("b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9");
let hash = ext_sha256(data);
// assert_eq!(result[12..], pk[..]);
// }
assert_eq!(hash[..], expected[..]);
}
#[test]
fn can_sha512() {
+126
View File
@@ -0,0 +1,126 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
use libsecp256k1::{Message, PublicKey, RecoveryId, SecretKey, Signature, recover, sign};
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn ext_secp_pub_compress(pubkey: &[u8]) -> Vec<u8> {
match PublicKey::parse_slice(&pubkey, None) {
Ok(p) => p
.serialize_compressed()
.to_vec(),
_ => panic!("Invalid pubkey provided.")
}
}
#[wasm_bindgen]
pub fn ext_secp_pub_expand(pubkey: &[u8]) -> Vec<u8> {
match PublicKey::parse_slice(&pubkey, None) {
Ok(p) => p
.serialize()
.to_vec(),
_ => panic!("Invalid pubkey provided.")
}
}
#[wasm_bindgen]
pub fn ext_secp_from_seed(seed: &[u8]) -> Vec<u8> {
match SecretKey::parse_slice(seed) {
Ok(s) => {
let mut res = vec![];
let pubkey = PublicKey::from_secret_key(&s);
res.extend_from_slice(&s.serialize());
res.extend_from_slice(&pubkey.serialize_compressed());
res
},
_ => panic!("Invalid seed provided.")
}
}
#[wasm_bindgen]
pub fn ext_secp_recover(hash: &[u8], sig: &[u8], rec: u8) -> Vec<u8> {
match (Message::parse_slice(hash), Signature::parse_standard_slice(sig), RecoveryId::parse(rec)) {
(Ok(m), Ok(s), Ok(r)) =>
match recover(&m, &s, &r) {
Ok(k) => k
.serialize_compressed()
.to_vec(),
_ => panic!("Invalid message provided.")
},
_ => panic!("Invalid recovery data provided.")
}
}
#[wasm_bindgen]
pub fn ext_secp_sign(hash: &[u8], seckey: &[u8]) -> Vec<u8> {
match (Message::parse_slice(hash), SecretKey::parse_slice(seckey)) {
(Ok(m), Ok(s)) => {
let mut res = vec![];
let (sig, rec) = sign(&m, &s);
res.extend_from_slice(&sig.serialize());
res.push(rec.into());
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[..]);
}
}
@@ -1,12 +1,13 @@
// Copyright 2019 Paritytech via https://github.com/paritytech/schnorrkel-js/
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Copyright 2019 Paritytech via https://github.com/paritytech/schnorrkel-js/
//
// Originally developed (as a fork) in https://github.com/polkadot-js/schnorrkel-js/
// 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));
}
}
+144
View File
@@ -0,0 +1,144 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Copyright 2019 Paritytech via https://github.com/paritytech/schnorrkel-js/
//
// Originally developed (as a fork) in https://github.com/polkadot-js/schnorrkel-js/
// which was adpated from the initial https://github.com/paritytech/schnorrkel-js/
// forked at commit eff430ddc3090f56317c80654208b8298ef7ab3f
use merlin::Transcript;
use schnorrkel::{signing_context, vrf::{VRFOutput, VRFProof}, PublicKey, SecretKey};
use wasm_bindgen::prelude::*;
/// Size of VRF output, bytes
pub const OUTPUT_SIZE: usize = 32;
/// Size of VRF proof, bytes
pub const PROOF_SIZE: usize = 64;
/// Size of VRF raw output, bytes
pub const RAW_OUTPUT_SIZE: usize = 16;
/// Size of VRF limit, bytes
pub const THRESHOLD_SIZE: usize = 16;
/// Size of the final full output
pub const RESULT_SIZE: usize = OUTPUT_SIZE + PROOF_SIZE;
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
// append in merging encodes length information
if extra.len() > 0 {
transcript.append_message(b"", extra);
}
transcript
}
// 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
/// Run a Random Verifiable Function (VRF) on one single input
/// (message) transcript, and an extra message transcript,
/// producing the output signature and corresponding short proof.
///
/// * secret: UIntArray with 64 element
/// * context: Arbitrary length UIntArray
/// * message: Arbitrary length UIntArray
/// * extra: Arbitrary length UIntArray
///
/// * returned vector is the 32-byte output (signature) and 64-byte proof.
#[wasm_bindgen]
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));
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,
/// and corresponding output.
///
/// * pubkey: UIntArray with 32 element
/// * context: Arbitrary length UIntArray
/// * message: Arbitrary length UIntArray
/// * extra: Arbitrary length UIntArray
/// * out_and_proof: 96-byte output & proof array from the ext_sign function.
#[wasm_bindgen]
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,
}
}
#[cfg(test)]
pub mod tests {
extern crate rand;
extern crate schnorrkel;
use super::*;
use crate::sr25519::ext_sr_from_seed;
use schnorrkel::{KEYPAIR_LENGTH, SECRET_KEY_LENGTH};
fn generate_random_seed() -> Vec<u8> {
(0..32).map(|_| rand::random::<u8>()).collect()
}
#[test]
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];
let public = &keypair[SECRET_KEY_LENGTH..KEYPAIR_LENGTH];
let context = b"my VRF context";
let message = b"this is a message";
let extra = b"this is an 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!(out1.len() == RESULT_SIZE);
assert!(out2.len() == RESULT_SIZE);
// Given the same context, message & extra, output should be deterministic
assert_eq!(&out1[..OUTPUT_SIZE], &out2[..OUTPUT_SIZE]);
// But proof is non-deterministic
assert_ne!(&out1[OUTPUT_SIZE..], &out2[OUTPUT_SIZE..]);
// VRF outputs can verified w/ original context, message & extra args
assert!(ext_vrf_verify(
public,
context,
message,
extra,
&out1
));
assert!(ext_vrf_verify(
public,
context,
message,
extra,
&out2
));
}
}
+87
View File
@@ -0,0 +1,87 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
/* eslint-disable camelcase */
// wasm-pack build output (formatted) from pkg/wasm_bg.d.ts
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;
// 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;
@@ -0,0 +1,23 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const rootIncl = ['@polkadot/wasm-crypto', '@polkadot/wasm-crypto-asmjs', '@polkadot/wasm-crypto-wasm'];
const detcIncl = [
...rootIncl.map((p) => `${p}/initOnlyAsm.cjs`),
...rootIncl.map((p) => `${p}/initOnlyWasm.cjs`),
...rootIncl.map((p) => `${p}/packageInfo.cjs`)
];
require('override-require')(
(request) =>
rootIncl.some((p) => request.endsWith(p)) ||
detcIncl.some((p) => request.endsWith(p)),
(request) =>
rootIncl.some((p) => request.endsWith(p))
? require(`${rootIncl.find((p) => request.endsWith(p))}/build/index.cjs`)
: require(`${detcIncl.find((p) => request.endsWith(p))
.replace('initOnlyAsm.cjs', 'build/initOnlyAsm.cjs')
.replace('initOnlyWasm.cjs', 'build/initOnlyWasm.cjs')
.replace('packageInfo.cjs', 'build/packageInfo.cjs')
}`)
);
+63
View File
@@ -0,0 +1,63 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const { assert, u8aToHex } = require('@polkadot/util');
function bip39Generate (wasm) {
const res = wasm.bip39Generate(21);
console.log('\tPHR', res);
assert(res.split(' ').length === 21, 'ERROR: Invalid bip39 Phase length');
}
function bip39GenerateSubsequent (wasm) {
const val1 = wasm.bip39Generate(24);
const val2 = wasm.bip39Generate(24);
console.log('\tVL1', val1);
console.log('\tVL2', val2);
assert(val1 !== val2, 'ERROR: Subsequent mnemonics are the same');
}
function bip39Validate (wasm) {
const res = wasm.bip39Validate(wasm.bip39Generate(12));
console.log('\tVAL', res);
assert(res, 'ERROR: Invalid bip39 validation');
}
function bip39ToEntropy (wasm) {
const res = u8aToHex(wasm.bip39ToEntropy('legal winner thank year wave sausage worth useful legal winner thank yellow'));
console.log('\tENT', res);
assert(res === '0x7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f', 'ERROR: Invalid bip39 entropy');
}
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);
assert(res === '0x4313249608fe8ac10fd5886c92c4579007272cb77c21551ee5b8d60b78041685', 'ERROR: Invalid bip39 mini secret');
}
function bip39ToSeed (wasm) {
const res = u8aToHex(wasm.bip39ToSeed('seed sock milk update focus rotate barely fade car face mechanic mercy', ''));
console.log('\tSEE', res);
assert(res === '0x3c121e20de068083b49c2315697fb59a2d9e8643c24e5ea7628132c58969a027', 'ERROR: Invalid bip39 mini secret');
}
module.exports = {
bip39Generate,
bip39GenerateSubsequent,
bip39ToEntropy,
bip39ToMiniSecret,
bip39ToSeed,
bip39Validate
};
-47
View File
@@ -1,47 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
// @ts-check
/* eslint-disable camelcase */
const { assert, u8aToHex } = require('@polkadot/util');
function bip39_generate (wasm) {
const RESULT = wasm.bip39Generate(21);
console.log('\tPHR', RESULT);
assert(RESULT.split(' ').length === 21, 'ERROR: Invalid bip39 Phase length');
}
function bip39_validate (wasm) {
const RESULT = wasm.bip39Validate(wasm.bip39Generate(12));
console.log('\tVAL', RESULT);
assert(RESULT, 'ERROR: Invalid bip39 validation');
}
function bip39_toEntropy (wasm) {
const RESULT = u8aToHex(wasm.bip39ToEntropy('legal winner thank year wave sausage worth useful legal winner thank yellow'));
console.log('\tENT', RESULT);
assert(RESULT === '0x7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f', 'ERROR: Invalid bip39 entropy');
}
function bip39_toMiniSecret (wasm) {
const RESULT = u8aToHex(wasm.bip39ToMiniSecret('legal winner thank year wave sausage worth useful legal winner thank yellow', 'Substrate'));
console.log('\tMIN', RESULT);
assert(RESULT === '0x4313249608fe8ac10fd5886c92c4579007272cb77c21551ee5b8d60b78041685', 'ERROR: Invalid bip39 mini secret');
}
module.exports = {
bip39_generate,
bip39_toEntropy,
bip39_toMiniSecret,
bip39_validate
};
@@ -1,8 +1,5 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
/* eslint-disable camelcase */
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const crypto = require('crypto');
const { assert, hexToU8a, stringToU8a, u8aToHex } = require('@polkadot/util');
@@ -15,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));
@@ -24,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);
@@ -35,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);
@@ -43,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++) {
@@ -54,8 +51,8 @@ function ed25519_benchmark (wasm) {
}
module.exports = {
ed25519_benchmark,
ed25519_pairFromSeed,
ed25519_signAndVerify,
ed25519_verifyExisting
ed25519Benchmark,
ed25519PairFromSeed,
ed25519SignAndVerify,
ed25519VerifyExisting
};
@@ -1,8 +1,5 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
/* eslint-disable camelcase */
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const { assert, stringToU8a, u8aToHex } = require('@polkadot/util');
@@ -14,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')));
@@ -22,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));
@@ -30,17 +51,6 @@ function pbkdf2Hash (wasm) {
assert(hash === '0x5fcbe04f05300a3ecc5c35d18ea0b78f3f6853d2ae5f3fca374f69a7d1f78b5def5c60dae1a568026c7492511e0c53521e8bb6e03a650e1263265fee92722270', 'ERROR: pbkdf2Hash does not match');
}
// function secp256k1Recover (wasm) {
// const pk = u8aToHex(wasm.keccak256(wasm.secp256k1Recover(
// hexToU8a('0x2bbfa926ee947dfac384d981f8913b4e0992e52d7b6711e0ec3d9f8b0f752648'),
// hexToU8a('0x7505f2880114da51b3f5d535f8687953c0ab9af4ab81e592eaebebf53b728d2b6dfd9b5bcd70fee412b1f31360e7c2774009305cb84fc50c1d0ff8034dfa5fff1c')
// )));
// console.log('\tPUB', pk);
// assert(pk === '0x91d366769d44a7c7690428bfdf67ec7eae23d2459694685257b6fc59d1baa1fe', 'ERROR: secp256k1Recover does not match');
// }
function scryptHash (wasm) {
const hash = u8aToHex(wasm.scrypt(stringToU8a('password'), stringToU8a('salt'), 14, 8, 1));
@@ -49,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')));
@@ -69,10 +87,13 @@ function twoxHash (wasm) {
module.exports = {
blake2bHash,
hmacSha256,
hmacSha512,
keccak256,
keccak512,
pbkdf2Hash,
scryptHash,
// secp256k1Recover,
sha256Hash,
sha512Hash,
twoxHash
};
+77
View File
@@ -0,0 +1,77 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const wasm = require('../../build/index.cjs');
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 = {
// 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,
...sr25519,
...vrf,
...bip39,
...hashing
};
function beforeAll () {
return wasm.waitReady();
}
function runAll (name) {
const failed = [];
let count = 0;
Object.keys(tests).forEach((name) => {
count++;
try {
console.time(name);
console.log();
console.log(name);
tests[name](wasm);
console.timeEnd(name);
} catch (error) {
console.error();
console.error(error);
failed.push(name);
}
});
if (failed.length) {
throw new Error(`\n*** ${name}: FAILED: ${failed.length} of ${count}: ${failed.join(', ')}`);
}
}
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);
});
}
module.exports = {
beforeAll,
runAll,
runUnassisted,
tests,
wasm
};
-66
View File
@@ -1,66 +0,0 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
const wasm = require('../../build/index');
const bip39 = require('./bip39');
const ed25519 = require('./ed25519');
const hashing = require('./hashing');
const sr25519 = require('./sr25519');
const tests = {
...bip39,
...ed25519,
...hashing,
...sr25519
};
function beforeAll () {
return wasm.waitReady();
}
function runAll () {
const failed = [];
let count = 0;
Object.keys(tests).forEach((name) => {
count++;
try {
console.time(name);
console.log();
console.log(name);
tests[name](wasm);
console.timeEnd(name);
} catch (error) {
console.error(error);
failed.push(name);
}
});
if (failed.length) {
throw new Error(`Failed: ${failed.length} of ${count}: ${failed.concat(', ')}`);
}
}
function runUnassisted () {
(async () => {
await beforeAll();
runAll();
})().catch((error) => {
console.error(error);
process.exit(-1);
});
}
module.exports = {
beforeAll,
runAll,
runUnassisted,
tests,
wasm
};
@@ -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
};
@@ -1,8 +1,5 @@
// Copyright 2019-2020 @polkadot/wasm-crypto authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
/* eslint-disable camelcase */
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const crypto = require('crypto');
const { assert, hexToU8a, stringToU8a, u8aToHex } = require('@polkadot/util');
@@ -15,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)));
@@ -24,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)));
@@ -33,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');
@@ -45,7 +42,18 @@ function sr25519_verifyExisting (wasm) {
assert(isValid, 'ERROR: Unable to verify signature');
}
function sr25519_signAndVerify (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')));
console.log('\tSG1', sig1);
console.log('\tSG2', sig2);
assert(sig1 !== sig2, 'ERROR: Signatures are deterministic');
}
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);
@@ -56,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'));
@@ -64,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));
@@ -74,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'));
@@ -82,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));
@@ -92,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);
@@ -100,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++) {
@@ -111,14 +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_verifyExisting
sr25519Benchmark,
sr25519DeriveHard,
sr25519DeriveHardKnown,
sr25519DeriveSoft,
sr25519DeriveSoftKnown,
sr25519DeriveSoftPubkey,
sr25519DevFromSeed,
sr25519KeyAgreement,
sr25519PairFromSeed,
sr25519SignAndVerify,
sr25519SignDeterministic,
sr25519VerifyExisting
};
+54
View File
@@ -0,0 +1,54 @@
// Copyright 2019-2022 @polkadot/wasm-crypto authors & contributors
// SPDX-License-Identifier: Apache-2.0
const crypto = require('crypto');
const { assert, stringToU8a, u8aToHex } = require('@polkadot/util');
function extractKeys (pair) {
return [pair, pair.slice(64), pair.slice(0, 64)];
}
function randomPair (wasm) {
return extractKeys(wasm.sr25519KeypairFromSeed(crypto.randomBytes(32)));
}
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);
console.log('\tVRF', u8aToHex(outAndProof));
console.log('\tRES', isValid);
assert(isValid, 'ERROR: Unable to verify VRF output & proof');
}
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);
console.log('\tVRF', u8aToHex(outAndProof));
console.log('\tRES', isValid);
assert(isValid, 'ERROR: Unable to verify VRF extra output & proof');
}
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'));
const sig1 = u8aToHex(outAndProof1.slice(0, 32));
const sig2 = u8aToHex(outAndProof2.slice(0, 32));
console.log('\tSG1', sig1);
console.log('\tSG2', sig2);
assert(sig1 === sig2, 'ERROR: VRF extra outputs are non-deterministic');
}
module.exports = {
vrfSignAndVerify,
vrfSignAndVerifyCompat,
vrfSignAndVerifyDeterministic
};

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