mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-07 07:46:59 +02:00
To support PQC container format which is used for post quantum authentication on new i.MX parts like i.MX94 The major changes compared to legacy container format is in signature block, new container tag and version, and new alignment of container header. Signed-off-by: Ye Li <ye.li@nxp.com> Signed-off-by: Jacky Bai <ping.bai@nxp.com> Signed-off-by: Alice Guo <alice.guo@nxp.com> Acked-by: Peng Fan <peng.fan@nxp.com>
90 lines
1.7 KiB
C
90 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* Copyright 2018-2019 NXP
|
|
*/
|
|
|
|
#ifndef __CONTAINER_HEADER_H_
|
|
#define __CONTAINER_HEADER_H_
|
|
|
|
#include <linux/sizes.h>
|
|
#include <linux/types.h>
|
|
|
|
#define IV_MAX_LEN 32
|
|
#define HASH_MAX_LEN 64
|
|
|
|
#if IS_ENABLED(CONFIG_IMX_PQC_SUPPORT)
|
|
#define CONTAINER_HDR_ALIGNMENT 0x4000
|
|
#else
|
|
#define CONTAINER_HDR_ALIGNMENT 0x400
|
|
#endif
|
|
#define CONTAINER_HDR_EMMC_OFFSET 0
|
|
#define CONTAINER_HDR_MMCSD_OFFSET SZ_32K
|
|
#define CONTAINER_HDR_QSPI_OFFSET SZ_4K
|
|
#define CONTAINER_HDR_NAND_OFFSET SZ_128M
|
|
|
|
#define CONTAINER_HDR_TAG 0x87
|
|
#define CONTAINER_HDR_VERSION 0
|
|
|
|
struct container_hdr {
|
|
u8 version;
|
|
u8 length_lsb;
|
|
u8 length_msb;
|
|
u8 tag;
|
|
u32 flags;
|
|
u16 sw_version;
|
|
u8 fuse_version;
|
|
u8 num_images;
|
|
u16 sig_blk_offset;
|
|
u16 reserved;
|
|
} __packed;
|
|
|
|
struct boot_img_t {
|
|
u32 offset;
|
|
u32 size;
|
|
u64 dst;
|
|
u64 entry;
|
|
u32 hab_flags;
|
|
u32 meta;
|
|
u8 hash[HASH_MAX_LEN];
|
|
u8 iv[IV_MAX_LEN];
|
|
} __packed;
|
|
|
|
struct signature_block_hdr {
|
|
u8 version;
|
|
u8 length_lsb;
|
|
u8 length_msb;
|
|
u8 tag;
|
|
u16 cert_offset;
|
|
u16 srk_table_offset;
|
|
u16 signature_offset;
|
|
u16 blob_offset;
|
|
u32 reserved;
|
|
} __packed;
|
|
|
|
struct generate_key_blob_hdr {
|
|
u8 version;
|
|
u8 length_lsb;
|
|
u8 length_msb;
|
|
u8 tag;
|
|
u8 flags;
|
|
u8 size;
|
|
u8 algorithm;
|
|
u8 mode;
|
|
} __packed;
|
|
|
|
int get_container_size(ulong addr, u16 *header_length);
|
|
|
|
static inline bool valid_container_hdr(struct container_hdr *container)
|
|
{
|
|
#if IS_ENABLED(CONFIG_IMX_PQC_SUPPORT)
|
|
return (container->tag == CONTAINER_HDR_TAG ||
|
|
container->tag == 0x82) &&
|
|
(container->version == CONTAINER_HDR_VERSION ||
|
|
container->version == 0x2);
|
|
#else
|
|
return container->tag == CONTAINER_HDR_TAG &&
|
|
container->version == CONTAINER_HDR_VERSION;
|
|
#endif
|
|
}
|
|
#endif
|