diff --git a/packages/wasm-bridge/src/wbg.ts b/packages/wasm-bridge/src/wbg.ts index 4fdcbff..faedb71 100644 --- a/packages/wasm-bridge/src/wbg.ts +++ b/packages/wasm-bridge/src/wbg.ts @@ -31,6 +31,15 @@ export class Wbg { throw new Error('abort'); }; + /** + * @internal - the one randomness import of wasm-crypto from 7.5.21 on: fill + * len bytes at ptr in wasm memory. A fixed name, not a wasm-bindgen hash, so + * it survives crate and bindgen upgrades. + */ + ext_fill_random = (ptr: number, len: number): void => { + DEFAULT_CRYPTO.getRandomValues(this.#bridge.getU8a(ptr, len)); + }; + /** @internal - new hash */ __wbg___wbindgen_is_undefined_9e4d92534c42d778 = (idx: number): boolean => { return this.#bridge.getObject(idx) === undefined; diff --git a/packages/wasm-crypto/Cargo.lock b/packages/wasm-crypto/Cargo.lock index e18d31c..2c742c7 100644 --- a/packages/wasm-crypto/Cargo.lock +++ b/packages/wasm-crypto/Cargo.lock @@ -1,21 +1,22 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] -name = "addr2line" -version = "0.25.1" +name = "aead" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ - "gimli", + "crypto-common", + "generic-array 0.14.7", ] [[package]] -name = "adler2" -version = "2.0.1" +name = "anyhow" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "arrayref" @@ -34,30 +35,15 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.5.2" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" [[package]] -name = "backtrace" -version = "0.3.76" +name = "base64ct" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" -dependencies = [ - "addr2line", - "cfg-if 1.0.4", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-link", -] - -[[package]] -name = "bitflags" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "blake2-rfc" @@ -83,11 +69,11 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.9.0" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.9", + "generic-array 0.14.7", ] [[package]] @@ -127,18 +113,18 @@ dependencies = [ "shlex", ] -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -160,6 +146,17 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array 0.14.7", + "rand_core", + "typenum", +] + [[package]] name = "crypto-mac" version = "0.7.0" @@ -172,27 +169,38 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "2.1.3" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "byteorder", - "digest 0.8.1", - "rand_core 0.5.1", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version", "subtle 2.6.1", "zeroize", ] [[package]] -name = "curve25519-dalek" -version = "3.2.1" +name = "curve25519-dalek-derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle 2.6.1", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", "zeroize", ] @@ -207,64 +215,51 @@ dependencies = [ [[package]] name = "digest" -version = "0.9.0" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "generic-array 0.14.9", + "block-buffer 0.10.4", + "crypto-common", + "subtle 2.6.1", ] [[package]] name = "ed25519" -version = "1.5.3" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ + "pkcs8", "signature", ] [[package]] name = "ed25519-dalek" -version = "1.0.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ - "curve25519-dalek 3.2.1", + "curve25519-dalek", "ed25519", - "rand 0.7.3", "serde", - "sha2 0.9.9", + "sha2 0.10.9", + "subtle 2.6.1", "zeroize", ] -[[package]] -name = "failure" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" -dependencies = [ - "backtrace", - "failure_derive", -] - -[[package]] -name = "failure_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", -] - [[package]] name = "fake-simd" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + [[package]] name = "find-msvc-tools" version = "0.1.9" @@ -282,45 +277,34 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.9" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", ] -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if 1.0.4", - "js-sys", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", - "wasm-bindgen", -] - [[package]] name = "getrandom" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ - "cfg-if 1.0.4", - "js-sys", + "cfg-if", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "wasm-bindgen", + "wasi", ] [[package]] -name = "gimli" -version = "0.32.3" +name = "getrandom_or_panic" +version = "0.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" +checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" +dependencies = [ + "rand", + "rand_core", +] [[package]] name = "hex-literal" @@ -352,19 +336,19 @@ dependencies = [ ] [[package]] -name = "js-sys" -version = "0.3.67" +name = "hmac" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "wasm-bindgen", + "digest 0.10.7", ] [[package]] name = "keccak" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653" dependencies = [ "cpufeatures", ] @@ -381,62 +365,29 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" -[[package]] -name = "memchr" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" - -[[package]] -name = "memory_units" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" - [[package]] name = "merlin" -version = "2.0.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ "byteorder", "keccak", - "rand_core 0.5.1", + "rand_core", "zeroize", ] -[[package]] -name = "miniz_oxide" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" -dependencies = [ - "adler2", -] - [[package]] name = "nodrop" version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" -[[package]] -name = "object" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -dependencies = [ - "parking_lot_core", -] [[package]] name = "opaque-debug" @@ -444,25 +395,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" -[[package]] -name = "opaque-debug" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if 1.0.4", - "libc", - "redox_syscall", - "smallvec", - "windows-link", -] - [[package]] name = "pbkdf2" version = "0.3.0" @@ -473,6 +405,25 @@ dependencies = [ "crypto-mac", ] +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -508,36 +459,13 @@ dependencies = [ [[package]] name = "rand" -version = "0.7.3" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "e058c7de0b26af77780c769414d6257830bb240f3c38477dbc2c16e5f54d6d4c" dependencies = [ "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", + "rand_chacha", + "rand_core", ] [[package]] @@ -547,16 +475,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", + "rand_core", ] [[package]] @@ -565,33 +484,9 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.17", + "getrandom", ] -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", -] - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags", -] - -[[package]] -name = "rustc-demangle" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" - [[package]] name = "rustc-hash" version = "1.1.0" @@ -599,19 +494,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] -name = "schnorrkel" -version = "0.9.1" +name = "rustc_version" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ + "semver", +] + +[[package]] +name = "schnorrkel" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9fcb6c2e176e86ec703e22560d99d65a5ee9056ae45a08e13e84ebf796296f" +dependencies = [ + "aead", "arrayref", - "arrayvec 0.5.2", - "curve25519-dalek 2.1.3", - "getrandom 0.1.16", + "arrayvec 0.7.8", + "curve25519-dalek", + "getrandom_or_panic", "merlin", - "rand 0.7.3", - "rand_core 0.5.1", - "sha2 0.8.2", + "rand_core", + "serde_bytes", + "sha2 0.10.9", "subtle 2.6.1", "zeroize", ] @@ -624,29 +529,35 @@ checksum = "656c79d0e90d0ab28ac86bf3c3d10bfbbac91450d3f190113b4e76d9fec3cfdd" dependencies = [ "byte-tools", "byteorder", - "hmac", - "pbkdf2", + "hmac 0.7.1", + "pbkdf2 0.3.0", "sha2 0.8.2", ] [[package]] name = "secp256k1" -version = "0.21.3" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c42e6f1735c5f00f51e43e28d6634141f2bcad10931b2609ddd74a86d751260" +checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" dependencies = [ "secp256k1-sys", ] [[package]] name = "secp256k1-sys" -version = "0.4.2" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957da2573cde917463ece3570eab4a0b3f19de6f1646cde62e6fd3868f566036" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" dependencies = [ "cc", ] +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + [[package]] name = "serde" version = "1.0.228" @@ -656,6 +567,16 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serde_bytes" +version = "0.11.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" +dependencies = [ + "serde", + "serde_core", +] + [[package]] name = "serde_core" version = "1.0.228" @@ -673,7 +594,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn", ] [[package]] @@ -685,20 +606,18 @@ dependencies = [ "block-buffer 0.7.3", "digest 0.8.1", "fake-simd", - "opaque-debug 0.2.3", + "opaque-debug", ] [[package]] name = "sha2" -version = "0.9.9" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.4", + "cfg-if", "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.1", + "digest 0.10.7", ] [[package]] @@ -709,15 +628,22 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signature" -version = "1.6.4" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "rand_core", +] [[package]] -name = "smallvec" -version = "1.15.1" +name = "spki" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] [[package]] name = "static_assertions" @@ -737,17 +663,6 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - [[package]] name = "syn" version = "2.0.114" @@ -760,31 +675,42 @@ dependencies = [ ] [[package]] -name = "synstructure" -version = "0.12.6" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "unicode-xid", + "syn", ] [[package]] name = "tiny-bip39" -version = "0.7.3" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0165e045cc2ae1660270ca65e1676dbaab60feb0f91b10f7d0665e9b47e31f2" +checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" dependencies = [ - "failure", - "hmac", + "anyhow", + "hmac 0.12.1", "once_cell", - "pbkdf2", - "rand 0.7.3", + "pbkdf2 0.11.0", + "rand", "rustc-hash", - "sha2 0.8.2", + "sha2 0.10.9", + "thiserror", "unicode-normalization", + "wasm-bindgen", + "zeroize", ] [[package]] @@ -817,8 +743,8 @@ version = "1.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" dependencies = [ - "cfg-if 1.0.4", - "rand 0.8.5", + "cfg-if", + "rand", "static_assertions", ] @@ -843,24 +769,12 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.11.1+wasi-snapshot-preview1" @@ -873,14 +787,14 @@ version = "0.0.0" dependencies = [ "blake2-rfc", "byteorder", - "curve25519-dalek 2.1.3", + "curve25519-dalek", "ed25519-dalek", - "getrandom 0.2.17", + "getrandom", "hex-literal", - "hmac", + "hmac 0.7.1", "merlin", - "pbkdf2", - "rand 0.7.3", + "pbkdf2 0.3.0", + "rand", "schnorrkel", "scrypt", "secp256k1", @@ -889,7 +803,6 @@ dependencies = [ "tiny-keccak", "twox-hash", "wasm-bindgen", - "wee_alloc", ] [[package]] @@ -898,7 +811,7 @@ version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" dependencies = [ - "cfg-if 1.0.4", + "cfg-if", "wasm-bindgen-macro", ] @@ -913,7 +826,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.114", + "syn", "wasm-bindgen-shared", ] @@ -935,7 +848,7 @@ checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -946,46 +859,6 @@ version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" -[[package]] -name = "wee_alloc" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "memory_units", - "winapi", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - [[package]] name = "zerocopy" version = "0.8.37" @@ -1003,25 +876,25 @@ checksum = "1328722bbf2115db7e19d69ebcc15e795719e2d66b60827c6a69a117365e37a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn", ] [[package]] name = "zeroize" -version = "1.3.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +checksum = "e13084392c5e4bc371903e2935a5eaeed24905a7511356b883835e18a78f6879" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", - "syn 2.0.114", + "syn", ] diff --git a/packages/wasm-crypto/Cargo.toml b/packages/wasm-crypto/Cargo.toml index 5407d1a..10d10ad 100644 --- a/packages/wasm-crypto/Cargo.toml +++ b/packages/wasm-crypto/Cargo.toml @@ -18,26 +18,24 @@ crate-type = ["cdylib"] [dependencies] blake2-rfc = "0.2.18" byteorder = "1.3.1" -curve25519-dalek = { version = "2.1.0", default-features = false } -ed25519-dalek = { version = "1.0.0-pre.4", features = [] } -getrandom = { version="0.2.3", features = ["js"] } +curve25519-dalek = { version = "4.1.3", default-features = false } +ed25519-dalek = "2.1" +getrandom = { version = "0.2.17", features = ["custom"] } hmac = "0.7.0" -secp256k1 = { version = "0.21.2", default-features = false, features = ["recovery", "global-context"] } -merlin = { version = "2.0", default-features = false } +secp256k1 = { version = "0.29.1", default-features = false, features = ["recovery", "global-context", "lowmemory"] } +merlin = { version = "3.0", default-features = false } pbkdf2 = { version = "0.3.0", default-features = false } -rand = { version="0.7.3", default-features = false, features = ["wasm-bindgen"] } -schnorrkel = { version = "0.9.1", features = ["preaudit_deprecated", "u64_backend"] } +schnorrkel = "0.11.4" scrypt = { version = "0.2", default-features = false } sha2 = "0.8.1" -tiny-bip39 = { version = "0.7", default-features = false } +tiny-bip39 = { version = "1.0", default-features = false } tiny-keccak = { version = "2.0.1", features = ["keccak"] } twox-hash = "1.5.0" wasm-bindgen = "=0.2.90" -wee_alloc = "0.4.3" [dev-dependencies] hex-literal = "0.2.0" -rand = { version = "0.7.3", features = ["wasm-bindgen"] } +rand = "0.8.5" [profile.release] codegen-units = 1 diff --git a/packages/wasm-crypto/src/lib.rs b/packages/wasm-crypto/src/lib.rs index c9ab33c..9afe63c 100644 --- a/packages/wasm-crypto/src/lib.rs +++ b/packages/wasm-crypto/src/lib.rs @@ -1,9 +1,28 @@ // Copyright 2019-2025 @pezkuwi/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; +// Randomness comes from the host: the bridge fills the buffer with +// getRandomValues from @pezkuwi/x-randomvalues. It is one import with a fixed +// name, so the bridge does not have to track the hashed names wasm-bindgen +// gives the getrandom "js" backend. +#[cfg(target_arch = "wasm32")] +mod random { + #[link(wasm_import_module = "wbg")] + extern "C" { + fn ext_fill_random(ptr: *mut u8, len: usize); + } + + fn fill(buf: &mut [u8]) -> Result<(), getrandom::Error> { + // getRandomValues fills at most 65536 bytes per call + for chunk in buf.chunks_mut(65536) { + unsafe { ext_fill_random(chunk.as_mut_ptr(), chunk.len()) }; + } + + Ok(()) + } + + getrandom::register_custom_getrandom!(fill); +} #[path = "rs/bip39.rs"] pub mod bip39; diff --git a/packages/wasm-crypto/src/rs/ed25519.rs b/packages/wasm-crypto/src/rs/ed25519.rs index 988e956..38c374e 100644 --- a/packages/wasm-crypto/src/rs/ed25519.rs +++ b/packages/wasm-crypto/src/rs/ed25519.rs @@ -1,32 +1,21 @@ // Copyright 2019-2025 @pezkuwi/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 std::convert::TryInto; +use ed25519_dalek::{Signature, Signer as _, SigningKey, Verifier as _, VerifyingKey}; use wasm_bindgen::prelude::*; -/// Keypair helper function -fn new_from_seed(seed: &[u8]) -> Keypair { - match SecretKey::from_bytes(seed) { - Ok(secret) => { - let public: PublicKey = (&secret).into(); - - Keypair { secret: secret, public: public } - }, +fn new_from_seed(seed: &[u8]) -> SigningKey { + match seed.try_into() { + Ok(secret) => SigningKey::from_bytes(secret), _ => panic!("Invalid seed provided.") } } -/// Generate a key pair. -/// -/// * seed: UIntArray with 32 element -/// -/// returned vector is the concatenation of first the seed (32 bytes) -/// followed by the public key (32) bytes, as the full secret keys. #[wasm_bindgen] pub fn ext_ed_from_seed(seed: &[u8]) -> Vec { new_from_seed(seed) - .to_bytes() + .to_keypair_bytes() .to_vec() } @@ -57,8 +46,8 @@ pub fn ext_ed_sign(_: &[u8], seckey: &[u8], message: &[u8]) -> Vec { /// * pubkey: UIntArray with 32 element #[wasm_bindgen] pub fn ext_ed_verify(signature: &[u8], message: &[u8], pubkey: &[u8]) -> bool { - match (Signature::try_from(signature), PublicKey::from_bytes(pubkey)) { - (Ok(s), Ok(k)) => k + match (Signature::from_slice(signature), pubkey.try_into().map(VerifyingKey::from_bytes)) { + (Ok(s), Ok(Ok(k))) => k .verify(message, &s) .is_ok(), _ => false diff --git a/packages/wasm-crypto/src/rs/secp256k1.rs b/packages/wasm-crypto/src/rs/secp256k1.rs index b697ab9..ebec204 100644 --- a/packages/wasm-crypto/src/rs/secp256k1.rs +++ b/packages/wasm-crypto/src/rs/secp256k1.rs @@ -30,7 +30,7 @@ pub fn ext_secp_from_seed(seed: &[u8]) -> Vec { let mut res = vec![]; let pubkey = PublicKey::from_secret_key(SECP256K1, &s); - res.extend_from_slice(&s.serialize_secret()); + res.extend_from_slice(&s.secret_bytes()); res.extend_from_slice(&pubkey.serialize()); res @@ -43,7 +43,7 @@ pub fn ext_secp_from_seed(seed: &[u8]) -> Vec { pub fn ext_secp_recover(hash: &[u8], sig: &[u8], rec: i32) -> Vec { match RecoveryId::from_i32(rec) { Ok(r) => match ( - Message::from_slice(hash), + Message::from_digest_slice(hash), RecoverableSignature::from_compact(&sig, r), ) { (Ok(m), Ok(s)) => { @@ -69,7 +69,7 @@ pub fn ext_secp_recover(hash: &[u8], sig: &[u8], rec: i32) -> Vec { #[wasm_bindgen] pub fn ext_secp_sign(hash: &[u8], seckey: &[u8]) -> Vec { - match (Message::from_slice(hash), SecretKey::from_slice(seckey)) { + match (Message::from_digest_slice(hash), SecretKey::from_slice(seckey)) { (Ok(m), Ok(s)) => { let mut res = vec![]; let (rec, sig) = SECP256K1.sign_ecdsa_recoverable(&m, &s).serialize_compact(); diff --git a/packages/wasm-crypto/src/rs/sr25519.rs b/packages/wasm-crypto/src/rs/sr25519.rs index 4aead05..1b76ac9 100644 --- a/packages/wasm-crypto/src/rs/sr25519.rs +++ b/packages/wasm-crypto/src/rs/sr25519.rs @@ -160,7 +160,7 @@ pub fn ext_sr_agree(pubkey: &[u8], secret: &[u8]) -> Vec { key.copy_from_slice(&s.to_bytes()[0..32]); - match (Scalar::from_canonical_bytes(key), PublicKey::from_bytes(pubkey)) { + match (Option::::from(Scalar::from_canonical_bytes(key)), PublicKey::from_bytes(pubkey)) { (Some(n), Ok(k)) => (&n * k.as_point()) .compress().0 .to_vec(), diff --git a/packages/wasm-crypto/src/rs/vrf.rs b/packages/wasm-crypto/src/rs/vrf.rs index a083001..75fc5db 100644 --- a/packages/wasm-crypto/src/rs/vrf.rs +++ b/packages/wasm-crypto/src/rs/vrf.rs @@ -8,7 +8,7 @@ // forked at commit eff430ddc3090f56317c80654208b8298ef7ab3f use merlin::Transcript; -use schnorrkel::{signing_context, vrf::{VRFOutput, VRFProof}, PublicKey, SecretKey}; +use schnorrkel::{signing_context, vrf::{VRFPreOut, VRFProof}, PublicKey, SecretKey}; use wasm_bindgen::prelude::*; /// Size of VRF output, bytes @@ -80,7 +80,7 @@ pub fn ext_vrf_sign(secret: &[u8], ctx: &[u8], msg: &[u8], extra: &[u8]) -> Vec< /// * 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])) { + match (PublicKey::from_bytes(pubkey), VRFPreOut::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(),