18eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 28eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * @file tlTeeKeymaster_Api.h 38eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * @brief Contains TCI command definitions and data structures 48eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 58eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Copyright Giesecke & Devrient GmbH 2012 68eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 78eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Redistribution and use in source and binary forms, with or without 88eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * modification, are permitted provided that the following conditions 98eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * are met: 108eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 1. Redistributions of source code must retain the above copyright 118eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * notice, this list of conditions and the following disclaimer. 128eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 2. Redistributions in binary form must reproduce the above copyright 138eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * notice, this list of conditions and the following disclaimer in the 148eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * documentation and/or other materials provided with the distribution. 158eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 3. The name of the author may not be used to endorse or promote 168eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * products derived from this software without specific prior 178eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * written permission. 188eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 198eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 208eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 218eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 228eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 238eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 248eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 258eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 268eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 278eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 288eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 298eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 308eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 318eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 328eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#ifndef __TLTEEKEYMASTERAPI_H__ 338eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define __TLTEEKEYMASTERAPI_H__ 348eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 358eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#include "tci.h" 368eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 378eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 388eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 398eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 408eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Command ID's 418eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 428eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define CMD_ID_TEE_RSA_GEN_KEY_PAIR 1 438eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define CMD_ID_TEE_RSA_SIGN 2 448eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define CMD_ID_TEE_RSA_VERIFY 3 458eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define CMD_ID_TEE_HMAC_GEN_KEY 4 468eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define CMD_ID_TEE_HMAC_SIGN 5 478eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define CMD_ID_TEE_HMAC_VERIFY 6 488eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define CMD_ID_TEE_KEY_IMPORT 7 498eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define CMD_ID_TEE_GET_PUB_KEY 8 508eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/*... add more command ids when needed */ 518eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 528eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 538eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 548eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Command message. 558eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 568eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * @param len Length of the data to process. 578eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * @param data Data to be processed 588eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 598eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 608eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park tciCommandHeader_t header; /**< Command header */ 618eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t len; /**< Length of data to process */ 628eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} command_t; 638eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 648eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 658eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 668eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Response structure 678eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 688eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 698eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park tciResponseHeader_t header; /**< Response header */ 708eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t len; 718eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} response_t; 728eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 738eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 748eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 758eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Generate key data 768eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Response data contains generated RSA key pair data is 778eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * wrapped as below: 788eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 798eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * |-- Key metadata --|-- Public key (plaintext) --|-- Private key (encrypted) --| 808eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 818eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 828eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t type; /**< Key pair type. RSA or RSACRT */ 838eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keysize; /**< Key size in bits, e.g. 1024, 2048,.. */ 848eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t exponent; /**< Exponent number */ 858eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydata; /**< Key data buffer passed by TLC */ 868eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydatalen; /**< Length of key data buffer */ 878eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t solen; /**< Secure object length (of key data) (provided by the trustlet) */ 888eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} rsagenkey_t; 898eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 908eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 918eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 928eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * RSA sign data structure 938eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 948eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 958eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydata; /**< Key data buffer */ 968eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydatalen; /**< Length of key data buffer */ 978eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t plaindata; /**< Plaintext data buffer */ 988eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t plaindatalen; /**< Length of plaintext data buffer */ 998eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t signaturedata; /**< Signature data buffer */ 1008eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t signaturedatalen; /**< Length of signature data buffer */ 1018eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t algorithm; /**< Signing algorithm */ 1028eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} rsasign_t; 1038eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1048eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1058eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 1068eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * RSA signature verify data structure 1078eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 1088eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 1098eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydata; /**< Key data buffer */ 1108eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydatalen; /**< Length of key data buffer */ 1118eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t plaindata; /**< Plaintext data buffer */ 1128eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t plaindatalen; /**< Length of plaintext data buffer */ 1138eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t signaturedata; /**< Signature data buffer */ 1148eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t signaturedatalen; /**< Length of signature data buffer */ 1158eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t algorithm; /**< Signing algorithm */ 1168eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park bool validity; /**< Signature validity */ 1178eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} rsaverify_t; 1188eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1198eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1208eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 1218eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Generate HMAC key data 1228eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Response data contains generated HMAC key data that is 1238eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * wrapped as below: 1248eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * 1258eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * |-- HMAC key (encrypted) --| 1268eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 1278eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 1288eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydata; /**< Key data buffer passed by TLC */ 1298eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydatalen; /**< Length of key data buffer */ 1308eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t solen; /**< Secure object length (of key data) (provided by the trustlet) */ 1318eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} hmacgenkey_t; 1328eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1338eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1348eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 1358eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * HMAC sign data structure 1368eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 1378eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 1388eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydata; /**< Key data buffer */ 1398eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydatalen; /**< Length of key data buffer */ 1408eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t plaindata; /**< Plaintext data buffer */ 1418eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t plaindatalen; /**< Length of plaintext data buffer */ 1428eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t signaturedata; /**< Signature data buffer */ 1438eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t signaturedatalen; /**< Length of signature data buffer */ 1448eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t digest; /**< Digest algorithm */ 1458eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} hmacsign_t; 1468eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1478eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1488eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 1498eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * HMAC signature verify data structure 1508eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 1518eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 1528eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydata; /**< Key data buffer */ 1538eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydatalen; /**< Length of key data buffer */ 1548eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t plaindata; /**< Plaintext data buffer */ 1558eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t plaindatalen; /**< Length of plaintext data buffer */ 1568eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t signaturedata; /**< Signature data buffer */ 1578eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t signaturedatalen; /**< Length of signature data buffer */ 1588eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t digest; /**< Digest algorithm */ 1598eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park bool validity; /**< Signature validity */ 1608eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} hmacverify_t; 1618eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1628eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 1638eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * RSA private key metadata 1648eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 1658eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 1668eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t lenpriexp; /**< Private key exponent length */ 1678eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} rsaprivkeymeta_t; 1688eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1698eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1708eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 1718eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * RSA CRT private key metadata 1728eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 1738eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 1748eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t lenp; /**< Prime p length */ 1758eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t lenq; /**< Prime q length */ 1768eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t lendp; /**< DP length */ 1778eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t lendq; /**< DQ length */ 1788eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t lenqinv; /**< QP length */ 1798eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} rsacrtprivkeymeta_t; 1808eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1818eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1828eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 1838eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Key metadata (key size, modulus/exponent lengths, etc..) 1848eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 1858eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 1868eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keytype; /**< RSA key pair type. RSA or RSA CRT */ 1878eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keysize; /**< RSA key size */ 1888eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t lenpubmod; /**< Public key modulus length */ 1898eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t lenpubexp; /**< Public key exponent length */ 1908eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park union { 1918eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park rsaprivkeymeta_t rsapriv; /**< RSA private key */ 1928eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park rsacrtprivkeymeta_t rsacrtpriv; /**< RSA CRT private key */ 1938eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park }; 1948eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t rfu; /**< Reserved for future use */ 1958eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t rfulen; /**< Reserved for future use */ 1968eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} rsakeymeta_t; 1978eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 1988eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 1998eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Key import data structure 2008eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 2018eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 2028eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydata; /**< Key data buffer */ 2038eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydatalen; /**< Length of key data buffer */ 2048eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t sodata; /**< Wrapped buffer */ 2058eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t sodatalen; /**< Length of wrapped data buffer */ 2068eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} keyimport_t; 2078eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2088eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2098eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 2108eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Get public key data structure 2118eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 2128eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 2138eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t type; /**< Key type */ 2148eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydata; /**< Key data buffer */ 2158eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t keydatalen; /**< Length of key data buffer */ 2168eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t modulus; /**< Modulus */ 2178eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t moduluslen; /**< Modulus length */ 2188eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t exponent; /**< Exponent */ 2198eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park uint32_t exponentlen; /**< Exponent length */ 2208eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} getpubkey_t; 2218eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2228eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2238eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 2248eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * TCI message data. 2258eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 2268eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 2278eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park union { 2288eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park command_t command; 2298eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park response_t response; 2308eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park }; 2318eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2328eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park union { 2338eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park rsagenkey_t rsagenkey; 2348eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park rsasign_t rsasign; 2358eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park rsaverify_t rsaverify; 2368eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park hmacgenkey_t hmacgenkey; 2378eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park hmacsign_t hmacsign; 2388eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park hmacverify_t hmacverify; 2398eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park keyimport_t keyimport; 2408eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park getpubkey_t getpubkey; 2418eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park }; 2428eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2438eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} tciMessage_t, *tciMessage_ptr; 2448eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2458eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2468eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 2478eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Overall TCI structure. 2488eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 2498eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Parktypedef struct { 2508eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park tciMessage_t message; /**< TCI message */ 2518eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park} tci_t; 2528eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2538eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2548eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park/** 2558eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park * Trustlet UUID 2568eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park */ 2578eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#define TEE_KEYMASTER_TL_UUID { { 7, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } 2588eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2598eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park 2608eff0eb0768d4f98b3b1c63ff7c41c333ff1ddfcDongJin Park#endif // __TLTEEKEYMASTERAPI_H__ 261