Skip to content

Commit 8c125df

Browse files
Rust wrapper: ensure curve25519_key struct will have free called after init
1 parent e971cb6 commit 8c125df

File tree

1 file changed

+26
-22
lines changed

1 file changed

+26
-22
lines changed

wrapper/rust/wolfssl-wolfcrypt/src/curve25519.rs

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,15 @@ impl Curve25519Key {
8181
if rc != 0 {
8282
return Err(rc);
8383
}
84-
let mut wc_key = unsafe { wc_key.assume_init() };
84+
let wc_key = unsafe { wc_key.assume_init() };
85+
let mut curve25519key = Curve25519Key { wc_key };
8586
let rc = unsafe {
86-
sys::wc_curve25519_make_key(&mut rng.wc_rng, Self::KEYSIZE as i32, &mut wc_key)
87+
sys::wc_curve25519_make_key(&mut rng.wc_rng, Self::KEYSIZE as i32,
88+
&mut curve25519key.wc_key)
8789
};
8890
if rc != 0 {
8991
return Err(rc);
9092
}
91-
let curve25519key = Curve25519Key { wc_key };
9293
Ok(curve25519key)
9394
}
9495

@@ -134,15 +135,16 @@ impl Curve25519Key {
134135
if rc != 0 {
135136
return Err(rc);
136137
}
137-
let mut wc_key = unsafe { wc_key.assume_init() };
138+
let wc_key = unsafe { wc_key.assume_init() };
139+
let mut curve25519key = Curve25519Key { wc_key };
138140
let private_size = private.len() as u32;
139141
let rc = unsafe {
140-
sys::wc_curve25519_import_private(private.as_ptr(), private_size, &mut wc_key)
142+
sys::wc_curve25519_import_private(private.as_ptr(), private_size,
143+
&mut curve25519key.wc_key)
141144
};
142145
if rc != 0 {
143146
return Err(rc);
144147
}
145-
let curve25519key = Curve25519Key { wc_key };
146148
Ok(curve25519key)
147149
}
148150

@@ -165,17 +167,17 @@ impl Curve25519Key {
165167
if rc != 0 {
166168
return Err(rc);
167169
}
168-
let mut wc_key = unsafe { wc_key.assume_init() };
170+
let wc_key = unsafe { wc_key.assume_init() };
171+
let mut curve25519key = Curve25519Key { wc_key };
169172
let private_size = private.len() as u32;
170173
let endian = if big_endian {sys::EC25519_BIG_ENDIAN} else {sys::EC25519_LITTLE_ENDIAN};
171174
let rc = unsafe {
172175
sys::wc_curve25519_import_private_ex(private.as_ptr(),
173-
private_size, &mut wc_key, endian as i32)
176+
private_size, &mut curve25519key.wc_key, endian as i32)
174177
};
175178
if rc != 0 {
176179
return Err(rc);
177180
}
178-
let curve25519key = Curve25519Key { wc_key };
179181
Ok(curve25519key)
180182
}
181183

@@ -198,17 +200,18 @@ impl Curve25519Key {
198200
if rc != 0 {
199201
return Err(rc);
200202
}
201-
let mut wc_key = unsafe { wc_key.assume_init() };
203+
let wc_key = unsafe { wc_key.assume_init() };
204+
let mut curve25519key = Curve25519Key { wc_key };
202205
let private_size = private.len() as u32;
203206
let public_size = public.len() as u32;
204207
let rc = unsafe {
205208
sys::wc_curve25519_import_private_raw(private.as_ptr(),
206-
private_size, public.as_ptr(), public_size, &mut wc_key)
209+
private_size, public.as_ptr(), public_size,
210+
&mut curve25519key.wc_key)
207211
};
208212
if rc != 0 {
209213
return Err(rc);
210214
}
211-
let curve25519key = Curve25519Key { wc_key };
212215
Ok(curve25519key)
213216
}
214217

@@ -232,19 +235,19 @@ impl Curve25519Key {
232235
if rc != 0 {
233236
return Err(rc);
234237
}
235-
let mut wc_key = unsafe { wc_key.assume_init() };
238+
let wc_key = unsafe { wc_key.assume_init() };
239+
let mut curve25519key = Curve25519Key { wc_key };
236240
let private_size = private.len() as u32;
237241
let public_size = public.len() as u32;
238242
let endian = if big_endian {sys::EC25519_BIG_ENDIAN} else {sys::EC25519_LITTLE_ENDIAN};
239243
let rc = unsafe {
240244
sys::wc_curve25519_import_private_raw_ex(private.as_ptr(),
241-
private_size, public.as_ptr(), public_size, &mut wc_key,
242-
endian as i32)
245+
private_size, public.as_ptr(), public_size,
246+
&mut curve25519key.wc_key, endian as i32)
243247
};
244248
if rc != 0 {
245249
return Err(rc);
246250
}
247-
let curve25519key = Curve25519Key { wc_key };
248251
Ok(curve25519key)
249252
}
250253

@@ -266,15 +269,16 @@ impl Curve25519Key {
266269
if rc != 0 {
267270
return Err(rc);
268271
}
269-
let mut wc_key = unsafe { wc_key.assume_init() };
272+
let wc_key = unsafe { wc_key.assume_init() };
273+
let mut curve25519key = Curve25519Key { wc_key };
270274
let public_size = public.len() as u32;
271275
let rc = unsafe {
272-
sys::wc_curve25519_import_public(public.as_ptr(), public_size, &mut wc_key)
276+
sys::wc_curve25519_import_public(public.as_ptr(), public_size,
277+
&mut curve25519key.wc_key)
273278
};
274279
if rc != 0 {
275280
return Err(rc);
276281
}
277-
let curve25519key = Curve25519Key { wc_key };
278282
Ok(curve25519key)
279283
}
280284

@@ -297,17 +301,17 @@ impl Curve25519Key {
297301
if rc != 0 {
298302
return Err(rc);
299303
}
300-
let mut wc_key = unsafe { wc_key.assume_init() };
304+
let wc_key = unsafe { wc_key.assume_init() };
305+
let mut curve25519key = Curve25519Key { wc_key };
301306
let public_size = public.len() as u32;
302307
let endian = if big_endian {sys::EC25519_BIG_ENDIAN} else {sys::EC25519_LITTLE_ENDIAN};
303308
let rc = unsafe {
304309
sys::wc_curve25519_import_public_ex(public.as_ptr(), public_size,
305-
&mut wc_key, endian as i32)
310+
&mut curve25519key.wc_key, endian as i32)
306311
};
307312
if rc != 0 {
308313
return Err(rc);
309314
}
310-
let curve25519key = Curve25519Key { wc_key };
311315
Ok(curve25519key)
312316
}
313317

0 commit comments

Comments
 (0)