From 39675ddfbfc15ba7796fbb6a007cb5f4f1e305d0 Mon Sep 17 00:00:00 2001 From: Satoshi Qazi Muhammed Date: Mon, 12 Oct 2026 06:17:29 +0400 Subject: [PATCH 1/6] Check every crypto export against recorded known answers kat.txt holds 166 deterministic outputs (hashes, pbkdf2, scrypt, bip39, sr25519 keys, hard and soft derivation, agreement, VRF outputs, ed25519 and secp256k1 keys and signatures, recovery) and 24 sr25519/VRF signatures, all produced by the 7.5.20 crate set. A later crate set has to reproduce the first byte for byte and verify the second. --- packages/wasm-crypto/src/lib.rs | 3 + packages/wasm-crypto/src/rs/kat.rs | 221 ++++++++++++++++++++++++++++ packages/wasm-crypto/src/rs/kat.txt | 190 ++++++++++++++++++++++++ 3 files changed, 414 insertions(+) create mode 100644 packages/wasm-crypto/src/rs/kat.rs create mode 100644 packages/wasm-crypto/src/rs/kat.txt diff --git a/packages/wasm-crypto/src/lib.rs b/packages/wasm-crypto/src/lib.rs index d5eb7d8..c9ab33c 100644 --- a/packages/wasm-crypto/src/lib.rs +++ b/packages/wasm-crypto/src/lib.rs @@ -22,3 +22,6 @@ pub mod sr25519; #[path = "rs/vrf.rs"] pub mod vrf; + +#[path = "rs/kat.rs"] +pub mod kat; diff --git a/packages/wasm-crypto/src/rs/kat.rs b/packages/wasm-crypto/src/rs/kat.rs new file mode 100644 index 0000000..b107f2f --- /dev/null +++ b/packages/wasm-crypto/src/rs/kat.rs @@ -0,0 +1,221 @@ +// Copyright 2019-2025 @pezkuwi/wasm-crypto authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +//! Known-answer vectors for every exported function. +//! +//! `kat.txt` was produced by an earlier build and is checked in. Any change to +//! the crypto crates must leave every deterministic output byte-equal, and the +//! randomised signatures (sr25519, VRF proofs) recorded there must still +//! verify. Regenerate only on purpose: +//! +//! KAT_WRITE=src/rs/kat.txt cargo test --release kat_ -- --nocapture + +#[cfg(test)] +pub mod tests { + use crate::bip39::*; + use crate::ed25519::*; + use crate::hashing::*; + use crate::secp256k1::*; + use crate::sr25519::*; + use crate::vrf::*; + + const VECTORS: &str = include_str!("kat.txt"); + + const PHRASES: [&str; 3] = [ + "bottom drive obey lake curtain smoke basket hold race lonely fit walk", + "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", + "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title", + ]; + + fn to_hex(data: &[u8]) -> String { + data.iter().map(|b| format!("{:02x}", b)).collect() + } + + fn from_hex(s: &str) -> Vec { + (0..s.len()).step_by(2).map(|i| u8::from_str_radix(&s[i..i + 2], 16).unwrap()).collect() + } + + fn pattern(len: usize, mul: usize) -> Vec { + (0..len).map(|i| ((i * mul + 7) % 251) as u8).collect() + } + + fn datas() -> Vec> { + vec![vec![], b"abc".to_vec(), pattern(1000, 31)] + } + + fn seeds() -> Vec> { + vec![vec![0u8; 32], pattern(32, 1), pattern(32, 97), b"12345678901234567890123456789012".to_vec()] + } + + fn chain_codes() -> Vec> { + // "Alice" as a SCALE-encoded string, zero padded, as util-crypto builds it + let mut alice = vec![0u8; 32]; + + alice[0] = 5 << 2; + alice[1..6].copy_from_slice(b"Alice"); + + vec![alice, pattern(32, 13)] + } + + fn messages() -> Vec> { + vec![vec![], b"this is a message".to_vec(), pattern(300, 7)] + } + + /// Every deterministic output, as `name hex` lines. + fn deterministic() -> Vec<(String, Vec)> { + let mut out: Vec<(String, Vec)> = Vec::new(); + + for (d, data) in datas().iter().enumerate() { + for size in [32u32, 64] { + out.push((format!("blake2b/{}/{}", d, size), ext_blake2b(data, &[], size))); + out.push((format!("blake2b-key/{}/{}", d, size), ext_blake2b(data, b"key", size))); + } + + out.push((format!("keccak256/{}", d), ext_keccak256(data))); + out.push((format!("keccak512/{}", d), ext_keccak512(data))); + out.push((format!("sha256/{}", d), ext_sha256(data))); + out.push((format!("sha512/{}", d), ext_sha512(data))); + out.push((format!("hmac256/{}", d), ext_hmac_sha256(b"key", data))); + out.push((format!("hmac512/{}", d), ext_hmac_sha512(b"key", data))); + + for rounds in [1u32, 2, 4] { + out.push((format!("twox/{}/{}", d, rounds), ext_twox(data, rounds))); + } + + for rounds in [1u32, 2048] { + out.push((format!("pbkdf2/{}/{}", d, rounds), ext_pbkdf2(data, b"salt", rounds))); + } + + out.push((format!("scrypt/{}", d), ext_scrypt(data, b"salt", 10, 8, 1))); + } + + for (p, phrase) in PHRASES.iter().enumerate() { + out.push((format!("bip39-valid/{}", p), vec![ext_bip39_validate(phrase) as u8])); + out.push((format!("bip39-entropy/{}", p), ext_bip39_to_entropy(phrase))); + + for (w, password) in ["", "password"].iter().enumerate() { + out.push((format!("bip39-mini/{}/{}", p, w), ext_bip39_to_mini_secret(phrase, password))); + out.push((format!("bip39-seed/{}/{}", p, w), ext_bip39_to_seed(phrase, password))); + } + } + + out.push(("bip39-valid/bad-checksum".into(), vec![ext_bip39_validate(&PHRASES[1].replace("about", "abandon")) as u8])); + + let pairs: Vec> = seeds().iter().map(|s| ext_sr_from_seed(s)).collect(); + + for (s, pair) in pairs.iter().enumerate() { + out.push((format!("sr-from-seed/{}", s), pair.clone())); + + for (c, cc) in chain_codes().iter().enumerate() { + let soft = ext_sr_derive_keypair_soft(pair, cc); + + out.push((format!("sr-derive-hard/{}/{}", s, c), ext_sr_derive_keypair_hard(pair, cc))); + // schnorrkel draws the nonce half of a soft-derived secret at random + out.push((format!("sr-derive-soft/{}/{}", s, c), [&soft[..32], &soft[64..]].concat())); + out.push((format!("sr-derive-public-soft/{}/{}", s, c), ext_sr_derive_public_soft(&pair[64..], cc))); + + // the public derivation must land on the public half of the soft pair + assert_eq!(ext_sr_derive_public_soft(&pair[64..], cc), soft[64..].to_vec()); + } + + for (o, other) in pairs.iter().enumerate() { + out.push((format!("sr-agree/{}/{}", s, o), ext_sr_agree(&other[64..], &pair[..64]))); + } + + for (m, msg) in messages().iter().enumerate() { + // the VRF output (not the proof) is a function of key and input only + out.push((format!("vrf-output/{}/{}", s, m), ext_vrf_sign(&pair[..64], b"ctx", msg, b"extra")[..32].to_vec())); + } + } + + for (s, seed) in seeds().iter().enumerate() { + let ed = ext_ed_from_seed(seed); + + out.push((format!("ed-from-seed/{}", s), ed.clone())); + + for (m, msg) in messages().iter().enumerate() { + out.push((format!("ed-sign/{}/{}", s, m), ext_ed_sign(&ed[32..], &ed[..32], msg))); + } + } + + // a zero scalar is not a secp256k1 secret key + for (s, seed) in seeds().iter().enumerate().skip(1) { + let secp = ext_secp_from_seed(seed); + + out.push((format!("secp-from-seed/{}", s), secp.clone())); + out.push((format!("secp-expand/{}", s), ext_secp_pub_expand(&secp[32..]))); + out.push((format!("secp-compress/{}", s), ext_secp_pub_compress(&ext_secp_pub_expand(&secp[32..])))); + + for (m, msg) in messages().iter().enumerate() { + let hash = ext_keccak256(msg); + let sig = ext_secp_sign(&hash, &secp[..32]); + + out.push((format!("secp-sign/{}/{}", s, m), sig.clone())); + out.push((format!("secp-recover/{}/{}", s, m), ext_secp_recover(&hash, &sig[..64], sig[64] as i32))); + } + } + + out + } + + /// Randomised signatures: `kind pubkey msg sig` lines that any later build must verify. + fn randomised() -> Vec { + let mut out = Vec::new(); + + for seed in seeds().iter() { + let pair = ext_sr_from_seed(seed); + + for msg in messages().iter() { + out.push(format!("sr-sig {} {} {}", to_hex(&pair[64..]), to_hex(msg), to_hex(&ext_sr_sign(&pair[64..], &pair[..64], msg)))); + out.push(format!("vrf-sig {} {} {}", to_hex(&pair[64..]), to_hex(msg), to_hex(&ext_vrf_sign(&pair[..64], b"ctx", msg, b"extra")))); + } + } + + out + } + + #[test] + fn kat_vectors() { + if let Ok(path) = std::env::var("KAT_WRITE") { + let mut lines: Vec = deterministic().iter().map(|(n, v)| format!("{} {}", n, to_hex(v))).collect(); + + lines.extend(randomised()); + std::fs::write(&path, lines.join("\n") + "\n").unwrap(); + println!("wrote {} vectors to {}", lines.len(), path); + + return; + } + + let mut expected = std::collections::HashMap::new(); + let mut signatures = 0; + + for line in VECTORS.lines() { + let parts: Vec<&str> = line.split(' ').collect(); + + match parts[0] { + "sr-sig" => { + assert!(ext_sr_verify(&from_hex(parts[3]), &from_hex(parts[2]), &from_hex(parts[1])), "{}", line); + signatures += 1; + }, + "vrf-sig" => { + assert!(ext_vrf_verify(&from_hex(parts[1]), b"ctx", &from_hex(parts[2]), b"extra", &from_hex(parts[3])), "{}", line); + signatures += 1; + }, + name => { + expected.insert(name.to_string(), parts[1].to_string()); + }, + } + } + + let actual = deterministic(); + + assert_eq!(actual.len(), expected.len(), "vector count"); + + for (name, value) in actual.iter() { + assert_eq!(&to_hex(value), expected.get(name).expect(name), "{}", name); + } + + assert!(signatures > 0); + println!("{} deterministic vectors equal, {} recorded signatures verify", actual.len(), signatures); + } +} diff --git a/packages/wasm-crypto/src/rs/kat.txt b/packages/wasm-crypto/src/rs/kat.txt new file mode 100644 index 0000000..6d94e3f --- /dev/null +++ b/packages/wasm-crypto/src/rs/kat.txt @@ -0,0 +1,190 @@ +blake2b/0/32 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8 +blake2b-key/0/32 e65edfce5a36261cd824cb0f0da736b1109dcf20d2b831d598f337bb3552a3e4 +blake2b/0/64 786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce +blake2b-key/0/64 5b3cfd8f422b490b764b55eceb330b500c79cbefa9a928ad00202b8b3c5dd778a81122570434a2e3b8bfd028d105dfefd0a9576e88ed66de742ca9fbb5f8d2b6 +keccak256/0 c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 +keccak512/0 0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e +sha256/0 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +sha512/0 cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e +hmac256/0 5d5d139563c95b5967b9bd9a8c9b233a9dedb45072794cd232dc1b74832607d0 +hmac512/0 84fa5aa0279bbc473267d05a53ea03310a987cecc4c1535ff29b6d76b8f1444a728df3aadb89d4a9a6709e1998f373566e8f824a8ca93b1821f0b69bc2a2f65e +twox/0/1 99e9d85137db46ef +twox/0/2 99e9d85137db46ef4bbea33613baafd5 +twox/0/4 99e9d85137db46ef4bbea33613baafd56f963c64b1f3685a4eb4abd67ff6203a +pbkdf2/0/1 00ef42cdbfc98d29db20976608e455567fdddf141f6eb03b5a85addd25974f5d2375bd5082b803e8f4cfa88ae1bd25256fcbddd2318676566ff2797792302aee +pbkdf2/0/2048 35f714d09fc952c6a401e07081ac644e1e090de3c8744c28af0dd19396faee9de002d4eb6dbc1d09f1ffb96652d8a24680349622bed48aba991cd81436b3702a +scrypt/0 8356b146b42af574e460300b44136b284c796d7e73d81b1e5069b265f9da1439b3577a0604829f1223e68820075799a47b37bb86f0ca88aded76c4e97a7e9f1c +blake2b/1/32 bddd813c634239723171ef3fee98579b94964e3bb1cb3e427262c8c068d52319 +blake2b-key/1/32 0330531d097355a3f72e80d55c1245ccf79f1704431c6e3887938320442c23c0 +blake2b/1/64 ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923 +blake2b-key/1/64 5c6a9a4ae911c02fb7e71a991eb9aea371ae993d4842d206e6020d46f5e41358c6d5c277c110ef86c959ed63e6ecaaaceaaff38019a43264ae06acf73b9550b1 +keccak256/1 4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45 +keccak512/1 18587dc2ea106b9a1563e32b3312421ca164c7f1f07bc922a9c83d77cea3a1e5d0c69910739025372dc14ac9642629379540c17e2a65b19d77aa511a9d00bb96 +sha256/1 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad +sha512/1 ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f +hmac256/1 9c196e32dc0175f86f4b1cb89289d6619de6bee699e4c378e68309ed97a1a6ab +hmac512/1 3926a207c8c42b0c41792cbd3e1a1aaaf5f7a25704f62dfc939c4987dd7ce060009c5bb1c2447355b3216f10b537e9afa7b64a4e5391b0d631172d07939e087a +twox/1/1 990977adf52cbc44 +twox/1/2 990977adf52cbc440889329981caa9be +twox/1/4 990977adf52cbc440889329981caa9bef7da5770b2b8a05303b75d95360dd62b +pbkdf2/1/1 ed5eaa90fc29599df803befca3c4305baac330ee54dc648a8850eb233c0edd5c835b721009aefa870e81bbb026fd265fe7316096998299dce1689e8942651223 +pbkdf2/1/2048 a81678b52a3db3a13e307c5ec8e2d0c77b4be2fb3eaecde640acd14ca6b7f94da769cbd3391aa9221f8c90221eaa21916e455cd67c1818c4f3023a2e3fb42ede +scrypt/1 057f3a65a87ea4d7358e38387ed115ccd48329f3860aa2a038af4669fabb2a0e3ad24b499cfa1f99eb9b62e180039aa4210e5735793807689642c13a95c2113e +blake2b/2/32 a1442fdad4d4e5214e4086836e6accd66cc62d4cf3445dae60006ba025c070d7 +blake2b-key/2/32 7d866f7bcac37163a15a32a822d6ad569c8429a994e12ff94b80780a09bf9718 +blake2b/2/64 d9d6d77e0408eef086662db306f66af8852e2c70cebbf2e43ccb33c99499687b7a43897b49716c13096986f090042091052ff2c30a095c246fd4c56f16dd1ee8 +blake2b-key/2/64 9d42ae2a54bf6638b443c5f1c9935c74e5f894501cdc46cae9cd0cc19f536c3996d53cd993449519bba88f95c9be66d833c103c5f36e8b6d076886540628eefe +keccak256/2 d9317789b18e31eda7f125c541e8eca191f4b6f429970b2e23def6bebc9000d2 +keccak512/2 5345c3dadf2c61016fbb23a14ce532d75dd6ae3d7112ebaec258680acc8f70b7591ed4b66688e5501b7126182be2ef48f560ca451c60451d3d480a7c7edd92f6 +sha256/2 008549d94fa71e7a0a483d84380d05a923a4b18e79ba1f8a8ddac923956d32ef +sha512/2 6e980832aa820e5fe6c6ce011c36cd3cbe95596c9069c6067fab48bade8bbeb4e6413acb61bb1286c67c28a07e3f4099f1805a2b199cc0fe51aa5cfb1b66a40e +hmac256/2 df667edcc6df9bb665b74643b50a7a7bddc394e8acc2a0bf16d000330d39db73 +hmac512/2 7df02b56487c0448f88d6e44c729dc6ded0b0a3add5e7e97e2b5fb8981416fbaea03e991f3c779cfa790eb69ca6c08f596b7e3b9af36b293fe68fadfd5d3b70c +twox/2/1 8dc5e3cdc100339e +twox/2/2 8dc5e3cdc100339e6e7ef29bc88dfcd7 +twox/2/4 8dc5e3cdc100339e6e7ef29bc88dfcd7c877b13a6b38c137d269ec9a21c100ce +pbkdf2/2/1 3f4ed9a95e4b71232c3746d036eb7df2e3e469e2a78f7b4fb593c1a766805dba0bdbbfd349b63438c9dd4c555d36e9d3ce91f3d709d7d7d2d499a2b263da4f63 +pbkdf2/2/2048 5275d2231e2fe9ec731f790a679641fec34b2e92806d8aca37b6c87e4b8049579c6e6eae5cf2679280617f2480f81e39f9c4ddf1e4d7292117eaca48af422838 +scrypt/2 4ec391c472568d379316c8a14a69128a2aaa27d5d66635e7c682a90af07be9a2ec09d618f6dbf222bbe676883c8b2bf52a3f3600b6bea403ce04f9c123de166d +bip39-valid/0 01 +bip39-entropy/0 1a486a5fbe53639984cb64b070755f7b +bip39-mini/0/0 fac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e +bip39-seed/0/0 02d5cd1db85b4d1397d78978062a1160e76e94cc5aaad3089644846865bb18fc +bip39-mini/0/1 7093ab08d7abbb67ff41479a98ef998e4be773901f13668a012f51d207577a88 +bip39-seed/0/1 a6a63e14e4aab9ea6d031a84fd49650b337cc06916f8c8e7bb1e6b3a47024867 +bip39-valid/1 01 +bip39-entropy/1 00000000000000000000000000000000 +bip39-mini/1/0 4ed8d4b17698ddeaa1f1559f152f87b5d472f725ca86d341bd0276f1b61197e2 +bip39-seed/1/0 5eb00bbddcf069084889a8ab9155568165f5c453ccb85e70811aaed6f6da5fc1 +bip39-mini/1/1 452cf529afdeea38864bda6a771ec77c165498e57c8b53270a918e2a95d6e384 +bip39-seed/1/1 319a85221b9c4ce9a2896ed8cb2c0ea205c44c512d9214c9d80e663b8aa97f09 +bip39-valid/2 01 +bip39-entropy/2 7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f +bip39-mini/2/0 f02cdc109954e34cd3f0c60fdb0c97ffb3a934ad1cc9a4df87b8417024b8bdbe +bip39-seed/2/0 761914478ebf6fe16185749372e91549361af22b386de46322cf8b1ba7e92e80 +bip39-mini/2/1 91ae31651bbded60d4abbd2aaeada3fc32dc4883aa42bf74aaba714a7cc370b6 +bip39-seed/2/1 78eb30f9eb2e381142f81fb2f91af8009a7bae045353c81d41b9965e79753042 +bip39-valid/bad-checksum 00 +sr-from-seed/0 5046adc1dba838867b2bbbfdd0c3423e58b57970b5267a90f57960924a87f1560a6a85eaa642dac835424b5d7c8d637c00408c7a73da672b7f498521420b6dd3def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 +sr-derive-hard/0/0 5044f1b94dc23e1422b8ff1d16e5c185acd6b1ab0b045edaf52da481e6060f4aeba185d47626304c56ce22f661d7e04bc060bf92367a240487ad3368dfa4f0587eb473cf3ffb7f799a5e7e8a3d864bc9fb558ad77ffd45354f5a64733a8dcc5b +sr-derive-soft/0/0 90a1831445febebaa7ad670736e7e1a7bc7a40c860d11a0d45a834552241e70182cbd8a1cbc65ae31b6606f759c2774846b051c4ec605652d96c39525fbcfd14 +sr-derive-public-soft/0/0 82cbd8a1cbc65ae31b6606f759c2774846b051c4ec605652d96c39525fbcfd14 +sr-derive-hard/0/1 f028af100e19eb2d977031a7a119d61b3b74d230566da8047b5dfab057d199605ba3dce88aad5127a2d9c2d9e15fffb12cf00a6539b4c5a8ab1f6cf1193028ddeef10a01961b20f466467b28afd462be66cc747df9dd2a5c932eb7a05bc1af41 +sr-derive-soft/0/1 d06e1aab2adca5772c61a9b1b290aa850ceda6c68dddb7cea89cccece53eac0cac99e7d9f2b492a0f87a976817f6608b24aaf14206b5e7d5dfd7713a10795620 +sr-derive-public-soft/0/1 ac99e7d9f2b492a0f87a976817f6608b24aaf14206b5e7d5dfd7713a10795620 +sr-agree/0/0 167b3784188f948efda66d3e08b71354f258db1665b4e63abf903b6319372668 +sr-agree/0/1 6cae5cd4b5ed7f11ddb9a0c20d3acbb51c6027ec291fa2f8b9b23e86a4903112 +sr-agree/0/2 eec62f77e9c050cc1da6920441ec7fd30fc2471c5633ecc0151265068fa2021d +sr-agree/0/3 dc75f9d7da57ff15e65def295e1a416a53577701b15b3de904c38031297b8d7d +vrf-output/0/0 8034451570f66a23cd631f06a53a32683eb187aa00545bfe9653a255a0e36b49 +vrf-output/0/1 301103529195cb77dc71efdcf5247817d40fb3d17c2a66a433a98e8a005e155e +vrf-output/0/2 74bed1f7eede4ac3f11ccd72094732987b897994e31f106dc42844bd1146d112 +sr-from-seed/1 10174084cbded240bf5356f2f95f5dde0f8db69ccad7d59e70b871887e597a628b9567dc8368839e2346f9553b4968c6fe856d5a7669f1c54e96f65cfda4b039de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f +sr-derive-hard/1/0 e03363daba6aa72fcf612b75fa6332c0293f23eb7fc3867832f1ff6dc00500525f2be6935ae55cd6ab40e1c4f278972b31e2331cb15193ae01c58b61545077fff0af6c7273314323ecd59b7751f6af00535e91be0c706a55c7e171706ec4d006 +sr-derive-soft/1/0 28b95df54828b985d5e0097049bd347fcc711b44fe0850d4db84c14d5ad27d17f66f661828ec788ca585703c0a14cc13a4d385299cfdfb148f4f554a1791f12e +sr-derive-public-soft/1/0 f66f661828ec788ca585703c0a14cc13a4d385299cfdfb148f4f554a1791f12e +sr-derive-hard/1/1 2881967aef71dc5c5385863b7ae78d901f2c48dcc0a6d3a0d1d3aaf62e2e935429943d0a1042cf3392ed094bbedb495c988401d753de3d67f8359513243a0b9d6ec838a4b1373518b303544d098c0636dbabc63703c8bb5b24e5f36ba5cc527c +sr-derive-soft/1/1 087a06cb2153ded6faf219db4aa987b36beeaa1b7fa0602bca6e5eec92b098627454f8850f657d7d6ce095fd95cf960b5a3805746269e7ebb04d346bfb850208 +sr-derive-public-soft/1/1 7454f8850f657d7d6ce095fd95cf960b5a3805746269e7ebb04d346bfb850208 +sr-agree/1/0 6cae5cd4b5ed7f11ddb9a0c20d3acbb51c6027ec291fa2f8b9b23e86a4903112 +sr-agree/1/1 924c672d1fab64258297edf443ca56d08c214cff4a01f42a1386ea5ec7a56133 +sr-agree/1/2 2a799825b0bedcacc2b612057beb92d27ce3373fc98e90a6fae94e61ab0a656b +sr-agree/1/3 66d68f1a30ddc58cec6c823c6d9508bb2dd9e48ffc892aee4236d9f1d2646807 +vrf-output/1/0 82efcfd875532dd24499defd3ffd0c1d4940111cd5e780b96027c799ef390648 +vrf-output/1/1 7c6d026b220fb01a1301bb704d0c30c6e640a69ef52e0d35ef442670e26fc97b +vrf-output/1/2 3084beefb7ac40f766731657c5e776f4a15e20beca9eef8842121e2b3910dd22 +sr-from-seed/2 18b5f3e9309e299a29105131170fa7be75d1dd8b3a89074a3ee24e564deb6b5b433878ae7fe6b5e12e48d14574ef972534a02797c5f4a4ae4bde996256f619b16203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d +sr-derive-hard/2/0 407f24ae017ce772e36bf577ab705547658cfed7b34d4afe3734be5476119a69f8fcdaff281ff8c13cc1419d7c841028c1ce21b55f2ba51dc646154356cf6cf894e23f5a2546a3a1a2677ff796b0e0e920da3cecc952ab1a8021519775352d5e +sr-derive-soft/2/0 282441e695a327a73028d4ca68749bfa995887f9fc8b73826efef7cf627ec07542581161e52bd1f724155363bffe777eecc177bf1fdbf26b592708a4db4f902e +sr-derive-public-soft/2/0 42581161e52bd1f724155363bffe777eecc177bf1fdbf26b592708a4db4f902e +sr-derive-hard/2/1 6893644ead32fee42054765cfdfd6782dd05fe71aa42e5f2a0b3a72818e04c5d4dde56050f646d29415387517e9b3408887e86cede78b5ce83e303255f20e994dc824fcc74ce2b393e73f5f18cd2e29dba66d5411da3860399d74f8556eccb71 +sr-derive-soft/2/1 5807278a18c2e1a4507293abe3fd236e519375e4e624555e787ea34596917a74362e7c82958a3a5cae8a8cd990164988b51a4cfde7003de403c98602fa878d4f +sr-derive-public-soft/2/1 362e7c82958a3a5cae8a8cd990164988b51a4cfde7003de403c98602fa878d4f +sr-agree/2/0 eec62f77e9c050cc1da6920441ec7fd30fc2471c5633ecc0151265068fa2021d +sr-agree/2/1 2a799825b0bedcacc2b612057beb92d27ce3373fc98e90a6fae94e61ab0a656b +sr-agree/2/2 1a6103aa0dcb2e6bcc500b2a15a4e7523e831e61d85daa30630c25241e74187e +sr-agree/2/3 f4ba4a535cb371f26f1abc39d0b02911f9fc70daee91f7c12fcfa3113adcf033 +vrf-output/2/0 60976686251d496cacbb2f4e0659aa4fd056b29fed678528d08f6535b1edf469 +vrf-output/2/1 94ba6bcd758ccfae3808ecea73d5c490e9c5c114dfcb5264a5190d808e3d600f +vrf-output/2/2 c467f93dbc5f425b6a506e2749dc8b29851587f7611aaff248ee291c65c48a35 +sr-from-seed/3 f0106660c3dda23f16daa9ac5b811b963077f5bc0af89f85804f0de8e424f050f98d66f39442506ff947fd911f18c7a7a5da639a63e8d3b4e233f74143d951c1741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 +sr-derive-hard/3/0 30db0fea8835bd5baf649a7bcefe3896b1155771d3e1a7629137d9c679fe4a43f53fe39df0fbcda94acf7386ebf8311c286559864c03f4379d2d40ffc874a87a0460ff03efdc8f3eeae36ad282d41a8398e20703c5504fbc18ec238df4b9855b +sr-derive-soft/3/0 78e2c707b9a946a6afe82cee0bef0c7db1983f5e050de868337f62eb978e492a68d447f32488ba7a1a65e3a0ffa11e747dae52aea4a18b789980f23477c52356 +sr-derive-public-soft/3/0 68d447f32488ba7a1a65e3a0ffa11e747dae52aea4a18b789980f23477c52356 +sr-derive-hard/3/1 a8bf865205c69ebcdb1efe9edec3b96ea65dd9a071f01e76c91c2af940645f44e96cf7443b19c1866b66535cbcff7afc4b135971ab2ce3bac1ab5e4e4b0e9640106bf4e2d66af916c7b893c7f377ee7c55bc7b63dbbf86f0b65696fe71afcc26 +sr-derive-soft/3/1 00223435066f51ece75129f67ba4ec74bc86dfdc951d43f93164d061d3ba7a53f869cd2226b3e1d4648e90c2ab8ed9db5243e23e9d12a814f060b5c447fda835 +sr-derive-public-soft/3/1 f869cd2226b3e1d4648e90c2ab8ed9db5243e23e9d12a814f060b5c447fda835 +sr-agree/3/0 dc75f9d7da57ff15e65def295e1a416a53577701b15b3de904c38031297b8d7d +sr-agree/3/1 66d68f1a30ddc58cec6c823c6d9508bb2dd9e48ffc892aee4236d9f1d2646807 +sr-agree/3/2 f4ba4a535cb371f26f1abc39d0b02911f9fc70daee91f7c12fcfa3113adcf033 +sr-agree/3/3 12769eae8157152c1a69e4459a7fd7b1c4ce55d8a5eb68aaac9324df08c7dd1f +vrf-output/3/0 148beca7e06f7af6b57afaede17362acfc6ffe64a341274428daec2673391023 +vrf-output/3/1 de4cb325ffb4c4b4f71c2992dddc16822614ab8095e30c5abe22b125ac480110 +vrf-output/3/2 ccda5008c43516b79733d6d8eb3634f0450d1b9ccfca0b205420dd78bcb32d66 +ed-from-seed/0 00000000000000000000000000000000000000000000000000000000000000003b6a27bcceb6a42d62a3a8d02a6f0d73653215771de243a63ac048a18b59da29 +ed-sign/0/0 8f895b3cafe2c9506039d0e2a66382568004674fe8d237785092e40d6aaf483e4fc60168705f31f101596138ce21aa357c0d32a064f423dc3ee4aa3abf53f803 +ed-sign/0/1 b17a3d196768eb182c746cdc592ecd5ba54b815a300a08efaf08893a0fcaf7bb2c2d0b9e7f108f0e257d79db7a79786445db8631c42ee7693cd75477737f0c00 +ed-sign/0/2 8b7e54ff43aa6385f57ded8b5a903549c7c6783d28b3492ed542f29dd8a2ab387542ddc24b770758c5909ec56caa4901ed90013e338d28fe753f2b1f6b601908 +ed-from-seed/1 0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252600d05a1d1ea251396d557afbd4588b3c6d99dbeb972fed10a32562ea26dcdcfa +ed-sign/1/0 26caf293a0b11c2c88f2f9e98efdb42e32374943589bfa449998a1738f93a3d4773ecf386def504ff8f5febd5118a28ae5747ac92c656609d0a3631d5d59a90b +ed-sign/1/1 1317bf325ad62aba070e8fb9cfb3886e31750c6865b78355fcc4d75a6b810041fdcf756d5bc6e144f7f9cad4b893719af6432233acf7c8daf21414ef72b9b703 +ed-sign/1/2 fc354b2898a0d700924879de329b5ab6f6fc2d0c3d2579633b7ee8c0e81897e1eee10efd7e7d0b98ce889cdeb266ccaf837d20b4aa82dfa3ed73bc38820b4805 +ed-from-seed/2 0768c92f90f157b81e7fe046a70d6ecf3596f75dbe2485e64cad1374d53b9c029ab3e3b7fabda8a899c3a93b711ce3e9c092793491a49ab3f93331db7a1a0f8c +ed-sign/2/0 dacab8d76acb5a01d013adf2ddd496e40219c6bfbd900de355eb15acb4bce2ae0b7430fe49f710415b392d6280f2490ee7a58c775d661796fe79adc1b6dd1e0e +ed-sign/2/1 c590b0f69cd4249904292ccd6730a454dd51bafcafa1844a01c5ea64ac162c17b9bd7041faa0eec85f92674c86cb3cda027634c6c4e17837991135865be03901 +ed-sign/2/2 9f115cbe6ff1829400c2ed3cc90a325d0a48cf180fde0cb148064800911d6b81e0a38a62b4c7e12fd630c5588e2fb90814c33e1ca2fade665da245e2251e6200 +ed-from-seed/3 31323334353637383930313233343536373839303132333435363738393031322f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee +ed-sign/3/0 9307490e912de0ee8eba762e2dab214b142d9943469db0698274ccb3a091a5df24dc0bed309a808c4cd7ba1addd17a5ede576283566f22915884d3c361db400d +ed-sign/3/1 90588f3f512496f2dd40571d162e8182860081c74e2085316e7c4396918f07da412ee029978e4dd714057fe973bd9e7d645148bf7b66680d67c93227cde95202 +ed-sign/3/2 e5d1b0dfa9cf77a5a36e6d67c65ae9241d4fa08dcda94da4d294870bae05561f2a78f7053f5082d2b4a889307eff3dc909e36edfc05656806d4594542e5f9c0f +secp-from-seed/1 0708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526029fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55 +secp-expand/1 049fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55f0ca1d755158126236856b08e5ef1c7f58953fa09c681d33fe63f02e07d0af26 +secp-compress/1 029fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55 +secp-sign/1/0 f835e88462a652882078de1c490788ef2bcf5c3654f46ab2dd57d75732420ffa1e345a225a4f6b4159344e96179390e50ec2deda161f0c21a80aa45880cf5fdc01 +secp-recover/1/0 029fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55 +secp-sign/1/1 20d00d17b9beb4920f1f2b868ff4f97f37d81305bfdd5251c4ad1166f8b1f74303f816436197dc2d0548a188224f20515e19d1214a2eb84acb660fd797925b6800 +secp-recover/1/1 029fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55 +secp-sign/1/2 6b5e6b28801042beb245714ae0e637b6f9eecda27872eedb89662f3a9eb7a7f877323adbd8630226700325f379db189ae11abf7f701e25899f11d9d93203315e01 +secp-recover/1/2 029fc3f04c2c6e14d06fe30048fb902506d674f5f7543dfde498b1d26e1a6c1f55 +secp-from-seed/2 0768c92f90f157b81e7fe046a70d6ecf3596f75dbe2485e64cad1374d53b9c02027854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc535 +secp-expand/2 047854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc5350d083efb4c1199c119862d8d48741a4e471778b892e929e61d083494790b7f16 +secp-compress/2 027854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc535 +secp-sign/2/0 a4ce55a43e3483b38cb0c3423e16caab5d3c4ef754a22dd57de2488ea06a8d4c3be5ea6c3a17ac80f44bc6fb16d42983fb1903a7c762ba2bd97a771e5258b03101 +secp-recover/2/0 027854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc535 +secp-sign/2/1 6a2fc029d7732e9a4c148f06456493552ae117f2a9bc16362b204a11541cff202b7bb6fa926d3f2060a1d01c43c1ec194deb7dd397161ef16c11a906147c16ee01 +secp-recover/2/1 027854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc535 +secp-sign/2/2 61013addf85a6c17db744c01806151eba601c78f94676116684f8f18503c68822a6bfc7fe4bac84f1327d067d1e412a1c752961f9cd3f172010d9f035e43157f01 +secp-recover/2/2 027854493edced8484912d36f6b8ac3aaf28fe5b7db24341ff5b489b84679fc535 +secp-from-seed/3 3132333435363738393031323334353637383930313233343536373839303132035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9 +secp-expand/3 045676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba995840f3de562156558efbfdac3f16af0065e5f66795f4dd8262a228ef8c6d813 +secp-compress/3 035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9 +secp-sign/3/0 c4d4c1a10f58684a3e3c7fb67a8548bd590f80af64dfd48bcc6536e2154e4d3e70723a81f9632f374e695cecdb8a0fe0454b1ff286eae33718de64bb5e356ba501 +secp-recover/3/0 035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9 +secp-sign/3/1 ffe654ea46d9d27cd83ea6910975ed177f02e9a18638faf42dde95d62bd37c387b91c7eba9c5f13f1c57ca1b58eb1af0d5a82838d75b1661c444db6cd367696201 +secp-recover/3/1 035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9 +secp-sign/3/2 531bb640dae78253cd466cd851e6d7a9b4354b37113916b5c3c3e2574bb3e58e6008c7a5eed95d50619b7b6b2a79218edc23a96379228d6d40be9038701614a700 +secp-recover/3/2 035676109c54b9a16d271abeb4954316a40a32bcce023ac14c8e26e958aa68fba9 +sr-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 489ef0f010a64a29fe278249fdf508a2ce10343c870d355b3924808dd578105ac62a7d03c0bddcc4ce18a37ef11c3f8e9c368359ed5651a6cbc158045e55e38f +vrf-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 8034451570f66a23cd631f06a53a32683eb187aa00545bfe9653a255a0e36b4966c32822d053d2b22d117e93ed487dff3e87fd0f5a24f4b1819689e4ad105805e816caa25dee6b2a5cdfbf0f0a729e4b1eb13ef68fbaaafcddbaf28cb6e13d02 +sr-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 746869732069732061206d657373616765 6227fc211d63e52f0c503c9e83b6cb08dc4b425549ff1353a278ec96bf8e092adf00d9abc61bc5813b5c51c0b880962c9dd090432fd6a50d8169bdb449c54f84 +vrf-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 746869732069732061206d657373616765 301103529195cb77dc71efdcf5247817d40fb3d17c2a66a433a98e8a005e155ec45289f04e912c7fe023aa8de6bd18ca1c6a4503f4cba42e28b9b347d3d04b0d0467674d5bb81a64e61bb76dc8faf0d329503bee350f9c11eae39b50cfcbb10a +sr-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c 92c5e8af927f2a6f05f4d0c2e98216fec55be4ef04d3056713518bc92d9cb930ebc461d3856268f0f5ce309a0f253d331b04140a8b86f32820d1ff14a9888f8a +vrf-sig def12e42f3e487e9b14095aa8d5cc16a33491f1b50dadcf8811d1480f3fa8627 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c 74bed1f7eede4ac3f11ccd72094732987b897994e31f106dc42844bd1146d1120eccdb5e58fbd8670f34994b1799d1abbac05a94c71acbcd9307028647289e0c31099af1dbe439980a9ceb9ec13d0d02697cbfba563e9821d5f92ecd2cf7c007 +sr-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 80ebf0b599bbd01d981b56f80b79ab85a31fc1b055f839d8b10d5bf67d9e3d21316161bf3f1898160960e94d2cd174f4dff9f42b4bc35dc29c7059480b47ab85 +vrf-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 82efcfd875532dd24499defd3ffd0c1d4940111cd5e780b96027c799ef390648d88bfa89260ecd557638dfe76d1c4c94b908c7a31464595e912f889ace79c30f77b14188af3d46dc57efbe09a7852ecfb62bfcdcf119c3657a23fa899a3f4508 +sr-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 746869732069732061206d657373616765 a8f97775d5a0576cf5530a8eb6baa63e2d2ecf610c9db682cb06c52d40931f323e446a5284e9966ccd2643dc6e91341adf6a097733904704feb0c517108ca38a +vrf-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 746869732069732061206d657373616765 7c6d026b220fb01a1301bb704d0c30c6e640a69ef52e0d35ef442670e26fc97b8a8e371e84fd521267123a09fad8ac4d872dfa422d8aaa3336ac8a181b1c3a0dcf2b60ecdec3ae5ef4d173dd18bc5af5f7d6567f78a709e1294c1f59e2d81f06 +sr-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c e82217ad07422ca25fb31f55d4d5cf42bee685805d6df610b80e1a3a8a1db34b3ce20bafeba409f16897796ccf003c49d180b4c0385c268eef708246eead2183 +vrf-sig de4ffab050e3f3f1f982b872c5ec0455294fd16afd9075f75e9379a3bbde725f 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c 3084beefb7ac40f766731657c5e776f4a15e20beca9eef8842121e2b3910dd224a56473e60302b2d75debce2ee9c58a96d4aa51a925a5fa9b329a2a017821e00df68f265212c530894ca79f7e34645b2e6231f988556079eaf42c917d9a48309 +sr-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 5a26f5322c87182853d2dd53efe8ebf99e5af4f91eec877b70a04480a461c87f4f5dca4524ed4a402f44d3f7df25e9d7b774d3faf72e55aa4b1f21434ed43283 +vrf-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 60976686251d496cacbb2f4e0659aa4fd056b29fed678528d08f6535b1edf46917918ece5448de5c785e68fd87c55a51479c8c73b924993beb7ab3e5df0d9c048438dc24fa5e55a5d5da664352200abdabf24c9ff2c48c30ee96ea068a62090b +sr-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 746869732069732061206d657373616765 fca168d5fbd24de746a8355bd7b7ccf63be6004d409f57cbd5cbc4417d7cd62a1744ab46e8727f07d97d4c3d365c45a1fdea956c3ee8cb06ef2c76bd7f1a5185 +vrf-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 746869732069732061206d657373616765 94ba6bcd758ccfae3808ecea73d5c490e9c5c114dfcb5264a5190d808e3d600f84f43f5e35779d0b1e7d0a7363bdd956bc2fd307a2848ec453ee1f4c24363a042c1089a2384872bf1bad1150836275e6c46d33d6c0c5212b2db4ca123e14e703 +sr-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c 8cae0772e5b1a61f20b470b4ad6c1e39ae7a0b6c1df91ec2a2400c266260233211ce9642733d8dcea1c379a7bf7fae26ad61b08010f403293999885c329dbd82 +vrf-sig 6203b67c5d1c658dee4b31a11cfe03d92552b2797c2a133c8a19682cf24b190d 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c c467f93dbc5f425b6a506e2749dc8b29851587f7611aaff248ee291c65c48a350e013366e544e139aaaed170e8e6f0d286e0da524e63113e4833101bf8d2320b34734ec4aaa25bec04efccc58769c7025e6206be845e6d1e31e4d694c4f8b308 +sr-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 06ca2e9488b09c7c04da6aa1c76d21d9a8d46b76e6aa9de90fdd0fce5a631b480e17f117b91a40078b860187c1f73a826a990307e6274964b3c56a48a86d6d83 +vrf-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 148beca7e06f7af6b57afaede17362acfc6ffe64a341274428daec2673391023156cd7ab6b592e06b7db0730a03087daf1db0b2cca53a8003b4320808167ac07832d70afe11d94053a5e4797bdda84e0648d36cea531f6106fe7959a47bcc20d +sr-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 746869732069732061206d657373616765 04702b7b88ae806032fb95a8d8e9ad49dda9cc0750e75b44ee5693b0869be64108454fc72fc7344aa32663f369c6bc6a916a0b82910ad6c56ef4a15d25ce1b83 +vrf-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 746869732069732061206d657373616765 de4cb325ffb4c4b4f71c2992dddc16822614ab8095e30c5abe22b125ac48011075ac32720223d70f2b89b8fa95f94851dd14f14bf1baca89431895f4cf12fd0ef6176912c3d8a5d526fe33adc0dac19a974d3205eba3f9415e4e2e05d554e807 +sr-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c 3afa41b7c10ae063c807fd2cbe8eaf63a25bd8a3af26a1f6685b0896190f5b481a29aa6ab2a2560ebdb3792739aa609c8cf183a77b3d9c81bc8be8c716916e8c +vrf-sig 741c08a06f41c596608f6774259bd9043304adfa5d3eea62760bd9be97634d63 070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c636a71787f868d949ba2a9b0b7bec5ccd3dae1e8eff6020910171e252c333a41484f565d646b727980878e959ca3aab1b8bfc6cdd4dbe2e9f0f7030a11181f262d343b424950575e656c737a81888f969da4abb2b9c0c7ced5dce3eaf1f8040b121920272e353c434a51585f666d747b828990979ea5acb3bac1c8cfd6dde4ebf2f9050c131a21282f363d444b525960676e757c838a91989fa6adb4bbc2c9d0d7dee5ecf3fa060d141b222930373e454c535a61686f767d848b9299a0a7aeb5bcc3cad1d8dfe6edf400070e151c232a31383f464d545b626970777e858c939aa1a8afb6bdc4cbd2d9e0e7eef501080f161d242b323940474e555c ccda5008c43516b79733d6d8eb3634f0450d1b9ccfca0b205420dd78bcb32d665bb235b82980d7913df4bc52d257a08d4b4affc3273e8f10dc9840561a5be7003ba4937bed0d3e124dfe2047f11b91422c7578ac727904f53402bec72d44b00e From d0520842dc239f76552ac8cddc171676e288319f Mon Sep 17 00:00:00 2001 From: Satoshi Qazi Muhammed Date: Mon, 12 Oct 2026 06:17:29 +0400 Subject: [PATCH 2/6] Move wasm-crypto off the crate versions with advisories curve25519-dalek 2/3 -> 4.1.3 (timing variability in Scalar52::sub, on every signature), ed25519-dalek 1 -> 2, schnorrkel 0.9 -> 0.11, merlin 2 -> 3, secp256k1 0.21 -> 0.29, tiny-bip39 0.7 -> 1.0 (drops failure), keccak 0.1.6, rand 0.8. wee_alloc is unmaintained and is no longer the global allocator. OSV: 9 crates with advisories before, 0 after. secp256k1 is built with lowmemory: newer libsecp256k1 embeds about 1 MB of precomputed tables, which would have quadrupled the wasm. The signatures are the same; recovery uses a smaller window. getrandom 0.2 is used with a custom backend that calls one fixed import, wbg.ext_fill_random, which the bridge fills from @pezkuwi/x-randomvalues. The getrandom "js" backend would have needed a dozen new hashed wasm-bindgen imports in the bridge; the wasm now has one import instead of 18. The recorded known answers still hold, and signatures made by either build verify in the other. --- packages/wasm-bridge/src/wbg.ts | 9 + packages/wasm-crypto/Cargo.lock | 565 +++++++++-------------- packages/wasm-crypto/Cargo.toml | 18 +- packages/wasm-crypto/src/lib.rs | 25 +- packages/wasm-crypto/src/rs/ed25519.rs | 27 +- packages/wasm-crypto/src/rs/secp256k1.rs | 6 +- packages/wasm-crypto/src/rs/sr25519.rs | 2 +- packages/wasm-crypto/src/rs/vrf.rs | 4 +- 8 files changed, 272 insertions(+), 384 deletions(-) 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(), From 8f3c7354c73b9e934b4a93f8cbe46caecd50a912 Mon Sep 17 00:00:00 2001 From: Satoshi Qazi Muhammed Date: Mon, 12 Oct 2026 06:17:29 +0400 Subject: [PATCH 3/6] Keep build machine paths out of the wasm Panic messages carry source paths, so the 7.5.20 wasm names the home directory it was built in 54 times. Remap the sysroot, the cargo home and the checkout to /rustc, /cargo and /build. --- scripts/build-wasm.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/build-wasm.sh b/scripts/build-wasm.sh index 7b99b78..cee2196 100755 --- a/scripts/build-wasm.sh +++ b/scripts/build-wasm.sh @@ -16,6 +16,11 @@ DENO_ASM=$DENO_DIR/data.js # build new via wasm-pack echo "*** Building Rust sources" cd $PKG_NAME + +# Panic messages carry source paths. Without this the published wasm names the +# home directory of whoever built it; with it the bytes no longer depend on +# where the toolchain, the registry or the checkout live. +export RUSTFLAGS="${RUSTFLAGS:-} --remap-path-prefix=$(rustc --print sysroot)=/rustc --remap-path-prefix=${CARGO_HOME:-$HOME/.cargo}=/cargo --remap-path-prefix=$PWD=/build" if [ "$RUST_VER" == "stable" ]; then RUSTC_BOOTSTRAP=1 cargo build --target wasm32-unknown-unknown --release -Z build-std=std,panic_abort else From b84f7231dd8031771ab155133e2d9b26c4fe3585 Mon Sep 17 00:00:00 2001 From: Satoshi Qazi Muhammed Date: Mon, 12 Oct 2026 06:17:30 +0400 Subject: [PATCH 4/6] Refresh the tooling lockfile None of these reach a published package (their dependencies are tslib, @noble/hashes and our own packages); they are build and test tooling. tar, ip-address, fast-uri, minimatch, brace-expansion, rollup, ws, form-data, picomatch, serialize-javascript, ajv, bn.js and others move to fixed versions, fflate to 0.8.3, and braces resolves to @pezkuwi/braces as in the other repositories. OSV: 21 packages with advisories before, 0 after. --- package.json | 3 +- yarn.lock | 536 +++++++++++++++++++++------------------------------ 2 files changed, 218 insertions(+), 321 deletions(-) diff --git a/package.json b/package.json index af45947..cb32b79 100644 --- a/package.json +++ b/package.json @@ -46,9 +46,10 @@ "@pezkuwi/dev": "^0.86.0", "@pezkuwi/util": "^14.0.1", "@types/node": "^20.16.1", - "fflate": "^0.8.2" + "fflate": "^0.8.3" }, "resolutions": { + "braces": "npm:@pezkuwi/braces@^3.0.4", "typescript": "^5.5.4" } } diff --git a/yarn.lock b/yarn.lock index cf5eb9f..46c5ae3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -448,22 +448,6 @@ __metadata: languageName: node linkType: hard -"@isaacs/balanced-match@npm:^4.0.1": - version: 4.0.1 - resolution: "@isaacs/balanced-match@npm:4.0.1" - checksum: 10/102fbc6d2c0d5edf8f6dbf2b3feb21695a21bc850f11bc47c4f06aa83bd8884fde3fe9d6d797d619901d96865fdcb4569ac2a54c937992c48885c5e3d9967fe8 - languageName: node - linkType: hard - -"@isaacs/brace-expansion@npm:^5.0.0": - version: 5.0.0 - resolution: "@isaacs/brace-expansion@npm:5.0.0" - dependencies: - "@isaacs/balanced-match": "npm:^4.0.1" - checksum: 10/cf3b7f206aff12128214a1df764ac8cdbc517c110db85249b945282407e3dfc5c6e66286383a7c9391a059fc8e6e6a8ca82262fc9d2590bd615376141fbebd2d - languageName: node - linkType: hard - "@isaacs/fs-minipass@npm:^4.0.0": version: 4.0.1 resolution: "@isaacs/fs-minipass@npm:4.0.1" @@ -794,6 +778,13 @@ __metadata: languageName: node linkType: hard +"@napi-rs/lzma-linux-x64-gnu@npm:1.5.1": + version: 1.5.1 + resolution: "@napi-rs/lzma-linux-x64-gnu@npm:1.5.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@napi-rs/wasm-runtime@npm:^1.1.4": version: 1.2.5 resolution: "@napi-rs/wasm-runtime@npm:1.2.5" @@ -1272,17 +1263,17 @@ __metadata: linkType: soft "@pezkuwi/util@npm:^14.0.1": - version: 14.0.19 - resolution: "@pezkuwi/util@npm:14.0.19" + version: 14.0.26 + resolution: "@pezkuwi/util@npm:14.0.26" dependencies: - "@pezkuwi/x-bigint": "npm:14.0.19" - "@pezkuwi/x-global": "npm:14.0.19" - "@pezkuwi/x-textdecoder": "npm:14.0.19" - "@pezkuwi/x-textencoder": "npm:14.0.19" + "@pezkuwi/x-bigint": "npm:14.0.26" + "@pezkuwi/x-global": "npm:14.0.26" + "@pezkuwi/x-textdecoder": "npm:14.0.26" + "@pezkuwi/x-textencoder": "npm:14.0.26" "@types/bn.js": "npm:^5.1.6" bn.js: "npm:^5.2.1" tslib: "npm:^2.8.0" - checksum: 10/77c06788c819f6024b21a198e31da6ba0b940a1609c75a141366810e3e418a6a3dfb8c072e4fc3bee6cd66eec4fb18f98a3be2e979fafb4d73160c697a8142f6 + checksum: 10/e06dbc39c134f384acbbd1e82272ec1416d6404637feb187680983dfa8d55844db550ed7482bc3045545cc09193825b5b8a7ba3f3dab7c46e913f81160daeda4 languageName: node linkType: hard @@ -1370,55 +1361,55 @@ __metadata: languageName: unknown linkType: soft -"@pezkuwi/x-bigint@npm:14.0.19": - version: 14.0.19 - resolution: "@pezkuwi/x-bigint@npm:14.0.19" +"@pezkuwi/x-bigint@npm:14.0.26": + version: 14.0.26 + resolution: "@pezkuwi/x-bigint@npm:14.0.26" dependencies: - "@pezkuwi/x-global": "npm:14.0.19" + "@pezkuwi/x-global": "npm:14.0.26" tslib: "npm:^2.8.0" - checksum: 10/81fd446f1f2369cb4aafd2a8e77f0ff608a2477f84d393974f4fd16e54492a8c27e14dfb95d618623ed60540d90dbc762f209268d0db9ffc3356d4f46ec9d5b3 + checksum: 10/555b92a5a18f72361b18ff2521051a050bfef593ffdebb59bec24f7d5864b808e012e8d04ed59837c218bf2ece228428d63c16b87f2b8bedcb885c425daaa83c languageName: node linkType: hard -"@pezkuwi/x-global@npm:14.0.19": - version: 14.0.19 - resolution: "@pezkuwi/x-global@npm:14.0.19" +"@pezkuwi/x-global@npm:14.0.26": + version: 14.0.26 + resolution: "@pezkuwi/x-global@npm:14.0.26" dependencies: tslib: "npm:^2.8.0" - checksum: 10/277e2a442f3e54ab5a66047e716038acfbf6f7215ab21bc3140aa8d891b2e5743842d63dc3d3bf63f291de62cc6ae74a5c569b8aceceef2a4887dbb69dfdb36e + checksum: 10/d526065deecaccdce472a7a6d3c2e73a9b4ab132457c39c5899565626be00a1260e277872db6f2ede5903a0d101cdeed5adf2106f7bd76f0ef53d66d95e54bcf languageName: node linkType: hard "@pezkuwi/x-randomvalues@npm:^14.0.1": - version: 14.0.19 - resolution: "@pezkuwi/x-randomvalues@npm:14.0.19" + version: 14.0.26 + resolution: "@pezkuwi/x-randomvalues@npm:14.0.26" dependencies: - "@pezkuwi/x-global": "npm:14.0.19" + "@pezkuwi/x-global": "npm:14.0.26" tslib: "npm:^2.8.0" peerDependencies: - "@pezkuwi/util": 14.0.19 + "@pezkuwi/util": 14.0.26 "@pezkuwi/wasm-util": "*" - checksum: 10/502e56f0a352d334479055397ca268130bdaac107c57601fa0fe18df1ba2e6b88abd9fa527fcae27249e3e53c75b94ccf05d2e8e5d7d0dbb9013f8f8afca0344 + checksum: 10/a5426268cd57ae81389f3f4b4aa214b4e4f08666e77805f3f329d4589ec5cf14f3b562955039a81717cb1b8f9339374b645f9e8b0b5f61e47078a2eb117841bb languageName: node linkType: hard -"@pezkuwi/x-textdecoder@npm:14.0.19": - version: 14.0.19 - resolution: "@pezkuwi/x-textdecoder@npm:14.0.19" +"@pezkuwi/x-textdecoder@npm:14.0.26": + version: 14.0.26 + resolution: "@pezkuwi/x-textdecoder@npm:14.0.26" dependencies: - "@pezkuwi/x-global": "npm:14.0.19" + "@pezkuwi/x-global": "npm:14.0.26" tslib: "npm:^2.8.0" - checksum: 10/9fb187addddcc05f02cb51d47f0ad8b61941cfe86da0595e5b0a5d4d18c22ed68bcdf334309aa339b46dee3d5fb3380a82b0f2fbdc7582f39722b70333be76c1 + checksum: 10/fd30940de6e0edd20a3c1080fa6e574859017003b507e27437efbc95f5c4590b3fd27489e7189c2fe1c8f587e822c038be156aa6b75853aab0df627c4194ad9b languageName: node linkType: hard -"@pezkuwi/x-textencoder@npm:14.0.19": - version: 14.0.19 - resolution: "@pezkuwi/x-textencoder@npm:14.0.19" +"@pezkuwi/x-textencoder@npm:14.0.26": + version: 14.0.26 + resolution: "@pezkuwi/x-textencoder@npm:14.0.26" dependencies: - "@pezkuwi/x-global": "npm:14.0.19" + "@pezkuwi/x-global": "npm:14.0.26" tslib: "npm:^2.8.0" - checksum: 10/636f58904cf69353dc919709a15340cc42a1120908d9d5038087833f85050350f900e11fefb52400f9f6af08f3e874b34fd3344397b637ab1d34964c4e0f81a9 + checksum: 10/f64ac10276624ebdbf7e84908675f5f1a630c19ed43efcff3de4992c13d76f13fcce0a5996d30ec9379430117e208570ea40f6cc7f5b089135a92a3882363a8b languageName: node linkType: hard @@ -1536,177 +1527,177 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.57.1" +"@rollup/rollup-android-arm-eabi@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.64.5" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-android-arm64@npm:4.57.1" +"@rollup/rollup-android-arm64@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-android-arm64@npm:4.64.5" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.57.1" +"@rollup/rollup-darwin-arm64@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-darwin-arm64@npm:4.64.5" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.57.1" +"@rollup/rollup-darwin-x64@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-darwin-x64@npm:4.64.5" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.57.1" +"@rollup/rollup-freebsd-arm64@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.64.5" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-freebsd-x64@npm:4.57.1" +"@rollup/rollup-freebsd-x64@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-freebsd-x64@npm:4.64.5" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.57.1" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.64.5" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.57.1" +"@rollup/rollup-linux-arm-musleabihf@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.64.5" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.57.1" +"@rollup/rollup-linux-arm64-gnu@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.64.5" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.57.1" +"@rollup/rollup-linux-arm64-musl@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.64.5" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-loong64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.57.1" +"@rollup/rollup-linux-loong64-gnu@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.64.5" conditions: os=linux & cpu=loong64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-loong64-musl@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-loong64-musl@npm:4.57.1" +"@rollup/rollup-linux-loong64-musl@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.64.5" conditions: os=linux & cpu=loong64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-ppc64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.57.1" +"@rollup/rollup-linux-ppc64-gnu@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.64.5" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-ppc64-musl@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.57.1" +"@rollup/rollup-linux-ppc64-musl@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.64.5" conditions: os=linux & cpu=ppc64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.57.1" +"@rollup/rollup-linux-riscv64-gnu@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.64.5" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-musl@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.57.1" +"@rollup/rollup-linux-riscv64-musl@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.64.5" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.57.1" +"@rollup/rollup-linux-s390x-gnu@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.64.5" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.57.1" +"@rollup/rollup-linux-x64-gnu@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.64.5" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.57.1" +"@rollup/rollup-linux-x64-musl@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.64.5" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-openbsd-x64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-openbsd-x64@npm:4.57.1" +"@rollup/rollup-openbsd-x64@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-openbsd-x64@npm:4.64.5" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-openharmony-arm64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-openharmony-arm64@npm:4.57.1" +"@rollup/rollup-openharmony-arm64@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.64.5" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.57.1" +"@rollup/rollup-win32-arm64-msvc@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.64.5" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.57.1" +"@rollup/rollup-win32-ia32-msvc@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.64.5" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-win32-x64-gnu@npm:4.57.1" +"@rollup/rollup-win32-x64-gnu@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.64.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.57.1" +"@rollup/rollup-win32-x64-msvc@npm:4.64.5": + version: 4.64.5 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.64.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1852,14 +1843,14 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.8": +"@types/estree@npm:*, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.8": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: 10/25a4c16a6752538ffde2826c2cc0c6491d90e69cd6187bef4a006dd2c3c45469f049e643d7e516c515f21484dc3d48fd5c870be158a5beb72f5baf3dc43e4099 languageName: node linkType: hard -"@types/estree@npm:^1.0.6": +"@types/estree@npm:1.0.9, @types/estree@npm:^1.0.6": version: 1.0.9 resolution: "@types/estree@npm:1.0.9" checksum: 10/16aabfa703b5bdac83f719b07ce92a11b2d3c9b8628eacc92889d8af46cab2d78fc45c7b5378de383d0500585cea5c2f79125eeddfe5fbc6bd6a27eb0c8ccee5 @@ -2614,14 +2605,14 @@ __metadata: linkType: hard "ajv@npm:^8.0.0, ajv@npm:^8.9.0": - version: 8.17.1 - resolution: "ajv@npm:8.17.1" + version: 8.20.0 + resolution: "ajv@npm:8.20.0" dependencies: fast-deep-equal: "npm:^3.1.3" fast-uri: "npm:^3.0.1" json-schema-traverse: "npm:^1.0.0" require-from-string: "npm:^2.0.2" - checksum: 10/ee3c62162c953e91986c838f004132b6a253d700f1e51253b99791e2dbfdb39161bc950ebdc2f156f8568035bb5ed8be7bd78289cd9ecbf3381fe8f5b82e3f33 + checksum: 10/5ce59c0537f4c2aca9a758b412659ec70acb4d5dde971c10ecf21d2e3d799f99acdb4a08e1f5fb2e067c8542930398aae793bb996bb07d3feb81dae22fe2ada9 languageName: node linkType: hard @@ -2864,15 +2855,6 @@ __metadata: languageName: node linkType: hard -"baseline-browser-mapping@npm:^2.9.0": - version: 2.9.19 - resolution: "baseline-browser-mapping@npm:2.9.19" - bin: - baseline-browser-mapping: dist/cli.js - checksum: 10/8d7bbb7fe3d1ad50e04b127c819ba6d059c01ed0d2a7a5fc3327e23a8c42855fa3a8b510550c1fe1e37916147e6a390243566d3ef85bf6130c8ddfe5cc3db530 - languageName: node - linkType: hard - "batch@npm:0.6.1": version: 0.6.1 resolution: "batch@npm:0.6.1" @@ -2899,9 +2881,9 @@ __metadata: linkType: hard "bn.js@npm:^5.2.1": - version: 5.2.2 - resolution: "bn.js@npm:5.2.2" - checksum: 10/51ebb2df83b33e5d8581165206e260d5e9c873752954616e5bf3758952b84d7399a9c6d00852815a0aeefb1150a7f34451b62d4287342d457fa432eee869e83e + version: 5.2.5 + resolution: "bn.js@npm:5.2.5" + checksum: 10/10b1ac91e76fd828c1187cf65a9f1a0374e7afb9acd167e19c2d7c4108f6216841007c1e3aef145fa95cc7b3d07f705236a707184af1537667362b3a842d01ac languageName: node linkType: hard @@ -2933,12 +2915,12 @@ __metadata: linkType: hard "brace-expansion@npm:^1.1.7": - version: 1.1.12 - resolution: "brace-expansion@npm:1.1.12" + version: 1.1.21 + resolution: "brace-expansion@npm:1.1.21" dependencies: balanced-match: "npm:^1.0.0" concat-map: "npm:0.0.1" - checksum: 10/12cb6d6310629e3048cadb003e1aca4d8c9bb5c67c3c321bafdd7e7a50155de081f78ea3e0ed92ecc75a9015e784f301efc8132383132f4f7904ad1ac529c562 + checksum: 10/6c0ed34107cb3bd3f44c01d90ec8c01baa3ed75b7755617e2e5797b5908bbf20b313edf575612b200a783b84c7d1826aec2f7a2f03de9905bbfae5dc3dea6a95 languageName: node linkType: hard @@ -2951,16 +2933,16 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.3": - version: 3.0.3 - resolution: "braces@npm:3.0.3" +"braces@npm:@pezkuwi/braces@^3.0.4": + version: 3.0.4 + resolution: "@pezkuwi/braces@npm:3.0.4" dependencies: fill-range: "npm:^7.1.1" - checksum: 10/fad11a0d4697a27162840b02b1fad249c1683cbc510cd5bf1a471f2f8085c046d41094308c577a50a03a579dd99d5a6b3724c4b5e8b14df2c4443844cfcda2c6 + checksum: 10/2f40d440686f51e9d6537900d5a34907e4a40143be6ed74c1de0a700388217352f1ea73c19af6f7cc379c0e62f887c23679430494c1fc974ff865e584aa26eea languageName: node linkType: hard -"browserslist@npm:^4.24.0": +"browserslist@npm:^4.24.0, browserslist@npm:^4.28.1": version: 4.29.3 resolution: "browserslist@npm:4.29.3" dependencies: @@ -2975,21 +2957,6 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.28.1": - version: 4.28.1 - resolution: "browserslist@npm:4.28.1" - dependencies: - baseline-browser-mapping: "npm:^2.9.0" - caniuse-lite: "npm:^1.0.30001759" - electron-to-chromium: "npm:^1.5.263" - node-releases: "npm:^2.0.27" - update-browserslist-db: "npm:^1.2.0" - bin: - browserslist: cli.js - checksum: 10/64f2a97de4bce8473c0e5ae0af8d76d1ead07a5b05fc6bc87b848678bb9c3a91ae787b27aa98cdd33fc00779607e6c156000bed58fefb9cf8e4c5a183b994cdb - languageName: node - linkType: hard - "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" @@ -3094,13 +3061,6 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001759": - version: 1.0.30001766 - resolution: "caniuse-lite@npm:1.0.30001766" - checksum: 10/0edeb69bdb741c98deda609b75e35e5c31e944537e9873ea89a4cf9e9baa3e158675b224951a6f3a212d1f0c328a8494ace323c551ca1fa58ce4915562c4e4d3 - languageName: node - linkType: hard - "caniuse-lite@npm:^1.0.30001813": version: 1.0.30001815 resolution: "caniuse-lite@npm:1.0.30001815" @@ -3726,13 +3686,6 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.263": - version: 1.5.283 - resolution: "electron-to-chromium@npm:1.5.283" - checksum: 10/3fcede119d5af48372f18c446051909c392e1f85a3823469d5ab9f40a9b1500ae9edfb4c13ff3b9d7d69b925b9a64d06eefd1d5e2d9b16066ff185eb90491158 - languageName: node - linkType: hard - "electron-to-chromium@npm:^1.5.439": version: 1.5.452 resolution: "electron-to-chromium@npm:1.5.452" @@ -4527,9 +4480,9 @@ __metadata: linkType: hard "fast-uri@npm:^3.0.1": - version: 3.1.0 - resolution: "fast-uri@npm:3.1.0" - checksum: 10/818b2c96dc913bcf8511d844c3d2420e2c70b325c0653633f51821e4e29013c2015387944435cd0ef5322c36c9beecc31e44f71b257aeb8e0b333c1d62bb17c2 + version: 3.1.8 + resolution: "fast-uri@npm:3.1.8" + checksum: 10/d3dfa29fd2e5fa2371833699f3f78c975b79f65e52e0ce37604db10dffb85b5b448b5075e93453272cb95fb1c6a759495164e60649ffd69e59ec43f20d44f791 languageName: node linkType: hard @@ -4554,10 +4507,10 @@ __metadata: languageName: node linkType: hard -"fflate@npm:^0.8.2": - version: 0.8.2 - resolution: "fflate@npm:0.8.2" - checksum: 10/2bd26ba6d235d428de793c6a0cd1aaa96a06269ebd4e21b46c8fd1bd136abc631acf27e188d47c3936db090bf3e1ede11d15ce9eae9bffdc4bfe1b9dc66ca9cb +"fflate@npm:^0.8.3": + version: 0.8.3 + resolution: "fflate@npm:0.8.3" + checksum: 10/6ebf528dc9c56e78e715eac615b009b25dc33e15c1920b11ebba44e6d76181c647756a81a23e19247907496b93aa99928514c53090579a65109e026ac2824aa7 languageName: node linkType: hard @@ -4700,15 +4653,15 @@ __metadata: linkType: hard "form-data@npm:^4.0.0": - version: 4.0.5 - resolution: "form-data@npm:4.0.5" + version: 4.0.6 + resolution: "form-data@npm:4.0.6" dependencies: asynckit: "npm:^0.4.0" combined-stream: "npm:^1.0.8" es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10/52ecd6e927c8c4e215e68a7ad5e0f7c1031397439672fd9741654b4a94722c4182e74cc815b225dcb5be3f4180f36428f67c6dd39eaa98af0dcfdd26c00c19cd + hasown: "npm:^2.0.4" + mime-types: "npm:^2.1.35" + checksum: 10/de6614c8537c92fa5fa3ee7e827758f98f5a9c033f348b7de81855ef36e5cb867e75d9f405d9483ab8d724a4a20d4e79926a299fa8dbba38f530eb659f0884e4 languageName: node linkType: hard @@ -5154,9 +5107,9 @@ __metadata: linkType: hard "http-cache-semantics@npm:^4.1.1": - version: 4.2.0 - resolution: "http-cache-semantics@npm:4.2.0" - checksum: 10/4efd2dfcfeea9d5e88c84af450b9980be8a43c2c8179508b1c57c7b4421c855f3e8efe92fa53e0b3f4a43c85824ada930eabbc306d1b3beab750b6dcc5187693 + version: 4.3.0 + resolution: "http-cache-semantics@npm:4.3.0" + checksum: 10/3f7b17565d3a046f069ecfc220d790ccfbef4a94a486502c5d1a23c50d71880393175416845579487a91bfefca393614d16a99bd566d474807a4ebb1139da9cd languageName: node linkType: hard @@ -5324,9 +5277,9 @@ __metadata: linkType: hard "ip-address@npm:^10.0.1": - version: 10.1.0 - resolution: "ip-address@npm:10.1.0" - checksum: 10/a6979629d1ad9c1fb424bc25182203fad739b40225aebc55ec6243bbff5035faf7b9ed6efab3a097de6e713acbbfde944baacfa73e11852bb43989c45a68d79e + version: 10.7.4 + resolution: "ip-address@npm:10.7.4" + checksum: 10/89375f1fa00e5bb4e724498886e06d870c1cc0abbfa9df8cb5ce80f3f179ee49feb0ca96ec54a1512c2303302719975a2ad96e3a8fcc13b4fd836d7f461d3d95 languageName: node linkType: hard @@ -6179,7 +6132,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.34, mime-types@npm:~2.1.35": +"mime-types@npm:^2.1.27, mime-types@npm:^2.1.35, mime-types@npm:~2.1.34, mime-types@npm:~2.1.35": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -6213,16 +6166,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^10.1.1": - version: 10.1.1 - resolution: "minimatch@npm:10.1.1" - dependencies: - "@isaacs/brace-expansion": "npm:^5.0.0" - checksum: 10/110f38921ea527022e90f7a5f43721838ac740d0a0c26881c03b57c261354fb9a0430e40b2c56dfcea2ef3c773768f27210d1106f1f2be19cde3eea93f26f45e - languageName: node - linkType: hard - -"minimatch@npm:^10.2.2, minimatch@npm:^10.2.4, minimatch@npm:^10.2.5, minimatch@npm:^9.0.3 || ^10.1.2": +"minimatch@npm:^10.1.1, minimatch@npm:^10.2.2, minimatch@npm:^10.2.4, minimatch@npm:^10.2.5, minimatch@npm:^9.0.3 || ^10.1.2": version: 10.2.6 resolution: "minimatch@npm:10.2.6" dependencies: @@ -6232,11 +6176,11 @@ __metadata: linkType: hard "minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" + version: 3.1.5 + resolution: "minimatch@npm:3.1.5" dependencies: brace-expansion: "npm:^1.1.7" - checksum: 10/e0b25b04cd4ec6732830344e5739b13f8690f8a012d73445a4a19fbc623f5dd481ef7a5827fde25954cd6026fede7574cc54dc4643c99d6c6b653d6203f94634 + checksum: 10/b11a7ee5773cd34c1a0c8436cdbe910901018fb4b6cb47aa508a18d567f6efd2148507959e35fba798389b161b8604a2d704ccef751ea36bd4582f9852b7d63f languageName: node linkType: hard @@ -6454,13 +6398,6 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.27": - version: 2.0.27 - resolution: "node-releases@npm:2.0.27" - checksum: 10/f6c78ddb392ae500719644afcbe68a9ea533242c02312eb6a34e8478506eb7482a3fb709c70235b01c32fe65625b68dfa9665113f816d87f163bc3819b62b106 - languageName: node - linkType: hard - "node-releases@npm:^2.0.57": version: 2.0.58 resolution: "node-releases@npm:2.0.58" @@ -6798,20 +6735,13 @@ __metadata: linkType: hard "picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 10/60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc + version: 2.3.2 + resolution: "picomatch@npm:2.3.2" + checksum: 10/b788ef8148a2415b9dec12f0bb350ae6a5830f8f1950e472abc2f5225494debf7d1b75eb031df0ceaea9e8ec3e7bad599e8dbf3c60d61b42be429ba41bff4426 languageName: node linkType: hard -"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 10/57b99055f40b16798f2802916d9c17e9744e620a0db136554af01d19598b96e45e2f00014c91d1b8b13874b80caa8c295b3d589a3f72373ec4aaf54baa5962d5 - languageName: node - linkType: hard - -"picomatch@npm:^4.0.4": +"picomatch@npm:^4.0.2, picomatch@npm:^4.0.3, picomatch@npm:^4.0.4": version: 4.0.7 resolution: "picomatch@npm:4.0.7" checksum: 10/66e1df34bc39c72fa3756be4069f7887ea3e35e94bba1c3f6167763007698cb04b8a0a365161d186fda6e9571a2d3efb606b2966eb6a7dea6252911224dc2f48 @@ -7037,15 +6967,6 @@ __metadata: languageName: node linkType: hard -"randombytes@npm:^2.1.0": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: "npm:^5.1.0" - checksum: 10/4efd1ad3d88db77c2d16588dc54c2b52fd2461e70fe5724611f38d283857094fe09040fa2c9776366803c3152cf133171b452ef717592b65631ce5dc3a2bdafc - languageName: node - linkType: hard - "range-parser@npm:^1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" @@ -7361,37 +7282,40 @@ __metadata: linkType: hard "rollup@npm:^4.9.6": - version: 4.57.1 - resolution: "rollup@npm:4.57.1" + version: 4.64.5 + resolution: "rollup@npm:4.64.5" dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.57.1" - "@rollup/rollup-android-arm64": "npm:4.57.1" - "@rollup/rollup-darwin-arm64": "npm:4.57.1" - "@rollup/rollup-darwin-x64": "npm:4.57.1" - "@rollup/rollup-freebsd-arm64": "npm:4.57.1" - "@rollup/rollup-freebsd-x64": "npm:4.57.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.57.1" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.57.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.57.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.57.1" - "@rollup/rollup-linux-loong64-gnu": "npm:4.57.1" - "@rollup/rollup-linux-loong64-musl": "npm:4.57.1" - "@rollup/rollup-linux-ppc64-gnu": "npm:4.57.1" - "@rollup/rollup-linux-ppc64-musl": "npm:4.57.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.57.1" - "@rollup/rollup-linux-riscv64-musl": "npm:4.57.1" - "@rollup/rollup-linux-s390x-gnu": "npm:4.57.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.57.1" - "@rollup/rollup-linux-x64-musl": "npm:4.57.1" - "@rollup/rollup-openbsd-x64": "npm:4.57.1" - "@rollup/rollup-openharmony-arm64": "npm:4.57.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.57.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.57.1" - "@rollup/rollup-win32-x64-gnu": "npm:4.57.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.57.1" - "@types/estree": "npm:1.0.8" + "@napi-rs/lzma-linux-x64-gnu": "npm:1.5.1" + "@rollup/rollup-android-arm-eabi": "npm:4.64.5" + "@rollup/rollup-android-arm64": "npm:4.64.5" + "@rollup/rollup-darwin-arm64": "npm:4.64.5" + "@rollup/rollup-darwin-x64": "npm:4.64.5" + "@rollup/rollup-freebsd-arm64": "npm:4.64.5" + "@rollup/rollup-freebsd-x64": "npm:4.64.5" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.64.5" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.64.5" + "@rollup/rollup-linux-arm64-gnu": "npm:4.64.5" + "@rollup/rollup-linux-arm64-musl": "npm:4.64.5" + "@rollup/rollup-linux-loong64-gnu": "npm:4.64.5" + "@rollup/rollup-linux-loong64-musl": "npm:4.64.5" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.64.5" + "@rollup/rollup-linux-ppc64-musl": "npm:4.64.5" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.64.5" + "@rollup/rollup-linux-riscv64-musl": "npm:4.64.5" + "@rollup/rollup-linux-s390x-gnu": "npm:4.64.5" + "@rollup/rollup-linux-x64-gnu": "npm:4.64.5" + "@rollup/rollup-linux-x64-musl": "npm:4.64.5" + "@rollup/rollup-openbsd-x64": "npm:4.64.5" + "@rollup/rollup-openharmony-arm64": "npm:4.64.5" + "@rollup/rollup-win32-arm64-msvc": "npm:4.64.5" + "@rollup/rollup-win32-ia32-msvc": "npm:4.64.5" + "@rollup/rollup-win32-x64-gnu": "npm:4.64.5" + "@rollup/rollup-win32-x64-msvc": "npm:4.64.5" + "@types/estree": "npm:1.0.9" fsevents: "npm:~2.3.2" dependenciesMeta: + "@napi-rs/lzma-linux-x64-gnu": + optional: true "@rollup/rollup-android-arm-eabi": optional: true "@rollup/rollup-android-arm64": @@ -7446,7 +7370,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10/0451371339e593967c979e498fac4dfd0ba15fadf0dac96875940796307a00d62ab68460366a65f4872ae8edd9339e3d9501e8e5764c1f23e25e0951f75047c6 + checksum: 10/f2e7d4641a30e29b0ae33bdbae4c063b08a540df098b78c0db6ea8a21495871b61534d2800c50fb0282bc7c24b03df53b410c836a6a04d0fd4ddf1cb06c81200 languageName: node linkType: hard @@ -7457,7 +7381,7 @@ __metadata: "@pezkuwi/dev": "npm:^0.86.0" "@pezkuwi/util": "npm:^14.0.1" "@types/node": "npm:^20.16.1" - fflate: "npm:^0.8.2" + fflate: "npm:^0.8.3" languageName: unknown linkType: soft @@ -7517,7 +7441,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 @@ -7641,15 +7565,6 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.2": - version: 6.0.2 - resolution: "serialize-javascript@npm:6.0.2" - dependencies: - randombytes: "npm:^2.1.0" - checksum: 10/445a420a6fa2eaee4b70cbd884d538e259ab278200a2ededd73253ada17d5d48e91fb1f4cd224a236ab62ea7ba0a70c6af29fc93b4f3d3078bf7da1c031fde58 - languageName: node - linkType: hard - "serve-index@npm:^1.9.2": version: 1.9.2 resolution: "serve-index@npm:1.9.2" @@ -7873,14 +7788,7 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 - languageName: node - linkType: hard - -"source-map-js@npm:^1.2.2": +"source-map-js@npm:^1.2.1, source-map-js@npm:^1.2.2": version: 1.2.2 resolution: "source-map-js@npm:1.2.2" checksum: 10/4807c894bb6280c8b84886159b96080e3996f42c6e8015e647881edfd4f955f6024ceebb8bb40d33ce8b106e24b2e29c133575e1c60c01c8aae57a05fdf17761 @@ -8150,37 +8058,54 @@ __metadata: linkType: hard "tar@npm:^7.5.4": - version: 7.5.7 - resolution: "tar@npm:7.5.7" + version: 7.5.22 + resolution: "tar@npm:7.5.22" dependencies: "@isaacs/fs-minipass": "npm:^4.0.0" chownr: "npm:^3.0.0" minipass: "npm:^7.1.2" minizlib: "npm:^3.1.0" yallist: "npm:^5.0.0" - checksum: 10/0d6938dd32fe5c0f17c8098d92bd9889ee0ed9d11f12381b8146b6e8c87bb5aa49feec7abc42463f0597503d8e89e4c4c0b42bff1a5a38444e918b4878b7fd21 + checksum: 10/129606384b3c895f422aaca48bf316357be6dc7aa35c1066c3f06c28acfff0be5b356e1b0a0be7c53a7a8945534ac06cec6d8e296d170d8a09c8bff67b29300e languageName: node linkType: hard "terser-webpack-plugin@npm:^5.3.16": - version: 5.3.16 - resolution: "terser-webpack-plugin@npm:5.3.16" + version: 5.6.1 + resolution: "terser-webpack-plugin@npm:5.6.1" dependencies: "@jridgewell/trace-mapping": "npm:^0.3.25" jest-worker: "npm:^27.4.5" schema-utils: "npm:^4.3.0" - serialize-javascript: "npm:^6.0.2" terser: "npm:^5.31.1" peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: + "@minify-html/node": + optional: true "@swc/core": optional: true + "@swc/css": + optional: true + "@swc/html": + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true esbuild: optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true uglify-js: optional: true - checksum: 10/09dfbff602acfa114cdd174254b69a04adbc47856021ab351e37982202fd1ec85e0b62ffd5864c98beb8e96aef2f43da490b3448b4541db539c2cff6607394a6 + checksum: 10/75e5ebb6759ccd85f34a5af04c2f1693f61d7691a4a1614f0892a1d2caf29c12395d1d04d4f4014d4c4a77b63f9f7f36ac9241fcbcc24085a7575d4a4310d70f languageName: node linkType: hard @@ -8585,20 +8510,6 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.2.0": - version: 1.2.3 - resolution: "update-browserslist-db@npm:1.2.3" - dependencies: - escalade: "npm:^3.2.0" - picocolors: "npm:^1.1.1" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10/059f774300efb4b084a49293143c511f3ae946d40397b5c30914e900cd5691a12b8e61b41dd54ed73d3b56c8204165a0333107dd784ccf8f8c81790bcc423175 - languageName: node - linkType: hard - "update-browserslist-db@npm:^1.3.3": version: 1.3.4 resolution: "update-browserslist-db@npm:1.3.4" @@ -8994,22 +8905,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.18.0": - version: 8.19.0 - resolution: "ws@npm:8.19.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/26e4901e93abaf73af9f26a93707c95b4845e91a7a347ec8c569e6e9be7f9df066f6c2b817b2d685544e208207898a750b78461e6e8d810c11a370771450c31b - languageName: node - linkType: hard - -"ws@npm:^8.20.0": +"ws@npm:^8.18.0, ws@npm:^8.20.0": version: 8.22.0 resolution: "ws@npm:8.22.0" peerDependencies: From 95f46c380a4df02bc44c6b0e5be6d73c3502a78e Mon Sep 17 00:00:00 2001 From: Satoshi Qazi Muhammed Date: Mon, 12 Oct 2026 06:17:43 +0400 Subject: [PATCH 5/6] Release 7.5.21 --- packages/wasm-bridge/package.json | 4 +-- packages/wasm-bridge/src/packageInfo.ts | 2 +- packages/wasm-crypto-asmjs/package.json | 2 +- packages/wasm-crypto-asmjs/src/packageInfo.ts | 2 +- packages/wasm-crypto-init/package.json | 10 +++--- packages/wasm-crypto-init/src/packageInfo.ts | 2 +- packages/wasm-crypto-wasm/package.json | 4 +-- packages/wasm-crypto-wasm/src/packageInfo.ts | 2 +- packages/wasm-crypto/package.json | 12 +++---- packages/wasm-crypto/src/packageInfo.ts | 2 +- packages/wasm-util/package.json | 2 +- packages/wasm-util/src/packageInfo.ts | 2 +- yarn.lock | 32 +++++++++---------- 13 files changed, 39 insertions(+), 39 deletions(-) diff --git a/packages/wasm-bridge/package.json b/packages/wasm-bridge/package.json index de4951d..2a5d65d 100644 --- a/packages/wasm-bridge/package.json +++ b/packages/wasm-bridge/package.json @@ -18,10 +18,10 @@ "./packageDetect.cjs" ], "type": "module", - "version": "7.5.20", + "version": "7.5.21", "main": "index.js", "dependencies": { - "@pezkuwi/wasm-util": "7.5.20", + "@pezkuwi/wasm-util": "7.5.21", "tslib": "^2.7.0" }, "devDependencies": { diff --git a/packages/wasm-bridge/src/packageInfo.ts b/packages/wasm-bridge/src/packageInfo.ts index 4309225..7a8f52e 100644 --- a/packages/wasm-bridge/src/packageInfo.ts +++ b/packages/wasm-bridge/src/packageInfo.ts @@ -3,4 +3,4 @@ // Do not edit, auto-generated by @pezkuwi/dev -export const packageInfo = { name: '@pezkuwi/wasm-bridge', path: 'auto', type: 'auto', version: '7.5.20' }; +export const packageInfo = { name: '@pezkuwi/wasm-bridge', path: 'auto', type: 'auto', version: '7.5.21' }; diff --git a/packages/wasm-crypto-asmjs/package.json b/packages/wasm-crypto-asmjs/package.json index 5f4203a..cb4e814 100644 --- a/packages/wasm-crypto-asmjs/package.json +++ b/packages/wasm-crypto-asmjs/package.json @@ -18,7 +18,7 @@ "./packageDetect.cjs" ], "type": "module", - "version": "7.5.20", + "version": "7.5.21", "main": "index.js", "dependencies": { "tslib": "^2.7.0" diff --git a/packages/wasm-crypto-asmjs/src/packageInfo.ts b/packages/wasm-crypto-asmjs/src/packageInfo.ts index ee1b757..dbd2d6f 100644 --- a/packages/wasm-crypto-asmjs/src/packageInfo.ts +++ b/packages/wasm-crypto-asmjs/src/packageInfo.ts @@ -3,4 +3,4 @@ // Do not edit, auto-generated by @pezkuwi/dev -export const packageInfo = { name: '@pezkuwi/wasm-crypto-asmjs', path: 'auto', type: 'auto', version: '7.5.20' }; +export const packageInfo = { name: '@pezkuwi/wasm-crypto-asmjs', path: 'auto', type: 'auto', version: '7.5.21' }; diff --git a/packages/wasm-crypto-init/package.json b/packages/wasm-crypto-init/package.json index 68407db..67f30b4 100644 --- a/packages/wasm-crypto-init/package.json +++ b/packages/wasm-crypto-init/package.json @@ -18,15 +18,15 @@ "./packageDetect.cjs" ], "type": "module", - "version": "7.5.20", + "version": "7.5.21", "browser": "wasm.js", "main": "wasm.js", "react-native": "asm.js", "dependencies": { - "@pezkuwi/wasm-bridge": "7.5.20", - "@pezkuwi/wasm-crypto-asmjs": "7.5.20", - "@pezkuwi/wasm-crypto-wasm": "7.5.20", - "@pezkuwi/wasm-util": "7.5.20", + "@pezkuwi/wasm-bridge": "7.5.21", + "@pezkuwi/wasm-crypto-asmjs": "7.5.21", + "@pezkuwi/wasm-crypto-wasm": "7.5.21", + "@pezkuwi/wasm-util": "7.5.21", "tslib": "^2.7.0" }, "devDependencies": { diff --git a/packages/wasm-crypto-init/src/packageInfo.ts b/packages/wasm-crypto-init/src/packageInfo.ts index fcb0766..bf84088 100644 --- a/packages/wasm-crypto-init/src/packageInfo.ts +++ b/packages/wasm-crypto-init/src/packageInfo.ts @@ -3,4 +3,4 @@ // Do not edit, auto-generated by @pezkuwi/dev -export const packageInfo = { name: '@pezkuwi/wasm-crypto-init', path: 'auto', type: 'auto', version: '7.5.20' }; +export const packageInfo = { name: '@pezkuwi/wasm-crypto-init', path: 'auto', type: 'auto', version: '7.5.21' }; diff --git a/packages/wasm-crypto-wasm/package.json b/packages/wasm-crypto-wasm/package.json index c97df95..c467264 100644 --- a/packages/wasm-crypto-wasm/package.json +++ b/packages/wasm-crypto-wasm/package.json @@ -18,10 +18,10 @@ "./packageDetect.cjs" ], "type": "module", - "version": "7.5.20", + "version": "7.5.21", "main": "index.js", "dependencies": { - "@pezkuwi/wasm-util": "7.5.20", + "@pezkuwi/wasm-util": "7.5.21", "tslib": "^2.7.0" }, "devDependencies": { diff --git a/packages/wasm-crypto-wasm/src/packageInfo.ts b/packages/wasm-crypto-wasm/src/packageInfo.ts index 3b68d65..9bcd7a8 100644 --- a/packages/wasm-crypto-wasm/src/packageInfo.ts +++ b/packages/wasm-crypto-wasm/src/packageInfo.ts @@ -3,4 +3,4 @@ // Do not edit, auto-generated by @pezkuwi/dev -export const packageInfo = { name: '@pezkuwi/wasm-crypto-wasm', path: 'auto', type: 'auto', version: '7.5.20' }; +export const packageInfo = { name: '@pezkuwi/wasm-crypto-wasm', path: 'auto', type: 'auto', version: '7.5.21' }; diff --git a/packages/wasm-crypto/package.json b/packages/wasm-crypto/package.json index 9a7897b..5b695af 100644 --- a/packages/wasm-crypto/package.json +++ b/packages/wasm-crypto/package.json @@ -26,15 +26,15 @@ "./packageDetect.cjs" ], "type": "module", - "version": "7.5.20", + "version": "7.5.21", "main": "index.js", "dependencies": { "@noble/hashes": "^1.3.3", - "@pezkuwi/wasm-bridge": "7.5.20", - "@pezkuwi/wasm-crypto-asmjs": "7.5.20", - "@pezkuwi/wasm-crypto-init": "7.5.20", - "@pezkuwi/wasm-crypto-wasm": "7.5.20", - "@pezkuwi/wasm-util": "7.5.20", + "@pezkuwi/wasm-bridge": "7.5.21", + "@pezkuwi/wasm-crypto-asmjs": "7.5.21", + "@pezkuwi/wasm-crypto-init": "7.5.21", + "@pezkuwi/wasm-crypto-wasm": "7.5.21", + "@pezkuwi/wasm-util": "7.5.21", "tslib": "^2.7.0" }, "devDependencies": { diff --git a/packages/wasm-crypto/src/packageInfo.ts b/packages/wasm-crypto/src/packageInfo.ts index f823fbd..628716f 100644 --- a/packages/wasm-crypto/src/packageInfo.ts +++ b/packages/wasm-crypto/src/packageInfo.ts @@ -3,4 +3,4 @@ // Do not edit, auto-generated by @pezkuwi/dev -export const packageInfo = { name: '@pezkuwi/wasm-crypto', path: 'auto', type: 'auto', version: '7.5.20' }; +export const packageInfo = { name: '@pezkuwi/wasm-crypto', path: 'auto', type: 'auto', version: '7.5.21' }; diff --git a/packages/wasm-util/package.json b/packages/wasm-util/package.json index b70f27e..a78861d 100644 --- a/packages/wasm-util/package.json +++ b/packages/wasm-util/package.json @@ -18,7 +18,7 @@ "./packageDetect.cjs" ], "type": "module", - "version": "7.5.20", + "version": "7.5.21", "main": "index.js", "dependencies": { "tslib": "^2.7.0" diff --git a/packages/wasm-util/src/packageInfo.ts b/packages/wasm-util/src/packageInfo.ts index f5dd6e8..15440cc 100644 --- a/packages/wasm-util/src/packageInfo.ts +++ b/packages/wasm-util/src/packageInfo.ts @@ -3,4 +3,4 @@ // Do not edit, auto-generated by @pezkuwi/dev -export const packageInfo = { name: '@pezkuwi/wasm-util', path: 'auto', type: 'auto', version: '7.5.20' }; +export const packageInfo = { name: '@pezkuwi/wasm-util', path: 'auto', type: 'auto', version: '7.5.21' }; diff --git a/yarn.lock b/yarn.lock index 46c5ae3..2cc7111 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1277,12 +1277,12 @@ __metadata: languageName: node linkType: hard -"@pezkuwi/wasm-bridge@npm:7.5.20, @pezkuwi/wasm-bridge@workspace:packages/wasm-bridge": +"@pezkuwi/wasm-bridge@npm:7.5.21, @pezkuwi/wasm-bridge@workspace:packages/wasm-bridge": version: 0.0.0-use.local resolution: "@pezkuwi/wasm-bridge@workspace:packages/wasm-bridge" dependencies: "@pezkuwi/util": "npm:^14.0.1" - "@pezkuwi/wasm-util": "npm:7.5.20" + "@pezkuwi/wasm-util": "npm:7.5.21" "@pezkuwi/x-randomvalues": "npm:^14.0.1" tslib: "npm:^2.7.0" peerDependencies: @@ -1291,7 +1291,7 @@ __metadata: languageName: unknown linkType: soft -"@pezkuwi/wasm-crypto-asmjs@npm:7.5.20, @pezkuwi/wasm-crypto-asmjs@workspace:packages/wasm-crypto-asmjs": +"@pezkuwi/wasm-crypto-asmjs@npm:7.5.21, @pezkuwi/wasm-crypto-asmjs@workspace:packages/wasm-crypto-asmjs": version: 0.0.0-use.local resolution: "@pezkuwi/wasm-crypto-asmjs@workspace:packages/wasm-crypto-asmjs" dependencies: @@ -1302,15 +1302,15 @@ __metadata: languageName: unknown linkType: soft -"@pezkuwi/wasm-crypto-init@npm:7.5.20, @pezkuwi/wasm-crypto-init@workspace:packages/wasm-crypto-init": +"@pezkuwi/wasm-crypto-init@npm:7.5.21, @pezkuwi/wasm-crypto-init@workspace:packages/wasm-crypto-init": version: 0.0.0-use.local resolution: "@pezkuwi/wasm-crypto-init@workspace:packages/wasm-crypto-init" dependencies: "@pezkuwi/util": "npm:^14.0.1" - "@pezkuwi/wasm-bridge": "npm:7.5.20" - "@pezkuwi/wasm-crypto-asmjs": "npm:7.5.20" - "@pezkuwi/wasm-crypto-wasm": "npm:7.5.20" - "@pezkuwi/wasm-util": "npm:7.5.20" + "@pezkuwi/wasm-bridge": "npm:7.5.21" + "@pezkuwi/wasm-crypto-asmjs": "npm:7.5.21" + "@pezkuwi/wasm-crypto-wasm": "npm:7.5.21" + "@pezkuwi/wasm-util": "npm:7.5.21" "@pezkuwi/x-randomvalues": "npm:^14.0.1" tslib: "npm:^2.7.0" peerDependencies: @@ -1319,12 +1319,12 @@ __metadata: languageName: unknown linkType: soft -"@pezkuwi/wasm-crypto-wasm@npm:7.5.20, @pezkuwi/wasm-crypto-wasm@workspace:packages/wasm-crypto-wasm": +"@pezkuwi/wasm-crypto-wasm@npm:7.5.21, @pezkuwi/wasm-crypto-wasm@workspace:packages/wasm-crypto-wasm": version: 0.0.0-use.local resolution: "@pezkuwi/wasm-crypto-wasm@workspace:packages/wasm-crypto-wasm" dependencies: "@pezkuwi/util": "npm:^14.0.1" - "@pezkuwi/wasm-util": "npm:7.5.20" + "@pezkuwi/wasm-util": "npm:7.5.21" tslib: "npm:^2.7.0" peerDependencies: "@pezkuwi/util": "*" @@ -1337,11 +1337,11 @@ __metadata: dependencies: "@noble/hashes": "npm:^1.3.3" "@pezkuwi/util": "npm:^14.0.1" - "@pezkuwi/wasm-bridge": "npm:7.5.20" - "@pezkuwi/wasm-crypto-asmjs": "npm:7.5.20" - "@pezkuwi/wasm-crypto-init": "npm:7.5.20" - "@pezkuwi/wasm-crypto-wasm": "npm:7.5.20" - "@pezkuwi/wasm-util": "npm:7.5.20" + "@pezkuwi/wasm-bridge": "npm:7.5.21" + "@pezkuwi/wasm-crypto-asmjs": "npm:7.5.21" + "@pezkuwi/wasm-crypto-init": "npm:7.5.21" + "@pezkuwi/wasm-crypto-wasm": "npm:7.5.21" + "@pezkuwi/wasm-util": "npm:7.5.21" "@pezkuwi/x-randomvalues": "npm:^14.0.1" tslib: "npm:^2.7.0" peerDependencies: @@ -1350,7 +1350,7 @@ __metadata: languageName: unknown linkType: soft -"@pezkuwi/wasm-util@npm:7.5.20, @pezkuwi/wasm-util@workspace:packages/wasm-util": +"@pezkuwi/wasm-util@npm:7.5.21, @pezkuwi/wasm-util@workspace:packages/wasm-util": version: 0.0.0-use.local resolution: "@pezkuwi/wasm-util@workspace:packages/wasm-util" dependencies: From d36fbbeb25e1649aa90556bb882b86daef9afefe Mon Sep 17 00:00:00 2001 From: Satoshi Qazi Muhammed Date: Mon, 12 Oct 2026 06:24:18 +0400 Subject: [PATCH 6/6] ci: give the workflow read-only contents permission --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cccc8e2..1ea9c5f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,9 @@ on: pull_request: branches: [master] +permissions: + contents: read + jobs: build: runs-on: ubuntu-latest