mirror of
https://github.com/pezkuwichain/pezkuwi-wasm.git
synced 2026-11-01 16:01:07 +00:00
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.
47 lines
1.1 KiB
Rust
47 lines
1.1 KiB
Rust
// Copyright 2019-2025 @pezkuwi/wasm-crypto authors & contributors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// 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;
|
|
|
|
#[path = "rs/ed25519.rs"]
|
|
pub mod ed25519;
|
|
|
|
#[path = "rs/hashing.rs"]
|
|
pub mod hashing;
|
|
|
|
#[path = "rs/secp256k1.rs"]
|
|
pub mod secp256k1;
|
|
|
|
#[path = "rs/sr25519.rs"]
|
|
pub mod sr25519;
|
|
|
|
#[path = "rs/vrf.rs"]
|
|
pub mod vrf;
|
|
|
|
#[path = "rs/kat.rs"]
|
|
pub mod kat;
|