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