/*
 * Copyright (c) 2019 The Fuchsia Authors
 */
#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_ */
