mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 18:14:24 +00:00
Merge changes If9672598,I219c49d3 into integration
* changes: feat(cert-create): add pkcs11 engine support fix(cert-create): key: Avoid having a temporary value for pkey in key_load
This commit is contained in:
commit
9c44778818
6 changed files with 108 additions and 58 deletions
|
@ -216,10 +216,11 @@ Certificate Generation Tool
|
||||||
|
|
||||||
The ``cert_create`` tool is built and runs on the host machine as part of the
|
The ``cert_create`` tool is built and runs on the host machine as part of the
|
||||||
TF-A build process when ``GENERATE_COT=1``. It takes the boot loader images
|
TF-A build process when ``GENERATE_COT=1``. It takes the boot loader images
|
||||||
and keys as inputs (keys must be in PEM format) and generates the
|
and keys as inputs and generates the certificates (in DER format) required to
|
||||||
certificates (in DER format) required to establish the CoT. New keys can be
|
establish the CoT. The input keys must either be a file in PEM format or a
|
||||||
generated by the tool in case they are not provided. The certificates are then
|
PKCS11 URI in case a HSM is used. New keys can be generated by the tool in
|
||||||
passed as inputs to the ``fiptool`` utility for creating the FIP.
|
case they are not provided. The certificates are then passed as inputs to
|
||||||
|
the ``fiptool`` utility for creating the FIP.
|
||||||
|
|
||||||
The certificates are also stored individually in the output build directory.
|
The certificates are also stored individually in the output build directory.
|
||||||
|
|
||||||
|
|
|
@ -80,9 +80,9 @@ Common build options
|
||||||
BL31 image for the ``fip`` target. In this case, the BL31 in TF-A will not
|
BL31 image for the ``fip`` target. In this case, the BL31 in TF-A will not
|
||||||
be built.
|
be built.
|
||||||
|
|
||||||
- ``BL31_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
|
- ``BL31_KEY``: This option is used when ``GENERATE_COT=1``. It specifies a
|
||||||
file that contains the BL31 private key in PEM format. If ``SAVE_KEYS=1``,
|
file that contains the BL31 private key in PEM format or a PKCS11 URI. If
|
||||||
this file name will be used to save the key.
|
``SAVE_KEYS=1``, only a file is accepted and it will be used to save the key.
|
||||||
|
|
||||||
- ``BL32``: This is an optional build option which specifies the path to
|
- ``BL32``: This is an optional build option which specifies the path to
|
||||||
BL32 image for the ``fip`` target. In this case, the BL32 in TF-A will not
|
BL32 image for the ``fip`` target. In this case, the BL32 in TF-A will not
|
||||||
|
@ -94,16 +94,16 @@ Common build options
|
||||||
- ``BL32_EXTRA2``: This is an optional build option which specifies the path to
|
- ``BL32_EXTRA2``: This is an optional build option which specifies the path to
|
||||||
Trusted OS Extra2 image for the ``fip`` target.
|
Trusted OS Extra2 image for the ``fip`` target.
|
||||||
|
|
||||||
- ``BL32_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
|
- ``BL32_KEY``: This option is used when ``GENERATE_COT=1``. It specifies a
|
||||||
file that contains the BL32 private key in PEM format. If ``SAVE_KEYS=1``,
|
file that contains the BL32 private key in PEM format or a PKCS11 URI. If
|
||||||
this file name will be used to save the key.
|
``SAVE_KEYS=1``, only a file is accepted and it will be used to save the key.
|
||||||
|
|
||||||
- ``BL33``: Path to BL33 image in the host file system. This is mandatory for
|
- ``BL33``: Path to BL33 image in the host file system. This is mandatory for
|
||||||
``fip`` target in case TF-A BL2 is used.
|
``fip`` target in case TF-A BL2 is used.
|
||||||
|
|
||||||
- ``BL33_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
|
- ``BL33_KEY``: This option is used when ``GENERATE_COT=1``. It specifies a
|
||||||
file that contains the BL33 private key in PEM format. If ``SAVE_KEYS=1``,
|
file that contains the BL33 private key in PEM format or a PKCS11 URI. If
|
||||||
this file name will be used to save the key.
|
``SAVE_KEYS=1``, only a file is accepted and it will be used to save the key.
|
||||||
|
|
||||||
- ``BRANCH_PROTECTION``: Numeric value to enable ARMv8.3 Pointer Authentication
|
- ``BRANCH_PROTECTION``: Numeric value to enable ARMv8.3 Pointer Authentication
|
||||||
and ARMv8.5 Branch Target Identification support for TF-A BL images themselves.
|
and ARMv8.5 Branch Target Identification support for TF-A BL images themselves.
|
||||||
|
@ -749,8 +749,9 @@ Common build options
|
||||||
MARCH_DIRECTIVE := -march=armv8.5-a
|
MARCH_DIRECTIVE := -march=armv8.5-a
|
||||||
|
|
||||||
- ``NON_TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
|
- ``NON_TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
|
||||||
specifies the file that contains the Non-Trusted World private key in PEM
|
specifies a file that contains the Non-Trusted World private key in PEM
|
||||||
format. If ``SAVE_KEYS=1``, this file name will be used to save the key.
|
format or a PKCS11 URI. If ``SAVE_KEYS=1``, only a file is accepted and it
|
||||||
|
will be used to save the key.
|
||||||
|
|
||||||
- ``NS_BL2U``: Path to NS_BL2U image in the host file system. This image is
|
- ``NS_BL2U``: Path to NS_BL2U image in the host file system. This image is
|
||||||
optional. It is only needed if the platform makefile specifies that it
|
optional. It is only needed if the platform makefile specifies that it
|
||||||
|
@ -827,10 +828,10 @@ Common build options
|
||||||
instead of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1
|
instead of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1
|
||||||
entrypoint) or 1 (CPU reset to SP_MIN entrypoint). The default value is 0.
|
entrypoint) or 1 (CPU reset to SP_MIN entrypoint). The default value is 0.
|
||||||
|
|
||||||
- ``ROT_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
|
- ``ROT_KEY``: This option is used when ``GENERATE_COT=1``. It specifies a
|
||||||
file that contains the ROT private key in PEM format and enforces public key
|
file that contains the ROT private key in PEM format or a PKCS11 URI and
|
||||||
hash generation. If ``SAVE_KEYS=1``, this
|
enforces public key hash generation. If ``SAVE_KEYS=1``, only a file is
|
||||||
file name will be used to save the key.
|
accepted and it will be used to save the key.
|
||||||
|
|
||||||
- ``SAVE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the
|
- ``SAVE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the
|
||||||
certificate generation tool to save the keys used to establish the Chain of
|
certificate generation tool to save the keys used to establish the Chain of
|
||||||
|
@ -840,9 +841,9 @@ Common build options
|
||||||
If a SCP_BL2 image is present then this option must be passed for the ``fip``
|
If a SCP_BL2 image is present then this option must be passed for the ``fip``
|
||||||
target.
|
target.
|
||||||
|
|
||||||
- ``SCP_BL2_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
|
- ``SCP_BL2_KEY``: This option is used when ``GENERATE_COT=1``. It specifies a
|
||||||
file that contains the SCP_BL2 private key in PEM format. If ``SAVE_KEYS=1``,
|
file that contains the SCP_BL2 private key in PEM format or a PKCS11 URI.
|
||||||
this file name will be used to save the key.
|
If ``SAVE_KEYS=1``, only a file is accepted and it will be used to save the key.
|
||||||
|
|
||||||
- ``SCP_BL2U``: Path to SCP_BL2U image in the host file system. This image is
|
- ``SCP_BL2U``: Path to SCP_BL2U image in the host file system. This image is
|
||||||
optional. It is only needed if the platform makefile specifies that it
|
optional. It is only needed if the platform makefile specifies that it
|
||||||
|
@ -959,8 +960,9 @@ Common build options
|
||||||
already exist in disk, they will be overwritten without further notice.
|
already exist in disk, they will be overwritten without further notice.
|
||||||
|
|
||||||
- ``TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
|
- ``TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
|
||||||
specifies the file that contains the Trusted World private key in PEM
|
specifies a file that contains the Trusted World private key in PEM
|
||||||
format. If ``SAVE_KEYS=1``, this file name will be used to save the key.
|
format or a PKCS11 URI. If ``SAVE_KEYS=1``, only a file is accepted and
|
||||||
|
it will be used to save the key.
|
||||||
|
|
||||||
- ``TSP_INIT_ASYNC``: Choose BL32 initialization method as asynchronous or
|
- ``TSP_INIT_ASYNC``: Choose BL32 initialization method as asynchronous or
|
||||||
synchronous, (see "Initializing a BL32 Image" section in
|
synchronous, (see "Initializing a BL32 Image" section in
|
||||||
|
|
|
@ -414,35 +414,35 @@ static key_t cot_keys[] = {
|
||||||
[ROT_KEY] = {
|
[ROT_KEY] = {
|
||||||
.id = ROT_KEY,
|
.id = ROT_KEY,
|
||||||
.opt = "rot-key",
|
.opt = "rot-key",
|
||||||
.help_msg = "Root Of Trust key (input/output file)",
|
.help_msg = "Root Of Trust key file or PKCS11 URI",
|
||||||
.desc = "Root Of Trust key"
|
.desc = "Root Of Trust key"
|
||||||
},
|
},
|
||||||
|
|
||||||
[SWD_ROT_KEY] = {
|
[SWD_ROT_KEY] = {
|
||||||
.id = SWD_ROT_KEY,
|
.id = SWD_ROT_KEY,
|
||||||
.opt = "swd-rot-key",
|
.opt = "swd-rot-key",
|
||||||
.help_msg = "Secure World Root of Trust key",
|
.help_msg = "Secure World Root of Trust key file or PKCS11 URI",
|
||||||
.desc = "Secure World Root of Trust key"
|
.desc = "Secure World Root of Trust key"
|
||||||
},
|
},
|
||||||
|
|
||||||
[CORE_SWD_KEY] = {
|
[CORE_SWD_KEY] = {
|
||||||
.id = CORE_SWD_KEY,
|
.id = CORE_SWD_KEY,
|
||||||
.opt = "core-swd-key",
|
.opt = "core-swd-key",
|
||||||
.help_msg = "Core Secure World key",
|
.help_msg = "Core Secure World key file or PKCS11 URI",
|
||||||
.desc = "Core Secure World key"
|
.desc = "Core Secure World key"
|
||||||
},
|
},
|
||||||
|
|
||||||
[PROT_KEY] = {
|
[PROT_KEY] = {
|
||||||
.id = PROT_KEY,
|
.id = PROT_KEY,
|
||||||
.opt = "prot-key",
|
.opt = "prot-key",
|
||||||
.help_msg = "Platform Root of Trust key",
|
.help_msg = "Platform Root of Trust key file or PKCS11 URI",
|
||||||
.desc = "Platform Root of Trust key"
|
.desc = "Platform Root of Trust key"
|
||||||
},
|
},
|
||||||
|
|
||||||
[PLAT_KEY] = {
|
[PLAT_KEY] = {
|
||||||
.id = PLAT_KEY,
|
.id = PLAT_KEY,
|
||||||
.opt = "plat-key",
|
.opt = "plat-key",
|
||||||
.help_msg = "Platform key",
|
.help_msg = "Platform key file or PKCS11 URI",
|
||||||
.desc = "Platform key"
|
.desc = "Platform key"
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -540,42 +540,42 @@ static key_t cot_keys[] = {
|
||||||
[ROT_KEY] = {
|
[ROT_KEY] = {
|
||||||
.id = ROT_KEY,
|
.id = ROT_KEY,
|
||||||
.opt = "rot-key",
|
.opt = "rot-key",
|
||||||
.help_msg = "Root Of Trust key (input/output file)",
|
.help_msg = "Root Of Trust key file or PKCS11 URI",
|
||||||
.desc = "Root Of Trust key"
|
.desc = "Root Of Trust key"
|
||||||
},
|
},
|
||||||
|
|
||||||
[TRUSTED_WORLD_KEY] = {
|
[TRUSTED_WORLD_KEY] = {
|
||||||
.id = TRUSTED_WORLD_KEY,
|
.id = TRUSTED_WORLD_KEY,
|
||||||
.opt = "trusted-world-key",
|
.opt = "trusted-world-key",
|
||||||
.help_msg = "Trusted World key (input/output file)",
|
.help_msg = "Trusted World key file or PKCS11 URI",
|
||||||
.desc = "Trusted World key"
|
.desc = "Trusted World key"
|
||||||
},
|
},
|
||||||
|
|
||||||
[SCP_FW_CONTENT_CERT_KEY] = {
|
[SCP_FW_CONTENT_CERT_KEY] = {
|
||||||
.id = SCP_FW_CONTENT_CERT_KEY,
|
.id = SCP_FW_CONTENT_CERT_KEY,
|
||||||
.opt = "scp-fw-key",
|
.opt = "scp-fw-key",
|
||||||
.help_msg = "SCP Firmware Content Certificate key (input/output file)",
|
.help_msg = "SCP Firmware Content Certificate key file or PKCS11 URI",
|
||||||
.desc = "SCP Firmware Content Certificate key"
|
.desc = "SCP Firmware Content Certificate key"
|
||||||
},
|
},
|
||||||
|
|
||||||
[SOC_FW_CONTENT_CERT_KEY] = {
|
[SOC_FW_CONTENT_CERT_KEY] = {
|
||||||
.id = SOC_FW_CONTENT_CERT_KEY,
|
.id = SOC_FW_CONTENT_CERT_KEY,
|
||||||
.opt = "soc-fw-key",
|
.opt = "soc-fw-key",
|
||||||
.help_msg = "SoC Firmware Content Certificate key (input/output file)",
|
.help_msg = "SoC Firmware Content Certificate key file or PKCS11 URI",
|
||||||
.desc = "SoC Firmware Content Certificate key"
|
.desc = "SoC Firmware Content Certificate key"
|
||||||
},
|
},
|
||||||
|
|
||||||
[TRUSTED_OS_FW_CONTENT_CERT_KEY] = {
|
[TRUSTED_OS_FW_CONTENT_CERT_KEY] = {
|
||||||
.id = TRUSTED_OS_FW_CONTENT_CERT_KEY,
|
.id = TRUSTED_OS_FW_CONTENT_CERT_KEY,
|
||||||
.opt = "tos-fw-key",
|
.opt = "tos-fw-key",
|
||||||
.help_msg = "Trusted OS Firmware Content Certificate key (input/output file)",
|
.help_msg = "Trusted OS Firmware Content Certificate key file or PKCS11 URI",
|
||||||
.desc = "Trusted OS Firmware Content Certificate key"
|
.desc = "Trusted OS Firmware Content Certificate key"
|
||||||
},
|
},
|
||||||
|
|
||||||
[PROT_KEY] = {
|
[PROT_KEY] = {
|
||||||
.id = PROT_KEY,
|
.id = PROT_KEY,
|
||||||
.opt = "prot-key",
|
.opt = "prot-key",
|
||||||
.help_msg = "Platform Root of Trust key",
|
.help_msg = "Platform Root of Trust key file or PKCS11 URI",
|
||||||
.desc = "Platform Root of Trust key"
|
.desc = "Platform Root of Trust key"
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -9,7 +9,11 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
/* Suppress OpenSSL engine deprecation warnings */
|
||||||
|
#define OPENSSL_SUPPRESS_DEPRECATED
|
||||||
|
|
||||||
#include <openssl/conf.h>
|
#include <openssl/conf.h>
|
||||||
|
#include <openssl/engine.h>
|
||||||
#include <openssl/evp.h>
|
#include <openssl/evp.h>
|
||||||
#include <openssl/pem.h>
|
#include <openssl/pem.h>
|
||||||
|
|
||||||
|
@ -189,30 +193,69 @@ int key_create(key_t *key, int type, int key_bits)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static EVP_PKEY *key_load_pkcs11(const char *uri)
|
||||||
|
{
|
||||||
|
char *key_pass;
|
||||||
|
EVP_PKEY *pkey;
|
||||||
|
ENGINE *e;
|
||||||
|
|
||||||
|
ENGINE_load_builtin_engines();
|
||||||
|
e = ENGINE_by_id("pkcs11");
|
||||||
|
if (!e) {
|
||||||
|
fprintf(stderr, "Cannot Load PKCS#11 ENGINE\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ENGINE_init(e)) {
|
||||||
|
fprintf(stderr, "Cannot ENGINE_init\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
key_pass = getenv("PKCS11_PIN");
|
||||||
|
if (key_pass) {
|
||||||
|
if (!ENGINE_ctrl_cmd_string(e, "PIN", key_pass, 0)) {
|
||||||
|
fprintf(stderr, "Cannot Set PKCS#11 PIN\n");
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pkey = ENGINE_load_private_key(e, uri, NULL, NULL);
|
||||||
|
if (pkey)
|
||||||
|
return pkey;
|
||||||
|
err:
|
||||||
|
ENGINE_free(e);
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int key_load(key_t *key, unsigned int *err_code)
|
int key_load(key_t *key, unsigned int *err_code)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
EVP_PKEY *k;
|
|
||||||
|
|
||||||
if (key->fn) {
|
if (key->fn) {
|
||||||
/* Load key from file */
|
if (!strncmp(key->fn, "pkcs11:", 7)) {
|
||||||
fp = fopen(key->fn, "r");
|
/* Load key through pkcs11 */
|
||||||
if (fp) {
|
key->key = key_load_pkcs11(key->fn);
|
||||||
k = PEM_read_PrivateKey(fp, &key->key, NULL, NULL);
|
|
||||||
fclose(fp);
|
|
||||||
if (k) {
|
|
||||||
*err_code = KEY_ERR_NONE;
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
ERROR("Cannot load key from %s\n", key->fn);
|
|
||||||
*err_code = KEY_ERR_LOAD;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
WARN("Cannot open file %s\n", key->fn);
|
/* Load key from file */
|
||||||
*err_code = KEY_ERR_OPEN;
|
fp = fopen(key->fn, "r");
|
||||||
|
if (fp) {
|
||||||
|
key->key = PEM_read_PrivateKey(fp, NULL, NULL, NULL);
|
||||||
|
fclose(fp);
|
||||||
|
} else {
|
||||||
|
WARN("Cannot open file %s\n", key->fn);
|
||||||
|
*err_code = KEY_ERR_OPEN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (key->key) {
|
||||||
|
*err_code = KEY_ERR_NONE;
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
ERROR("Cannot load key from %s\n", key->fn);
|
||||||
|
*err_code = KEY_ERR_LOAD;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
VERBOSE("Key filename not specified\n");
|
VERBOSE("Key not specified\n");
|
||||||
*err_code = KEY_ERR_FILENAME;
|
*err_code = KEY_ERR_FILENAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,6 +267,10 @@ int key_store(key_t *key)
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
if (key->fn) {
|
if (key->fn) {
|
||||||
|
if (!strncmp(key->fn, "pkcs11:", 7)) {
|
||||||
|
ERROR("PKCS11 URI provided instead of a file");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
fp = fopen(key->fn, "w");
|
fp = fopen(key->fn, "w");
|
||||||
if (fp) {
|
if (fp) {
|
||||||
PEM_write_PrivateKey(fp, key->key,
|
PEM_write_PrivateKey(fp, key->key,
|
||||||
|
|
|
@ -15,43 +15,43 @@ static key_t tbb_keys[] = {
|
||||||
[ROT_KEY] = {
|
[ROT_KEY] = {
|
||||||
.id = ROT_KEY,
|
.id = ROT_KEY,
|
||||||
.opt = "rot-key",
|
.opt = "rot-key",
|
||||||
.help_msg = "Root Of Trust key (input/output file)",
|
.help_msg = "Root Of Trust key file or PKCS11 URI",
|
||||||
.desc = "Root Of Trust key"
|
.desc = "Root Of Trust key"
|
||||||
},
|
},
|
||||||
[TRUSTED_WORLD_KEY] = {
|
[TRUSTED_WORLD_KEY] = {
|
||||||
.id = TRUSTED_WORLD_KEY,
|
.id = TRUSTED_WORLD_KEY,
|
||||||
.opt = "trusted-world-key",
|
.opt = "trusted-world-key",
|
||||||
.help_msg = "Trusted World key (input/output file)",
|
.help_msg = "Trusted World key file or PKCS11 URI",
|
||||||
.desc = "Trusted World key"
|
.desc = "Trusted World key"
|
||||||
},
|
},
|
||||||
[NON_TRUSTED_WORLD_KEY] = {
|
[NON_TRUSTED_WORLD_KEY] = {
|
||||||
.id = NON_TRUSTED_WORLD_KEY,
|
.id = NON_TRUSTED_WORLD_KEY,
|
||||||
.opt = "non-trusted-world-key",
|
.opt = "non-trusted-world-key",
|
||||||
.help_msg = "Non Trusted World key (input/output file)",
|
.help_msg = "Non Trusted World key file or PKCS11 URI",
|
||||||
.desc = "Non Trusted World key"
|
.desc = "Non Trusted World key"
|
||||||
},
|
},
|
||||||
[SCP_FW_CONTENT_CERT_KEY] = {
|
[SCP_FW_CONTENT_CERT_KEY] = {
|
||||||
.id = SCP_FW_CONTENT_CERT_KEY,
|
.id = SCP_FW_CONTENT_CERT_KEY,
|
||||||
.opt = "scp-fw-key",
|
.opt = "scp-fw-key",
|
||||||
.help_msg = "SCP Firmware Content Certificate key (input/output file)",
|
.help_msg = "SCP Firmware Content Certificate key file or PKCS11 URI",
|
||||||
.desc = "SCP Firmware Content Certificate key"
|
.desc = "SCP Firmware Content Certificate key"
|
||||||
},
|
},
|
||||||
[SOC_FW_CONTENT_CERT_KEY] = {
|
[SOC_FW_CONTENT_CERT_KEY] = {
|
||||||
.id = SOC_FW_CONTENT_CERT_KEY,
|
.id = SOC_FW_CONTENT_CERT_KEY,
|
||||||
.opt = "soc-fw-key",
|
.opt = "soc-fw-key",
|
||||||
.help_msg = "SoC Firmware Content Certificate key (input/output file)",
|
.help_msg = "SoC Firmware Content Certificate key file or PKCS11 URI",
|
||||||
.desc = "SoC Firmware Content Certificate key"
|
.desc = "SoC Firmware Content Certificate key"
|
||||||
},
|
},
|
||||||
[TRUSTED_OS_FW_CONTENT_CERT_KEY] = {
|
[TRUSTED_OS_FW_CONTENT_CERT_KEY] = {
|
||||||
.id = TRUSTED_OS_FW_CONTENT_CERT_KEY,
|
.id = TRUSTED_OS_FW_CONTENT_CERT_KEY,
|
||||||
.opt = "tos-fw-key",
|
.opt = "tos-fw-key",
|
||||||
.help_msg = "Trusted OS Firmware Content Certificate key (input/output file)",
|
.help_msg = "Trusted OS Firmware Content Certificate key file or PKCS11 URI",
|
||||||
.desc = "Trusted OS Firmware Content Certificate key"
|
.desc = "Trusted OS Firmware Content Certificate key"
|
||||||
},
|
},
|
||||||
[NON_TRUSTED_FW_CONTENT_CERT_KEY] = {
|
[NON_TRUSTED_FW_CONTENT_CERT_KEY] = {
|
||||||
.id = NON_TRUSTED_FW_CONTENT_CERT_KEY,
|
.id = NON_TRUSTED_FW_CONTENT_CERT_KEY,
|
||||||
.opt = "nt-fw-key",
|
.opt = "nt-fw-key",
|
||||||
.help_msg = "Non Trusted Firmware Content Certificate key (input/output file)",
|
.help_msg = "Non Trusted Firmware Content Certificate key file or PKCS11 URI",
|
||||||
.desc = "Non Trusted Firmware Content Certificate key"
|
.desc = "Non Trusted Firmware Content Certificate key"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue