/*
 * Copyright (c) 2019 The Fuchsia Authors
 */
#include <config.h>
#include <common.h>

#ifndef _AML_IMAGE_H_
#define _AML_IMAGE_H_

#define CONFIG_AML_SECURE_BOOT_VERSION 4

#if (CONFIG_AML_SECURE_BOOT_VERSION < 4)
typedef struct __aml_enc_blk{
        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 {

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

        unsigned int  version;                  //ersion 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 _boot_img_hdr_secure_boot
{
    unsigned char           reserve4ImgHdr[1024];

    AmlEncryptBootImgInfo   encrypteImgInfo;

}AmlSecureBootImgHeader;

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

#define AML_BOOT_HEADER_MAGIC 0x4c4d4140
#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_VERSION */

#endif /* _AML_IMAGE_H_ */
