From 8c125df85e4fbf6279e4e1e7ea370041ea85b3aa Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 30 Dec 2025 10:46:44 -0500 Subject: [PATCH] Rust wrapper: ensure curve25519_key struct will have free called after init --- .../rust/wolfssl-wolfcrypt/src/curve25519.rs | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/wrapper/rust/wolfssl-wolfcrypt/src/curve25519.rs b/wrapper/rust/wolfssl-wolfcrypt/src/curve25519.rs index b42954bcd..1629ec21b 100644 --- a/wrapper/rust/wolfssl-wolfcrypt/src/curve25519.rs +++ b/wrapper/rust/wolfssl-wolfcrypt/src/curve25519.rs @@ -81,14 +81,15 @@ impl Curve25519Key { if rc != 0 { return Err(rc); } - let mut wc_key = unsafe { wc_key.assume_init() }; + let wc_key = unsafe { wc_key.assume_init() }; + let mut curve25519key = Curve25519Key { wc_key }; let rc = unsafe { - sys::wc_curve25519_make_key(&mut rng.wc_rng, Self::KEYSIZE as i32, &mut wc_key) + sys::wc_curve25519_make_key(&mut rng.wc_rng, Self::KEYSIZE as i32, + &mut curve25519key.wc_key) }; if rc != 0 { return Err(rc); } - let curve25519key = Curve25519Key { wc_key }; Ok(curve25519key) } @@ -134,15 +135,16 @@ impl Curve25519Key { if rc != 0 { return Err(rc); } - let mut wc_key = unsafe { wc_key.assume_init() }; + let wc_key = unsafe { wc_key.assume_init() }; + let mut curve25519key = Curve25519Key { wc_key }; let private_size = private.len() as u32; let rc = unsafe { - sys::wc_curve25519_import_private(private.as_ptr(), private_size, &mut wc_key) + sys::wc_curve25519_import_private(private.as_ptr(), private_size, + &mut curve25519key.wc_key) }; if rc != 0 { return Err(rc); } - let curve25519key = Curve25519Key { wc_key }; Ok(curve25519key) } @@ -165,17 +167,17 @@ impl Curve25519Key { if rc != 0 { return Err(rc); } - let mut wc_key = unsafe { wc_key.assume_init() }; + let wc_key = unsafe { wc_key.assume_init() }; + let mut curve25519key = Curve25519Key { wc_key }; let private_size = private.len() as u32; let endian = if big_endian {sys::EC25519_BIG_ENDIAN} else {sys::EC25519_LITTLE_ENDIAN}; let rc = unsafe { sys::wc_curve25519_import_private_ex(private.as_ptr(), - private_size, &mut wc_key, endian as i32) + private_size, &mut curve25519key.wc_key, endian as i32) }; if rc != 0 { return Err(rc); } - let curve25519key = Curve25519Key { wc_key }; Ok(curve25519key) } @@ -198,17 +200,18 @@ impl Curve25519Key { if rc != 0 { return Err(rc); } - let mut wc_key = unsafe { wc_key.assume_init() }; + let wc_key = unsafe { wc_key.assume_init() }; + let mut curve25519key = Curve25519Key { wc_key }; let private_size = private.len() as u32; let public_size = public.len() as u32; let rc = unsafe { sys::wc_curve25519_import_private_raw(private.as_ptr(), - private_size, public.as_ptr(), public_size, &mut wc_key) + private_size, public.as_ptr(), public_size, + &mut curve25519key.wc_key) }; if rc != 0 { return Err(rc); } - let curve25519key = Curve25519Key { wc_key }; Ok(curve25519key) } @@ -232,19 +235,19 @@ impl Curve25519Key { if rc != 0 { return Err(rc); } - let mut wc_key = unsafe { wc_key.assume_init() }; + let wc_key = unsafe { wc_key.assume_init() }; + let mut curve25519key = Curve25519Key { wc_key }; let private_size = private.len() as u32; let public_size = public.len() as u32; let endian = if big_endian {sys::EC25519_BIG_ENDIAN} else {sys::EC25519_LITTLE_ENDIAN}; let rc = unsafe { sys::wc_curve25519_import_private_raw_ex(private.as_ptr(), - private_size, public.as_ptr(), public_size, &mut wc_key, - endian as i32) + private_size, public.as_ptr(), public_size, + &mut curve25519key.wc_key, endian as i32) }; if rc != 0 { return Err(rc); } - let curve25519key = Curve25519Key { wc_key }; Ok(curve25519key) } @@ -266,15 +269,16 @@ impl Curve25519Key { if rc != 0 { return Err(rc); } - let mut wc_key = unsafe { wc_key.assume_init() }; + let wc_key = unsafe { wc_key.assume_init() }; + let mut curve25519key = Curve25519Key { wc_key }; let public_size = public.len() as u32; let rc = unsafe { - sys::wc_curve25519_import_public(public.as_ptr(), public_size, &mut wc_key) + sys::wc_curve25519_import_public(public.as_ptr(), public_size, + &mut curve25519key.wc_key) }; if rc != 0 { return Err(rc); } - let curve25519key = Curve25519Key { wc_key }; Ok(curve25519key) } @@ -297,17 +301,17 @@ impl Curve25519Key { if rc != 0 { return Err(rc); } - let mut wc_key = unsafe { wc_key.assume_init() }; + let wc_key = unsafe { wc_key.assume_init() }; + let mut curve25519key = Curve25519Key { wc_key }; let public_size = public.len() as u32; let endian = if big_endian {sys::EC25519_BIG_ENDIAN} else {sys::EC25519_LITTLE_ENDIAN}; let rc = unsafe { sys::wc_curve25519_import_public_ex(public.as_ptr(), public_size, - &mut wc_key, endian as i32) + &mut curve25519key.wc_key, endian as i32) }; if rc != 0 { return Err(rc); } - let curve25519key = Curve25519Key { wc_key }; Ok(curve25519key) }