/*
 * Copyright (c) 2020 The Fuchsia Authors
 *
 * SPDX-License-Identifier:	BSD-3-Clause
 */
#include <common.h>
#include <config.h>

#ifndef _AML_IMAGE_H_
#define _AML_IMAGE_H_

#define CONFIG_AML_SECURE_BOOT_FOR_GOOGLE 1

#ifndef CONFIG_AML_SECURE_BOOT_FOR_GOOGLE
typedef struct {
	unsigned int nOffset;
	unsigned int nRawLength;
	unsigned int nSigLength;
	unsigned int nAlignment;
	unsigned int nTotalLength;
	unsigned char szPad[12];
	unsigned char szSHA2IMG[32];
	unsigned char szSHA2KeyID[32];
} t_aml_enc_blk;

#define AML_SECU_BOOT_IMG_HDR_MAGIC "AMLSECU!"
#define AML_SECU_BOOT_IMG_HDR_MAGIC_SIZE (8)
#define AML_SECU_BOOT_IMG_HDR_VESRION (0x0905)

typedef struct {
	//magic to identify whether it is a encrypted boot image
	unsigned char magic[AML_SECU_BOOT_IMG_HDR_MAGIC_SIZE];

	unsigned int version; //version for this header struct
	unsigned int nBlkCnt;

	unsigned char szTimeStamp[16];

	t_aml_enc_blk amlKernel;
	t_aml_enc_blk amlRamdisk;
	t_aml_enc_blk amlDTB;

} AmlEncryptBootImgInfo;

typedef struct {
	unsigned char reserve4ImgHdr[1024];

	AmlEncryptBootImgInfo encrypteImgInfo;

} AmlSecureBootImgHeader;

typedef struct {
	unsigned char reserve4ImgHdr[2048];

	AmlEncryptBootImgInfo encrypteImgInfo;

} AmlSecureBootImg9Header;

#define COMPILE_TYPE_ASSERT(expr, t) typedef char t[(expr) ? 1 : -1]
COMPILE_TYPE_ASSERT(2048 >= sizeof(AmlSecureBootImgHeader), _cc);
#else /* CONFIG_AML_SECURE_BOOT_FOR_GOOGLE */

#define AML_BOOT_HEADER_MAGIC 0x4c4d4140 //LMA@
#define AML_BOOT_HEADER_IMAGE_HASH_SIZE 32
#define AML_BOOT_HEADER_RESERVED_SIZE 200
#define AML_BOOT_HEADER_RSA_SIGNATURE_SIZE 256

typedef struct {
	uint32_t magic;
	uint32_t version;
	uint32_t flags;
	uint32_t img_version;
	uint32_t img_size;
	uint32_t img_offset;
	uint8_t img_hash[AML_BOOT_HEADER_IMAGE_HASH_SIZE];
	uint8_t reserved[AML_BOOT_HEADER_RESERVED_SIZE];
	uint8_t rsa_sig[AML_BOOT_HEADER_RSA_SIGNATURE_SIZE];
} aml_boot_header_t;
#endif /* CONFIG_AML_SECURE_BOOT_FOR_GOOGLE */

#endif /* _AML_IMAGE_H_ */
