You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@teaclave.apache.org by yu...@apache.org on 2023/03/15 06:55:02 UTC

[incubator-teaclave-trustzone-sdk] branch master updated: Update to GP 1.3.1 (#105)

This is an automated email from the ASF dual-hosted git repository.

yuanz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-teaclave-trustzone-sdk.git


The following commit(s) were added to refs/heads/master by this push:
     new 4031e72  Update to GP 1.3.1 (#105)
4031e72 is described below

commit 4031e7282a8f398f54faa19acb2b84fab05de877
Author: Yuan Zhuang <de...@foxmail.com>
AuthorDate: Wed Mar 15 14:54:53 2023 +0800

    Update to GP 1.3.1 (#105)
    
    * Update interfaces for GP 1.3.1
    * Temporarily disable our CI until the OP-TEE 3.21.0 is released
    * Fix supp_plugin panic
---
 .github/workflows/ci.yml                           |  58 ++++-----
 examples/serde-rs/ta/src/main.rs                   |   2 +-
 examples/supp_plugin-rs/ta/src/main.rs             |   3 +-
 optee-utee/optee-utee-sys/src/tee_api.rs           | 145 ++++++++++++---------
 optee-utee/optee-utee-sys/src/tee_api_defines.rs   |  29 ++++-
 optee-utee/optee-utee-sys/src/tee_api_types.rs     |   9 +-
 .../src/tee_internal_api_extensions.rs             |   4 +-
 optee-utee/src/arithmetical.rs                     |  26 ++--
 optee-utee/src/crypto_op.rs                        |  86 ++++++------
 optee-utee/src/extension.rs                        |  12 +-
 optee-utee/src/object.rs                           |  30 ++---
 optee-utee/src/parameter.rs                        |   2 +-
 12 files changed, 224 insertions(+), 182 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ab60caa..20191fc 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -22,34 +22,34 @@ defaults:
     shell: bash
 
 jobs:
-  build-and-run-examples:
-    runs-on: ubuntu-20.04
-    container: teaclave/teaclave-trustzone-sdk-build:0.3.0
-    steps:
-      - name: Checkout repository
-        uses: actions/checkout@v2
-        with:
-          submodules: recursive
-      - name: Setting up $HOME
-        run: |
-          cp /root/.bashrc $HOME/.bashrc &&
-          ln -sf /root/.rustup ~/.rustup &&
-          ln -sf /root/.cargo ~/.cargo
-      - name: Building
-        run: |
-          apt update && apt install libslirp-dev -y
-          export CARGO_NET_GIT_FETCH_WITH_CLI=true &&
-          ./setup.sh &&
-          source environment &&
-          make optee &&
-          . ~/.cargo/env &&
-          rustup component add rust-src &&
-          rustup target install aarch64-unknown-linux-gnu arm-unknown-linux-gnueabihf &&
-          rustup default nightly-2021-09-20 &&
-          make examples
-      - name: Run tests and examples
-        run: |
-          cd ci && ./ci.sh
+#  build-and-run-examples:
+#    runs-on: ubuntu-20.04
+#    container: teaclave/teaclave-trustzone-sdk-build:0.3.0
+#    steps:
+#      - name: Checkout repository
+#        uses: actions/checkout@v2
+#        with:
+#          submodules: recursive
+#      - name: Setting up $HOME
+#        run: |
+#          cp /root/.bashrc $HOME/.bashrc &&
+#          ln -sf /root/.rustup ~/.rustup &&
+#          ln -sf /root/.cargo ~/.cargo
+#      - name: Building
+#        run: |
+#          apt update && apt install libslirp-dev -y
+#          export CARGO_NET_GIT_FETCH_WITH_CLI=true &&
+#          ./setup.sh &&
+#          source environment &&
+#          make optee &&
+#          . ~/.cargo/env &&
+#          rustup component add rust-src &&
+#          rustup target install aarch64-unknown-linux-gnu arm-unknown-linux-gnueabihf &&
+#          rustup default nightly-2021-09-20 &&
+#          make examples
+#      - name: Run tests and examples
+#        run: |
+#          cd ci && ./ci.sh
   build-utee-teec:
     runs-on: ubuntu-20.04
     container: teaclave/teaclave-trustzone-sdk-build:0.3.0
@@ -90,7 +90,7 @@ jobs:
           curl https://storage.googleapis.com/git-repo-downloads/repo-1 > ~/bin/repo && chmod a+x ~/bin/repo
           export PATH=~/bin:$PATH
           mkdir -p ~/optee-qemuv8 && cd ~/optee-qemuv8 &&
-          repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml -b 3.20.0 &&
+          repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml &&
           repo sync -j4 --no-clone-bundle
       - name: Build images and run tests
         run: |
diff --git a/examples/serde-rs/ta/src/main.rs b/examples/serde-rs/ta/src/main.rs
index dc9b8ac..e025e84 100644
--- a/examples/serde-rs/ta/src/main.rs
+++ b/examples/serde-rs/ta/src/main.rs
@@ -67,7 +67,7 @@ fn invoke_command(cmd_id: u32, params: &mut Parameters) -> Result<()> {
             let len = buffer.write(serialized.as_bytes()).unwrap();
 
             // update size of output buffer
-            unsafe { (*p.raw()).size = len as u32 };
+            unsafe { (*p.raw()).size = len};
 
             // Prints serialized = {"x":1,"y":2}
             trace_println!("serialized = {}", serialized);
diff --git a/examples/supp_plugin-rs/ta/src/main.rs b/examples/supp_plugin-rs/ta/src/main.rs
index 72363bd..2bd3775 100644
--- a/examples/supp_plugin-rs/ta/src/main.rs
+++ b/examples/supp_plugin-rs/ta/src/main.rs
@@ -50,6 +50,7 @@ fn destroy() {
 fn invoke_command(cmd_id: u32, params: &mut Parameters) -> Result<()> {
     trace_println!("[+] TA invoke command");
     let mut p0 = unsafe { params.0.as_memref().unwrap() };
+    let mut inbuf = p0.buffer().to_vec();
     trace_println!("[+] TA received value {:?} then send to plugin", p0.buffer());
     let uuid = Uuid::parse_str(PLUGIN_UUID).unwrap();
 
@@ -59,7 +60,7 @@ fn invoke_command(cmd_id: u32, params: &mut Parameters) -> Result<()> {
             let outbuf = plugin.invoke(
                 PluginCommand::Print as u32, 
                 PLUGIN_SUBCMD_NULL, 
-                p0.buffer()
+                &inbuf
             ).unwrap();
 
             trace_println!("[+] TA received out value {:?} outlen {:?}", outbuf, outbuf.len());
diff --git a/optee-utee/optee-utee-sys/src/tee_api.rs b/optee-utee/optee-utee-sys/src/tee_api.rs
index 4b08471..2ef3e34 100644
--- a/optee-utee/optee-utee-sys/src/tee_api.rs
+++ b/optee-utee/optee-utee-sys/src/tee_api.rs
@@ -25,7 +25,7 @@ extern "C" {
         propsetOrEnumerator: TEE_PropSetHandle,
         name: *const c_char,
         valueBuffer: *mut c_char,
-        valueBufferLen: *mut u32,
+        valueBufferLen: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_GetPropertyAsBool(
         propsetOrEnumerator: TEE_PropSetHandle,
@@ -37,11 +37,16 @@ extern "C" {
         name: *const c_char,
         value: *mut u32,
     ) -> TEE_Result;
+    pub fn TEE_GetPropertyAsU64(
+        propsetOrEnumerator: TEE_PropSetHandle,
+        name: *const c_char,
+        value: *mut u64,
+    ) -> TEE_Result;
     pub fn TEE_GetPropertyAsBinaryBlock(
         propsetOrEnumerator: TEE_PropSetHandle,
         name: *const c_char,
         valueBuffer: *mut c_void,
-        valueBufferLen: *mut u32,
+        valueBufferLen: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_GetPropertyAsUUID(
         propsetOrEnumerator: TEE_PropSetHandle,
@@ -60,7 +65,7 @@ extern "C" {
     pub fn TEE_GetPropertyName(
         enumerator: TEE_PropSetHandle,
         nameBuffer: *mut c_void,
-        nameBufferLen: *mut u32,
+        nameBufferLen: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_GetNextProperty(enumerator: TEE_PropSetHandle) -> TEE_Result;
 
@@ -99,20 +104,20 @@ extern "C" {
     pub fn TEE_CheckMemoryAccessRights(
         accessFlags: u32,
         buffer: *mut c_void,
-        size: u32,
+        size: usize,
     ) -> TEE_Result;
     pub fn TEE_SetInstanceData(instanceData: *const c_void);
     pub fn TEE_GetInstanceData() -> *const c_void;
-    pub fn TEE_Malloc(size: u32, hint: u32) -> *mut c_void;
-    pub fn TEE_Realloc(buffer: *mut c_void, newSize: u32) -> *mut c_void;
+    pub fn TEE_Malloc(size: usize, hint: u32) -> *mut c_void;
+    pub fn TEE_Realloc(buffer: *mut c_void, newSize: usize) -> *mut c_void;
     pub fn TEE_Free(buffer: *mut c_void);
-    pub fn TEE_MemMove(dest: *mut c_void, src: *const c_void, size: u32) -> *mut c_void;
+    pub fn TEE_MemMove(dest: *mut c_void, src: *const c_void, size: usize) -> *mut c_void;
     pub fn TEE_MemCompare(
         buffer1: *const c_void,
         buffer2: *const c_void,
-        size: u32,
+        size: usize,
     ) -> i32;
-    pub fn TEE_MemFill(buff: *mut c_void, x: u32, size: u32) -> *mut c_void;
+    pub fn TEE_MemFill(buff: *mut c_void, x: u32, size: usize) -> *mut c_void;
 
     // Data and Key Storage API  - Generic Object Functions
 
@@ -127,7 +132,7 @@ extern "C" {
         object: TEE_ObjectHandle,
         attributeID: u32,
         buffer: *mut c_void,
-        size: *mut u32,
+        size: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_GetObjectValueAttribute(
         object: TEE_ObjectHandle,
@@ -141,7 +146,7 @@ extern "C" {
 
     pub fn TEE_AllocateTransientObject(
         objectType: TEE_ObjectType,
-        maxKeySize: u32,
+        maxObjectSize: u32,
         object: *mut TEE_ObjectHandle,
     ) -> TEE_Result;
     pub fn TEE_FreeTransientObject(object: TEE_ObjectHandle) -> c_void;
@@ -155,7 +160,7 @@ extern "C" {
         attr: *mut TEE_Attribute,
         attributeID: u32,
         buffer: *const c_void,
-        length: u32,
+        length: usize,
     ) -> c_void;
     pub fn TEE_InitValueAttribute(
         attr: *mut TEE_Attribute,
@@ -183,18 +188,18 @@ extern "C" {
     pub fn TEE_OpenPersistentObject(
         storageID: u32,
         objectID: *const c_void,
-        objectIDLen: u32,
+        objectIDLen: usize,
         flags: u32,
         object: *mut TEE_ObjectHandle,
     ) -> TEE_Result;
     pub fn TEE_CreatePersistentObject(
         storageID: u32,
         objectID: *const c_void,
-        objectIDLen: u32,
+        objectIDLen: usize,
         flags: u32,
         attributes: TEE_ObjectHandle,
         initialData: *const c_void,
-        initialDataLen: u32,
+        initialDataLen: usize,
         object: *mut TEE_ObjectHandle,
     ) -> TEE_Result;
     pub fn TEE_CloseAndDeletePersistentObject(object: TEE_ObjectHandle);
@@ -202,7 +207,7 @@ extern "C" {
     pub fn TEE_RenamePersistentObject(
         object: TEE_ObjectHandle,
         newObjectID: *const c_void,
-        newObjectIDLen: u32,
+        newObjectIDLen: usize,
     ) -> TEE_Result;
     pub fn TEE_AllocatePersistentObjectEnumerator(
         objectEnumerator: *mut TEE_ObjectEnumHandle,
@@ -217,7 +222,7 @@ extern "C" {
         objectEnumerator: TEE_ObjectEnumHandle,
         objectInfo: *mut TEE_ObjectInfo,
         objectID: *mut c_void,
-        objectIDLen: *mut u32,
+        objectIDLen: *mut usize,
     ) -> TEE_Result;
 
     // Data and Key Storage API  - Data Stream Access Functions
@@ -225,18 +230,18 @@ extern "C" {
     pub fn TEE_ReadObjectData(
         object: TEE_ObjectHandle,
         buffer: *mut c_void,
-        fsize: u32,
-        count: *mut u32,
+        size: usize,
+        count: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_WriteObjectData(
         object: TEE_ObjectHandle,
         buffer: *const c_void,
-        fsize: u32,
+        size: usize,
     ) -> TEE_Result;
-    pub fn TEE_TruncateObjectData(object: TEE_ObjectHandle, size: u32) -> TEE_Result;
+    pub fn TEE_TruncateObjectData(object: TEE_ObjectHandle, size: usize) -> TEE_Result;
     pub fn TEE_SeekObjectData(
         object: TEE_ObjectHandle,
-        offset: i32,
+        offset: i32, //intmax_t
         whence: TEE_Whence,
     ) -> TEE_Result;
 
@@ -256,7 +261,7 @@ extern "C" {
     pub fn TEE_GetOperationInfoMultiple(
         operation: TEE_OperationHandle,
         operationInfoMultiple: *mut TEE_OperationInfoMultiple,
-        operationSize: *mut u32,
+        operationSize: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_ResetOperation(operation: TEE_OperationHandle) -> c_void;
     pub fn TEE_SetOperationKey(operation: TEE_OperationHandle, key: TEE_ObjectHandle)
@@ -280,14 +285,14 @@ extern "C" {
     pub fn TEE_DigestUpdate(
         operation: TEE_OperationHandle,
         chunk: *const c_void,
-        chunkSize: u32,
+        chunkSize: usize,
     ) -> c_void;
     pub fn TEE_DigestDoFinal(
         operation: TEE_OperationHandle,
         chunk: *const c_void,
-        chunkLen: u32,
+        chunkLen: usize,
         hash: *mut c_void,
-        hashLen: *mut u32,
+        hashLen: *mut usize,
     ) -> TEE_Result;
 
     // Cryptographic Operations API - Symmetric Cipher Functions
@@ -295,21 +300,21 @@ extern "C" {
     pub fn TEE_CipherInit(
         operation: TEE_OperationHandle,
         IV: *const c_void,
-        IVLen: u32,
+        IVLen: usize,
     ) -> c_void;
     pub fn TEE_CipherUpdate(
         operation: TEE_OperationHandle,
         srcData: *const c_void,
-        srcLen: u32,
+        srcLen: usize,
         destData: *mut c_void,
-        destLen: *mut u32,
+        destLen: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_CipherDoFinal(
         operation: TEE_OperationHandle,
         srcData: *const c_void,
-        srcLen: u32,
+        srcLen: usize,
         destData: *mut c_void,
-        destLen: *mut u32,
+        destLen: *mut usize,
     ) -> TEE_Result;
 
     // Cryptographic Operations API - MAC Functions
@@ -317,26 +322,26 @@ extern "C" {
     pub fn TEE_MACInit(
         operation: TEE_OperationHandle,
         IV: *const c_void,
-        IVLen: u32,
+        IVLen: usize,
     ) -> c_void;
     pub fn TEE_MACUpdate(
         operation: TEE_OperationHandle,
         chunk: *const c_void,
-        chunkSize: u32,
+        chunkSize: usize,
     ) -> c_void;
     pub fn TEE_MACComputeFinal(
         operation: TEE_OperationHandle,
         message: *const c_void,
-        messageLen: u32,
+        messageLen: usize,
         mac: *mut c_void,
-        macLen: *mut u32,
+        macLen: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_MACCompareFinal(
         operation: TEE_OperationHandle,
         message: *const c_void,
-        messageLen: u32,
+        messageLen: usize,
         mac: *const c_void,
-        macLen: u32,
+        macLen: usize,
     ) -> TEE_Result;
 
     // Cryptographic Operations API - Authenticated Encryption Functions
@@ -344,40 +349,40 @@ extern "C" {
     pub fn TEE_AEInit(
         operation: TEE_OperationHandle,
         nonce: *const c_void,
-        nonceLen: u32,
+        nonceLen: usize,
         tagLen: u32,
-        AADLen: u32,
-        payloadLen: u32,
+        AADLen: usize,
+        payloadLen: usize,
     ) -> TEE_Result;
     pub fn TEE_AEUpdateAAD(
         operation: TEE_OperationHandle,
         AADdata: *const c_void,
-        AADdataLen: u32,
+        AADdataLen: usize,
     ) -> c_void;
     pub fn TEE_AEUpdate(
         operation: TEE_OperationHandle,
         srcData: *const c_void,
-        srcLen: u32,
+        srcLen: usize,
         destData: *mut c_void,
-        destLen: *mut u32,
+        destLen: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_AEEncryptFinal(
         operation: TEE_OperationHandle,
         srcData: *const c_void,
-        srcLen: u32,
+        srcLen: usize,
         destData: *mut c_void,
-        destLen: *mut u32,
+        destLen: *mut usize,
         tag: *mut c_void,
-        tagLen: *mut u32,
+        tagLen: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_AEDecryptFinal(
         operation: TEE_OperationHandle,
         srcData: *const c_void,
-        srcLen: u32,
+        srcLen: usize,
         destData: *mut c_void,
-        destLen: *mut u32,
+        destLen: *mut usize,
         tag: *mut c_void,
-        tagLen: u32,
+        tagLen: usize,
     ) -> TEE_Result;
 
     // Cryptographic Operations API - Asymmetric Functions
@@ -387,36 +392,36 @@ extern "C" {
         params: *const TEE_Attribute,
         paramCount: u32,
         srcData: *const c_void,
-        srcLen: u32,
+        srcLen: usize,
         destData: *mut c_void,
-        destLen: *mut u32,
+        destLen: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_AsymmetricDecrypt(
         operation: TEE_OperationHandle,
         params: *const TEE_Attribute,
         paramCount: u32,
         srcData: *const c_void,
-        srcLen: u32,
+        srcLen: usize,
         destData: *mut c_void,
-        destLen: *mut u32,
+        destLen: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_AsymmetricSignDigest(
         operation: TEE_OperationHandle,
         params: *const TEE_Attribute,
         paramCount: u32,
         digest: *const c_void,
-        digestLen: u32,
+        digestLen: usize,
         signature: *mut c_void,
-        signatureLen: *mut u32,
+        signatureLen: *mut usize,
     ) -> TEE_Result;
     pub fn TEE_AsymmetricVerifyDigest(
         operation: TEE_OperationHandle,
         params: *const TEE_Attribute,
         paramCount: u32,
         digest: *const c_void,
-        digestLen: u32,
+        digestLen: usize,
         signature: *const c_void,
-        signatureLen: u32,
+        signatureLen: usize,
     ) -> TEE_Result;
 
     // Cryptographic Operations API - Key Derivation Functions
@@ -430,7 +435,7 @@ extern "C" {
 
     // Cryptographic Operations API - Random Number Generation Functions
 
-    pub fn TEE_GenerateRandom(randomBuffer: *mut c_void, randomBufferLen: u32) -> c_void;
+    pub fn TEE_GenerateRandom(randomBuffer: *mut c_void, randomBufferLen: usize) -> c_void;
 
     // Date & Time API
 
@@ -442,30 +447,30 @@ extern "C" {
 
     // TEE Arithmetical API - Memory allocation and size of objects
 
-    pub fn TEE_BigIntFMMSizeInU32(modulusSizeInBits: u32) -> u32;
-    pub fn TEE_BigIntFMMContextSizeInU32(modulusSizeInBits: u32) -> u32;
+    pub fn TEE_BigIntFMMSizeInU32(modulusSizeInBits: usize) -> usize;
+    pub fn TEE_BigIntFMMContextSizeInU32(modulusSizeInBits: usize) -> usize;
 
     // TEE Arithmetical API - Initialization functions
 
-    pub fn TEE_BigIntInit(bigInt: *mut TEE_BigInt, len: u32) -> c_void;
+    pub fn TEE_BigIntInit(bigInt: *mut TEE_BigInt, len: usize) -> c_void;
     pub fn TEE_BigIntInitFMMContext(
         context: *mut TEE_BigIntFMMContext,
-        len: u32,
+        len: usize,
         modulus: *const TEE_BigInt,
     ) -> c_void;
-    pub fn TEE_BigIntInitFMM(bigIntFMM: *mut TEE_BigIntFMM, len: u32) -> c_void;
+    pub fn TEE_BigIntInitFMM(bigIntFMM: *mut TEE_BigIntFMM, len: usize) -> c_void;
 
     // TEE Arithmetical API - Converter functions
 
     pub fn TEE_BigIntConvertFromOctetString(
         dest: *mut TEE_BigInt,
         buffer: *const u8,
-        bufferLen: u32,
+        bufferLen: usize,
         sign: i32,
     ) -> TEE_Result;
     pub fn TEE_BigIntConvertToOctetString(
         buffer: *mut u8,
-        bufferLen: *mut u32,
+        bufferLen: *mut usize,
         bigInt: *const TEE_BigInt,
     ) -> TEE_Result;
     pub fn TEE_BigIntConvertFromS32(dest: *mut TEE_BigInt, shortVal: i32) -> c_void;
@@ -482,6 +487,9 @@ extern "C" {
     ) -> c_void;
     pub fn TEE_BigIntGetBit(src: *const TEE_BigInt, bitIndex: u32) -> bool;
     pub fn TEE_BigIntGetBitCount(src: *const TEE_BigInt) -> u32;
+    pub fn TEE_BigIntSetBit(src: *const TEE_BigInt, bitIndex: u32, value: bool) -> TEE_Result;
+    pub fn TEE_BigIntAssign(dest: *mut TEE_BigInt, src: *const TEE_BigInt) -> TEE_Result;
+    pub fn TEE_BigIntAbs(dest: *mut TEE_BigInt, src: *const TEE_BigInt) -> TEE_Result;
     pub fn TEE_BigIntAdd(
         dest: *mut TEE_BigInt,
         op1: *const TEE_BigInt,
@@ -541,6 +549,13 @@ extern "C" {
         op: *const TEE_BigInt,
         n: *const TEE_BigInt,
     ) -> c_void;
+    pub fn TEE_BigIntExpMod(
+        dest: *mut TEE_BigInt,
+        op1: *const TEE_BigInt,
+        op2: *const TEE_BigInt,
+        n: *const TEE_BigInt,
+        context: *const TEE_BigIntFMMContext,
+    ) -> TEE_Result;
 
     // TEE Arithmetical API - Other arithmetic operations
 
diff --git a/optee-utee/optee-utee-sys/src/tee_api_defines.rs b/optee-utee/optee-utee-sys/src/tee_api_defines.rs
index 171f162..3de3e12 100644
--- a/optee-utee/optee-utee-sys/src/tee_api_defines.rs
+++ b/optee-utee/optee-utee-sys/src/tee_api_defines.rs
@@ -18,7 +18,9 @@
 use super::tee_api_types::*;
 use std::ptr::null;
 
-pub const TEE_INT_CORE_API_SPEC_VERSION: u32 = 0x0000000A;
+pub const TEE_CORE_API_MAJOR_VERSION: u32 = 0x00000001;
+pub const TEE_CORE_API_MINOR_VERSION: u32 = 0x00000003;
+pub const TEE_CORE_API_MAINTENANCE_VERSION: u32 = 0x00000001;
 
 pub const TEE_HANDLE_NULL: *const u32 = null();
 
@@ -30,6 +32,7 @@ pub const TEE_ERROR_CORRUPT_OBJECT: u32 = 0xF0100001;
 pub const TEE_ERROR_CORRUPT_OBJECT_2: u32 = 0xF0100002;
 pub const TEE_ERROR_STORAGE_NOT_AVAILABLE: u32 = 0xF0100003;
 pub const TEE_ERROR_STORAGE_NOT_AVAILABLE_2: u32 = 0xF0100004;
+pub const TEE_ERROR_UNSUPPORTED_VERSION: u32 = 0xF0100005;
 pub const TEE_ERROR_CIPHERTEXT_INVALID: u32 = 0xF0100006;
 pub const TEE_ERROR_GENERIC: u32 = 0xFFFF0000;
 pub const TEE_ERROR_ACCESS_DENIED: u32 = 0xFFFF0001;
@@ -49,6 +52,7 @@ pub const TEE_ERROR_COMMUNICATION: u32 = 0xFFFF000E;
 pub const TEE_ERROR_SECURITY: u32 = 0xFFFF000F;
 pub const TEE_ERROR_SHORT_BUFFER: u32 = 0xFFFF0010;
 pub const TEE_ERROR_EXTERNAL_CANCEL: u32 = 0xFFFF0011;
+pub const TEE_ERROR_TIMEOUT: u32 = 0xFFFF3001;
 pub const TEE_ERROR_OVERFLOW: u32 = 0xFFFF300F;
 pub const TEE_ERROR_TARGET_DEAD: u32 = 0xFFFF3024;
 pub const TEE_ERROR_STORAGE_NO_SPACE: u32 = 0xFFFF3041;
@@ -91,8 +95,26 @@ pub const TEE_MEMORY_ACCESS_READ: u32 = 0x00000001;
 pub const TEE_MEMORY_ACCESS_WRITE: u32 = 0x00000002;
 pub const TEE_MEMORY_ACCESS_ANY_OWNER: u32 = 0x00000004;
 
-// Memory Management Constant
+// Memory Management Constants
 pub const TEE_MALLOC_FILL_ZERO: u32 = 0x00000000;
+pub const TEE_MALLOC_NO_FILL: u32 = 0x00000001;
+pub const TEE_MALLOC_NO_SHARE: u32 = 0x00000002;
+
+// TEE_Whence Constants
+pub const TEE_DATA_SEEK_SET: u32 = 0x00000000;
+pub const TEE_DATA_SEEK_CUR: u32 = 0x00000001;
+pub const TEE_DATA_SEEK_END: u32 = 0x00000002;
+pub const TEE_WHENCE_ILLEGAL_VALUE: u32 = 0x7FFFFFFF;
+
+// TEE_OperationMode Values
+pub const TEE_MODE_ENCRYPT: u32 = 0x00000000;
+pub const TEE_MODE_DECRYPT: u32 = 0x00000001;
+pub const TEE_MODE_SIGN: u32 = 0x00000002;
+pub const TEE_MODE_VERIFY: u32 = 0x00000003;
+pub const TEE_MODE_MAC: u32 = 0x00000004;
+pub const TEE_MODE_DIGEST: u32 = 0x00000005;
+pub const TEE_MODE_DERIVE: u32 = 0x00000006;
+pub const TEE_MODE_ILLEGAL_VALUE: u32 = 0x7FFFFFFF;
 
 // Other constants
 pub const TEE_STORAGE_PRIVATE: u32 = 0x00000001;
@@ -116,6 +138,7 @@ pub const TEE_HANDLE_FLAG_PERSISTENT: u32 = 0x00010000;
 pub const TEE_HANDLE_FLAG_INITIALIZED: u32 = 0x00020000;
 pub const TEE_HANDLE_FLAG_KEY_SET: u32 = 0x00040000;
 pub const TEE_HANDLE_FLAG_EXPECT_TWO_KEYS: u32 = 0x00080000;
+pub const TEE_HANDLE_FLAG_EXTRACTING: u32 = 0x00100000;
 pub const TEE_OPERATION_CIPHER: u32 = 1;
 pub const TEE_OPERATION_MAC: u32 = 3;
 pub const TEE_OPERATION_AE: u32 = 4;
@@ -125,7 +148,9 @@ pub const TEE_OPERATION_ASYMMETRIC_SIGNATURE: u32 = 7;
 pub const TEE_OPERATION_KEY_DERIVATION: u32 = 8;
 pub const TEE_OPERATION_STATE_INITIAL: u32 = 0x00000000;
 pub const TEE_OPERATION_STATE_ACTIVE: u32 = 0x00000001;
+pub const TEE_OPERATION_STATE_EXTRACTING: u32 = 0x00000002;
 
+// below constants are not updated to 1.3.1
 // Algorithm Identifiers
 pub const TEE_ALG_AES_ECB_NOPAD: u32 = 0x10000010;
 pub const TEE_ALG_AES_CBC_NOPAD: u32 = 0x10000110;
diff --git a/optee-utee/optee-utee-sys/src/tee_api_types.rs b/optee-utee/optee-utee-sys/src/tee_api_types.rs
index f349dea..140cdbf 100644
--- a/optee-utee/optee-utee-sys/src/tee_api_types.rs
+++ b/optee-utee/optee-utee-sys/src/tee_api_types.rs
@@ -40,7 +40,7 @@ pub struct TEE_Identity {
 #[repr(C)]
 pub struct Memref {
     pub buffer: *mut c_void,
-    pub size: u32,
+    pub size: usize,
 }
 
 #[derive(Copy, Clone)]
@@ -94,15 +94,15 @@ pub type TEE_ObjectType = u32;
 #[repr(C)]
 pub struct TEE_ObjectInfo {
     pub objectType: u32,
-    // remove to 2 unions here, only keep 1.1.1 spec version
     pub objectSize: u32,
     pub maxObjectSize: u32,
     pub objectUsage: u32,
-    pub dataSize: u32,
-    pub dataPosition: u32,
+    pub dataSize: usize,
+    pub dataPosition: usize,
     pub handleFlags: u32,
 }
 
+// Reserve the GP 1.1.1 type
 #[repr(C)]
 pub enum TEE_Whence {
     TEE_DATA_SEEK_SET,
@@ -126,6 +126,7 @@ pub struct TEE_Attribute {
 
 // Cryptographic Operations API
 
+// Reserve the GP 1.1.1 type
 #[repr(C)]
 pub enum TEE_OperationMode {
     TEE_MODE_ENCRYPT,
diff --git a/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs b/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs
index 8f4ac24..e940143 100644
--- a/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs
+++ b/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs
@@ -32,8 +32,8 @@ extern "C" {
         cmd: u32,
         sub_cmd: u32,
         buf: *mut c_char,
-        len: u32,
-        outlen: *mut u32,
+        len: usize,
+        outlen: *mut usize,
     ) -> TEE_Result; 
 
 }
diff --git a/optee-utee/src/arithmetical.rs b/optee-utee/src/arithmetical.rs
index 451f186..13bbf29 100644
--- a/optee-utee/src/arithmetical.rs
+++ b/optee-utee/src/arithmetical.rs
@@ -38,7 +38,7 @@ impl BigInt {
     pub fn new(bits: u32) -> Self {
         let size: usize = Self::size_in_u32(bits) as usize;
         let mut tmp_vec: Vec<BigIntUnit> = vec![0; size];
-        unsafe { raw::TEE_BigIntInit(tmp_vec.as_mut_ptr(), size as u32) };
+        unsafe { raw::TEE_BigIntInit(tmp_vec.as_mut_ptr(), size as usize) };
         Self(tmp_vec)
     }
 
@@ -47,7 +47,7 @@ impl BigInt {
             raw::TEE_BigIntConvertFromOctetString(
                 self.0.as_mut_ptr(),
                 buffer.as_ptr(),
-                buffer.len() as u32,
+                buffer.len() as usize,
                 sign,
             )
         } {
@@ -57,17 +57,17 @@ impl BigInt {
     }
 
     pub fn convert_to_octet_string(&self) -> Result<Vec<u8>> {
-        let mut buffer_size: u32 = (self.0.len() as u32 - 2) * 4;
-        let mut tmp_vec = vec![0u8; buffer_size as usize];
+        let mut buffer_size: usize = (self.0.len() - 2) * 4;
+        let mut tmp_vec = vec![0u8; buffer_size];
         match unsafe {
             raw::TEE_BigIntConvertToOctetString(
                 tmp_vec.as_mut_ptr(),
-                &mut buffer_size as _,
+                &mut buffer_size,
                 self.data_ptr(),
             )
         } {
             raw::TEE_SUCCESS => {
-                tmp_vec.truncate(buffer_size as usize);
+                tmp_vec.truncate(buffer_size);
                 return Ok(tmp_vec);
             }
             code => Err(Error::from_raw_error(code)),
@@ -264,16 +264,16 @@ impl BigIntFMMContext {
         self.0.as_ptr()
     }
 
-    fn size_in_u32(size: u32) -> u32 {
+    fn size_in_u32(size: usize) -> usize {
         unsafe { raw::TEE_BigIntFMMContextSizeInU32(size) }
     }
 
     // Globalplatform define FMMContext1 here while OP-TEE does not update yet
     pub fn new(bits: u32, modulus: BigInt) -> Result<Self> {
-        let size: usize = Self::size_in_u32(bits) as usize;
+        let size: usize = Self::size_in_u32(bits as usize) as usize;
         let mut tmp_vec: Vec<BigIntFMMContextUnit> = vec![0; size];
         unsafe {
-            raw::TEE_BigIntInitFMMContext(tmp_vec.as_mut_ptr(), size as u32, modulus.data_ptr())
+            raw::TEE_BigIntInitFMMContext(tmp_vec.as_mut_ptr(), size, modulus.data_ptr())
         };
         Ok(Self(tmp_vec))
     }
@@ -286,14 +286,14 @@ impl BigIntFMM {
         self.0.as_ptr()
     }
 
-    fn size_in_u32(size: u32) -> u32 {
+    fn size_in_u32(size: usize) -> usize {
         unsafe { raw::TEE_BigIntFMMSizeInU32(size) }
     }
 
     pub fn new(bits: u32) -> Self {
-        let size: usize = Self::size_in_u32(bits) as usize;
+        let size: usize = Self::size_in_u32(bits as usize) as usize;
         let mut tmp_vec: Vec<BigIntFMMUnit> = vec![0; size];
-        unsafe { raw::TEE_BigIntInitFMM(tmp_vec.as_mut_ptr(), size as u32) };
+        unsafe { raw::TEE_BigIntInitFMM(tmp_vec.as_mut_ptr(), size) };
         Self(tmp_vec)
     }
 
@@ -328,7 +328,7 @@ impl BigIntFMM {
         };
     }
 }
-//OP-TEE does not implement function:
+//OP-TEE in version GP 1.1.1 does not implement function:
 //TEE_BigIntSetBit
 //TEE_BigIntAssign
 //TEE_BigIntAbs
diff --git a/optee-utee/src/crypto_op.rs b/optee-utee/src/crypto_op.rs
index a53a49a..854b902 100644
--- a/optee-utee/src/crypto_op.rs
+++ b/optee-utee/src/crypto_op.rs
@@ -194,13 +194,13 @@ impl OperationHandle {
     }
 
     fn info_multiple(&self, info_buf: &mut [u8]) -> Result<OperationInfoMultiple> {
-        let mut tmp_size: u32 = 0;
+        let mut tmp_size: usize = 0;
         match unsafe {
             raw::TEE_GetOperationInfoMultiple(self.handle(), info_buf.as_ptr() as _, &mut tmp_size)
         } {
             raw::TEE_SUCCESS => Ok(OperationInfoMultiple::from_raw(
                 info_buf.as_ptr() as _,
-                tmp_size as usize,
+                tmp_size,
             )),
             code => Err(Error::from_raw_error(code)),
         }
@@ -274,7 +274,7 @@ impl Digest {
     /// 4) If the Implementation detects any other error.
     pub fn update(&self, chunk: &[u8]) {
         unsafe {
-            raw::TEE_DigestUpdate(self.handle(), chunk.as_ptr() as _, chunk.len() as u32);
+            raw::TEE_DigestUpdate(self.handle(), chunk.as_ptr() as _, chunk.len());
         }
     }
 
@@ -320,17 +320,17 @@ impl Digest {
     /// 4) If the Implementation detects any other error.
     //hash size is dynamic changed so we returned it's updated size
     pub fn do_final(&self, chunk: &[u8], hash: &mut [u8]) -> Result<usize> {
-        let mut hash_size: u32 = hash.len() as u32;
+        let mut hash_size: usize = hash.len();
         match unsafe {
             raw::TEE_DigestDoFinal(
                 self.handle(),
                 chunk.as_ptr() as _,
-                chunk.len() as u32,
+                chunk.len(),
                 hash.as_mut_ptr() as _,
                 &mut hash_size,
             )
         } {
-            raw::TEE_SUCCESS => return Ok(hash_size as usize),
+            raw::TEE_SUCCESS => return Ok(hash_size),
             code => Err(Error::from_raw_error(code)),
         }
     }
@@ -535,7 +535,7 @@ impl Cipher {
     /// 4) Hardware or cryptographic algorithm failure.
     /// 5) If the Implementation detects any other error.
     pub fn init(&self, iv: &[u8]) {
-        unsafe { raw::TEE_CipherInit(self.handle(), iv.as_ptr() as _, iv.len() as u32) };
+        unsafe { raw::TEE_CipherInit(self.handle(), iv.as_ptr() as _, iv.len()) };
     }
 
     /// Encrypt or decrypt the source data.
@@ -589,12 +589,12 @@ impl Cipher {
     /// 3) Hardware or cryptographic algorithm failure.
     /// 4) If the Implementation detects any other error.
     pub fn update(&self, src: &[u8], dest: &mut [u8]) -> Result<usize> {
-        let mut dest_size: u32 = dest.len() as u32;
+        let mut dest_size: usize = dest.len();
         match unsafe {
             raw::TEE_CipherUpdate(
                 self.handle(),
                 src.as_ptr() as _,
-                src.len() as u32,
+                src.len(),
                 dest.as_mut_ptr() as _,
                 &mut dest_size,
             )
@@ -625,12 +625,12 @@ impl Cipher {
     /// 3) Hardware or cryptographic algorithm failure.
     /// 4) If the Implementation detects any other error.
     pub fn do_final(&self, src: &[u8], dest: &mut [u8]) -> Result<usize> {
-        let mut dest_size: u32 = dest.len() as u32;
+        let mut dest_size: usize = dest.len();
         match unsafe {
             raw::TEE_CipherDoFinal(
                 self.handle(),
                 src.as_ptr() as _,
-                src.len() as u32,
+                src.len(),
                 dest.as_mut_ptr() as _,
                 &mut dest_size,
             )
@@ -762,7 +762,7 @@ impl Mac {
     /// 4) Hardware or cryptographic algorithm failure.
     /// 5) If the Implementation detects any other error.
     pub fn init(&self, iv: &[u8]) {
-        unsafe { raw::TEE_MACInit(self.handle(), iv.as_ptr() as _, iv.len() as u32) };
+        unsafe { raw::TEE_MACInit(self.handle(), iv.as_ptr() as _, iv.len()) };
     }
 
     /// Accumulate data for a MAC calculation.
@@ -784,7 +784,7 @@ impl Mac {
     /// 4) Hardware or cryptographic algorithm failure.
     /// 5) If the Implementation detects any other error.
     pub fn update(&self, chunk: &[u8]) {
-        unsafe { raw::TEE_MACUpdate(self.handle(), chunk.as_ptr() as _, chunk.len() as u32) };
+        unsafe { raw::TEE_MACUpdate(self.handle(), chunk.as_ptr() as _, chunk.len()) };
     }
     /// Finalize the MAC operation with a last chunk of message, and computes the MAC.
     /// Afterwards the operation handle can be reused or re-initialized with a new key.
@@ -833,17 +833,17 @@ impl Mac {
     /// 4) Hardware or cryptographic algorithm failure.
     /// 5) If the Implementation detects any other error.
     pub fn compute_final(&self, message: &[u8], mac: &mut [u8]) -> Result<usize> {
-        let mut mac_size: u32 = mac.len() as u32;
+        let mut mac_size: usize = mac.len();
         match unsafe {
             raw::TEE_MACComputeFinal(
                 self.handle(),
                 message.as_ptr() as _,
-                message.len() as u32,
+                message.len(),
                 mac.as_mut_ptr() as _,
                 &mut mac_size,
             )
         } {
-            raw::TEE_SUCCESS => Ok(mac_size as usize),
+            raw::TEE_SUCCESS => Ok(mac_size),
             code => Err(Error::from_raw_error(code)),
         }
     }
@@ -873,9 +873,9 @@ impl Mac {
             raw::TEE_MACCompareFinal(
                 self.handle(),
                 message.as_ptr() as _,
-                message.len() as u32,
+                message.len(),
                 mac.as_ptr() as _,
-                mac.len() as u32,
+                mac.len(),
             )
         } {
             raw::TEE_SUCCESS => Ok(()),
@@ -967,10 +967,10 @@ impl AE {
             raw::TEE_AEInit(
                 self.handle(),
                 nonce.as_ptr() as _,
-                nonce.len() as u32,
+                nonce.len(),
                 tag_len as u32,
-                aad_len as u32,
-                pay_load_len as u32,
+                aad_len,
+                pay_load_len,
             )
         } {
             raw::TEE_SUCCESS => return Ok(()),
@@ -996,7 +996,7 @@ impl AE {
     /// 6) If the Implementation detects any other error.
     pub fn update_aad(&self, aad_data: &[u8]) {
         unsafe {
-            raw::TEE_AEUpdateAAD(self.handle(), aad_data.as_ptr() as _, aad_data.len() as u32)
+            raw::TEE_AEUpdateAAD(self.handle(), aad_data.as_ptr() as _, aad_data.len())
         };
     }
 
@@ -1024,18 +1024,18 @@ impl AE {
     /// 5) Hardware or cryptographic algorithm failure.
     /// 6) If the Implementation detects any other error.
     pub fn update(&self, src: &[u8], dest: &mut [u8]) -> Result<usize> {
-        let mut dest_size: u32 = dest.len() as u32;
+        let mut dest_size: usize = dest.len();
         match unsafe {
             raw::TEE_AEUpdate(
                 self.handle(),
                 src.as_ptr() as _,
-                src.len() as u32,
+                src.len(),
                 dest.as_mut_ptr() as _,
                 &mut dest_size,
             )
         } {
             raw::TEE_SUCCESS => {
-                return Ok(dest_size as usize);
+                return Ok(dest_size);
             }
             code => Err(Error::from_raw_error(code)),
         }
@@ -1103,13 +1103,13 @@ impl AE {
         dest: &mut [u8],
         tag: &mut [u8],
     ) -> Result<(usize, usize)> {
-        let mut dest_size: u32 = dest.len() as u32;
-        let mut tag_size: u32 = tag.len() as u32;
+        let mut dest_size: usize = dest.len();
+        let mut tag_size: usize = tag.len();
         match unsafe {
             raw::TEE_AEEncryptFinal(
                 self.handle(),
                 src.as_ptr() as _,
-                src.len() as u32,
+                src.len(),
                 dest.as_mut_ptr() as _,
                 &mut dest_size,
                 tag.as_mut_ptr() as _,
@@ -1117,7 +1117,7 @@ impl AE {
             )
         } {
             raw::TEE_SUCCESS => {
-                return Ok((dest_size as usize, tag_size as usize));
+                return Ok((dest_size, tag_size));
             }
             code => Err(Error::from_raw_error(code)),
         }
@@ -1147,20 +1147,20 @@ impl AE {
     /// 4) Hardware or cryptographic algorithm failure.
     /// 5) If the Implementation detects any other error.
     pub fn decrypt_final(&self, src: &[u8], dest: &mut [u8], tag: &[u8]) -> Result<usize> {
-        let mut dest_size: u32 = dest.len() as u32;
+        let mut dest_size: usize = dest.len();
         match unsafe {
             raw::TEE_AEDecryptFinal(
                 self.handle(),
                 src.as_ptr() as _,
-                src.len() as u32,
+                src.len(),
                 dest.as_mut_ptr() as _,
                 &mut dest_size,
                 tag.as_ptr() as _,
-                tag.len() as u32,
+                tag.len(),
             )
         } {
             raw::TEE_SUCCESS => {
-                return Ok(dest_size as usize);
+                return Ok(dest_size);
             }
             code => Err(Error::from_raw_error(code)),
         }
@@ -1270,7 +1270,7 @@ impl Asymmetric {
     // Define this function as unsafe because we need to return Ok for short buffer error.
     pub fn encrypt(&self, params: &[Attribute], src: &[u8]) -> Result<Vec<u8>> {
         let p: Vec<raw::TEE_Attribute> = params.iter().map(|p| p.raw()).collect();
-        let mut res_size: u32 = self.info().key_size();
+        let mut res_size: usize = self.info().key_size() as usize;
         let mut res_vec: Vec<u8> = vec![0u8; res_size as usize];
         match unsafe {
             raw::TEE_AsymmetricEncrypt(
@@ -1278,13 +1278,13 @@ impl Asymmetric {
                 p.as_ptr() as _,
                 params.len() as u32,
                 src.as_ptr() as _,
-                src.len() as u32,
+                src.len(),
                 res_vec.as_mut_ptr() as _,
                 &mut res_size,
             )
         } {
             raw::TEE_SUCCESS => {
-                res_vec.truncate(res_size as usize);
+                res_vec.truncate(res_size);
                 return Ok(res_vec);
             }
             code => Err(Error::from_raw_error(code)),
@@ -1313,7 +1313,7 @@ impl Asymmetric {
     /// 4) If the Implementation detects any other error.
     pub fn decrypt(&self, params: &[Attribute], src: &[u8]) -> Result<Vec<u8>> {
         let p: Vec<raw::TEE_Attribute> = params.iter().map(|p| p.raw()).collect();
-        let mut res_size: u32 = self.info().key_size();
+        let mut res_size: usize = self.info().key_size() as usize;
         let mut res_vec: Vec<u8> = vec![0u8; res_size as usize];
         match unsafe {
             raw::TEE_AsymmetricDecrypt(
@@ -1321,7 +1321,7 @@ impl Asymmetric {
                 p.as_ptr() as _,
                 params.len() as u32,
                 src.as_ptr() as _,
-                src.len() as u32,
+                src.len(),
                 res_vec.as_mut_ptr() as _,
                 &mut res_size,
             )
@@ -1362,20 +1362,20 @@ impl Asymmetric {
         signature: &mut [u8],
     ) -> Result<usize> {
         let p: Vec<raw::TEE_Attribute> = params.iter().map(|p| p.raw()).collect();
-        let mut signature_size: u32 = signature.len() as u32;
+        let mut signature_size: usize = signature.len();
         match unsafe {
             raw::TEE_AsymmetricSignDigest(
                 self.handle(),
                 p.as_ptr() as _,
                 params.len() as u32,
                 digest.as_ptr() as _,
-                digest.len() as u32,
+                digest.len(),
                 signature.as_mut_ptr() as _,
                 &mut signature_size,
             )
         } {
             raw::TEE_SUCCESS => {
-                return Ok(signature_size as usize);
+                return Ok(signature_size);
             }
             code => Err(Error::from_raw_error(code)),
         }
@@ -1415,9 +1415,9 @@ impl Asymmetric {
                 p.as_ptr() as _,
                 params.len() as u32,
                 digest.as_ptr() as _,
-                digest.len() as u32,
+                digest.len(),
                 signature.as_ptr() as _,
-                signature.len() as u32,
+                signature.len(),
             )
         } {
             raw::TEE_SUCCESS => Ok(()),
diff --git a/optee-utee/src/extension.rs b/optee-utee/src/extension.rs
index 74f9a55..9263803 100644
--- a/optee-utee/src/extension.rs
+++ b/optee-utee/src/extension.rs
@@ -28,21 +28,21 @@ impl LoadablePlugin {
     }
     pub fn invoke(&mut self, command_id: u32, subcommand_id: u32, data: &[u8]) -> Result<Vec<u8>> {
         let raw_uuid: Uuid = self.uuid;
-        let mut outlen: u32 = 0;
+        let mut outlen: usize = 0;
         match unsafe {
             raw::tee_invoke_supp_plugin(
                 raw_uuid.as_raw_ptr(),
                 command_id as u32,
                 subcommand_id as u32,
                 data.as_ptr() as _,
-                data.len() as u32,
-                &mut outlen as *mut u32,
+                data.len(),
+                &mut outlen as *mut usize,
             )
         } {
             raw::TEE_SUCCESS => {
-                assert!(outlen <= (data.len() as u32));
-                let mut outbuf = vec![0; outlen as usize];
-                outbuf.copy_from_slice(&data[..(outlen as usize)]);
+                assert!(outlen <= (data.len()));
+                let mut outbuf = vec![0; outlen];
+                outbuf.copy_from_slice(&data[..outlen]);
                 
                 Ok(outbuf)
             },
diff --git a/optee-utee/src/object.rs b/optee-utee/src/object.rs
index ac23b1c..031c9c1 100644
--- a/optee-utee/src/object.rs
+++ b/optee-utee/src/object.rs
@@ -95,7 +95,7 @@ impl<'attrref> AttributeMemref<'attrref> {
                 &mut res.raw,
                 id as u32,
                 buffer.as_ptr() as *mut _,
-                buffer.len() as u32,
+                buffer.len(),
             );
         }
         res
@@ -240,16 +240,16 @@ impl ObjectHandle {
     }
 
     fn ref_attribute(&self, id: AttributeId, buffer: &mut [u8]) -> Result<usize> {
-        let mut size = buffer.len() as u32;
+        let mut size = buffer.len();
         match unsafe {
             raw::TEE_GetObjectBufferAttribute(
                 self.handle(),
                 id as u32,
                 buffer as *mut _ as _,
-                &mut size as _,
+                &mut size,
             )
         } {
-            raw::TEE_SUCCESS => Ok(size as usize),
+            raw::TEE_SUCCESS => Ok(size),
             code => Err(Error::from_raw_error(code)),
         }
     }
@@ -908,7 +908,7 @@ impl PersistentObject {
             raw::TEE_OpenPersistentObject(
                 storage_id as u32,
                 object_id.as_ptr() as _,
-                object_id.len() as u32,
+                object_id.len(),
                 flags.bits(),
                 raw_handle as *mut _,
             )
@@ -993,11 +993,11 @@ impl PersistentObject {
             raw::TEE_CreatePersistentObject(
                 storage_id as u32,
                 object_id.as_ptr() as _,
-                object_id.len() as u32,
+                object_id.len(),
                 flags.bits(),
                 attributes,
                 initial_data.as_ptr() as _,
-                initial_data.len() as u32,
+                initial_data.len(),
                 raw_handle as *mut _,
             )
         } {
@@ -1099,7 +1099,7 @@ impl PersistentObject {
             raw::TEE_RenamePersistentObject(
                 self.0.handle(),
                 new_object_id.as_ptr() as _,
-                new_object_id.len() as u32,
+                new_object_id.len(),
             )
         } {
             raw::TEE_SUCCESS => Ok(()),
@@ -1190,16 +1190,16 @@ impl PersistentObject {
     /// 2) If the Implementation detects any other error associated with this function which is not
     ///    explicitly associated with a defined return code for this function.
     pub fn read(&self, buf: &mut [u8]) -> Result<u32> {
-        let mut count: u32 = 0;
+        let mut count: usize = 0;
         match unsafe {
             raw::TEE_ReadObjectData(
                 self.handle(),
                 buf.as_mut_ptr() as _,
-                buf.len() as u32,
+                buf.len(),
                 &mut count,
             )
         } {
-            raw::TEE_SUCCESS => Ok(count),
+            raw::TEE_SUCCESS => Ok(count as u32),
             code => Err(Error::from_raw_error(code)),
         }
     }
@@ -1245,7 +1245,7 @@ impl PersistentObject {
     ///    explicitly associated with a defined return code for this function.
     pub fn write(&mut self, buf: &[u8]) -> Result<()> {
         match unsafe {
-            raw::TEE_WriteObjectData(self.handle(), buf.as_ptr() as _, buf.len() as u32)
+            raw::TEE_WriteObjectData(self.handle(), buf.as_ptr() as _, buf.len())
         } {
             raw::TEE_SUCCESS => Ok(()),
             code => Err(Error::from_raw_error(code)),
@@ -1286,7 +1286,7 @@ impl PersistentObject {
     /// 2) If the Implementation detects any other error associated with this function which is not
     ///    explicitly associated with a defined return code for this function.
     pub fn truncate(&self, size: u32) -> Result<()> {
-        match unsafe { raw::TEE_TruncateObjectData(self.handle(), size) } {
+        match unsafe { raw::TEE_TruncateObjectData(self.handle(), size as usize) } {
             raw::TEE_SUCCESS => Ok(()),
             code => Err(Error::from_raw_error(code)),
         }
@@ -1407,7 +1407,7 @@ impl ObjectEnumHandle {
         object_info: &mut ObjectInfo,
         object_id: &mut [u8],
     ) -> Result<u32> {
-        let mut object_id_len: u32 = 0;
+        let mut object_id_len: usize = 0;
         match unsafe {
             raw::TEE_GetNextPersistentObject(
                 *self.raw,
@@ -1416,7 +1416,7 @@ impl ObjectEnumHandle {
                 &mut object_id_len,
             )
         } {
-            raw::TEE_SUCCESS => Ok(object_id_len),
+            raw::TEE_SUCCESS => Ok(object_id_len as u32),
             code => Err(Error::from_raw_error(code)),
         }
     }
diff --git a/optee-utee/src/parameter.rs b/optee-utee/src/parameter.rs
index f874309..5694c67 100644
--- a/optee-utee/src/parameter.rs
+++ b/optee-utee/src/parameter.rs
@@ -87,7 +87,7 @@ impl<'parameter> ParamMemref<'parameter> {
     }
 
     pub fn set_updated_size(&mut self, size: usize) {
-        unsafe { (*self.raw).size = size as u32};
+        unsafe { (*self.raw).size = size};
     }
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@teaclave.apache.org
For additional commands, e-mail: commits-help@teaclave.apache.org