| # SPDX-License-Identifier: GPL-2.0+ | |
| # Copyright (C) 2023 Weidmüller Interface GmbH & Co. KG | |
| # Lukas Funke <lukas.funke@weidmueller.com> | |
| # | |
| """Bintool implementation for fdt_add_pubkey""" | |
| from binman import bintool | |
| class Bintoolfdt_add_pubkey(bintool.Bintool): | |
| """Add public key to control dtb (spl or u-boot proper) | |
| This bintool supports running `fdt_add_pubkey`. | |
| Normally mkimage adds signature information to the control dtb. However | |
| binman images are built independent from each other. Thus it is required | |
| to add the public key separately from mkimage. | |
| """ | |
| def __init__(self, name): | |
| super().__init__(name, 'Generate image for U-Boot') | |
| # pylint: disable=R0913 | |
| def run(self, input_fname, keydir, keyname, required, algo): | |
| """Run fdt_add_pubkey | |
| Args: | |
| input_fname (str): dtb file to sign | |
| keydir (str): Directory with public key. Optional parameter, | |
| default value: '.' (current directory) | |
| keyname (str): Public key name. Optional parameter, | |
| default value: key | |
| required (str): If present this indicates that the key must be | |
| verified for the image / configuration to be considered valid. | |
| algo (str): Cryptographic algorithm. Optional parameter, | |
| default value: sha1,rsa2048 | |
| Returns: | |
| CommandResult: Resulting output from the bintool, or None if the | |
| tool is not present | |
| """ | |
| args = [] | |
| if algo: | |
| args += ['-a', algo] | |
| if keydir: | |
| args += ['-k', keydir] | |
| if keyname: | |
| args += ['-n', keyname] | |
| if required: | |
| args += ['-r', required] | |
| args += [ input_fname ] | |
| return self.run_cmd(*args) | |
| def fetch(self, method): | |
| """Fetch handler for fdt_add_pubkey | |
| This installs fdt_add_pubkey using the apt utility. | |
| Args: | |
| method (FETCH_...): Method to use | |
| Returns: | |
| True if the file was fetched and now installed, None if a method | |
| other than FETCH_BIN was requested | |
| Raises: | |
| Valuerror: Fetching could not be completed | |
| """ | |
| if method != bintool.FETCH_BIN: | |
| return None | |
| return self.apt_install('u-boot-tools') |