1 /* 2 * Copyright (c) 2001-2019, Arm Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef _CC_PROD_ASSET_H 8 #define _CC_PROD_ASSET_H 9 10 /*! 11 @file 12 @brief This file contains the functions and definitions for the OEM Asset provisioning. 13 */ 14 15 #ifdef __cplusplus 16 extern "C" 17 { 18 #endif 19 #include "cc_bitops.h" 20 #include "cc_prod.h" 21 22 #define PROD_ASSET_PROV_TOKEN 0x50726F64UL // "Prov" 23 #define PROD_ASSET_PROV_VERSION 0x10000UL 24 25 // parameters for generating the temporary key 26 #define PROD_KEY_RTL_KEY_SIZE 16 27 #define PROD_KEY_TMP_KEY_SIZE 16 28 #define PROD_KEY_TMP_LABEL_SIZE 7 29 #define PROD_ICV_KEY_TMP_LABEL "KEY ICV" 30 #define PROD_OEM_KEY_TMP_LABEL "KEY OEM" 31 #define PROD_KEY_TMP_CONTEXT_SIZE 16 32 #define PROD_KEY_TMP_CONTEXT_WORD_SIZE (PROD_KEY_TMP_CONTEXT_SIZE/CC_32BIT_WORD_SIZE) 33 34 // parameters for generating the provisioning key 35 #define PROD_KPROV_KEY_SIZE 16 36 #define PROD_KPROV_LABEL_SIZE 1 37 #define PROD_LABEL "P" 38 #define PROD_KPROV_CONTEXT_SIZE 4 39 #define PROD_ICV_ENC_CONTEXT "EICV" 40 #define PROD_ICV_PROV_CONTEXT "PICV" 41 #define PROD_OEM_ENC_CONTEXT "Kce " 42 #define PROD_OEM_PROV_CONTEXT "Kcp " 43 44 // production asset patameters 45 #define PROD_ASSET_NONCE_SIZE 12 46 #define PROD_ASSET_TAG_SIZE 16 47 #define PROD_ASSET_RESERVED1_VAL 0x52657631UL // Rev1 48 #define PROD_ASSET_RESERVED2_VAL 0x52657632UL // Rev2 49 #define PROD_ASSET_RESERVED_WORD_SIZE 2 50 #define PROD_ASSET_RESERVED_SIZE (PROD_ASSET_RESERVED_WORD_SIZE*CC_32BIT_WORD_SIZE) 51 #define PROD_ASSET_ADATA_SIZE (3*CC_32BIT_WORD_SIZE+PROD_ASSET_RESERVED_SIZE) // token||version||size||reserved 52 53 typedef enum { 54 PROD_ASSET_ENTITY_TYPE_ICV = 1, 55 PROD_ASSET_ENTITY_TYPE_OEM = 2, 56 PROD_ASSET_ENTITY_TYPE_RESERVED = 0x7FFFFFFF, 57 }CCProductionEntityType_t; 58 59 typedef enum { 60 PROD_ASSET_TYPE_KCE = 1, 61 PROD_ASSET_TYPE_KCP = 2, 62 PROD_ASSET_TYPE_KEY_RESERVED = 0x7FFFFFFF, 63 }CCProductionAssetKeyType_t; 64 65 66 typedef struct { 67 uint32_t token; 68 uint32_t version; 69 uint32_t assetSize; 70 uint32_t reserved[PROD_ASSET_RESERVED_WORD_SIZE]; 71 uint8_t nonce[PROD_ASSET_NONCE_SIZE]; 72 uint8_t encAsset[PROD_ASSET_SIZE+PROD_ASSET_TAG_SIZE]; 73 }CCProdAssetPkg_t; // Total size must be PROD_ASSET_PKG_SIZE 74 75 #ifdef __cplusplus 76 } 77 #endif 78 79 #endif /*_CC_PROD_ASSET_H */ 80