blob: 8bcb0704d376f5681b6bb12671f2b0198126277b [file] [log] [blame]
Juan Castillo11abdcd2014-10-21 11:30:42 +01001/*
2 * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * Redistributions of source code must retain the above copyright notice, this
8 * list of conditions and the following disclaimer.
9 *
10 * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 *
14 * Neither the name of ARM nor the names of its contributors may be used
15 * to endorse or promote products derived from this software without specific
16 * prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#include <stdio.h>
32#include <string.h>
33#include <openssl/err.h>
34#include <openssl/x509v3.h>
35#include "ext.h"
36#include "platform_oid.h"
Juan Castilloe6d30e92015-06-12 11:27:59 +010037#include "tbbr/tbb_ext.h"
38#include "tbbr/tbb_key.h"
Juan Castillo11abdcd2014-10-21 11:30:42 +010039
Juan Castilloe6d30e92015-06-12 11:27:59 +010040/* TODO: get these values from the command line */
41#define TRUSTED_WORLD_NVCTR_VALUE 0
42#define NORMAL_WORLD_NVCTR_VALUE 0
43
44static ext_t tbb_ext[] = {
Juan Castillobe801202015-12-03 10:19:21 +000045 [TRUSTED_FW_NVCOUNTER_EXT] = {
46 .oid = TRUSTED_FW_NVCOUNTER_OID,
Juan Castilloe6d30e92015-06-12 11:27:59 +010047 .sn = "TrustedWorldNVCounter",
48 .ln = "Trusted World Non-Volatile counter",
49 .asn1_type = V_ASN1_INTEGER,
50 .type = EXT_TYPE_NVCOUNTER,
51 .data.nvcounter = TRUSTED_WORLD_NVCTR_VALUE
Juan Castillo11abdcd2014-10-21 11:30:42 +010052 },
Juan Castillobe801202015-12-03 10:19:21 +000053 [NON_TRUSTED_FW_NVCOUNTER_EXT] = {
54 .oid = NON_TRUSTED_FW_NVCOUNTER_OID,
Juan Castilloe6d30e92015-06-12 11:27:59 +010055 .sn = "NormalWorldNVCounter",
56 .ln = "Normal World Non-Volatile counter",
57 .asn1_type = V_ASN1_INTEGER,
58 .type = EXT_TYPE_NVCOUNTER,
59 .data.nvcounter = NORMAL_WORLD_NVCTR_VALUE
Juan Castillo11abdcd2014-10-21 11:30:42 +010060 },
Juan Castillobe801202015-12-03 10:19:21 +000061 [TRUSTED_BOOT_FW_HASH_EXT] = {
62 .oid = TRUSTED_BOOT_FW_HASH_OID,
63 .opt = "tb-fw",
Juan Castillo212f7382015-12-15 16:37:57 +000064 .help_msg = "Trusted Boot Firmware image file",
Juan Castillo11abdcd2014-10-21 11:30:42 +010065 .sn = "TrustedBootFirmwareHash",
Juan Castillobe801202015-12-03 10:19:21 +000066 .ln = "Trusted Boot Firmware hash (SHA256)",
Juan Castilloe6d30e92015-06-12 11:27:59 +010067 .asn1_type = V_ASN1_OCTET_STRING,
68 .type = EXT_TYPE_HASH
Juan Castillo11abdcd2014-10-21 11:30:42 +010069 },
Juan Castillobe801202015-12-03 10:19:21 +000070 [TRUSTED_WORLD_PK_EXT] = {
71 .oid = TRUSTED_WORLD_PK_OID,
Juan Castillo11abdcd2014-10-21 11:30:42 +010072 .sn = "TrustedWorldPublicKey",
73 .ln = "Trusted World Public Key",
Juan Castilloe6d30e92015-06-12 11:27:59 +010074 .asn1_type = V_ASN1_OCTET_STRING,
75 .type = EXT_TYPE_PKEY,
76 .data.key = TRUSTED_WORLD_KEY
Juan Castillo11abdcd2014-10-21 11:30:42 +010077 },
Juan Castillobe801202015-12-03 10:19:21 +000078 [NON_TRUSTED_WORLD_PK_EXT] = {
79 .oid = NON_TRUSTED_WORLD_PK_OID,
Juan Castillo11abdcd2014-10-21 11:30:42 +010080 .sn = "NonTrustedWorldPublicKey",
81 .ln = "Non-Trusted World Public Key",
Juan Castilloe6d30e92015-06-12 11:27:59 +010082 .asn1_type = V_ASN1_OCTET_STRING,
83 .type = EXT_TYPE_PKEY,
84 .data.key = NON_TRUSTED_WORLD_KEY
Juan Castillo11abdcd2014-10-21 11:30:42 +010085 },
Juan Castillobe801202015-12-03 10:19:21 +000086 [SCP_FW_CONTENT_CERT_PK_EXT] = {
87 .oid = SCP_FW_CONTENT_CERT_PK_OID,
Juan Castillo11abdcd2014-10-21 11:30:42 +010088 .sn = "SCPFirmwareContentCertPK",
89 .ln = "SCP Firmware content certificate public key",
Juan Castilloe6d30e92015-06-12 11:27:59 +010090 .asn1_type = V_ASN1_OCTET_STRING,
91 .type = EXT_TYPE_PKEY,
Juan Castillobe801202015-12-03 10:19:21 +000092 .data.key = SCP_FW_CONTENT_CERT_KEY
Juan Castillo11abdcd2014-10-21 11:30:42 +010093 },
Juan Castillobe801202015-12-03 10:19:21 +000094 [SCP_FW_HASH_EXT] = {
95 .oid = SCP_FW_HASH_OID,
96 .opt = "scp-fw",
Juan Castillo212f7382015-12-15 16:37:57 +000097 .help_msg = "SCP Firmware image file",
Juan Castillo11abdcd2014-10-21 11:30:42 +010098 .sn = "SCPFirmwareHash",
Juan Castillobe801202015-12-03 10:19:21 +000099 .ln = "SCP Firmware hash (SHA256)",
Juan Castilloe6d30e92015-06-12 11:27:59 +0100100 .asn1_type = V_ASN1_OCTET_STRING,
101 .type = EXT_TYPE_HASH
Juan Castillo11abdcd2014-10-21 11:30:42 +0100102 },
Juan Castillobe801202015-12-03 10:19:21 +0000103 [SOC_FW_CONTENT_CERT_PK_EXT] = {
104 .oid = SOC_FW_CONTENT_CERT_PK_OID,
Juan Castilloe6d30e92015-06-12 11:27:59 +0100105 .sn = "SoCFirmwareContentCertPK",
106 .ln = "SoC Firmware content certificate public key",
107 .asn1_type = V_ASN1_OCTET_STRING,
108 .type = EXT_TYPE_PKEY,
Juan Castillobe801202015-12-03 10:19:21 +0000109 .data.key = SOC_FW_CONTENT_CERT_KEY
Juan Castilloe6d30e92015-06-12 11:27:59 +0100110 },
Juan Castillobe801202015-12-03 10:19:21 +0000111 [SOC_AP_FW_HASH_EXT] = {
112 .oid = SOC_AP_FW_HASH_OID,
113 .opt = "soc-fw",
Juan Castillo212f7382015-12-15 16:37:57 +0000114 .help_msg = "SoC AP Firmware image file",
Juan Castilloe6d30e92015-06-12 11:27:59 +0100115 .sn = "SoCAPFirmwareHash",
Juan Castillobe801202015-12-03 10:19:21 +0000116 .ln = "SoC AP Firmware hash (SHA256)",
Juan Castilloe6d30e92015-06-12 11:27:59 +0100117 .asn1_type = V_ASN1_OCTET_STRING,
118 .type = EXT_TYPE_HASH
119 },
Juan Castillobe801202015-12-03 10:19:21 +0000120 [TRUSTED_OS_FW_CONTENT_CERT_PK_EXT] = {
121 .oid = TRUSTED_OS_FW_CONTENT_CERT_PK_OID,
Juan Castillo11abdcd2014-10-21 11:30:42 +0100122 .sn = "TrustedOSFirmwareContentCertPK",
123 .ln = "Trusted OS Firmware content certificate public key",
Juan Castilloe6d30e92015-06-12 11:27:59 +0100124 .asn1_type = V_ASN1_OCTET_STRING,
125 .type = EXT_TYPE_PKEY,
Juan Castillobe801202015-12-03 10:19:21 +0000126 .data.key = TRUSTED_OS_FW_CONTENT_CERT_KEY
Juan Castillo11abdcd2014-10-21 11:30:42 +0100127 },
Juan Castillobe801202015-12-03 10:19:21 +0000128 [TRUSTED_OS_FW_HASH_EXT] = {
129 .oid = TRUSTED_OS_FW_HASH_OID,
130 .opt = "tos-fw",
Juan Castillo212f7382015-12-15 16:37:57 +0000131 .help_msg = "Trusted OS image file",
Juan Castillo11abdcd2014-10-21 11:30:42 +0100132 .sn = "TrustedOSHash",
Juan Castillobe801202015-12-03 10:19:21 +0000133 .ln = "Trusted OS hash (SHA256)",
Juan Castilloe6d30e92015-06-12 11:27:59 +0100134 .asn1_type = V_ASN1_OCTET_STRING,
135 .type = EXT_TYPE_HASH
Juan Castillo11abdcd2014-10-21 11:30:42 +0100136 },
Juan Castillobe801202015-12-03 10:19:21 +0000137 [NON_TRUSTED_FW_CONTENT_CERT_PK_EXT] = {
138 .oid = NON_TRUSTED_FW_CONTENT_CERT_PK_OID,
Juan Castillo11abdcd2014-10-21 11:30:42 +0100139 .sn = "NonTrustedFirmwareContentCertPK",
140 .ln = "Non-Trusted Firmware content certificate public key",
Juan Castilloe6d30e92015-06-12 11:27:59 +0100141 .asn1_type = V_ASN1_OCTET_STRING,
142 .type = EXT_TYPE_PKEY,
Juan Castillobe801202015-12-03 10:19:21 +0000143 .data.key = NON_TRUSTED_FW_CONTENT_CERT_KEY
Juan Castillo11abdcd2014-10-21 11:30:42 +0100144 },
Juan Castillobe801202015-12-03 10:19:21 +0000145 [NON_TRUSTED_WORLD_BOOTLOADER_HASH_EXT] = {
146 .oid = NON_TRUSTED_WORLD_BOOTLOADER_HASH_OID,
147 .opt = "nt-fw",
Juan Castillo212f7382015-12-15 16:37:57 +0000148 .help_msg = "Non-Trusted World Bootloader image file",
Juan Castillo11abdcd2014-10-21 11:30:42 +0100149 .sn = "NonTrustedWorldBootloaderHash",
Juan Castillobe801202015-12-03 10:19:21 +0000150 .ln = "Non-Trusted World hash (SHA256)",
Juan Castilloe6d30e92015-06-12 11:27:59 +0100151 .asn1_type = V_ASN1_OCTET_STRING,
152 .type = EXT_TYPE_HASH
Yatharth Kochar5752b592015-08-21 15:30:55 +0100153 },
Juan Castillobe801202015-12-03 10:19:21 +0000154 [SCP_FWU_CFG_HASH_EXT] = {
155 .oid = SCP_FWU_CFG_HASH_OID,
156 .opt = "scp-fwu-cfg",
Juan Castillo212f7382015-12-15 16:37:57 +0000157 .help_msg = "SCP Firmware Update Config image file",
Yatharth Kochar5752b592015-08-21 15:30:55 +0100158 .sn = "SCPFWUpdateConfig",
Juan Castillobe801202015-12-03 10:19:21 +0000159 .ln = "SCP Firmware Update Config hash (SHA256)",
Yatharth Kochar5752b592015-08-21 15:30:55 +0100160 .asn1_type = V_ASN1_OCTET_STRING,
161 .type = EXT_TYPE_HASH,
162 .optional = 1
163 },
Juan Castillobe801202015-12-03 10:19:21 +0000164 [AP_FWU_CFG_HASH_EXT] = {
165 .oid = AP_FWU_CFG_HASH_OID,
166 .opt = "ap-fwu-cfg",
Juan Castillo212f7382015-12-15 16:37:57 +0000167 .help_msg = "AP Firmware Update Config image file",
Yatharth Kochar5752b592015-08-21 15:30:55 +0100168 .sn = "APFWUpdateConfig",
Juan Castillobe801202015-12-03 10:19:21 +0000169 .ln = "AP Firmware Update Config hash (SHA256)",
Yatharth Kochar5752b592015-08-21 15:30:55 +0100170 .asn1_type = V_ASN1_OCTET_STRING,
171 .type = EXT_TYPE_HASH,
172 .optional = 1
173 },
Juan Castillobe801202015-12-03 10:19:21 +0000174 [FWU_HASH_EXT] = {
175 .oid = FWU_HASH_OID,
176 .opt = "fwu",
Juan Castillo212f7382015-12-15 16:37:57 +0000177 .help_msg = "Firmware Updater image file",
Yatharth Kochar5752b592015-08-21 15:30:55 +0100178 .sn = "FWUpdaterHash",
Juan Castillobe801202015-12-03 10:19:21 +0000179 .ln = "Firmware Updater hash (SHA256)",
Yatharth Kochar5752b592015-08-21 15:30:55 +0100180 .asn1_type = V_ASN1_OCTET_STRING,
181 .type = EXT_TYPE_HASH,
182 .optional = 1
Juan Castilloe6d30e92015-06-12 11:27:59 +0100183 }
Juan Castillo11abdcd2014-10-21 11:30:42 +0100184};
Juan Castilloe6d30e92015-06-12 11:27:59 +0100185
186REGISTER_EXTENSIONS(tbb_ext);