xref: /rk3399_ARM-atf/tools/cert_create/src/tbbr/tbb_ext.c (revision 516beb585c23056820a854b12c77a6f62cbc5c8b)
155e291a4SJuan Castillo /*
255e291a4SJuan Castillo  * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
355e291a4SJuan Castillo  *
455e291a4SJuan Castillo  * Redistribution and use in source and binary forms, with or without
555e291a4SJuan Castillo  * modification, are permitted provided that the following conditions are met:
655e291a4SJuan Castillo  *
755e291a4SJuan Castillo  * Redistributions of source code must retain the above copyright notice, this
855e291a4SJuan Castillo  * list of conditions and the following disclaimer.
955e291a4SJuan Castillo  *
1055e291a4SJuan Castillo  * Redistributions in binary form must reproduce the above copyright notice,
1155e291a4SJuan Castillo  * this list of conditions and the following disclaimer in the documentation
1255e291a4SJuan Castillo  * and/or other materials provided with the distribution.
1355e291a4SJuan Castillo  *
1455e291a4SJuan Castillo  * Neither the name of ARM nor the names of its contributors may be used
1555e291a4SJuan Castillo  * to endorse or promote products derived from this software without specific
1655e291a4SJuan Castillo  * prior written permission.
1755e291a4SJuan Castillo  *
1855e291a4SJuan Castillo  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1955e291a4SJuan Castillo  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2055e291a4SJuan Castillo  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2155e291a4SJuan Castillo  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
2255e291a4SJuan Castillo  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2355e291a4SJuan Castillo  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2455e291a4SJuan Castillo  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2555e291a4SJuan Castillo  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2655e291a4SJuan Castillo  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2755e291a4SJuan Castillo  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2855e291a4SJuan Castillo  * POSSIBILITY OF SUCH DAMAGE.
2955e291a4SJuan Castillo  */
3055e291a4SJuan Castillo 
3155e291a4SJuan Castillo #include <stdio.h>
3255e291a4SJuan Castillo #include <string.h>
3355e291a4SJuan Castillo #include <openssl/err.h>
3455e291a4SJuan Castillo #include <openssl/x509v3.h>
3555e291a4SJuan Castillo #include "ext.h"
3655e291a4SJuan Castillo #include "platform_oid.h"
3755e291a4SJuan Castillo #include "tbbr/tbb_ext.h"
3855e291a4SJuan Castillo #include "tbbr/tbb_key.h"
3955e291a4SJuan Castillo 
4055e291a4SJuan Castillo /* TODO: get these values from the command line */
4155e291a4SJuan Castillo #define TRUSTED_WORLD_NVCTR_VALUE	0
4255e291a4SJuan Castillo #define NORMAL_WORLD_NVCTR_VALUE	0
4355e291a4SJuan Castillo 
4455e291a4SJuan Castillo static ext_t tbb_ext[] = {
45*516beb58SJuan Castillo 	[TRUSTED_FW_NVCOUNTER_EXT] = {
46*516beb58SJuan Castillo 		.oid = TRUSTED_FW_NVCOUNTER_OID,
4755e291a4SJuan Castillo 		.sn = "TrustedWorldNVCounter",
4855e291a4SJuan Castillo 		.ln = "Trusted World Non-Volatile counter",
4955e291a4SJuan Castillo 		.asn1_type = V_ASN1_INTEGER,
5055e291a4SJuan Castillo 		.type = EXT_TYPE_NVCOUNTER,
5155e291a4SJuan Castillo 		.data.nvcounter = TRUSTED_WORLD_NVCTR_VALUE
5255e291a4SJuan Castillo 	},
53*516beb58SJuan Castillo 	[NON_TRUSTED_FW_NVCOUNTER_EXT] = {
54*516beb58SJuan Castillo 		.oid = NON_TRUSTED_FW_NVCOUNTER_OID,
5555e291a4SJuan Castillo 		.sn = "NormalWorldNVCounter",
5655e291a4SJuan Castillo 		.ln = "Normal World Non-Volatile counter",
5755e291a4SJuan Castillo 		.asn1_type = V_ASN1_INTEGER,
5855e291a4SJuan Castillo 		.type = EXT_TYPE_NVCOUNTER,
5955e291a4SJuan Castillo 		.data.nvcounter = NORMAL_WORLD_NVCTR_VALUE
6055e291a4SJuan Castillo 	},
61*516beb58SJuan Castillo 	[TRUSTED_BOOT_FW_HASH_EXT] = {
62*516beb58SJuan Castillo 		.oid = TRUSTED_BOOT_FW_HASH_OID,
63*516beb58SJuan Castillo 		.opt = "tb-fw",
6455e291a4SJuan Castillo 		.sn = "TrustedBootFirmwareHash",
65*516beb58SJuan Castillo 		.ln = "Trusted Boot Firmware hash (SHA256)",
6655e291a4SJuan Castillo 		.asn1_type = V_ASN1_OCTET_STRING,
6755e291a4SJuan Castillo 		.type = EXT_TYPE_HASH
6855e291a4SJuan Castillo 	},
69*516beb58SJuan Castillo 	[TRUSTED_WORLD_PK_EXT] = {
70*516beb58SJuan Castillo 		.oid = TRUSTED_WORLD_PK_OID,
7155e291a4SJuan Castillo 		.sn = "TrustedWorldPublicKey",
7255e291a4SJuan Castillo 		.ln = "Trusted World Public Key",
7355e291a4SJuan Castillo 		.asn1_type = V_ASN1_OCTET_STRING,
7455e291a4SJuan Castillo 		.type = EXT_TYPE_PKEY,
7555e291a4SJuan Castillo 		.data.key = TRUSTED_WORLD_KEY
7655e291a4SJuan Castillo 	},
77*516beb58SJuan Castillo 	[NON_TRUSTED_WORLD_PK_EXT] = {
78*516beb58SJuan Castillo 		.oid = NON_TRUSTED_WORLD_PK_OID,
7955e291a4SJuan Castillo 		.sn = "NonTrustedWorldPublicKey",
8055e291a4SJuan Castillo 		.ln = "Non-Trusted World Public Key",
8155e291a4SJuan Castillo 		.asn1_type = V_ASN1_OCTET_STRING,
8255e291a4SJuan Castillo 		.type = EXT_TYPE_PKEY,
8355e291a4SJuan Castillo 		.data.key = NON_TRUSTED_WORLD_KEY
8455e291a4SJuan Castillo 	},
85*516beb58SJuan Castillo 	[SCP_FW_CONTENT_CERT_PK_EXT] = {
86*516beb58SJuan Castillo 		.oid = SCP_FW_CONTENT_CERT_PK_OID,
8755e291a4SJuan Castillo 		.sn = "SCPFirmwareContentCertPK",
8855e291a4SJuan Castillo 		.ln = "SCP Firmware content certificate public key",
8955e291a4SJuan Castillo 		.asn1_type = V_ASN1_OCTET_STRING,
9055e291a4SJuan Castillo 		.type = EXT_TYPE_PKEY,
91*516beb58SJuan Castillo 		.data.key = SCP_FW_CONTENT_CERT_KEY
9255e291a4SJuan Castillo 	},
93*516beb58SJuan Castillo 	[SCP_FW_HASH_EXT] = {
94*516beb58SJuan Castillo 		.oid = SCP_FW_HASH_OID,
95*516beb58SJuan Castillo 		.opt = "scp-fw",
9655e291a4SJuan Castillo 		.sn = "SCPFirmwareHash",
97*516beb58SJuan Castillo 		.ln = "SCP Firmware hash (SHA256)",
9855e291a4SJuan Castillo 		.asn1_type = V_ASN1_OCTET_STRING,
9955e291a4SJuan Castillo 		.type = EXT_TYPE_HASH
10055e291a4SJuan Castillo 	},
101*516beb58SJuan Castillo 	[SOC_FW_CONTENT_CERT_PK_EXT] = {
102*516beb58SJuan Castillo 		.oid = SOC_FW_CONTENT_CERT_PK_OID,
10355e291a4SJuan Castillo 		.sn = "SoCFirmwareContentCertPK",
10455e291a4SJuan Castillo 		.ln = "SoC Firmware content certificate public key",
10555e291a4SJuan Castillo 		.asn1_type = V_ASN1_OCTET_STRING,
10655e291a4SJuan Castillo 		.type = EXT_TYPE_PKEY,
107*516beb58SJuan Castillo 		.data.key = SOC_FW_CONTENT_CERT_KEY
10855e291a4SJuan Castillo 	},
109*516beb58SJuan Castillo 	[SOC_AP_FW_HASH_EXT] = {
110*516beb58SJuan Castillo 		.oid = SOC_AP_FW_HASH_OID,
111*516beb58SJuan Castillo 		.opt = "soc-fw",
11255e291a4SJuan Castillo 		.sn = "SoCAPFirmwareHash",
113*516beb58SJuan Castillo 		.ln = "SoC AP Firmware hash (SHA256)",
11455e291a4SJuan Castillo 		.asn1_type = V_ASN1_OCTET_STRING,
11555e291a4SJuan Castillo 		.type = EXT_TYPE_HASH
11655e291a4SJuan Castillo 	},
117*516beb58SJuan Castillo 	[TRUSTED_OS_FW_CONTENT_CERT_PK_EXT] = {
118*516beb58SJuan Castillo 		.oid = TRUSTED_OS_FW_CONTENT_CERT_PK_OID,
11955e291a4SJuan Castillo 		.sn = "TrustedOSFirmwareContentCertPK",
12055e291a4SJuan Castillo 		.ln = "Trusted OS Firmware content certificate public key",
12155e291a4SJuan Castillo 		.asn1_type = V_ASN1_OCTET_STRING,
12255e291a4SJuan Castillo 		.type = EXT_TYPE_PKEY,
123*516beb58SJuan Castillo 		.data.key = TRUSTED_OS_FW_CONTENT_CERT_KEY
12455e291a4SJuan Castillo 	},
125*516beb58SJuan Castillo 	[TRUSTED_OS_FW_HASH_EXT] = {
126*516beb58SJuan Castillo 		.oid = TRUSTED_OS_FW_HASH_OID,
127*516beb58SJuan Castillo 		.opt = "tos-fw",
12855e291a4SJuan Castillo 		.sn = "TrustedOSHash",
129*516beb58SJuan Castillo 		.ln = "Trusted OS hash (SHA256)",
13055e291a4SJuan Castillo 		.asn1_type = V_ASN1_OCTET_STRING,
13155e291a4SJuan Castillo 		.type = EXT_TYPE_HASH
13255e291a4SJuan Castillo 	},
133*516beb58SJuan Castillo 	[NON_TRUSTED_FW_CONTENT_CERT_PK_EXT] = {
134*516beb58SJuan Castillo 		.oid = NON_TRUSTED_FW_CONTENT_CERT_PK_OID,
13555e291a4SJuan Castillo 		.sn = "NonTrustedFirmwareContentCertPK",
13655e291a4SJuan Castillo 		.ln = "Non-Trusted Firmware content certificate public key",
13755e291a4SJuan Castillo 		.asn1_type = V_ASN1_OCTET_STRING,
13855e291a4SJuan Castillo 		.type = EXT_TYPE_PKEY,
139*516beb58SJuan Castillo 		.data.key = NON_TRUSTED_FW_CONTENT_CERT_KEY
14055e291a4SJuan Castillo 	},
141*516beb58SJuan Castillo 	[NON_TRUSTED_WORLD_BOOTLOADER_HASH_EXT] = {
142*516beb58SJuan Castillo 		.oid = NON_TRUSTED_WORLD_BOOTLOADER_HASH_OID,
143*516beb58SJuan Castillo 		.opt = "nt-fw",
14455e291a4SJuan Castillo 		.sn = "NonTrustedWorldBootloaderHash",
145*516beb58SJuan Castillo 		.ln = "Non-Trusted World hash (SHA256)",
14655e291a4SJuan Castillo 		.asn1_type = V_ASN1_OCTET_STRING,
14755e291a4SJuan Castillo 		.type = EXT_TYPE_HASH
148cebe1f23SYatharth Kochar 	},
149*516beb58SJuan Castillo 	[SCP_FWU_CFG_HASH_EXT] = {
150*516beb58SJuan Castillo 		.oid = SCP_FWU_CFG_HASH_OID,
151*516beb58SJuan Castillo 		.opt = "scp-fwu-cfg",
152cebe1f23SYatharth Kochar 		.sn = "SCPFWUpdateConfig",
153*516beb58SJuan Castillo 		.ln = "SCP Firmware Update Config hash (SHA256)",
154cebe1f23SYatharth Kochar 		.asn1_type = V_ASN1_OCTET_STRING,
155cebe1f23SYatharth Kochar 		.type = EXT_TYPE_HASH,
156cebe1f23SYatharth Kochar 		.optional = 1
157cebe1f23SYatharth Kochar 	},
158*516beb58SJuan Castillo 	[AP_FWU_CFG_HASH_EXT] = {
159*516beb58SJuan Castillo 		.oid = AP_FWU_CFG_HASH_OID,
160*516beb58SJuan Castillo 		.opt = "ap-fwu-cfg",
161cebe1f23SYatharth Kochar 		.sn = "APFWUpdateConfig",
162*516beb58SJuan Castillo 		.ln = "AP Firmware Update Config hash (SHA256)",
163cebe1f23SYatharth Kochar 		.asn1_type = V_ASN1_OCTET_STRING,
164cebe1f23SYatharth Kochar 		.type = EXT_TYPE_HASH,
165cebe1f23SYatharth Kochar 		.optional = 1
166cebe1f23SYatharth Kochar 	},
167*516beb58SJuan Castillo 	[FWU_HASH_EXT] = {
168*516beb58SJuan Castillo 		.oid = FWU_HASH_OID,
169*516beb58SJuan Castillo 		.opt = "fwu",
170cebe1f23SYatharth Kochar 		.sn = "FWUpdaterHash",
171*516beb58SJuan Castillo 		.ln = "Firmware Updater hash (SHA256)",
172cebe1f23SYatharth Kochar 		.asn1_type = V_ASN1_OCTET_STRING,
173cebe1f23SYatharth Kochar 		.type = EXT_TYPE_HASH,
174cebe1f23SYatharth Kochar 		.optional = 1
17555e291a4SJuan Castillo 	}
17655e291a4SJuan Castillo };
17755e291a4SJuan Castillo 
17855e291a4SJuan Castillo REGISTER_EXTENSIONS(tbb_ext);
179