Skip to content

Commit e30e9b7

Browse files
authored
Merge pull request wolfSSL#9473 from holtrop/rust-cargo-clippy
Rust wrapper: enable cargo clippy and fix several clippy warnings
2 parents 6c8b905 + bfce171 commit e30e9b7

File tree

8 files changed

+277
-348
lines changed

8 files changed

+277
-348
lines changed

wrapper/rust/wolfssl/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
.PHONY: all
22
all:
33
cargo build
4+
cargo clippy
45
cargo doc
56

67
.PHONY: test

wrapper/rust/wolfssl/build.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,12 @@ fn generate_bindings() -> Result<()> {
5555
.clang_arg(format!("-I{}", wolfssl_base_dir()?))
5656
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
5757
.generate()
58-
.map_err(|_| io::Error::new(io::ErrorKind::Other, "Failed to generate bindings"))?;
58+
.map_err(|_| io::Error::other("Failed to generate bindings"))?;
5959

6060
bindings
6161
.write_to_file(bindings_path())
6262
.map_err(|e| {
63-
io::Error::new(
64-
io::ErrorKind::Other,
65-
format!("Couldn't write bindings: {}", e),
66-
)
63+
io::Error::other(format!("Couldn't write bindings: {}", e))
6764
})
6865
}
6966

wrapper/rust/wolfssl/src/wolfcrypt/aes.rs

Lines changed: 227 additions & 275 deletions
Large diffs are not rendered by default.

wrapper/rust/wolfssl/src/wolfcrypt/ecc.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1362,6 +1362,7 @@ impl ECC {
13621362
/// }
13631363
/// ```
13641364
#[cfg(ecc_import)]
1365+
#[allow(clippy::too_many_arguments)]
13651366
pub fn export_ex(&mut self, qx: &mut [u8], qx_len: &mut u32,
13661367
qy: &mut [u8], qy_len: &mut u32, d: &mut [u8], d_len: &mut u32,
13671368
hex: bool) -> Result<(), i32> {

wrapper/rust/wolfssl/src/wolfcrypt/kdf.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -339,11 +339,9 @@ pub fn tls13_hkdf_extract_ex(typ: i32, salt: Option<&[u8]>, key: Option<&mut [u8
339339
let mut ikm_buf = [0u8; sys::WC_MAX_DIGEST_SIZE as usize];
340340
let mut ikm_ptr = ikm_buf.as_mut_ptr();
341341
let mut ikm_size = 0u32;
342-
if let Some(key) = key {
343-
if key.len() > 0 {
344-
ikm_ptr = key.as_mut_ptr();
345-
ikm_size = key.len() as u32;
346-
}
342+
if let Some(key) = key && !key.is_empty() {
343+
ikm_ptr = key.as_mut_ptr();
344+
ikm_size = key.len() as u32;
347345
}
348346
if out.len() != HMAC::get_hmac_size_by_type(typ)? {
349347
return Err(sys::wolfCrypt_ErrorCodes_BUFFER_E);
@@ -473,6 +471,7 @@ pub fn tls13_hkdf_expand_label(typ: i32, key: &[u8], protocol: &[u8], label: &[u
473471
/// }
474472
/// ```
475473
#[cfg(kdf_tls13)]
474+
#[allow(clippy::too_many_arguments)]
476475
pub fn tls13_hkdf_expand_label_ex(typ: i32, key: &[u8], protocol: &[u8], label: &[u8], info: &[u8], out: &mut [u8], heap: Option<*mut std::os::raw::c_void>, dev_id: Option<i32>) -> Result<(), i32> {
477476
let key_size = key.len() as u32;
478477
let protocol_size = protocol.len() as u32;

wrapper/rust/wolfssl/src/wolfcrypt/random.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,20 @@ wolfSSL `WC_RNG` object. It ensures proper initialization and deallocation.
3030
```rust
3131
use wolfssl::wolfcrypt::random::RNG;
3232
33-
fn main() {
34-
// Create a RNG instance.
35-
let mut rng = RNG::new().expect("Failed to create RNG");
33+
// Create a RNG instance.
34+
let mut rng = RNG::new().expect("Failed to create RNG");
3635
37-
// Generate a single random byte value.
38-
let byte = rng.generate_byte().expect("Failed to generate a single byte");
36+
// Generate a single random byte value.
37+
let byte = rng.generate_byte().expect("Failed to generate a single byte");
3938
40-
// Generate a random block.
41-
let mut buffer = [0u32; 8];
42-
rng.generate_block(&mut buffer).expect("Failed to generate a block");
43-
}
39+
// Generate a random block.
40+
let mut buffer = [0u32; 8];
41+
rng.generate_block(&mut buffer).expect("Failed to generate a block");
4442
```
4543
*/
4644

4745
use crate::sys;
48-
use std::mem::{size_of, MaybeUninit};
46+
use std::mem::{size_of_val, MaybeUninit};
4947

5048
/// A cryptographically secure random number generator based on the wolfSSL
5149
/// library.
@@ -138,7 +136,7 @@ impl RNG {
138136
/// library return code on failure.
139137
pub fn new_with_nonce_ex<T>(nonce: &mut [T], heap: Option<*mut std::os::raw::c_void>, dev_id: Option<i32>) -> Result<Self, i32> {
140138
let ptr = nonce.as_mut_ptr() as *mut u8;
141-
let size: u32 = (nonce.len() * size_of::<T>()) as u32;
139+
let size: u32 = size_of_val(nonce) as u32;
142140
let mut rng: MaybeUninit<RNG> = MaybeUninit::uninit();
143141
let heap = match heap {
144142
Some(heap) => heap,
@@ -320,7 +318,7 @@ impl RNG {
320318
/// library return code on failure.
321319
pub fn generate_block<T>(&mut self, buf: &mut [T]) -> Result<(), i32> {
322320
let ptr = buf.as_mut_ptr() as *mut u8;
323-
let size: u32 = (buf.len() * size_of::<T>()) as u32;
321+
let size: u32 = size_of_val(buf) as u32;
324322
let rc = unsafe { sys::wc_RNG_GenerateBlock(&mut self.wc_rng, ptr, size) };
325323
if rc == 0 {
326324
Ok(())

wrapper/rust/wolfssl/src/wolfcrypt/rsa.rs

Lines changed: 30 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -215,11 +215,10 @@ impl RSA {
215215
return Err(rc);
216216
}
217217
let mut wc_rsakey = unsafe { wc_rsakey.assume_init() };
218-
let der_ptr = der.as_ptr() as *const u8;
219218
let der_size = der.len() as u32;
220219
let mut idx: u32 = 0;
221220
let rc = unsafe {
222-
sys::wc_RsaPrivateKeyDecode(der_ptr, &mut idx, &mut wc_rsakey, der_size)
221+
sys::wc_RsaPrivateKeyDecode(der.as_ptr(), &mut idx, &mut wc_rsakey, der_size)
223222
};
224223
if rc != 0 {
225224
unsafe { sys::wc_FreeRsaKey(&mut wc_rsakey); }
@@ -325,11 +324,10 @@ impl RSA {
325324
return Err(rc);
326325
}
327326
let mut wc_rsakey = unsafe { wc_rsakey.assume_init() };
328-
let der_ptr = der.as_ptr() as *const u8;
329327
let der_size = der.len() as u32;
330328
let mut idx: u32 = 0;
331329
let rc = unsafe {
332-
sys::wc_RsaPublicKeyDecode(der_ptr, &mut idx, &mut wc_rsakey, der_size)
330+
sys::wc_RsaPublicKeyDecode(der.as_ptr(), &mut idx, &mut wc_rsakey, der_size)
333331
};
334332
if rc != 0 {
335333
unsafe { sys::wc_FreeRsaKey(&mut wc_rsakey); }
@@ -496,25 +494,25 @@ impl RSA {
496494
/// &mut d, &mut d_size, &mut p, &mut p_size, &mut q, &mut q_size).expect("Error with export_key()");
497495
/// }
498496
/// ```
497+
#[allow(clippy::too_many_arguments)]
499498
pub fn export_key(&mut self,
500499
e: &mut [u8], e_size: &mut u32,
501500
n: &mut [u8], n_size: &mut u32,
502501
d: &mut [u8], d_size: &mut u32,
503502
p: &mut [u8], p_size: &mut u32,
504503
q: &mut [u8], q_size: &mut u32) -> Result<(), i32> {
505-
let e_ptr = e.as_ptr() as *mut u8;
506504
*e_size = e.len() as u32;
507-
let n_ptr = n.as_ptr() as *mut u8;
508505
*n_size = n.len() as u32;
509-
let d_ptr = d.as_ptr() as *mut u8;
510506
*d_size = d.len() as u32;
511-
let p_ptr = p.as_ptr() as *mut u8;
512507
*p_size = p.len() as u32;
513-
let q_ptr = q.as_ptr() as *mut u8;
514508
*q_size = q.len() as u32;
515509
let rc = unsafe {
516-
sys::wc_RsaExportKey(&mut self.wc_rsakey, e_ptr, e_size,
517-
n_ptr, n_size, d_ptr, d_size, p_ptr, p_size, q_ptr, q_size)
510+
sys::wc_RsaExportKey(&self.wc_rsakey,
511+
e.as_mut_ptr(), e_size,
512+
n.as_mut_ptr(), n_size,
513+
d.as_mut_ptr(), d_size,
514+
p.as_mut_ptr(), p_size,
515+
q.as_mut_ptr(), q_size)
518516
};
519517
if rc != 0 {
520518
return Err(rc);
@@ -556,13 +554,11 @@ impl RSA {
556554
pub fn export_public_key(&mut self,
557555
e: &mut [u8], e_size: &mut u32,
558556
n: &mut [u8], n_size: &mut u32) -> Result<(), i32> {
559-
let e_ptr = e.as_ptr() as *mut u8;
560557
*e_size = e.len() as u32;
561-
let n_ptr = n.as_ptr() as *mut u8;
562558
*n_size = n.len() as u32;
563559
let rc = unsafe {
564-
sys::wc_RsaFlattenPublicKey(&mut self.wc_rsakey, e_ptr, e_size,
565-
n_ptr, n_size)
560+
sys::wc_RsaFlattenPublicKey(&self.wc_rsakey,
561+
e.as_mut_ptr(), e_size, n.as_mut_ptr(), n_size)
566562
};
567563
if rc != 0 {
568564
return Err(rc);
@@ -670,13 +666,12 @@ impl RSA {
670666
/// assert_eq!(plain_out[0..dec_len], *plain);
671667
/// ```
672668
pub fn public_encrypt(&mut self, din: &[u8], dout: &mut [u8], rng: &mut RNG) -> Result<usize, i32> {
673-
let din_ptr = din.as_ptr() as *const u8;
674669
let din_size = din.len() as u32;
675-
let dout_ptr = dout.as_ptr() as *mut u8;
676670
let dout_size = dout.len() as u32;
677671
let rc = unsafe {
678-
sys::wc_RsaPublicEncrypt(din_ptr, din_size, dout_ptr, dout_size,
679-
&mut self.wc_rsakey, &mut rng.wc_rng)
672+
sys::wc_RsaPublicEncrypt(din.as_ptr(), din_size,
673+
dout.as_mut_ptr(), dout_size, &mut self.wc_rsakey,
674+
&mut rng.wc_rng)
680675
};
681676
if rc < 0 {
682677
return Err(rc);
@@ -725,13 +720,11 @@ impl RSA {
725720
/// assert_eq!(plain_out[0..dec_len], *plain);
726721
/// ```
727722
pub fn private_decrypt(&mut self, din: &[u8], dout: &mut [u8]) -> Result<usize, i32> {
728-
let din_ptr = din.as_ptr() as *const u8;
729723
let din_size = din.len() as u32;
730-
let dout_ptr = dout.as_ptr() as *mut u8;
731724
let dout_size = dout.len() as u32;
732725
let rc = unsafe {
733-
sys::wc_RsaPrivateDecrypt(din_ptr, din_size, dout_ptr, dout_size,
734-
&mut self.wc_rsakey)
726+
sys::wc_RsaPrivateDecrypt(din.as_ptr(), din_size,
727+
dout.as_mut_ptr(), dout_size, &mut self.wc_rsakey)
735728
};
736729
if rc < 0 {
737730
return Err(rc);
@@ -789,12 +782,10 @@ impl RSA {
789782
/// rsa.pss_verify_check(signature, &mut verify_out, msg, RSA::HASH_TYPE_SHA256, RSA::MGF1SHA256).expect("Error with pss_verify_check()");
790783
/// ```
791784
pub fn pss_sign(&mut self, din: &[u8], dout: &mut [u8], hash_algo: u32, mgf: i32, rng: &mut RNG) -> Result<usize, i32> {
792-
let din_ptr = din.as_ptr() as *const u8;
793785
let din_size = din.len() as u32;
794-
let dout_ptr = dout.as_ptr() as *mut u8;
795786
let dout_size = dout.len() as u32;
796787
let rc = unsafe {
797-
sys::wc_RsaPSS_Sign(din_ptr, din_size, dout_ptr, dout_size,
788+
sys::wc_RsaPSS_Sign(din.as_ptr(), din_size, dout.as_mut_ptr(), dout_size,
798789
hash_algo, mgf, &mut self.wc_rsakey, &mut rng.wc_rng)
799790
};
800791
if rc < 0 {
@@ -850,13 +841,11 @@ impl RSA {
850841
/// rsa.pss_verify_check(signature, &mut verify_out, msg, RSA::HASH_TYPE_SHA256, RSA::MGF1SHA256).expect("Error with pss_verify_check()");
851842
/// ```
852843
pub fn pss_check_padding(&mut self, din: &[u8], sig: &[u8], hash_algo: u32) -> Result<(), i32> {
853-
let din_ptr = din.as_ptr() as *const u8;
854844
let din_size = din.len() as u32;
855-
let sig_ptr = sig.as_ptr() as *const u8;
856845
let sig_size = sig.len() as u32;
857846
let rc = unsafe {
858-
sys::wc_RsaPSS_CheckPadding(din_ptr, din_size, sig_ptr, sig_size,
859-
hash_algo)
847+
sys::wc_RsaPSS_CheckPadding(din.as_ptr(), din_size,
848+
sig.as_ptr(), sig_size, hash_algo)
860849
};
861850
if rc != 0 {
862851
return Err(rc);
@@ -914,12 +903,11 @@ impl RSA {
914903
/// rsa.pss_verify_check(signature, &mut verify_out, msg, RSA::HASH_TYPE_SHA256, RSA::MGF1SHA256).expect("Error with pss_verify_check()");
915904
/// ```
916905
pub fn pss_verify(&mut self, din: &[u8], dout: &mut [u8], hash_algo: u32, mgf: i32) -> Result<usize, i32> {
917-
let din_ptr = din.as_ptr() as *const u8;
918906
let din_size = din.len() as u32;
919-
let dout_ptr = dout.as_ptr() as *mut u8;
920907
let dout_size = dout.len() as u32;
921908
let rc = unsafe {
922-
sys::wc_RsaPSS_Verify(din_ptr, din_size, dout_ptr, dout_size,
909+
sys::wc_RsaPSS_Verify(din.as_ptr(), din_size,
910+
dout.as_mut_ptr(), dout_size,
923911
hash_algo, mgf, &mut self.wc_rsakey)
924912
};
925913
if rc < 0 {
@@ -982,15 +970,13 @@ impl RSA {
982970
/// rsa.pss_verify_check(signature, &mut verify_out, msg, RSA::HASH_TYPE_SHA256, RSA::MGF1SHA256).expect("Error with pss_verify_check()");
983971
/// ```
984972
pub fn pss_verify_check(&mut self, din: &[u8], dout: &mut [u8], digest: &[u8], hash_algo: u32, mgf: i32) -> Result<usize, i32> {
985-
let din_ptr = din.as_ptr() as *const u8;
986973
let din_size = din.len() as u32;
987-
let dout_ptr = dout.as_ptr() as *mut u8;
988974
let dout_size = dout.len() as u32;
989-
let digest_ptr = digest.as_ptr() as *const u8;
990975
let digest_size = digest.len() as u32;
991976
let rc = unsafe {
992-
sys::wc_RsaPSS_VerifyCheck(din_ptr, din_size, dout_ptr, dout_size,
993-
digest_ptr, digest_size, hash_algo, mgf, &mut self.wc_rsakey)
977+
sys::wc_RsaPSS_VerifyCheck(din.as_ptr(), din_size,
978+
dout.as_mut_ptr(), dout_size, digest.as_ptr(), digest_size,
979+
hash_algo, mgf, &mut self.wc_rsakey)
994980
};
995981
if rc < 0 {
996982
return Err(rc);
@@ -1047,12 +1033,11 @@ impl RSA {
10471033
/// ```
10481034
#[cfg(rsa_direct)]
10491035
pub fn rsa_direct(&mut self, din: &[u8], dout: &mut [u8], typ: i32, rng: &mut RNG) -> Result<usize, i32> {
1050-
let din_ptr = din.as_ptr() as *const u8;
10511036
let din_size = din.len() as u32;
1052-
let dout_ptr = dout.as_ptr() as *mut u8;
10531037
let mut dout_size = dout.len() as u32;
10541038
let rc = unsafe {
1055-
sys::wc_RsaDirect(din_ptr, din_size, dout_ptr, &mut dout_size,
1039+
sys::wc_RsaDirect(din.as_ptr(), din_size,
1040+
dout.as_mut_ptr(), &mut dout_size,
10561041
&mut self.wc_rsakey, typ, &mut rng.wc_rng)
10571042
};
10581043
if rc < 0 {
@@ -1093,7 +1078,6 @@ impl RSA {
10931078
/// let mut enc: [u8; 512] = [0; 512];
10941079
/// let enc_len = rsa.public_encrypt(plain, &mut enc, &mut rng).expect("Error with public_encrypt()");
10951080
/// assert!(enc_len > 0 && enc_len <= 512);
1096-
10971081
/// let key_path = "../../../certs/client-key.der";
10981082
/// let der: Vec<u8> = fs::read(key_path).expect("Error reading key file");
10991083
/// let mut rsa = RSA::new_from_der(&der).expect("Error with new_from_der()");
@@ -1156,12 +1140,11 @@ impl RSA {
11561140
/// assert!(verify_out_size > 0 && verify_out_size <= 512);
11571141
/// ```
11581142
pub fn ssl_sign(&mut self, din: &[u8], dout: &mut [u8], rng: &mut RNG) -> Result<usize, i32> {
1159-
let din_ptr = din.as_ptr() as *const u8;
11601143
let din_size = din.len() as u32;
1161-
let dout_ptr = dout.as_ptr() as *mut u8;
11621144
let dout_size = dout.len() as u32;
11631145
let rc = unsafe {
1164-
sys::wc_RsaSSL_Sign(din_ptr, din_size, dout_ptr, dout_size,
1146+
sys::wc_RsaSSL_Sign(din.as_ptr(), din_size,
1147+
dout.as_mut_ptr(), dout_size,
11651148
&mut self.wc_rsakey, &mut rng.wc_rng)
11661149
};
11671150
if rc < 0 {
@@ -1214,13 +1197,11 @@ impl RSA {
12141197
/// assert!(verify_out_size > 0 && verify_out_size <= 512);
12151198
/// ```
12161199
pub fn ssl_verify(&mut self, din: &[u8], dout: &mut [u8]) -> Result<usize, i32> {
1217-
let din_ptr = din.as_ptr() as *const u8;
12181200
let din_size = din.len() as u32;
1219-
let dout_ptr = dout.as_ptr() as *mut u8;
12201201
let dout_size = dout.len() as u32;
12211202
let rc = unsafe {
1222-
sys::wc_RsaSSL_Verify(din_ptr, din_size, dout_ptr, dout_size,
1223-
&mut self.wc_rsakey)
1203+
sys::wc_RsaSSL_Verify(din.as_ptr(), din_size,
1204+
dout.as_mut_ptr(), dout_size, &mut self.wc_rsakey)
12241205
};
12251206
if rc < 0 {
12261207
return Err(rc);

wrapper/rust/wolfssl/src/wolfcrypt/sha.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2098,7 +2098,7 @@ impl SHAKE128 {
20982098
if dout_size % (Self::SQUEEZE_BLOCK_SIZE as u32) != 0 {
20992099
return Err(sys::wolfCrypt_ErrorCodes_BUFFER_E);
21002100
}
2101-
let n_blocks = (dout_size / (Self::SQUEEZE_BLOCK_SIZE as u32)) as u32;
2101+
let n_blocks = dout_size / (Self::SQUEEZE_BLOCK_SIZE as u32);
21022102
let rc = unsafe {
21032103
sys::wc_Shake128_SqueezeBlocks(&mut self.wc_shake, dout.as_mut_ptr(), n_blocks)
21042104
};
@@ -2368,7 +2368,7 @@ impl SHAKE256 {
23682368
if dout_size % (Self::SQUEEZE_BLOCK_SIZE as u32) != 0 {
23692369
return Err(sys::wolfCrypt_ErrorCodes_BUFFER_E);
23702370
}
2371-
let n_blocks = (dout_size / (Self::SQUEEZE_BLOCK_SIZE as u32)) as u32;
2371+
let n_blocks = dout_size / (Self::SQUEEZE_BLOCK_SIZE as u32);
23722372
let rc = unsafe {
23732373
sys::wc_Shake256_SqueezeBlocks(&mut self.wc_shake, dout.as_mut_ptr(), n_blocks)
23742374
};

0 commit comments

Comments
 (0)