18eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/**
28eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * @file   tci.h
38eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * @brief  Contains TCI (Trustlet Control
48eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Interface) definitions and data structures
58eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park *
68eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Copyright Giesecke & Devrient GmbH 2012
78eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park *
88eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Redistribution and use in source and binary forms, with or without
98eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * modification, are permitted provided that the following conditions
108eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * are met:
118eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 1. Redistributions of source code must retain the above copyright
128eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park *    notice, this list of conditions and the following disclaimer.
138eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 2. Redistributions in binary form must reproduce the above copyright
148eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park *    notice, this list of conditions and the following disclaimer in the
158eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park *    documentation and/or other materials provided with the distribution.
168eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 3. The name of the author may not be used to endorse or promote
178eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park *    products derived from this software without specific prior
188eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park *    written permission.
198eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park *
208eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
218eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
228eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
238eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
248eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
258eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
268eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
278eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
288eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
298eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
308eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
318eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */
328eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
338eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#ifndef __TCI_H__
348eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define __TCI_H__
358eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
368eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
378eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef uint32_t tciCommandId_t;
388eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef uint32_t tciResponseId_t;
398eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef uint32_t tciReturnCode_t;
408eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
418eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
428eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/**< Responses have bit 31 set */
438eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RSP_ID_MASK (1U << 31)
448eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RSP_ID(cmdId) (((uint32_t)(cmdId)) | RSP_ID_MASK)
458eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define IS_CMD(cmdId) ((((uint32_t)(cmdId)) & RSP_ID_MASK) == 0)
468eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define IS_RSP(cmdId) ((((uint32_t)(cmdId)) & RSP_ID_MASK) == RSP_ID_MASK)
478eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
488eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
498eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/**
508eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Return codes
518eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */
528eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_OK                    0
538eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_UNKNOWN_CMD       1
548eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_NOT_SUPPORTED     2
558eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_INVALID_BUFFER    3
568eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_INVALID_KEY_SIZE  4
578eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_INVALID_KEY_TYPE  5
588eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_INVALID_LENGTH    6
598eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_INVALID_EXPONENT  7
608eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_KEY_GENERATION    8
618eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_SIGN              9
628eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_VERIFY            10
638eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_DIGEST            11
648eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_SECURE_OBJECT     12
658eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define RET_ERR_INTERNAL_ERROR    13
668eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/* ... add more error codes when needed */
678eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
688eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
698eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/**
708eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * TCI command header.
718eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */
728eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct{
738eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park    tciCommandId_t commandId; /**< Command ID */
748eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} tciCommandHeader_t;
758eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
768eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
778eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/**
788eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * TCI response header.
798eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */
808eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct{
818eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park    tciResponseId_t     responseId; /**< Response ID (must be command ID | RSP_ID_MASK )*/
828eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park    tciReturnCode_t     returnCode; /**< Return code of command */
838eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} tciResponseHeader_t;
848eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park
858eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#endif // __TCI_H__
86