Skip to content

Commit 10db028

Browse files
feat: upgrade to getrandom v0.3.1 (#1210)
1 parent df04a6f commit 10db028

8 files changed

Lines changed: 168 additions & 36 deletions

File tree

Cargo.lock

Lines changed: 117 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ sha2 = "0.10.8"
3636
hex = "0.4.3"
3737
url = "2.5.4"
3838
regex = "1.11.1"
39-
getrandom = { version = "0.2", features = ["custom"] }
40-
rand = { version = "0.8.5", features = ["getrandom"]}
39+
getrandom = "0.3.1"
40+
rand = { version = "0.9.0", features = ["os_rng"]}
4141

4242
[patch.crates-io]
4343
junobuild-shared = { path = "./src/libs/shared" }

docker/build

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ EOF
4343

4444
ONLY_DEPS=
4545
CANISTER=
46+
4647
# Candid metadata supported_certificate_versions 1 and 2
4748
WITH_CERTIFICATION=0
4849
# Candid metadata juno:build
@@ -128,9 +129,14 @@ function build_canister() {
128129

129130
SRC_DIR="$SRC_ROOT_DIR/$canister"
130131
TARGET="wasm32-unknown-unknown"
131-
# standardize source references
132+
133+
# Standardize source references
132134
CARGO_HOME="${CARGO_HOME:-"$HOME/.cargo"}"
133-
RUSTFLAGS="--remap-path-prefix $CARGO_HOME=/cargo -C link-args=-zstack-size=3000000"
135+
136+
# Flags required by third party dependencies such as getrandom
137+
FEATURES="--cfg getrandom_backend=\"custom\""
138+
139+
RUSTFLAGS="--remap-path-prefix $CARGO_HOME=/cargo -C link-args=-zstack-size=3000000 $FEATURES"
134140

135141
cargo_build_args=(
136142
--manifest-path "$SRC_DIR/Cargo.toml"

scripts/cargo.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ while [[ $# -gt 0 ]]; do
3535
done
3636

3737
TARGET="wasm32-unknown-unknown"
38-
RUSTFLAGS="--remap-path-prefix $CARGO_HOME=/cargo -C link-args=-zstack-size=3000000"
38+
39+
# Flags required by third party dependencies such as getrandom
40+
FEATURES="--cfg getrandom_backend=\"custom\""
41+
42+
RUSTFLAGS="--remap-path-prefix $CARGO_HOME=/cargo -C link-args=-zstack-size=3000000 $FEATURES"
3943

4044
# Build module WASM
4145
RUSTFLAGS="$RUSTFLAGS" cargo build --target "$TARGET" -p "$MODULE" --release --locked

src/libs/satellite/src/logs/loggers.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ fn random() -> Result<i32, String> {
107107

108108
match rng {
109109
None => Err("The random number generator has not been initialized.".to_string()),
110-
Some(rng) => Ok(rng.gen()),
110+
Some(rng) => Ok(rng.random()),
111111
}
112112
})
113113
}

src/libs/satellite/src/random.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
use crate::memory::STATE;
2-
use getrandom::register_custom_getrandom;
32
use getrandom::Error;
43
use ic_cdk::spawn;
54
use ic_cdk_timers::set_timer;
65
use junobuild_shared::random::get_random_seed;
76
use rand::RngCore;
8-
use std::num::NonZeroU32;
97
use std::time::Duration;
108

119
pub fn defer_init_random_seed() {
1210
set_timer(Duration::ZERO, || spawn(set_random_seed()));
13-
register_custom_getrandom!(custom_getrandom);
1411
}
1512

1613
async fn set_random_seed() {
@@ -21,13 +18,22 @@ async fn set_random_seed() {
2118
});
2219
}
2320

24-
fn custom_getrandom(buf: &mut [u8]) -> Result<(), Error> {
21+
/// Source: https://github.com/rust-random/getrandom?tab=readme-ov-file#custom-backend
22+
#[no_mangle]
23+
unsafe extern "Rust" fn __getrandom_v03_custom(dest: *mut u8, len: usize,) -> Result<(), Error> {
2524
STATE.with(|state| {
2625
let rng = &mut state.borrow_mut().runtime.rng;
2726

2827
match rng {
29-
None => Err(Error::from(NonZeroU32::new(Error::CUSTOM_START).unwrap())),
28+
None => Err(Error::new_custom(0)),
3029
Some(rng) => {
30+
let buf: &mut [u8] = unsafe {
31+
// fill the buffer with zeros
32+
core::ptr::write_bytes(dest, 0, len);
33+
// create mutable byte slice
34+
core::slice::from_raw_parts_mut(dest, len)
35+
};
36+
3137
rng.fill_bytes(buf);
3238
Ok(())
3339
}

src/mission_control/src/random.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
use crate::memory::RUNTIME_STATE;
2-
use getrandom::register_custom_getrandom;
32
use getrandom::Error;
43
use ic_cdk::spawn;
54
use ic_cdk_timers::set_timer;
65
use junobuild_shared::random::get_random_seed;
76
use rand::{Rng, RngCore};
8-
use std::num::NonZeroU32;
97
use std::time::Duration;
108

119
pub fn defer_init_random_seed() {
1210
set_timer(Duration::ZERO, || spawn(set_random_seed()));
13-
register_custom_getrandom!(custom_getrandom);
1411
}
1512

1613
async fn set_random_seed() {
@@ -21,13 +18,22 @@ async fn set_random_seed() {
2118
});
2219
}
2320

24-
fn custom_getrandom(buf: &mut [u8]) -> Result<(), Error> {
21+
/// Source: https://github.com/rust-random/getrandom?tab=readme-ov-file#custom-backend
22+
#[no_mangle]
23+
unsafe extern "Rust" fn __getrandom_v03_custom(dest: *mut u8, len: usize,) -> Result<(), Error> {
2524
RUNTIME_STATE.with(|state| {
2625
let rng = &mut state.borrow_mut().rng;
2726

2827
match rng {
29-
None => Err(Error::from(NonZeroU32::new(Error::CUSTOM_START).unwrap())),
28+
None => Err(Error::new_custom(0)),
3029
Some(rng) => {
30+
let buf: &mut [u8] = unsafe {
31+
// fill the buffer with zeros
32+
core::ptr::write_bytes(dest, 0, len);
33+
// create mutable byte slice
34+
core::slice::from_raw_parts_mut(dest, len)
35+
};
36+
3137
rng.fill_bytes(buf);
3238
Ok(())
3339
}
@@ -41,7 +47,7 @@ pub fn random() -> Result<i32, String> {
4147

4248
match rng {
4349
None => Err("The random number generator has not been initialized.".to_string()),
44-
Some(rng) => Ok(rng.gen()),
50+
Some(rng) => Ok(rng.random()),
4551
}
4652
})
4753
}

0 commit comments

Comments
 (0)