TEE_Result ta_entry_asymmetric_verify_digest(uint32_t param_type, TEE_Param params[4]) { TEE_Result res; TEE_Attribute *attrs; uint32_t attr_count; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT)); res = unpack_attrs(params[1].memref.buffer, params[1].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; res = TEE_AsymmetricVerifyDigest((TEE_OperationHandle) params[0].value.a, attrs, attr_count, params[2].memref.buffer, params[2].memref.size, params[3].memref.buffer, params[3].memref.size); TEE_Free(attrs); return res; }
TEE_Result ta_entry_reset_operation(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_ResetOperation((TEE_OperationHandle) params[0].value.a); return TEE_SUCCESS; }
TEE_Result ta_entry_reset_transient_object(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_ResetTransientObject((TEE_ObjectHandle) params[0].value.a); return TEE_SUCCESS; }
TEE_Result ta_entry_set_operation_key(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_SetOperationKey((TEE_OperationHandle) params[0].value.a, (TEE_ObjectHandle) params[0].value.b); }
TEE_Result ta_entry_random_number_generate(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_GenerateRandom(params[0].memref.buffer, params[0].memref.size); return TEE_SUCCESS; }
TEE_Result ta_storage_cmd_close(uint32_t param_types, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_CloseObject((TEE_ObjectHandle)(uintptr_t)params[0].value.a); return TEE_SUCCESS; }
TEE_Result ta_storage_cmd_start_enum(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectEnumHandle oe = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_StartPersistentObjectEnumerator(oe, TEE_STORAGE_PRIVATE); }
TEE_Result ta_storage_cmd_trunc(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_TruncateObjectData(o, params[0].value.b); }
TEE_Result ta_storage_cmd_reset_enum(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectEnumHandle oe = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_ResetPersistentObjectEnumerator(oe); return TEE_SUCCESS; }
TEE_Result ta_entry_set_operation_key(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = VAL2HANDLE(params[0].value.a); TEE_ObjectHandle key = VAL2HANDLE(params[0].value.b); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_SetOperationKey(op, key); }
TEE_Result ta_entry_ae_init(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE)); return TEE_AEInit((TEE_OperationHandle) params[0].value.a, params[1].memref.buffer, params[1].memref.size, params[0].value.b * 8, /* tag_len in bits */ params[2].value.a, params[2].value.b); }
TEE_Result ta_entry_cipher_do_final(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE)); return TEE_CipherDoFinal((TEE_OperationHandle) params[0].value.a, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, ¶ms[2].memref.size); }
TEE_Result ta_entry_free_operation(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_FreeOperation(op); return TEE_SUCCESS; }
TEE_Result ta_entry_ae_update_aad(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_AEUpdateAAD((TEE_OperationHandle) params[0].value.a, params[1].memref.buffer, params[1].memref.size); return TEE_SUCCESS; }
TEE_Result ta_entry_copy_object_attributes(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_CopyObjectAttributes1((TEE_ObjectHandle) params[0].value.a, (TEE_ObjectHandle) params[0].value.b); return TEE_SUCCESS; }
TEE_Result ta_entry_mac_final_compare(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE)); return TEE_MACCompareFinal((TEE_OperationHandle) params[0].value.a, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, params[2].memref.size); }
TEE_Result ta_storage_cmd_rename(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_RenamePersistentObject(o, params[1].memref.buffer, params[1].memref.size); }
TEE_Result ta_entry_mac_update(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_MACUpdate(op, params[1].memref.buffer, params[1].memref.size); return TEE_SUCCESS; }
TEE_Result ta_storage_cmd_unlink(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_CloseAndDeletePersistentObject1(o); return TEE_SUCCESS; }
TEE_Result ta_storage_cmd_read(uint32_t param_types, TEE_Param params[4]) { TEE_ObjectHandle o = VAL2HANDLE(params[1].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_ReadObjectData(o, params[0].memref.buffer, params[0].memref.size, ¶ms[1].value.b); }
TEE_Result ta_entry_free_transient_object(uint32_t param_type, TEE_Param params[4]) { TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_FreeTransientObject(o); return TEE_SUCCESS; }
TEE_Result ta_entry_mac_final_compute(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE)); return TEE_MACComputeFinal(op, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, ¶ms[2].memref.size); }
TEE_Result ta_storage_cmd_alloc_enum(uint32_t param_types, TEE_Param params[4]) { TEE_Result res; TEE_ObjectEnumHandle oe; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); res = TEE_AllocatePersistentObjectEnumerator(&oe); params[0].value.a = (uintptr_t)oe; return res; }
TEE_Result ta_entry_get_object_value_attribute(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_GetObjectValueAttribute((TEE_ObjectHandle) params[0].value.a, params[0].value.b, ¶ms[1].value.a, ¶ms[1].value.b); }
TEE_Result ta_entry_get_object_buffer_attribute(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_GetObjectBufferAttribute((TEE_ObjectHandle) params[0].value. a, params[0].value.b, params[1].memref.buffer, ¶ms[1].memref.size); }
TEE_Result ta_entry_copy_object_attributes(uint32_t param_type, TEE_Param params[4]) { TEE_ObjectHandle dst = VAL2HANDLE(params[0].value.a); TEE_ObjectHandle src = VAL2HANDLE(params[0].value.b); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_CopyObjectAttributes1(dst, src); return TEE_SUCCESS; }
TEE_Result ta_entry_copy_operation(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle dst = VAL2HANDLE(params[0].value.a); TEE_OperationHandle src = VAL2HANDLE(params[0].value.b); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); TEE_CopyOperation(dst, src); return TEE_SUCCESS; }
TEE_Result ta_entry_get_operation_info(uint32_t param_type, TEE_Param params[4]) { ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); if (params[1].memref.size < sizeof(TEE_OperationInfo)) return TEE_ERROR_SHORT_BUFFER; params[1].memref.size = sizeof(TEE_OperationInfo); TEE_GetOperationInfo((TEE_OperationHandle) params[0].value.a, params[1].memref.buffer); return TEE_SUCCESS; }
TEE_Result ta_entry_ae_decrypt_final(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_MEMREF_INPUT)); return TEE_AEDecryptFinal(op, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, ¶ms[2].memref.size, params[3].memref.buffer, params[3].memref.size); }
TEE_Result ta_entry_allocate_operation(uint32_t param_type, TEE_Param params[4]) { TEE_Result res; TEE_OperationHandle op; ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); res = TEE_AllocateOperation(&op, params[0].value.b, params[1].value.a, params[1].value.b); params[0].value.a = (uint32_t) op; return res; }