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]

Reply via email to