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_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_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_asymmetric_verify_digest(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = VAL2HANDLE(params[0].value.a); 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(op, 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_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_entry_reset_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_ResetOperation(op); return TEE_SUCCESS; }
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_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_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_reset_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_ResetTransientObject(o); return TEE_SUCCESS; }
TEE_Result ta_entry_ae_update_aad(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_AEUpdateAAD(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_entry_ae_init(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_VALUE_INPUT, TEE_PARAM_TYPE_NONE)); return TEE_AEInit(op, 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_get_object_value_attribute(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_VALUE_OUTPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); return TEE_GetObjectValueAttribute(o, 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]) { TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a); 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(o, params[0].value.b, params[1].memref.buffer, ¶ms[1].memref.size); }
TEE_Result ta_entry_derive_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); 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_NONE, TEE_PARAM_TYPE_NONE)); res = unpack_attrs(params[1].memref.buffer, params[1].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; TEE_DeriveKey(op, attrs, attr_count, key); TEE_Free(attrs); return TEE_SUCCESS; }
TEE_Result ta_entry_cipher_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_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE)); return TEE_CipherUpdate(op, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, ¶ms[2].memref.size); }
TEE_Result ta_entry_mac_final_compare(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_INPUT, TEE_PARAM_TYPE_NONE)); return TEE_MACCompareFinal(op, params[1].memref.buffer, params[1].memref.size, params[2].memref.buffer, params[2].memref.size); }
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_get_operation_info(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_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(op, params[1].memref.buffer); return TEE_SUCCESS; }
TEE_Result ta_storage_cmd_seek(uint32_t param_types, TEE_Param params[4]) { TEE_Result res; TEE_ObjectInfo info; TEE_ObjectHandle o = VAL2HANDLE(params[0].value.a); ASSERT_PARAM_TYPE(TEE_PARAM_TYPES (TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_VALUE_INOUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)); res = TEE_SeekObjectData(o, params[0].value.b, params[1].value.a); if (res != TEE_SUCCESS) return res; res = TEE_GetObjectInfo1(o, &info); params[1].value.b = info.dataPosition; return res; }
TEE_Result ta_storage_cmd_next_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_MEMREF_OUTPUT, TEE_PARAM_TYPE_MEMREF_OUTPUT, TEE_PARAM_TYPE_NONE)); if (params[1].memref.size < sizeof(TEE_ObjectInfo)) return TEE_ERROR_SHORT_BUFFER; if (params[2].memref.size < TEE_OBJECT_ID_MAX_LEN) return TEE_ERROR_SHORT_BUFFER; params[1].memref.size = sizeof(TEE_ObjectInfo); return TEE_GetNextPersistentObject(oe, (TEE_ObjectInfo *)params[1].memref.buffer, params[2].memref.buffer, ¶ms[2].memref.size); }
TEE_Result ta_entry_populate_transient_object(uint32_t param_type, TEE_Param params[4]) { TEE_Result res; TEE_Attribute *attrs; uint32_t attr_count; 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)); res = unpack_attrs(params[1].memref.buffer, params[1].memref.size, &attrs, &attr_count); if (res != TEE_SUCCESS) return res; res = TEE_PopulateTransientObject(o, attrs, attr_count); TEE_Free(attrs); return res; }
TEE_Result ta_entry_mac_init(uint32_t param_type, TEE_Param params[4]) { TEE_OperationHandle op = VAL2HANDLE(params[0].value.a); void *buffer; size_t size; if (param_type == TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { buffer = NULL; size = 0; } else if (param_type == TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT, TEE_PARAM_TYPE_MEMREF_INPUT, TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) { buffer = params[1].memref.buffer; size = params[1].memref.size; } else return TEE_ERROR_BAD_PARAMETERS; TEE_MACInit(op, buffer, size); return TEE_SUCCESS; }