blob: d5afa8b8efce3e99bba5270e564d93abf9afdf99 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#include <stddef.h>
#include <stdint.h>
#include <zircon/compiler.h>
#include <tee-client-api/tee-client-types.h>
__BEGIN_CDECLS
/*
* Global Platform TEE Client API
*
* https://globalplatform.org/specs-library/tee-client-api-specification/
*
* This header contains Fuchsia's implementation of the functions, and by inclusion (#include), the
* constants and data structures, that are defined by the Global Platform TEE Client API V1.0_c and
* its associated Errata (V2.0).
*
* NOTE: The file name for this file uses underscores rather than Fuchsia's conventional dashes due
* to the requirement from the Global Platform TEE Client API Spec that the header must be named
* exactly 'tee_client_api.h'.
*/
/*************
* Functions *
*************/
/* TEEC_InitializeContext
*
* This function initializes a new TEE Context, forming a connection between this Client Application
* and the TEE identified by the string identifier name.
*
* Parameters:
* name A zero-terminated string that describes the TEE to connect to. If this parameter is set
* to NULL the Implementation must select a default TEE.
*
* context A TEEC_Context structre that must be initialized by the Implementation.
*
* Return:
* TEEC_Result TEEC_SUCCESS: Initialization was successful.
* Another error code: Initialization was not successful.
*/
TEEC_Result TEEC_InitializeContext(const char* name, TEEC_Context* context);
/* TEEC_FinalizeContext
*
* This function finalizes an initialized TEE Context, closing the connection between the Client
* Application and the TEE. The Client Application MUST only call this function when all Sessions
* inside this TEE Context have been closed and all Shared Memory blocks have been released.
*
* Parameters:
* context An initialized TEEC_Context structure which is to be finalized.
*/
void TEEC_FinalizeContext(TEEC_Context* context);
/* TEEC_RegisterSharedMemory
*
* This function registers a block of existing Client Application memory as a block of Shared Memory
* within the scope of the specified TEE Context, in accordance with the parameters which have been
* set by the Client Application inside the sharedMem structure.
*
* Parameters:
* context A pointer to an initialized TEE Context.
*
* sharedMem A pointer to a Shared Memory structure to register:
* The buffer, size, and flags fields of the sharedMem structure MUST be set in
* accordance with the specification described above.
*
* Return:
* TEEC_Result TEEC_SUCCESS: The registration was successful.
* TEEC_ERROR_OUT_OF_MEMORY: The registration could not be completed because of a lack
* of resources.
* Another error code: Registration was not successful for another reason.
*/
TEEC_Result TEEC_RegisterSharedMemory(TEEC_Context* context, TEEC_SharedMemory* sharedMem);
/* TEEC_AllocateSharedMemory
*
* This function allocates a new block of memory as a block of Shared Memory within the scope of the
* specified TEE Context, in accordance with the parameters which have been set by the Client
* Application inside the sharedMem structure.
*
* Parameters:
* context A pointer to an initialized TEE Context.
*
* sharedMem A pointer to a Shared Memory structure to allocate:
* * Before calling this function, the Client Application MUST have set the size,
* and flags fields.
* * On return, for a successful allocation the Implementation MUST have set the
* pointer buffer to the address of the allocated block, otherwise it MUST set
* buffer to NULL.
*
* Return:
* TEEC_Result TEEC_SUCCESS: The allocation was successful.
* TEEC_ERROR_OUT_OF_MEMORY: The allocation could not be completed due to resource
* constraints.
* Another error code: Allocation was not successful for another reason.
*/
TEEC_Result TEEC_AllocateSharedMemory(TEEC_Context* context, TEEC_SharedMemory* sharedMem);
/* TEEC_ReleaseSharedMemory
*
* This function deregisters or deallocates a previously initialized block of Shared Memory.
*
* Parameters:
* sharedMem A pointer to a valid Shared Memory structure.
*/
void TEEC_ReleaseSharedMemory(TEEC_SharedMemory* sharedMem);
/* TEEC_OpenSession
*
* This function opens a new Session between the Client Application and the specified Trusted
* Application.
*
* Parameters:
* context A pointer to an initialized TEE Context.
*
* session A pointer to a Session structure to open.
*
* destination A pointer to a structure containing the UUID of the destination Trusted
* Application.
*
* connectionMethod The method of connection to use.
*
* connectionData Any necessary data required to support the connection method chosen.
*
* operation A pointer to an Operation containing a set of Parameters to exchange with the
* Trusted Application, or NULL if no parameters are to be exchanged or if the
* operation cannot be cancelled.
*
* returnOrigin A pointer to a variable which will contain the return origin. This field may be
* NULL if the return origin is not needed.
*
* Return:
* TEEC_Result * If the returnOrigin is different from TEEC_ORIGIN_TRUSTED_APP, a TEEC Return Code.
* * If the returnOrigin is equal to TEEC_ORIGIN_TRUSTED_APP, a return code defined by
* the protocol between the Client Application and the Trusted Application. In any
* case, a return code set to TEEC_SUCCESS means that the session was successfully
* opened and a return code different from TEEC_SUCCESS means that the session
* opening failed.
*/
TEEC_Result TEEC_OpenSession(TEEC_Context* context,
TEEC_Session* session,
const TEEC_UUID* destination,
uint32_t connectionMethod,
const void* connectionData,
TEEC_Operation* operation,
uint32_t* returnOrigin);
/* TEEC_CloseSession
*
* This function closes a Session which has been opened with a Trusted Application.
*
* Parameters:
* session The session to close.
*/
void TEEC_CloseSession(TEEC_Session* session);
/* TEEC_InvokeCommand
*
* This function invokes a Command within the specified Session.
*
* Parameters:
* session The open Session in which the command will be invoked.
* commandID The identifier of the Command within the Trusted Application to invoke. The meaning
* of each Command Identifier must be defined in the protocol exposed by the Trusted
* Application.
* operation A pointer to a Client Application initialized TEEC_Operation structure, or NULL if
* there is no payload to send or if the Command does not need to support cancellation.
* returnOrigin A pointer to a variable which will contain the return origin. This field may be NULL
* if the return origin is not needed.
*
* Return:
* TEEC_Result * If the returnOrigin is different from TEEC_ORIGIN_TRUSTED_APP, a TEEC Return Code.
* * If the returnOrigin is TEEC_ORIGIN_TRUSTED_APP, a return code defined by the
* Trusted Application protocol.
*/
TEEC_Result TEEC_InvokeCommand(TEEC_Session* session,
uint32_t commandID,
TEEC_Operation* operation,
uint32_t* returnOrigin);
/* TEEC_RequestCancellation
*
* This function requests the cancellation of a pending open Session operation or a Command
* invocation operation. As this is a synchronous API, this function must be called from a thread
* other than the one executing the TEEC_OpenSession or TEEC_InvokeCommand function.
*
* Parameters:
* operation A pointer to a Client Application instantiated Operation structure.
*/
void TEEC_RequestCancellation(TEEC_Operation* operation);
__END_CDECLS