Commit Graph

54 Commits

Author SHA1 Message Date
Hector Palacios 998598415a dey-image: generate public key after rootfs install
When TrustFence is enabled, a PKI tree is generated.
In the case of NXP platforms, the PKI contains public certificates
from which the public key needs to be extracted using an openssl
command.
In the case of STM platforms, the PKI contains directly the
public key.

In all cases, we need the public key to be installed in the
rootfs /etc/ssl/certs/ folder, so that it can be used by
swupdate to authenticate signed SWU packages.
Up to now, this was being done on the dualboot recipe, but the
installation of the public key should really be only dependant
on the fact of TF being enabled.

This commit:
 - Removes the generation of the public key from dualboot.bb.
 - Generates a patch to extract the public key from the certificate
   as part of the PKI tree generation (on NXP platforms).
 - Installs the public key during a post install function after
   the final rootfs has been created.
 - For NXP platforms, extracts the public key using openssl if
   it does not exist (for backwards compatibility).

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2023-08-21 09:21:30 +02:00
Hector Palacios ae327e8dae trustfence: stm: move generation of PKI out of sign script
Create a new script for the generation of PKI tree for STM platforms
and leave the trustfence-sign-artifact script exclusively for signing.
The new gen-pki script only requires the platform as an argument and the
path to where to save the tree (if it doesn't exist) in
CONFIG_SIGN_KEYS_PATH.

This commit also reverts commit 13c136dbc5 by getting rid of the
trustfence-genpki-native.bb recipe and moving back the PKI generation
functions into trustfence.bbclass. This recipe didn't quite guarantee
that the PKI was generated on time for the recipes that required the
keys to exist, anyway.
Instead, the PKI generation function must be called right after
do_compile() of recipe tf-a-stm32mp to be ready for do_deploy() where
the key is used.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2023-08-14 09:19:16 +02:00
Mike Engel e1976ca2fb trustfence: add environment encryption
Signed-off-by: Mike Engel <Mike.Engel@digi.com>
2023-07-28 13:29:51 +02:00
Javier Viguera 0ef9174760 Merge branch 'dey-4.0/maint' into dey-4.0/master
This merges back tag 'dey-4.0-r3.2' + some other fixes.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2023-05-26 11:27:34 +02:00
Mike Engel 999f4c87b5 trustfence: change CONFIG_CONSOLE_ENABLE_GPIO_NAME variable to be a string
This commits changes the CONFIG_CONSOLE_ENABLE_GPIO_NAME to be a string
and not an integer.

https://onedigi.atlassian.net/browse/DEL-8520

Signed-off-by: Mike Engel <Mike.Engel@digi.com>
2023-05-17 09:40:52 +02:00
Hector Palacios e600597024 Merge branch 'dey-4.0/master' into dey-4.0/maint
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2023-05-11 13:19:32 +02:00
Mike Engel c515187ed4 ccmp1: add secure console support
Signed-off-by: Mike Engel <Mike.Engel@digi.com>
2023-05-11 12:42:49 +02:00
Hector Palacios eb49d927a5 trustfence: enable auth capabilities on TF-A independently of TRUSTFENCE_SIGN
Sometimes, it may be desired that the DEY project does not sign the
artifacts, for example, if they are going to be externally signed on a
secure server. In this case, the user sets TRUSTFENCE_SIGN="0".

On STM platforms, all the variables were being set if TRUSTFENCE_SIGN="1"
and authentication support is not enabled on TF_A otherwise.
Set TF_A_SIGN_ENABLE (which adds authentication support to TF_A) always
for STM platforms (as long as the project inherits the trustfence class)
and set FIP_SIGN_ENABLE="0" if its sibling TRUSTFENCE_SIGN="0", so that
DEY doesn't sign the FIP image either.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2023-05-10 17:33:23 +02:00
Hector Palacios ea70fa6b0c trustfence: weak assign TRUSTFENCE_KEY_INDEX to 0 (default)
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2023-05-10 17:33:23 +02:00
Hector Palacios fa1c877758 trustfence: image_types: do not sign artifacts for STM platforms
For the moment, do not sign aditional artifacts, such as the ramdisk,
the kernel or the boot scripts for STM platforms.

In the specific case of the ramdisk, simply copy it over with the
expected filename extension.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2023-05-10 17:33:23 +02:00
Hector Palacios 13c136dbc5 trustfence: add recipe to generate the PKI tree
Several recipes depend on the PKI creation.
Create a small recipe to just run this function which
is moved from the trustfence.bbclass.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2023-05-10 17:33:23 +02:00
Hector Palacios 9c34c0e1eb trustfence: set STM-specific variables for signing
These variables build TF-A with authentication support and build
a signed FIP image.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2023-05-10 17:33:23 +02:00
Hector Palacios 74ed606339 trustfence: use conditionals for NXP-specific stuff
Set TRUSTFENCE_DEK_PATH to "0" for CCMP1 (not using dek.bin), as if this
was disabled.
Set temporarily TRUSTFENCE_ENCRYPT_ENVIRONMENT to "0" for CCMP1 until
environment encryption is fully supported.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2023-05-10 17:33:23 +02:00
Hector Palacios 661f59967c trustfence: add function to generate a PKI tree if it doesn't exist
The stand-alone signing script 'trustfence-sign-artifact.sh' checks
if a valid PKI tree exists (by checking the existance of four SRK
files) and if they don't, it calls trustfence-gen-pki.sh (which is
a wrapper over different generators (for HAB or AHAB) to create one.

Recipes such as 'dualboot' or 'recovery-initramfs' may need to call
openssl functions over the PKI tree. These recipes do not currently
generate the PKI tree; they expect it to be already in place.
This might not be the case if the trustfence-sign-artifact.sh script
has not been called yet.

Originally, a fake dependency on virtual/kernel recipe was made to
force it, but it doesn't quite work since the calling only happens
on deploy() while regular DEPENDS doesn't wait for this task.
If the PKI does not exist, a recipe that requires the PKI tree will
fail.

The solution is to create a function on the trustfence.bbclass that
allows any recipe to check for the existance of a PKI tree and
generate it if it doesn't exist. This is repeated inside the
trustfence-sign-artifact.sh, but it needs to be in both places
because this script must work stand-alone.

The generation of the PKI tree takes some seconds so this commit
adds a lock dir to prevent race conditions when called from
different recipes.

It also removes the fake dependency on virtual/kernel and adds a
dependency on trustfence-cst-native (which is the recipe that
provides the PKI generation tool).

Signed-off-by: Hector Palacios <hector.palacios@digi.com>

https://onedigi.atlassian.net/browse/DEL-8430
(cherry picked from commit 6a8bf7afff)
2023-03-21 13:36:58 +01:00
Hector Palacios 6a8bf7afff trustfence: add function to generate a PKI tree if it doesn't exist
The stand-alone signing script 'trustfence-sign-artifact.sh' checks
if a valid PKI tree exists (by checking the existance of four SRK
files) and if they don't, it calls trustfence-gen-pki.sh (which is
a wrapper over different generators (for HAB or AHAB) to create one.

Recipes such as 'dualboot' or 'recovery-initramfs' may need to call
openssl functions over the PKI tree. These recipes do not currently
generate the PKI tree; they expect it to be already in place.
This might not be the case if the trustfence-sign-artifact.sh script
has not been called yet.

Originally, a fake dependency on virtual/kernel recipe was made to
force it, but it doesn't quite work since the calling only happens
on deploy() while regular DEPENDS doesn't wait for this task.
If the PKI does not exist, a recipe that requires the PKI tree will
fail.

The solution is to create a function on the trustfence.bbclass that
allows any recipe to check for the existance of a PKI tree and
generate it if it doesn't exist. This is repeated inside the
trustfence-sign-artifact.sh, but it needs to be in both places
because this script must work stand-alone.

The generation of the PKI tree takes some seconds so this commit
adds a lock dir to prevent race conditions when called from
different recipes.

It also removes the fake dependency on virtual/kernel and adds a
dependency on trustfence-cst-native (which is the recipe that
provides the PKI generation tool).

Signed-off-by: Hector Palacios <hector.palacios@digi.com>

https://onedigi.atlassian.net/browse/DEL-8430
2023-03-21 09:41:36 +01:00
Javier Viguera adbb511484 meta-digi: remove True option to getVar
True is the default since long time ago, and thus not necessary. This
follows similar changes done in other layers.

Command used:

sed -e 's|\(d\.getVar \?\)( \?\([^,()]*\), \?True)|\1(\2)|g' -i $(git grep -E 'getVar ?\( ?([^,()]*), ?True\)' | cut -d':' -f1 | sort -u)

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2023-02-24 16:24:47 +01:00
Javier Viguera 9d40092ce5 meta-digi: rework u-boot support
Instead of overriding the whole do_compile function, just to reconfigure
u-boot for Trustfence, create a do_configure pre-function that takes care
of that. This allows the removal of duplicated code.

Also, disable the generation of u-boot environment artifacts. We are
not using them and so many u-boot artifacts in the deploy directory
are confusing.

Finally, adjust the names of the TF u-boot artifacts in the do_deploy
append function.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2022-12-22 12:37:46 +01:00
Gabriel Valcazar 712907b1c3 trustfence: add artifact authentication to U-Boot in signed image builds
Signed image support in U-Boot has been split into two separate configurations:
one that adds artifact authentication support and another that signs the U-Boot
binary at the end of the build. Reflect this change in meta-digi.

https://onedigi.atlassian.net/browse/DEL-7862

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2022-03-22 12:47:32 +01:00
Hector Palacios 7c1ab66835 trustfence: avoid encryption of read-only SQUASHFS
SQUASHFS read-only rootfs cannot be unencrypted on-the-fly
so skip encryption if read-only-rootfs is active.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2021-12-01 13:11:37 +01:00
Hector Palacios f4f84881d7 trustfence: if read-only rootfs enabled, add config switch to U-Boot
When TrustFence and a read-only rootfs are enabled, U-Boot must
authenticate the SQUASHFS root file system. Add config switch to force
U-Boot to authenticate this image.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2021-12-01 13:10:44 +01:00
Gabriel Valcazar e2cd4f6d9a trustfence-initramfs: remove support for platforms with NAND internal storage
This initramfs only makes sense in platforms with an eMMC as the internal
storage, due to how the partition encryption support is implemented. In
plaatforms that use NAND instead, ths initramfs offers no functionality and
increases the recovery image size, so remove it.

https://onedigi.atlassian.net/browse/DEL-7534

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2021-05-27 12:10:44 +02:00
Gabriel Valcazar 82a76a7106 trustfence: split filesystem encryption support into two variables
Previously, TRUSTFENCE_INITRAMFS_IMAGE was the only variable used to configure
rootfs encryption. Now that any partition can be encrypted and the rootfs
encryption still needs to be handled differently, use two variables instead.

    * TRUSTFENCE_ENCRYPT_PARTITIONS to control partition encryption in general
    * TRUSTFENCE_ENCRYPT_ROOTFS to control rootfs encryption

As with most trustfence functionality, enable both by default. Leave
TRUSTFENCE_INITRAMFS_IMAGE as an internal variable only.

https://onedigi.atlassian.net/browse/DEL-7174

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2021-05-27 12:10:43 +02:00
Gonzalo Ruiz 39baff1e60 trustfence: add new TRUSTFENCE_SRK_REVOKE_MASK variable
In order to revoke SRKs in platforms with AHAB we need to set a mask
during the signing/encryption process.

Create new TRUSTFENCE_SRK_REVOKE_MASK variable to export the
SRK_REVOKE_MASK variable required by the imx-boot signing script.

The revoke mask is not necessary for signing/encryption of other artifacts,
so set it by default to 0x0.

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2021-01-13 17:00:29 +01:00
Gonzalo Ruiz 25c1ea59b0 trustfence: Add custom CONFIG_SIGN_MODE to UBOOT_EXTRA_CONF
This configuration is required to sign and encrypt U-Boot images during
build time, as it is done for ccimx6ul platform.

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2020-04-08 14:23:18 +02:00
Hector Palacios 6c9341bd8a trustfence: disable environment encryption for CC8X
Environment encryption is not yet supported in U-Boot.
Unset TRUSTFENCE_ENCRYPT_ENVIRONMENT on the machine configuration
and remove the platform conditional on the class.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2020-02-12 18:50:19 +01:00
Hector Palacios 8320168821 trustfence: homogenize SIGN_MODE variables
* prefix TRUSTFENCE_ to variable SIGN_MODE for DEY
* prefix CONFIG_ to variable SIGN_MODE for script

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2020-02-12 18:50:19 +01:00
Mike Engel 909a8c9e83 Revert "ccimx8x: prohibit dey-image-qt from building when trustfence is enabled"
Added Trusfence support for the CC8X.

This reverts commit 8b5c710036.

https://jira.digi.com/browse/DEL-6917
2020-02-04 12:20:38 +01:00
Mike Engel 5beec04b6a trustfence: Add Trustfence support for CCMX8X
This commit adds Trustfence support for the CCMX8X
platform.

Signed-off-by: Mike Engel <Mike.Engel@digi.com>

https://jira.digi.com/browse/DEL-6917
2020-02-04 12:20:38 +01:00
Hector Palacios 8b5c710036 Revert "Revert "ccimx8x: prohibit dey-image-qt from building when trustfence is enabled""
Trustfence is not yet fully supported for the CC8X.
Retore the warning.

This reverts commit 78534ca779.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2019-09-03 18:42:42 +02:00
Mike Engel 78534ca779 Revert "ccimx8x: prohibit dey-image-qt from building when trustfence is enabled"
This reverts commit dce71c9348.
Add Trustfence support for the MX8X platform

Signed-off-by: Mike Engel <Mike.Engel@digi.com>
2019-07-08 17:41:01 +02:00
Gabriel Valcazar dce71c9348 ccimx8x: prohibit dey-image-qt from building when trustfence is enabled
The message log level is "fatal" so the compilation ends as soon as possible.

Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
2018-07-06 13:46:23 +02:00
Jose Diaz de Grenu 80626aa749 swupdate: update to 2017.07
Rename recipe and fix the path of the progress binary. Also on the
rocko branch of meta-swupdate several signing mechanisms are
supported, and the value is used as a string to determine which one
to use.

Signed-off-by: Jose Diaz de Grenu <Jose.DiazdeGrenu@digi.com>
2018-01-23 14:33:17 +01:00
Tatiana Leon 38740f9a04 trustfence: get bytes from the console passphrase to feed the hash method
In Python 3, feeding string objects into hash method is not supported. Hashes
work on bytes, not on characters.

So we use 'encode()' on the passphrase to get the bytes object.

See:
 * https://docs.python.org/3/howto/pyporting.html#text-versus-binary-data
 * https://docs.python.org/3/library/hashlib.html#module-hashlib

This commit fixes build failures as:

Exception: TypeError: Unicode-objects must be encoded before hashing

https://jira.digi.com/browse/DEL-3984

Signed-off-by: Tatiana Leon <tatiana.leon@digi.com>
2017-03-27 10:38:13 +02:00
David Escalona 00d22c3d7e swu-sign: do not expand private sign key in TrustFence class
- Trying to set the complete SWU packages signature key in the
  TrustFence class was causing a build error when keys were not
  yet generated. To avoid this, set only the key wildcard in the
  TrustFence class and expand the variable in the SWU packages
  recipes, when keys already exist.

https://jira.digi.com/browse/DEL-3913

Signed-off-by: David Escalona <david.escalona@digi.com>
2017-03-15 12:02:17 +01:00
David Escalona 319576805a swupdate: add sign and hash support to swupdate packages generation
- Enabled signing support while generating the swupdate
  packages for 'core-image-base' and 'dey-image-qt'. The
  signing support is only enabled when 'TUSTFENCE_SIGN=1'
  and requires the recipe to set the private key that will
  be used to generate the signature.
- Enabled hash support while generating the swupdate
  packages for 'core-image-base' and 'dey-image-qt'. The
  hash support requires the sw-description files to include
  a new line for each image and/or file that will be added
  to the update package. The hash is automatically calculated
  and replaced in the sw-description files.

https://jira.digi.com/browse/DEL-3774

Signed-off-by: David Escalona <david.escalona@digi.com>
2017-03-07 17:04:21 +01:00
Javier Viguera 55ba548d61 trustfence: add 'expand' parameter to getVar calls
Starting with Yocto 2.1, the 'expand' parameter of 'getVar' function is
mandatory. See:

http://www.yoctoproject.org/docs/2.2.1/ref-manual/ref-manual.html#migration-2.1-expand-parameter-to-getvar-and-getvarflag-now-mandatory

This fixes build failures as:

Exception: TypeError: getVar() missing 1 required positional argument: 'expand'

https://jira.digi.com/browse/DEL-3834

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2017-03-01 18:06:36 +01:00
Diaz de Grenu, Jose 262ade8908 Revert "trustfence: disable SDCARD image generation when encryption is enabled"
When encryption is enabled, the signed U-Boot image will be used for the uSD.
This allows the uSD image to boot the device and recover it from the U-Boot
console, which is its main purpose. Nevertheless, the uSD image will not be
able to boot Linux.

https://jira.digi.com/browse/DEL-2877

This reverts commit 2e13e194d9.
2016-10-31 17:03:26 +01:00
Javier Viguera ab5f50e16a meta-digi: trailing whitespace cleanup
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2016-08-31 13:52:15 +02:00
Javier Viguera 2e13e194d9 trustfence: disable SDCARD image generation when encryption is enabled
Currently we don't support booting encrypted images from an SDCARD, so
just disable the generation of such images.

https://jira.digi.com/browse/DEL-2876

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2016-08-10 16:45:38 +02:00
Diaz de Grenu, Jose 6746254558 meta-digi-dey: trustfence: add Yocto macro to unlock key revocation
By default, on closed devices you cannot revoke any key. To do so, it is
required to compile a U-Boot which instructs the HAB not to set the sticky
bit which write protects that field in the OCOTP controller.

This patch introduces a Yocto macro which allows to configure U-Boot in
that way.

In the ConnectCore 6, the value of this settings is ignored, because HAB never
sets the sticky bit which write protects that field.

https://jira.digi.com/browse/DUB-665

Signed-off-by: Diaz de Grenu, Jose <Jose.DiazdeGrenu@digi.com>
2016-08-09 20:01:59 +02:00
Diaz de Grenu, Jose a9b8d74041 Revert "meta-digi-dey: trustfence: disable encryption for the ConnectCore 6UL"
Encryption is now supported in the ConnectCore 6UL

This reverts commit 454fff56ba.

https://jira.digi.com/browse/DEL-2857

Signed-off-by: Diaz de Grenu, Jose <Jose.DiazdeGrenu@digi.com>
2016-08-08 13:15:22 +02:00
Diaz de Grenu, Jose 454fff56ba meta-digi-dey: trustfence: disable encryption for the ConnectCore 6UL
Encryption of U-Boot and kernel images is not yet supported in the Connect
Core 6 UL.

Signed-off-by: Diaz de Grenu, Jose <Jose.DiazdeGrenu@digi.com>
2016-08-04 10:34:46 +02:00
Alex Gonzalez 0588b4b388 meta-digi-dey: trustfence: Do not disable console access by default.
While performing usability testing on the TrustFence documentation, it has
been noted that in order to follow the secure boot instructions the
console needs to be enabled.

We have now moved the secure console section to the end of the
documentation so that disabling the console is the last configuration to
make in a secure system.

Signed-off-by: Alex Gonzalez <alex.gonzalez@digi.com>
2016-08-03 15:55:18 +02:00
Diaz de Grenu, Jose 9e5ee61851 meta-digi: use CAAM for environment encryption
https://jira.digi.com/browse/DUB-652

Signed-off-by: Diaz de Grenu, Jose <Jose.DiazdeGrenu@digi.com>
2016-08-01 20:00:11 +02:00
Diaz de Grenu, Jose f23d8c6abb trustfence: simplify TRUSTFENCE_ configuration macros
Adapt the U-Boot recipe to the last U-Boot Kconfig entries changes.

Simplify the name of some TRUSTFENCE_ configuration macros. These were
used to configure U-Boot, but they will also configure the uImage signature
and encryption processes.

https://jira.digi.com/browse/DUB-602
https://jira.digi.com/browse/DUB-618
https://jira.digi.com/browse/DUB-534

Signed-off-by: Diaz de Grenu, Jose <Jose.DiazdeGrenu@digi.com>
2016-07-19 15:48:12 +02:00
Javier Viguera 6f8c58291e meta-digi: add support for Trustfence secure rootfs
When Trustfence is enabled, this adds a dependence on the TF initramfs,
so it's built and added to the boot image.

It also modifies the u-boot boot script on the fly, to boot correctly
using the Trustfence initramfs.

https://jira.digi.com/browse/DEL-2278

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2016-07-07 18:04:08 +02:00
Diaz de Grenu, Jose d223bc68c2 meta-digi-dey: trustfence: fix TRUSTFENCE_UBOOT_DEK_SIZE setting
The TRUSTFENCE_UBOOT_DEK_SIZE Yocto macro maps to the UBOOT_DEK_SIZE U-Boot
Kconfig entry, which is defined as a choice entry. This makes necessary
to explicitly define the choice Kconfig entry for the configuration to
work.

Signed-off-by: Diaz de Grenu, Jose <Jose.DiazdeGrenu@digi.com>
2016-07-01 16:26:53 +02:00
Diaz de Grenu, Jose a91cc4e796 meta-digi-arm: u-boot: fix trustfence checks logic
There are several possible values for TRUSTFENCE_UBOOT_ENV_DEK:

* Not defined: if the trustfence support is not included.
               Should not include the feature.
* 32 characters: when defining a valid key.
                 Should include the feature.
* "0": when explicitly disabling the feature.
       Should not include the feature
* <other>: Invalid value, should trigger the error.

This commits fixes the logic so that 'None' (no defined) is taken as a valid
value.

Signed-off-by: Diaz de Grenu, Jose <Jose.DiazdeGrenu@digi.com>
2016-07-01 16:26:53 +02:00
Mike Engel f88ea99ed3 ccimx6ul: Removed CONSOLE_ENABLE_GPIO_NR platform specific naming.
This commit changes the CONFIG_CCIMX6SBC_CONSOLE_ENABLE_GPIO_NR define
into a platform independent setting.

Signed-off-by: Mike Engel <Mike.Engel@digi.com>

https://jira.digi.com/browse/DEL-2641
2016-06-29 17:23:21 +02:00
Jose Diaz de Grenu de Pedro 3ef4fe1f34 meta-digi-dey: trustfence: add default values for secure boot
Signed-off-by: Jose Diaz de Grenu de Pedro <Jose.DiazdeGrenudePedro@digi.com>
2016-06-20 09:39:04 +02:00