86 lines
2.1 KiB
C
86 lines
2.1 KiB
C
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
|
|
/*
|
|
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __IMAGE_CHECK_H__
|
|
#define __IMAGE_CHECK_H__
|
|
#include <asm/amlogic/arch/cpu.h>
|
|
|
|
#define AML_SECURE_BOOT_ERR_NONE 0
|
|
#define AML_SECURE_BOOT_ERR_KEY -1
|
|
#define AML_SECURE_BOOT_ERR_INVALID -2
|
|
#define AML_SECURE_BOOT_ERR_SIZE -3
|
|
#define AML_SECURE_BOOT_ERR_VERSION -4
|
|
#define AML_SECURE_BOOT_ERR_HEADER_SIG -5
|
|
#define AML_SECURE_BOOT_ERR_IMG_HASH -6
|
|
|
|
#define AML_BOOT_IMAGE_MAGIC (0x4C4D4140) //"@AML"
|
|
#define AML_BOOT_IMAGE_VERSION 0x1
|
|
|
|
#define SHA256_DIGEST_SIZE 32
|
|
typedef struct {
|
|
uint32_t device_locked;
|
|
uint32_t verified_boot_state;
|
|
uint8_t verified_boot_key[SHA256_DIGEST_SIZE];
|
|
uint8_t verified_boot_hash[SHA256_DIGEST_SIZE];
|
|
uint32_t boot_patchlevel;
|
|
} keymaster_boot_params;
|
|
|
|
#define MAX_RSA_KEY_SIZE 4096
|
|
#define MAX_RSANUMBYTES ((MAX_RSA_KEY_SIZE) / 8)
|
|
#define MAX_RSANUMWORDS (MAX_RSANUMBYTES / sizeof(u32))
|
|
|
|
#if !defined(SBOOT_KEYSLOT_BASE)
|
|
#define SBOOT_KEYSLOT_BASE 128
|
|
#endif
|
|
#define SBOOT_BL2_ENCRYPT_KEYSLOT (SBOOT_KEYSLOT_BASE + 6)
|
|
#define SBOOT_BL2_ENCRYPT_KEY_LEN 32 // AES256
|
|
|
|
/* RSA public key definition */
|
|
struct rsa_public_key {
|
|
u32 n[MAX_RSANUMWORDS]; /* modulus as little endian array */
|
|
u32 e; /* Public exponent e */
|
|
u32 rr[MAX_RSANUMWORDS]; /* R^2 as little endian array */
|
|
u32 n0inv; /* -1 / n[0] mod 2^32 */
|
|
u32 len; /* Length of n[] in number of u32 */
|
|
};
|
|
|
|
struct aml_boot_header_t {
|
|
u32 magic;
|
|
u32 version;
|
|
u32 flags;
|
|
u32 img_version;
|
|
u32 img_size;
|
|
u32 img_offset;
|
|
u8 img_hash[32];
|
|
u8 reserved[200];
|
|
u8 rsa_sig[512];
|
|
};
|
|
|
|
struct scs_cmn_hdr_t {
|
|
u64 magic_u64;
|
|
u16 version_u16;
|
|
u16 flags_u16;
|
|
u32 length_u32;
|
|
};
|
|
|
|
struct scs_krnl_key_t {
|
|
struct scs_cmn_hdr_t cmn_hdr;
|
|
|
|
struct {
|
|
u32 nword32;
|
|
u32 e;
|
|
u8 rsvd_0008[8];
|
|
u8 n[512];
|
|
u8 rr[512];
|
|
u8 ninv128[16];
|
|
} pubrsa_key;
|
|
};
|
|
|
|
int android_image_check_offset(void);
|
|
int secure_image_check(u8 *data, u32 size, unsigned long option);
|
|
int image_rsa_verify(const struct rsa_public_key *key, const u8 *signature,
|
|
const u8 *sha, u32 *workbuf32);
|
|
#endif /* __IMAGE_CHECK_H__ */
|