This is an automated email from the ASF dual-hosted git repository. yuanz pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/incubator-teaclave-trustzone-sdk.git
commit 41e586f08859e1b033564ccbb31f3402c04a7d17 Author: Yuan Zhuang <[email protected]> AuthorDate: Fri Aug 22 12:20:08 2025 +0000 lint: Fix clippy errors in TA --- examples/acipher-rs/ta/build.rs | 3 +- examples/acipher-rs/ta/src/main.rs | 16 +++-- examples/aes-rs/ta/build.rs | 3 +- examples/aes-rs/ta/src/main.rs | 37 +++++------ examples/authentication-rs/ta/build.rs | 3 +- examples/authentication-rs/ta/src/main.rs | 47 ++++++-------- examples/big_int-rs/ta/build.rs | 3 +- examples/build_with_optee_utee_sys-rs/ta/build.rs | 13 ++-- .../build_with_optee_utee_sys-rs/ta/src/main.rs | 2 +- examples/diffie_hellman-rs/ta/build.rs | 3 +- examples/diffie_hellman-rs/ta/src/main.rs | 24 ++++--- examples/digest-rs/ta/build.rs | 3 +- examples/digest-rs/ta/src/main.rs | 12 +--- examples/error_handling-rs/ta/build.rs | 3 +- examples/error_handling-rs/ta/src/main.rs | 6 +- examples/hello_world-rs/ta/build.rs | 4 +- examples/hotp-rs/ta/build.rs | 3 +- examples/hotp-rs/ta/src/main.rs | 60 +++++++---------- examples/inter_ta-rs/ta/build.rs | 5 +- examples/inter_ta-rs/ta/src/main.rs | 4 +- .../message_passing_interface-rs/ta/Cargo.lock | 8 +-- examples/message_passing_interface-rs/ta/build.rs | 3 +- .../message_passing_interface-rs/ta/src/main.rs | 2 +- examples/mnist-rs/ta/inference/Makefile | 13 ++-- examples/mnist-rs/ta/inference/build.rs | 4 +- examples/mnist-rs/ta/train/Makefile | 12 +++- examples/mnist-rs/ta/train/build.rs | 2 +- examples/property-rs/ta/build.rs | 1 - examples/property-rs/ta/src/main.rs | 4 +- examples/random-rs/ta/build.rs | 3 +- examples/random-rs/ta/src/main.rs | 14 ++-- examples/secure_db_abstraction-rs/ta/Cargo.lock | 39 +++++++++-- examples/secure_db_abstraction-rs/ta/build.rs | 1 - examples/secure_db_abstraction-rs/ta/src/main.rs | 4 +- examples/secure_storage-rs/ta/build.rs | 3 +- examples/secure_storage-rs/ta/src/main.rs | 54 ++++++---------- examples/serde-rs/proto/Cargo.toml | 1 + examples/serde-rs/proto/src/lib.rs | 7 ++ examples/serde-rs/ta/Cargo.lock | 9 +-- examples/serde-rs/ta/build.rs | 3 +- examples/serde-rs/ta/src/main.rs | 9 +-- examples/signature_verification-rs/ta/build.rs | 3 +- examples/signature_verification-rs/ta/src/main.rs | 75 +++++++++++++--------- examples/tcp_client-rs/ta/Cargo.toml | 3 + examples/tcp_client-rs/ta/build.rs | 5 +- examples/tcp_client-rs/ta/src/main.rs | 12 +++- examples/time-rs/ta/build.rs | 3 +- examples/time-rs/ta/src/main.rs | 7 +- examples/tls_client-rs/ta/Cargo.lock | 8 +-- examples/tls_server-rs/ta/Cargo.lock | 8 +-- examples/udp_socket-rs/ta/Cargo.toml | 3 + examples/udp_socket-rs/ta/build.rs | 5 +- examples/udp_socket-rs/ta/src/main.rs | 12 +++- optee-utee-build/src/code_generator.rs | 7 +- .../test_files/test_edition_2024_result.rs | 7 +- .../test_files/test_edition_before_2024_result.rs | 7 +- optee-utee/macros/src/lib.rs | 18 ++++-- projects/web3/eth_wallet/ta/Cargo.lock | 31 +++++++++ projects/web3/eth_wallet/ta/Makefile | 8 ++- projects/web3/eth_wallet/ta/build.rs | 1 - projects/web3/eth_wallet/ta/src/wallet.rs | 7 +- 61 files changed, 362 insertions(+), 318 deletions(-) diff --git a/examples/acipher-rs/ta/build.rs b/examples/acipher-rs/ta/build.rs index 971f3d5..fa2cd0f 100644 --- a/examples/acipher-rs/ta/build.rs +++ b/examples/acipher-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let ta_config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/acipher-rs/ta/src/main.rs b/examples/acipher-rs/ta/src/main.rs index 1831657..d60227e 100644 --- a/examples/acipher-rs/ta/src/main.rs +++ b/examples/acipher-rs/ta/src/main.rs @@ -96,9 +96,12 @@ fn encrypt(rsa: &mut RsaCipher, params: &mut Parameters) -> Result<()> { Err(e) => Err(e), Ok(cipher) => { cipher.set_key(&rsa.key)?; - match cipher.encrypt(&[], &plain_text) { + match cipher.encrypt(&[], plain_text) { Err(e) => Err(e), - Ok(cipher_text) => Ok(p1.buffer().clone_from_slice(&cipher_text)), + Ok(cipher_text) => { + p1.buffer().clone_from_slice(&cipher_text); + Ok(()) + } } } } @@ -107,7 +110,7 @@ fn encrypt(rsa: &mut RsaCipher, params: &mut Parameters) -> Result<()> { fn decrypt(rsa: &mut RsaCipher, params: &mut Parameters) -> Result<()> { let key_info = rsa.key.info().unwrap(); let mut p0 = unsafe { params.0.as_memref().unwrap() }; - let mut cipher_text = p0.buffer(); + let cipher_text = p0.buffer(); let mut p1 = unsafe { params.1.as_memref().unwrap() }; match Asymmetric::allocate( AlgorithmId::RsaesPkcs1V15, @@ -117,9 +120,12 @@ fn decrypt(rsa: &mut RsaCipher, params: &mut Parameters) -> Result<()> { Err(e) => Err(e), Ok(cipher) => { cipher.set_key(&rsa.key)?; - match cipher.decrypt(&mut [], &mut cipher_text) { + match cipher.decrypt(&[], cipher_text) { Err(e) => Err(e), - Ok(plain_text) => Ok(p1.buffer().clone_from_slice(&plain_text)), + Ok(plain_text) => { + p1.buffer().clone_from_slice(&plain_text); + Ok(()) + } } } } diff --git a/examples/aes-rs/ta/build.rs b/examples/aes-rs/ta/build.rs index be45a97..1337f93 100644 --- a/examples/aes-rs/ta/build.rs +++ b/examples/aes-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/aes-rs/ta/src/main.rs b/examples/aes-rs/ta/src/main.rs index c5ffbcf..9d7fc9c 100644 --- a/examples/aes-rs/ta/src/main.rs +++ b/examples/aes-rs/ta/src/main.rs @@ -20,14 +20,14 @@ extern crate alloc; -use alloc::vec; use alloc::boxed::Box; +use alloc::vec; +use optee_utee::is_algorithm_supported; use optee_utee::{ ta_close_session, ta_create, ta_destroy, ta_invoke_command, ta_open_session, trace_println, }; -use optee_utee::is_algorithm_supported; -use optee_utee::{AlgorithmId, ElementId, Cipher, OperationMode}; -use optee_utee::{AttributeId, AttributeMemref, GenericObject, TransientObject, TransientObjectType}; +use optee_utee::{AlgorithmId, Cipher, ElementId, OperationMode}; +use optee_utee::{AttributeId, AttributeMemref, TransientObject, TransientObjectType}; use optee_utee::{Error, ErrorKind, Parameters, Result}; use proto::{Algo, Command, KeySize, Mode}; @@ -73,21 +73,11 @@ fn destroy() { fn invoke_command(sess_ctx: &mut AesCipher, cmd_id: u32, params: &mut Parameters) -> Result<()> { trace_println!("[+] TA invoke command"); match Command::from(cmd_id) { - Command::Prepare => { - return alloc_resources(sess_ctx, params); - } - Command::SetKey => { - return set_aes_key(sess_ctx, params); - } - Command::SetIV => { - return reset_aes_iv(sess_ctx, params); - } - Command::Cipher => { - return cipher_buffer(sess_ctx, params); - } - _ => { - return Err(Error::new(ErrorKind::BadParameters)); - } + Command::Prepare => alloc_resources(sess_ctx, params), + Command::SetKey => set_aes_key(sess_ctx, params), + Command::SetIV => reset_aes_iv(sess_ctx, params), + Command::Cipher => cipher_buffer(sess_ctx, params), + _ => Err(Error::new(ErrorKind::BadParameters)), } } @@ -123,7 +113,10 @@ pub fn alloc_resources(aes: &mut AesCipher, params: &mut Parameters) -> Result<( aes.key_size = ta2tee_key_size(key_size_value).unwrap(); // check whether the algorithm is supported - is_algorithm_supported(ta2tee_algo_id(algo_value).unwrap() as u32, ElementId::ElementNone as u32)?; + is_algorithm_supported( + ta2tee_algo_id(algo_value).unwrap() as u32, + ElementId::ElementNone as u32, + )?; aes.cipher = Cipher::allocate( ta2tee_algo_id(algo_value).unwrap(), @@ -132,7 +125,7 @@ pub fn alloc_resources(aes: &mut AesCipher, params: &mut Parameters) -> Result<( ) .unwrap(); aes.key_object = TransientObject::allocate(TransientObjectType::Aes, aes.key_size * 8).unwrap(); - let key = vec![0u8; aes.key_size as usize]; + let key = vec![0u8; aes.key_size]; let attr = AttributeMemref::from_ref(AttributeId::SecretValue, &key); aes.key_object.populate(&[attr.into()])?; aes.cipher.set_key(&aes.key_object)?; @@ -148,7 +141,7 @@ pub fn set_aes_key(aes: &mut AesCipher, params: &mut Parameters) -> Result<()> { return Err(Error::new(ErrorKind::BadParameters)); } - let attr = AttributeMemref::from_ref(AttributeId::SecretValue, &key); + let attr = AttributeMemref::from_ref(AttributeId::SecretValue, key); aes.key_object.reset(); aes.key_object.populate(&[attr.into()])?; diff --git a/examples/authentication-rs/ta/build.rs b/examples/authentication-rs/ta/build.rs index be45a97..1337f93 100644 --- a/examples/authentication-rs/ta/build.rs +++ b/examples/authentication-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/authentication-rs/ta/src/main.rs b/examples/authentication-rs/ta/src/main.rs index 24cfab5..24f0768 100644 --- a/examples/authentication-rs/ta/src/main.rs +++ b/examples/authentication-rs/ta/src/main.rs @@ -20,13 +20,13 @@ extern crate alloc; -use alloc::vec; use alloc::boxed::Box; +use alloc::vec; use optee_utee::{ ta_close_session, ta_create, ta_destroy, ta_invoke_command, ta_open_session, trace_println, }; use optee_utee::{AlgorithmId, OperationMode, AE}; -use optee_utee::{AttributeId, AttributeMemref, GenericObject, TransientObject, TransientObjectType}; +use optee_utee::{AttributeId, AttributeMemref, TransientObject, TransientObjectType}; use optee_utee::{Error, ErrorKind, Parameters, Result}; use proto::{Command, Mode, AAD_LEN, BUFFER_SIZE, KEY_SIZE, TAG_LEN}; @@ -38,9 +38,7 @@ pub struct AEOp { impl Default for AEOp { fn default() -> Self { - Self { - op: AE::null() - } + Self { op: AE::null() } } } @@ -72,23 +70,21 @@ fn invoke_command(sess_ctx: &mut AEOp, cmd_id: u32, params: &mut Parameters) -> match Command::from(cmd_id) { Command::Prepare => { trace_println!("[+] TA prepare"); - return prepare(sess_ctx, params); + prepare(sess_ctx, params) } Command::Update => { trace_println!("[+] TA update"); - return update(sess_ctx, params); + update(sess_ctx, params) } Command::EncFinal => { trace_println!("[+] TA encrypt_final"); - return encrypt_final(sess_ctx, params); + encrypt_final(sess_ctx, params) } Command::DecFinal => { trace_println!("[+] TA decrypt_final"); - return decrypt_final(sess_ctx, params); - } - _ => { - return Err(Error::new(ErrorKind::BadParameters)); + decrypt_final(sess_ctx, params) } + _ => Err(Error::new(ErrorKind::BadParameters)), } } @@ -113,7 +109,7 @@ pub fn prepare(ae: &mut AEOp, params: &mut Parameters) -> Result<()> { key_object.populate(&[attr.into()])?; ae.op.set_key(&key_object)?; ae.op - .init(&nonce, TAG_LEN * 8, AAD_LEN, BUFFER_SIZE * PAYLOAD_NUMBER)?; + .init(nonce, TAG_LEN * 8, AAD_LEN, BUFFER_SIZE * PAYLOAD_NUMBER)?; ae.op.update_aad(aad); Ok(()) } @@ -131,24 +127,23 @@ pub fn encrypt_final(digest: &mut AEOp, params: &mut Parameters) -> Result<()> { let mut p0 = unsafe { params.0.as_memref().unwrap() }; let mut p1 = unsafe { params.1.as_memref().unwrap() }; let mut p2 = unsafe { params.2.as_memref().unwrap() }; - - let mut clear = vec![0; p0.buffer().len() as usize]; + + let mut clear = vec![0; p0.buffer().len()]; clear.copy_from_slice(p0.buffer()); - let mut ciph = vec![0; p1.buffer().len() as usize]; + let mut ciph = vec![0; p1.buffer().len()]; ciph.copy_from_slice(p1.buffer()); - let mut tag = vec![0; p2.buffer().len() as usize]; + let mut tag = vec![0; p2.buffer().len()]; tag.copy_from_slice(p2.buffer()); match digest.op.encrypt_final(&clear, &mut ciph, &mut tag) { - Err(e) => Err(e), Ok((_ciph_len, _tag_len)) => { p0.buffer().copy_from_slice(&clear); p1.buffer().copy_from_slice(&ciph); p2.buffer().copy_from_slice(&tag); - + Ok(()) - }, + } } } @@ -156,12 +151,12 @@ pub fn decrypt_final(digest: &mut AEOp, params: &mut Parameters) -> Result<()> { let mut p0 = unsafe { params.0.as_memref().unwrap() }; let mut p1 = unsafe { params.1.as_memref().unwrap() }; let mut p2 = unsafe { params.2.as_memref().unwrap() }; - - let mut clear = vec![0; p0.buffer().len() as usize]; + + let mut clear = vec![0; p0.buffer().len()]; clear.copy_from_slice(p0.buffer()); - let mut ciph = vec![0; p1.buffer().len() as usize]; + let mut ciph = vec![0; p1.buffer().len()]; ciph.copy_from_slice(p1.buffer()); - let mut tag = vec![0; p2.buffer().len() as usize]; + let mut tag = vec![0; p2.buffer().len()]; tag.copy_from_slice(p2.buffer()); match digest.op.decrypt_final(&clear, &mut ciph, &tag) { @@ -171,8 +166,8 @@ pub fn decrypt_final(digest: &mut AEOp, params: &mut Parameters) -> Result<()> { p1.buffer().copy_from_slice(&ciph); p2.buffer().copy_from_slice(&tag); - Ok(()) - }, + Ok(()) + } } } diff --git a/examples/big_int-rs/ta/build.rs b/examples/big_int-rs/ta/build.rs index be45a97..1337f93 100644 --- a/examples/big_int-rs/ta/build.rs +++ b/examples/big_int-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/build_with_optee_utee_sys-rs/ta/build.rs b/examples/build_with_optee_utee_sys-rs/ta/build.rs index f3ae50f..e6ce13f 100644 --- a/examples/build_with_optee_utee_sys-rs/ta/build.rs +++ b/examples/build_with_optee_utee_sys-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { // For Rust editions 2018 and earlier, You must set workspace.resolver = "2" @@ -29,12 +28,10 @@ fn main() -> Result<(), Error> { // For reference: // 1. resolver version 2: https://doc.rust-lang.org/cargo/reference/resolver.html#feature-resolver-version-2 // 2. resolver versions: https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions - let flags: u32 = optee_utee_sys::TA_FLAG_SINGLE_INSTANCE | - optee_utee_sys::TA_FLAG_MULTI_SESSION | - optee_utee_sys::TA_FLAG_INSTANCE_KEEP_ALIVE; + let flags: u32 = optee_utee_sys::TA_FLAG_SINGLE_INSTANCE + | optee_utee_sys::TA_FLAG_MULTI_SESSION + | optee_utee_sys::TA_FLAG_INSTANCE_KEEP_ALIVE; - let config = TaConfig::new_default_with_cargo_env(proto::UUID)?. - ta_flags(flags); + let config = TaConfig::new_default_with_cargo_env(proto::UUID)?.ta_flags(flags); optee_utee_build::build(RustEdition::Before2024, config) - } diff --git a/examples/build_with_optee_utee_sys-rs/ta/src/main.rs b/examples/build_with_optee_utee_sys-rs/ta/src/main.rs index 4fb8b41..9174d06 100644 --- a/examples/build_with_optee_utee_sys-rs/ta/src/main.rs +++ b/examples/build_with_optee_utee_sys-rs/ta/src/main.rs @@ -18,12 +18,12 @@ #![no_std] #![no_main] +use core::sync::atomic::{AtomicU32, Ordering}; use optee_utee::{ ta_close_session, ta_create, ta_destroy, ta_invoke_command, ta_open_session, trace_println, }; use optee_utee::{Error, ErrorKind, Parameters, Result}; use proto::Command; -use core::sync::atomic::{AtomicU32, Ordering}; static GLOBAL_VALUE: AtomicU32 = AtomicU32::new(0); diff --git a/examples/diffie_hellman-rs/ta/build.rs b/examples/diffie_hellman-rs/ta/build.rs index be45a97..1337f93 100644 --- a/examples/diffie_hellman-rs/ta/build.rs +++ b/examples/diffie_hellman-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/diffie_hellman-rs/ta/src/main.rs b/examples/diffie_hellman-rs/ta/src/main.rs index e8864c5..b3b9522 100644 --- a/examples/diffie_hellman-rs/ta/src/main.rs +++ b/examples/diffie_hellman-rs/ta/src/main.rs @@ -25,7 +25,9 @@ use optee_utee::{ ta_close_session, ta_create, ta_destroy, ta_invoke_command, ta_open_session, trace_println, }; use optee_utee::{AlgorithmId, DeriveKey}; -use optee_utee::{AttributeId, AttributeMemref, GenericObject, TransientObject, TransientObjectType}; +use optee_utee::{ + AttributeId, AttributeMemref, GenericObject, TransientObject, TransientObjectType, +}; use optee_utee::{Error, ErrorKind, Parameters, Result}; use proto::{Command, KEY_SIZE}; @@ -71,27 +73,27 @@ fn generate_key(dh: &mut DiffieHellman, params: &mut Parameters) -> Result<()> { // Extract prime and base from parameters let prime_base_vec = p0.buffer(); - let prime_slice = &prime_base_vec[..KEY_SIZE/8]; - let base_slice = &prime_base_vec[KEY_SIZE/8..]; + let prime_slice = &prime_base_vec[..KEY_SIZE / 8]; + let base_slice = &prime_base_vec[KEY_SIZE / 8..]; let attr_prime = AttributeMemref::from_ref(AttributeId::DhPrime, prime_slice); let attr_base = AttributeMemref::from_ref(AttributeId::DhBase, base_slice); // Generate key pair dh.key = TransientObject::allocate(TransientObjectType::DhKeypair, KEY_SIZE).unwrap(); - let mut public_buffer = p2.buffer(); - let mut private_buffer = p3.buffer(); + let public_buffer = p2.buffer(); + let private_buffer = p3.buffer(); dh.key .generate_key(KEY_SIZE, &[attr_prime.into(), attr_base.into()])?; let mut key_size = dh .key - .ref_attribute(AttributeId::DhPublicValue, &mut public_buffer) + .ref_attribute(AttributeId::DhPublicValue, public_buffer) .unwrap(); p1.set_a(key_size as u32); key_size = dh .key - .ref_attribute(AttributeId::DhPrivateValue, &mut private_buffer) + .ref_attribute(AttributeId::DhPrivateValue, private_buffer) .unwrap(); p1.set_b(key_size as u32); Ok(()) @@ -128,12 +130,8 @@ fn invoke_command( ) -> Result<()> { trace_println!("[+] TA invoke command"); match Command::from(cmd_id) { - Command::GenerateKey => { - return generate_key(sess_ctx, params); - } - Command::DeriveKey => { - return derive_key(sess_ctx, params); - } + Command::GenerateKey => generate_key(sess_ctx, params), + Command::DeriveKey => derive_key(sess_ctx, params), _ => Err(Error::new(ErrorKind::BadParameters)), } } diff --git a/examples/digest-rs/ta/build.rs b/examples/digest-rs/ta/build.rs index be45a97..1337f93 100644 --- a/examples/digest-rs/ta/build.rs +++ b/examples/digest-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/digest-rs/ta/src/main.rs b/examples/digest-rs/ta/src/main.rs index abd9b56..a9fc2cf 100644 --- a/examples/digest-rs/ta/src/main.rs +++ b/examples/digest-rs/ta/src/main.rs @@ -66,15 +66,9 @@ fn destroy() { fn invoke_command(sess_ctx: &mut DigestOp, cmd_id: u32, params: &mut Parameters) -> Result<()> { trace_println!("[+] TA invoke command"); match Command::from(cmd_id) { - Command::Update => { - return update(sess_ctx, params); - } - Command::DoFinal => { - return do_final(sess_ctx, params); - } - _ => { - return Err(Error::new(ErrorKind::BadParameters)); - } + Command::Update => update(sess_ctx, params), + Command::DoFinal => do_final(sess_ctx, params), + _ => Err(Error::new(ErrorKind::BadParameters)), } } diff --git a/examples/error_handling-rs/ta/build.rs b/examples/error_handling-rs/ta/build.rs index be45a97..1337f93 100644 --- a/examples/error_handling-rs/ta/build.rs +++ b/examples/error_handling-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/error_handling-rs/ta/src/main.rs b/examples/error_handling-rs/ta/src/main.rs index ed32513..73763f6 100644 --- a/examples/error_handling-rs/ta/src/main.rs +++ b/examples/error_handling-rs/ta/src/main.rs @@ -31,13 +31,13 @@ use optee_utee::{Error, ErrorKind, Parameters, Result}; use proto::Command; pub struct SessionContext { - stuff_on_heap: Vec<u8>, + _stuff_on_heap: Vec<u8>, } impl Default for SessionContext { fn default() -> Self { Self { - stuff_on_heap: vec![1, 2, 3, 4], + _stuff_on_heap: vec![1, 2, 3, 4], } } } @@ -68,7 +68,7 @@ fn destroy() { fn invoke_command( _sess_ctx: &mut SessionContext, cmd_id: u32, - params: &mut Parameters, + _params: &mut Parameters, ) -> Result<()> { trace_println!("[+] TA invoke command"); match Command::from(cmd_id) { diff --git a/examples/hello_world-rs/ta/build.rs b/examples/hello_world-rs/ta/build.rs index a45e9b6..1337f93 100644 --- a/examples/hello_world-rs/ta/build.rs +++ b/examples/hello_world-rs/ta/build.rs @@ -15,11 +15,9 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::UUID)?; optee_utee_build::build(RustEdition::Before2024, config) - } diff --git a/examples/hotp-rs/ta/build.rs b/examples/hotp-rs/ta/build.rs index be45a97..1337f93 100644 --- a/examples/hotp-rs/ta/build.rs +++ b/examples/hotp-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/hotp-rs/ta/src/main.rs b/examples/hotp-rs/ta/src/main.rs index 397f7eb..9c2c0db 100644 --- a/examples/hotp-rs/ta/src/main.rs +++ b/examples/hotp-rs/ta/src/main.rs @@ -25,7 +25,7 @@ use optee_utee::{ ta_close_session, ta_create, ta_destroy, ta_invoke_command, ta_open_session, trace_println, }; use optee_utee::{AlgorithmId, Mac}; -use optee_utee::{AttributeId, AttributeMemref, GenericObject, TransientObject, TransientObjectType}; +use optee_utee::{AttributeId, AttributeMemref, TransientObject, TransientObjectType}; use optee_utee::{Error, ErrorKind, Parameters, Result}; use proto::Command; @@ -76,15 +76,9 @@ fn destroy() { fn invoke_command(sess_ctx: &mut HmacOtp, cmd_id: u32, params: &mut Parameters) -> Result<()> { trace_println!("[+] TA invoke command"); match Command::from(cmd_id) { - Command::RegisterSharedKey => { - return register_shared_key(sess_ctx, params); - } - Command::GetHOTP => { - return get_hotp(sess_ctx, params); - } - _ => { - return Err(Error::new(ErrorKind::BadParameters)); - } + Command::RegisterSharedKey => register_shared_key(sess_ctx, params), + Command::GetHOTP => get_hotp(sess_ctx, params), + _ => Err(Error::new(ErrorKind::BadParameters)), } } @@ -118,28 +112,22 @@ pub fn hmac_sha1(hotp: &mut HmacOtp, out: &mut [u8]) -> Result<usize> { return Err(Error::new(ErrorKind::BadParameters)); } - match Mac::allocate(AlgorithmId::HmacSha1, hotp.key_len * 8) { - Err(e) => return Err(e), - Ok(mac) => { - match TransientObject::allocate(TransientObjectType::HmacSha1, hotp.key_len * 8) { - Err(e) => return Err(e), - Ok(mut key_object) => { - //KEY size can be larger than hotp.key_len - let mut tmp_key = hotp.key.to_vec(); - tmp_key.truncate(hotp.key_len); - let attr = AttributeMemref::from_ref(AttributeId::SecretValue, &tmp_key); - key_object.populate(&[attr.into()])?; - mac.set_key(&key_object)?; - } - } - let iv = [0u8; 0]; - mac.init(&iv); - mac.update(&hotp.counter); - let message = [0u8; 0]; - let out_len = mac.compute_final(&message, out)?; - Ok(out_len) - } - } + let mac = Mac::allocate(AlgorithmId::HmacSha1, hotp.key_len * 8)?; + let mut key_object = + TransientObject::allocate(TransientObjectType::HmacSha1, hotp.key_len * 8)?; + //KEY size can be larger than hotp.key_len + let mut tmp_key = hotp.key.to_vec(); + tmp_key.truncate(hotp.key_len); + let attr = AttributeMemref::from_ref(AttributeId::SecretValue, &tmp_key); + key_object.populate(&[attr.into()])?; + mac.set_key(&key_object)?; + + let iv = [0u8; 0]; + mac.init(&iv); + mac.update(&hotp.counter); + let message = [0u8; 0]; + let out_len = mac.compute_final(&message, out)?; + Ok(out_len) } pub fn truncate(hmac_result: &mut [u8]) -> u32 { @@ -147,12 +135,12 @@ pub fn truncate(hmac_result: &mut [u8]) -> u32 { let offset: usize = (hmac_result[19] & 0xf) as usize; bin_code = ((hmac_result[offset] & 0x7f) as u32) << 24 - | ((hmac_result[offset + 1] & 0xff) as u32) << 16 - | ((hmac_result[offset + 2] & 0xff) as u32) << 8 - | ((hmac_result[offset + 3] & 0xff) as u32); + | (hmac_result[offset + 1] as u32) << 16 + | (hmac_result[offset + 2] as u32) << 8 + | (hmac_result[offset + 3] as u32); bin_code %= DBC2_MODULO; - return bin_code; + bin_code } include!(concat!(env!("OUT_DIR"), "/user_ta_header.rs")); diff --git a/examples/inter_ta-rs/ta/build.rs b/examples/inter_ta-rs/ta/build.rs index d492383..d861f0f 100644 --- a/examples/inter_ta-rs/ta/build.rs +++ b/examples/inter_ta-rs/ta/build.rs @@ -16,11 +16,10 @@ // under the License. use optee_utee_build::{Error, RustEdition, TaConfig}; -use proto; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::UUID)? - .ta_data_size(1 * 1024 * 1024) - .ta_stack_size(1 * 1024 * 1024); + .ta_data_size(1024 * 1024) + .ta_stack_size(1024 * 1024); optee_utee_build::build(RustEdition::Before2024, config) } diff --git a/examples/inter_ta-rs/ta/src/main.rs b/examples/inter_ta-rs/ta/src/main.rs index fe2f6d1..81bcd3a 100644 --- a/examples/inter_ta-rs/ta/src/main.rs +++ b/examples/inter_ta-rs/ta/src/main.rs @@ -143,9 +143,7 @@ fn invoke_command(cmd_id: u32, _params: &mut Parameters) -> Result<()> { trace_println!("[+] Test passed"); Ok(()) } - _ => { - return Err(Error::new(ErrorKind::NotSupported)); - } + _ => Err(Error::new(ErrorKind::NotSupported)), } } diff --git a/examples/message_passing_interface-rs/ta/Cargo.lock b/examples/message_passing_interface-rs/ta/Cargo.lock index b8bc8a9..9907218 100644 --- a/examples/message_passing_interface-rs/ta/Cargo.lock +++ b/examples/message_passing_interface-rs/ta/Cargo.lock @@ -106,7 +106,7 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "optee-utee" -version = "0.5.0" +version = "0.6.0" dependencies = [ "bitflags", "hex", @@ -119,7 +119,7 @@ dependencies = [ [[package]] name = "optee-utee-build" -version = "0.5.0" +version = "0.6.0" dependencies = [ "litemap", "prettyplease", @@ -132,7 +132,7 @@ dependencies = [ [[package]] name = "optee-utee-macros" -version = "0.5.0" +version = "0.6.0" dependencies = [ "litemap", "quote 0.6.13", @@ -142,7 +142,7 @@ dependencies = [ [[package]] name = "optee-utee-sys" -version = "0.5.0" +version = "0.6.0" dependencies = [ "libc", ] diff --git a/examples/message_passing_interface-rs/ta/build.rs b/examples/message_passing_interface-rs/ta/build.rs index 8f3b407..5b04a7e 100644 --- a/examples/message_passing_interface-rs/ta/build.rs +++ b/examples/message_passing_interface-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::UUID)? diff --git a/examples/message_passing_interface-rs/ta/src/main.rs b/examples/message_passing_interface-rs/ta/src/main.rs index d31db04..a611621 100644 --- a/examples/message_passing_interface-rs/ta/src/main.rs +++ b/examples/message_passing_interface-rs/ta/src/main.rs @@ -75,7 +75,7 @@ fn invoke_command(cmd_id: u32, params: &mut Parameters) -> Result<()> { let output = handle_invoke(Command::from(cmd_id), input).unwrap(); let output_vec = proto::serde_json::to_vec(&output).unwrap(); - p1.buffer().write(&output_vec).unwrap(); + p1.buffer().write_all(&output_vec).unwrap(); p2.set_a(output_vec.len() as u32); Ok(()) diff --git a/examples/mnist-rs/ta/inference/Makefile b/examples/mnist-rs/ta/inference/Makefile index 5b13bc6..6431168 100644 --- a/examples/mnist-rs/ta/inference/Makefile +++ b/examples/mnist-rs/ta/inference/Makefile @@ -23,17 +23,22 @@ CROSS_COMPILE ?= aarch64-linux-gnu- OBJCOPY := $(CROSS_COMPILE)objcopy # Configure the linker to use GCC, which works on both cross-compilation and ARM machines LINKER_CFG := target.$(TARGET).linker=\"$(CROSS_COMPILE)gcc\" -EXTRA_FLAGS = -Z build-std=core,alloc +# fix for the error: "unwinding panics are not supported without std" reported by clippy +RUSTFLAGS := -C panic=abort +EXTRA_FLAGS = -Z build-std=core,alloc -Z build-std-features=panic_immediate_abort TA_SIGN_KEY ?= $(TA_DEV_KIT_DIR)/keys/default_ta.pem SIGN := $(TA_DEV_KIT_DIR)/scripts/sign_encrypt.py OUT_DIR := $(CURDIR)/../target/$(TARGET)/release +all: clippy ta strip sign -all: ta strip sign +clippy: + @cargo fmt + @RUSTFLAGS="$(RUSTFLAGS)" cargo clippy --target $(TARGET) $(EXTRA_FLAGS) -- -D warnings -ta: - @cargo build --target $(TARGET) --release --config $(LINKER_CFG) $(EXTRA_FLAGS) +ta: clippy + @RUSTFLAGS="$(RUSTFLAGS)" cargo build --target $(TARGET) --release --config $(LINKER_CFG) $(EXTRA_FLAGS) strip: ta @$(OBJCOPY) --strip-unneeded $(OUT_DIR)/$(NAME) $(OUT_DIR)/stripped_$(NAME) diff --git a/examples/mnist-rs/ta/inference/build.rs b/examples/mnist-rs/ta/inference/build.rs index 314c05c..4b2e961 100644 --- a/examples/mnist-rs/ta/inference/build.rs +++ b/examples/mnist-rs/ta/inference/build.rs @@ -19,7 +19,7 @@ use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::train::UUID)? - .ta_data_size(1 * 1024 * 1024) - .ta_stack_size(1 * 1024 * 1024); + .ta_data_size(1024 * 1024) + .ta_stack_size(1024 * 1024); optee_utee_build::build(RustEdition::Before2024, config) } diff --git a/examples/mnist-rs/ta/train/Makefile b/examples/mnist-rs/ta/train/Makefile index 0e8c6ab..863d022 100644 --- a/examples/mnist-rs/ta/train/Makefile +++ b/examples/mnist-rs/ta/train/Makefile @@ -23,16 +23,22 @@ CROSS_COMPILE ?= aarch64-linux-gnu- OBJCOPY := $(CROSS_COMPILE)objcopy # Configure the linker to use GCC, which works on both cross-compilation and ARM machines LINKER_CFG := target.$(TARGET).linker=\"$(CROSS_COMPILE)gcc\" +# fix for the error: "unwinding panics are not supported without std" reported by clippy +RUSTFLAGS := -C panic=abort EXTRA_FLAGS = -Z build-std=core,alloc TA_SIGN_KEY ?= $(TA_DEV_KIT_DIR)/keys/default_ta.pem SIGN := $(TA_DEV_KIT_DIR)/scripts/sign_encrypt.py OUT_DIR := $(CURDIR)/../target/$(TARGET)/release -all: ta strip sign +all: clippy ta strip sign -ta: - @cargo build --target $(TARGET) --release --config $(LINKER_CFG) $(EXTRA_FLAGS) +clippy: + @cargo fmt + @RUSTFLAGS="$(RUSTFLAGS)" cargo clippy --target $(TARGET) $(EXTRA_FLAGS) -- -D warnings + +ta: clippy + @RUSTFLAGS="$(RUSTFLAGS)" cargo build --target $(TARGET) --release --config $(LINKER_CFG) $(EXTRA_FLAGS) strip: ta @$(OBJCOPY) --strip-unneeded $(OUT_DIR)/$(NAME) $(OUT_DIR)/stripped_$(NAME) diff --git a/examples/mnist-rs/ta/train/build.rs b/examples/mnist-rs/ta/train/build.rs index e60b54b..e88fdf6 100644 --- a/examples/mnist-rs/ta/train/build.rs +++ b/examples/mnist-rs/ta/train/build.rs @@ -20,6 +20,6 @@ use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::train::UUID)? .ta_data_size(5 * 1024 * 1024) - .ta_stack_size(1 * 1024 * 1024); + .ta_stack_size(1024 * 1024); optee_utee_build::build(RustEdition::Before2024, config) } diff --git a/examples/property-rs/ta/build.rs b/examples/property-rs/ta/build.rs index c6d585f..1337f93 100644 --- a/examples/property-rs/ta/build.rs +++ b/examples/property-rs/ta/build.rs @@ -16,7 +16,6 @@ // under the License. use optee_utee_build::{Error, RustEdition, TaConfig}; -use proto; fn main() -> Result<(), Error> { let config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/property-rs/ta/src/main.rs b/examples/property-rs/ta/src/main.rs index df9fc83..43d4a9c 100644 --- a/examples/property-rs/ta/src/main.rs +++ b/examples/property-rs/ta/src/main.rs @@ -105,9 +105,7 @@ fn invoke_command(cmd_id: u32, _params: &mut Parameters) -> Result<()> { trace_println!("[+] Test passed"); Ok(()) } - _ => { - return Err(Error::new(ErrorKind::NotSupported)); - } + _ => Err(Error::new(ErrorKind::NotSupported)), } } diff --git a/examples/random-rs/ta/build.rs b/examples/random-rs/ta/build.rs index 971f3d5..fa2cd0f 100644 --- a/examples/random-rs/ta/build.rs +++ b/examples/random-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let ta_config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/random-rs/ta/src/main.rs b/examples/random-rs/ta/src/main.rs index cffdb77..2b91a0b 100644 --- a/examples/random-rs/ta/src/main.rs +++ b/examples/random-rs/ta/src/main.rs @@ -21,11 +21,11 @@ extern crate alloc; use alloc::vec; +use optee_utee::Random; use optee_utee::{ ta_close_session, ta_create, ta_destroy, ta_invoke_command, ta_open_session, trace_println, }; use optee_utee::{Error, ErrorKind, Parameters, Result}; -use optee_utee::{Random}; use proto::Command; #[ta_create] @@ -51,8 +51,8 @@ fn destroy() { } pub fn random_number_generate(params: &mut Parameters) -> Result<()> { - let mut p = unsafe { params.0.as_memref().unwrap()}; - let mut buf = vec![0; p.buffer().len() as usize]; + let mut p = unsafe { params.0.as_memref().unwrap() }; + let mut buf = vec![0; p.buffer().len()]; buf.copy_from_slice(p.buffer()); Random::generate(buf.as_mut() as _); @@ -65,12 +65,8 @@ pub fn random_number_generate(params: &mut Parameters) -> Result<()> { fn invoke_command(cmd_id: u32, params: &mut Parameters) -> Result<()> { trace_println!("[+] TA invoke command"); match Command::from(cmd_id) { - Command::RandomGenerator => { - return random_number_generate(params); - } - _ => { - return Err(Error::new(ErrorKind::BadParameters)); - } + Command::RandomGenerator => random_number_generate(params), + _ => Err(Error::new(ErrorKind::BadParameters)), } } diff --git a/examples/secure_db_abstraction-rs/ta/Cargo.lock b/examples/secure_db_abstraction-rs/ta/Cargo.lock index 781806d..fa38b0e 100644 --- a/examples/secure_db_abstraction-rs/ta/Cargo.lock +++ b/examples/secure_db_abstraction-rs/ta/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "anyhow" version = "1.0.95" @@ -23,6 +29,30 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12" +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", + "serde", +] + [[package]] name = "heck" version = "0.5.0" @@ -75,7 +105,7 @@ dependencies = [ [[package]] name = "optee-utee" -version = "0.5.0" +version = "0.6.0" dependencies = [ "bitflags", "hex", @@ -88,7 +118,7 @@ dependencies = [ [[package]] name = "optee-utee-build" -version = "0.5.0" +version = "0.6.0" dependencies = [ "litemap", "prettyplease", @@ -101,7 +131,7 @@ dependencies = [ [[package]] name = "optee-utee-macros" -version = "0.5.0" +version = "0.6.0" dependencies = [ "litemap", "quote 0.6.13", @@ -111,7 +141,7 @@ dependencies = [ [[package]] name = "optee-utee-sys" -version = "0.5.0" +version = "0.6.0" dependencies = [ "libc", ] @@ -181,6 +211,7 @@ version = "0.1.0" dependencies = [ "anyhow", "bincode", + "hashbrown", "optee-utee", "optee-utee-sys", "serde", diff --git a/examples/secure_db_abstraction-rs/ta/build.rs b/examples/secure_db_abstraction-rs/ta/build.rs index 34ae5fa..fa2cd0f 100644 --- a/examples/secure_db_abstraction-rs/ta/build.rs +++ b/examples/secure_db_abstraction-rs/ta/build.rs @@ -16,7 +16,6 @@ // under the License. use optee_utee_build::{Error, RustEdition, TaConfig}; -use proto; fn main() -> Result<(), Error> { let ta_config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/secure_db_abstraction-rs/ta/src/main.rs b/examples/secure_db_abstraction-rs/ta/src/main.rs index 8d620f5..1563329 100644 --- a/examples/secure_db_abstraction-rs/ta/src/main.rs +++ b/examples/secure_db_abstraction-rs/ta/src/main.rs @@ -64,9 +64,7 @@ fn invoke_command(cmd_id: u32, _params: &mut Parameters) -> Result<()> { Err(Error::new(ErrorKind::Generic)) } }, - _ => { - return Err(Error::new(ErrorKind::NotSupported)); - } + _ => Err(Error::new(ErrorKind::NotSupported)), } } diff --git a/examples/secure_storage-rs/ta/build.rs b/examples/secure_storage-rs/ta/build.rs index 971f3d5..fa2cd0f 100644 --- a/examples/secure_storage-rs/ta/build.rs +++ b/examples/secure_storage-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let ta_config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/secure_storage-rs/ta/src/main.rs b/examples/secure_storage-rs/ta/src/main.rs index aca4a16..23c6ea1 100644 --- a/examples/secure_storage-rs/ta/src/main.rs +++ b/examples/secure_storage-rs/ta/src/main.rs @@ -54,39 +54,29 @@ fn destroy() { fn invoke_command(cmd_id: u32, params: &mut Parameters) -> Result<()> { trace_println!("[+] TA invoke command"); match Command::from(cmd_id) { - Command::Write => { - return create_raw_object(params); - } - Command::Read => { - return read_raw_object(params); - } - Command::Delete => { - return delete_object(params); - } - _ => { - return Err(Error::new(ErrorKind::NotSupported)); - } + Command::Write => create_raw_object(params), + Command::Read => read_raw_object(params), + Command::Delete => delete_object(params), + _ => Err(Error::new(ErrorKind::NotSupported)), } } pub fn delete_object(params: &mut Parameters) -> Result<()> { let mut p0 = unsafe { params.0.as_memref().unwrap() }; - let mut obj_id = vec![0; p0.buffer().len() as usize]; + let mut obj_id = vec![0; p0.buffer().len()]; obj_id.copy_from_slice(p0.buffer()); match PersistentObject::open( ObjectStorageConstants::Private, - &mut obj_id, + &obj_id, DataFlag::ACCESS_READ | DataFlag::ACCESS_WRITE_META, ) { - Err(e) => { - return Err(e); - } + Err(e) => Err(e), Ok(object) => { object.close_and_delete()?; - return Ok(()); + Ok(()) } } } @@ -95,9 +85,9 @@ pub fn create_raw_object(params: &mut Parameters) -> Result<()> { let mut p0 = unsafe { params.0.as_memref().unwrap() }; let mut p1 = unsafe { params.1.as_memref().unwrap() }; - let mut obj_id = vec![0; p0.buffer().len() as usize]; + let mut obj_id = vec![0; p0.buffer().len()]; obj_id.copy_from_slice(p0.buffer()); - let mut data_buffer = vec![0; p1.buffer().len() as usize]; + let mut data_buffer = vec![0; p1.buffer().len()]; data_buffer.copy_from_slice(p1.buffer()); let obj_data_flag = DataFlag::ACCESS_READ @@ -105,26 +95,22 @@ pub fn create_raw_object(params: &mut Parameters) -> Result<()> { | DataFlag::ACCESS_WRITE_META | DataFlag::OVERWRITE; - let mut init_data: [u8; 0] = [0; 0]; + let init_data: [u8; 0] = [0; 0]; match PersistentObject::create( ObjectStorageConstants::Private, - &mut obj_id, + &obj_id, obj_data_flag, None, - &mut init_data, + &init_data, ) { - Err(e) => { - return Err(e); - } + Err(e) => Err(e), Ok(mut object) => match object.write(&data_buffer) { - Ok(()) => { - return Ok(()); - } + Ok(()) => Ok(()), Err(e_write) => { object.close_and_delete()?; - return Err(e_write); + Err(e_write) } }, } @@ -133,18 +119,18 @@ pub fn create_raw_object(params: &mut Parameters) -> Result<()> { pub fn read_raw_object(params: &mut Parameters) -> Result<()> { let mut p0 = unsafe { params.0.as_memref().unwrap() }; let mut p1 = unsafe { params.1.as_memref().unwrap() }; - let mut obj_id = vec![0; p0.buffer().len() as usize]; + let mut obj_id = vec![0; p0.buffer().len()]; obj_id.copy_from_slice(p0.buffer()); - let mut data_buffer = vec![0;p1.buffer().len() as usize]; + let mut data_buffer = vec![0; p1.buffer().len()]; data_buffer.copy_from_slice(p1.buffer()); match PersistentObject::open( ObjectStorageConstants::Private, - &mut obj_id, + &obj_id, DataFlag::ACCESS_READ | DataFlag::SHARE_READ, ) { - Err(e) => return Err(e), + Err(e) => Err(e), Ok(object) => { let obj_info = object.info()?; diff --git a/examples/serde-rs/proto/Cargo.toml b/examples/serde-rs/proto/Cargo.toml index 91066a3..0b10d00 100644 --- a/examples/serde-rs/proto/Cargo.toml +++ b/examples/serde-rs/proto/Cargo.toml @@ -26,3 +26,4 @@ edition = "2018" [dependencies] num_enum = { version = "0.7.3", default-features = false } +serde = { version = "1.0", features = ["derive"] } diff --git a/examples/serde-rs/proto/src/lib.rs b/examples/serde-rs/proto/src/lib.rs index 97fe9f5..e28d457 100644 --- a/examples/serde-rs/proto/src/lib.rs +++ b/examples/serde-rs/proto/src/lib.rs @@ -16,6 +16,13 @@ // under the License. use num_enum::{FromPrimitive, IntoPrimitive}; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Debug)] +pub struct Point { + pub x: i32, + pub y: i32, +} #[derive(FromPrimitive, IntoPrimitive)] #[repr(u32)] diff --git a/examples/serde-rs/ta/Cargo.lock b/examples/serde-rs/ta/Cargo.lock index c3527c4..7982de8 100644 --- a/examples/serde-rs/ta/Cargo.lock +++ b/examples/serde-rs/ta/Cargo.lock @@ -106,7 +106,7 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "optee-utee" -version = "0.5.0" +version = "0.6.0" dependencies = [ "bitflags", "hex", @@ -119,7 +119,7 @@ dependencies = [ [[package]] name = "optee-utee-build" -version = "0.5.0" +version = "0.6.0" dependencies = [ "litemap", "prettyplease", @@ -132,7 +132,7 @@ dependencies = [ [[package]] name = "optee-utee-macros" -version = "0.5.0" +version = "0.6.0" dependencies = [ "litemap", "quote 0.6.13", @@ -142,7 +142,7 @@ dependencies = [ [[package]] name = "optee-utee-sys" -version = "0.5.0" +version = "0.6.0" dependencies = [ "libc", ] @@ -180,6 +180,7 @@ name = "proto" version = "0.4.0" dependencies = [ "num_enum", + "serde", ] [[package]] diff --git a/examples/serde-rs/ta/build.rs b/examples/serde-rs/ta/build.rs index cab18cc..2f0a20f 100644 --- a/examples/serde-rs/ta/build.rs +++ b/examples/serde-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let ta_config = TaConfig::new_default_with_cargo_env(proto::UUID)? diff --git a/examples/serde-rs/ta/src/main.rs b/examples/serde-rs/ta/src/main.rs index 9a796d8..c93786e 100644 --- a/examples/serde-rs/ta/src/main.rs +++ b/examples/serde-rs/ta/src/main.rs @@ -21,8 +21,7 @@ use optee_utee::{ ta_close_session, ta_create, ta_destroy, ta_invoke_command, ta_open_session, trace_println, }; use optee_utee::{Error, ErrorKind, Parameters, Result}; -use proto::Command; -use serde::{Deserialize, Serialize}; +use proto::{Command, Point}; use std::io::Write; #[ta_create] @@ -47,12 +46,6 @@ fn destroy() { trace_println!("[+] TA destroy"); } -#[derive(Serialize, Deserialize, Debug)] -struct Point { - x: i32, - y: i32, -} - #[ta_invoke_command] fn invoke_command(cmd_id: u32, params: &mut Parameters) -> Result<()> { trace_println!("[+] TA invoke command"); diff --git a/examples/signature_verification-rs/ta/build.rs b/examples/signature_verification-rs/ta/build.rs index 971f3d5..fa2cd0f 100644 --- a/examples/signature_verification-rs/ta/build.rs +++ b/examples/signature_verification-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let ta_config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/signature_verification-rs/ta/src/main.rs b/examples/signature_verification-rs/ta/src/main.rs index 0f89766..158942d 100644 --- a/examples/signature_verification-rs/ta/src/main.rs +++ b/examples/signature_verification-rs/ta/src/main.rs @@ -24,7 +24,7 @@ use alloc::vec; use optee_utee::{ ta_close_session, ta_create, ta_destroy, ta_invoke_command, ta_open_session, trace_println, }; -use optee_utee::{AlgorithmId, AttributeId, AttributeMemref, Digest, Asymmetric, OperationMode}; +use optee_utee::{AlgorithmId, Asymmetric, AttributeId, AttributeMemref, Digest, OperationMode}; use optee_utee::{Error, ErrorKind, Parameters, Result}; use optee_utee::{GenericObject, TransientObject, TransientObjectType}; use proto::Command; @@ -71,18 +71,26 @@ fn sign(params: &mut Parameters) -> Result<()> { let mut pub_key_size: usize = 0; trace_println!("[+] message: {:?}", &message); - let rsa_key = - TransientObject::allocate(TransientObjectType::RsaKeypair, 2048 as usize).unwrap(); + let rsa_key = TransientObject::allocate(TransientObjectType::RsaKeypair, 2048_usize).unwrap(); - rsa_key.generate_key(2048 as usize, &[])?; + rsa_key.generate_key(2048_usize, &[])?; - match rsa_key.ref_attribute(AttributeId::RsaModulus, &mut p1.buffer()) { - Ok(len) => Ok(pub_key_size += len), + match rsa_key.ref_attribute(AttributeId::RsaModulus, p1.buffer()) { + Ok(len) => { + pub_key_size += len; + Ok(()) + } Err(e) => Err(e), }?; - match rsa_key.ref_attribute(AttributeId::RsaPublicExponent, &mut p1.buffer()[pub_key_size..]) { - Ok(len) => Ok(pub_key_size += len), + match rsa_key.ref_attribute( + AttributeId::RsaPublicExponent, + &mut p1.buffer()[pub_key_size..], + ) { + Ok(len) => { + pub_key_size += len; + Ok(()) + } Err(e) => Err(e), }?; @@ -91,26 +99,30 @@ fn sign(params: &mut Parameters) -> Result<()> { let mut hash = [0u8; 32]; let dig = Digest::allocate(AlgorithmId::Sha256).unwrap(); - dig.do_final(&message, &mut hash)?; + dig.do_final(message, &mut hash)?; let key_info = rsa_key.info().unwrap(); - let mut signature = p2.buffer(); + let signature = p2.buffer(); - let rsa = Asymmetric::allocate(AlgorithmId::RsassaPkcs1V15Sha256, - OperationMode::Sign, - key_info.object_size()).unwrap(); + let rsa = Asymmetric::allocate( + AlgorithmId::RsassaPkcs1V15Sha256, + OperationMode::Sign, + key_info.object_size(), + ) + .unwrap(); rsa.set_key(&rsa_key)?; - match rsa.sign_digest(&[], &hash, &mut signature) { + match rsa.sign_digest(&[], &hash, signature) { Ok(len) => { trace_println!("[+] signature: {:?}", p2.buffer()); - return Ok(p2.set_updated_size(len as usize)); + p2.set_updated_size(len); + Ok(()) } Err(e) => { trace_println!("[+] error: {:?}", e); - return Err(Error::new(ErrorKind::SignatureInvalid)); + Err(Error::new(ErrorKind::SignatureInvalid)) } - }; + } } fn verify(params: &mut Parameters) -> Result<()> { @@ -132,7 +144,7 @@ fn verify(params: &mut Parameters) -> Result<()> { trace_println!("[+] signature: {:?}", &signature); let mut rsa_pub_key = - TransientObject::allocate(TransientObjectType::RsaPublicKey, 2048 as usize).unwrap(); + TransientObject::allocate(TransientObjectType::RsaPublicKey, 2048_usize).unwrap(); let mod_attr = AttributeMemref::from_ref(AttributeId::RsaModulus, &pub_key_mod); let exp_attr = AttributeMemref::from_ref(AttributeId::RsaPublicExponent, &pub_key_exp); @@ -142,37 +154,36 @@ fn verify(params: &mut Parameters) -> Result<()> { let mut hash = [0u8; 32]; let dig = Digest::allocate(AlgorithmId::Sha256).unwrap(); - dig.do_final(&message, &mut hash)?; + dig.do_final(message, &mut hash)?; let key_info = rsa_pub_key.info().unwrap(); - let rsa = Asymmetric::allocate(AlgorithmId::RsassaPkcs1V15Sha256, - OperationMode::Verify, - key_info.object_size()).unwrap(); + let rsa = Asymmetric::allocate( + AlgorithmId::RsassaPkcs1V15Sha256, + OperationMode::Verify, + key_info.object_size(), + ) + .unwrap(); rsa.set_key(&rsa_pub_key)?; - match rsa.verify_digest(&[], &hash, &signature) { + match rsa.verify_digest(&[], &hash, signature) { Ok(_) => { trace_println!("[+] verify ok"); - return Ok(()); + Ok(()) } Err(e) => { trace_println!("[+] error: {:?}", e); - return Err(Error::new(ErrorKind::SignatureInvalid)); + Err(Error::new(ErrorKind::SignatureInvalid)) } - }; + } } #[ta_invoke_command] fn invoke_command(cmd_id: u32, params: &mut Parameters) -> Result<()> { trace_println!("[+] TA invoke command"); match Command::from(cmd_id) { - Command::Sign => { - return sign(params); - } - Command::Verify => { - return verify(params); - } + Command::Sign => sign(params), + Command::Verify => verify(params), _ => Err(Error::new(ErrorKind::BadParameters)), } } diff --git a/examples/tcp_client-rs/ta/Cargo.toml b/examples/tcp_client-rs/ta/Cargo.toml index 86d40da..7cd2108 100644 --- a/examples/tcp_client-rs/ta/Cargo.toml +++ b/examples/tcp_client-rs/ta/Cargo.toml @@ -30,6 +30,9 @@ optee-utee-sys = { path = "../../../optee-utee/optee-utee-sys" } optee-utee = { path = "../../../optee-utee" } cfg_block = "0.2.0" +[features] +std = [] + [build-dependencies] proto = { path = "../proto" } optee-utee-build = { path = "../../../optee-utee-build" } diff --git a/examples/tcp_client-rs/ta/build.rs b/examples/tcp_client-rs/ta/build.rs index 3f1e2a7..c62d774 100644 --- a/examples/tcp_client-rs/ta/build.rs +++ b/examples/tcp_client-rs/ta/build.rs @@ -15,12 +15,11 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let ta_config = TaConfig::new_default_with_cargo_env(proto::UUID)? - .ta_data_size(1 * 1024 * 1024) + .ta_data_size(1024 * 1024) .ta_stack_size(2 * 1024 * 1024); optee_utee_build::build(RustEdition::Before2024, ta_config) } diff --git a/examples/tcp_client-rs/ta/src/main.rs b/examples/tcp_client-rs/ta/src/main.rs index ddd9293..8846422 100644 --- a/examples/tcp_client-rs/ta/src/main.rs +++ b/examples/tcp_client-rs/ta/src/main.rs @@ -15,13 +15,19 @@ // specific language governing permissions and limitations // under the License. -#![cfg_attr(not(target_os = "optee"), no_std)] +// Use feature flag to detect STD environment +// - Feature "std" means std is available +// - No feature means no-std environment +// Check `feature`, not `target_os`, to avoid: +// error: unexpected `cfg` value: `optee` reported by clippy +// This occurs because `optee` is not an upstream Rust target_os. +#![cfg_attr(not(feature = "std"), no_std)] #![no_main] cfg_block::cfg_block! { - // In Teaclave, if target_os = "optee", the codes is compiled with std. + // In Teaclave, if feature "std" is enabled, the codes is compiled with std. // Otherwise, no-std - if #[cfg(target_os = "optee")] { + if #[cfg(feature = "std")] { use std::io::{Read, Write}; } else { extern crate alloc; diff --git a/examples/time-rs/ta/build.rs b/examples/time-rs/ta/build.rs index 971f3d5..fa2cd0f 100644 --- a/examples/time-rs/ta/build.rs +++ b/examples/time-rs/ta/build.rs @@ -15,8 +15,7 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let ta_config = TaConfig::new_default_with_cargo_env(proto::UUID)?; diff --git a/examples/time-rs/ta/src/main.rs b/examples/time-rs/ta/src/main.rs index 8fa6db7..364a60d 100644 --- a/examples/time-rs/ta/src/main.rs +++ b/examples/time-rs/ta/src/main.rs @@ -67,11 +67,14 @@ fn time() -> Result<()> { Time::wait(1000)?; time.system_time(); trace_println!("[+] Get system time {}.", time); - time.seconds = time.seconds + 5; + time.seconds += 5; time.set_ta_time()?; let mut time2 = Time::new(); time2.ta_time()?; - trace_println!("[+] After set the TA time 5 seconds ahead of system time, new TA time {}.", time2); + trace_println!( + "[+] After set the TA time 5 seconds ahead of system time, new TA time {}.", + time2 + ); Ok(()) } diff --git a/examples/tls_client-rs/ta/Cargo.lock b/examples/tls_client-rs/ta/Cargo.lock index 2d46493..d91f1c9 100644 --- a/examples/tls_client-rs/ta/Cargo.lock +++ b/examples/tls_client-rs/ta/Cargo.lock @@ -522,7 +522,7 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "optee-utee" -version = "0.5.0" +version = "0.6.0" dependencies = [ "bitflags", "hex", @@ -535,7 +535,7 @@ dependencies = [ [[package]] name = "optee-utee-build" -version = "0.5.0" +version = "0.6.0" dependencies = [ "litemap", "prettyplease", @@ -548,7 +548,7 @@ dependencies = [ [[package]] name = "optee-utee-macros" -version = "0.5.0" +version = "0.6.0" dependencies = [ "litemap", "quote 0.6.13", @@ -558,7 +558,7 @@ dependencies = [ [[package]] name = "optee-utee-sys" -version = "0.5.0" +version = "0.6.0" dependencies = [ "libc", ] diff --git a/examples/tls_server-rs/ta/Cargo.lock b/examples/tls_server-rs/ta/Cargo.lock index 1ed811e..116c086 100644 --- a/examples/tls_server-rs/ta/Cargo.lock +++ b/examples/tls_server-rs/ta/Cargo.lock @@ -522,7 +522,7 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "optee-utee" -version = "0.5.0" +version = "0.6.0" dependencies = [ "bitflags", "hex", @@ -535,7 +535,7 @@ dependencies = [ [[package]] name = "optee-utee-build" -version = "0.5.0" +version = "0.6.0" dependencies = [ "litemap", "prettyplease", @@ -548,7 +548,7 @@ dependencies = [ [[package]] name = "optee-utee-macros" -version = "0.5.0" +version = "0.6.0" dependencies = [ "litemap", "quote 0.6.13", @@ -558,7 +558,7 @@ dependencies = [ [[package]] name = "optee-utee-sys" -version = "0.5.0" +version = "0.6.0" dependencies = [ "libc", ] diff --git a/examples/udp_socket-rs/ta/Cargo.toml b/examples/udp_socket-rs/ta/Cargo.toml index 86d40da..7cd2108 100644 --- a/examples/udp_socket-rs/ta/Cargo.toml +++ b/examples/udp_socket-rs/ta/Cargo.toml @@ -30,6 +30,9 @@ optee-utee-sys = { path = "../../../optee-utee/optee-utee-sys" } optee-utee = { path = "../../../optee-utee" } cfg_block = "0.2.0" +[features] +std = [] + [build-dependencies] proto = { path = "../proto" } optee-utee-build = { path = "../../../optee-utee-build" } diff --git a/examples/udp_socket-rs/ta/build.rs b/examples/udp_socket-rs/ta/build.rs index 3f1e2a7..c62d774 100644 --- a/examples/udp_socket-rs/ta/build.rs +++ b/examples/udp_socket-rs/ta/build.rs @@ -15,12 +15,11 @@ // specific language governing permissions and limitations // under the License. -use proto; -use optee_utee_build::{TaConfig, RustEdition, Error}; +use optee_utee_build::{Error, RustEdition, TaConfig}; fn main() -> Result<(), Error> { let ta_config = TaConfig::new_default_with_cargo_env(proto::UUID)? - .ta_data_size(1 * 1024 * 1024) + .ta_data_size(1024 * 1024) .ta_stack_size(2 * 1024 * 1024); optee_utee_build::build(RustEdition::Before2024, ta_config) } diff --git a/examples/udp_socket-rs/ta/src/main.rs b/examples/udp_socket-rs/ta/src/main.rs index c187797..2d8e43c 100644 --- a/examples/udp_socket-rs/ta/src/main.rs +++ b/examples/udp_socket-rs/ta/src/main.rs @@ -15,13 +15,19 @@ // specific language governing permissions and limitations // under the License. -#![cfg_attr(not(target_os = "optee"), no_std)] +// Use feature flag to detect STD environment +// - Feature "std" means std is available +// - No feature means no-std environment +// Check `feature`, not `target_os`, to avoid: +// error: unexpected `cfg` value: `optee` reported by clippy +// This occurs because `optee` is not an upstream Rust target_os. +#![cfg_attr(not(feature = "std"), no_std)] #![no_main] cfg_block::cfg_block! { - // In Teaclave, if target_os = "optee", the codes is compiled with std. + // In Teaclave, if feature "std" is enabled, the codes is compiled with std. // Otherwise, no-std - if #[cfg(target_os = "optee")] { + if #[cfg(feature = "std")] { use std::io::{Read, Write}; } else { extern crate alloc; diff --git a/optee-utee-build/src/code_generator.rs b/optee-utee-build/src/code_generator.rs index b3f311d..650d9ab 100644 --- a/optee-utee-build/src/code_generator.rs +++ b/optee-utee-build/src/code_generator.rs @@ -93,9 +93,12 @@ impl HeaderFileGenerator { #no_mangle_attribute pub static trace_ext_prefix: &[u8] = #trace_ext; + /// # Safety + /// This function is called by the OP-TEE framework to get the trace level. + /// It's safe to call as it only reads a static variable. #no_mangle_attribute pub unsafe extern "C" fn tahead_get_trace_level() -> c_int { - unsafe { return trace_level; } + unsafe { trace_level } } }) } @@ -342,7 +345,7 @@ mod tests { let uuid = "26509cec-4a2b-4935-87ab-762d89fbf0b0"; let conf = TaConfig::new_default(uuid, "0.1.0", "test_before_2024") .unwrap() - .ta_data_size(1 * 1024 * 1024); + .ta_data_size(1024 * 1024); let generator = HeaderFileGenerator::new(RustEdition::Before2024); let codes = generator.generate(&conf).unwrap(); let exp_result = include_str!("../test_files/test_edition_before_2024_result.rs"); diff --git a/optee-utee-build/test_files/test_edition_2024_result.rs b/optee-utee-build/test_files/test_edition_2024_result.rs index cea8231..5514d56 100644 --- a/optee-utee-build/test_files/test_edition_2024_result.rs +++ b/optee-utee-build/test_files/test_edition_2024_result.rs @@ -27,11 +27,12 @@ const TA_DESCRIPTION: &[u8] = b"test_edition_2024\0"; pub static mut trace_level: c_int = 4i32; #[unsafe(no_mangle)] pub static trace_ext_prefix: &[u8] = b"TA\0"; +/// # Safety +/// This function is called by the OP-TEE framework to get the trace level. +/// It's safe to call as it only reads a static variable. #[unsafe(no_mangle)] pub unsafe extern "C" fn tahead_get_trace_level() -> c_int { - unsafe { - return trace_level; - } + unsafe { trace_level } } static FLAG_BOOL: bool = (TA_FLAGS & optee_utee_sys::TA_FLAG_SINGLE_INSTANCE) != 0; static FLAG_MULTI: bool = (TA_FLAGS & optee_utee_sys::TA_FLAG_MULTI_SESSION) != 0; diff --git a/optee-utee-build/test_files/test_edition_before_2024_result.rs b/optee-utee-build/test_files/test_edition_before_2024_result.rs index d2a4d6e..358bea9 100644 --- a/optee-utee-build/test_files/test_edition_before_2024_result.rs +++ b/optee-utee-build/test_files/test_edition_before_2024_result.rs @@ -27,11 +27,12 @@ const TA_DESCRIPTION: &[u8] = b"test_before_2024\0"; pub static mut trace_level: c_int = 4i32; #[no_mangle] pub static trace_ext_prefix: &[u8] = b"TA\0"; +/// # Safety +/// This function is called by the OP-TEE framework to get the trace level. +/// It's safe to call as it only reads a static variable. #[no_mangle] pub unsafe extern "C" fn tahead_get_trace_level() -> c_int { - unsafe { - return trace_level; - } + unsafe { trace_level } } static FLAG_BOOL: bool = (TA_FLAGS & optee_utee_sys::TA_FLAG_SINGLE_INSTANCE) != 0; static FLAG_MULTI: bool = (TA_FLAGS & optee_utee_sys::TA_FLAG_MULTI_SESSION) != 0; diff --git a/optee-utee/macros/src/lib.rs b/optee-utee/macros/src/lib.rs index 67cd929..1ff9dee 100644 --- a/optee-utee/macros/src/lib.rs +++ b/optee-utee/macros/src/lib.rs @@ -194,8 +194,10 @@ pub fn ta_open_session(_args: TokenStream, input: TokenStream) -> TokenStream { }; quote!( + // To eliminate the clippy error: this public function might dereference a raw pointer but is not marked `unsafe` + // we just expand the unsafe block, but the session-related macros need refactoring in the future #[no_mangle] - pub extern "C" fn TA_OpenSessionEntryPoint( + pub unsafe extern "C" fn TA_OpenSessionEntryPoint( param_types: u32, params: &mut [optee_utee_sys::TEE_Param; 4], sess_ctx: *mut *mut c_void, @@ -205,7 +207,7 @@ pub fn ta_open_session(_args: TokenStream, input: TokenStream) -> TokenStream { match #ident(&mut parameters, &mut ctx) { Ok(_) => { - unsafe { *sess_ctx = Box::into_raw(Box::new(ctx)) as _; } + *sess_ctx = Box::into_raw(Box::new(ctx)) as _; optee_utee_sys::TEE_SUCCESS } Err(e) => e.raw_code() @@ -287,12 +289,14 @@ pub fn ta_close_session(_args: TokenStream, input: TokenStream) -> TokenStream { }; quote!( + // To eliminate the clippy error: this public function might dereference a raw pointer but is not marked `unsafe` + // we just expand the unsafe block, but the session-related macros need refactoring in the future #[no_mangle] - pub extern "C" fn TA_CloseSessionEntryPoint(sess_ctx: *mut c_void) { + pub unsafe extern "C" fn TA_CloseSessionEntryPoint(sess_ctx: *mut c_void) { if sess_ctx.is_null() { panic!("sess_ctx is null"); } - let mut b = unsafe {Box::from_raw(sess_ctx as *mut #t)}; + let mut b = Box::from_raw(sess_ctx as *mut #t); #ident(&mut b); drop(b); } @@ -379,8 +383,10 @@ pub fn ta_invoke_command(_args: TokenStream, input: TokenStream) -> TokenStream }; quote!( + // To eliminate the clippy error: this public function might dereference a raw pointer but is not marked `unsafe` + // we just expand the unsafe block, but the session-related macros need refactoring in the future #[no_mangle] - pub extern "C" fn TA_InvokeCommandEntryPoint( + pub unsafe extern "C" fn TA_InvokeCommandEntryPoint( sess_ctx: *mut c_void, cmd_id: u32, param_types: u32, @@ -390,7 +396,7 @@ pub fn ta_invoke_command(_args: TokenStream, input: TokenStream) -> TokenStream return optee_utee_sys::TEE_ERROR_SECURITY; } let mut parameters = Parameters::from_raw(params, param_types); - let mut b = unsafe {Box::from_raw(sess_ctx as *mut #t)}; + let mut b = Box::from_raw(sess_ctx as *mut #t); match #ident(&mut b, cmd_id, &mut parameters) { Ok(_) => { core::mem::forget(b); diff --git a/projects/web3/eth_wallet/ta/Cargo.lock b/projects/web3/eth_wallet/ta/Cargo.lock index f72ce00..4be7341 100644 --- a/projects/web3/eth_wallet/ta/Cargo.lock +++ b/projects/web3/eth_wallet/ta/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "anyhow" version = "1.0.95" @@ -219,6 +225,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + [[package]] name = "ethereum-tx-sign" version = "6.1.3" @@ -245,6 +257,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "generic-array" version = "0.14.7" @@ -266,6 +284,18 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", + "serde", +] + [[package]] name = "heck" version = "0.5.0" @@ -570,6 +600,7 @@ version = "0.1.0" dependencies = [ "anyhow", "bincode", + "hashbrown", "optee-utee", "optee-utee-sys", "serde", diff --git a/projects/web3/eth_wallet/ta/Makefile b/projects/web3/eth_wallet/ta/Makefile index 8f28809..453b583 100644 --- a/projects/web3/eth_wallet/ta/Makefile +++ b/projects/web3/eth_wallet/ta/Makefile @@ -29,9 +29,13 @@ TA_SIGN_KEY ?= $(TA_DEV_KIT_DIR)/keys/default_ta.pem SIGN := $(TA_DEV_KIT_DIR)/scripts/sign_encrypt.py OUT_DIR := $(CURDIR)/target/$(TARGET_TA)/release -all: ta strip sign +all: clippy ta strip sign -ta: +clippy: + @cargo fmt + @xargo clippy --target $(TARGET) -- -D warnings + +ta: clippy @xargo build --target $(TARGET) --release --config $(LINKER_CFG) strip: ta diff --git a/projects/web3/eth_wallet/ta/build.rs b/projects/web3/eth_wallet/ta/build.rs index 7a32a4a..a00dcdc 100644 --- a/projects/web3/eth_wallet/ta/build.rs +++ b/projects/web3/eth_wallet/ta/build.rs @@ -16,7 +16,6 @@ // under the License. use optee_utee_build::{Error, RustEdition, TaConfig}; -use proto; fn main() -> Result<(), Error> { let ta_config = TaConfig::new_default_with_cargo_env(proto::UUID)? diff --git a/projects/web3/eth_wallet/ta/src/wallet.rs b/projects/web3/eth_wallet/ta/src/wallet.rs index 895a5a9..a10d998 100644 --- a/projects/web3/eth_wallet/ta/src/wallet.rs +++ b/projects/web3/eth_wallet/ta/src/wallet.rs @@ -55,14 +55,11 @@ impl Wallet { ) .into_uuid(); - Ok(Self { - id: uuid, - entropy: entropy, - }) + Ok(Self { id: uuid, entropy }) } pub fn get_id(&self) -> Uuid { - self.id.clone() + self.id } pub fn get_mnemonic(&self) -> Result<String> { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
