diff options
| author | tadd.kao <tadd.kao@mediatek.com> | 2015-10-19 17:21:14 +0800 |
|---|---|---|
| committer | Mister Oyster <oysterized@gmail.com> | 2017-04-11 11:00:09 +0200 |
| commit | 912153151aa23d37bf6c0ada3ce86f1aaa41f228 (patch) | |
| tree | b1de19b469c5ec1687fee20069ce18634e51ae7c /drivers/misc | |
| parent | d7ada51bddf26aeb7c313889ad11008a91a4808f (diff) | |
masp: remove unused filp related functions.
[Detail] Open file in kernel space is not a secure way.
[Solution] Remove the file operation in kernel since they are not used.
[Feature] Secure Boot
BUG=23460645
Change-Id: I79bd3f4f29ca1b1b3aa4ca43b8e8d60382341dbc
Signed-off-by: tadd.kao <tadd.kao@mediatek.com>
CR-Id: ALPS02363269
Diffstat (limited to 'drivers/misc')
94 files changed, 0 insertions, 13613 deletions
diff --git a/drivers/misc/mediatek/masp/asf/Makefile.core b/drivers/misc/mediatek/masp/asf/Makefile.core deleted file mode 100755 index 600c23484..000000000 --- a/drivers/misc/mediatek/masp/asf/Makefile.core +++ /dev/null @@ -1,35 +0,0 @@ -####################################### -# Sepcify source files -####################################### -core_obj += asf/core/alg_aes_export.o -core_obj += asf/core/alg_aes_legacy.o -core_obj += asf/core/alg_aes_so.o -core_obj += asf/core/alg_sha1.o -core_obj += asf/core/sec_aes.o -core_obj += asf/core/sec_hdr.o -core_obj += asf/core/sec_dev_util.o -core_obj += asf/core/sec_mtd_util.o -core_obj += asf/core/sec_usif_util.o -core_obj += asf/core/sec_cfg_crypto.o -core_obj += asf/core/sec_cfg_ver.o -core_obj += asf/core/sec_signfmt_core.o -core_obj += asf/core/sec_signfmt_util.o -core_obj += asf/core/sec_signfmt_v2.o -core_obj += asf/core/sec_signfmt_v3.o -core_obj += asf/core/sec_signfmt_v4.o -core_obj += asf/core/sec_cipherfmt_core.o -core_obj += asf/core/sec_key_util.o -core_obj += asf/core/sec_ops.o -core_obj += asf/core/sec_boot_lib.o -core_obj += asf/core/sec_secro.o -core_obj += asf/core/sec_usbdl.o -core_obj += asf/core/sec_dev.o -core_obj += asf/core/sec_ccci.o -core_obj += asf/core/sec_mtd.o -core_obj += asf/core/sec_usif.o -core_obj += asf/core/sec_fsutil_inter.o -core_obj += asf/core/sec_boot_core.o -core_obj += asf/core/sec_mod_core.o - -# HEADER FILE -EXTRA_CFLAGS += -I$(src)/asf/asf_inc diff --git a/drivers/misc/mediatek/masp/asf/Makefile.crypto b/drivers/misc/mediatek/masp/asf/Makefile.crypto deleted file mode 100755 index f0cdf2f5e..000000000 --- a/drivers/misc/mediatek/masp/asf/Makefile.crypto +++ /dev/null @@ -1,12 +0,0 @@ -####################################### -# Sepcify source files -####################################### -crypto_obj += asf/crypto/rsa_lib.o -crypto_obj += asf/crypto/rsa_core.o -crypto_obj += asf/crypto/rsa_util.o -crypto_obj += asf/crypto/bgn_core.o -crypto_obj += asf/crypto/bgn_io.o -crypto_obj += asf/crypto/bgn_util.o - -# HEADER FILE -EXTRA_CFLAGS += -I$(src)/asf/asf_inc diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/aes_legacy.h b/drivers/misc/mediatek/masp/asf/asf_inc/aes_legacy.h deleted file mode 100644 index 995386406..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/aes_legacy.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef H_AES_LEGACY -#define H_AES_LEGACY - -/************************************************************************** - * AES - **************************************************************************/ -#define CUSTOM_AES_256 "CUSTOM_AES_256" -#define AES_KEY_SIZE (32) // bytes -#define CIPHER_BLOCK_SIZE (16) - -/************************************************************************** - * EXPORT FUNCTION - **************************************************************************/ -extern int aes_legacy_enc(unsigned char* in_buf, unsigned int in_len, unsigned char* out_buf, unsigned int out_len); -extern int aes_legacy_dec(unsigned char* in_buf, unsigned int in_len, unsigned char* out_buf, unsigned int out_len); -extern int aes_legacy_init_key(unsigned char* key_buf, unsigned int key_len); -extern int aes_legacy_init_vector(void); - -#endif diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/aes_so.h b/drivers/misc/mediatek/masp/asf/asf_inc/aes_so.h deleted file mode 100644 index 559fd66f1..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/aes_so.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef H_AES_BROM -#define H_AES_BROM - -#define AES_ENCRYPT 1 -#define AES_DECRYPT 0 - -typedef struct -{ - int nr; - unsigned long *rk; - unsigned long buf[68]; -} a_ctx; - -/************************************************************************** - * EXPORT FUNCTION - **************************************************************************/ -extern int aes_so_enc(unsigned char* in_buf, unsigned int in_len, unsigned char* out_buf, unsigned int out_len); -extern int aes_so_dec(unsigned char* in_buf, unsigned int in_len, unsigned char* out_buf, unsigned int out_len); -extern int aes_so_init_key(unsigned char* key_buf, unsigned int key_len); -extern int aes_so_init_vector(void); - -#endif diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/alg_sha1.h b/drivers/misc/mediatek/masp/asf/asf_inc/alg_sha1.h deleted file mode 100644 index 053998f9b..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/alg_sha1.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _SHA1_H -#define _SHA1_H - -#define SHA1_LEN 20 - -typedef struct -{ - unsigned long to[2]; - unsigned long st[5]; - unsigned char buf[64]; -} -sha1_ctx; - -typedef struct { - unsigned int state[5]; - unsigned int count[2]; - unsigned char buffer[64]; -} SHA1_CTX; - -/************************************************************************** - * EXPORT FUNCTIONS - **************************************************************************/ -void sha1( const unsigned char *input, int ilen, unsigned char output[20] ); - - -#endif diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/bgn_asm.h b/drivers/misc/mediatek/masp/asf/asf_inc/bgn_asm.h deleted file mode 100644 index 9e9bc4145..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/bgn_asm.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _BN_ASM_H -#define _BN_ASM_H - -#define ALU_INIT \ -{ \ - unsigned long s_0, s_1, b_0, b_1; \ - unsigned long r_0, r_1, r_x, r_y; \ - b_0 = ( b << biH ) >> biH; \ - b_1 = ( b >> biH ); - -#define ALU_CORE \ - s_0 = ( *s << biH ) >> biH; \ - s_1 = ( *s >> biH ); s++; \ - r_x = s_0 * b_1; r_0 = s_0 * b_0; \ - r_y = s_1 * b_0; r_1 = s_1 * b_1; \ - r_1 += ( r_x >> biH ); \ - r_1 += ( r_y >> biH ); \ - r_x <<= biH; r_y <<= biH; \ - r_0 += r_x; r_1 += (r_0 < r_x); \ - r_0 += r_y; r_1 += (r_0 < r_y); \ - r_0 += c; r_1 += (r_0 < c); \ - r_0 += *d; r_1 += (r_0 < *d); \ - c = r_1; *(d++) = r_0; - -#define ALU_STOP \ -} - -#endif diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/bgn_export.h b/drivers/misc/mediatek/masp/asf/asf_inc/bgn_export.h deleted file mode 100644 index 95fbb8a10..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/bgn_export.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _BIGNUM_EXPORT_H -#define _BIGNUM_EXPORT_H - -typedef struct -{ - int s; - int n; - unsigned long *p; -} -bgn; - - -/************************************************************************** - * EXPORT FUNCTIONS - **************************************************************************/ -int bgn_read_bin( bgn *X, const unsigned char *buf, int buflen ); -int bgn_write_bin( const bgn *X, unsigned char *buf, int buflen ); -int bgn_read_str( bgn *X, int radix, const char *s, int length ); -int bgn_exp_mod( bgn *X, const bgn *E, const bgn *N, bgn *_RR ); - - -/************************************************************************** - * ERROR CODE - **************************************************************************/ -#define E_BGN_FILE_IOEOR 0x0001 -#define E_BGN_BAD_INPUT_DATA 0x0002 -#define E_BGN_INVALID_CHARACTER 0x0003 -#define E_BGN_BUFFER_TOO_SMALL 0x0004 -#define E_BGN_NEGATIVE_VALUE 0x0005 -#define E_BGN_DIVISION_BY_ZERO 0x0006 -#define E_BGN_NOT_ACCEPTABLE 0x0007 - -#endif /* bgn.h */ diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/bgn_internal.h b/drivers/misc/mediatek/masp/asf/asf_inc/bgn_internal.h deleted file mode 100644 index 82905cb03..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/bgn_internal.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef _BIGNUM_INTERNAL_H -#define _BIGNUM_INTERNAL_H - -#include "bgn_export.h" - -/************************************************************************** - * INTERNAL DEFINIITION - **************************************************************************/ -#define ciL ((int) sizeof(unsigned long)) -#define biL (ciL << 3) -#define biH (ciL << 2) - -#define B_T_L(i) (((i) + biL - 1) / biL) -#define C_T_L(i) (((i) + ciL - 1) / ciL) - -/************************************************************************** - * INTERNAL FUNCTIONS - **************************************************************************/ -void bgn_init( bgn *P_X ); -void bgn_free( bgn *P_X ); -int bgn_grow( bgn *P_X, int nbl ); -int bgn_copy( bgn *P_X, const bgn *P_Y ); -void bgn_swap( bgn *P_X, bgn *P_Y ); -int bgn_lset( bgn *P_X, int z ); -int bgn_lsb( const bgn *P_X ); -int bgn_msb( const bgn *P_X ); -int bgn_size( const bgn *P_X ); -int bgn_shift_l( bgn *P_X, int count ); -int bgn_shift_r( bgn *P_X, int count ); -int bgn_cmp_abs( const bgn *P_X, const bgn *P_Y ); -int bgn_cmp_num( const bgn *P_X, const bgn *P_Y ); -int bgn_cmp_int( const bgn *P_X, int z ); -int bgn_add_abs( bgn *P_X, const bgn *P_A, const bgn *P_B ); -int bgn_sub_abs( bgn *P_X, const bgn *P_A, const bgn *P_B ); -int bgn_add_bgn( bgn *P_X, const bgn *P_A, const bgn *P_B ); -int bgn_sub_bgn( bgn *P_X, const bgn *P_A, const bgn *P_B ); -int bgn_add_int( bgn *P_X, const bgn *P_A, int b ); -int bgn_sub_int( bgn *P_X, const bgn *P_A, int b ); -int bgn_mul_bgn( bgn *P_X, const bgn *P_A, const bgn *B ); -int bgn_mul_int( bgn *P_X, const bgn *P_A, unsigned long b ); -int bgn_div_bgn( bgn *P_Q, bgn *P_R, const bgn *P_A, const bgn *P_B ); -int bgn_div_int( bgn *P_Q, bgn *P_R, const bgn *P_A, int b ); -int bgn_mod_bgn( bgn *P_R, const bgn *P_A, const bgn *P_B ); -int bgn_mod_int( unsigned long *r, const bgn *P_A, int b ); -int bgn_exp_mod( bgn *P_X, const bgn *P_E, const bgn *P_N, bgn *_RR ); -int bgn_inv_mod( bgn *P_X, const bgn *P_A, const bgn *P_N ); -int bgn_is_prime( bgn *P_X, int (*f_rng)(void *), void *p_rng ); - -void montg_init( unsigned long *mm, const bgn *P_N ); -void montg_mul( bgn *P_A, const bgn *P_B, const bgn *P_N, unsigned long mm, const bgn *P_T ); -void montg_red( bgn *P_A, const bgn *P_N, unsigned long mm, const bgn *P_T ); -void bgn_sub_hlp( int n, unsigned long *s, unsigned long *d ); -void bgn_mul_hlp( int i, unsigned long *s, unsigned long *d, unsigned long b ); - -#endif diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/masp_version.h b/drivers/misc/mediatek/masp/asf/asf_inc/masp_version.h deleted file mode 100644 index 6227553fc..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/masp_version.h +++ /dev/null @@ -1,4 +0,0 @@ -//building time information -#define BUILD_TIME "CST 2013" -#define BUILD_BRANCH "(ALPS.JB2)" -#define CCCI_VERSION 1 diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/rsa_def.h b/drivers/misc/mediatek/masp/asf/asf_inc/rsa_def.h deleted file mode 100644 index e55885e69..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/rsa_def.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef _RSA_H -#define _RSA_H - -#include "bgn_export.h" -#include "sec_cust_struct.h" - -/************************************************************************** - * INCLUDING - **************************************************************************/ -#include "alg_sha1.h" - -/************************************************************************** - * MODE SELECTION - **************************************************************************/ -#define SIG_RSA_RAW 0 -#define RSA_SIGN 1 - -/************************************************************************** - * CORE DATA STRUCTURE - **************************************************************************/ -typedef struct -{ - int len; - - int pad; - int h_id; - int (*f_rng)(void *); - void *p_rng; - - /* keys { */ - bgn N; - bgn E; - bgn D; - - bgn RN; - bgn RP; - bgn RQ; - /* keys } */ -} -rsa_ctx; - -/************************************************************************** - * EXPORT FUNCTIONS - **************************************************************************/ -int rsa_sign( rsa_ctx *ctx, int h_len, const unsigned char *hash, unsigned char *sig ); -int rsa_verify( rsa_ctx *ctx, int h_len, const unsigned char *hash, unsigned char *sig ); - -/************************************************************************** - * EXPORT VARIABLES - **************************************************************************/ -extern rsa_ctx rsa; - - -/************************************************************************** - * ERROR CODE - **************************************************************************/ -#define E_RSA_BAD_INPUT_DATA 0x0001 -#define E_RSA_INVALID_PADDING 0x0002 -#define E_RSA_KEY_GEN_FAILED 0x0003 -#define E_RSA_KEY_CHECK_FAILED 0x0004 -#define E_RSA_PUBLIC_FAILED 0x0005 -#define E_RSA_PRIVATE_FAILED 0x0006 -#define E_RSA_VERIFY_FAILED 0x0007 -#define E_RSA_OUTPUT_TOO_LARGE 0x0008 - -#endif diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_aes.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_aes.h deleted file mode 100644 index 50a9df4f8..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_aes.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef _CIPHERIMG_H -#define _CIPHERIMG_H - -/************************************************************************** - * AES - **************************************************************************/ -typedef enum -{ - AES_VER_LEGACY = 0, - AES_VER_SO -} AES_VER; - -/************************************************************************** - * EXPORTED FUNCTIONS - **************************************************************************/ -extern int sec_aes_init(void); -extern int lib_aes_enc(unsigned char* input_buf, unsigned int input_len, unsigned char* output_buf, unsigned int output_len); -extern int lib_aes_dec(unsigned char* input_buf, unsigned int input_len, unsigned char* output_buf, unsigned int output_len); -extern int lib_aes_init_key(unsigned char* key_buf, unsigned int key_len, AES_VER ver); -extern int lib_aes_init_vector(AES_VER ver); - - -#endif /*_CIPHERIMG_H*/ diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_auth.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_auth.h deleted file mode 100644 index 96a0789e9..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_auth.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef SEC_AUTH_H -#define SEC_AUTH_H - -/************************************************************************** - * AUTH DATA STRUCTURE -**************************************************************************/ -#define SIGNATURE_SIZE (128) // 128 bytes -#define RSA_KEY_SIZE (128) - -typedef struct -{ - unsigned char content[SIGNATURE_SIZE]; - -} _signature; - -/************************************************************************** -* EXPORT FUNCTION -**************************************************************************/ -extern int lib_init_key (unsigned char *nKey, unsigned int nKey_len, unsigned char *eKey, unsigned int eKey_len); -extern int lib_verify (unsigned char* data_buf, unsigned int data_len, unsigned char* sig_buf, unsigned int sig_len); -extern int sec_auth_test (void); - -#endif /* SEC_AUTH_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_boot.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_boot.h deleted file mode 100644 index 5adc00737..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_boot.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef SEC_BOOT_H -#define SEC_BOOT_H - -/************************************************************************** - * [S-BOOT] - **************************************************************************/ - -/* S-BOOT Attribute */ -#define ATTR_SBOOT_DISABLE 0x00 -#define ATTR_SBOOT_ENABLE 0x11 -#define ATTR_SBOOT_ONLY_ENABLE_ON_SCHIP 0x22 - -/************************************************************************** - * [SECURE BOOT CHECK] - **************************************************************************/ - -/* Note : this structure record all the partitions - which should be verified by secure boot check */ -#define AND_SEC_BOOT_CHECK_PART_SIZE (90) -typedef struct -{ - unsigned char name[9][10]; - -} AND_SECBOOT_CHECK_PART_T; - -/* Note : partition name between preloader/DA and kernel mtd table may be different - in order to reduce maintainence effort, secure boot update will apply - following transfation table to correct mtd partition name */ -#define MTD_SECCFG "seccnfg" -#define MTD_UBOOT "uboot" -#define MTD_LOGO "logo" -#define MTD_BOOTIMG "boot" -#define MTD_USER "userdata" -#define MTD_ANDSYSIMG "system" -#define MTD_RECOVERY "recovery" -#define MTD_SECRO "secstatic" - -#define USIF_SECCFG "seccfg" -#define USIF_UBOOT "uboot" -#define USIF_LOGO "logo" -#define USIF_BOOTIMG "bootimg" -#define USIF_USER "userdata" -#define USIF_ANDSYSIMG "android" -#define USIF_RECOVERY "recovery" -#define USIF_SECRO "sec_ro" - -#define PL_SECCFG "SECCFG" -#define PL_UBOOT "UBOOT" -#define PL_LOGO "LOGO" -#define PL_BOOTIMG "BOOTIMG" -#define PL_USER "USRDATA" -#define PL_ANDSYSIMG "ANDROID" -#define PL_RECOVERY "RECOVERY" -#define PL_SECRO "SEC_RO" - -#define GPT_SECRO "secro" -#define GPT_PRELOADER "preloader" - -/************************************************************************** - * EXPORT FUNCTION - **************************************************************************/ -extern int masp_boot_init (void); -extern int sec_boot_enabled (void); -extern int sec_modem_auth_enabled (void); -extern int sec_schip_enabled (void); - -#endif /* SEC_BOOT_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_boot_core.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_boot_core.h deleted file mode 100644 index 1f19a6ff4..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_boot_core.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef SEC_BOOT_CORE_H -#define SEC_BOOT_CORE_H - -/************************************************************************** - * EXPORT FUNCTION - **************************************************************************/ -extern int masp_boot_init (void); - -/* get platform configuration */ -extern int sec_boot_enabled (void); -extern int sec_modem_auth_enabled (void); -extern int sec_sds_enabled (void); -extern int sec_schip_enabled (void); - -/* sec boot check */ -extern bool sec_boot_check_part_enabled (char* part_name); - -/* HACC HW init */ -extern unsigned int sec_boot_hacc_init (void); - -#endif /* SEC_BOOT_CORE_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_boot_lib.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_boot_lib.h deleted file mode 100644 index ec89dda56..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_boot_lib.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef SEC_BOOT_LIB_H -#define SEC_BOOT_LIB_H - -/************************************************************************** - * INCLUDE LINUX HEADER - **************************************************************************/ -#include "sec_osal_light.h" - -/************************************************************************** - * INCLUDE MTK HEADERS - **************************************************************************/ -#include "masp_version.h" -#include "sec_aes.h" -#include "aes_legacy.h" -#include "sec_sign_header.h" -#include "sec_cfg.h" -#include "sec_typedef.h" -#include "sec_rom_info.h" -#include "sec_secroimg.h" -#include "sec_mtd.h" -#include "sec_usbdl.h" -#include "sec_mtd_util.h" -#include "sec_boot.h" -#include "sec_fsutil_inter.h" -#include "sec_log.h" -#include "sec_wrapper.h" -#include "sec_boot_core.h" -#include "sec_hdr.h" -#include "sec_cfg_ver.h" -#include "sec_usif.h" -#include "sec_usif_util.h" -#include "sec_dev.h" -#include "sec_dev_util.h" -#include "sec_sign_extension.h" -#include "sec_signfmt_util.h" -#include "sec_signfmt_v2.h" -#include "sec_signfmt_v3.h" -#include "sec_signfmt_v4.h" -#include "sec_signfmt_core.h" -#include "sec_cipherfmt_core.h" -#include "sec_cipher_header.h" -#include "sec_error.h" -#include "sec_nvram.h" - -/****************************************************************************** - * INTERNAL CONFIGURATION - ******************************************************************************/ -typedef struct -{ - bool bKeyInitDis; - bool bUsifEn; - char bMsg; -} SECURE_INFO; - -/************************************************************************** - * EXTERNAL VARIABLE - **************************************************************************/ -extern AND_ROMINFO_T rom_info; -extern SECURE_INFO sec_info; -extern SECCFG_U seccfg; -extern AND_SECROIMG_T secroimg; - -/************************************************************************** - * sec boot util function - **************************************************************************/ -extern char* asf_get_build_info(void); - -#endif /* SEC_BOOT_LIB_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_ccci.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_ccci.h deleted file mode 100644 index f7fb89df4..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_ccci.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef SEC_CCCI_LIB_H -#define SEC_CCCI_LIB_H - -int masp_ccci_signfmt_verify_file(char *file_path, unsigned int *data_offset, unsigned int *data_sec_len); -int masp_ccci_version_info(void); -int sec_ccci_file_open(char *file_path); -int sec_ccci_file_close(int fp_id); -int masp_ccci_is_cipherfmt(int fp_id, unsigned int start_off, unsigned int *img_len); -int masp_ccci_decrypt_cipherfmt(int fp_id, unsigned int start_off, char *buf, unsigned int buf_len, unsigned int *data_offset); - -#endif /* SEC_CCCI_LIB_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg.h deleted file mode 100644 index 12f74a1ba..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef SEC_CFG_H -#define SEC_CFG_H - -/* EXPORT TO USERS */ -#include "sec_cfg_v1.h" -#include "sec_cfg_v3.h" -#include "sec_cfg_common.h" -#include "sec_cfg_crypto.h" - -/************************************************************************** - * SECCFG VERSION - **************************************************************************/ -typedef union -{ - SECURE_CFG_V1 v1; - SECURE_CFG_V3 v3; - -} SECCFG_U; - -typedef union -{ - SECURE_IMG_INFO_V1 v1; - SECURE_IMG_INFO_V3 v3; - -} SEC_IMG_U; - - -/************************************************************************** - * EXPORT FUNCTIONS - **************************************************************************/ - -#endif diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_common.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_common.h deleted file mode 100644 index 3897d0e5d..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_common.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef SEC_CFG_COMMON_H -#define SEC_CFG_COMMON_H - -/* ========================================================================= */ -/* ROM TYPE */ -/* ========================================================================= */ -typedef enum { - NORMAL_ROM = 0x01, - YAFFS_IMG = 0x08, -} ROM_TYPE; - -/* ========================================================================= */ -/* SECURE IMAGE HEADER */ -/* ========================================================================= */ -/* one image comes with one secure image information. */ -#define SEC_IMG_MAGIC_NUM (0x49494949) /* IIII */ - -typedef enum -{ - ATTR_SEC_IMG_UPDATE = 0x10, /* only used in FlashTool */ - ATTR_SEC_IMG_COMPLETE = 0x43434343, /* CCCC */ - ATTR_SEC_IMG_INCOMPLETE = 0x49494949, /* IIII */ - ATTR_SEC_IMG_FORCE_UPDATE = 0x46464646 /* FFFF */ - -} SEC_IMG_ATTR; - -/* ========================================================================= */ -/* SECURE CFG STORAGE CONFIG */ -/* ========================================================================= */ -/* buffer allocated in DA */ -#define SEC_BUF_LEN (0x3000) - -/* ========================================================================= */ -/* SECURE CFG VERSION */ -/* ========================================================================= */ -#define SECCFG_SUPPORT_VERSION (0x1) - -/* ========================================================================= */ -/* SECURE CFG FORMAT */ -/* ========================================================================= */ -#define SEC_CFG_MAGIC_NUM (0x4D4D4D4D) /* MMMM */ -#define SEC_CFG_BEGIN "AND_SECCFG_v" -#define SEC_CFG_BEGIN_LEN (12) - -/* in order to avoid power loss potential issue */ -/* before sec cfg start to update, status will be set as in-complete. */ -typedef enum -{ - SEC_CFG_COMPLETE_NUM = 0x43434343, /* CCCC */ - SEC_CFG_INCOMPLETE_NUM = 0x49494949 /* IIII */ - -} SECCFG_STATUS; - -/* attributes which can disable secure boot (internal use only) */ -typedef enum -{ - ATTR_DEFAULT = 0x33333333, /* 3333 */ - ATTR_DISABLE_IMG_CHECK = 0x44444444 /* DDDD */ - -} SECCFG_ATTR; - -/* specify image was upgraded by SIU or flash tool */ -typedef enum -{ - UBOOT_UPDATED_BY_SIU = 0x0001, - BOOT_UPDATED_BY_SIU = 0x0010, - RECOVERY_UPDATED_BY_SIU = 0x0100, - SYSTEM_UPDATED_BY_SIU = 0x1000 - -} SIU_STATUS; - -/* end pattern for debugging */ -#define SEC_CFG_END_PATTERN (0x45454545) /* EEEE */ - -#endif // SEC_CFG_COMMON_H diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_crypto.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_crypto.h deleted file mode 100644 index da8697658..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_crypto.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef SECCFG_CRYPTO_H -#define SECCFG_CRYPTO_H - -/****************************************************************************** - * EXPORT FUNCTION - ******************************************************************************/ -extern unsigned int get_seccfg_cipher_len (void); - -#endif /* SECCFG_CRYPTO_H */ diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_v1.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_v1.h deleted file mode 100644 index bdab0f7b9..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_v1.h +++ /dev/null @@ -1,92 +0,0 @@ -#ifndef SEC_CFG_V1_H -#define SEC_CFG_V1_H - -/************************************************************************** - * INCLUDE SEC CFG COMMON - **************************************************************************/ -#include "sec_cfg_common.h" - -/************************************************************************** - * INCLUDE SIGN HEADER FORMAT - **************************************************************************/ -#include "sec_sign_header.h" - -/************************************************************************** - * SECURE DOWNLOAD LOCK TABLE - **************************************************************************/ -#define MAX_IMG_LOCK_COUNT (20) -#define IMAGE_LOCK_MAGIC (0x4C4C4C4C) /* LLLL */ - -typedef struct -{ - unsigned int magic_number; - unsigned char name[32]; /* partition name */ - unsigned char unlocked; - -} IMAGE_DL_LOCK_INFO; - -typedef struct -{ - unsigned int magic_number; - unsigned char lock_not_all; - IMAGE_DL_LOCK_INFO lock_info[MAX_IMG_LOCK_COUNT]; - -} SECURE_DL_LOCK_TABLE; - -/************************************************************************** - * SECURE IMAGE HEADER - **************************************************************************/ - -typedef struct -{ - unsigned int magic_number; - unsigned char name[16]; /* index for identification */ - unsigned int real_offset; /* download agent will update the real offset */ - ROM_TYPE image_type; /* yaffs2 format or raw binary */ - SEC_IMG_ATTR attr; /* image attributes */ - SEC_IMG_HEADER_U header; - unsigned char signature_hash [HASH_SIG_LEN]; - -} SECURE_IMG_INFO_V1; - -/************************************************************************** - * SECURE CFG FORMAT - **************************************************************************/ -#define SECURE_IMAGE_COUNT (12) -#define SEC_CFG_RESERVED (4) - -/* ================================= */ -/* SECCFG FORMAT */ -/* ================================= */ -typedef struct -{ - unsigned char id[16]; - unsigned int magic_number; - unsigned int lib_ver; - - unsigned int sec_cfg_size; - - unsigned char sw_sec_lock_try; - unsigned char sw_sec_lock_done; - - unsigned short page_size; - unsigned int page_count; - - /* ================== */ - /* encrypted region { */ - /* ================== */ - SECURE_IMG_INFO_V1 image_info [SECURE_IMAGE_COUNT]; - SIU_STATUS siu_status; - unsigned char reserve [SEC_CFG_RESERVED]; - SECCFG_STATUS status; - SECCFG_ATTR attr; - /* ================== */ - /* encrypted region } */ - /* ================== */ - - SECURE_DL_LOCK_TABLE lock_table; - unsigned int end_pattern; - -} SECURE_CFG_V1; - -#endif // SEC_CFG_V1_H
\ No newline at end of file diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_v3.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_v3.h deleted file mode 100644 index 0f15a88fe..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_v3.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef SEC_CFG_V3_H -#define SEC_CFG_V3_H - -/************************************************************************** - * INCLUDE SEC CFG COMMON - **************************************************************************/ -#include "sec_cfg_common.h" - -/************************************************************************** - * INCLUDE SIGN HEADER FORMAT - **************************************************************************/ -#include "sec_sign_header.h" - -/************************************************************************** - * SECCFG EXTENSION REGION - **************************************************************************/ -#define EXT_REGION_BUF_SIZE (4096) /* used to store extension headers */ - -typedef struct -{ - unsigned int content_len; /* total used data length */ - unsigned char buf [EXT_REGION_BUF_SIZE]; - -} SECCFG_EXT_REGION; - -/************************************************************************** - * SECURE IMAGE HEADER - **************************************************************************/ - -typedef struct -{ - unsigned int magic_number; - unsigned char name [16]; /* index for identification */ - unsigned int real_offset; /* download agent will update the real offset */ - ROM_TYPE image_type; /* yaffs2 format or raw binary */ - SEC_IMG_ATTR image_attr; /* image attributes */ - SEC_IMG_HEADER_U header; /* image sign header */ - unsigned int ext_offset; /* offset of extension header */ - unsigned int ext_len; /* length of extension header */ - -} SECURE_IMG_INFO_V3; - -/************************************************************************** - * SECURE CFG FORMAT - **************************************************************************/ -#define SECURE_IMAGE_COUNT_V3 (20) - -/* ================================= */ -/* SECCFG FORMAT */ -/* ================================= */ -typedef struct -{ - unsigned char id[16]; - unsigned int magic_number; - - unsigned int seccfg_ver; - unsigned int seccfg_size; - - unsigned int seccfg_enc_offset; - unsigned int seccfg_enc_len; - - unsigned char sw_sec_lock_try; - unsigned char sw_sec_lock_done; - - unsigned short page_size; - unsigned int page_count; - - /* ================== */ - /* encrypted region { */ - /* ================== */ - SECURE_IMG_INFO_V3 image_info [SECURE_IMAGE_COUNT_V3]; - SIU_STATUS siu_status; - SECCFG_STATUS seccfg_status; - SECCFG_ATTR seccfg_attr; - SECCFG_EXT_REGION seccfg_ext; - /* ================== */ - /* encrypted region } */ - /* ================== */ - - unsigned int end_pattern; - -} SECURE_CFG_V3; - -#endif // SEC_CFG_V3_H diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_ver.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_ver.h deleted file mode 100644 index 19aa69007..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cfg_ver.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef SEC_CFG_VER_H -#define SEC_CFG_VER_H - -#include "sec_cfg.h" -#include "sec_cfg_common.h" -#include "sec_cfg_v1.h" -#include "sec_cfg_v3.h" - -typedef enum -{ - SECCFG_V1 = 1, - SECCFG_V1_2 = 2, - SECCFG_V3 = 3, - SECCFG_UNSET = 4 - -} SECCFG_VER; - -/************************************************************************** - * EXPORT FUNCTIONS - **************************************************************************/ -extern void set_seccfg_ver (SECCFG_VER val); -extern SECCFG_VER get_seccfg_ver (void); -extern SECCFG_STATUS get_seccfg_status (SECCFG_U *p_seccfg); -extern void set_seccfg_status (SECCFG_U *p_seccfg, SECCFG_STATUS val); -extern unsigned int get_seccfg_siu (SECCFG_U *p_seccfg); -extern void set_seccfg_siu (SECCFG_U *p_seccfg, unsigned int val); -extern unsigned int get_seccfg_img_cnt (void); -extern int seccfg_ver_detect (void); -extern int seccfg_ver_correct (void); -extern int seccfg_ver_verify (void); - -#endif diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cipher_header.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_cipher_header.h deleted file mode 100644 index a91defaea..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cipher_header.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef _CIPHERHEADER_H -#define _CIPHERHEADER_H - -/************************************************************************** - * CIPHER HEADER FORMAT - **************************************************************************/ - -#define CUSTOM_NAME "CUSTOM_NAME" -#define IMAGE_VERSION "IMAGE_VERSION" -#define CIPHER_IMG_MAGIC (0x63636363) -#define CIPHER_IMG_HEADER_SIZE (128) - -typedef struct _SEC_CIPHER_IMG_HEADER -{ - unsigned int magic_number; - - unsigned char cust_name [32]; - unsigned int image_version; - unsigned int image_length; - unsigned int image_offset; - - unsigned int cipher_offset; - unsigned int cipher_length; - - /* - * v0 : legacy - * v1 : standard operations - */ - unsigned int aes_version; - unsigned char dummy[68]; - -}CIPHER_HEADER; - -#endif /*_CIPHERHEADER_H*/ - - - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cipherfmt_core.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_cipherfmt_core.h deleted file mode 100644 index 1a41e774f..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cipherfmt_core.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _SEC_CIPHER_FORMAT_CORE_H -#define _SEC_CIPHER_FORMAT_CORE_H - -#include "sec_signfmt_def.h" - -/****************************************************************************** - * EXPORT FUNCTION - ******************************************************************************/ -int sec_cipherfmt_check_cipher(ASF_FILE fp, unsigned int start_off, unsigned int *img_len); -int sec_cipherfmt_decrypted(ASF_FILE fp, unsigned int start_off, char *buf, unsigned int buf_len, unsigned int *data_offset); - - -#endif - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_ctrl.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_ctrl.h deleted file mode 100644 index 1b922ea2c..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_ctrl.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef SECLIB_CTRL_H -#define SECLIB_CTRL_H - -/************************************************************************** - * [SEC-CTRL ID] - **************************************************************************/ -#define ROM_INFO_SEC_CTRL_ID "AND_SECCTRL_v" -#define ROM_INFO_SEC_CTRL_VER 0x1 - -/************************************************************************** - * [SEC-CTRL FORMAT] - **************************************************************************/ -#define AND_SEC_CTRL_SIZE (52) - -typedef struct -{ - unsigned char m_id[16]; - unsigned int m_sec_cfg_ver; - unsigned int m_sec_usb_dl; - unsigned int m_sec_boot; - unsigned int m_sec_modem_auth; - unsigned int m_sec_sds_en; - unsigned char m_seccfg_ac_en; - unsigned char m_sec_aes_legacy; - unsigned char m_secro_ac_en; - unsigned char m_sml_aes_key_ac_en; - unsigned int reserve[3]; - -} AND_SECCTRL_T; - -extern void sec_ctrl_init (void); - -#endif /* SECLIB_CTRL_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cust_struct.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_cust_struct.h deleted file mode 100644 index 9eaa83a73..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_cust_struct.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef _CUST_SEC_H -#define _CUST_SEC_H - -/************************************************************************** - * RSA PKCS01 CONTROL - **************************************************************************/ -#define RSA_KEY_LEN_2048 (0) -#define RSA_KEY_LEN_1024 (1) - -/************************************************************************** - * RSA PKCS01 CHECKING - **************************************************************************/ -#if RSA_KEY_LEN_2048 -#if RSA_KEY_LEN_1024 -#error "RSA_KEY_LEN_1024 should be disabled" -#endif -#endif - -#if RSA_KEY_LEN_1024 -#if RSA_KEY_LEN_2048 -#error "RSA_KEY_LEN_2048 should be disabled" -#endif -#endif - -/************************************************************************** - * RSA PKCS01 CONFIGURATION - **************************************************************************/ -#define RSA_KEY_MAX_LEN (128) // bytes -#define RSA_E_KEY_LEN (5) // bytes - -#if RSA_KEY_LEN_2048 -#define RSA_KEY_LEN (256) // bytes -#define HASH_LEN (32) // bytes - -#elif RSA_KEY_LEN_1024 -#define RSA_KEY_LEN (128) // bytes -#define HASH_LEN (20) // bytes - -#else -#error "RSA_KEY_LEN is not defined" - -#endif - -/************************************************************************** - * CUSTOMER INTERFACE - **************************************************************************/ -typedef struct _CUST_SEC_INTER -{ - /* key to sign image patch */ - unsigned char key_rsa_n[RSA_KEY_MAX_LEN*2]; // string. number base = 16 - unsigned char key_rsa_d[RSA_KEY_MAX_LEN*2]; // string. number base = 16 - unsigned char key_rsa_e[RSA_E_KEY_LEN]; // string. number base = 16 -} CUST_SEC_INTER; - -#endif /*_CUST_SEC_H*/ diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_dev.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_dev.h deleted file mode 100644 index 3f953b021..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_dev.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef DEV_H -#define DEV_H - -/****************************************************************************** - * EXPORT FUNCTION - ******************************************************************************/ -extern void sec_dev_dump_part(void); -extern void sec_dev_find_parts(void); -extern int sec_dev_read_rom_info(void); -extern int sec_dev_read_secroimg(void); -extern int sec_dev_read_secroimg_v5(unsigned int index); -extern unsigned int sec_dev_read_image(char* part_name, char* buf, u64 off, unsigned int sz, unsigned int image_type); - - -#endif // DEV_H diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_dev_util.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_dev_util.h deleted file mode 100644 index 96426f743..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_dev_util.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef DEV_UTILS_H -#define DEV_UTILS_H - -/************************************************************************** - * EXTERNAL FUNCTIONS - *************************************************************************/ -extern char* part2pl (char* part_name); -extern char* pl2part (char* part_name); -extern void sec_dev_part_name (unsigned int part_num, char* part_name); -extern char* get_android_name(void); -extern char* get_secro_name(void); - -#endif // DEV_UTILS_INTER_H diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_error.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_error.h deleted file mode 100644 index e9161f326..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_error.h +++ /dev/null @@ -1,229 +0,0 @@ -#ifndef SEC_ERROR_H -#define SEC_ERROR_H - -/************************************************************************** - * COMPILE ASSERT - **************************************************************************/ -#define COMPILE_ASSERT(condition) ((void)sizeof(char[1 - 2*!!!(condition)])) - -#define SEC_OK 0x0000 - -/* IMAGE CIPHER */ -#define ERR_IMAGE_CIPHER_KEY_ERR 0x1000 -#define ERR_IMAGE_CIPHER_IMG_NOT_FOUND 0x1001 -#define ERR_IMAGE_CIPHER_READ_FAIL 0x1002 -#define ERR_IMAGE_CIPHER_WRONG_OPERATION 0x1003 -#define ERR_IMAGE_CIPHER_DEC_TEST_ERROR 0x1004 -#define ERR_IMAGE_CIPHER_ENC_TEST_ERROR 0x1005 -#define ERR_IMAGE_CIPHER_HEADER_NOT_FOUND 0x1006 -#define ERR_IMAGE_CIPHER_DEC_Fail 0x1007 - -/* SW AES */ -#define ERR_AES_KEY_SIZE_ERR 0x2000 -#define ERR_AES_ALLOCATE_CTX_ERR 0x2001 -#define ERR_AES_ILEN_SHOULD_EQUAL_OLEN 0x2002 -#define ERR_AES_DATA_NOT_MULTIPLE_OF_BLOCK_SIZE 0x2004 -#define ERR_AES_KEY_NOT_FOUND 0x2005 - -/* ROM INFO */ -#define ERR_ROM_INFO_ALLOCATE_BUF_FAIL 0x3000 -#define ERR_ROM_INFO_MTD_OPEN_FAIL 0x3001 -#define ERR_ROM_INFO_MTD_READ_FAIL 0x3002 -#define ERR_ROM_INFO_MTD_NOT_FOUND 0x3003 -#define ERR_ROM_INFO_RESET_FAIL 0x3004 -#define ERR_ROM_INFO_MOD_READ_FAIL 0x3005 -#define ERR_ROM_INFO_ID_INVALID 0x3006 -#define ERR_INFO_MTD_NUM_INVALID 0x3007 -#define ERR_INFO_PART_NOT_FOUND 0x3008 -#define ERR_INFO_OVER_MAX_PART_COUNT 0x3009 - -/* SW RSA */ -#define ERR_RSA_KEY_NOT_FOUND 0x4000 -#define ERR_RSA_WRONG_SIGNATURE_LEN 0x4001 -#define ERR_RSA_SIGNATURE_VERIFY_FAIL 0x4002 - -/* SW HASH */ -#define ERR_HASH_WRONG_HASH_LEN 0x5000 - -/* HW AES */ -#define ERR_KER_CRYPTO_INVALID_MODE 0x6000 -#define ERR_HACC_MODE_INVALID 0x6001 -#define ERR_HACC_KEY_INVALID 0x6002 -#define ERR_HACC_DATA_UNALIGNED 0x6003 -#define ERR_HACC_SEED_LEN_ERROR 0x6004 -#define ERR_HACC_ENC_FAIL 0x6005 -#define ERR_HACC_DEC_FAIL 0x6006 -#define ERR_HACC_HW_WRAP_KEY_NOT_INIT 0x6007 -#define ERR_HACC_SW_KEY_NOT_INIT 0x6008 -#define ERR_SBOOT_HACC_INIT_FAIL 0x6009 -#define ERR_SBOOT_HACC_LOCK_FAIL 0x600A -#define ERR_HACC_ENABLE_CLK_FAIL 0x600B -#define ERR_HACC_UNKOWN_USER 0x600C -#define ERR_HACC_OPEN_SECURE_CONNECTION_FAIL 0x6010 -#define ERR_HACC_REQUEST_SECURE_SERVICE_FAIL 0x6011 -#define ERR_HACC_ALLOCATE_BUFFER_FAIL 0x6012 -#define ERR_HACC_MCMAP_BUFFER_FAIL 0x6013 -#define ERR_HACC_NOTIFY_TO_TRUSTLET_FAIL 0x6014 -#define ERR_HACC_NOTIFY_FROM_TRUSTLET_FAIL 0x6015 -#define ERR_HACC_CLOSE_SECURE_CONNECTION_FAIL 0x6016 - -/* SEC CFG */ -#define ERR_SEC_CFG_ALLOCATE_BUF_FAIL 0x7000 -#define ERR_SEC_CFG_MTD_OPEN_FAIL 0x7001 -#define ERR_SEC_CFG_MTD_READ_FAIL 0x7002 -#define ERR_SEC_CFG_MTD_NOT_FOUND 0x7003 -#define ERR_SEC_CFG_END_PATTERN_NOT_EXIST 0x7004 -#define ERR_SEC_CFG_STATUS_INVALID 0x7005 -#define ERR_SEC_CFG_INVALID_ID 0x7006 -#define ERR_SEC_CFG_INVALID_END_PATTERN 0x7007 -#define ERR_SEC_CFG_MARK_INCOMPLETE_FAIL 0x7008 -#define ERR_SEC_CFG_RESET_FAIL 0x7009 -#define ERR_SEC_CFG_IMG_NOT_FOUND 0x700A -#define ERR_SEC_CFG_IS_FULL 0x700B -#define ERR_SEC_CFG_VERSION_INVALID 0x700C -#define ERR_SEC_CFG_EXT_REGION_SPACE_OVERFLOW 0x700D -#define ERR_SEC_CFG_MAGIC_INVALID 0x700E -#define ERR_SEC_CFG_EXT_REGION_SELF_COPY_FAIL 0x700F -#define ERR_SEC_CFG_EXT_REGION_OFFSET_INVALID 0x7010 -#define ERR_SEC_CFG_EXT_REGION_SIZE_CHANGE 0x7011 - -/* SEC BOOT UPDATE */ -#define ERR_SBOOT_UPDATE_IMG_NOT_FOUND_IN_SECCFG 0x8000 -#define ERR_SBOOT_UPDATE_IMG_NOT_FOUND_IN_MTD 0x8001 -#define ERR_SBOOT_UPDATE_IMG_OPEN_FAIL 0x8002 -#define ERR_SBOOT_UPDATE_IMG_READ_FAIL 0x8003 -#define ERR_SBOOT_UPDATE_SEC_CFG_FAIL 0x8004 -#define ERR_SBOOT_UPDATE_SEC_RO_FAIL 0x8005 -#define ERR_SBOOT_UPDATE_CANNOT_ROLLBACK_VER 0x8006 -#define ERR_SBOOT_UPDATE_SEC_VER_NOT_FOUND 0x8007 -#define ERR_SBOOT_UPDATE_CUST_NAME_MISMATCH 0x8008 -#define ERR_SBOOT_UPDATE_IMG_INVALID 0x8009 -#define ERR_SBOOT_UPDATE_CUST_NAME_CANNOT_BE_NULL 0x800A - -/* SEC BOOT LIBRARY */ -#define SEC_SBOOT_INFO_PART_NOT_FOUND 0x9000 -#define SEC_SBOOT_OPEN_SEC_DRV_FAIL 0x9001 -#define SEC_SBOOT_SEC_DRV_IOCTL_FAIL 0x9002 -#define SEC_SBOOT_INFO_PART_WRITE_OPEN_FAIL 0x9003 -#define SEC_SBOOT_INFO_PART_WRITE_FAIL 0x9004 -#define SEC_SBOOT_INFO_INIT_FAIL 0x9005 -#define SEC_SBOOT_STATUE_QUERY_FAIL 0x9006 -#define SEC_SBOOT_NOT_ENABLED 0x9007 -#define SEC_SUSBDL_STATUE_QUERY_FAIL 0x9008 -#define SEC_SUSBDL_NOT_ENABLED 0x9009 -#define SEC_SBOOT_MARK_STATUS_FAIL 0x900A -#define SEC_SBOOT_NOT_INIT_YET 0x900B -#define SEC_SBOOT_NOTIFY_DRIVER_FAIL 0x900C -#define SEC_SBOOT_INVALID_IMG_ATTR 0x900D - -/* MTD / USIF */ -#define ERR_MTD_INFO_NOT_FOUND 0xA000 -#define ERR_MTD_PART_COUNT_INVALID 0xA001 -#define ERR_MTD_PART_NOT_FOUND 0xA002 -#define ERR_MTD_PART_READ_FAIL 0xA003 -#define ERR_MTD_PART_WRITE_FAIL 0xA004 -#define ERR_MTD_PART_ADJUST_OFFSET_FAIL 0xA005 -#define ERR_MTD_PART_READ_MEMINFO_FAIL 0xA006 -#define ERR_MTD_PART_INVALID_MEMINFO_FAIL 0xA007 -#define ERR_MTD_NOT_SUPPORT_READ_YAFFS2 0xA008 -#define ERR_USIF_PART_READ_FAIL 0xA009 -#define ERR_USIF_PART_WRITE_FAIL 0xA00A -#define ERR_USIF_PROC_READ_FAIL 0xA00B -#define ERR_USIF_PROC_RN_NOT_FOUND 0xA00C -#define ERR_MTD_NOT_SUPPORT_WRITE_YAFFS2 0xA00D -#define ERR_USIF_NOT_SUPPORT_WRITE_YAFFS2 0xA00E -#define ERR_USIF_NOT_SUPPORT_READ_YAFFS2 0xA00F -#define ERR_GPT_PART_NAME_IS_NULL 0xA010 -#define ERR_GPT_PART_NAME_NOT_FOUND 0xA011 - - - -/* SEC BOOT CHECK */ -#define ERR_SBOOT_CHECK_IMG_NOT_FOUND_IN_SECCFG 0xB000 -#define ERR_SBOOT_CHECK_IMG_NOT_FOUND_IN_MTD 0xB001 -#define ERR_SBOOT_CHECK_IMG_OPEN_FAIL 0xB002 -#define ERR_SBOOT_CHECK_IMG_READ_FAIL 0xB003 -#define ERR_SBOOT_CHECK_SEC_CFG_FAIL 0xB004 -#define ERR_SBOOT_CHECK_IMG_VERIFY_FAIL 0xB005 -#define ERR_SBOOT_CHECK_INVALID_IMAGE_OFFSET 0xB006 -#define ERR_SBOOT_CHECK_QUERY_ENABLED_FAIL 0xB007 -#define ERR_SBOOT_CHECK_PART_INVALID_STATUS 0xB008 -#define ERR_SBOOT_CHECK_MD_HDR_MAGIC_ERROR 0xB009 -#define ERR_SBOOT_CHECK_MD_NAME_INVLAID 0xB00A -#define ERR_SBOOT_CHECK_MD_VER_CANNOT_ROLLBACK 0xB00B -#define ERR_SBOOT_CHECK_INVALID_IMG_MAGIC_NUM 0xB00C -#define ERR_SBOOT_CHECK_INVALID_MODEM 0xB00D -#define ERR_SBOOT_CHECK_FL_NAME_INVLAID 0xB00E -#define ERR_SBOOT_CHECK_FL_VER_CANNOT_ROLLBACK 0xB00F -#define ERR_SBOOT_CHECK_INVALID_IMG_TYPE 0xB010 - -/* META */ -#define ERR_META_NOT_CORRECT_MODE 0xC000 -#define ERR_NVRAM_DATA_NOT_ALIGNED 0xC001 -#define ERR_NVRAM_ENC_IOCTL_FAIL 0xC002 -#define ERR_NVRAM_DEC_IOCTL_FAIL 0xC002 -#define ERR_NVRAM_CIPHER_UT_FAIL 0xC003 - -/* YAFFS2 COMMON */ -#define ERR_YAFFS2_PART_READ_FAIL 0xD000 - -/* FILE SYSTEM */ -#define ERR_FS_ANDROID_SEC_LIST_NOT_SPECIFY 0xE000 -#define ERR_FS_SECRO_SEC_LIST_NOT_SPECIFY 0xE001 -#define ERR_FS_SEC_LIST_NOT_SPECIFY 0xE002 -#define ERR_FS_READ_SEC_LIST_FAIL 0xE003 -#define ERR_FS_SIGN_LENGTH_INVALID 0xE004 -#define ERR_FS_READ_BUF_IS_NULL 0xE005 -#define ERR_FS_OPEN_SEC_FILE_FAIL 0xE006 -#define ERR_FS_READ_SEC_FILE_FAIL 0xE007 -#define ERR_FS_READ_BUF_ALLOCATE_FAIL 0xE008 -#define ERR_FS_READ_SIZE_FAIL 0xE009 -#define ERR_FS_UNSUPPORT_IMAGE_NAME 0xE00A -#define ERR_FS_SEC_LIST_NOT_SIGNED 0xE00B -#define ERR_FS_READ_MODEM_FAIL 0xE00C -#define ERR_FS_MD_BIN_NOT_SPECIFY 0xE00D -#define ERR_FS_SECRO_OPEN_FAIL 0xE00E -#define ERR_FS_SECRO_READ_SIZE_CANNOT_BE_ZERO 0xE00F -#define ERR_FS_SECRO_READ_FAIL 0xE010 -#define ERR_FS_SECRO_AP_INVALID 0xE011 -#define ERR_FS_SECRO_MD_INVALID 0xE012 -#define ERR_FS_SECRO_READ_WRONG_SIZE 0xE013 - -/* SIGN FORMAT */ -#define ERR_SIGN_FORMAT_HASH_SIZE_WRONG 0xE100 -#define ERR_SIGN_FORMAT_MAGIC_WRONG 0xE101 -#define ERR_SIGN_FORMAT_GENERATE_HASH_FAIL 0xE102 -#define ERR_SIGN_FORMAT_EXT_MAGIC_WRONG 0xE103 -#define ERR_SIGN_FORMAT_EXT_HDR_MAGIC_WRONG 0xE104 -#define ERR_SIGN_FORMAT_EXT_TYPE_NOT_SUPPORT 0xE105 -#define ERR_SIGN_FORMAT_EXT_HDR_NOT_FOUND 0xE106 -#define ERR_SIGN_FORMAT_CAL_HASH_BY_CHUNK_FAIL 0xE107 - -/* SECRO IMAGE */ -#define ERR_SECROIMG_MTD_NOT_FOUND 0xF000 -#define ERR_SECROIMG_HACC_IS_LOCK 0xF001 -#define ERR_SECROIMG_HACC_INIT_FAIL 0xF002 -#define ERR_SECROIMG_DECRYPT_INVALID 0xF003 -#define ERR_SECROIMG_PART_NOT_FOUND 0xF004 -#define ERR_SECROIMG_INVALID_IMG_LEN 0xF005 -#define ERR_SECROIMG_ALLOCATE_BUF_FAIL 0xF006 -#define ERR_SECROIMG_IS_EMPTY 0xF007 -#define ERR_SECROIMG_MD_BUF_NOT_ENOUGH 0xF008 -#define ERR_SECROIMG_HACC_AP_DECRYPT_FAIL 0xF009 -#define ERR_SECROIMG_HACC_MD_DECRYPT_FAIL 0xF00A -#define ERR_SECROIMG_INVALID_BUF_LEN 0xF00B -#define ERR_SECROIMG_LEN_INCONSISTENT_WITH_PL 0xF00C -#define ERR_SECROIMG_HASH_CHECK_FAIL 0xF00D -#define ERR_SECROIMG_EMPTY_MD_INFO_STR 0xF00E -#define ERR_SECROIMG_MD_INFO_NOT_EXIST 0xF00F -#define ERR_SECROIMG_NEITHER_V3_NOR_V5_FORMAT 0xF010 -#define ERR_SECROIMG_V5_HASH_CHECK_FAIL 0xF011 -#define ERR_SECROIMG_V3_OFFSET_NOT_INIT 0xF012 - - - - - - -#endif /* SEC_ERROR_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_fsutil_inter.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_fsutil_inter.h deleted file mode 100644 index 7943e9f35..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_fsutil_inter.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef FSUTILS_INTER_H -#define FSUTILS_INTER_H - -/****************************************************************************** - * EXPORT FUNCTION - ******************************************************************************/ -unsigned int sec_fs_read_secroimg (char* path, char* buf); - -#endif diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_hdr.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_hdr.h deleted file mode 100644 index 230e5274c..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_hdr.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef SEC_HDR_H -#define SEC_HDR_H - -/****************************************************************************** - * INCLUDE LIBRARY - ******************************************************************************/ -#include "sec_boot_lib.h" - -/************************************************************************** - * EXPORT FUNCTIONS - **************************************************************************/ -extern unsigned int shdr_magic (SEC_IMG_HEADER_U* sec_hdr); -extern unsigned char* shdr_cust_name (SEC_IMG_HEADER_U* sec_hdr); -extern unsigned int shdr_cust_name_len (SEC_IMG_HEADER_U* sec_hdr); -extern unsigned int shdr_img_ver (SEC_IMG_HEADER_U* sec_hdr); -extern unsigned int shdr_img_len (SEC_IMG_HEADER_U* sec_hdr); -extern unsigned int shdr_img_offset (SEC_IMG_HEADER_U* sec_hdr); -extern unsigned int shdr_sign_len (SEC_IMG_HEADER_U* sec_hdr); -extern unsigned int shdr_sign_offset (SEC_IMG_HEADER_U* sec_hdr); -extern unsigned int shdr_sig_len (SEC_IMG_HEADER_U* sec_hdr); -extern unsigned int shdr_sig_offset (SEC_IMG_HEADER_U* sec_hdr); -extern void set_shdr_magic (SEC_IMG_HEADER_U* sec_hdr, unsigned int val); -extern void set_shdr_img_ver (SEC_IMG_HEADER_U* sec_hdr, unsigned int ver); -extern void set_shdr_cust_name (SEC_IMG_HEADER_U* sec_hdr, unsigned char* name, unsigned int len); -extern void set_shdr_sign_len (SEC_IMG_HEADER_U* sec_hdr, unsigned int val); -extern void set_shdr_sign_offset (SEC_IMG_HEADER_U* sec_hdr, unsigned int val); -extern void set_shdr_ver (SEC_IMG_HEADER_VER ver); -extern SEC_IMG_HEADER_VER get_shdr_ver (void); - -#endif /* SEC_HDR_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_ioctl.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_ioctl.h deleted file mode 100644 index d5e8e21fb..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_ioctl.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef SEC_IOCTL_H -#define SEC_IOCTL_H - -/* use 's' as magic number */ -#define SEC_IOC_MAGIC 's' - -/* random id */ -#define SEC_GET_RANDOM_ID _IOR(SEC_IOC_MAGIC, 1, unsigned int) - -/* secure boot init */ -#define SEC_BOOT_INIT _IOR(SEC_IOC_MAGIC, 2, unsigned int) -#define SEC_BOOT_IS_ENABLED _IOR(SEC_IOC_MAGIC, 3, unsigned int) - -/* secure seccfg process */ -#define SEC_SECCFG_DECRYPT _IOR(SEC_IOC_MAGIC, 4, unsigned int) -#define SEC_SECCFG_ENCRYPT _IOR(SEC_IOC_MAGIC, 5, unsigned int) - -/* secure usbdl */ -#define SEC_USBDL_IS_ENABLED _IOR(SEC_IOC_MAGIC, 6, unsigned int) - -/* HACC HW */ -#define SEC_HACC_CONFIG _IOR(SEC_IOC_MAGIC, 7, unsigned int) -#define SEC_HACC_LOCK _IOR(SEC_IOC_MAGIC, 8, unsigned int) -#define SEC_HACC_UNLOCK _IOR(SEC_IOC_MAGIC, 9, unsigned int) -#define SEC_HACC_ENABLE_CLK _IOR(SEC_IOC_MAGIC, 10, unsigned int) - -/* secure boot check */ -#define SEC_BOOT_PART_CHECK_ENABLE _IOR(SEC_IOC_MAGIC, 11, unsigned int) -#define SEC_BOOT_NOTIFY_MARK_STATUS _IOR(SEC_IOC_MAGIC, 12, unsigned int) -#define SEC_BOOT_NOTIFY_PASS _IOR(SEC_IOC_MAGIC, 13, unsigned int) -#define SEC_BOOT_NOTIFY_FAIL _IOR(SEC_IOC_MAGIC, 14, unsigned int) -#define SEC_BOOT_NOTIFY_RMSDUP_DONE _IOR(SEC_IOC_MAGIC, 15, unsigned int) -#define SEC_BOOT_NOTIFY_STATUS _IOR(SEC_IOC_MAGIC, 19, unsigned int) - -/* rom info */ -#define SEC_READ_ROM_INFO _IOR(SEC_IOC_MAGIC, 16, unsigned int) - -/* META */ -#define SEC_NVRAM_HW_ENCRYPT _IOR(SEC_IOC_MAGIC, 17, unsigned int) -#define SEC_NVRAM_HW_DECRYPT _IOR(SEC_IOC_MAGIC, 18, unsigned int) - -/* HEVC */ -#define SEC_HEVC_EOP _IOR(SEC_IOC_MAGIC, 20, unsigned int) -#define SEC_HEVC_DOP _IOR(SEC_IOC_MAGIC, 21, unsigned int) - -#define SEC_IOC_MAXNR (22) - -#define SEC_DEV "/dev/sec" - -#endif /* end of SEC_IOCTL_H */ diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_key.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_key.h deleted file mode 100644 index f0fb7e328..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_key.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef SEC_KEY_H -#define SEC_KEY_H - -/************************************************************************** - * [SEC-KEY ID] - **************************************************************************/ -#define ROM_INFO_SEC_KEY_ID "AND_SECKEY_v" -#define ROM_INFO_SEC_KEY_VER 0x1 - - -/************************************************************************** - * [SEC-KEY FORNAT] - **************************************************************************/ -#define AND_SEC_KEY_SIZE (592) - -typedef struct { - unsigned char m_id[16]; - unsigned int m_sec_key_ver; - - /* rsa key */ - /* image auth key length is 256/2 = 128 */ - unsigned char img_auth_rsa_n[256]; - unsigned char img_auth_rsa_e[5]; - - /* sml aes key */ - unsigned char sml_aes_key[32]; - - /* crypto seed */ - unsigned char crypto_seed[16]; - - /* rsa key */ - /* sml auth key length is 256/2 = 128 */ - unsigned char sml_auth_rsa_n[256]; - unsigned char sml_auth_rsa_e[5]; - -} AND_SECKEY_T; - -#endif /* SEC_KEY_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_key_util.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_key_util.h deleted file mode 100644 index 574747a33..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_key_util.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef SEC_KEY_UTIL_H -#define SEC_KEY_UTIL_H - -/************************************************************************** - * EXPORT FUNCTION - **************************************************************************/ -extern void sec_decode_key(unsigned char* key, unsigned int key_len, unsigned char* seed, unsigned int seed_len); - -#endif /* SEC_KEY_UTIL_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_log.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_log.h deleted file mode 100644 index 12092892b..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_log.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef LOGGING_H -#define LOGGING_H - -/************************************************************************** -* DEBUG CONTROL -**************************************************************************/ -#include <mach/sec_osal.h> -#include "sec_osal_light.h" -#define NEED_TO_PRINT(flag) ((flag) == true) -#define SMSG(debug_level, ...) do \ - { \ - if(NEED_TO_PRINT(debug_level)) \ - printk(__VA_ARGS__); \ - } while(0); - -/************************************************************************** - * EXTERNAL VARIABLE - **************************************************************************/ -extern bool bMsg; - -#endif /* LOGGING_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_mtd.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_mtd.h deleted file mode 100644 index 49fafe4d2..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_mtd.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SEC_MTD_H -#define SEC_MTD_H - -#include <mach/sec_osal.h> - -/************************************************************************** -* MTD INTERNAL DEFINITION -**************************************************************************/ -typedef struct _MtdRCtx -{ - char *buf; - ASF_FILE fd; - -} MtdRCtx; - -/************************************************************************** -* MTD CONFIGURATION -**************************************************************************/ -#define ROM_INFO_SEARCH_LEN (0x100000) -#define SECRO_SEARCH_START (0x0) -#define SECRO_SEARCH_LEN (0x100000) - -/* mtd number */ -#define MTD_PL_NUM (0x0) -#define MTD_SECCFG_NUM (0x3) - -/* indicate the search region each time */ -#define ROM_INFO_SEARCH_REGION (0x2000) -#define SECRO_SEARCH_REGION (0x4000) - -/****************************************************************************** - * EXPORT FUNCTION - ******************************************************************************/ -extern void sec_mtd_find_partitions(void); -extern unsigned int sec_mtd_read_image(char* part_name, char* buf, unsigned int off, unsigned int sz); -extern unsigned int sec_mtd_get_off(char* part_name); - -#endif // SEC_MTD_H diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_mtd_util.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_mtd_util.h deleted file mode 100644 index f01110bbf..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_mtd_util.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef MTD_UTILS_H -#define MTD_UTILS_H - -/************************************************************************** -* PARTITION RECORD -**************************************************************************/ -#if defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) - -typedef struct _MtdPart -{ - char name[16]; - unsigned long long sz; - unsigned long long off; - unsigned long long e_size; - -} MtdPart; - -#else - -typedef struct _MtdPart -{ - char name[16]; - unsigned int sz; - unsigned int off; - unsigned int e_size; - -} MtdPart; - -#endif -/************************************************************************** -* MTD CONFIGURATION -**************************************************************************/ -/* partition table read from /proc/mtd */ -#define MAX_MTD_PARTITIONS (25) - -/* search region and off */ -//#ifdef EMMC_PROJECT -/* work for nand and emmc */ -#define ROM_INFO_SEARCH_START (0x0) -//#else -//#define ROM_INFO_SEARCH_START (0x20000) -//#endif - -/************************************************************************** - * EXPORT VARIABLES - **************************************************************************/ -extern MtdPart mtd_part_map[]; - -/************************************************************************** - * UTILITY - **************************************************************************/ -char* mtd2pl (char* part_name); -char* pl2mtd (char* part_name); - -#endif // MTD_UTILS_H diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_nvram.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_nvram.h deleted file mode 100644 index b3de22fbe..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_nvram.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef SEC_META_H -#define SEC_META_H - -/* used for META library */ -#define NVRAM_CIPHER_LEN (16) - -/****************************************************************************** - * MODEM CONTEXT FOR BOTH USER SPACE PROGRAM AND KERNEL MODULE - ******************************************************************************/ -typedef struct -{ - unsigned char data[NVRAM_CIPHER_LEN]; - unsigned int ret; - -} META_CONTEXT; - -/****************************************************************************** - * EXPORT FUNCTIONS - ******************************************************************************/ -extern int sec_nvram_enc (META_CONTEXT *meta_ctx); -extern int sec_nvram_dec (META_CONTEXT *meta_ctx); - -#endif /* SEC_META_H*/ diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_osal_light.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_osal_light.h deleted file mode 100644 index 99b8d640c..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_osal_light.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef SEC_OSAL_LIGHT_H -#define SEC_OSAL_LIGHT_H - -/************************************************************************** - * INCLUDE HEADERS - **************************************************************************/ -#include <linux/string.h> -#include <linux/stddef.h> -#include <linux/kernel.h> -#include <linux/types.h> -#include <stdbool.h> -#include <linux/printk.h> -#include <asm/io.h> -#include <linux/err.h> - -#endif /* SEC_OSAL_LIGHT_H */ diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_rom_info.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_rom_info.h deleted file mode 100644 index edfe20f8d..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_rom_info.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef SEC_ROMINFO_H -#define SEC_ROMINFO_H - -#include "sec_boot.h" -#include "sec_key.h" -#include "sec_ctrl.h" - - -/************************************************************************** - * INIT VARIABLES - **************************************************************************/ -#define RI_NAME "AND_ROMINFO_v" -#define RI_NAME_LEN 13 -/* VER1 - only a ROM INFO region is provided */ -/* VER2 - ANTI-CLONE feature is supported */ -#define ROM_INFO_VER 0x2 -#define ROM_INFO_SEC_RO_EXIST 0x1 -#define ROM_INFO_ANTI_CLONE_OFFSET 0x54 -#define ROM_INFO_ANTI_CLONE_LENGTH 0xE0 -#define ROM_INFO_DEFAULT_SEC_CFG_OFFSET 0x360000 -#define ROM_INFO_SEC_CFG_LENGTH 0x20000 - -/************************************************************************** - * ANDRIOD ROM INFO FORMAT - **************************************************************************/ -/* this structure should always sync with FlashLib - becuase FlashLib will search storage to find ROM_INFO */ -#define AND_ROM_INFO_SIZE (960) -typedef struct { - - unsigned char m_id[16]; /* MTK */ - unsigned int m_rom_info_ver; /* MTK */ - unsigned char m_platform_id[16]; /* CUSTOMER */ - unsigned char m_project_id[16]; - - unsigned int m_sec_ro_exist; /* MTK */ - unsigned int m_sec_ro_offset; /* MTK */ - unsigned int m_sec_ro_length; /* MTK */ - - unsigned int m_ac_offset; /* MTK : - no use */ - - unsigned int m_ac_length; /* MTK : - no use */ - - unsigned int m_sec_cfg_offset; /* MTK : - part info. from - parititon table. - - tool will refer to - this setting to - find SEC CFG */ - - unsigned int m_sec_cfg_length; /* MTK : - part info. from - parititon table. - - tool will refer to - this setting to - find SEC CFG */ - - unsigned char m_reserve1[128]; - - AND_SECCTRL_T m_SEC_CTRL; /* CUSTOMER : - secure feature - control */ - - unsigned char m_reserve2[18]; - - /* CUSTOMER : - secure boot check - partition */ - AND_SECBOOT_CHECK_PART_T m_SEC_BOOT_CHECK_PART; - - AND_SECKEY_T m_SEC_KEY; /* CUSTOMER : - key */ - -} AND_ROMINFO_T; - -#endif /* SEC_ROMINFO_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_secroimg.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_secroimg.h deleted file mode 100644 index f78687cc6..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_secroimg.h +++ /dev/null @@ -1,198 +0,0 @@ -#ifndef AC_REGION_H -#define AC_REGION_H - -#include "sec_osal_light.h" - -/************************************************************************** - * [FILE SYSTEM SECROIMG PATH] - **************************************************************************/ -/* it is only used for non-security platform */ -#define FS_SECRO_PATH "/system/secro/AC_REGION" - - -/************************************************************************** - * [AC REGION ID] - **************************************************************************/ -#define ROM_SEC_AC_REGION_ID "AND_AC_REGION" -#define ROM_SEC_AC_REGION_ID_LEN (13) - -#define RES_FOR_HEADER (0x400) // 1KB -#define ROM_SEC_AC_SEARCH_LEN 0x100000 // 1MB - -#define MAX_SECRO_V3_OFFSET 0xFFFFFFFF - - - -/************************************************************************** - * [AC-REGION HEADER FORNAT] - **************************************************************************/ -#define AC_H_MAGIC (0x48484848) - -typedef struct { - - unsigned char m_id[16]; - unsigned int magic_number; - - unsigned int region_length; /* include andro and sv5*/ - unsigned int region_offset; - - unsigned int hash_length; - unsigned int hash_offset; - - unsigned int andro_length; - unsigned int andro_offset; - - unsigned int md_length; - unsigned int md_offset; - - unsigned int md2_length; - unsigned int md2_offset; - - unsigned char world_phone_support; /* for secro v5 format to support world phone case */ - unsigned char world_phone_md_count; /* for secro v5 format to support world phone case */ - - unsigned char reserve[2]; - -} AND_AC_HEADER_T; - - -/************************************************************************** - * [AC-REGION ANDRO FORNAT] - **************************************************************************/ -#define AC_ANDRO_MAGIC (0x41414141) -#define AP_SECRO_MAX_LEN (2939) - -/* control flag */ -#define FACTORY_EN_CODE (0x45) - -typedef struct { - - unsigned int magic_number; - unsigned char sml_aes_key[32]; /* sml aes key */ - unsigned char factory_en; - unsigned char reserve2[AP_SECRO_MAX_LEN]; - -} AND_AC_ANDRO_T; - -/************************************************************************** - * [AC-REGION MD FORNAT] - **************************************************************************/ -#define AC_MD_MAGIC (0x35353535) -#define MD_SECRO_MAX_LEN (4092) - -typedef struct { - - unsigned int magic_number; - unsigned char reserve[MD_SECRO_MAX_LEN]; - -} AND_AC_MD_T; - -#define AC_MD2_MAGIC (0x36363636) -#define MD2_SECRO_MAX_LEN (4092) - -typedef struct { - - unsigned int magic_number; - unsigned char reserve[MD2_SECRO_MAX_LEN]; - -} AND_AC_MD2_T; - - -/************************************************************************** - * [Padding format to be able to align to 512/1024/2048/4096 for flash] - **************************************************************************/ -typedef struct { - unsigned int md_num; - unsigned int md_len; - unsigned char md_name[64]; - unsigned char reserve[8]; -} AND_AC_MD_INFO_V3a_T; - -#define MAX_V5_SUPPORT_MD_NUM 10 - -typedef struct { - AND_AC_MD_INFO_V3a_T md_v3a_info[MAX_V5_SUPPORT_MD_NUM]; - unsigned char reserve[224]; -} AND_SECROIMG_PADDING_T; - - - -/************************************************************************** - * [AC-REGION FORNAT] - **************************************************************************/ -typedef struct { - - AND_AC_HEADER_T m_header; /* 64 */ - AND_AC_ANDRO_T m_andro; /* 0xBA0 : 2976 */ - AND_AC_MD_T m_md; /* 0x1000 : 4096 */ - AND_AC_MD2_T m_md2; /* 0x1000 : 4096 */ - unsigned char hash[32]; /* it can be extended to SHA256 */ - AND_SECROIMG_PADDING_T m_padding; /* 0x400 : 1024 ,use padding area to store MD1 ~ MD10 modem_info*/ -} AND_SECROIMG_T; - - -/************************************************************************** - * [SECROIMG v5a FORNAT for v5] - To support world phone - **************************************************************************/ -typedef struct { - unsigned char m_identifier[16]; - unsigned int magic_number; - - unsigned int region_len; /* include andro, sv5 and hash */ - unsigned int region_off; - - unsigned int hash_len; - unsigned int hash_off; - - unsigned int md_info_len; - unsigned int md_info_off; - - unsigned int md_len; - unsigned int md_off; - - unsigned char reserve[12]; -} AND_AC_HEADER_V5a_T; - -#define AC_MD_INFO_MAGIC (0x42424242) - -typedef struct { - unsigned int magic_number; /* Should be 0x42424242 */ - unsigned char md_name[64]; - unsigned int md_num; - unsigned char reserve[2904]; -} AND_AC_MD_INFO_V5a_T; - -#define AC_SV5_MAGIC_MD_V5a (0x37373737) -#define MD_V5a_SECRO_MAX_LEN (8188) - -typedef struct { - unsigned int magic_number; /* Should be 0x37373737 */ - unsigned char reserve[MD_V5a_SECRO_MAX_LEN]; -} AND_AC_MD_V5a_T; - -#define AND_SECROIMG_V5a_SIZE (0x3000) - -typedef struct { - AND_AC_HEADER_V5a_T m_header_v5a; /* 64B */ - AND_AC_MD_INFO_V5a_T m_md_info_v5a; /* 0xBA0 : 2976B */ - AND_AC_MD_V5a_T m_md_sro_v5a; /* 0x1000 : 8192B */ - unsigned char hash_v5a[32]; /* 32B, it can be extended to SHA256 */ - AND_SECROIMG_PADDING_T padding; -} AND_SECROIMG_V5a_T; - - -//typedef enum{ -// SECRO_MD1 = 0, -// SECRO_MD2, -//} SECRO_USER; - -/************************************************************************** - * [EXPORT FUNCTION] - **************************************************************************/ -extern unsigned int sec_secro_check (void); -extern bool sec_secro_ac (void); -extern uint32 sec_secro_v5_check (void); -extern unsigned char masp_secro_en (void); - - -#endif /* AC_REGION_H */ diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_sign_extension.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_sign_extension.h deleted file mode 100644 index 33736b096..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_sign_extension.h +++ /dev/null @@ -1,152 +0,0 @@ -#ifndef _SEC_SIGN_EXTENSION_H -#define _SEC_SIGN_EXTENSION_H - -#define MAX_VERITY_COUNT 32 -#define SEC_EXTENSION_MAGIC (0x7A797A79) -#define SEC_EXTENSION_MAGIC_V4 (0x7B797B79) -#define SEC_EXTENSION_HEADER_MAGIC (0x45454545) - -#define CRYPTO_SIZE_UNKNOWN 0 - -typedef enum -{ - SEC_EXT_HDR_UNKNOWN = 0, - SEC_EXT_HDR_CRYPTO = 1, - SEC_EXT_HDR_FRAG_CFG = 2, - SEC_EXT_HDR_HASH_ONLY = 3, - SEC_EXT_HDR_HASH_SIG = 4, - SEC_EXT_HDR_SPARSE = 5, - SEC_EXT_HDR_HASH_ONLY_64 = 6, - - SEC_EXT_HDR_END_MARK = 0xFFFFFFFF -} SEC_EXT_HEADER_TYPE; - -typedef enum -{ - SEC_CRYPTO_HASH_UNKNOWN = 0, - SEC_CRYPTO_HASH_MD5 = 1, - SEC_CRYPTO_HASH_SHA1 = 2, - SEC_CRYPTO_HASH_SHA256 = 3, - SEC_CRYPTO_HASH_SHA512 = 4, - -} SEC_CRYPTO_HASH_TYPE; - -typedef enum -{ - SEC_CRYPTO_SIG_UNKNOWN = 0, - SEC_CRYPTO_SIG_RSA512 = 1, - SEC_CRYPTO_SIG_RSA1024 = 2, - SEC_CRYPTO_SIG_RSA2048 = 3, - -} SEC_CRYPTO_SIGNATURE_TYPE; - -typedef enum -{ - SEC_CRYPTO_ENC_UNKNOWN = 0, - SEC_CRYPTO_ENC_RC4 = 1, - SEC_CRYPTO_ENC_AES128 = 2, - SEC_CRYPTO_ENC_AES192 = 3, - SEC_CRYPTO_ENC_AES256 = 4, - -} SEC_CRYPTO_ENCRYPTION_TYPE; - -typedef enum -{ - SEC_SIZE_HASH_MD5 = 16, - SEC_SIZE_HASH_SHA1 = 20, - SEC_SIZE_HASH_SHA256 = 32, - SEC_SIZE_HASH_SHA512 = 64, - -} SEC_CRYPTO_HASH_SIZE_BYTES; - -typedef enum -{ - SEC_SIZE_SIG_RSA512 = 64, - SEC_SIZE_SIG_RSA1024 = 128, - SEC_SIZE_SIG_RSA2048 = 256, - -} SEC_CRYPTO_SIGNATURE_SIZE_BYTES; - - -typedef enum -{ - SEC_CHUNK_SIZE_ZERO = 0, - SEC_CHUNK_SIZE_UNKNOWN = 0x00100000, - SEC_CHUNK_SIZE_1M = 0x00100000, - SEC_CHUNK_SIZE_2M = 0x00200000, - SEC_CHUNK_SIZE_4M = 0x00400000, - SEC_CHUNK_SIZE_8M = 0x00800000, - SEC_CHUNK_SIZE_16M = 0x01000000, - SEC_CHUNK_SIZE_32M = 0x02000000, - -} SEC_FRAG_CHUNK_SIZE_BYTES; - - -typedef struct _SEC_EXTENSTION_CRYPTO -{ - unsigned int magic; - unsigned int ext_type; - unsigned char hash_type; - unsigned char sig_type; - unsigned char enc_type; - unsigned char reserved; -} SEC_EXTENSTION_CRYPTO; - -typedef struct _SEC_FRAGMENT_CFG -{ - unsigned int magic; - unsigned int ext_type; - unsigned int chunk_size; - unsigned int frag_count; -} SEC_FRAGMENT_CFG; - -typedef struct _SEC_EXTENSTION_HASH_ONLY -{ - unsigned int magic; - unsigned int ext_type; - unsigned int sub_type; /* hash type */ - unsigned int hash_offset; - unsigned int hash_len; - unsigned char hash_data[]; -} SEC_EXTENSTION_HASH_ONLY; - - -typedef struct _SEC_EXTENSTION_HASH_ONLY_64 -{ - unsigned int magic; - unsigned int ext_type; - unsigned int sub_type; /* hash type */ - unsigned int padding; - unsigned long long hash_offset_64; - unsigned long long hash_len_64; - unsigned char hash_data[]; -} SEC_EXTENSTION_HASH_ONLY_64; - -typedef struct _SEC_EXTENSTION_HASH_SIG -{ - unsigned int magic; - unsigned int ext_type; - unsigned int sig_type; /* sig type */ - unsigned int hash_type; /* hash type */ - unsigned int auth_offset; - unsigned int auth_len; - unsigned char auth_data[]; /* sig + hash */ -} SEC_EXTENSTION_HASH_SIG; - -typedef struct _SEC_EXTENSTION_END_MARK -{ - unsigned int magic; - unsigned int ext_type; -} SEC_EXTENSTION_END_MARK; - -typedef struct _SEC_IMG_EXTENSTION_SET -{ - SEC_EXTENSTION_CRYPTO *crypto; - SEC_FRAGMENT_CFG *frag; - SEC_EXTENSTION_END_MARK *end; - SEC_EXTENSTION_HASH_ONLY **hash_only; - SEC_EXTENSTION_HASH_ONLY_64 **hash_only_64; -} SEC_IMG_EXTENSTION_SET; - -#endif - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_sign_header.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_sign_header.h deleted file mode 100644 index c97435f1a..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_sign_header.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef SECIMGHEADER_H -#define SECIMGHEADER_H - -/************************************************************************** - * SIGN CFG PARSING - **************************************************************************/ -#define CUSTOM_NAME "CUSTOM_NAME" -#define IMAGE_VERSION "IMAGE_VERSION" - -/* in order to speedup verification, you can customize the image size - which should be signed and checked at boot time */ -#define VERIFY_OFFSET "VERIFY_OFFSET" -#define VERIFY_LENGTH "VERIFY_LENGTH" - -/************************************************************************** - * SEC IMAGE HEADER FORMAT - **************************************************************************/ -#define SEC_IMG_MAGIC (0x53535353) -#define SEC_IMG_MAGIC_LEN (4) - -#define SEC_IMG_HEADER_SIZE (64) - -#define HASH_SIZE (20) -#define RSA_KEY_SIZE (128) -#define SIG_LEN (RSA_KEY_SIZE) -#define HASH_SIG_LEN (HASH_SIZE+SIG_LEN) - /* HASH + SIGNATURE */ -/* Legacy (before W1151) */ -typedef struct _SEC_IMG_HEADER_V1 -{ - unsigned int magic_number; - - unsigned char cust_name [16]; - unsigned int image_version; - unsigned int image_length; - unsigned int image_offset; - - unsigned int sign_offset; - unsigned int sign_length; - - unsigned int signature_offset; - unsigned int signature_length; - - unsigned char dummy[16]; - -} SEC_IMG_HEADER_V1; - -/* New (After W1151) */ -typedef struct _SEC_IMG_HEADER_V2 -{ - unsigned int magic_number; - - /* After WK1151, the size of customer name will be changed from 16 - bytes to 32 bytes due to customer's request. To distinguish between the - old version and new version, the simplest way is to check the value of - signature_length. - - Flash tool downloads images by using new format - => Tool can find the image is old because signature_length is all 0x00. - Therefore, Flash tool will automatically apply old image format */ - - unsigned char cust_name [32]; - unsigned int image_version; - unsigned int image_length; - unsigned int image_offset; - - unsigned int sign_offset; - unsigned int sign_length; - - unsigned int signature_offset; - unsigned int signature_length; - -} SEC_IMG_HEADER_V2, SEC_IMG_HEADER_V3, SEC_IMG_HEADER; - -typedef struct _SEC_IMG_HEADER_V4 -{ - unsigned int magic_number; - - unsigned char cust_name [32]; - unsigned int image_verion; - unsigned int signature_length; - unsigned int image_offset; - - unsigned int ext_magic; - unsigned int ext_hdr_length; - - unsigned int image_length_high; - unsigned int image_length_low; -} SEC_IMG_HEADER_V4; - - -typedef union -{ - SEC_IMG_HEADER_V1 v1; - SEC_IMG_HEADER_V2 v2; - SEC_IMG_HEADER_V3 v3; - SEC_IMG_HEADER_V4 v4; - /*this implies all*/ - SEC_IMG_HEADER va; -} SEC_IMG_HEADER_U; - -typedef enum -{ - SEC_HDR_V1 = 1, - SEC_HDR_V2 = 2, - SEC_HDR_V3 = 3, - SEC_HDR_V4 = 4, - UNSET - -} SEC_IMG_HEADER_VER; - -/************************************************************************** - * IMAGE HEADER CHECK OPERATION - **************************************************************************/ - -#define SEC_USBDL_WRITE_IMAGE_HEADER 0x11 -#define SEC_USBDL_WRITE_IMAGE_SIGNATURE_HASH 0x22 -#define SEC_USBDL_IMAGE_INFO_CHECK_RESULT 0x33 -#define SEC_USBDL_WRITE_IMAGE_NAME 0x44 -#define SEC_USBDL_WRITE_IMAGE_OFFSET 0x55 -#define SEC_USBDL_WRITE_TYPE 0x66 -#define SEC_USBDL_WRITE_IMAGE_EXTENSION 0x77 - - -#define SEC_USBDL_IMAGE_NAME_LEN 16 -#define SEC_USBDL_IMAGE_INFO_RESULT_PASS 0x5555 -#define SEC_USBDL_IMAGE_INFO_RESULT_FAIL 0x4444 - - -#endif /* SECIMGHEADER_H */ diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_core.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_core.h deleted file mode 100644 index 7110e57a8..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_core.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _SEC_SIGN_FORMAT_CORE_H -#define _SEC_SIGN_FORMAT_CORE_H - -#include "sec_signfmt_def.h" - -/****************************************************************************** - * EXPORT FUNCTION - ******************************************************************************/ -int sec_signfmt_get_hash_length(SEC_IMG_U *img_if, ASF_FILE fp, char *ext_buf); -int sec_signfmt_get_signature_length(SEC_IMG_U *img_if, ASF_FILE fp, char *ext_buf); -int sec_signfmt_get_extension_length(SEC_IMG_U *img_if, ASF_FILE fp); -int sec_signfmt_verify_file(char *file_path, SEC_IMG_HEADER *img_hdr, unsigned int *data_offset, unsigned int *data_sec_len); -int sec_signfmt_calculate_filelist_hash(char* part_name, SEC_IMG_U *img_if, char *file_path, - char *hash_buf, unsigned int hash_len, char *ext_buf); -int sec_signfmt_calculate_image_hash(char* part_name, SEC_IMG_U *img_if, char *hash_ptr, unsigned int hash_len, char *ext_buf); - -#endif - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_def.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_def.h deleted file mode 100644 index 93616483a..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_def.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _SEC_SIGN_FORMAT_DEF_H -#define _SEC_SIGN_FORMAT_DEF_H - -#include <mach/sec_osal.h> - -#endif - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_util.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_util.h deleted file mode 100644 index 217c86750..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_util.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef SEC_SIGN_FORMAT_UTIL_H -#define SEC_SIGN_FORMAT_UTIL_H - -#include "sec_sign_header.h" -#include "sec_sign_extension.h" -#include "sec_log.h" -#include "sec_osal_light.h" - - -/****************************************************************************** - * EXPORT FUNCTION - ******************************************************************************/ -unsigned int get_hash_size(SEC_CRYPTO_HASH_TYPE hash); -unsigned int get_signature_size(SEC_CRYPTO_SIGNATURE_TYPE sig); -unsigned char is_signfmt_v1(SEC_IMG_HEADER *hdr); -unsigned char is_signfmt_v2(SEC_IMG_HEADER *hdr); -unsigned char is_signfmt_v3(SEC_IMG_HEADER *hdr); -unsigned char is_signfmt_v4(SEC_IMG_HEADER *hdr); - -#endif - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_v2.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_v2.h deleted file mode 100644 index 399392b23..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_v2.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _SEC_SIGN_FORMAT_V2_H -#define _SEC_SIGN_FORMAT_V2_H - -#include "sec_sign_header.h" -#include "sec_signfmt_def.h" - - -/****************************************************************************** - * EXPORT FUNCTION - ******************************************************************************/ -int sec_signfmt_verify_file_v2(ASF_FILE fp, SEC_IMG_HEADER *img_hdr); -unsigned int sec_signfmt_get_extension_length_v2(ASF_FILE fp); -int sec_signfmt_calculate_image_hash_v2(char* part_name, SEC_IMG_HEADER *img_hdr, unsigned int image_type, char *hash_buf, unsigned int hash_len); -unsigned int sec_signfmt_get_hash_length_v2(void); -unsigned int sec_signfmt_get_signature_length_v2(void); - -#endif - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_v3.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_v3.h deleted file mode 100644 index 340e4e744..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_v3.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _SEC_SIGN_FORMAT_V3_H -#define _SEC_SIGN_FORMAT_V3_H - -#include "sec_sign_header.h" -#include "sec_cfg.h" -#include "sec_signfmt_def.h" - -/****************************************************************************** - * EXPORT FUNCTION - ******************************************************************************/ -int sec_signfmt_verify_file_v3(ASF_FILE fp, SEC_IMG_HEADER *img_hdr); -unsigned int sec_signfmt_get_hash_length_v3(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr, char *ext_buf); -unsigned int sec_signfmt_get_signature_length_v3(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr, char *ext_buf); -unsigned int sec_signfmt_get_extension_length_v3(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr); -int sec_signfmt_calculate_image_hash_v3(char* part_name, SECURE_IMG_INFO_V3 *img_if, char *final_hash_buf, unsigned int hash_len, char *ext_buf); - - -#endif - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_v4.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_v4.h deleted file mode 100644 index 54c68cc5d..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_signfmt_v4.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _SEC_SIGN_FORMAT_V4_H -#define _SEC_SIGN_FORMAT_V4_H - -#include "sec_sign_header.h" -#include "sec_cfg.h" -#include "sec_signfmt_def.h" - -/****************************************************************************** - * EXPORT FUNCTION - ******************************************************************************/ -int sec_signfmt_verify_file_v4(ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr_p); -unsigned int sec_signfmt_get_hash_length_v4(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr_p, char *ext_buf); -unsigned int sec_signfmt_get_signature_length_v4(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr_p, char *ext_buf); -unsigned int sec_signfmt_get_extension_length_v4(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr_p); -int sec_signfmt_calculate_image_hash_v4(char* part_name, SECURE_IMG_INFO_V3 *img_if, char *final_hash_buf, unsigned int hash_len, char *ext_buf); - - -#endif - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_typedef.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_typedef.h deleted file mode 100644 index 45a0c0f54..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_typedef.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef SEC_PAL_H -#define SEC_PAL_H - -#include "sec_osal_light.h" -#include <mach/sec_osal.h> - -#ifndef FALSE -#define FALSE 0 -#endif -#ifndef TRUE -#define TRUE 1 -#endif - -typedef unsigned int uint32; -typedef unsigned char uchar; - -/****************************************************************************** - * DEBUG - ******************************************************************************/ -/* Debug message event */ -#define DBG_EVT_NONE (0) /* No event */ -#define DBG_EVT_CMD (1 << 0) /* SEC CMD related event */ -#define DBG_EVT_FUNC (1 << 1) /* SEC function event */ -#define DBG_EVT_INFO (1 << 2) /* SEC information event */ -#define DBG_EVT_WRN (1 << 30) /* Warning event */ -#define DBG_EVT_ERR (1 << 31) /* Error event */ -#define DBG_EVT_ALL (0xffffffff) - -#define DBG_EVT_MASK (DBG_EVT_ALL) - -#ifdef SEC_DEBUG -#define MSG(evt, fmt, args...) \ -do { \ - if ((DBG_EVT_##evt) & DBG_EVT_MASK) { \ - printk(fmt, ##args); \ - } \ -} while(0) -#else -#define MSG(evt, fmt, args...) do{}while(0) -#endif - -#define MSG_FUNC(mod) MSG(FUNC, "[%s] %s\n", mod, __FUNCTION__) - -/****************************************************************************** - * EXPORT FUNCTION - ******************************************************************************/ -extern void *mcpy(void *dest, const void *src, int count); -extern int mcmp (const void *cs, const void *ct, int count); -extern void dump_buf(unsigned char* buf, unsigned int len); - -#endif /* end of SEC_LIB_H */ diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_usbdl.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_usbdl.h deleted file mode 100644 index 463b9842a..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_usbdl.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef SEC_USBDL_H -#define SEC_USBDL_H - -/************************************************************************** - * [S-USBDL] - **************************************************************************/ -/* S-USBDL Attribute */ -#define ATTR_SUSBDL_DISABLE 0x00 -#define ATTR_SUSBDL_ENABLE 0x11 -#define ATTR_SUSBDL_ONLY_ENABLE_ON_SCHIP 0x22 - -/************************************************************************** - * EXPORT FUNCTION - **************************************************************************/ -extern int sec_usbdl_enabled (void); - -#endif /* SEC_USBDL_H */ - diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_usif.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_usif.h deleted file mode 100644 index 89c9c2be8..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_usif.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef USIF_H -#define USIF_H - -extern int sec_usif_check(void); - -#endif // USIFUTILS_H_ diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_usif_util.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_usif_util.h deleted file mode 100644 index c3032cb1c..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_usif_util.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef USIF_UTILS_H -#define USIF_UTILS_H - -/************************************************************************** - * EXTERNAL FUNCTIONS - *************************************************************************/ -extern char* usif2pl (char* part_name); -extern char* pl2usif (char* part_name); -extern bool sec_usif_enabled(void); -extern void sec_usif_part_path(unsigned int part_num, char* part_path, unsigned int part_path_len); - -#endif // USIF_UTILS_H diff --git a/drivers/misc/mediatek/masp/asf/asf_inc/sec_wrapper.h b/drivers/misc/mediatek/masp/asf/asf_inc/sec_wrapper.h deleted file mode 100644 index 602fc9137..000000000 --- a/drivers/misc/mediatek/masp/asf/asf_inc/sec_wrapper.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef SEC_WRAPPER_H -#define SEC_WRAPPER_H - -int sec_init_key (unsigned char *nKey, unsigned int nKey_len, - unsigned char *eKey, unsigned int eKey_len); -int sec_hash(unsigned char *data_buf, unsigned int data_len, - unsigned char *hash_buf, unsigned int hash_len); -int sec_verify (unsigned char* data_buf, unsigned int data_len, - unsigned char* sig_buf, unsigned int sig_len); - -#endif - diff --git a/drivers/misc/mediatek/masp/asf/auth/sec_wrapper.c b/drivers/misc/mediatek/masp/asf/auth/sec_wrapper.c deleted file mode 100644 index 359415325..000000000 --- a/drivers/misc/mediatek/masp/asf/auth/sec_wrapper.c +++ /dev/null @@ -1,24 +0,0 @@ -extern int lib_init_key (unsigned char *nKey, unsigned int nKey_len, unsigned char *eKey, unsigned int eKey_len); -extern int lib_verify (unsigned char* data_buf, unsigned int data_len, unsigned char* sig_buf, unsigned int sig_len); -extern int lib_hash (unsigned char* data_buf, unsigned int data_len, unsigned char* hash_buf, unsigned int hash_len); - -int sec_init_key (unsigned char *nKey, unsigned int nKey_len, - unsigned char *eKey, unsigned int eKey_len) -{ - return lib_init_key(nKey, nKey_len, eKey, eKey_len); -} - -int sec_hash(unsigned char *data_buf, unsigned int data_len, - unsigned char *hash_buf, unsigned int hash_len) -{ - return lib_hash(data_buf, data_len, hash_buf, hash_len); -} - -int sec_verify (unsigned char *data_buf, unsigned int data_len, - unsigned char *sig_buf, unsigned int sig_len) -{ - return lib_verify(data_buf, data_len, sig_buf, sig_len); -} - - - diff --git a/drivers/misc/mediatek/masp/asf/core/alg_aes_export.c b/drivers/misc/mediatek/masp/asf/core/alg_aes_export.c deleted file mode 100644 index d17102378..000000000 --- a/drivers/misc/mediatek/masp/asf/core/alg_aes_export.c +++ /dev/null @@ -1,173 +0,0 @@ -#include "sec_osal_light.h" - -/************************************************************************** - * TYPEDEF - **************************************************************************/ -typedef unsigned int uint32; -typedef unsigned char uchar; - - -/************************************************************************** - * AES FUNCTION - **************************************************************************/ -#include "sec_aes.h" -/* legacy function used for W1128/32 MP */ -#include "aes_legacy.h" -/* standard operation aes function used for W1150 MP */ -#include "aes_so.h" - -/************************************************************************** - * DEFINITIONS - **************************************************************************/ -#define MOD "AES_EXPORT" - -/************************************************************************** - * MACRO - **************************************************************************/ -#define SMSG printk - -/************************************************************************** - * GLOBAL VARIABLE - **************************************************************************/ -/* using W1128/32 mP solution by default */ -AES_VER g_ver = AES_VER_LEGACY; - -/************************************************************************** - * LIBRARY EXPORT FUNCTION - ENCRYPTION - **************************************************************************/ -int lib_aes_enc(uchar* input_buf, uint32 input_len, uchar* output_buf, uint32 output_len) -{ - - switch (g_ver) - { - case AES_VER_LEGACY: - if(0 != aes_legacy_enc(input_buf,input_len,output_buf,output_len)) - { - goto _err; - } - break; - - case AES_VER_SO: - if(0 != aes_so_enc(input_buf,input_len,output_buf,output_len)) - { - goto _err; - } - break; - - default: - SMSG("[%s] Invalid Ver\n",MOD); - goto _err; - } - - return 0; - -_err: - - return -1; - -} - -/************************************************************************** - * LIBRARY EXPORT FUNCTION - DECRYPTION - **************************************************************************/ -int lib_aes_dec(uchar* input_buf, uint32 input_len, uchar* output_buf, uint32 output_len) -{ - switch (g_ver) - { - case AES_VER_LEGACY: - if(0 != aes_legacy_dec(input_buf,input_len,output_buf,output_len)) - { - goto _err; - } - break; - - case AES_VER_SO: - if(0 != aes_so_dec(input_buf,input_len,output_buf,output_len)) - { - goto _err; - } - break; - - default: - SMSG("[%s] Invalid Ver\n",MOD); - goto _err; - } - - return 0; - -_err: - - return -1; - -} - -/************************************************************************** - * LIBRARY EXPORT FUNCTION - KEY INITIALIZATION - **************************************************************************/ -int lib_aes_init_key(uchar* key_buf, uint32 key_len, AES_VER ver) -{ - switch (ver) - { - case AES_VER_LEGACY: - g_ver = AES_VER_LEGACY; - SMSG("\n[%s] Legacy\n",MOD); - if(0 != aes_legacy_init_key(key_buf,key_len)) - { - goto _err; - } - break; - - case AES_VER_SO: - g_ver = AES_VER_SO; - SMSG("\n[%s] SO\n",MOD); - if(0 != aes_so_init_key(key_buf,key_len)) - { - goto _err; - } - break; - - default: - SMSG("\n[%s] Invalid Ver\n",MOD); - goto _err; - } - - return 0; - -_err: - - return -1; -} - -int lib_aes_init_vector(AES_VER ver) -{ - switch (ver) - { - case AES_VER_LEGACY: - g_ver = AES_VER_LEGACY; - SMSG("[%s] Legacy(V)\n",MOD); - if(0 != aes_legacy_init_vector()) - { - goto _err; - } - break; - - case AES_VER_SO: - g_ver = AES_VER_SO; - SMSG("[%s] SO(V)\n",MOD); - if(0 != aes_so_init_vector()) - { - goto _err; - } - break; - - default: - SMSG("[%s] Invalid Ver(V)\n",MOD); - goto _err; - } - - return 0; - -_err: - return -1; -} - diff --git a/drivers/misc/mediatek/masp/asf/core/alg_aes_legacy.c b/drivers/misc/mediatek/masp/asf/core/alg_aes_legacy.c deleted file mode 100644 index c12fdbcb8..000000000 --- a/drivers/misc/mediatek/masp/asf/core/alg_aes_legacy.c +++ /dev/null @@ -1,535 +0,0 @@ -#include "sec_osal_light.h" -#include <mach/sec_osal.h> - -/************************************************************************** - * TYPEDEF - **************************************************************************/ -typedef unsigned int uint32; -typedef unsigned char uchar; - -/************************************************************************** - * MACRO - **************************************************************************/ -#define SMSG printk - -/************************************************************************** - * DEFINITIONS - **************************************************************************/ -#define MOD "AES_LEGACY" -#define CIPHER_BLOCK_SIZE (16) - -/************************************************************************** - * COMPILE ASSERT - **************************************************************************/ -#define COMPILE_ASSERT(condition) ((void)sizeof(char[1 - 2*!!!(condition)])) - - -/************************************************************************** - * AES FUNCTION - **************************************************************************/ - -#define AES_RPOL 0x011b -#define AES_GEN 0x03 -#define AES_SBOX_CC 0x63 -#define KEY_128 (128/8) -#define KEY_192 (192/8) -#define KEY_256 (256/8) - -#define a_mul(a, b) ((a)&&(b)?g_a_ilogt[(g_a_logt[(a)]+g_a_logt[(b)])%0xff]:0) -#define a_inv(a) ((a)?g_a_ilogt[0xff-g_a_logt[(a)]]:0) - -uchar g_a_logt[256], g_a_ilogt[256]; -uchar g_a_sbox[256], g_a_isbox[256]; - -typedef struct { - - uchar state[4][4]; - int kcol; - uint32 r; - ulong keysched[0]; - -} a_ctx_t; - -/************************************************************************** - * GLOBAL VARIABLES - **************************************************************************/ -static a_ctx_t *ctx; - - -/************************************************************************** - * EXTERNAL FUNCTION - **************************************************************************/ -extern void * mcpy(void *dest, const void *src, int cnt); - -/************************************************************************** - * INTERNAL FUNCTION - **************************************************************************/ -void a_init(void); -a_ctx_t *a_alloc_ctx(uchar *key, uint32 keyLen); -inline ulong a_subword(ulong w); -inline ulong a_rotword(ulong w); -void a_key_exp(a_ctx_t *ctx); - -inline uchar a_mul_manual(uchar a, uchar b); // use a_mul instead -void a_subbytes(a_ctx_t *ctx); -void a_shi_row(a_ctx_t *ctx); -void a_mix_col(a_ctx_t *ctx); -void a_add_key(a_ctx_t *ctx, int round); - -void a_sub_b(a_ctx_t *ctx); -void a_inv_shi_row(a_ctx_t *ctx); -void a_inv_mix_col(a_ctx_t *ctx); - -static void a_enc(a_ctx_t *ctx, uchar input[16], uchar output[16]); -static void a_dec(a_ctx_t *ctx, uchar input[16], uchar output[16]); -void a_free_ctx(a_ctx_t *ctx); - -/************************************************************************** - * FUNCTIONS - **************************************************************************/ -a_ctx_t *a_alloc_ctx(uchar *key, uint32 keyLen) -{ - a_ctx_t *ctx; - uint32 r; - uint32 ks_size; - - switch(keyLen) - { - case 16: - r = 10; - break; - - case 24: - r = 12; - break; - - case 32: - r = 14; - break; - - default: - return NULL; - } - - ks_size = 4*(r+1)*sizeof(ulong); - - ctx = osal_kmalloc(sizeof(a_ctx_t)+ks_size); - - if(ctx) - { - - ctx->r = r; - ctx->kcol = keyLen/4; - memcpy(ctx->keysched, key, keyLen); - ctx->keysched[43] = 0; - a_key_exp(ctx); - - } - - return ctx; - -} - -inline ulong a_subword(ulong w) -{ - - return g_a_sbox[w & 0x000000ff] | - (g_a_sbox[(w & 0x0000ff00) >> 8] << 8) | - (g_a_sbox[(w & 0x00ff0000) >> 16] << 16) | - (g_a_sbox[(w & 0xff000000) >> 24] << 24); - -} - -inline ulong a_rotword(ulong w) -{ - return ((w & 0x000000ff) << 24) | - - ((w & 0x0000ff00) >> 8) | - ((w & 0x00ff0000) >> 8) | - ((w & 0xff000000) >> 8); - -} - -void a_key_exp(a_ctx_t *ctx) -{ - ulong temp; - ulong rcon; - register int i; - - rcon = 0x00000001; - for(i = ctx->kcol; i < (4*(ctx->r+1)); i++) - { - - temp = ctx->keysched[i-1]; - - if(!(i%ctx->kcol)) - { - - temp = a_subword(a_rotword(temp)) ^ rcon; - rcon = a_mul(rcon, 2); - - } - else if(ctx->kcol > 6 && i%ctx->kcol == 4) - { - temp = a_subword(temp); - } - - ctx->keysched[i] = ctx->keysched[i-ctx->kcol] ^ temp; - - } - -} - -inline uchar a_mul_manual(uchar a, uchar b) -{ - register unsigned short ac; - register uchar ret; - ac = a; - ret = 0; - - while(b) - { - if(b & 0x01) - { - ret ^= ac; - } - - ac <<= 1; - b >>= 1; - - if(ac & 0x0100) - { - ac ^= AES_RPOL; - } - } - - return ret; -} - -void a_subbytes(a_ctx_t *ctx) -{ - int i; - - for(i = 0; i < 16; i++) - { - int x, y; - x = i & 0x03; - y = i >> 2; - ctx->state[x][y] = g_a_sbox[ctx->state[x][y]]; - } -} - -void a_shi_row(a_ctx_t *ctx) -{ - uchar nstate[4][4]; - int i; - - for(i = 0; i < 16; i++) - { - int x, y; - x = i & 0x03; - y = i >> 2; - nstate[x][y] = ctx->state[x][(y+x) & 0x03]; - } - memcpy(ctx->state, nstate, sizeof(ctx->state)); -} - -void a_mix_col(a_ctx_t *ctx) -{ - uchar nstate[4][4]; - int i; - - for(i = 0; i < 4; i++) - { - nstate[0][i] = a_mul(0x02, ctx->state[0][i]) ^ - a_mul(0x03, ctx->state[1][i]) ^ - ctx->state[2][i] ^ - ctx->state[3][i]; - nstate[1][i] = ctx->state[0][i] ^ - a_mul(0x02, ctx->state[1][i]) ^ - a_mul(0x03, ctx->state[2][i]) ^ - ctx->state[3][i]; - nstate[2][i] = ctx->state[0][i] ^ - ctx->state[1][i] ^ - a_mul(0x02, ctx->state[2][i]) ^ - a_mul(0x03, ctx->state[3][i]); - nstate[3][i] = a_mul(0x03, ctx->state[0][i]) ^ - ctx->state[1][i] ^ - ctx->state[2][i] ^ - a_mul(0x02, ctx->state[3][i]); - } - - memcpy(ctx->state, nstate, sizeof(ctx->state)); -} - -void a_add_key(a_ctx_t *ctx, int round) -{ - int i; - - for(i = 0; i < 16; i++) - { - int x, y; - x = i & 0x03; - y = i >> 2; - ctx->state[x][y] = ctx->state[x][y] ^ - ((ctx->keysched[round*4+y] & (0xff << (x*8))) >> (x*8)); - } -} - -void a_inv_shi_row(a_ctx_t *ctx) -{ - uchar nstate[4][4]; - - int i; - - for(i = 0; i < 16; i++) - { - int x, y; - x = i & 0x03; - y = i >> 2; - nstate[x][(y+x) & 0x03] = ctx->state[x][y]; - } - - memcpy(ctx->state, nstate, sizeof(ctx->state)); -} - -void a_sub_b(a_ctx_t *ctx) -{ - int i; - - for(i = 0; i < 16; i++) - { - int x, y; - x = i & 0x03; - y = i >> 2; - ctx->state[x][y] = g_a_isbox[ctx->state[x][y]]; - } -} - -void a_inv_mix_col(a_ctx_t *ctx) -{ - uchar nstate[4][4]; - int i; - - for(i = 0; i < 4; i++) - { - nstate[0][i] = a_mul(0x0e, ctx->state[0][i]) ^ - a_mul(0x0b, ctx->state[1][i]) ^ - a_mul(0x0d, ctx->state[2][i]) ^ - a_mul(0x09, ctx->state[3][i]); - nstate[1][i] = a_mul(0x09, ctx->state[0][i]) ^ - a_mul(0x0e, ctx->state[1][i]) ^ - a_mul(0x0b, ctx->state[2][i]) ^ - a_mul(0x0d, ctx->state[3][i]); - nstate[2][i] = a_mul(0x0d, ctx->state[0][i]) ^ - a_mul(0x09, ctx->state[1][i]) ^ - a_mul(0x0e, ctx->state[2][i]) ^ - a_mul(0x0b, ctx->state[3][i]); - nstate[3][i] = a_mul(0x0b, ctx->state[0][i]) ^ - a_mul(0x0d, ctx->state[1][i]) ^ - a_mul(0x09, ctx->state[2][i]) ^ - a_mul(0x0e, ctx->state[3][i]); - } - - memcpy(ctx->state, nstate, sizeof(ctx->state)); -} - -static void a_dec(a_ctx_t *ctx, uchar input[16], uchar output[16]) -{ - int i; - - for(i = 0; i < 16; i++) - { - ctx->state[i & 0x03][i >> 2] = input[i]; - } - - a_add_key(ctx, ctx->r); - - for(i = ctx->r-1; i >= 1; i--) - { - a_inv_shi_row(ctx); - a_sub_b(ctx); - a_add_key(ctx, i); - a_inv_mix_col(ctx); - } - - a_inv_shi_row(ctx); - a_sub_b(ctx); - a_add_key(ctx, 0); - - for(i = 0; i < 16; i++) - { - output[i] = ctx->state[i & 0x03][i >> 2]; - } -} - -static void a_enc(a_ctx_t *ctx, uchar input[16], uchar output[16]) -{ - int i; - - for(i = 0; i < 16; i++) - { - ctx->state[i & 0x03][i >> 2] = input[i]; - } - - a_add_key(ctx, 0); - - for(i = 1; i < ctx->r; i++) - { - a_subbytes(ctx); - a_shi_row(ctx); - a_mix_col(ctx); - a_add_key(ctx, i); - } - a_subbytes(ctx); - a_shi_row(ctx); - a_add_key(ctx, ctx->r); - - for(i = 0; i < 16; i++) - { - output[i] = ctx->state[i & 0x03][i >> 2]; - } -} - -void a_free_ctx(a_ctx_t *ctx) -{ - osal_kfree(ctx); -} - -void init_aes(void) -{ - int i; - uchar gen; - - gen = 1; - - for(i = 0; i < 0xff; i++) - { - g_a_logt[gen] = i; - g_a_ilogt[i] = gen; - gen = a_mul_manual(gen, AES_GEN); - - } - - for(i = 0; i <= 0xff; i++) - { - - char bi; - uchar inv = a_inv(i); - - g_a_sbox[i] = 0; - - for(bi = 0; bi < 8; bi++) - { - - g_a_sbox[i] |= ((inv & (1<<bi)?1:0) - - ^ (inv & (1 << ((bi+4) & 7))?1:0) - ^ (inv & (1 << ((bi+5) & 7))?1:0) - ^ (inv & (1 << ((bi+6) & 7))?1:0) - ^ (inv & (1 << ((bi+7) & 7))?1:0) - ^ (AES_SBOX_CC & (1 << bi)?1:0) - - ) << bi; - - } - - g_a_isbox[g_a_sbox[i]] = i; - - } - - g_a_sbox[1] = 0x7c; - g_a_isbox[0x7c] = 1; - g_a_isbox[0x63] = 0; - -} - -/************************************************************************** - * LEGACY FUNCTION - ENCRYPTION - **************************************************************************/ -int aes_legacy_enc(uchar* input_buf, uint32 input_len, uchar* output_buf, uint32 output_len) -{ - uint32 i = 0; - - if (input_len != output_len) - { - SMSG("[%s] error, input len should be equal to output len\n",MOD); - return -1; - } - - if (0 != input_len % CIPHER_BLOCK_SIZE) - { - SMSG("[%s] error, input len should be mutiple of %d bytes\n",MOD,CIPHER_BLOCK_SIZE); - return -1; - } - - for (i = 0; i!=input_len ; i+=CIPHER_BLOCK_SIZE) - { - a_enc(ctx, input_buf+i, output_buf+i); - } - return 0; -} - -/************************************************************************** - * LEGACY FUNCTION - DECRYPTION - **************************************************************************/ -int aes_legacy_dec(uchar* input_buf, uint32 input_len, uchar* output_buf, uint32 output_len) -{ - uint32 i = 0; - - if (input_len != output_len) - { - SMSG("[%s] error, input len should be equal to output len\n",MOD); - return -1; - } - - if (0 != input_len % CIPHER_BLOCK_SIZE) - { - SMSG("[%s] error, input len should be mutiple of %d bytes\n",MOD,CIPHER_BLOCK_SIZE); - return -1; - } - - for (i = 0; i!=input_len ; i+=CIPHER_BLOCK_SIZE) - { - a_dec(ctx, input_buf+i, output_buf+i); - } - return 0; -} - -/************************************************************************** - * LEGACY FUNCTION - KEY INITIALIZATION - **************************************************************************/ -int aes_legacy_init_key(uchar* key_buf, uint32 key_len) -{ - uchar key[KEY_256] = {0}; - - if (KEY_256 != key_len) - { - SMSG("[%s] key size error (%d) (should be %d bytes)\n",MOD,key_len,KEY_256); - return -1; - } - - mcpy(key,key_buf,KEY_256); - init_aes(); - ctx = a_alloc_ctx(key, sizeof(key)); - - if(!ctx) - { - SMSG("[%s] aes alloc ctx fail\n",MOD); - return -1; - } - - return 0; - -} - -/************************************************************************** - * LEGACY FUNCTION - VECTOR INITIALIZATION - **************************************************************************/ -int aes_legacy_init_vector(void) -{ - init_aes(); - - return 0; -} - diff --git a/drivers/misc/mediatek/masp/asf/core/alg_aes_so.c b/drivers/misc/mediatek/masp/asf/core/alg_aes_so.c deleted file mode 100644 index 46e0eaf5b..000000000 --- a/drivers/misc/mediatek/masp/asf/core/alg_aes_so.c +++ /dev/null @@ -1,767 +0,0 @@ -#include "sec_osal_light.h" -#include "sec_log.h" -#include "aes_so.h" - -/************************************************************************** - * TYPEDEF - **************************************************************************/ -typedef unsigned int uint32; -typedef unsigned char uchar; - -/************************************************************************** - * DEFINITIONS - **************************************************************************/ -#define MOD "AES_SO" -#define CIPHER_BLOCK_SIZE (16) - -#define CT_AES128_LEN 16 // 16B (AES128) -#define CT_AES192_LEN 24 // 24B (AES192) -#define CT_AES256_LEN 32 // 32B (AES256) - -/************************************************************************** - * EXTERNAL FUNCTION - **************************************************************************/ -extern void * mcpy(void *dest, const void *src, int cnt); - -/************************************************************************** - * INTERNAL DEFINIITION - **************************************************************************/ -#define MASK 0xFF -#define T_SZ 256 - -#define EXP(x,y) (x^y) - -/************************************************************************** - * GLOBAL VARIABLES - **************************************************************************/ -uint32 aes_key_len = 0; - -static uchar FS[T_SZ]; -static ulong FT0[T_SZ]; -static ulong FT1[T_SZ]; -static ulong FT2[T_SZ]; -static ulong FT3[T_SZ]; - -static uchar RS[T_SZ]; -static ulong RT0[T_SZ]; -static ulong RT1[T_SZ]; -static ulong RT2[T_SZ]; -static ulong RT3[T_SZ]; - -static ulong RCON[10]; - -static int aes_init_done = 0; - -static int pow[T_SZ]; -static int log[T_SZ]; - -#define A_F(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ -{ \ - X0 = *RK++ ^ FT0[ ( Y0 ) & MASK ] ^ \ - FT1[ ( Y1 >> 8 ) & MASK ] ^ \ - FT2[ ( Y2 >> 16 ) & MASK ] ^ \ - FT3[ ( Y3 >> 24 ) & MASK ]; \ - \ - X1 = *RK++ ^ FT0[ ( Y1 ) & MASK ] ^ \ - FT1[ ( Y2 >> 8 ) & MASK ] ^ \ - FT2[ ( Y3 >> 16 ) & MASK ] ^ \ - FT3[ ( Y0 >> 24 ) & MASK ]; \ - \ - X2 = *RK++ ^ FT0[ ( Y2 ) & MASK ] ^ \ - FT1[ ( Y3 >> 8 ) & MASK ] ^ \ - FT2[ ( Y0 >> 16 ) & MASK ] ^ \ - FT3[ ( Y1 >> 24 ) & MASK ]; \ - \ - X3 = *RK++ ^ FT0[ ( Y3 ) & MASK ] ^ \ - FT1[ ( Y0 >> 8 ) & MASK ] ^ \ - FT2[ ( Y1 >> 16 ) & MASK ] ^ \ - FT3[ ( Y2 >> 24 ) & MASK ]; \ -} - -#define A_R(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ -{ \ - X0 = *RK++ ^ RT0[ ( Y0 ) & MASK ] ^ \ - RT1[ ( Y3 >> 8 ) & MASK ] ^ \ - RT2[ ( Y2 >> 16 ) & MASK ] ^ \ - RT3[ ( Y1 >> 24 ) & MASK ]; \ - \ - X1 = *RK++ ^ RT0[ ( Y1 ) & MASK ] ^ \ - RT1[ ( Y0 >> 8 ) & MASK ] ^ \ - RT2[ ( Y3 >> 16 ) & MASK ] ^ \ - RT3[ ( Y2 >> 24 ) & MASK ]; \ - \ - X2 = *RK++ ^ RT0[ ( Y2 ) & MASK ] ^ \ - RT1[ ( Y1 >> 8 ) & MASK ] ^ \ - RT2[ ( Y0 >> 16 ) & MASK ] ^ \ - RT3[ ( Y3 >> 24 ) & MASK ]; \ - \ - X3 = *RK++ ^ RT0[ ( Y3 ) & MASK ] ^ \ - RT1[ ( Y2 >> 8 ) & MASK ] ^ \ - RT2[ ( Y1 >> 16 ) & MASK ] ^ \ - RT3[ ( Y0 >> 24 ) & MASK ]; \ -} - - -/************************************************************************** - * MTK SECRET - **************************************************************************/ -static uint32 g_AES_IV[4]= { - 0x6c8d3259, 0x86911412, 0x55975412, 0x6c8d3257 -}; - -static uint32 g_AES_IV_TEMP[4]= { - 0x0,0x0,0x0,0x0 -}; - -uint32 g_AES_Key[4] = { - 0x0, 0x0, 0x0, 0x0 -}; - - -/************************************************************************** - * INTERNAL VARIABLES - **************************************************************************/ -a_ctx aes; - -#ifndef G_U_LE -#define G_U_LE(n,b,i) \ -{ \ - (n) = ( (ulong) (b)[(i) ] ) \ - | ( (ulong) (b)[(i) + 1] << 8 ) \ - | ( (ulong) (b)[(i) + 2] << 16 ) \ - | ( (ulong) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef P_U_LE -#define P_U_LE(n,b,i) \ -{ \ - (b)[(i) ] = (uchar) ( (n) ); \ - (b)[(i) + 1] = (uchar) ( (n) >> 8 ); \ - (b)[(i) + 2] = (uchar) ( (n) >> 16 ); \ - (b)[(i) + 3] = (uchar) ( (n) >> 24 ); \ -} -#endif - -#define ROTL8(x) ( ( x << 8 ) & 0xFFFFFFFF ) | ( x >> 24 ) -#define XTIME(x) ( ( x << 1 ) ^ ( ( x & 0x80 ) ? 0x1B : 0x00 ) ) -#define MUL(x,y) ( ( x && y ) ? pow[(log[x]+log[y]) % 255] : 0 ) - -/************************************************************************** - * FUNCTIONS - **************************************************************************/ -static void a_gen_tables( void ) -{ - int i, x, y, z; - - for( i = 0, x = 1; i < T_SZ; i++ ) - { - pow[i] = x; - log[x] = i; - x = ( x ^ XTIME( x ) ) & MASK; - } - - for( i = 0, x = 1; i < 10; i++ ) - { - RCON[i] = (ulong) x; - x = XTIME( x ) & MASK; - } - - FS[0x00] = 0x63; - RS[0x63] = 0x00; - - for( i = 1; i < T_SZ; i++ ) - { - x = pow[255 - log[i]]; - - y = x; y = ( (y << 1) | (y >> 7) ) & MASK; - x ^= y; y = ( (y << 1) | (y >> 7) ) & MASK; - x ^= y; y = ( (y << 1) | (y >> 7) ) & MASK; - x ^= y; y = ( (y << 1) | (y >> 7) ) & MASK; - x ^= y ^ 0x63; - - FS[i] = (uchar) x; - RS[x] = (uchar) i; - } - - for( i = 0; i < T_SZ; i++ ) - { - x = FS[i]; - y = XTIME( x ) & MASK; - z = ( y ^ x ) & MASK; - - FT0[i] = ( (ulong) y ) ^ - ( (ulong) x << 8 ) ^ - ( (ulong) x << 16 ) ^ - ( (ulong) z << 24 ); - - FT1[i] = ROTL8( FT0[i] ); - FT2[i] = ROTL8( FT1[i] ); - FT3[i] = ROTL8( FT2[i] ); - - x = RS[i]; - - RT0[i] = ( (ulong) MUL( 0x0E, x ) ) ^ - ( (ulong) MUL( 0x09, x ) << 8 ) ^ - ( (ulong) MUL( 0x0D, x ) << 16 ) ^ - ( (ulong) MUL( 0x0B, x ) << 24 ); - - RT1[i] = ROTL8( RT0[i] ); - RT2[i] = ROTL8( RT1[i] ); - RT3[i] = ROTL8( RT2[i] ); - } -} - - -int a_enc (a_ctx *ctx, const uchar *key, uint32 keysize) -{ - uint32 i; - ulong *RK; - - if( aes_init_done == 0 ) - { - a_gen_tables(); - aes_init_done = 1; - } - - switch( keysize ) - { - case 128: - ctx->nr = 10; - break; - case 192: - ctx->nr = 12; - break; - case 256: - ctx->nr = 14; - break; - default : - return( -1 ); - } - - ctx->rk = RK = ctx->buf; - - for( i = 0; i < (keysize >> 5); i++ ) - { - G_U_LE( RK[i], key, i << 2 ); - } - - switch( ctx->nr ) - { - case 10: - - for( i = 0; i < 10; i++, RK += 4 ) - { - RK[4] = RK[0] ^ RCON[i] ^ - ( (ulong) FS[ ( RK[3] >> 8 ) & MASK ] ) ^ - ( (ulong) FS[ ( RK[3] >> 16 ) & MASK ] << 8 ) ^ - ( (ulong) FS[ ( RK[3] >> 24 ) & MASK ] << 16 ) ^ - ( (ulong) FS[ ( RK[3] ) & MASK ] << 24 ); - - RK[5] = EXP(RK[1],RK[4]); - RK[6] = EXP(RK[2],RK[5]); - RK[7] = EXP(RK[3],RK[6]); - } - break; - - case 12: - - for( i = 0; i < 8; i++, RK += 6 ) - { - RK[6] = RK[0] ^ RCON[i] ^ - ( (ulong) FS[ ( RK[5] >> 8 ) & MASK ] ) ^ - ( (ulong) FS[ ( RK[5] >> 16 ) & MASK ] << 8 ) ^ - ( (ulong) FS[ ( RK[5] >> 24 ) & MASK ] << 16 ) ^ - ( (ulong) FS[ ( RK[5] ) & MASK ] << 24 ); - - RK[7] = EXP(RK[1],RK[6]); - RK[8] = EXP(RK[2],RK[7]); - RK[9] = EXP(RK[3],RK[8]); - RK[10] = EXP(RK[4],RK[9]); - RK[11] = EXP(RK[5],RK[10]); - } - break; - - case 14: - - for( i = 0; i < 7; i++, RK += 8 ) - { - RK[8] = RK[0] ^ RCON[i] ^ - ( (ulong) FS[ ( RK[7] >> 8 ) & MASK ] ) ^ - ( (ulong) FS[ ( RK[7] >> 16 ) & MASK ] << 8 ) ^ - ( (ulong) FS[ ( RK[7] >> 24 ) & MASK ] << 16 ) ^ - ( (ulong) FS[ ( RK[7] ) & MASK ] << 24 ); - - RK[9] = EXP(RK[1],RK[8]); - RK[10] = EXP(RK[2],RK[9]); - RK[11] = EXP(RK[3],RK[10]); - - RK[12] = RK[4] ^ - ( (ulong) FS[ ( RK[11] ) & MASK ] ) ^ - ( (ulong) FS[ ( RK[11] >> 8 ) & MASK ] << 8 ) ^ - ( (ulong) FS[ ( RK[11] >> 16 ) & MASK ] << 16 ) ^ - ( (ulong) FS[ ( RK[11] >> 24 ) & MASK ] << 24 ); - - RK[13] = EXP(RK[5],RK[12]); - RK[14] = EXP(RK[6],RK[13]); - RK[15] = EXP(RK[7],RK[14]); - } - break; - - default: - - break; - } - - return( 0 ); -} - -int a_dec (a_ctx *ctx, const uchar *key, uint32 keysize) -{ - int i, j; - a_ctx cty; - ulong *RK; - ulong *SK; - int ret; - - switch( keysize ) - { - case 128: - ctx->nr = 10; - break; - case 192: - ctx->nr = 12; - break; - case 256: - ctx->nr = 14; - break; - default : - return( -1 ); - } - - ctx->rk = RK = ctx->buf; - - ret = a_enc( &cty, key, keysize ); - if( ret != 0 ) - return( ret ); - - SK = cty.rk + cty.nr * 4; - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - - for( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) - { - for( j = 0; j < 4; j++, SK++ ) - { - *RK++ = RT0[ FS[ ( *SK ) & MASK ] ] ^ - RT1[ FS[ ( *SK >> 8 ) & MASK ] ] ^ - RT2[ FS[ ( *SK >> 16 ) & MASK ] ] ^ - RT3[ FS[ ( *SK >> 24 ) & MASK ] ]; - } - } - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - - memset( &cty, 0, sizeof( a_ctx ) ); - - return( 0 ); -} - -int a_crypt_ecb( a_ctx *ctx, - int mode, - const uchar input[16], - uchar output[16] ) -{ - int i; - ulong *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; - - RK = ctx->rk; - - G_U_LE( X0, input, 0 ); X0 ^= *RK++; - G_U_LE( X1, input, 4 ); X1 ^= *RK++; - G_U_LE( X2, input, 8 ); X2 ^= *RK++; - G_U_LE( X3, input, 12 ); X3 ^= *RK++; - - /* ----------- */ - /* AES_DECRYPT */ - /* ----------- */ - if( mode == AES_DECRYPT ) - { - for( i = (ctx->nr >> 1) - 1; i > 0; i-- ) - { - A_R( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - A_R( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); - } - - A_R( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - - X0 = *RK++ ^ \ - ( (ulong) RS[ ( Y0 ) & MASK ] ) ^ - ( (ulong) RS[ ( Y3 >> 8 ) & MASK ] << 8 ) ^ - ( (ulong) RS[ ( Y2 >> 16 ) & MASK ] << 16 ) ^ - ( (ulong) RS[ ( Y1 >> 24 ) & MASK ] << 24 ); - - X1 = *RK++ ^ \ - ( (ulong) RS[ ( Y1 ) & MASK ] ) ^ - ( (ulong) RS[ ( Y0 >> 8 ) & MASK ] << 8 ) ^ - ( (ulong) RS[ ( Y3 >> 16 ) & MASK ] << 16 ) ^ - ( (ulong) RS[ ( Y2 >> 24 ) & MASK ] << 24 ); - - X2 = *RK++ ^ \ - ( (ulong) RS[ ( Y2 ) & MASK ] ) ^ - ( (ulong) RS[ ( Y1 >> 8 ) & MASK ] << 8 ) ^ - ( (ulong) RS[ ( Y0 >> 16 ) & MASK ] << 16 ) ^ - ( (ulong) RS[ ( Y3 >> 24 ) & MASK ] << 24 ); - - X3 = *RK++ ^ \ - ( (ulong) RS[ ( Y3 ) & MASK ] ) ^ - ( (ulong) RS[ ( Y2 >> 8 ) & MASK ] << 8 ) ^ - ( (ulong) RS[ ( Y1 >> 16 ) & MASK ] << 16 ) ^ - ( (ulong) RS[ ( Y0 >> 24 ) & MASK ] << 24 ); - } - else /* AES_ENCRYPT */ - { - for( i = (ctx->nr >> 1) - 1; i > 0; i-- ) - { - A_F( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - A_F( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); - } - - A_F( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - - X0 = *RK++ ^ \ - ( (ulong) FS[ ( Y0 ) & MASK ] ) ^ - ( (ulong) FS[ ( Y1 >> 8 ) & MASK ] << 8 ) ^ - ( (ulong) FS[ ( Y2 >> 16 ) & MASK ] << 16 ) ^ - ( (ulong) FS[ ( Y3 >> 24 ) & MASK ] << 24 ); - - X1 = *RK++ ^ \ - ( (ulong) FS[ ( Y1 ) & MASK ] ) ^ - ( (ulong) FS[ ( Y2 >> 8 ) & MASK ] << 8 ) ^ - ( (ulong) FS[ ( Y3 >> 16 ) & MASK ] << 16 ) ^ - ( (ulong) FS[ ( Y0 >> 24 ) & MASK ] << 24 ); - - X2 = *RK++ ^ \ - ( (ulong) FS[ ( Y2 ) & MASK ] ) ^ - ( (ulong) FS[ ( Y3 >> 8 ) & MASK ] << 8 ) ^ - ( (ulong) FS[ ( Y0 >> 16 ) & MASK ] << 16 ) ^ - ( (ulong) FS[ ( Y1 >> 24 ) & MASK ] << 24 ); - - X3 = *RK++ ^ \ - ( (ulong) FS[ ( Y3 ) & MASK ] ) ^ - ( (ulong) FS[ ( Y0 >> 8 ) & MASK ] << 8 ) ^ - ( (ulong) FS[ ( Y1 >> 16 ) & MASK ] << 16 ) ^ - ( (ulong) FS[ ( Y2 >> 24 ) & MASK ] << 24 ); - } - - P_U_LE( X0, output, 0 ); - P_U_LE( X1, output, 4 ); - P_U_LE( X2, output, 8 ); - P_U_LE( X3, output, 12 ); - - return( 0 ); -} - -int a_crypt_cbc( a_ctx *ctx, - int mode, - size_t length, - uchar iv[16], - const uchar *input, - uchar *output ) -{ - int i; - uchar temp[16]; - - if( length % 16 ) - return( -2 ); - - if( mode == AES_DECRYPT ) - { - while( length > 0 ) - { - memcpy( temp, input, 16 ); - a_crypt_ecb( ctx, mode, input, output ); - - for( i = 0; i < 16; i++ ) - output[i] = (uchar)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 16 ); - - input += 16; - output += 16; - length -= 16; - } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) - output[i] = (uchar)( input[i] ^ iv[i] ); - - a_crypt_ecb( ctx, mode, output, output ); - memcpy( iv, output, 16 ); - - input += 16; - output += 16; - length -= 16; - - } - } - - return( 0 ); -} - -/************************************************************************** - * SO FUNCTION - ENCRYPTION - **************************************************************************/ -int aes_so_enc (uchar* ip_buf, uint32 ip_len, uchar* op_buf, uint32 op_len) -{ - uint32 i = 0; - uint32 ret = 0; - - if (ip_len != op_len) - { - SMSG(true,"[%s] error, ip len should be equal to op len\n",MOD); - return -1; - } - - if (0 != ip_len % CIPHER_BLOCK_SIZE) - { - SMSG(true,"[%s] error, ip len should be mutiple of %d bytes\n",MOD,CIPHER_BLOCK_SIZE); - return -1; - } - - - if(0 == g_AES_Key[0]) - { - SMSG(true,"[%s] Enc Key Is ZERO. Fail\n",MOD); - goto _err; - } - - ret = a_enc(&aes, (uchar*)g_AES_Key, aes_key_len*8); - - if (ret != 0) - { - SMSG(true,"a_enc error -%02X\n", -ret); - goto _err; - } - - for (i = 0; i!=ip_len ; i+=CIPHER_BLOCK_SIZE) - { - ret = a_crypt_cbc(&aes, AES_ENCRYPT, CIPHER_BLOCK_SIZE, (uchar*)g_AES_IV_TEMP, ip_buf + i, op_buf + i); - if (ret != 0) - { - SMSG(true,"hairtunes: a_cbc error -%02X\n", -ret); - goto _err; - } - } - - return 0; - -_err: - - return -1; -} - -/************************************************************************** - * SO FUNCTION - DECRYPTION - **************************************************************************/ -int aes_so_dec (uchar* ip_buf, uint32 ip_len, uchar* op_buf, uint32 op_len) -{ - uint32 i = 0; - uint32 ret = 0; - - if (ip_len != op_len) - { - SMSG(true,"[%s] error, ip len should be equal to op len\n",MOD); - return -1; - } - - if (0 != ip_len % CIPHER_BLOCK_SIZE) - { - SMSG(true,"[%s] error, ip len should be mutiple of %d bytes\n",MOD,CIPHER_BLOCK_SIZE); - return -1; - } - - if(0 == g_AES_Key[0]) - { - SMSG(true,"[%s] Dec Key Is ZERO. Fail\n",MOD); - goto _err; - } - - ret = a_dec(&aes, (uchar*)g_AES_Key, aes_key_len*8); - if (ret != 0) - { - SMSG(true,"a_dec error -%02X\n", -ret); - goto _err; - } - - for (i = 0; i!=ip_len ; i+=CIPHER_BLOCK_SIZE) - { - ret = a_crypt_cbc(&aes, AES_DECRYPT, 0x10, (uchar*)g_AES_IV_TEMP, ip_buf + i, op_buf + i); - if (ret != 0) - { - SMSG(true,"hairtunes: a_cbc error -%02X\n", -ret); - goto _err; - } - } - - return 0; - -_err: - - return -1; - -} - -/************************************************************************** - * SO FUNCTION - KEY INITIALIZATION - **************************************************************************/ -/* WARNING ! this function is not the same as cipher tool */ -int aes_so_init_key (uchar* key_buf, uint32 key_len) -{ - uint32 i = 0; - uchar temp[CT_AES128_LEN*2]; - uint32 n = 0; - uint32 val = 0; - uchar c; - int j = 0; - uchar fmt_str[2] = {0}; - - - if(0 == key_buf) - { - SMSG(true,"[%s] Init Key Is ZERO. Fail\n",MOD); - goto _err; - } - - /* -------------------------------------------------- */ - /* check key length */ - /* -------------------------------------------------- */ - switch(key_len) - { - case CT_AES128_LEN: - break; - case CT_AES192_LEN: - case CT_AES256_LEN: - SMSG(true,"[%s] Only AES 128 is supported\n",MOD); - goto _err; - default: - SMSG(true,"[%s] Len Invalid %d\n",MOD,key_len); - goto _err; - } - - aes_key_len = key_len; - - /* -------------------------------------------------- */ - /* copy key to temporarily buffer */ - /* -------------------------------------------------- */ - mcpy(temp,key_buf,CT_AES128_LEN*2); - - /* -------------------------------------------------- */ - /* revert string to accomodate OpenSSL format */ - /* -------------------------------------------------- */ - for(i=0;i<key_len*2;i+=8) - { - c = temp[i]; - temp[i] = temp[i+6]; - temp[i+6] = c; - c = temp[i+1]; - temp[i+1] = temp[i+7]; - temp[i+7] = c; - - c = temp[i+2]; - temp[i+2] = temp[i+4]; - temp[i+4] = c; - c = temp[i+3]; - temp[i+3] = temp[i+5]; - temp[i+5] = c; - } - - /* -------------------------------------------------- */ - /* convert key value from string format to hex format */ - /* -------------------------------------------------- */ - - i = 0; - n = 0; - - while(n < key_len*2) - { - - for(j=0; j<8; j++) - { - fmt_str[0] = temp[n+j]; - sscanf(fmt_str,"%x",&val); - g_AES_Key[i] = g_AES_Key[i]*16; - g_AES_Key[i] += val; - } - - /* get next key value */ - i ++; - n += 8; - } - - /* -------------------------------------------------- */ - /* reinit IV */ - /* -------------------------------------------------- */ - for(i=0;i<4;i++) - { - g_AES_IV_TEMP[i] = g_AES_IV[i]; - } - - /* dump information for debugging */ - for(i=0; i<1; i++) - { - SMSG(true,"0x%x\n",g_AES_Key[i]); - } - - for(i=0; i<1; i++) - { - SMSG(true,"0x%x\n",g_AES_IV_TEMP[i]); - } - - return 0; - -_err: - - return -1; - -} - -/************************************************************************** - * SO FUNCTION - VECTOR INITIALIZATION - **************************************************************************/ -int aes_so_init_vector (void) -{ - uint32 i = 0; - - /* -------------------------------------------------- */ - /* reinit IV */ - /* -------------------------------------------------- */ - for(i=0;i<4;i++) - { - g_AES_IV_TEMP[i] = g_AES_IV[i]; - } - - /* dump information for debugging */ - for(i=0; i<1; i++) - { - SMSG(true,"0x%x\n",g_AES_Key[i]); - } - - for(i=0; i<1; i++) - { - SMSG(true,"0x%x\n",g_AES_IV_TEMP[i]); - } - - return 0; -} - - diff --git a/drivers/misc/mediatek/masp/asf/core/alg_sha1.c b/drivers/misc/mediatek/masp/asf/core/alg_sha1.c deleted file mode 100644 index d5fb138da..000000000 --- a/drivers/misc/mediatek/masp/asf/core/alg_sha1.c +++ /dev/null @@ -1,276 +0,0 @@ -#include "sec_osal_light.h" -#include "sec_cust_struct.h" -#include "alg_sha1.h" - -/************************************************************************** - * TYPEDEF - **************************************************************************/ -typedef unsigned int uint32; -typedef unsigned char uchar; - -/************************************************************************** - * GLOBAL VARIABLE - **************************************************************************/ -uchar sha1sum[HASH_LEN]; - -/************************************************************************** - * INTERNAL DEFINIITION - **************************************************************************/ -#define MASK 0x3F -#define K1 0x5A827999 -#define K2 0x6ED9EBA1 -#define K3 0x8F1BBCDC -#define K4 0xCA62C1D6 - -static const uchar padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/************************************************************************** - * INTERNAL FUNCTIONS - **************************************************************************/ -void hash_starts( sha1_ctx *ctx ); -void hash_update( sha1_ctx *ctx, const uchar *input, int ilen ); -void hash_finish( sha1_ctx *ctx, uchar output[20] ); - -/************************************************************************** - * MACRO - **************************************************************************/ -inline ulong get_ul (const uchar * b, ulong i) -{ - return ((ulong)(b)[(i)] << 24) | ((ulong)(b)[(i) + 1] << 16) | ((ulong)(b)[(i) + 2] << 8) | ((ulong)(b)[(i) + 3]); -} - -inline void set_ul (ulong n, uchar * b, ulong i) -{ - (b)[(i) ] = (uchar) ((n) >> 24); - (b)[(i) + 1] = (uchar) ((n) >> 16); - (b)[(i) + 2] = (uchar) ((n) >> 8); - (b)[(i) + 3] = (uchar) ((n) ); -} - -inline ulong cal_S (ulong x, ulong n) -{ - return ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))); -} - -inline ulong cal_A2 (ulong b) -{ - return cal_S(b,30); -} - -ulong cal_P (ulong a, ulong b, ulong c, ulong d, ulong x, uint32 i) -{ - if((20 > i) && (i >= 0)) - { - return (cal_S(a,5) + ((d ^ (b & (c ^ d)))) + K1 + x); - } - else if((40 > i) && (i >= 20)) - { - return (cal_S(a,5) + ((b ^ c ^ d)) + K2 + x); - } - else if((60 > i) && (i >= 40)) - { - return (cal_S(a,5) + (((b & c) | (d & (b | c)))) + K3 + x); - } - else - { - return (cal_S(a,5) + ((b ^ c ^ d)) + K4 + x); - } -} - -/************************************************************************** - * FUNCTIONS - **************************************************************************/ -void hash_starts( sha1_ctx *ctx ) -{ - ctx->to[0] = 0; - ctx->to[1] = 0; - - ctx->st[0] = 0x67452301; - ctx->st[1] = 0xEFCDAB89; - ctx->st[2] = 0x98BADCFE; - ctx->st[3] = 0x10325476; - ctx->st[4] = 0xC3D2E1F0; -} - -static void hash_process( sha1_ctx *ctx, const uchar data[64] ) -{ - - uint32 i = 0; - ulong temp, V[16], A1, A2, A3, A4, A5; - - for(i = 0; i<16; i ++) - { - V[i] = get_ul(data,i*4); - } - -#define R(t) \ - ( \ - temp = V[(t - 3) & 0x0F] ^ V[(t - 8) & 0x0F] ^ \ - V[(t - 14) & 0x0F] ^ V[t & 0x0F], \ - ( V[t & 0x0F] = cal_S(temp,1) ) \ - ) - - A1 = ctx->st[0]; - A2 = ctx->st[1]; - A3 = ctx->st[2]; - A4 = ctx->st[3]; - A5 = ctx->st[4]; - - for(i=0; i<16; i++) - { - /* processing */ - switch (i%5) - { - case 0: - A5 += cal_P (A1, A2, A3, A4, V[i], i); - A2 = cal_A2(A2); - break; - case 1: - A4 += cal_P (A5, A1, A2, A3, V[i], i); - A1 = cal_A2(A1); - break; - case 2: - A3 += cal_P (A4, A5, A1, A2, V[i], i); - A5 = cal_A2(A5); - break; - case 3: - A2 += cal_P (A3, A4, A5, A1, V[i], i); - A4 = cal_A2(A4); - break; - case 4: - A1 += cal_P (A2, A3, A4, A5, V[i], i); - A3 = cal_A2(A3); - break; - } - } - - for(i=16; i<80; i++) - { - /* processing */ - switch (i%5) - { - case 0: - A5 += cal_P (A1, A2, A3, A4, R(i), i); - A2 = cal_A2(A2); - break; - case 1: - A4 += cal_P (A5, A1, A2, A3, R(i), i); - A1 = cal_A2(A1); - break; - case 2: - A3 += cal_P (A4, A5, A1, A2, R(i), i); - A5 = cal_A2(A5); - break; - case 3: - A2 += cal_P (A3, A4, A5, A1, R(i), i); - A4 = cal_A2(A4); - break; - case 4: - A1 += cal_P (A2, A3, A4, A5, R(i), i); - A3 = cal_A2(A3); - break; - } - } - - ctx->st[0] += A1; - ctx->st[1] += A2; - ctx->st[2] += A3; - ctx->st[3] += A4; - ctx->st[4] += A5; -} - -void hash_update( sha1_ctx *ctx, const uchar *input, int ilen ) -{ - int fill; - ulong le; - - if( ilen <= 0 ) - { - return; - } - - le = ctx->to[0] & MASK; - fill = 64 - le; - - ctx->to[0] += ilen; - ctx->to[0] &= 0xFFFFFFFF; - - if( ctx->to[0] < (ulong) ilen ) - { - ctx->to[1]++; - } - - if( le && ilen >= fill ) - { - memcpy( (void *) (ctx->buf + le), (void *) input, fill ); - hash_process( ctx, ctx->buf ); - ilen -= fill; - input += fill; - le = 0; - } - - while( ilen >= 64 ) - { - hash_process( ctx, input ); - ilen -= 64; - input += 64; - } - - if( ilen > 0 ) - { - memcpy( (void *) (ctx->buf + le), (void *) input, ilen ); - } -} - -void hash_finish( sha1_ctx *ctx, uchar output[20] ) -{ - uint32 i = 0; - ulong last, padn; - ulong hi, lo; - uchar msglen[8]; - - hi = ( ctx->to[0] >> 29 ) | ( ctx->to[1] << 3 ); - lo = ( ctx->to[0] << 3 ); - - set_ul( hi, msglen, 0 ); - set_ul( lo, msglen, 4 ); - - last = ctx->to[0] & MASK; - - if (last < 56) - { - padn = 56 - last; - } - else - { - padn = 120 - last; - } - - hash_update( ctx, (uchar *) padding, padn ); - hash_update( ctx, msglen, 8 ); - - for(i=0; i<5; i++) - { - set_ul(ctx->st[i], output, i*4); - } -} - -void sha1( const uchar *input, int ilen, uchar output[20] ) -{ - sha1_ctx ctx; - - /* initialize variable */ - hash_starts( &ctx ); - /* block processing */ - hash_update( &ctx, input, ilen ); - /* complete */ - hash_finish( &ctx, output ); - - memset( &ctx, 0, sizeof( sha1_ctx ) ); -} diff --git a/drivers/misc/mediatek/masp/asf/core/sec_aes.c b/drivers/misc/mediatek/masp/asf/core/sec_aes.c deleted file mode 100644 index d21b36bea..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_aes.c +++ /dev/null @@ -1,192 +0,0 @@ -#include "sec_osal_light.h" -#include "sec_aes.h" -#include "sec_cipher_header.h" -#include "sec_typedef.h" -#include "sec_error.h" -#include "sec_rom_info.h" -#include "sec_secroimg.h" -#include "sec_key_util.h" -/* v1. legacy aes. W1128/32 MP */ -#include "aes_legacy.h" -/* v2. so aes. W1150 MP */ -#include "aes_so.h" - -/************************************************************************** - * DEFINITIONS - **************************************************************************/ -#define MOD "SEC AES" -#define SML_SCRAMBLE_SEED "78ABD4569EA41795" - -/************************************************************************** -* DEBUG CONTROL -**************************************************************************/ -#define SEC_AES_DEBUG_LOG (0) -#define SMSG printk - -/************************************************************************** - * LOCAL VARIABLE - **************************************************************************/ -static uchar bAesKeyInit = FALSE; - -/************************************************************************** - * EXTERNAL VARIABLE - **************************************************************************/ -extern AND_ROMINFO_T rom_info; -extern AND_SECROIMG_T secroimg; - -/************************************************************************** - * EXTERNAL FUNCTION - **************************************************************************/ - -/************************************************************************** - * DUMP HEADER - **************************************************************************/ -void sec_dump_img_header (const CIPHER_HEADER *img_header) -{ - SMSG("[%s] header magic_number = %d\n",MOD,img_header->magic_number); - SMSG("[%s] header cust_name = %s\n",MOD,img_header->cust_name); - SMSG("[%s] header image_version = %d\n",MOD,img_header->image_version); - SMSG("[%s] header image_length = %d\n",MOD,img_header->image_length); - SMSG("[%s] header image_offset = %d\n",MOD,img_header->image_offset); - SMSG("[%s] header cipher_length = %d\n",MOD,img_header->cipher_length); - SMSG("[%s] header cipher_offset = %d\n",MOD,img_header->cipher_offset); -} - -/************************************************************************** - * IMPORT KEY - **************************************************************************/ -int sec_aes_import_key(void) -{ - int ret = SEC_OK; - uchar key[AES_KEY_SIZE] = {0}; - AES_VER aes_ver = AES_VER_LEGACY; - uint32 key_len = 0; - - /* avoid re-init aes key - if re-init key again, key value will be decoded twice ..*/ - if(TRUE == bAesKeyInit) - { - SMSG("[%s] reset aes vector\n",MOD); - /* initialize internal crypto engine */ - if(SEC_OK != (ret = lib_aes_init_vector (rom_info.m_SEC_CTRL.m_sec_aes_legacy?(AES_VER_LEGACY):(AES_VER_SO)))) - { - goto _end; - } - return ret; - } - - bAesKeyInit = TRUE; - - if(0 != mcmp(rom_info.m_id,RI_NAME,RI_NAME_LEN)) - { - SMSG("[%s] error. key not found\n",MOD); - ret = ERR_AES_KEY_NOT_FOUND; - goto _end; - } - - - /* -------------------------- */ - /* check aes type */ - /* -------------------------- */ - if(TRUE == rom_info.m_SEC_CTRL.m_sec_aes_legacy) - { - aes_ver = AES_VER_LEGACY; - key_len = 32; - } - else - { - aes_ver = AES_VER_SO; - key_len = 16; - } - - - /* -------------------------- */ - /* get sml aes key */ - /* -------------------------- */ - if(FALSE == rom_info.m_SEC_CTRL.m_sml_aes_key_ac_en) - { - sec_decode_key( rom_info.m_SEC_KEY.sml_aes_key, - sizeof(rom_info.m_SEC_KEY.sml_aes_key), - rom_info.m_SEC_KEY.crypto_seed, - sizeof(rom_info.m_SEC_KEY.crypto_seed)); - dump_buf(rom_info.m_SEC_KEY.sml_aes_key,4); - mcpy(key,rom_info.m_SEC_KEY.sml_aes_key,sizeof(key)); - } - else - { - SMSG("\n[%s] AC enabled\n",MOD); - dump_buf(secroimg.m_andro.sml_aes_key,4); - sec_decode_key( secroimg.m_andro.sml_aes_key, - sizeof(secroimg.m_andro.sml_aes_key), - (uchar*)SML_SCRAMBLE_SEED, - sizeof(SML_SCRAMBLE_SEED)); - dump_buf(secroimg.m_andro.sml_aes_key,4); - mcpy(key,secroimg.m_andro.sml_aes_key,sizeof(key)); - } - - /* initialize internal crypto engine */ - if(SEC_OK != (ret = lib_aes_init_key (key,key_len,aes_ver))) - { - goto _end; - } - -_end: - - return ret; -} - -/************************************************************************** - * IMAGE CIPHER AES INIT - **************************************************************************/ -int sec_aes_init(void) -{ - int ret = SEC_OK; - - /* init key */ - if (SEC_OK != (ret = sec_aes_import_key())) - { - goto _exit; - } - -_exit: - - return ret; -} - - -/************************************************************************** - * AES TEST FUNCTION - **************************************************************************/ -/* Note: this function is only for aes test */ -int sec_aes_test (void) -{ - int ret = SEC_OK; - uchar buf[CIPHER_BLOCK_SIZE] = "AES_TEST"; - - SMSG("\n[%s] SW AES test\n",MOD); - - /* -------------------------- */ - /* sec aes encrypt test */ - /* -------------------------- */ - SMSG("[%s] input = 0x%x,0x%x,0x%x,0x%x\n",MOD,buf[0],buf[1],buf[2],buf[3]); - if(SEC_OK != (ret = lib_aes_enc(buf,CIPHER_BLOCK_SIZE,buf,CIPHER_BLOCK_SIZE))) - { - SMSG("[%s] error (0x%x)\n",MOD,ret); - goto _exit; - } - SMSG("[%s] cipher = 0x%x,0x%x,0x%x,0x%x\n",MOD,buf[0],buf[1],buf[2],buf[3]); - - /* -------------------------- */ - /* sec aes decrypt test */ - /* -------------------------- */ - if(SEC_OK != (ret = lib_aes_dec(buf,CIPHER_BLOCK_SIZE,buf,CIPHER_BLOCK_SIZE))) - { - SMSG("[%s] error (0x%x)\n",MOD,ret); - goto _exit; - } - SMSG("[%s] plain text = 0x%x,0x%x,0x%x,0x%x\n",MOD,buf[0],buf[1],buf[2],buf[3]); - -_exit: - return ret; -} - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_boot_core.c b/drivers/misc/mediatek/masp/asf/core/sec_boot_core.c deleted file mode 100644 index 56b79ff31..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_boot_core.c +++ /dev/null @@ -1,315 +0,0 @@ -/****************************************************************************** - * INCLUDE LIBRARY - ******************************************************************************/ -#include "sec_boot_lib.h" -#include <mach/sec_osal.h> -#include <mach/mt_sec_hal.h> - -/************************************************************************** - * DEFINITIONS - **************************************************************************/ -#define MOD "ASF" - -/************************************************************************** - * LOCAL VARIABLE - **************************************************************************/ - -/************************************************************************** - * GLOBAL VARIABLE - **************************************************************************/ -AND_ROMINFO_T rom_info; -SECURE_INFO sec_info; -SECCFG_U seccfg; - -bool bMsg = FALSE; -bool bSECROInit = FALSE; - - -/****************************************************************************** - * CHECK IF SECURITY CHIP IS ENABLED -******************************************************************************/ -int sec_schip_enabled (void) -{ - if(TRUE == masp_hal_sbc_enabled()) - { - SMSG(true,"SC\n"); - return 1; - } - else - { - SMSG(true,"NSC\n"); - return 0; - } - - return 0; -} - - -/****************************************************************************** - * CHECK IF SDS (SML DEFAULT SETTING BINARY) IS ENABLED -******************************************************************************/ -/* not used */ -int sec_sds_enabled (void) -{ - switch(rom_info.m_SEC_CTRL.m_sec_sds_en) - { - case 0: - SMSG(bMsg,"[%s] SDS is disabled\n",MOD); - return 1; - - case 1: - SMSG(bMsg,"[%s] SDS is enabled\n",MOD); - return 1; - - default: - SMSG(true,"[%s] invalid SDS config (0x%x)\n",MOD,rom_info.m_SEC_CTRL.m_sec_sds_en); - SEC_ASSERT(0); - } - - return 0; -} - - -/****************************************************************************** - * CHECK IF SECURE BOOT IS NEEDED -******************************************************************************/ -int sec_boot_enabled (void) -{ - switch(rom_info.m_SEC_CTRL.m_sec_boot) - { - case ATTR_SBOOT_ENABLE: - SMSG(bMsg,"[%s] SBOOT is enabled\n",MOD); - SMSG(bMsg,"0x%x, SB-FORCE\n",ATTR_SBOOT_ENABLE); - return 1; - - /* secure boot can't be disabled on security chip */ - case ATTR_SBOOT_DISABLE: - case ATTR_SBOOT_ONLY_ENABLE_ON_SCHIP: - SMSG(bMsg,"[%s] SBOOT is only enabled on S-CHIP\n",MOD); - if(TRUE == masp_hal_sbc_enabled()) - { - SMSG(true,"0x%x, SB-SC\n",ATTR_SBOOT_ONLY_ENABLE_ON_SCHIP); - return 1; - } - else - { - SMSG(true,"0x%x, SB-NSC\n",ATTR_SBOOT_ONLY_ENABLE_ON_SCHIP); - return 0; - } - default: - SMSG(true,"[%s] invalid sboot config (SB-0x%x)\n",MOD,rom_info.m_SEC_CTRL.m_sec_boot); - SEC_ASSERT(0); - } - - return 0; - -} - -/****************************************************************************** - * CHECK IF MODEM AUTH IS NEEDED -******************************************************************************/ -int sec_modem_auth_enabled (void) -{ - - switch(rom_info.m_SEC_CTRL.m_sec_modem_auth) - { - case 0: - SMSG(bMsg,"[%s] MODEM AUTH is disabled\n",MOD); - return 0; - - case 1: - SMSG(bMsg,"[%s] MODEM AUTH is enabled\n",MOD); - return 1; - default: - SMSG(true,"[%s] invalid modem auth config (0x%x)\n",MOD,rom_info.m_SEC_CTRL.m_sec_modem_auth); - SEC_ASSERT(0); - } - - return 0; -} - -/************************************************************************** - * SECURE BOOT - **************************************************************************/ -int sec_boot_key_init (void) -{ - int ret = SEC_OK; - - if(TRUE == sec_info.bKeyInitDis) - { - SMSG(true,"[%s] key init disabled\n",MOD); - goto _end; - } - - /* ------------------------------ */ - /* init aes */ - /* ------------------------------ */ - if(SEC_OK != (ret = sec_aes_init())) - { - goto _end; - } - - /* ------------------------------ */ - /* init rsa */ - /* ------------------------------ */ - if(SEC_OK != (ret = sec_init_key( rom_info.m_SEC_KEY.sml_auth_rsa_n, - sizeof(rom_info.m_SEC_KEY.sml_auth_rsa_n), - rom_info.m_SEC_KEY.sml_auth_rsa_e, - sizeof(rom_info.m_SEC_KEY.sml_auth_rsa_e)))) - { - goto _end; - } - -_end: - return ret; -} - -/************************************************************************** - * SECURE BOOT INIT HACC - **************************************************************************/ -uint32 sec_boot_hacc_init (void) -{ - uint32 ret = SEC_OK; - - /* ----------------------------------- */ - /* check if secure boot is enabled */ - /* ----------------------------------- */ - if(0 != mcmp(rom_info.m_id,RI_NAME,RI_NAME_LEN)) - { - ret = ERR_ROM_INFO_MTD_NOT_FOUND; - goto _end; - } - - /* ----------------------------------- */ - /* lnit hacc key */ - /* ----------------------------------- */ - if(SEC_OK != (ret = masp_hal_sp_hacc_init (rom_info.m_SEC_KEY.crypto_seed,sizeof(rom_info.m_SEC_KEY.crypto_seed)))) - { - goto _end; - } - -_end: - - return ret; -} - -/************************************************************************** - * SECURE BOOT CHECK PART ENABLE CHECK - **************************************************************************/ -bool sec_boot_check_part_enabled (char* part_name) -{ - bool bCheckEn = false; - uint32 i = 0; - uint32 chk_num = 0; - - AND_SECBOOT_CHECK_PART_T *chk_part = NULL; - SMSG(bMsg,"[%s] find part_name '%s'\n",MOD,part_name); - - chk_part = &rom_info.m_SEC_BOOT_CHECK_PART; - chk_num = sizeof(AND_SECBOOT_CHECK_PART_T)/sizeof(chk_part->name[0]); - - for(i=0; i<chk_num; i++) - { - SMSG(bMsg,"[%s] chk_part->name[%d] = %s\n",MOD,i,chk_part->name[i]); - if(0 == mcmp(part_name, chk_part->name[i], strlen(part_name))) - { - bCheckEn = true; - break; - } - } - - return bCheckEn; -} - -/************************************************************************** - * SECURE BOOT INIT - **************************************************************************/ -int masp_boot_init (void) -{ - int ret = SEC_OK; - - SMSG(true,"[%s] '%s%s'\n",MOD,BUILD_TIME,BUILD_BRANCH); - -#if !defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) - /* ----------------------------------- */ - /* check usif status */ - /* ----------------------------------- */ - if(SEC_OK != (ret = sec_usif_check())) - { - goto _error; - } -#endif - /* ----------------------------------- */ - /* scan partition map */ - /* ----------------------------------- */ - sec_dev_find_parts(); - - /* ----------------------------------- */ - /* read rom info */ - /* ----------------------------------- */ - /* read rom info to get security config. */ - if(SEC_OK != (ret = sec_dev_read_rom_info())) - { - goto _error; - } - - SMSG(true,"[%s] ROM INFO is found\n",MOD); - - if(0 != mcmp(rom_info.m_id,RI_NAME,RI_NAME_LEN)) - { - SMSG(true,"[%s] error. ROM INFO not found\n",MOD); - ret = ERR_ROM_INFO_MTD_NOT_FOUND; - goto _error; - } - - /* ----------------------------------- */ - /* read secro */ - /* ----------------------------------- */ - if(TRUE == rom_info.m_SEC_CTRL.m_secro_ac_en) - { - if(FALSE == bSECROInit) - { -#if 0 - if(TRUE == sec_secro_ac()) - { - if(SEC_OK != (ret = sec_dev_read_secroimg())) - { - goto _error; - } - } - else - { - /* only for non-security platform */ - if(SEC_OK != (ret = sec_fs_read_secroimg(FS_SECRO_PATH,(uchar*)&secroimg))) - { - goto _error; - } - } -#else - if(SEC_OK != (ret = sec_dev_read_secroimg())) - { - goto _error; - } - -#endif - bSECROInit = TRUE; - } - } - - /* ----------------------------------- */ - /* init key */ - /* ----------------------------------- */ - /* TODO : add support to read SML DEC key from SEC_RO */ - if(SEC_OK != (ret = sec_boot_key_init())) - { - goto _error; - } - - return ret; - -_error: - - SMSG(true,"[%s] error (0x%x)\n",MOD,ret); - - return ret; -} diff --git a/drivers/misc/mediatek/masp/asf/core/sec_boot_lib.c b/drivers/misc/mediatek/masp/asf/core/sec_boot_lib.c deleted file mode 100644 index 797fd02f1..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_boot_lib.c +++ /dev/null @@ -1,130 +0,0 @@ -/****************************************************************************** - * INCLUDE LIBRARY - ******************************************************************************/ -#include "sec_boot_lib.h" - -/****************************************************************************** - * CONSTANT DEFINITIONS - ******************************************************************************/ -#define MOD "ASF" - -/****************************************************************************** - * EXTERNAL VARIABLES - ******************************************************************************/ -extern uchar sha1sum[]; - -/****************************************************************************** - * EXTERNAL FUNCTION - ******************************************************************************/ - -/************************************************************************** - * INTERNAL UTILITES - **************************************************************************/ -void * mcpy(void *dest, const void *src, int cnt) -{ - char *tmp = dest; - const char *s = src; - - while (cnt--) - *tmp++ = *s++; - return dest; -} - -int mcmp (const void *cs, const void *ct, int cnt) -{ - const uchar *su1, *su2; - int res = 0; - - for (su1 = cs, su2 = ct; 0 < cnt; ++su1, ++su2, cnt--) - if ((res = *su1 - *su2) != 0) - break; - return res; -} - -void dump_buf(uchar* buf, uint32 len) -{ - uint32 i = 1; - - for (i =1; i <len+1; i++) - { - if(0 != buf[i-1]) - { - SMSG(true,"0x%x,",buf[i-1]); - - if(0 == i%8) - { - SMSG(true,"\n"); - } - } - } - - SMSG(true,"\n"); -} - -/****************************************************************************** - * IMAGE HASH DUMP - ******************************************************************************/ -void img_hash_dump (uchar *buf, uint32 size) -{ - uint32 i = 0; - - for (i = 0 ; i < size ; i++) - { - if(i % 4 ==0) - { - SMSG(true,"\n"); - } - - if(buf[i] < 0x10) - { - SMSG(true,"0x0%x, ",buf[i]); - } - else - { - SMSG(true,"0x%x, ",buf[i]); - } - } -} - -/****************************************************************************** - * IMAGE HASH CALCULATION - ******************************************************************************/ -void img_hash_compute (uchar *buf, uint32 size) -{ - SEC_ASSERT(0); -} - -/****************************************************************************** - * IMAGE HASH UPDATE - ******************************************************************************/ -uint32 img_hash_update (char* part_name) -{ - uint32 ret = SEC_OK; - - SEC_ASSERT(0); - - return ret; -} - - -/****************************************************************************** - * IMAGE HASH CHECK - ******************************************************************************/ -uint32 img_hash_check (char* part_name) -{ - uint32 ret = SEC_OK; - - SEC_ASSERT(0); - - return ret; -} - - -/****************************************************************************** - * GET BUILD INFORMATION - ******************************************************************************/ -char* asf_get_build_info(void) -{ - return BUILD_TIME""BUILD_BRANCH; -} - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_ccci.c b/drivers/misc/mediatek/masp/asf/core/sec_ccci.c deleted file mode 100644 index cc948ad75..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_ccci.c +++ /dev/null @@ -1,114 +0,0 @@ -#include <mach/mt_sec_hal.h> -#include "sec_boot_lib.h" -#include "sec_ccci.h" - -/************************************************************************** - * MODULE NAME - **************************************************************************/ -#define MOD "SEC_CCCI" - -int masp_ccci_signfmt_verify_file(char *file_path, unsigned int *data_offset, unsigned int *data_sec_len) -{ - unsigned int ret = SEC_OK; - SEC_IMG_HEADER img_hdr; - - *data_offset = 0; - *data_sec_len = 0; - - ret = sec_signfmt_verify_file(file_path, &img_hdr, data_offset, data_sec_len); - - /* image is not signed */ - if( ret == ERR_SIGN_FORMAT_MAGIC_WRONG ) - { - if((sec_modem_auth_enabled() == 0) && (sec_schip_enabled() == 0)) - { - SMSG(true,"[%s] image has no sec header\n",MOD); - ret = SEC_OK; - goto _out; - } - else - { - SMSG(true,"[%s] (img not signed) sec_modem_auth_enabled() = %d\n",MOD,sec_modem_auth_enabled()); - SMSG(true,"[%s] (img not signed) sec_schip_enabled() = %d\n",MOD,sec_schip_enabled()); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _out; - } - } - - if( ret != SEC_OK ) - { - SMSG(true,"[%s] file '%s' verify failed\n",MOD,file_path); - goto _out; - } - - SMSG(true,"[%s] data_offset is %d\n",MOD,*data_offset); - SMSG(true,"[%s] data_sec_len is %d\n",MOD,*data_sec_len); - -_out: - - return ret; -} - -int masp_ccci_version_info(void) -{ - return CCCI_VERSION; -} - -int sec_ccci_file_open(char *file_path) -{ - int fp_id; - - fp_id = osal_filp_open_read_only(file_path); - - if(fp_id != OSAL_FILE_NULL) - { - return fp_id; - } - - return -1; -} - -int sec_ccci_file_close(int fp_id) -{ - return osal_filp_close(fp_id); -} - - -int masp_ccci_is_cipherfmt(int fp_id, unsigned int start_off, unsigned int *img_len) -{ - if( SEC_OK != sec_cipherfmt_check_cipher(fp_id, start_off, img_len) ) - { - *img_len = 0; - return 0; - } - - return 1; -} - -int masp_ccci_decrypt_cipherfmt(int fp_id, unsigned int start_off, char *buf, unsigned int buf_len, unsigned int *data_offset) -{ - return sec_cipherfmt_decrypted(fp_id, start_off, buf, buf_len, data_offset); -} - -void masp_secure_algo(unsigned char Direction, unsigned char *ContentAddr, unsigned int ContentLen, unsigned char *CustomSeed, unsigned char *ResText) -{ - return masp_hal_secure_algo(Direction, ContentAddr, ContentLen, CustomSeed, ResText); -} - -/* return the result of hwEnableClock ( ) - - TRUE (1) means crypto engine init success - - FALSE (0) means crypto engine init fail */ -unsigned char masp_secure_algo_init(void) -{ - return masp_hal_secure_algo_init(); -} - -/* return the result of hwDisableClock ( ) - - TRUE (1) means crypto engine de-init success - - FALSE (0) means crypto engine de-init fail */ -unsigned char masp_secure_algo_deinit(void) -{ - return masp_hal_secure_algo_deinit(); -} - - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_cfg_crypto.c b/drivers/misc/mediatek/masp/asf/core/sec_cfg_crypto.c deleted file mode 100644 index ddc59aed4..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_cfg_crypto.c +++ /dev/null @@ -1,29 +0,0 @@ -/****************************************************************************** - * INCLUDE LIBRARY - ******************************************************************************/ -#include "sec_boot_lib.h" - -/****************************************************************************** - * CONSTANT DEFINITIONS - ******************************************************************************/ -#define MOD "SEC_CFG_CRYPTO" - -/****************************************************************************** - * GET SECCFG CIPHER LENGTH - ******************************************************************************/ -unsigned int get_seccfg_cipher_len (void) -{ - switch(get_seccfg_ver()) - { - case SECCFG_V1: - case SECCFG_V1_2: - return (SECURE_IMAGE_COUNT*sizeof(SECURE_IMG_INFO_V1)+16); - case SECCFG_V3: - return (SECURE_IMAGE_COUNT_V3*sizeof(SECURE_IMG_INFO_V3)+12+4+EXT_REGION_BUF_SIZE); - default: - /* return the wrong size */ - return 0; - } -} - - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_cfg_ver.c b/drivers/misc/mediatek/masp/asf/core/sec_cfg_ver.c deleted file mode 100644 index a3b258d4c..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_cfg_ver.c +++ /dev/null @@ -1,328 +0,0 @@ -/****************************************************************************** - * INCLUDE LIBRARY - ******************************************************************************/ -#include "sec_boot_lib.h" -#include "sec_cfg_ver.h" - -/****************************************************************************** - * CONSTANT DEFINITIONS - ******************************************************************************/ -#define MOD "SECCFG_VER" - -/****************************************************************************** - * LOCAL VARIABLE - ******************************************************************************/ -static SECCFG_VER seccfg_ver = SECCFG_V1; - -/****************************************************************************** - * SECCFG VERSION - ******************************************************************************/ -SECCFG_VER get_seccfg_ver (void) -{ - switch(seccfg_ver) - { - case SECCFG_V1: - case SECCFG_V1_2: - return seccfg_ver; - case SECCFG_V3: - return seccfg_ver; - default: - SEC_ASSERT(0); - } - - return 0; -} - -void set_seccfg_ver (SECCFG_VER val) -{ - switch(val) - { - case SECCFG_V1: - case SECCFG_V1_2: - seccfg_ver = val; - break; - case SECCFG_V3: - case SECCFG_UNSET: - seccfg_ver = val; - break; - default: - SEC_ASSERT(0); - } -} - -/****************************************************************************** - * SECCFG STATUS - ******************************************************************************/ -SECCFG_STATUS get_seccfg_status (SECCFG_U *p_seccfg) -{ - switch(get_seccfg_ver()) - { - case SECCFG_V1: - case SECCFG_V1_2: - return p_seccfg->v1.status; - case SECCFG_V3: - return p_seccfg->v3.seccfg_status; - case SECCFG_UNSET: - default: - memset(p_seccfg,0,sizeof(SECCFG_U)); - return 0; - } -} - -void set_seccfg_status (SECCFG_U *p_seccfg, SECCFG_STATUS val) -{ - switch(get_seccfg_ver()) - { - case SECCFG_V1: - case SECCFG_V1_2: - p_seccfg->v1.status = val; - break; - case SECCFG_V3: - p_seccfg->v3.seccfg_status = val; - break; - case SECCFG_UNSET: - default: - memset(p_seccfg,0,sizeof(SECCFG_U)); - break; - } -} - -/****************************************************************************** - * SECCFG SIU - ******************************************************************************/ -uint32 get_seccfg_siu (SECCFG_U *p_seccfg) -{ - switch(get_seccfg_ver()) - { - case SECCFG_V1: - case SECCFG_V1_2: - return p_seccfg->v1.siu_status; - case SECCFG_V3: - return p_seccfg->v3.siu_status; - case SECCFG_UNSET: - default: - memset(p_seccfg,0,sizeof(SECCFG_U)); - return 0; - } -} - -void set_seccfg_siu (SECCFG_U *p_seccfg, uint32 val) -{ - switch(get_seccfg_ver()) - { - case SECCFG_V1: - case SECCFG_V1_2: - p_seccfg->v1.siu_status = val; - break; - case SECCFG_V3: - p_seccfg->v3.siu_status = val; - break; - case SECCFG_UNSET: - default: - memset(p_seccfg,0,sizeof(SECCFG_U)); - break; - } -} - -/****************************************************************************** - * SECCFG IMAGE COUNT - ******************************************************************************/ -uint32 get_seccfg_img_cnt (void) -{ - switch(get_seccfg_ver()) - { - case SECCFG_V1: - case SECCFG_V1_2: - return SECURE_IMAGE_COUNT; - case SECCFG_V3: - return SECURE_IMAGE_COUNT_V3; - case SECCFG_UNSET: - default: - return 0; - } -} - -/****************************************************************************** - * SECCFG VERSION DETECT - ******************************************************************************/ -int seccfg_ver_detect (void) -{ - int ret = SEC_OK; - - /* ----------------------------------- */ - /* check seccfg magic */ - /* ----------------------------------- */ - if(SEC_CFG_MAGIC_NUM != seccfg.v1.magic_number) - { - ret = ERR_SEC_CFG_MAGIC_INVALID; - goto _end; - } - - /* ----------------------------------- */ - /* detect seccfg version */ - /* ----------------------------------- */ - if(SEC_CFG_END_PATTERN == seccfg.v1.end_pattern) - { - SMSG(true,"[%s] seccfg version v%d detected\n",MOD,seccfg.v1.lib_ver); - if(SECCFG_V1 != seccfg.v1.lib_ver) - { - SMSG(true,"[%s] seccfg version not v1, correct it\n",MOD); - } - set_seccfg_ver(SECCFG_V1); - set_shdr_ver(SEC_HDR_V1); - } - else if(SEC_CFG_END_PATTERN == seccfg.v3.end_pattern) - { - SMSG(true,"[%s] seccfg version v%d detected\n",MOD,seccfg.v3.seccfg_ver); - if(SECCFG_V3 != seccfg.v3.seccfg_ver) - { - SMSG(true,"[%s] seccfg version not v3, correct it\n",MOD); - } - set_seccfg_ver(SECCFG_V3); - set_shdr_ver(SEC_HDR_V3); - } - else - { - ret = ERR_SEC_CFG_VERSION_INVALID; - goto _end; - } - -_end: - - return ret; -} - -/****************************************************************************** - * SECCFG VERSION CORRECT - ******************************************************************************/ -int seccfg_ver_correct (void) -{ - int ret = SEC_OK; - SEC_IMG_HEADER_U *sign_header = 0; - - /* ----------------------------------- */ - /* check seccfg magic */ - /* ----------------------------------- */ - if(SEC_CFG_MAGIC_NUM != seccfg.v1.magic_number) - { - ret = ERR_SEC_CFG_MAGIC_INVALID; - goto _end; - } - - /* ----------------------------------- */ - /* check seccfg version */ - /* ----------------------------------- */ - switch(get_seccfg_ver()) - { - case SECCFG_V1: - case SECCFG_V1_2: - - /* correct seccfg version */ - sign_header = (SEC_IMG_HEADER_U *)&seccfg.v1.image_info[0].header; - - if(SEC_IMG_MAGIC != sign_header->v1.magic_number) - { - ret = ERR_SBOOT_CHECK_INVALID_IMG_MAGIC_NUM; - goto _end; - } - - if(0 == sign_header->v2.signature_length) - { - set_shdr_ver(SEC_HDR_V1); - set_seccfg_ver(SECCFG_V1); - } - else - { - set_shdr_ver(SEC_HDR_V2); - set_seccfg_ver(SECCFG_V1_2); - } - - break; - - case SECCFG_V3: - - set_shdr_ver(SEC_HDR_V3); - set_seccfg_ver(SECCFG_V3); - - break; - default: - - ret = ERR_SEC_CFG_VERSION_INVALID; - goto _end; - } - -_end: - - return ret; -} - -/****************************************************************************** - * SECCFG VERSION CHECK - ******************************************************************************/ -int seccfg_ver_verify (void) -{ - int ret = SEC_OK; - - /* ----------------------------------- */ - /* check seccfg magic */ - /* ----------------------------------- */ - if(SEC_CFG_MAGIC_NUM != seccfg.v1.magic_number) - { - ret = ERR_SEC_CFG_MAGIC_INVALID; - goto _end; - } - - /* ----------------------------------- */ - /* check seccfg version */ - /* ----------------------------------- */ - switch(get_seccfg_ver()) - { - case SECCFG_V1: - case SECCFG_V1_2: - SMSG(true,"[%s] seccfg id = %s\n",MOD,seccfg.v1.id); - - if(0 != mcmp(seccfg.v1.id,SEC_CFG_BEGIN,SEC_CFG_BEGIN_LEN)) - { - ret = ERR_SEC_CFG_INVALID_ID; - goto _end; - } - - SMSG(true,"[%s] seccfg end pattern = 0x%x\n",MOD,seccfg.v1.end_pattern); - - if(SEC_CFG_END_PATTERN != seccfg.v1.end_pattern) - { - ret = ERR_SEC_CFG_INVALID_END_PATTERN; - goto _end; - } - - break; - - case SECCFG_V3: - SMSG(true,"[%s] seccfg id = %s\n",MOD,seccfg.v3.id); - - if(0 != mcmp(seccfg.v3.id,SEC_CFG_BEGIN,SEC_CFG_BEGIN_LEN)) - { - ret = ERR_SEC_CFG_INVALID_ID; - goto _end; - } - - SMSG(true,"[%s] seccfg end pattern = 0x%x\n",MOD,seccfg.v3.end_pattern); - - if(SEC_CFG_END_PATTERN != seccfg.v3.end_pattern) - { - ret = ERR_SEC_CFG_INVALID_END_PATTERN; - goto _end; - } - - break; - default: - - ret = ERR_SEC_CFG_VERSION_INVALID; - goto _end; - } - -_end: - - return ret; -} - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_cipherfmt_core.c b/drivers/misc/mediatek/masp/asf/core/sec_cipherfmt_core.c deleted file mode 100644 index 18e2c7a7d..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_cipherfmt_core.c +++ /dev/null @@ -1,296 +0,0 @@ -#include "sec_boot_lib.h" - -/************************************************************************** - * MODULE NAME - **************************************************************************/ -#define MOD "CFMT_CORE" - -/****************************************************************************** - * IMAGE VERIFICATION MEMORY DUMP FUNCTIONS - ******************************************************************************/ -#define DUMP_MORE_FOR_DEBUG 0 - -#if DUMP_MORE_FOR_DEBUG -static void sec_cipherfmt_dump_buffer(uchar* buf, uint32 len) -{ - uint32 i = 0; - - for (i =1; i <len+1; i++) - { - SMSG(true,"0x%x,",buf[i-1]); - - if(0 == (i%8)) - SMSG(true,"\n"); - } - - if(0 != (len%8)) - SMSG(true,"\n"); -} -#endif - - -/************************************************************************** - * FUNCTION To check if the image is encrypted - **************************************************************************/ -int sec_cipherfmt_check_cipher(ASF_FILE fp, unsigned int start_off, unsigned int *img_len) -{ - CIPHER_HEADER cipher_header; - uint32 read_sz = 0; - unsigned int ret = SEC_OK; - - ASF_GET_DS - - memset(&cipher_header, 0x00, CIPHER_IMG_HEADER_SIZE); - - if( !ASF_FILE_ERROR(fp) ) - { - ASF_SEEK_SET(fp, start_off); - /* get header */ - if (CIPHER_IMG_HEADER_SIZE != (read_sz = ASF_READ(fp, (char*)&cipher_header, CIPHER_IMG_HEADER_SIZE))) - { - SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,CIPHER_IMG_HEADER_SIZE); - ret = ERR_IMAGE_CIPHER_READ_FAIL; - goto _read_hdr_fail; - } - } - else - { - SMSG(true,"[%s] file pointer is NULL\n",MOD); - ret = ERR_IMAGE_CIPHER_IMG_NOT_FOUND; - goto _img_hdr_not_found; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(true,"[%s] sec_cipherfmt_check_cipher - dump header\n",MOD); - sec_cipherfmt_dump_buffer((char*)&cipher_header, CIPHER_IMG_HEADER_SIZE); -#endif - - if( CIPHER_IMG_MAGIC != cipher_header.magic_number ) - { - SMSG(true,"[%s] magic number is wrong\n",MOD); - ret = ERR_IMAGE_CIPHER_HEADER_NOT_FOUND; - goto _img_hdr_not_found; - } - - *img_len = cipher_header.image_length; - -_img_hdr_not_found: -_read_hdr_fail: - - ASF_PUT_DS - - - return ret; -} - -/************************************************************************** - * FUNCTION To decrypt the cipher content - **************************************************************************/ -int sec_cipherfmt_decrypted(ASF_FILE fp, unsigned int start_off, char *buf, unsigned int buf_len, unsigned int *data_offset) -{ - unsigned int ret = SEC_OK; - CIPHER_HEADER cipher_header; - uint32 read_sz = 0; - uint32 read_offset = start_off; - char *buf_ptr = buf; - uint32 total_len = 0; - uint32 end_pos; - char tmp_buf[CIPHER_BLOCK_SIZE]; - char tmp_buf2[CIPHER_BLOCK_SIZE]; - uint32 try_read_len = 0; - - ASF_GET_DS - - SMSG(true,"[%s] sec_cipherfmt_decrypted (DS lock) - start offset is %d (0x%x)\n",MOD, start_off, start_off); - SMSG(true,"[%s] sec_cipherfmt_decrypted (DS lock) - total buffer length %d (0x%x)\n",MOD, buf_len, buf_len); - - memset(&cipher_header, 0x00, CIPHER_IMG_HEADER_SIZE); - - if( !ASF_FILE_ERROR(fp) ) - { - ASF_SEEK_SET(fp, read_offset); - /* get header */ - if (CIPHER_IMG_HEADER_SIZE != (read_sz = ASF_READ(fp, (char*)&cipher_header, CIPHER_IMG_HEADER_SIZE))) - { - SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,CIPHER_IMG_HEADER_SIZE); - ret = ERR_IMAGE_CIPHER_READ_FAIL; - goto _read_hdr_fail; - } - } - else - { - SMSG(true,"[%s] file pointer is NULL\n",MOD); - ret = ERR_IMAGE_CIPHER_IMG_NOT_FOUND; - goto _read_hdr_fail; - } - - if( CIPHER_IMG_MAGIC != cipher_header.magic_number ) - { - SMSG(true,"[%s] file pointer is NULL\n",MOD); - ret = ERR_IMAGE_CIPHER_HEADER_NOT_FOUND; - goto _hdr_not_found; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(true,"[%s] sec_cipherfmt_decrypted - dump header\n",MOD); - sec_cipherfmt_dump_buffer((char*)&cipher_header, CIPHER_IMG_HEADER_SIZE); -#endif - - read_offset += CIPHER_IMG_HEADER_SIZE; - ASF_SEEK_SET(fp, read_offset); - total_len = cipher_header.image_length; - - SMSG(true,"[%s] sec_cipherfmt_decrypted - cipher_offset is %d (0x%x)\n",MOD, cipher_header.cipher_offset, cipher_header.cipher_offset); - SMSG(true,"[%s] sec_cipherfmt_decrypted - cipher_length %d (0x%x)\n",MOD, cipher_header.cipher_length, cipher_header.cipher_length); - - /* by pass cipher offset, cause this part is not encrypted */ - if( cipher_header.cipher_offset ) - { - /* get header */ - if (cipher_header.cipher_offset != (read_sz = ASF_READ(fp, (char*)buf_ptr, cipher_header.cipher_offset))) - { - SMSG(true,"[%s] read start size '%d' != '%d'\n",MOD,read_sz,cipher_header.cipher_offset); - ret = ERR_IMAGE_CIPHER_READ_FAIL; - goto _read_cipher_offset_fail; - } -#if DUMP_MORE_FOR_DEBUG - SMSG(true,"[%s] sec_cipherfmt_decrypted - dump head part: 0x%x\n",MOD, read_offset); - sec_cipherfmt_dump_buffer(buf_ptr, cipher_header.cipher_offset); -#endif - read_offset += cipher_header.cipher_offset; - buf_ptr += cipher_header.cipher_offset; - total_len -= cipher_header.cipher_offset; - } - - ASF_SEEK_SET(fp, read_offset); - - /* decrypted the cipher content */ - if( cipher_header.cipher_length ) - { - end_pos = read_offset + cipher_header.cipher_length; - - /* init the key */ - ret = sec_aes_init(); - if (ret) { - SMSG(true,"[%s] key init failed!\n",MOD); - ret = ERR_IMAGE_CIPHER_KEY_ERR; - goto _key_init_fail; - } - - /* read with fixed block size */ - while( read_offset < end_pos ) - { - if( (end_pos - read_offset) < CIPHER_BLOCK_SIZE ) - { - SMSG(true,"[%s] cipher block size is not aligned (warning!)\n",MOD); - try_read_len = end_pos - read_offset; - break; - } - memset(tmp_buf, 0x00, CIPHER_BLOCK_SIZE); - if (CIPHER_BLOCK_SIZE != (read_sz = ASF_READ(fp, (char*)tmp_buf, CIPHER_BLOCK_SIZE))) - { - SMSG(true,"[%s] read cipher size '%d' != '%d'(try)\n",MOD,read_sz,CIPHER_BLOCK_SIZE); - ret = ERR_IMAGE_CIPHER_READ_FAIL; - goto _read_cipher_size_wrong; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(true,"[%s] sec_cipherfmt_decrypted - dump cipher part: 0x%x\n",MOD, read_offset); - sec_cipherfmt_dump_buffer(tmp_buf, CIPHER_BLOCK_SIZE); -#endif - - ret = lib_aes_dec(tmp_buf, CIPHER_BLOCK_SIZE, buf_ptr, CIPHER_BLOCK_SIZE); - if (ret) { - SMSG(true,"[%s] dec cipher block fail\n",MOD); - ret = ERR_IMAGE_CIPHER_DEC_Fail; - goto _decrypt_fail; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(true,"[%s] sec_cipherfmt_decrypted - dump decipher part: 0x%x\n",MOD, read_offset); - sec_cipherfmt_dump_buffer(buf_ptr, CIPHER_BLOCK_SIZE); -#endif - - read_offset += CIPHER_BLOCK_SIZE; - buf_ptr += CIPHER_BLOCK_SIZE; - total_len -= CIPHER_BLOCK_SIZE; - } - - /* read with remain block size */ - if( try_read_len ) - { - memset(tmp_buf, 0x00, CIPHER_BLOCK_SIZE); - if (try_read_len != (read_sz = ASF_READ(fp, (char*)tmp_buf, try_read_len))) - { - SMSG(true,"[%s] read cipher size '%d' != '%d'(remain)\n",MOD,read_sz,try_read_len); - ret = ERR_IMAGE_CIPHER_READ_FAIL; - goto _read_cipher_size_wrong; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(true,"[%s] sec_cipherfmt_decrypted - dump cipher part: 0x%x (try)\n",MOD, read_offset); - sec_cipherfmt_dump_buffer(tmp_buf, try_read_len); -#endif - - ret = lib_aes_dec(tmp_buf, CIPHER_BLOCK_SIZE, tmp_buf2, CIPHER_BLOCK_SIZE); - if (ret) { - SMSG(true,"[%s] dec cipher block fail\n",MOD); - ret = ERR_IMAGE_CIPHER_DEC_Fail; - goto _decrypt_fail; - } - memcpy(buf_ptr, tmp_buf2, try_read_len); - -#if DUMP_MORE_FOR_DEBUG - SMSG(true,"[%s] sec_cipherfmt_decrypted - dump decipher part: 0x%x (try)\n",MOD, read_offset); - sec_cipherfmt_dump_buffer(buf_ptr, try_read_len); -#endif - read_offset += try_read_len; - buf_ptr += try_read_len; - total_len -= try_read_len; - } - } - - /* read final plain text part, cause this part is not encrypted */ - if( total_len > 0 ) - { - if (total_len != (read_sz = ASF_READ(fp, (char*)buf_ptr, total_len))) - { - SMSG(true,"[%s] read tail size '%d' != '%d'\n",MOD,read_sz,total_len); - ret = ERR_IMAGE_CIPHER_READ_FAIL; - goto _read_tail_fail; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(true,"[%s] sec_cipherfmt_decrypted - dump tail part: 0x%x\n",MOD, read_offset); - sec_cipherfmt_dump_buffer(buf_ptr, total_len); -#endif - read_offset += total_len; - buf_ptr += total_len; - total_len -= total_len; - } - - if( total_len != 0 ) - { - SMSG(true,"[%s] image size is not correct\n",MOD); - ret = ERR_IMAGE_CIPHER_WRONG_OPERATION; - goto _image_size_wrong; - } - - *data_offset = CIPHER_IMG_HEADER_SIZE; - SMSG(true,"[%s] image descrypted successful (DS unlock)\n",MOD); - -_image_size_wrong: -_read_tail_fail: -_decrypt_fail: -_read_cipher_size_wrong: -_key_init_fail: -_read_cipher_offset_fail: -_hdr_not_found: -_read_hdr_fail: - - ASF_PUT_DS - - return ret; -} - - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_dev.c b/drivers/misc/mediatek/masp/asf/core/sec_dev.c deleted file mode 100644 index 61fc8eceb..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_dev.c +++ /dev/null @@ -1,968 +0,0 @@ -#include <mach/sec_osal.h> -#include <mach/mt_sec_hal.h> -#include "sec_osal_light.h" -#include "sec_boot_lib.h" -#include "sec_boot.h" -#include "sec_error.h" -#include "sec_log.h" -#include "sec_secroimg.h" - - -#if defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) -#include <linux/types.h> -#include <linux/genhd.h> -#include <linux/proc_fs.h> -#include <linux/seq_file.h> -#include <linux/crc32.h> -#include <asm/uaccess.h> -#include <linux/mmc/sd_misc.h> -#include <mach/partition.h> - -#endif - - -/************************************************************************** - * MACRO - **************************************************************************/ -#define MOD "ASF.DEV" -#if defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) -#define PARTINFO_TITLE "Name" -#define USER_REGION_PATH "/dev/block/mmcblk0" -#define BOOT_REGION0_PATH "/dev/block/mmcblk0boot0" -#define USER_REGION_PART_PATH_PREFIX "/dev/block/platform/mtk-msdc.0/11230000.MSDC0/by-name/" - -#endif - -/************************************************************************** - * GLOBAL VARIABLES - *************************************************************************/ -MtdPart mtd_part_map[MAX_MTD_PARTITIONS]; -uint32 secro_img_off = 0; -uint32 secro_img_mtd_num = 0; - -/************************************************************************** - * LOCAL VARIABLES - *************************************************************************/ -#if !defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) -static bool dump_search_info = FALSE; -#endif -static bool dump_secro_info = FALSE; - -/************************************************************************** - * EXTERNAL VARIABLES - *************************************************************************/ -extern AND_ROMINFO_T rom_info; -extern uchar sha1sum[]; -extern AND_SECROIMG_T secroimg; -extern AND_SECROIMG_V5a_T secroimg_v5; -extern uint32 secro_v3_off; -extern bool bSecroExist; -extern bool bSecroV5Exist; -extern bool bSecroIntergiy; -extern bool bSecroV5Intergiy; -extern uint32 secro_img_off; -extern uint32 secro_img_mtd_num; -extern SECURE_INFO sec_info; - - - -/************************************************************************** - * READ INFO - **************************************************************************/ -int read_info (int part_index, uint32 part_off, uint32 search_region, char* info_name, uint32 info_name_len, uint32 info_sz, char* info_buf) -{ - int ret = ERR_MTD_INFO_NOT_FOUND; - char part_path[100]; - uint32 off = 0; - uchar *buf; - - MtdRCtx *ctx = (MtdRCtx*) osal_kmalloc(sizeof(MtdRCtx)); - - if (ctx == NULL) - { - ret = ERR_ROM_INFO_ALLOCATE_BUF_FAIL; - goto _end; - } - - ctx->buf = osal_kmalloc(search_region); - memset(ctx->buf,0,search_region); - - if (ctx->buf == NULL) - { - ret = ERR_ROM_INFO_ALLOCATE_BUF_FAIL; - goto _end; - } - - - /* ------------------------ */ - /* open file */ - /* ------------------------ */ - /* in order to keep key finding process securely, - open file in kernel module */ -#if defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) - - if ((MAX_MTD_PARTITIONS + 1) == part_index) - { - // if part_index == MAX_MTD_PARTITIONS + 1 means read preloader - mcpy(part_path,BOOT_REGION0_PATH,strlen(BOOT_REGION0_PATH)); - part_path[strlen(BOOT_REGION0_PATH)] = '\0'; - } - else if (part_index < MAX_MTD_PARTITIONS) - { - mcpy(part_path,USER_REGION_PART_PATH_PREFIX,strlen(USER_REGION_PART_PATH_PREFIX)); - mcpy(part_path + strlen(USER_REGION_PART_PATH_PREFIX),mtd_part_map[part_index].name, strlen(mtd_part_map[part_index].name )); - part_path[strlen(USER_REGION_PART_PATH_PREFIX) + strlen(mtd_part_map[part_index].name)] = '\0'; - } - else - { - ret = ERR_INFO_OVER_MAX_PART_COUNT; - goto _end; - } - -#else - if(TRUE == sec_usif_enabled()) - { - sec_usif_part_path(part_index,part_path,sizeof(part_path)); - if(FALSE == dump_search_info) - { - SMSG(TRUE,"[%s] open '%s'\n",MOD,part_path); - dump_search_info = TRUE; - } - } - else - { - sprintf(part_path, "/dev/mtd/mtd%d", part_index); - if(FALSE == dump_search_info) - { - SMSG(TRUE,"[%s] open '%s'\n",MOD,part_path); - dump_search_info = TRUE; - } - } - -#endif - - //SMSG(TRUE,"[%s] open '%s'\n",MOD,part_path); - - ctx->fd = ASF_OPEN(part_path); - - if (ASF_IS_ERR(ctx->fd)) - { - SMSG(true,"[%s] open fail\n",MOD); - ret = ERR_INFO_PART_NOT_FOUND; - goto _open_fail; - } - - /* ------------------------ */ - /* read partition */ - /* ------------------------ */ - /* configure file system type */ - osal_set_kernel_fs(); - - /* adjust read off */ - ASF_SEEK_SET(ctx->fd,part_off); - - /* read partition */ - if(0 >= (ret = ASF_READ(ctx->fd,ctx->buf,search_region))) - { - SMSG(TRUE,"[%s] read fail (%d)\n",MOD,ret); - ret = ERR_ROM_INFO_MTD_READ_FAIL; - goto _end; - } - else - { - - /* ------------------------ */ - /* search info */ - /* ------------------------ */ - for(off = 0; off<(search_region-info_sz); off++) - { - buf = ctx->buf + off; - - if(0 == strncmp(buf,info_name,info_name_len)) - { - osal_mtd_lock(); - - /* ------------------------ */ - /* fill info */ - /* ------------------------ */ - mcpy(info_buf, buf, info_sz); - - /* --------------------------------------------- */ - /* keep secro v3 offset, for v5 search usage. */ - /* --------------------------------------------- */ - - if (info_buf == (char*)&secroimg) - { - secro_v3_off = off; - SMSG(TRUE,"[%s] keep sro v3 off: 0x%x\n",MOD,off); - } - - ret = SEC_OK; - osal_mtd_unlock(); - break; - } - } - } - -_end: - ASF_CLOSE(ctx->fd); - osal_restore_fs(); - -_open_fail : - osal_kfree(ctx->buf); - osal_kfree(ctx); - return ret; -} - -/************************************************************************** - * DUMP PARTITION - **************************************************************************/ -void sec_dev_dump_part(void) -{ - uint32 i = 0; - - for(i = 0; i < MAX_MTD_PARTITIONS; i++) - { -#if defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) - SMSG(TRUE,"[%s] #%2d, part %15s, offset 0x%llx, sz 0x%llx\n",MOD,i, - mtd_part_map[i].name, - mtd_part_map[i].off, - mtd_part_map[i].sz); - -#else - SMSG(TRUE,"[%s] #%2d, part %10s, offset 0x%8x, sz 0x%8x\n",MOD,i, - mtd_part_map[i].name, - mtd_part_map[i].off, - mtd_part_map[i].sz); -#endif - } -} - -/************************************************************************** - * FIND DEVICE PARTITION - **************************************************************************/ -void sec_dev_find_parts(void) -{ - ASF_FILE fd; - const uint32 buf_len = 2048; - char *buf = osal_kmalloc(buf_len); - char *pmtdbufp; - - uint32 mtd_part_cnt = 0; - ssize_t pm_sz; - int cnt; -#if !defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) - uint32 off = 0; - uint32 rn = 0; -#endif - - osal_set_kernel_fs(); - - /* -------------------------- */ - /* open proc device */ - /* -------------------------- */ -#if defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) - - /* -------------------------- */ - /* open proc/partinfo */ - /* -------------------------- */ - SMSG(TRUE,"[%s] open /proc/partinfo\n",MOD); - fd = ASF_OPEN("/proc/partinfo"); - - -#else - - if(TRUE == sec_usif_enabled()) - { - /* -------------------------- */ - /* open proc/dumchar_info */ - /* -------------------------- */ - SMSG(TRUE,"[%s] open /proc/dumchar_info\n",MOD); - fd = ASF_OPEN("/proc/dumchar_info"); - } - else - { - /* -------------------------- */ - /* open proc/mtd */ - /* -------------------------- */ - SMSG(TRUE,"[%s] open /proc/mtd\n",MOD); - fd = ASF_OPEN("/proc/mtd"); - } - -#endif - - - if (ASF_IS_ERR(fd)) - { - SMSG(TRUE,"[%s] open /proc/* failed\n",MOD); - goto _end; - } - - - buf[buf_len - 1] = '\0'; - pm_sz = ASF_READ(fd, buf, buf_len - 1); - pmtdbufp = buf; - - /* -------------------------- */ - /* parsing proc device */ - /* -------------------------- */ - while (pm_sz > 0) - { - -#if defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) - int m_num; - unsigned long long m_sz, m_off; - char m_name[16]; - m_name[0] = '\0'; - m_num = -1; - - m_num ++; - - /* -------------------------- */ - /* parsing proc/parinfo */ - /* -------------------------- */ - cnt = sscanf(pmtdbufp, "%15s %llx %llx",m_name, &m_off, &m_sz); - //SMSG(TRUE,"[%s] find parts %s, off 0x%llx, size 0x%llx\n",MOD,m_name,m_off,m_sz); - - - if (mtd_part_cnt < MAX_MTD_PARTITIONS) - { - if (0 != mcmp(m_name,PARTINFO_TITLE,strlen(PARTINFO_TITLE))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, m_name, strlen(m_name)); - /* fill partition size */ - mtd_part_map[mtd_part_cnt].sz = m_sz; - - /* calculate partition off */ - mtd_part_map[mtd_part_cnt].off = m_off; - /* part count */ - - if(0 == mcmp(m_name,GPT_SECRO,strlen(GPT_SECRO))) - { - secro_img_mtd_num = mtd_part_cnt; - } - - mtd_part_cnt++; - } - } - else - { - SMSG(TRUE,"too many mtd partitions\n"); - } - -#else - int m_num, m_sz, mtd_e_sz; - char m_name[16]; - m_name[0] = '\0'; - m_num = -1; - - m_num ++; - - if(TRUE == sec_usif_enabled()) - { - /* -------------------------- */ - /* parsing proc/dumchar_info */ - /* -------------------------- */ - cnt = sscanf(pmtdbufp, "%15s %x %x %x",m_name, &m_sz, &mtd_e_sz, &rn); - //SMSG(TRUE,"[%s] find parts %s, size 0x%x, cnt 0x%x, rn 0x%x\n",MOD,m_name,m_sz,cnt,rn); - - if ((cnt == 4) && (rn == 2)) - { - - if (mtd_part_cnt < MAX_MTD_PARTITIONS) - { - - /* ===================== */ - /* uboot */ - /* ===================== */ - if(0 == mcmp(m_name,USIF_UBOOT,strlen(USIF_UBOOT))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_UBOOT, strlen(PL_UBOOT)); - } - /* ===================== */ - /* logo */ - /* ===================== */ - else if(0 == mcmp(m_name,USIF_LOGO,strlen(USIF_LOGO))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_LOGO, strlen(PL_LOGO)); - } - /* ===================== */ - /* boot image */ - /* ===================== */ - else if(0 == mcmp(m_name,USIF_BOOTIMG,strlen(USIF_BOOTIMG))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_BOOTIMG, strlen(PL_BOOTIMG)); - } - /* ===================== */ - /* user data */ - /* ===================== */ - else if(0 == mcmp(m_name,USIF_USER,strlen(USIF_USER))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_USER, strlen(PL_USER)); - } - /* ===================== */ - /* android system image */ - /* ===================== */ - else if(0 == mcmp(m_name,USIF_ANDSYSIMG,strlen(USIF_ANDSYSIMG))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_ANDSYSIMG, strlen(PL_ANDSYSIMG)); - } - /* ===================== */ - /* recovery */ - /* ===================== */ - else if(0 == mcmp(m_name,USIF_RECOVERY,strlen(USIF_RECOVERY))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_RECOVERY, strlen(PL_RECOVERY)); - } - /* ===================== */ - /* secroimg */ - /* ===================== */ - else if(0 == mcmp(m_name,USIF_SECRO,strlen(USIF_SECRO))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_SECRO, strlen(PL_SECRO)); - secro_img_mtd_num = mtd_part_cnt; - } - /* ===================== */ - /* other */ - /* ===================== */ - else - { - mcpy(mtd_part_map[mtd_part_cnt].name, m_name, sizeof(m_name)-1); - } - - /* fill partition size */ - mtd_part_map[mtd_part_cnt].sz = m_sz; - - /* calculate partition off */ - mtd_part_map[mtd_part_cnt].off = off; - - /* update off and part count */ - off += m_sz; - mtd_part_cnt++; - } - else - { - SMSG(TRUE,"too many mtd partitions\n"); - } - } - - } - else - { - /* -------------------------- */ - /* parsing proc/mtd */ - /* -------------------------- */ - cnt = sscanf(pmtdbufp, "mtd%d: %x %x %15s",&m_num, &m_sz, &mtd_e_sz, m_name); - - if ((cnt == 4) && (m_name[0] == '"')) - { - char *x = strchr(m_name + 1, '"'); - - if (x) - { - *x = 0; - } - - if (mtd_part_cnt < MAX_MTD_PARTITIONS) - { - /* ===================== */ - /* uboot */ - /* ===================== */ - if(0 == mcmp(m_name+1,MTD_UBOOT,strlen(MTD_UBOOT))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_UBOOT, strlen(PL_UBOOT)); - } - /* ===================== */ - /* logo */ - /* ===================== */ - else if(0 == mcmp(m_name+1,MTD_LOGO,strlen(MTD_LOGO))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_LOGO, strlen(PL_LOGO)); - } - /* ===================== */ - /* boot image */ - /* ===================== */ - else if(0 == mcmp(m_name+1,MTD_BOOTIMG,strlen(MTD_BOOTIMG))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_BOOTIMG, strlen(PL_BOOTIMG)); - } - /* ===================== */ - /* user data */ - /* ===================== */ - else if(0 == mcmp(m_name+1,MTD_USER,strlen(MTD_USER))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_USER, strlen(PL_USER)); - } - /* ===================== */ - /* android system image */ - /* ===================== */ - else if(0 == mcmp(m_name+1,MTD_ANDSYSIMG,strlen(MTD_ANDSYSIMG))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_ANDSYSIMG, strlen(PL_ANDSYSIMG)); - } - /* ===================== */ - /* recovery */ - /* ===================== */ - else if(0 == mcmp(m_name+1,MTD_RECOVERY,strlen(MTD_RECOVERY))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_RECOVERY, strlen(PL_RECOVERY)); - } - /* ===================== */ - /* secroimg */ - /* ===================== */ - else if(0 == mcmp(m_name+1,MTD_SECRO,strlen(MTD_SECRO))) - { - mcpy(mtd_part_map[mtd_part_cnt].name, PL_SECRO, strlen(PL_SECRO)); - secro_img_mtd_num = mtd_part_cnt; - - } - /* ===================== */ - /* other */ - /* ===================== */ - else - { - mcpy(mtd_part_map[mtd_part_cnt].name, m_name+1, sizeof(m_name)-1); - } - - /* fill partition size */ - mtd_part_map[mtd_part_cnt].sz = m_sz; - - /* calculate partition off */ - mtd_part_map[mtd_part_cnt].off = off; - - /* calculate partition erase size */ - mtd_part_map[mtd_part_cnt].e_size = mtd_e_sz; - - /* update off and part count */ - off += m_sz; - mtd_part_cnt++; - } - else - { - SMSG(TRUE,"too many mtd partitions\n"); - } - } - } - -#endif - while (pm_sz > 0 && *pmtdbufp != '\n') - { - pmtdbufp++; - pm_sz--; - } - - if (pm_sz > 0) - { - pmtdbufp++; - pm_sz--; - } - } - - ASF_CLOSE(fd); - - -_end: - - osal_kfree(buf); - osal_restore_fs(); - - /* ------------------------ */ - /* dump partition */ - /* ------------------------ */ - //sec_dev_dump_part(); -} - -/************************************************************************** - * READ ROM INFO - **************************************************************************/ -int sec_dev_read_rom_info(void) -{ - int ret = SEC_OK; - uint32 search_offset = ROM_INFO_SEARCH_START; - uint32 search_len = ROM_INFO_SEARCH_LEN; - -#if !defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) - uint32 mtd_num = MTD_PL_NUM; - uint32 mtd_off = ROM_INFO_SEARCH_START; -#endif - - SMSG(TRUE,"search starts from '0x%x'\n",ROM_INFO_SEARCH_START); - - /* ------------------------ */ - /* check size */ - /* ------------------------ */ - COMPILE_ASSERT(AND_ROM_INFO_SIZE == sizeof(AND_ROMINFO_T)); - - - /* ------------------------ */ - /* read rom info */ - /* ------------------------ */ -#if defined(CONFIG_MTK_GPT_SCHEME_SUPPORT) - - // in GPT case, preloader is not in /proc/partinfo - for(search_offset=ROM_INFO_SEARCH_START; search_offset<(search_len+ROM_INFO_SEARCH_START); search_offset+=ROM_INFO_SEARCH_REGION) - { - - ret = read_info ( (MAX_MTD_PARTITIONS + 1), search_offset, ROM_INFO_SEARCH_REGION, RI_NAME, RI_NAME_LEN, sizeof(AND_ROMINFO_T), (uchar*)&rom_info) ; - - if(SEC_OK == ret) - { - /* ------------------------ */ - /* double check rom info */ - /* ------------------------ */ - if(0 == mcmp(rom_info.m_id,RI_NAME,RI_NAME_LEN)) - { - SMSG(TRUE,"[%s] ROM INFO ver '0x%x', ID '%s', 0x%x, 0x%x\n",MOD,rom_info.m_rom_info_ver,rom_info.m_id, - rom_info.m_SEC_CTRL.m_sec_usb_dl, rom_info.m_SEC_CTRL.m_sec_boot); - goto _end; - } - } - } - -#else - if(FALSE == sec_usif_enabled()) - { - /* Search from Block 1 and len is limited in preloader*/ - mtd_off = mtd_part_map[mtd_num].e_size; - search_len = (mtd_part_map[mtd_num].sz-mtd_part_map[mtd_num].e_size); - } - /* read 1MB data to search rom info */ - for(search_offset=ROM_INFO_SEARCH_START; search_offset<(search_len+ROM_INFO_SEARCH_START); search_offset+=ROM_INFO_SEARCH_REGION) - { - /* search partition */ - if(mtd_off < mtd_part_map[mtd_num].sz) - { - if(FALSE == dump_search_info) - { - SMSG(TRUE,"dev %2d, 0x%08x, 0x%08x\n", mtd_num, mtd_off, search_offset); - } - - ret = read_info ( mtd_num, mtd_off, ROM_INFO_SEARCH_REGION, RI_NAME, RI_NAME_LEN, sizeof(AND_ROMINFO_T), (uchar*)&rom_info) ; - - if(SEC_OK == ret) - { - /* ------------------------ */ - /* double check rom info */ - /* ------------------------ */ - if(0 == mcmp(rom_info.m_id,RI_NAME,RI_NAME_LEN)) - { - SMSG(TRUE,"[%s] ROM INFO ver '0x%x', ID '%s', 0x%x, 0x%x\n",MOD,rom_info.m_rom_info_ver,rom_info.m_id, - rom_info.m_SEC_CTRL.m_sec_usb_dl, rom_info.m_SEC_CTRL.m_sec_boot); - goto _end; - } - } - } - - /* next should move to next partition ? */ - if(search_offset >= mtd_part_map[mtd_num+1].off) - { - mtd_num ++; - mtd_off = 0; - search_offset -= ROM_INFO_SEARCH_REGION; - } - else - { - mtd_off += ROM_INFO_SEARCH_REGION; - } - } - -#endif - - SMSG(TRUE,"[%s] ROM INFO not found\n",MOD); - - ret = ERR_ROM_INFO_MTD_NOT_FOUND; - -_end: - - return ret; -} - -/************************************************************************** - * READ ANDROID ANTI-CLONE REGION - **************************************************************************/ -int sec_dev_read_secroimg(void) -{ - int ret = SEC_OK; - - uint32 search_offset = SECRO_SEARCH_START; - uint32 search_len = SECRO_SEARCH_LEN; - - uint32 mtd_num; - uint32 mtd_off = SECRO_SEARCH_START; - - const uint32 img_len = rom_info.m_sec_ro_length; - const uint32 cipher_len = sizeof(AND_AC_ANDRO_T) + sizeof(AND_AC_MD_T)+ sizeof(AND_AC_MD2_T); - - /* ------------------------ */ - /* check status */ - /* ------------------------ */ - if(0 == secro_img_mtd_num) - { - ret = ERR_SECROIMG_PART_NOT_FOUND; - goto _end; - } - - mtd_num = secro_img_mtd_num; - - /* ------------------------ */ - /* check parameter */ - /* ------------------------ */ - if(0 == img_len) - { - ret = ERR_SECROIMG_INVALID_IMG_LEN; - goto _end; - } - - /* ------------------------------------------------------- */ - /* size should minus padding part, to fit secro v5 design */ - /* ------------------------------------------------------- */ - if(img_len != sizeof(secroimg) - sizeof(AND_SECROIMG_PADDING_T)) - { - ret = ERR_SECROIMG_LEN_INCONSISTENT_WITH_PL; - goto _end; - } - - - #ifdef CONFIG_ARM64 - SMSG(TRUE,"[%s] SECRO v3 image len '0x%lx'\n",MOD, sizeof(secroimg)); - #else - SMSG(TRUE,"[%s] SECRO v3 image len '0x%x'\n",MOD, sizeof(secroimg)); - #endif - - /* ------------------------ */ - /* find ac region */ - /* ------------------------ */ - - /* read 1MB nand flash data to search rom info */ - for(search_offset = SECRO_SEARCH_START; search_offset < (search_len + SECRO_SEARCH_START); search_offset += SECRO_SEARCH_REGION) - { - /* search partition */ - if(mtd_off < mtd_part_map[mtd_num].sz) - { - if(FALSE == dump_secro_info) - { - SMSG(TRUE,"dev %2d, 0x%08x, 0x%08x\n", mtd_num, mtd_off, search_offset); - dump_secro_info = TRUE; - } - - /* ------------------------ */ - /* search secro image */ - /* ------------------------ */ - ret = read_info (mtd_num, mtd_off, SECRO_SEARCH_REGION, ROM_SEC_AC_REGION_ID, ROM_SEC_AC_REGION_ID_LEN, - sizeof(secroimg), (uchar*)&secroimg); - - if(SEC_OK == ret) - { - SMSG(TRUE,"[%s] SECRO v3 img is found (lock)\n",MOD); - - /* ------------------------ */ - /* decrypt secro image */ - /* ------------------------ */ - osal_secro_lock(); - - //dump_buf((uchar*)&secroimg.m_andro,0x4); - if(TRUE == sec_secro_ac()) - { - masp_hal_sp_hacc_dec((uchar*)&secroimg.m_andro, cipher_len, TRUE,HACC_USER1,TRUE); - } - //dump_buf((uchar*)&secroimg.m_andro,0x4); - - /* ------------------------ */ - /* check integrity */ - /* ------------------------ */ - if(SEC_OK != (ret = sec_secro_check())) - { - osal_secro_unlock(); - goto _end; - } - - /* ------------------------ */ - /* encrypt secro image */ - /* ------------------------ */ - if(TRUE == sec_secro_ac()) - { - masp_hal_sp_hacc_enc((uchar*)&secroimg.m_andro, cipher_len, TRUE,FALSE,TRUE); - } - //dump_buf((uchar*)&secroimg.m_andro,0x4); - - /* ------------------------ */ - /* SECROIMG is valid */ - /* ------------------------ */ - bSecroExist = TRUE; - - osal_secro_unlock(); - - goto _end; - - } - - } - - /* next should move to next partition ? */ - if(search_offset >= mtd_part_map[mtd_num+1].off) - { - mtd_num ++; - mtd_off = 0; - search_offset -= SECRO_SEARCH_REGION; - } - else - { - mtd_off += SECRO_SEARCH_REGION; - } - } - - ret = ERR_SECROIMG_MTD_NOT_FOUND; - -_end: - - return ret; -} - - -/************************************************************************** - * READ SECRO V5 format, md_index starting at 0, up to 9. - **************************************************************************/ -int sec_dev_read_secroimg_v5(uint32 md_index) -{ - int ret = SEC_OK; - - //uint32 search_start = SECRO_SEARCH_START; - uint32 search_offset = 0; - //uint32 search_len = SECRO_SEARCH_LEN; - - uint32 mtd_num; - uint32 mtd_off = SECRO_SEARCH_START; - - const uint32 img_len = AND_SECROIMG_V5a_SIZE; - const uint32 cipher_len = sizeof(AND_AC_MD_INFO_V5a_T) + sizeof(AND_AC_MD_V5a_T); - - /* ------------------------ */ - /* check status */ - /* ------------------------ */ - if(0 == secro_img_mtd_num) - { - ret = ERR_SECROIMG_PART_NOT_FOUND; - goto _end; - } - - mtd_num = secro_img_mtd_num; - - /* ------------------------ */ - /* check parameter */ - /* ------------------------ */ - if(0 == img_len) - { - ret = ERR_SECROIMG_INVALID_IMG_LEN; - goto _end; - } - - if(img_len != sizeof(secroimg_v5)) - { - ret = ERR_SECROIMG_LEN_INCONSISTENT_WITH_PL; - goto _end; - } - - #ifdef CONFIG_ARM64 - SMSG(TRUE,"[%s] SECRO v5 image len '0x%lx'\n",MOD, sizeof(secroimg_v5)); - #else - SMSG(TRUE,"[%s] SECRO v5 image len '0x%x'\n",MOD, sizeof(secroimg_v5)); - #endif - SMSG(TRUE,"[%s] md index '0x%x'\n",MOD, md_index); - - /* ------------------------ */ - /* find ac region */ - /* ------------------------ */ - - /* ------------------------------------------------------- */ - /* secro v3 offset should be known during sec_boot_init */ - /* ------------------------------------------------------- */ - mtd_off = secro_v3_off; - - if(FALSE == dump_secro_info) - { - SMSG(TRUE,"dev %2d, 0x%08x, 0x%08x\n", mtd_num, mtd_off, search_offset); - dump_secro_info = TRUE; - } - - - /* ------------------------------------------------------- */ - /* if secro v3 offset is not updated during sec_boot_init */ - /* ------------------------------------------------------- */ - if (MAX_SECRO_V3_OFFSET == mtd_off) - { - ret = ERR_SECROIMG_V3_OFFSET_NOT_INIT; - goto _end; - } - - mtd_off += (md_index + 1)*AND_SECROIMG_V5a_SIZE; - - /* ------------------------ */ - /* search secro image */ - /* ------------------------ */ - ret = read_info (mtd_num, mtd_off, SECRO_SEARCH_REGION, ROM_SEC_AC_REGION_ID, ROM_SEC_AC_REGION_ID_LEN, img_len, (uchar*)&secroimg_v5); - - if(SEC_OK == ret) - { - SMSG(TRUE,"[%s] SECRO v5 img is found (lock)\n",MOD); - - /* ------------------------ */ - /* decrypt secro image */ - /* ------------------------ */ - - osal_secro_v5_lock(); - - - dump_buf((uchar*)&secroimg_v5.m_md_info_v5a,0x4); - if(TRUE == sec_secro_ac()) - { - masp_hal_sp_hacc_dec((uchar*)&secroimg_v5.m_md_info_v5a, cipher_len, TRUE,HACC_USER1,TRUE); - } - dump_buf((uchar*)&secroimg_v5.m_md_info_v5a,0x4); - - - /* ------------------------ */ - /* check integrity */ - /* ------------------------ */ - if(SEC_OK != (ret = sec_secro_v5_check())) - { - osal_secro_v5_unlock(); - goto _end; - } - - /* ------------------------ */ - /* encrypt secro image */ - /* ------------------------ */ - if(TRUE == sec_secro_ac()) - { - masp_hal_sp_hacc_enc((uchar*)&secroimg_v5.m_md_info_v5a, cipher_len, TRUE,FALSE,TRUE); - } - dump_buf((uchar*)&secroimg_v5.m_md_info_v5a,0x4); - - /* ------------------------ */ - /* SECROIMG is valid */ - /* ------------------------ */ - bSecroV5Exist = TRUE; - - osal_secro_v5_unlock(); - - goto _end; - - } - - - - ret = ERR_SECROIMG_MTD_NOT_FOUND; - -_end: - - return ret; -} - - -unsigned int sec_dev_read_image(char* part_name, char* buf, u64 off, unsigned int sz, unsigned int image_type) -{ - // not implemented yet. - return SEC_OK; -} - - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_dev_util.c b/drivers/misc/mediatek/masp/asf/core/sec_dev_util.c deleted file mode 100644 index 33adf310f..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_dev_util.c +++ /dev/null @@ -1,60 +0,0 @@ -/************************************************************************** - * INCLUDE LIBRARY - **************************************************************************/ -#include "sec_boot_lib.h" - -/************************************************************************** - * MACRO - *************************************************************************/ -#define MOD "ASF.DEV" - -/************************************************************************** - * EXTERNAL VARIABLES - *************************************************************************/ -extern SECURE_INFO sec_info; - -/************************************************************************** - * PART NAME QUERY (MTD OR USIF) - **************************************************************************/ -char* part2pl (char* part_name) -{ - - if(TRUE == sec_usif_enabled()) - { - return usif2pl(part_name); - } - else - { - return mtd2pl(part_name); - } -} - -char* pl2part (char* part_name) -{ - - if(TRUE == sec_usif_enabled()) - { - return pl2usif(part_name); - } - else - { - return pl2mtd(part_name); - } -} - -/************************************************************************** - * GET ANDROID NAME - **************************************************************************/ -char* get_android_name(void) -{ - return pl2part(mtd2pl(MTD_ANDSYSIMG)); -} - -/************************************************************************** - * GET SECRO NAME - **************************************************************************/ -char* get_secro_name(void) -{ - return pl2part(mtd2pl(MTD_SECRO)); -} - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_fsutil_inter.c b/drivers/misc/mediatek/masp/asf/core/sec_fsutil_inter.c deleted file mode 100644 index d4f57db5b..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_fsutil_inter.c +++ /dev/null @@ -1,92 +0,0 @@ -/****************************************************************************** - * INCLUDE LIBRARY - ******************************************************************************/ -#include "sec_boot_lib.h" - -/************************************************************************** - * MODULE NAME - **************************************************************************/ -#define MOD "ASF.FS" - -/************************************************************************** - * EXTERNAL VARIABLES - **************************************************************************/ -extern bool bSecroExist; -extern bool bSecroIntergiy; - -/************************************************************************** - * READ SECRO - **************************************************************************/ -uint32 sec_fs_read_secroimg (char* path, char* buf) -{ - uint32 ret = SEC_OK; - const uint32 size = sizeof(AND_SECROIMG_T); - uint32 temp = 0; - ASF_FILE fd; - - /* ------------------------ */ - /* check parameter */ - /* ------------------------ */ - SMSG(TRUE,"[%s] open '%s'\n",MOD,path); - if(0 == size) - { - ret = ERR_FS_SECRO_READ_SIZE_CANNOT_BE_ZERO; - goto _end; - } - - /* ------------------------ */ - /* open secro */ - /* ------------------------ */ - fd = ASF_OPEN(path); - - if (ASF_IS_ERR(fd)) - { - ret = ERR_FS_SECRO_OPEN_FAIL; - goto _open_fail; - } - - /* ------------------------ */ - /* read secro */ - /* ------------------------ */ - /* configure file system type */ - osal_set_kernel_fs(); - - /* adjust read off */ - ASF_SEEK_SET(fd,0); - - /* read secro content */ - if(0 >= (temp = ASF_READ(fd,buf,size))) - { - ret = ERR_FS_SECRO_READ_FAIL; - goto _end; - } - - if(size != temp) - { - SMSG(TRUE,"[%s] size '0x%x', read '0x%x'\n",MOD,size,temp); - ret = ERR_FS_SECRO_READ_WRONG_SIZE; - goto _end; - } - - /* ------------------------ */ - /* check integrity */ - /* ------------------------ */ - if(SEC_OK != (ret = sec_secro_check())) - { - goto _end; - } - - /* ------------------------ */ - /* SECROIMG is valid */ - /* ------------------------ */ - bSecroExist = TRUE; - -_end: - ASF_CLOSE(fd); - osal_restore_fs(); - -_open_fail: - return ret; -} - - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_hdr.c b/drivers/misc/mediatek/masp/asf/core/sec_hdr.c deleted file mode 100644 index 0e498a7b8..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_hdr.c +++ /dev/null @@ -1,295 +0,0 @@ -#include "sec_hdr.h" - -/************************************************************************** - * INTERNAL VARIABLES - **************************************************************************/ -static SEC_IMG_HEADER_VER sec_ver = UNSET; - -/************************************************************************** - * GET VALUE - **************************************************************************/ -uint32 shdr_magic (SEC_IMG_HEADER_U* sec_hdr) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - return sec_hdr->v1.magic_number; - case SEC_HDR_V2: - return sec_hdr->v2.magic_number; - case SEC_HDR_V3: - return sec_hdr->v3.magic_number; - default: - SEC_ASSERT(0); - return 0; - } -} - -uchar* shdr_cust_name (SEC_IMG_HEADER_U* sec_hdr) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - return sec_hdr->v1.cust_name; - case SEC_HDR_V2: - return sec_hdr->v2.cust_name; - case SEC_HDR_V3: - return sec_hdr->v3.cust_name; - default: - SEC_ASSERT(0); - return 0; - } -} - -uint32 shdr_cust_name_len (SEC_IMG_HEADER_U* sec_hdr) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - return sizeof(sec_hdr->v1.cust_name); - case SEC_HDR_V2: - return sizeof(sec_hdr->v2.cust_name); - case SEC_HDR_V3: - return sizeof(sec_hdr->v3.cust_name); - default: - SEC_ASSERT(0); - return 0; - } -} - -uint32 shdr_img_ver (SEC_IMG_HEADER_U* sec_hdr) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - return sec_hdr->v1.image_version; - case SEC_HDR_V2: - return sec_hdr->v2.image_version; - case SEC_HDR_V3: - return sec_hdr->v3.image_version; - default: - SEC_ASSERT(0); - return 0; - } -} - -uint32 shdr_img_len (SEC_IMG_HEADER_U* sec_hdr) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - return sec_hdr->v1.image_length; - case SEC_HDR_V2: - return sec_hdr->v2.image_length; - case SEC_HDR_V3: - return sec_hdr->v3.image_length; - default: - SEC_ASSERT(0); - return 0; - } -} - -uint32 shdr_img_offset (SEC_IMG_HEADER_U* sec_hdr) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - return sec_hdr->v1.image_offset; - case SEC_HDR_V2: - return sec_hdr->v2.image_offset; - case SEC_HDR_V3: - return sec_hdr->v3.image_offset; - default: - SEC_ASSERT(0); - return 0; - } -} - -uint32 shdr_sign_len (SEC_IMG_HEADER_U* sec_hdr) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - return sec_hdr->v1.sign_length; - case SEC_HDR_V2: - return sec_hdr->v2.sign_length; - case SEC_HDR_V3: - return sec_hdr->v3.sign_length; - default: - SEC_ASSERT(0); - return 0; - } -} - -uint32 shdr_sign_offset (SEC_IMG_HEADER_U* sec_hdr) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - return sec_hdr->v1.sign_offset; - case SEC_HDR_V2: - return sec_hdr->v2.sign_offset; - case SEC_HDR_V3: - return sec_hdr->v3.sign_offset; - default: - SEC_ASSERT(0); - return 0; - } -} - -uint32 shdr_sig_len (SEC_IMG_HEADER_U* sec_hdr) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - return sec_hdr->v1.signature_length; - case SEC_HDR_V2: - return sec_hdr->v2.signature_length; - case SEC_HDR_V3: - return sec_hdr->v3.signature_length; - default: - SEC_ASSERT(0); - return 0; - } -} - -uint32 shdr_sig_offset (SEC_IMG_HEADER_U* sec_hdr) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - return sec_hdr->v1.signature_offset; - case SEC_HDR_V2: - return sec_hdr->v2.signature_offset; - case SEC_HDR_V3: - return sec_hdr->v3.signature_offset; - default: - SEC_ASSERT(0); - return 0; - } -} - -/************************************************************************** - * SET VALUE - **************************************************************************/ -void set_shdr_magic (SEC_IMG_HEADER_U* sec_hdr, uint32 val) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - sec_hdr->v1.magic_number= val; - break; - case SEC_HDR_V2: - sec_hdr->v2.magic_number = val; - break; - case SEC_HDR_V3: - sec_hdr->v3.magic_number = val; - default: - SEC_ASSERT(0); - } -} - -void set_shdr_img_ver (SEC_IMG_HEADER_U* sec_hdr, uint32 ver) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - sec_hdr->v1.image_version = ver; - break; - case SEC_HDR_V2: - sec_hdr->v2.image_version = ver; - break; - case SEC_HDR_V3: - sec_hdr->v3.image_version = ver; - default: - SEC_ASSERT(0); - } -} - -void set_shdr_cust_name (SEC_IMG_HEADER_U* sec_hdr, uchar* name, uint32 len) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - memset(sec_hdr->v1.cust_name,0,sizeof(sec_hdr->v1.cust_name)); - mcpy(sec_hdr->v1.cust_name,name,len); - break; - case SEC_HDR_V2: - memset(sec_hdr->v2.cust_name,0,sizeof(sec_hdr->v2.cust_name)); - mcpy(sec_hdr->v2.cust_name,name,len); - break; - case SEC_HDR_V3: - memset(sec_hdr->v3.cust_name,0,sizeof(sec_hdr->v3.cust_name)); - mcpy(sec_hdr->v3.cust_name,name,len); - break; - default: - SEC_ASSERT(0); - } -} - -void set_shdr_sign_len (SEC_IMG_HEADER_U* sec_hdr, uint32 val) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - sec_hdr->v1.sign_length = val; - break; - case SEC_HDR_V2: - sec_hdr->v2.sign_length = val; - break; - case SEC_HDR_V3: - sec_hdr->v3.sign_length = val; - break; - default: - SEC_ASSERT(0); - } -} - -void set_shdr_sign_offset (SEC_IMG_HEADER_U* sec_hdr, uint32 val) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - sec_hdr->v1.sign_offset = val; - break; - case SEC_HDR_V2: - sec_hdr->v2.sign_offset = val; - break; - case SEC_HDR_V3: - sec_hdr->v3.sign_offset = val; - break; - default: - SEC_ASSERT(0); - } -} - -/************************************************************************** - * VERSION - **************************************************************************/ - -SEC_IMG_HEADER_VER get_shdr_ver (void) -{ - switch(sec_ver) - { - case SEC_HDR_V1: - case SEC_HDR_V2: - case SEC_HDR_V3: - return sec_ver; - default: - SEC_ASSERT(0); - return 0; - } -} - -void set_shdr_ver (SEC_IMG_HEADER_VER ver) -{ - switch(ver) - { - case SEC_HDR_V1: - case SEC_HDR_V2: - case SEC_HDR_V3: - sec_ver = ver; - break; - default: - SEC_ASSERT(0); - } -} diff --git a/drivers/misc/mediatek/masp/asf/core/sec_key_util.c b/drivers/misc/mediatek/masp/asf/core/sec_key_util.c deleted file mode 100644 index bc4baf736..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_key_util.c +++ /dev/null @@ -1,23 +0,0 @@ -#include "sec_typedef.h" -#include "sec_boot.h" - -/************************************************************************** - * DEFINITIONS - **************************************************************************/ -#define MOD "SEC_KEY_UTIL" - -/************************************************************************** - * KEY SECRET - **************************************************************************/ -#define ENCODE_MAGIC (0x1) - -void sec_decode_key(uchar* key, uint32 key_len, uchar* seed, uint32 seed_len) -{ - uint32 i = 0; - - for(i=0; i<key_len; i++) - { - key[i] -= seed[i%seed_len]; - key[i] -= ENCODE_MAGIC; - } -} diff --git a/drivers/misc/mediatek/masp/asf/core/sec_mod_core.c b/drivers/misc/mediatek/masp/asf/core/sec_mod_core.c deleted file mode 100644 index 922be8189..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_mod_core.c +++ /dev/null @@ -1,469 +0,0 @@ -/****************************************************************************** - * INCLUDE LIBRARY - ******************************************************************************/ - -/****************************************************************************** - * INCLUDE LINUX HEADER - ******************************************************************************/ -#include <linux/module.h> -#include <asm/uaccess.h> -#include <linux/ioctl.h> - -/****************************************************************************** - * INCLUDE LIBRARY - ******************************************************************************/ -#include <mach/mt_sec_hal.h> -#include "sec_boot_lib.h" -#include "masp_version.h" -#include "sec_ioctl.h" -#include "sec_osal_light.h" -#include "sec_nvram.h" - -#define MOD "ASF" -#define HEVC_BLK_LEN 20480 - -#define CI_BLK_SIZE 16 -#define CI_BLK_ALIGN(len) ( ((len)+CI_BLK_SIZE-1) & ~(CI_BLK_SIZE-1) ) - -/************************************************************************** - * GLOBAL VARIABLES - **************************************************************************/ -typedef struct -{ - unsigned char buf[HEVC_BLK_LEN]; - unsigned int len; -} HEVC_BLK; -HEVC_BLK hevc_blk; - - -/************************************************************************** - * EXTERNAL VARIABLE - **************************************************************************/ -extern MtdPart mtd_part_map[]; -extern bool bMsg; -extern struct semaphore hacc_sem; - -/************************************************************************** - * EXTERNAL FUNCTION - **************************************************************************/ -extern int sec_get_random_id(unsigned int *rid); -extern void sec_update_lks(unsigned char tr, unsigned char dn, unsigned char fb_ulk); -extern void sec_core_init (void); - -static uint lks = 2;//if sec is not enabled, this param will not be updated -module_param(lks, uint, S_IRUSR/*|S_IWUSR|S_IWGRP*/|S_IRGRP|S_IROTH); /* r--r--r-- */ -MODULE_PARM_DESC(lks, "A device lks parameter under sysfs (0=NL, 1=L, 2=NA)"); - -void sec_update_lks(unsigned char tr, unsigned char dn, unsigned char fb_ulk) -{ - if(fb_ulk)//FB - { - lks = 0; - } - else if(sec_schip_enabled())//SC - { - lks = 1; - } - else if(!sec_boot_enabled())//NSC - { - lks = 0; - } - else if(0 == tr && 2 == dn)//SWSEC - { - lks = 0; - } - else//SWSEC - { - lks = 1; - } -} - -//extern void osal_msleep(unsigned int msec); - -/************************************************************************** - * SEC DRIVER IOCTL - **************************************************************************/ -long sec_core_ioctl(struct file *file, unsigned int cmd, unsigned long arg) -{ - int err = 0; - int ret = 0; - unsigned int cipher_len = 0; - unsigned int rid[4]; - unsigned char part_name[16]; - META_CONTEXT meta_ctx; - int status = 0; - - /* ---------------------------------- */ - /* IOCTL */ - /* ---------------------------------- */ - - if (_IOC_TYPE(cmd) != SEC_IOC_MAGIC) - return -ENOTTY; - if (_IOC_NR(cmd) > SEC_IOC_MAXNR) - return -ENOTTY; - if (_IOC_DIR(cmd) & _IOC_READ) - err = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd)); - if (_IOC_DIR(cmd) & _IOC_WRITE) - err = !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd)); - if (err) return -EFAULT; - - switch (cmd) { - - /* ---------------------------------- */ - /* get random id */ - /* ---------------------------------- */ - case SEC_GET_RANDOM_ID: - SMSG(bMsg,"[%s] CMD - SEC_GET_RANDOM_ID\n",MOD); - sec_get_random_id(&rid[0]); - ret = osal_copy_to_user((void __user *)arg, (void *)&rid[0], sizeof(unsigned int) * 4); - break; - - /* ---------------------------------- */ - /* init boot info */ - /* ---------------------------------- */ - case SEC_BOOT_INIT: - SMSG(bMsg,"[%s] CMD - SEC_BOOT_INIT\n",MOD); - ret = masp_boot_init(); - sec_core_init(); - ret = osal_copy_to_user((void __user *)arg, (void *)&ret, sizeof(int)); - break; - - - /* ---------------------------------- */ - /* check if secure boot is enbaled */ - /* ---------------------------------- */ - case SEC_BOOT_IS_ENABLED: - SMSG(bMsg,"[%s] CMD - SEC_BOOT_IS_ENABLED\n",MOD); - ret = sec_boot_enabled(); - ret = osal_copy_to_user((void __user *)arg, (void *)&ret, sizeof(int)); - break; - - /* ---------------------------------- */ - /* encrypt sec cfg */ - /* ---------------------------------- */ - case SEC_SECCFG_ENCRYPT: - SMSG(bMsg,"[%s] CMD - SEC_SECCFG_ENCRYPT\n",MOD); - if(copy_from_user((void *)&seccfg, (void __user *)arg, sizeof(SECCFG_U))) - { - return -EFAULT; - } - - /* specify encrpytion length */ - SMSG(true,"[%s] SECCFG v%d\n",MOD,get_seccfg_ver()); - if (SEC_CFG_END_PATTERN == seccfg.v1.end_pattern) - { - if((SECCFG_V1 != get_seccfg_ver()) && (SECCFG_V1_2 != get_seccfg_ver())) - { - SMSG(true,"[%s] mismatch seccfg version v%d\n",MOD,get_seccfg_ver()); - SEC_ASSERT(0); - } - - cipher_len = get_seccfg_cipher_len(); - sec_update_lks(seccfg.v1.sw_sec_lock_try, seccfg.v1.sw_sec_lock_done, seccfg.v1.attr == ATTR_DISABLE_IMG_CHECK); - masp_hal_sp_hacc_enc((unsigned char*)&seccfg.v1.image_info,cipher_len,rom_info.m_SEC_CTRL.m_seccfg_ac_en,HACC_USER1,FALSE); - } - else if (SEC_CFG_END_PATTERN == seccfg.v3.end_pattern) - { - if(SECCFG_V3 != get_seccfg_ver()) - { - SMSG(true,"[%s] mismatch seccfg version v%d\n",MOD,get_seccfg_ver()); - SEC_ASSERT(0); - } - - cipher_len = get_seccfg_cipher_len(); - sec_update_lks(seccfg.v3.sw_sec_lock_try, seccfg.v3.sw_sec_lock_done, seccfg.v3.seccfg_attr == ATTR_DISABLE_IMG_CHECK); - masp_hal_sp_hacc_enc((unsigned char*)&seccfg.v3.image_info,cipher_len,rom_info.m_SEC_CTRL.m_seccfg_ac_en,HACC_USER1,FALSE); - } - else - { - SMSG(true,"[%s] wrong seccfg version v%d\n",MOD,seccfg.v3.seccfg_ver) - SEC_ASSERT(0); - } - - ret = osal_copy_to_user((void __user *)arg, (void *)&seccfg, sizeof(SECCFG_U)); - break; - - /* ---------------------------------- */ - /* decrypt sec cfg */ - /* ---------------------------------- */ - case SEC_SECCFG_DECRYPT: - SMSG(bMsg,"[%s] CMD - SEC_SECCFG_DECRYPT\n",MOD); - if(copy_from_user((void *)&seccfg, (void __user *)arg, sizeof(SECCFG_U))) - { - return -EFAULT; - } - - /* specify decrpytion length */ - if (SEC_CFG_END_PATTERN == seccfg.v1.end_pattern) - { - /* seccfg version should be corrected by caller */ - set_seccfg_ver(SECCFG_V1); - cipher_len = get_seccfg_cipher_len(); - masp_hal_sp_hacc_dec((unsigned char*)&seccfg.v1.image_info,cipher_len,rom_info.m_SEC_CTRL.m_seccfg_ac_en,HACC_USER1,FALSE); - sec_update_lks(seccfg.v1.sw_sec_lock_try, seccfg.v1.sw_sec_lock_done, seccfg.v1.attr == ATTR_DISABLE_IMG_CHECK); - } - else if (SEC_CFG_END_PATTERN == seccfg.v3.end_pattern) - { - /* seccfg version should be corrected by caller */ - set_seccfg_ver(SECCFG_V3); - cipher_len = get_seccfg_cipher_len(); - masp_hal_sp_hacc_dec((unsigned char*)&seccfg.v3.image_info,cipher_len,rom_info.m_SEC_CTRL.m_seccfg_ac_en,HACC_USER1,FALSE); - sec_update_lks(seccfg.v3.sw_sec_lock_try, seccfg.v3.sw_sec_lock_done, seccfg.v3.seccfg_attr == ATTR_DISABLE_IMG_CHECK); - } - else - { - SMSG(true,"[%s] wrong seccfg version v%d\n",MOD,seccfg.v3.seccfg_ver) - SEC_ASSERT(0); - } - - SMSG(bMsg,"[%s] SECCFG v%d\n",MOD,get_seccfg_ver()); - - ret = osal_copy_to_user((void __user *)arg, (void *)&seccfg, sizeof(SECCFG_U)); - break; - - /* ---------------------------------- */ - /* NVRAM HW encryption */ - /* ---------------------------------- */ - case SEC_NVRAM_HW_ENCRYPT: - SMSG(bMsg,"[%s] CMD - SEC_NVRAM_HW_ENCRYPT\n",MOD); - if(osal_copy_from_user((void *)&meta_ctx, (void __user *)arg, sizeof(meta_ctx))) - { - return -EFAULT; - } - - /* TODO : double check if META register is correct ? */ - masp_hal_sp_hacc_enc((unsigned char*)&(meta_ctx.data),NVRAM_CIPHER_LEN,TRUE,HACC_USER2,FALSE); - meta_ctx.ret = SEC_OK; - - ret = osal_copy_to_user((void __user *)arg, (void *)&meta_ctx, sizeof(meta_ctx)); - break; - - /* ---------------------------------- */ - /* NVRAM HW decryption */ - /* ---------------------------------- */ - case SEC_NVRAM_HW_DECRYPT: - SMSG(bMsg,"[%s] CMD - SEC_NVRAM_HW_DECRYPT\n",MOD); - if(osal_copy_from_user((void *)&meta_ctx, (void __user *)arg, sizeof(meta_ctx))) - { - return -EFAULT; - } - - masp_hal_sp_hacc_dec((unsigned char*)&(meta_ctx.data),NVRAM_CIPHER_LEN,TRUE,HACC_USER2,FALSE); - meta_ctx.ret = SEC_OK; - ret = osal_copy_to_user((void __user *)arg, (void *)&meta_ctx, sizeof(meta_ctx)); - break; - - /* ---------------------------------- */ - /* HEVC EOP */ - /* ---------------------------------- */ - case SEC_HEVC_EOP: - SMSG(TRUE,"[%s] CMD - SEC_HEVC_EOP\n",MOD); - if(osal_copy_from_user((void *)(&hevc_blk), (void __user *)arg, sizeof(HEVC_BLK))) - { - return -EFAULT; - } - - if ((hevc_blk.len % CI_BLK_SIZE) == 0) - { - cipher_len = hevc_blk.len; - } - else if ((hevc_blk.len % CI_BLK_SIZE) > 0) - { - cipher_len = CI_BLK_ALIGN(hevc_blk.len)-CI_BLK_SIZE; - if (cipher_len == 0 ){ - SMSG(TRUE,"[%s] less than one ci_blk, no need to do eop",MOD); - break; - } - } - masp_hal_sp_hacc_enc((unsigned char*)(&hevc_blk.buf),cipher_len,TRUE,HACC_USER4,FALSE); - - ret = osal_copy_to_user((void __user *)arg, (void *)(&hevc_blk), sizeof(HEVC_BLK)); - break; - - /* ---------------------------------- */ - /* HEVC DOP */ - /* ---------------------------------- */ - case SEC_HEVC_DOP: - SMSG(TRUE,"[%s] CMD - SEC_HEVC_DOP\n",MOD); - if(osal_copy_from_user((void *)(&hevc_blk), (void __user *)arg, sizeof(HEVC_BLK))) - { - return -EFAULT; - } - - if ((hevc_blk.len % CI_BLK_SIZE) == 0) - { - cipher_len = hevc_blk.len; - } - else if ((hevc_blk.len % CI_BLK_SIZE) > 0) - { - cipher_len = CI_BLK_ALIGN(hevc_blk.len)-CI_BLK_SIZE; - if (cipher_len == 0 ){ - SMSG(TRUE,"[%s] less than one ci_blk, no need to do dop",MOD); - break; - } - } - - masp_hal_sp_hacc_dec((unsigned char*)(&hevc_blk.buf),cipher_len,TRUE,HACC_USER4,FALSE); - - ret = osal_copy_to_user((void __user *)arg, (void *)(&hevc_blk), sizeof(HEVC_BLK)); - break; - - /* ---------------------------------- */ - /* check if secure usbdl is enbaled */ - /* ---------------------------------- */ - case SEC_USBDL_IS_ENABLED: - SMSG(bMsg,"[%s] CMD - SEC_USBDL_IS_ENABLED\n",MOD); - ret = sec_usbdl_enabled(); - ret = osal_copy_to_user((void __user *)arg, (void *)&ret, sizeof(int)); - break; - - /* ---------------------------------- */ - /* configure HACC HW (include SW KEY) */ - /* ---------------------------------- */ - case SEC_HACC_CONFIG: - SMSG(bMsg,"[%s] CMD - SEC_HACC_CONFIG\n",MOD); - ret = sec_boot_hacc_init(); - ret = osal_copy_to_user((void __user *)arg, (void *)&ret, sizeof(int)); - break; - - /* ---------------------------------- */ - /* enable HACC HW clock */ - /* ---------------------------------- */ - case SEC_HACC_ENABLE_CLK: - SMSG(bMsg,"[%s] CMD - SEC_HACC_ENABLE_CLK\n",MOD); - ret = osal_copy_to_user((void __user *)arg, (void *)&ret, sizeof(int)); - break; - - /* ---------------------------------- */ - /* lock hacc function */ - /* ---------------------------------- */ - case SEC_HACC_LOCK: - - SMSG(bMsg,"[%s] CMD - SEC_HACC_LOCK\n",MOD); - SMSG(bMsg,"[%s] lock\n",MOD); - - /* If the semaphore is successfully acquired, this function returns 0.*/ - ret = osal_hacc_lock(); - - if(ret) - { - SMSG(true,"[%s] ERESTARTSYS\n",MOD); - return -ERESTARTSYS; - } - - return ret; - - /* ---------------------------------- */ - /* unlock hacc function */ - /* ---------------------------------- */ - case SEC_HACC_UNLOCK: - - SMSG(bMsg,"[%s] CMD - SEC_HACC_UNLOCK\n",MOD); - SMSG(bMsg,"[%s] unlock\n",MOD); - - osal_hacc_unlock(); - - break; - - /* ---------------------------------- */ - /* check if secure boot check enabled */ - /* ---------------------------------- */ - case SEC_BOOT_PART_CHECK_ENABLE: - SMSG(bMsg,"[%s] CMD -SEC_BOOT_PART_CHECK_ENABLE\n",MOD); - if(copy_from_user((void *)part_name, (void __user *)arg, sizeof(part_name))) - { - return -EFAULT; - } - ret = sec_boot_check_part_enabled (part_name); - SMSG(bMsg,"[%s] result '0x%x'\n",MOD,ret); - return ret; - - /* ---------------------------------- */ - /* notify mark incomplete */ - /* ---------------------------------- */ - case SEC_BOOT_NOTIFY_MARK_STATUS: - SMSG(true,"[%s] mark status\n",MOD); - /* may do some post process here ... */ - break; - - /* ---------------------------------- */ - /* notify check pass */ - /* ---------------------------------- */ - case SEC_BOOT_NOTIFY_PASS: - SMSG(true,"[%s] sbchk pass\n",MOD); - SMSG(true,"[%s] sbchk pass\n",MOD); - SMSG(true,"[%s] sbchk pass\n",MOD); - SMSG(true,"[%s] sbchk pass\n",MOD); - SMSG(true,"[%s] sbchk pass\n",MOD); - /* may do some post process here ... */ - break; - - /* ---------------------------------- */ - /* notify check fail */ - /* ---------------------------------- */ - case SEC_BOOT_NOTIFY_FAIL: - if(osal_copy_from_user((void *)part_name, (void __user *)arg, sizeof(part_name))) - { - return -EFAULT; - } - - SMSG(true,"[%s] sbchk fail '%s'\n",MOD,part_name); - SMSG(true,"[%s] sbchk fail '%s'\n",MOD,part_name); - SMSG(true,"[%s] sbchk fail '%s'\n",MOD,part_name); - SMSG(true,"[%s] sbchk fail '%s'\n",MOD,part_name); - SMSG(true,"[%s] sbchk fail '%s'\n",MOD,part_name); - osal_msleep(3000); - /* punishment ... */ - SEC_ASSERT(0); - break; - - /* ---------------------------------- */ - /* notify recovery mode done */ - /* ---------------------------------- */ - case SEC_BOOT_NOTIFY_RMSDUP_DONE: - SMSG(true,"[%s] recovery mode done\n",MOD); - /* may do some post process here ... */ - break; - - /* ---------------------------------- */ - /* read rom info */ - /* ---------------------------------- */ - case SEC_READ_ROM_INFO: - SMSG(bMsg,"[%s] read rom info\n",MOD); - ret = osal_copy_to_user((void __user *)arg, (void *)&rom_info, sizeof(AND_ROMINFO_T)); - break; - - - /* ---------------------------------- */ - /* notify check status */ - /* ---------------------------------- */ - case SEC_BOOT_NOTIFY_STATUS: - ret = osal_copy_from_user((void *)&status, (void __user *)arg, sizeof(int)); - SMSG(true,"[%s] sbchk status : '0x%x' \n",MOD,status); - break; - } - - return 0; -} - -/************************************************************************** - * SEC DRIVER INIT - **************************************************************************/ -void sec_core_init (void) -{ - SMSG(true,"[%s] version '%s%s', enter.\n",MOD,BUILD_TIME,BUILD_BRANCH); - - /* ---------------------------------- */ - /* disable key init in kerne module */ - /* ---------------------------------- */ - sec_info.bKeyInitDis = TRUE; -} - -/************************************************************************** - * SEC DRIVER EXIT - **************************************************************************/ -void sec_core_exit (void) -{ - SMSG(true,"[%s] version '%s%s', exit.\n",MOD,BUILD_TIME,BUILD_BRANCH); -} - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_mtd.c b/drivers/misc/mediatek/masp/asf/core/sec_mtd.c deleted file mode 100644 index a96c37f4e..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_mtd.c +++ /dev/null @@ -1,106 +0,0 @@ -#include <mach/sec_osal.h> -#include "sec_osal_light.h" -#include "sec_boot_lib.h" -#include "sec_rom_info.h" -#include "sec_secroimg.h" -#include "sec_boot.h" -#include "sec_error.h" -#include "alg_sha1.h" -#include "sec_mtd.h" -#include "sec_typedef.h" -#include "sec_log.h" - -/************************************************************************** - * MACRO - **************************************************************************/ -#define MOD "ASF" - -/************************************************************************** - * EXTERNAL VARIABLES - *************************************************************************/ -extern AND_ROMINFO_T rom_info; -extern uchar sha1sum[]; -extern AND_SECROIMG_T secroimg; -extern bool bSecroExist; -extern bool bSecroIntergiy; -extern uint32 secro_img_off; -extern uint32 secro_img_mtd_num; - -/************************************************************************** - * GET MTD PARTITION OFFSET - **************************************************************************/ -uint32 sec_mtd_get_off(char* part_name) -{ - uint32 i = 0; - - for(i = 0; i < MAX_MTD_PARTITIONS; i++) - { - if(0 == mcmp(mtd_part_map[i].name,part_name,strlen(mtd_part_map[i].name))) - { - return mtd_part_map[i].off; - } - } - - SEC_ASSERT(0); - return 0; -} - -/************************************************************************** - * READ IMAGE - **************************************************************************/ -uint32 sec_mtd_read_image(char* part_name, char* buf, uint32 off, uint32 size) -{ - ASF_FILE fp; - uint32 ret = SEC_OK; - uint32 i = 0; - char mtd_name[32]; - uint32 part_index = 0; - - /* find which partition should be updated in mtd */ - for(i=0; i<MAX_MTD_PARTITIONS; i++) - { - if(0 == mcmp(mtd_part_map[i].name,part_name,strlen(part_name))) - { - part_index = i; - break; - } - } - - if(MAX_MTD_PARTITIONS == i) - { - ret = ERR_SBOOT_UPDATE_IMG_NOT_FOUND_IN_MTD; - goto _end; - } - - - /* indicate which partition */ - sprintf(mtd_name, "/dev/mtd/mtd%d", part_index); - - fp = ASF_OPEN(mtd_name); - if (ASF_IS_ERR(fp)) - { - SMSG(true,"[%s] open fail\n",MOD); - ret = ERR_SBOOT_UPDATE_IMG_OPEN_FAIL; - goto _open_fail; - } - - /* configure file system type */ - osal_set_kernel_fs(); - - /* adjust read off */ - ASF_SEEK_SET(fp,off); - - /* read image to input buf */ - if(0 >= ASF_READ(fp,buf,size)) - { - ret = ERR_SBOOT_UPDATE_IMG_READ_FAIL; - goto _read_fail; - } - -_read_fail: - ASF_CLOSE(fp); - osal_restore_fs(); -_open_fail: -_end: - return ret; -} diff --git a/drivers/misc/mediatek/masp/asf/core/sec_mtd_util.c b/drivers/misc/mediatek/masp/asf/core/sec_mtd_util.c deleted file mode 100644 index 76e55a806..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_mtd_util.c +++ /dev/null @@ -1,151 +0,0 @@ -#include "sec_error.h" -#include "sec_boot.h" -#include "sec_mtd.h" -#include "sec_typedef.h" -#include "sec_osal_light.h" - -/************************************************************************** - * MODULE NAME - **************************************************************************/ -#define MOD "MTD_UTIL" - -/************************************************************************** - * PART NAME QUERY - **************************************************************************/ -char* mtd2pl (char* part_name) -{ - /* sync mtd partition name with PL's and DA's */ - /* ----------------- */ - /* seccfg */ - /* ----------------- */ - if(0 == mcmp(part_name,MTD_SECCFG,strlen(MTD_SECCFG))) - { - return (char*) PL_SECCFG; - } - /* ----------------- */ - /* uboot */ - /* ----------------- */ - else if(0 == mcmp(part_name,MTD_UBOOT,strlen(MTD_UBOOT))) - { - return (char*) PL_UBOOT; - } - /* ----------------- */ - /* logo */ - /* ----------------- */ - else if(0 == mcmp(part_name,MTD_LOGO,strlen(MTD_LOGO))) - { - return (char*) PL_LOGO; - } - /* ----------------- */ - /* boot image */ - /* ----------------- */ - else if(0 == mcmp(part_name,MTD_BOOTIMG,strlen(MTD_BOOTIMG))) - { - return (char*) PL_BOOTIMG; - } - /* ----------------- */ - /* user data */ - /* ----------------- */ - else if(0 == mcmp(part_name,MTD_USER,strlen(MTD_USER))) - { - return (char*) PL_USER; - } - /* ----------------- */ - /* system image */ - /* ----------------- */ - else if(0 == mcmp(part_name,MTD_ANDSYSIMG,strlen(MTD_ANDSYSIMG))) - { - return (char*) PL_ANDSYSIMG; - } - /* ----------------- */ - /* recovery */ - /* ----------------- */ - else if(0 == mcmp(part_name,MTD_RECOVERY,strlen(MTD_RECOVERY))) - { - return (char*) PL_RECOVERY; - } - /* ----------------- */ - /* sec ro */ - /* ----------------- */ - else if(0 == mcmp(part_name,MTD_SECRO,strlen(MTD_SECRO))) - { - return (char*) PL_SECRO; - } - /* ----------------- */ - /* not found */ - /* ----------------- */ - else - { - return part_name; - } -} - -char* pl2mtd (char* part_name) -{ - /* sync mtd partition name with PL's and DA's */ - /* ----------------- */ - /* seccfg */ - /* ----------------- */ - if(0 == mcmp(part_name,PL_SECCFG,strlen(PL_SECCFG))) - { - return (char*) MTD_SECCFG; - } - /* ----------------- */ - /* uboot */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_UBOOT,strlen(PL_UBOOT))) - { - return (char*) MTD_UBOOT; - } - /* ----------------- */ - /* logo */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_LOGO,strlen(PL_LOGO))) - { - return (char*) MTD_LOGO; - } - /* ----------------- */ - /* boot image */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_BOOTIMG,strlen(PL_BOOTIMG))) - { - return (char*) MTD_BOOTIMG; - } - /* ----------------- */ - /* user data */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_USER,strlen(PL_USER))) - { - return (char*) MTD_USER; - } - /* ----------------- */ - /* system image */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_ANDSYSIMG,strlen(PL_ANDSYSIMG))) - { - return (char*) MTD_ANDSYSIMG; - } - /* ----------------- */ - /* recovery */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_RECOVERY,strlen(PL_RECOVERY))) - { - return (char*) MTD_RECOVERY; - } - /* ----------------- */ - /* sec ro */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_SECRO,strlen(PL_SECRO))) - { - return (char*) MTD_SECRO; - } - /* ----------------- */ - /* not found */ - /* ----------------- */ - else - { - return part_name; - } -} - - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_ops.c b/drivers/misc/mediatek/masp/asf/core/sec_ops.c deleted file mode 100644 index bb36958ca..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_ops.c +++ /dev/null @@ -1,46 +0,0 @@ -#include <mach/sec_osal.h> -#include <mach/mt_sec_hal.h> -#include "sec_osal_light.h" -#include "sec_typedef.h" -#include "alg_sha1.h" -#include "sec_log.h" - -static int sec_get_rid(uint32 *rid) -{ - uint32 obuf[5]; - uint32 ibuf[4]; - - masp_hal_get_uuid(ibuf); - - sha1((uchar*)ibuf, 16, (uchar*)obuf); - - memcpy(rid, obuf, 16); - - #ifdef SEC_DEBUG - { - int i = 0; - - for (i = 0; i < 4; i++) - { - SMSG(TRUE,"IBUF[%d] = 0x%.8x\n", i, ibuf[i]); - SMSG(TRUE,"OBUF[%d] = 0x%.8x\n", i, obuf[i]); - } - } - #endif - - return 0; -} - - -/************************************************************************** - * SEC RANDOM ID FUNCTION - **************************************************************************/ -int sec_get_random_id(unsigned int *rid) -{ - int ret; - - osal_rid_lock(); - ret = sec_get_rid(rid); - osal_rid_unlock(); - return ret; -} diff --git a/drivers/misc/mediatek/masp/asf/core/sec_secro.c b/drivers/misc/mediatek/masp/asf/core/sec_secro.c deleted file mode 100644 index 59b5836a3..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_secro.c +++ /dev/null @@ -1,442 +0,0 @@ -#include <mach/sec_osal.h> -#include <mach/mt_sec_hal.h> -#include <mach/mt_sec_export.h> -#include "sec_typedef.h" -#include "sec_rom_info.h" -#include "sec_usbdl.h" -#include "sec_secroimg.h" -#include "sec_error.h" -#include "sec_log.h" -#include "alg_sha1.h" -#include "sec_dev.h" - -/****************************************************************************** - * DEFINITIONS - ******************************************************************************/ -#define MOD "ASF" - - -/****************************************************************************** - * GLOBAL VARIABLES - ******************************************************************************/ -AND_SECROIMG_T secroimg; -AND_SECROIMG_V5a_T secroimg_v5; - -uint32 secro_v3_off = MAX_SECRO_V3_OFFSET; -bool bSecroExist = FALSE; -bool bSecroIntergiy = FALSE; -bool bSecroV5Exist = FALSE; -bool bSecroV5Intergiy = FALSE; - - - -/****************************************************************************** - * EXTERNAL VARIABLES - ******************************************************************************/ -extern AND_ROMINFO_T rom_info; -extern uchar sha1sum[]; - - -/****************************************************************************** - * VALIDATE SECRO - ******************************************************************************/ -uint32 sec_secro_check (void) -{ - uint32 ret = SEC_OK; - - /* ------------------------ */ - /* check header */ - /* ------------------------ */ - if(AC_ANDRO_MAGIC != secroimg.m_andro.magic_number) - { - ret = ERR_SECROIMG_HACC_AP_DECRYPT_FAIL; - goto _end; - } - - if(AC_MD_MAGIC != secroimg.m_md.magic_number) - { - ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL; - goto _end; - } - - if(AC_MD2_MAGIC != secroimg.m_md2.magic_number) - { - ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL; - goto _end; - } - - /* ------------------------ */ - /* check integrity */ - /* ------------------------ */ - if(FALSE == bSecroIntergiy) - { - sha1((uchar*)&secroimg, sizeof(AND_SECROIMG_T) - sizeof(secroimg.hash) - - sizeof(AND_SECROIMG_PADDING_T), sha1sum); -#if 0 - SMSG(TRUE,"[%s] hash value :\n",MOD); - dump_buf(sha1sum,secroimg.m_header.hash_length); - SMSG(TRUE,"[%s] correct :\n",MOD); - dump_buf(secroimg.hash,secroimg.m_header.hash_length); -#endif - if(0 != mcmp(secroimg.hash, sha1sum, secroimg.m_header.hash_length)) - { - SMSG(TRUE,"[%s] SECRO hash check fail\n",MOD); - ret = ERR_SECROIMG_HASH_CHECK_FAIL; - goto _end; - } - - bSecroIntergiy = TRUE; - SMSG(TRUE,"[%s] SECRO hash check pass\n",MOD); - } - -_end: - - return ret; -} - -/****************************************************************************** - * VALIDATE SECRO V5 - ******************************************************************************/ -uint32 sec_secro_v5_check (void) -{ - uint32 ret = SEC_OK; - - /* ------------------------ */ - /* check header */ - /* ------------------------ */ - if(AC_MD_INFO_MAGIC != secroimg_v5.m_md_info_v5a.magic_number) - { - ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL; - goto _end; - } - - if(AC_SV5_MAGIC_MD_V5a != secroimg_v5.m_md_sro_v5a.magic_number) - { - ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL; - goto _end; - } - - /* ------------------------ */ - /* check integrity */ - /* ------------------------ */ - if(FALSE == bSecroV5Intergiy) - { - sha1((uchar*)&secroimg_v5, sizeof(AND_AC_HEADER_V5a_T) + sizeof(AND_AC_MD_INFO_V5a_T) - + sizeof(AND_AC_MD_V5a_T), sha1sum); -#if 0 - SMSG(TRUE,"[%s] hash value :\n",MOD); - dump_buf(sha1sum,secroimg_v5.m_header_v5a.hash_len); - SMSG(TRUE,"[%s] correct :\n",MOD); - dump_buf(secroimg_v5.hash_v5a,secroimg_v5.m_header_v5a.hash_len); -#endif - if(0 != mcmp(secroimg_v5.hash_v5a, sha1sum, secroimg_v5.m_header_v5a.hash_len)) - { - SMSG(TRUE,"[%s] SECRO V5 hash check fail\n",MOD); - ret = ERR_SECROIMG_V5_HASH_CHECK_FAIL; - goto _end; - } - - bSecroV5Intergiy = TRUE; - SMSG(TRUE,"[%s] SECRO V5 hash check pass\n",MOD); - } - -_end: - - return ret; -} - - -/****************************************************************************** - * CHECK IF SECROIMG IS USED - ******************************************************************************/ -unsigned char masp_secro_en (void) -{ - /* return ProjectConfig's setting */ - if(TRUE == rom_info.m_SEC_CTRL.m_secro_ac_en) - { - return TRUE; - } - else - { - return FALSE; - } -} - -/****************************************************************************** - * CHECK IF SECROIMG AC IS ENABLED - ******************************************************************************/ -bool sec_secro_ac (void) -{ - /* PLEASE NOTE THAT !!!!!!!!!!!!!!!!!! - SECRO AC is only effected when SUSBDL is on */ - if(TRUE == sec_usbdl_enabled()) - { - return TRUE; - } - /* If security chip, secroimage must be encrypted */ - else if(TRUE == masp_hal_sbc_enabled()) - { - return TRUE; - } - else - { - return FALSE; - } -} - -/****************************************************************************** - * RETURN SECROIMG BLK SIZE - ******************************************************************************/ -uint32 masp_secro_blk_sz (void) -{ - return masp_hal_sp_hacc_blk_sz(); -} - - -/****************************************************************************** - * RETURN SECROIMG MD LENGTH - ******************************************************************************/ -uint32 masp_secro_md_len (uchar *md_info) -{ - uint32 index = 0; - AND_AC_MD_INFO_V3a_T* cur_md_info = NULL; - uint32 md_info_len = 0; - - SMSG(FALSE,"[%s]md_info:%s \n",MOD,md_info); - - if(TRUE == bSecroExist) - { - /* check if this secro supports v5 format(world phone) , in v3 format - this area should be zero.*/ - if (FALSE == secroimg.m_header.world_phone_support) - { - /* read v3 format and return, it depends on first character */ - if ('1' == md_info[0]) - { - return secroimg.m_header.md_length; - } - else if ('2' == md_info[0]) - { - return secroimg.m_header.md2_length; - } - } - /* if it supports v5 format (world phone) */ - else if (TRUE == secroimg.m_header.world_phone_support) - { - if (NULL != md_info) - { - md_info_len = strlen(md_info); - } - - /* check if this image's information exist */ - for(index=0; index<MAX_V5_SUPPORT_MD_NUM; index++) - { - cur_md_info = &(secroimg.m_padding.md_v3a_info[index]); - - if(0 == strncmp(md_info,cur_md_info->md_name+strlen("SECURE_RO_"),md_info_len)) - { - SMSG(TRUE,"[%s]md[%d]len:0x%x \n",MOD,index,cur_md_info->md_len); - return cur_md_info->md_len; - } - } - - if (MAX_V5_SUPPORT_MD_NUM == index) - { - /* no match found, return 0 */ - SMSG(TRUE,"[%s]v5 no match \n",MOD); - return 0; - } - } - } - else - { - SMSG(TRUE,"[%s]Secro v3 does not exist \n",MOD); - return 0; - } - - return 0; -} - -/****************************************************************************** - * RETURN SECROIMG MD PLAINTEXT DATA - ******************************************************************************/ -uint32 masp_secro_md_get_data (uchar *md_info, uchar* buf, uint32 offset, uint32 len) -{ - uint32 ret = SEC_OK; - uint32 cipher_len = sizeof(AND_AC_ANDRO_T) + sizeof(AND_AC_MD_T) + sizeof(AND_AC_MD2_T); - AND_AC_MD_INFO_V3a_T* cur_md_info = NULL; - uint32 md_info_len = 0; - uint32 index = 0; - - osal_secro_lock(); - - /* ----------------- */ - /* check */ - /* ----------------- */ - - if (NULL == md_info) - { - ret = ERR_SECROIMG_EMPTY_MD_INFO_STR; - goto _exit; - } - else - { - md_info_len = strlen(md_info); - } - - if(FALSE == bSecroExist) - { - ret = ERR_SECROIMG_IS_EMPTY; - goto _exit; - } - - if(len == 0) - { - ret = ERR_SECROIMG_INVALID_BUF_LEN; - goto _exit; - } - - if (0 != (len % masp_hal_sp_hacc_blk_sz())) - { - ret = ERR_HACC_DATA_UNALIGNED; - goto _exit; - } - - /* check if it only supports secro v3 format */ - if (0 == secroimg.m_header.world_phone_support) - { - - SMSG(TRUE,"[%s]sro v3 \n",MOD); - /* ------------------------ */ - /* decrypt secroimg */ - /* ------------------------ */ - if(TRUE == sec_secro_ac()) - { - masp_hal_sp_hacc_dec((uchar*)&secroimg.m_andro, cipher_len, TRUE,HACC_USER1,TRUE); - } - - /* ------------------------ */ - /* check header */ - /* ------------------------ */ - if(AC_ANDRO_MAGIC != secroimg.m_andro.magic_number) - { - ret = ERR_SECROIMG_HACC_AP_DECRYPT_FAIL; - goto _exit; - } - - if(AC_MD_MAGIC != secroimg.m_md.magic_number) - { - ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL; - goto _exit; - } - - if(AC_MD2_MAGIC != secroimg.m_md2.magic_number) - { - ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL; - goto _exit; - } - - /* ------------------------ */ - /* fill buffer */ - /* ------------------------ */ - /* only copy the data with user specified length */ - - /* check if this image's information exist */ - if ('1' == md_info[0]) - { - mcpy(buf,secroimg.m_md.reserve+offset,len); - } - else if ('2' == md_info[0]) - { - mcpy(buf,secroimg.m_md2.reserve+offset,len); - } - else - { - SMSG(TRUE,"[%s] MD user not supported!\n",MOD); - } - - /* ------------------------ */ - /* encrypt secro image */ - /* ------------------------ */ - if(TRUE == sec_secro_ac()) - { - masp_hal_sp_hacc_enc((uchar*)&secroimg.m_andro, cipher_len, TRUE,HACC_USER1,TRUE); - } - } - else - { - - SMSG(TRUE,"[%s]sro v5 \n",MOD); - /* ----------------------------- */ - /* if it supports v5 format */ - /* ----------------------------- */ - - /* check if this image's information exist */ - for(index=0; index<MAX_V5_SUPPORT_MD_NUM; index++) - { - cur_md_info = &(secroimg.m_padding.md_v3a_info[index]); - if(0 == strncmp(md_info,cur_md_info->md_name+strlen("SECURE_RO_"),md_info_len)) - { - break; - } - } - - /* md info dees not exist */ - if (MAX_V5_SUPPORT_MD_NUM == index) - { - ret = ERR_SECROIMG_MD_INFO_NOT_EXIST; - goto _exit; - } - - /* ------------------------ */ - /* read secro v5 from flash */ - /* ------------------------ */ - bSecroV5Exist = FALSE; - bSecroV5Intergiy = FALSE; - if(SEC_OK != (ret = sec_dev_read_secroimg_v5(index))) - { - goto _exit; - } - else - { - /* ------------------------ */ - /* decrypt secroimg */ - /* ------------------------ */ - cipher_len = sizeof(AND_AC_MD_INFO_V5a_T) + sizeof(AND_AC_MD_V5a_T); - if(TRUE == sec_secro_ac()) - { - masp_hal_sp_hacc_dec((uchar*)&secroimg_v5.m_md_info_v5a, cipher_len, TRUE,HACC_USER1,TRUE); - } - - /* ------------------------ */ - /* check header */ - /* ------------------------ */ - if(AC_MD_INFO_MAGIC != secroimg_v5.m_md_info_v5a.magic_number) - { - ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL; - goto _exit; - } - - if(AC_SV5_MAGIC_MD_V5a != secroimg_v5.m_md_sro_v5a.magic_number) - { - ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL; - goto _exit; - } - - /* ------------------------ */ - /* fill buffer */ - /* ------------------------ */ - /* only copy the data with user specified length */ - mcpy(buf,secroimg_v5.m_md_sro_v5a.reserve+offset,len); - - /* no need to encrypt since next time, we'll read it again from flash*/ - } - } - - -_exit: - - osal_secro_unlock(); - - return ret; -} diff --git a/drivers/misc/mediatek/masp/asf/core/sec_signfmt_core.c b/drivers/misc/mediatek/masp/asf/core/sec_signfmt_core.c deleted file mode 100644 index a23279f50..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_signfmt_core.c +++ /dev/null @@ -1,673 +0,0 @@ -#include "sec_boot_lib.h" - -/************************************************************************** - * MODULE NAME - **************************************************************************/ -#define MOD "SFMT_CORE" - -/************************************************************************** - * FUNCTION To Get File Hash - **************************************************************************/ -static int sec_signfmt_get_file_hash(char* file_name, char* hash_buf, unsigned int hash_len, - unsigned int offset, unsigned int size) -{ - uint32 ret = SEC_OK; - ASF_FILE fp = ASF_FILE_NULL; - bool bFileOpened = false; - char *file_buf = NULL; - uint32 file_size = 0; - bool bBufAllocate = false; - uint32 read_size = 0; - - ASF_GET_DS - - /* ----------------------------------- */ - /* parameter check */ - /* ----------------------------------- */ - if(NULL == hash_buf) - { - ret = ERR_FS_READ_BUF_IS_NULL; - goto _end; - } - - /* ----------------------------------- */ - /* open file */ - /* ----------------------------------- */ - fp = ASF_OPEN(file_name); - if (ASF_FILE_ERROR(fp)) - { - ret = ERR_FS_OPEN_SEC_FILE_FAIL; - goto _end; - } - - SMSG(true,"\n-----------------------\n"); - SMSG(true,"[%s] read '%s'\n",MOD,file_name); - SMSG(true,"-----------------------\n"); - bFileOpened = true; - - /* ----------------------------------- */ - /* get file size */ - /* ----------------------------------- */ - ASF_SEEK_END(fp, 0); - file_size = ASF_FILE_POS(fp); - SMSG(true,"[%s] file size '%d'\n",MOD,file_size); - - /* ----------------------------------- */ - /* adjust read size */ - /* ----------------------------------- */ - if(0 != size) - { - if( file_size > size) - { - file_size = size; - SMSG(true,"[%s] adjust read size '0x%x'\n",MOD,file_size); - } - } - - /* ----------------------------------- */ - /* allocate file buffer */ - /* ----------------------------------- */ - file_buf = ASF_MALLOC(file_size); - if(NULL == file_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _end; - } - - bBufAllocate = true; - - /* ----------------------------------- */ - /* adjust file offset */ - /* ----------------------------------- */ - ASF_SEEK_SET(fp, offset); - - /* ----------------------------------- */ - /* read file */ - /* ----------------------------------- */ - if (file_size != (read_size = ASF_READ(fp, file_buf, file_size))) - { - SMSG(true,"[%s] '%s' read size '%d' != '%d'\n",MOD,file_name,read_size,file_size); - ret = ERR_FS_READ_SIZE_FAIL; - goto _end; - } - - /* ----------------------------------- */ - /* hash file */ - /* ----------------------------------- */ - if(SEC_OK != (ret = sec_hash((uchar*)file_buf, file_size, - (uchar*)hash_buf, hash_len ))) - { - SMSG(true,"[%s] generate hash fail\n\n",MOD); - ret = ERR_SIGN_FORMAT_GENERATE_HASH_FAIL; - goto _end; - } - -_end: - - if(true == bFileOpened) - { - ASF_CLOSE(fp); - } - - if(true == bBufAllocate) - { - ASF_FREE(file_buf); - } - - ASF_PUT_DS - - return ret; -} - - -/************************************************************************** - * FUNCTION To Verify File - **************************************************************************/ -int sec_signfmt_verify_file(char *file_path, SEC_IMG_HEADER *img_hdr, unsigned int *data_offset, unsigned int *data_sec_len) -{ - unsigned int ret = SEC_OK; - ASF_FILE fp = ASF_FILE_NULL; - int read_sz = 0; - - ASF_GET_DS - - /* check if file is null */ - if (NULL == file_path) - { - SMSG(true,"[%s] doesn't initialize fs sec file list '%s'\n",MOD,file_path); - ret = ERR_FS_SEC_LIST_NOT_SPECIFY; - goto _end; - } - - /* check if file is existed */ - fp = ASF_OPEN(file_path); - if (ASF_FILE_ERROR(fp)) - { - SMSG(true,"[%s] open '%s' fail\n",MOD,file_path); - ret = ERR_FS_OPEN_SEC_FILE_FAIL; - goto _end; - } - - /* get header */ - if (SEC_IMG_HEADER_SIZE != (read_sz = ASF_READ(fp, (char*)img_hdr, SEC_IMG_HEADER_SIZE))) - { - SMSG(true,"[%s] '%s' read size '%d' != '%d'\n",MOD,file_path,read_sz,SEC_IMG_HEADER_SIZE); - ret = ERR_FS_READ_SIZE_FAIL; - goto _read_hdr_fail; - } - - /* check sign format */ - if ( SEC_IMG_MAGIC != img_hdr->magic_number ) - { - SMSG(true,"[%s] '%s' is not signed\n",MOD,file_path); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _not_signed; - } - if (is_signfmt_v4(img_hdr)) - { - ret = sec_signfmt_verify_file_v4(fp, img_hdr); - } - else if (is_signfmt_v3(img_hdr)) - { - ret = sec_signfmt_verify_file_v3(fp, img_hdr); - } - else - { - ret = sec_signfmt_verify_file_v2(fp, img_hdr); - } - - *data_offset = SEC_IMG_HEADER_SIZE; - *data_sec_len = SEC_IMG_HEADER_SIZE; - - if (is_signfmt_v4(img_hdr)) - { - *data_sec_len += sec_signfmt_get_extension_length_v4(NULL, fp, img_hdr); - } - else if (is_signfmt_v3(img_hdr)) - { - *data_sec_len += sec_signfmt_get_extension_length_v3(NULL, fp, img_hdr); - } - else - { - *data_sec_len += sec_signfmt_get_extension_length_v2(fp); - } - -_not_signed: -_read_hdr_fail: - ASF_CLOSE(fp); -_end: - ASF_PUT_DS - - return ret; -} - -/************************************************************************** - * FUNCTION To Get Hash Length - **************************************************************************/ -int sec_signfmt_get_hash_length(SEC_IMG_U *img_if, ASF_FILE fp, char *ext_buf) -{ - bool v3_fmt = false; - bool v4_fmt = false; - SEC_IMG_HEADER img_hdr; - uint32 read_sz = 0; - - memset(&img_hdr, 0x00, SEC_IMG_HEADER_SIZE); - - /* if file_path is existed, then it will get the hash length from file ; otherwise, it will get the hash length from seccfg */ - if( !ASF_FILE_ERROR(fp) ) - { - ASF_SEEK_SET(fp, 0); - /* get header */ - if (SEC_IMG_HEADER_SIZE != (read_sz = ASF_READ(fp, (char*)&img_hdr, SEC_IMG_HEADER_SIZE))) - { - SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,SEC_IMG_HEADER_SIZE); - return -1; - } - - v3_fmt = is_signfmt_v3(&img_hdr); - v4_fmt = is_signfmt_v4(&img_hdr); - } - else if(SECCFG_V3 == get_seccfg_ver()) - { - v3_fmt = is_signfmt_v3((SEC_IMG_HEADER*)&img_if->v3.header.va); - v4_fmt = is_signfmt_v4((SEC_IMG_HEADER*)&img_if->v3.header.va); - } - else - { - v3_fmt = is_signfmt_v3((SEC_IMG_HEADER*)&img_if->v1.header.va); - v4_fmt = is_signfmt_v4((SEC_IMG_HEADER*)&img_if->v1.header.va); - } - - if ( v4_fmt ) - { - return sec_signfmt_get_hash_length_v4(&img_if->v3, fp, &img_hdr, ext_buf); - } - else if ( v3_fmt ) - { - return sec_signfmt_get_hash_length_v3(&img_if->v3, fp, &img_hdr, ext_buf); - } - else - { - return sec_signfmt_get_hash_length_v2(); - } -} - -/************************************************************************** - * FUNCTION To Get Signature Length - **************************************************************************/ -int sec_signfmt_get_signature_length(SEC_IMG_U *img_if, ASF_FILE fp, char *ext_buf) -{ - bool v3_fmt = false; - bool v4_fmt = false; - SEC_IMG_HEADER img_hdr; - uint32 read_sz = 0; - - memset(&img_hdr, 0x00, SEC_IMG_HEADER_SIZE); - - /* if file_path is existed, then it will get the hash length from file ; otherwise, it will get the hash length from seccfg */ - if( !ASF_FILE_ERROR(fp) ) - { - ASF_SEEK_SET(fp, 0); - /* get header */ - if (SEC_IMG_HEADER_SIZE != (read_sz = ASF_READ(fp, (char*)&img_hdr, SEC_IMG_HEADER_SIZE))) - { - SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,SEC_IMG_HEADER_SIZE); - return -1; - } - - v3_fmt = is_signfmt_v3(&img_hdr); - v4_fmt = is_signfmt_v4(&img_hdr); - } - else if(SECCFG_V3 == get_seccfg_ver()) - { - v3_fmt = is_signfmt_v3((SEC_IMG_HEADER*)&img_if->v3.header.va); - v4_fmt = is_signfmt_v4((SEC_IMG_HEADER*)&img_if->v3.header.va); - } - else - { - v3_fmt = is_signfmt_v3((SEC_IMG_HEADER*)&img_if->v1.header.va); - v4_fmt = is_signfmt_v4((SEC_IMG_HEADER*)&img_if->v1.header.va); - } - - if ( v4_fmt ) - { - return sec_signfmt_get_signature_length_v4(&img_if->v3, fp, &img_hdr, ext_buf); - } - else if ( v3_fmt ) - { - return sec_signfmt_get_signature_length_v3(&img_if->v3, fp, &img_hdr, ext_buf); - } - else - { - return sec_signfmt_get_signature_length_v2(); - } -} - - -/************************************************************************** - * FUNCTION To Get Extension Length - **************************************************************************/ -int sec_signfmt_get_extension_length(SEC_IMG_U *img_if, ASF_FILE fp) -{ - bool v3_fmt = false; - bool v4_fmt = false; - SEC_IMG_HEADER img_hdr; - uint32 read_sz = 0; - - memset(&img_hdr, 0x00, SEC_IMG_HEADER_SIZE); - - /* if file_path is existed, then it will get the hash length from file ; otherwise, it will get the hash length from seccfg */ - if( !ASF_FILE_ERROR(fp) ) - { - ASF_SEEK_SET(fp, 0); - /* get header */ - if (SEC_IMG_HEADER_SIZE != (read_sz = ASF_READ(fp, (char*)&img_hdr, SEC_IMG_HEADER_SIZE))) - { - SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,SEC_IMG_HEADER_SIZE); - return -1; - } - - v3_fmt = is_signfmt_v3(&img_hdr); - v4_fmt = is_signfmt_v3(&img_hdr); - } - else if(SECCFG_V3 == get_seccfg_ver()) - { - v3_fmt = is_signfmt_v3((SEC_IMG_HEADER*)&img_if->v3.header.va); - v4_fmt = is_signfmt_v4((SEC_IMG_HEADER*)&img_if->v3.header.va); - } - else - { - v3_fmt = is_signfmt_v3((SEC_IMG_HEADER*)&img_if->v1.header.va); - v4_fmt = is_signfmt_v4((SEC_IMG_HEADER*)&img_if->v1.header.va); - } - - if ( v4_fmt ) - { - return sec_signfmt_get_extension_length_v4(&img_if->v3, fp, &img_hdr); - } - else if ( v3_fmt ) - { - return sec_signfmt_get_extension_length_v3(&img_if->v3, fp, &img_hdr); - } - else - { - return sec_signfmt_get_extension_length_v2(fp); - } -} - - -/************************************************************************** - * FUNCTION To Get File Hash - **************************************************************************/ -static int sec_signfmt_calculate_filelist_hash_core(ASF_FILE fp, char *double_hash_buf, unsigned int double_hash_len, unsigned int single_hash_len) -{ - unsigned int ret = SEC_OK; - uint32 i = 0; - char *file_buf = NULL, *sec_file = NULL; - uint32 read_sz = 0; - char *tmp_signal_hash_buf = NULL; - uint32 img_content_offset = 0; - uint32 img_content_length = 0; - uint32 file_size = 0; - - - /* reset buffer */ - memset(double_hash_buf, 0x00, double_hash_len); - - if(double_hash_len < 2*single_hash_len) - { - SMSG(true,"[%s] hash buffer size is invalid '%d'\n",MOD,double_hash_len); - ret = ERR_SIGN_FORMAT_HASH_SIZE_WRONG; - goto _end; - } - - ASF_SEEK_END(fp, 0); - file_size = ASF_FILE_POS(fp); - - img_content_offset = SEC_IMG_HEADER_SIZE; - img_content_length = file_size-SEC_IMG_HEADER_SIZE-sec_signfmt_get_extension_length(NULL, fp); - - /* allocate file buffer */ - file_buf = ASF_MALLOC(img_content_length); - if(NULL == file_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_file_buf_fail; - } - - /* adjust file offset */ - ASF_SEEK_SET(fp, img_content_offset); - - /* read sec file list */ - if (img_content_length != (read_sz = ASF_READ(fp, file_buf, img_content_length))) - { - SMSG(true,"[%s] read sz '%d' != '%d'\n",MOD,read_sz,img_content_length); - ret = ERR_FS_READ_SIZE_FAIL; - goto _read_file_list_fail; - } - - /* allocate temp file hash buffer */ - tmp_signal_hash_buf = ASF_MALLOC(single_hash_len); - if(NULL == tmp_signal_hash_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_hash_buf_fail; - } - - /* ----------------------------------- */ - /* traverse file list */ - /* ----------------------------------- */ - for(i = 0; i<img_content_length; i++) - { - /* find file name */ - if('[' == file_buf[i]) - { - sec_file = file_buf + i + 1; - sec_file = ASF_STRTOK(sec_file,"]"); - } - else - { - continue; - } - - /* ----------------------------------- */ - /* read file and do hash */ - /* ----------------------------------- */ - if(SEC_OK != (ret = sec_signfmt_get_file_hash(sec_file, - tmp_signal_hash_buf, single_hash_len, 0, 0))) - { - /* skip unfound file */ - if(ERR_FS_OPEN_SEC_FILE_FAIL == ret) - { - SMSG(true,"[%s] file '%s' not found\n",MOD,sec_file); - ret = SEC_OK; - continue; - } - else - { - goto _end; - } - } - - /* ----------------------------------- */ - /* dump file hash */ - /* ----------------------------------- */ - SMSG(sec_info.bMsg,"[%s] dump file hash (single):\n",MOD); - dump_buf((uchar*)tmp_signal_hash_buf, single_hash_len); - - /* ----------------------------------- */ - /* integrate file hash */ - /* ----------------------------------- */ - /* append this file hash */ - mcpy(double_hash_buf+single_hash_len, tmp_signal_hash_buf, single_hash_len); - - memset(tmp_signal_hash_buf, 0x00, single_hash_len); - if(SEC_OK != (ret = sec_hash((uchar*)double_hash_buf, single_hash_len*2, - (uchar*)tmp_signal_hash_buf, single_hash_len ))) - { - SMSG(true,"[%s] generate hash fail\n\n",MOD); - ret = ERR_SIGN_FORMAT_GENERATE_HASH_FAIL; - goto _gen_hash_fail; - } - - /* write back to output buf */ - mcpy(double_hash_buf, tmp_signal_hash_buf, single_hash_len); - - SMSG(sec_info.bMsg,"[%s] dump file hash (compose):\n",MOD); - dump_buf((uchar*)double_hash_buf, single_hash_len); - } - - SMSG(true,"-----------------------\n"); - SMSG(true,"[%s] read files done\n",MOD); - SMSG(true,"-----------------------\n\n"); - - SMSG(sec_info.bMsg,"[%s] file list data(final):\n",MOD); - dump_buf((uchar*)double_hash_buf, single_hash_len*2); - -_gen_hash_fail: - ASF_FREE(tmp_signal_hash_buf); -_malloc_hash_buf_fail: -_read_file_list_fail: - ASF_FREE(file_buf); -_malloc_file_buf_fail: -_end: - - return ret; -} - -/************************************************************************** - * FUNCTION To Get File Hash - **************************************************************************/ -int sec_signfmt_calculate_filelist_hash(char* part_name, SEC_IMG_U *img_if, char *file_path, - char *hash_buf, unsigned int hash_len, char *ext_buf) -{ - unsigned int ret = SEC_OK; - ASF_FILE fp = ASF_FILE_NULL; - SEC_IMG_HEADER img_hdr; - uint32 single_hash_len = 0; - uchar *verify_buf = NULL; - uint32 file_content_len = 0; - uint32 ext_hdr_len = 0; - uint32 verify_len = 0; - uint32 data_offset = 0; - uint32 data_sec_len = 0; - - memset(&img_hdr, 0x00, SEC_IMG_HEADER_SIZE); - - /* verify file */ - if(SEC_OK != (ret = sec_signfmt_verify_file(file_path, &img_hdr, &data_offset, &data_sec_len))) - { - goto _end; - } - - /* check if file is null */ - if (NULL == file_path) - { - SMSG(true,"[%s] doesn't initialize fs sec file list '%s'\n",MOD,file_path); - ret = ERR_FS_SEC_LIST_NOT_SPECIFY; - goto _end; - } - - /* check if file is existed */ - fp = ASF_OPEN(file_path); - if (ASF_FILE_ERROR(fp)) - { - SMSG(true,"[%s] open '%s' fail\n",MOD,file_path); - ret = ERR_FS_OPEN_SEC_FILE_FAIL; - goto _end; - } - - if(SECCFG_V3 == get_seccfg_ver()) - { - /* to be update later when single hash length is known */ - file_content_len = 0; - } - else - { - file_content_len = shdr_sign_len(&img_if->v1.header); - } - - /* check sign format type, and get file list hash */ - if (is_signfmt_v4(&img_hdr) && (SECCFG_V3 == get_seccfg_ver())) - { - /* should get the hash length from file */ - single_hash_len = sec_signfmt_get_hash_length_v4(&img_if->v3, fp, &img_hdr, ext_buf); - - /* need to handle v3 case */ - file_content_len = single_hash_len*2; - ext_hdr_len = img_if->v3.ext_len - img_if->v3.header.v4.signature_length; - verify_len = SEC_IMG_HEADER_SIZE + file_content_len + ext_hdr_len; - } - else if (is_signfmt_v3(&img_hdr) && (SECCFG_V3 == get_seccfg_ver())) - { - /* should get the hash length from file */ - single_hash_len = sec_signfmt_get_hash_length_v3(&img_if->v3, fp, &img_hdr, ext_buf); - - /* need to handle v3 case */ - file_content_len = single_hash_len*2; - ext_hdr_len = img_if->v3.ext_len - img_if->v3.header.v3.signature_length; - verify_len = SEC_IMG_HEADER_SIZE + file_content_len + ext_hdr_len; - } - else - { - single_hash_len = sec_signfmt_get_hash_length_v2(); - - /* extend the buffer length if it is too small */ - if(file_content_len<single_hash_len*2) - { - file_content_len = single_hash_len*2; - } - verify_len = SEC_IMG_HEADER_SIZE + file_content_len; - } - - /* allocate temp file hash buffer */ - verify_buf = ASF_MALLOC(verify_len); - if(NULL == verify_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_fail; - } - memset(verify_buf, 0x00, verify_len); - - - /* get verify data which is the file list hash, and it's length should be double of hash length */ - if(SEC_OK != (ret = sec_signfmt_calculate_filelist_hash_core(fp, (char*)verify_buf+SEC_IMG_HEADER_SIZE, file_content_len, single_hash_len))) - { - goto _end; - } - - /* compose final verify buffer */ - if( is_signfmt_v4(&img_hdr) && SECCFG_V3 == get_seccfg_ver()) - { - mcpy(verify_buf, (char*)&img_if->v3.header.va, SEC_IMG_HEADER_SIZE); - mcpy(verify_buf+SEC_IMG_HEADER_SIZE+file_content_len, (char*)ext_buf+img_if->v3.ext_offset+img_if->v3.header.v4.signature_length, ext_hdr_len); - } - else if( is_signfmt_v3(&img_hdr) && SECCFG_V3 == get_seccfg_ver()) - { - mcpy(verify_buf, (char*)&img_if->v3.header.va, SEC_IMG_HEADER_SIZE); - mcpy(verify_buf+SEC_IMG_HEADER_SIZE+file_content_len, (char*)ext_buf+img_if->v3.ext_offset+img_if->v3.header.v3.signature_length, ext_hdr_len); - } - else - { - mcpy(verify_buf, (char*)&img_if->v1.header.va, SEC_IMG_HEADER_SIZE); - } - - - /* generate final hash */ - if(SEC_OK != (ret = sec_hash((uchar*)verify_buf, verify_len, (uchar*)hash_buf, hash_len ))) - { - SMSG(true,"[%s] generate hash fail\n\n",MOD); - ret = ERR_SIGN_FORMAT_GENERATE_HASH_FAIL; - goto _gen_hash_fail; - } - - SMSG(sec_info.bMsg,"[%s] file list hash(final):\n",MOD); - - dump_buf((uchar*)hash_buf, hash_len); - - SMSG(sec_info.bMsg,"[%s] generate file list hash pass\n\n",MOD); - -_gen_hash_fail: - ASF_FREE(verify_buf); -_malloc_fail: - ASF_CLOSE(fp); -_end: - - return ret; -} - -/************************************************************************** - * FUNCTION To Get Image Hash - **************************************************************************/ -int sec_signfmt_calculate_image_hash(char* part_name, SEC_IMG_U *img_if, char *hash_buf, unsigned int hash_len, char *ext_buf) -{ - unsigned int ret = SEC_OK; - - /* check sign format type */ - if (SECCFG_V3 == get_seccfg_ver() && is_signfmt_v4((SEC_IMG_HEADER*)&img_if->v3.header.va)) - { - if(SEC_OK != (ret = sec_signfmt_calculate_image_hash_v4(part_name, &img_if->v3, hash_buf, hash_len, ext_buf))) - { - goto _end; - } - } - else if (SECCFG_V3 == get_seccfg_ver() && is_signfmt_v3((SEC_IMG_HEADER*)&img_if->v3.header.va)) - { - if(SEC_OK != (ret = sec_signfmt_calculate_image_hash_v3(part_name, &img_if->v3, hash_buf, hash_len, ext_buf))) - { - goto _end; - } - } - else - { - if(SEC_OK != (ret = sec_signfmt_calculate_image_hash_v2(part_name, (SEC_IMG_HEADER*)&img_if->v1.header.va, (uint32)img_if->v1.image_type, hash_buf, hash_len))) - { - goto _end; - } - } - -_end: - - return ret; -} - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_signfmt_util.c b/drivers/misc/mediatek/masp/asf/core/sec_signfmt_util.c deleted file mode 100644 index 85a0cfbd6..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_signfmt_util.c +++ /dev/null @@ -1,84 +0,0 @@ -//#include "sec_osal_light.h" -#include "sec_signfmt_util.h" - -/************************************************************************** - * GLOBAL VARIABLES - **************************************************************************/ -unsigned int sec_crypto_hash_size[] = -{ - CRYPTO_SIZE_UNKNOWN, - SEC_SIZE_HASH_MD5, - SEC_SIZE_HASH_SHA1, - SEC_SIZE_HASH_SHA256, - SEC_SIZE_HASH_SHA512 -}; - -unsigned int sec_crypto_sig_size[] = -{ - CRYPTO_SIZE_UNKNOWN, - SEC_SIZE_SIG_RSA512, - SEC_SIZE_SIG_RSA1024, - SEC_SIZE_SIG_RSA2048 -}; - -/************************************************************************** - * UTILITY FUNCTIONS - **************************************************************************/ -unsigned int get_hash_size(SEC_CRYPTO_HASH_TYPE hash) -{ - return sec_crypto_hash_size[hash]; -} - -unsigned int get_signature_size(SEC_CRYPTO_SIGNATURE_TYPE sig) -{ - return sec_crypto_sig_size[sig]; -} - -unsigned char is_signfmt_v1(SEC_IMG_HEADER *hdr) -{ - if( 0 == hdr->signature_length ) - { - return true; - } - - return false; -} - -unsigned char is_signfmt_v2(SEC_IMG_HEADER *hdr) -{ - if( 0 == hdr->signature_length ) - { - return false; - } - else if( SEC_EXTENSION_MAGIC == hdr->sign_offset ) - { - return false; - } - - return true; -} - -unsigned char is_signfmt_v3(SEC_IMG_HEADER *hdr) -{ - - if( SEC_EXTENSION_MAGIC == hdr->sign_offset ) - { - return true; - } - - return false; -} - - -unsigned char is_signfmt_v4(SEC_IMG_HEADER *hdr) -{ - SEC_IMG_HEADER_V4 *v4_hdr = (SEC_IMG_HEADER_V4 *)hdr; - - if( SEC_EXTENSION_MAGIC_V4 == v4_hdr->ext_magic) - { - return true; - } - - return false; -} - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_signfmt_v2.c b/drivers/misc/mediatek/masp/asf/core/sec_signfmt_v2.c deleted file mode 100644 index 5cd59dfc9..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_signfmt_v2.c +++ /dev/null @@ -1,282 +0,0 @@ -#include "sec_boot_lib.h" -#include "sec_sign_extension.h" -#include "sec_signfmt_v2.h" -#include "sec_signfmt_util.h" -#include "sec_log.h" -#include "sec_error.h" -#include "sec_mtd_util.h" -#include "sec_wrapper.h" -#include <mach/sec_osal.h> - -/************************************************************************** - * MODULE NAME - **************************************************************************/ -#define MOD "SFMT_V2" - -/************************************************************************** - * FUNCTION To Get Hash Length - **************************************************************************/ -unsigned int sec_signfmt_get_hash_length_v2() -{ - return get_hash_size(SEC_CRYPTO_HASH_SHA1); -} - -/************************************************************************** - * FUNCTION To Get Signature Length - **************************************************************************/ -unsigned int sec_signfmt_get_signature_length_v2() -{ - return get_signature_size(SEC_CRYPTO_SIG_RSA1024); -} - -/************************************************************************** - * FUNCTION To Get Extension Length - **************************************************************************/ -unsigned int sec_signfmt_get_extension_length_v2(ASF_FILE fp) -{ - /* the extension include signature + hash + extension header */ - if(ASF_FILE_NULL == fp) - { - return 0; - } - else - { - return get_hash_size(SEC_CRYPTO_HASH_SHA1)+get_signature_size(SEC_CRYPTO_SIG_RSA1024); - } -} - -/************************************************************************** - * FUNCTION To Get Image Hash - **************************************************************************/ -int sec_signfmt_calculate_image_hash_v2(char* part_name, SEC_IMG_HEADER *img_hdr, - unsigned int image_type, char *hash_buf, unsigned int hash_len) -{ - uint32 ret = SEC_OK; - uint32 verify_len = 0; - uchar *verify_buf = NULL; - uint32 img_sign_off = 0; - uint32 img_sign_len = 0; - - /* reset buffer */ - memset(hash_buf, 0x00, hash_len); - - if(hash_len != sec_signfmt_get_hash_length_v2()) - { - SMSG(true,"[%s] hash buffer size is invalid '%d'\n",MOD,hash_len); - ret = ERR_SIGN_FORMAT_HASH_SIZE_WRONG; - goto _end; - } - - /* init check */ - if(SEC_IMG_MAGIC != img_hdr->magic_number) - { - SMSG(true,"[%s] magic number is invalid '0x%x'\n",MOD,img_hdr->magic_number); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _end; - } - - /* check length */ - verify_len = SEC_IMG_HEADER_SIZE; - img_sign_off = 0; - if (is_signfmt_v2(img_hdr)) - { - img_sign_len = img_hdr->sign_length; - img_sign_off += img_hdr->sign_offset; - } - else - { - /* workaround for v1 */ - img_sign_len = ((SEC_IMG_HEADER_U*)img_hdr)->v1.sign_length; - img_sign_off += ((SEC_IMG_HEADER_U*)img_hdr)->v1.sign_offset; - } - verify_len += img_sign_len; - - /* prepare verify buffer */ - verify_buf = ASF_MALLOC(verify_len); - if(NULL == verify_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_verify_fail; - } - memset(verify_buf, 0x00, verify_len); - - /* fill in verify buffer */ - mcpy(verify_buf, img_hdr, SEC_IMG_HEADER_SIZE); - - if(SEC_OK != (ret = sec_dev_read_image ( pl2part(part_name), - (char*)verify_buf+SEC_IMG_HEADER_SIZE, - img_sign_off, - img_sign_len, - image_type))) - { - SMSG(true,"[%s] read mtd '%s' fail at image offset 0x%x with length 0x%x\n",MOD,(char*)pl2part(part_name),img_sign_off,img_sign_len); - goto _read_mtd_fail; - } - - /* ================== */ - /* dump sign header */ - /* ================== */ - SMSG(sec_info.bMsg,"[%s] dump sign header\n",MOD); - dump_buf((uchar*)img_hdr,SEC_IMG_HEADER_SIZE); - - /* ================== */ - /* dump file data */ - /* ================== */ - SMSG(sec_info.bMsg,"[%s] dump file data\n",MOD); - dump_buf(verify_buf+SEC_IMG_HEADER_SIZE,8); - - /* hash */ - SMSG(sec_info.bMsg,"[%s] generate hash ... \n",MOD); - if(SEC_OK != (ret = sec_hash(verify_buf, verify_len, (uchar*)hash_buf, hash_len ))) - { - SMSG(true,"[%s] generate hash fail\n\n",MOD); - ret = ERR_SIGN_FORMAT_GENERATE_HASH_FAIL; - goto _hash_fail; - } - - /* ================== */ - /* dump hash data */ - /* ================== */ - SMSG(sec_info.bMsg,"[%s] dump hash data\n",MOD); - dump_buf((uchar*)hash_buf,hash_len); - - - SMSG(sec_info.bMsg,"[%s] generate hash pass\n\n",MOD); - -_hash_fail: -_read_mtd_fail: - ASF_FREE(verify_buf); -_malloc_verify_fail: -_end: - - return ret; -} - -/************************************************************************** - * FUNCTIONS - **************************************************************************/ -int sec_signfmt_verify_file_v2(ASF_FILE fp, SEC_IMG_HEADER *img_hdr) -{ - uint32 ret = SEC_OK; - uint32 verify_len = 0; - uchar *verify_buf = NULL; - uint32 img_sign_off = 0; - uint32 img_sign_len = 0; - uint32 signature_off = 0; - uint32 signature_len = 0; - uchar *signature_buf = NULL; - uint32 read_sz = 0; - - /* init check */ - if(SEC_IMG_MAGIC != img_hdr->magic_number) - { - SMSG(true,"[%s] magic number is invalid '0x%x'\n",MOD,img_hdr->magic_number); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _magic_wrong_err; - } - - /* check length */ - verify_len = SEC_IMG_HEADER_SIZE; - img_sign_off = SEC_IMG_HEADER_SIZE; - signature_off = 0; - if (is_signfmt_v2(img_hdr)) - { - img_sign_len = img_hdr->sign_length; - img_sign_off += img_hdr->sign_offset; - signature_off += img_hdr->signature_offset; - } - else - { - /* workaround for v1 */ - img_sign_len = ((SEC_IMG_HEADER_U*)img_hdr)->v1.sign_length; - img_sign_off += ((SEC_IMG_HEADER_U*)img_hdr)->v1.sign_offset; - signature_off += ((SEC_IMG_HEADER_U*)img_hdr)->v1.signature_offset; - } - verify_len += img_sign_len; - signature_len = sec_signfmt_get_signature_length_v2(); - - /* prepare signature buffer */ - signature_buf= (uchar*)ASF_MALLOC(signature_len); - if(NULL == signature_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_sig_fail; - } - memset(signature_buf, 0x00, signature_len); - - /* fill in signature buffer */ - ASF_SEEK_SET(fp, signature_off); - - if (signature_len != (read_sz = ASF_READ(fp, signature_buf, signature_len))) - { - SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,signature_len); - ret = ERR_FS_READ_SIZE_FAIL; - goto _read_sig_fail; - } - - /* prepare verify buffer */ - verify_buf = ASF_MALLOC(verify_len); - if(NULL == verify_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_verify_fail; - } - memset(verify_buf, 0x00, verify_len); - - /* fill in verify buffer */ - mcpy(verify_buf, img_hdr, SEC_IMG_HEADER_SIZE); - ASF_SEEK_SET(fp, img_sign_off); - - if (img_sign_len != (read_sz = ASF_READ(fp, verify_buf+SEC_IMG_HEADER_SIZE, img_sign_len))) - { - SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,img_sign_len); - ret = ERR_FS_READ_SIZE_FAIL; - goto _read_verify_fail; - } - - /* ================== */ - /* dump sign header */ - /* ================== */ - SMSG(sec_info.bMsg,"[%s] dump sign header\n",MOD); - dump_buf(verify_buf,SEC_IMG_HEADER_SIZE); - - /* ================== */ - /* dump file data */ - /* ================== */ - SMSG(sec_info.bMsg,"[%s] dump file data\n",MOD); - dump_buf(verify_buf+SEC_IMG_HEADER_SIZE,8); - - /* ================== */ - /* dump signature */ - /* ================== */ - SMSG(sec_info.bMsg,"[%s] dump signature\n",MOD); - dump_buf(signature_buf,signature_len); - - /* verify */ - SMSG(sec_info.bMsg,"[%s] verify (lock)... \n",MOD); - - osal_verify_lock(); - - if(SEC_OK != (ret = sec_verify(verify_buf, verify_len, signature_buf, signature_len ))) - { - osal_verify_unlock(); - SMSG(true,"[%s] verify fail (unlock), ret is %d\n\n",MOD,ret); - goto _verify_fail; - } - - osal_verify_unlock(); - - SMSG(sec_info.bMsg,"[%s] verify pass (unlock)\n\n",MOD); - -_verify_fail: -_read_verify_fail: - ASF_FREE(verify_buf); -_malloc_verify_fail: -_read_sig_fail: - ASF_FREE(signature_buf); -_malloc_sig_fail: -_magic_wrong_err: - - return ret; -} - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_signfmt_v3.c b/drivers/misc/mediatek/masp/asf/core/sec_signfmt_v3.c deleted file mode 100644 index 387b4c197..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_signfmt_v3.c +++ /dev/null @@ -1,852 +0,0 @@ -#include "sec_sign_extension.h" -#include "sec_signfmt_v3.h" -#include "sec_signfmt_util.h" -#include "sec_log.h" -#include "sec_error.h" -#include "sec_boot_lib.h" -#include "sec_wrapper.h" -#include "sec_mtd_util.h" -#include <mach/sec_osal.h> - -/************************************************************************** - * MODULE NAME - **************************************************************************/ -#define MOD "SFMT_V3" - - -/****************************************************************************** - * IMAGE VERIFICATION MEMORY DUMP FUNCTIONS - ******************************************************************************/ -#define DUMP_MORE_FOR_DEBUG 0 - -#if DUMP_MORE_FOR_DEBUG -static void sec_signfmt_dump_buffer(uchar* buf, uint32 len) -{ - uint32 i = 0; - - for (i =1; i <len+1; i++) - { - SMSG(true,"0x%x,",buf[i-1]); - - if(0 == (i%8)) - SMSG(true,"\n"); - } - - if(0 != (len%8)) - SMSG(true,"\n"); -} -#endif - -/************************************************************************** - * FUNCTION To Generate Hash by Chunk - **************************************************************************/ -static int sec_signfmt_image_read(ASF_FILE fp, char* part_name, uint32 seek_offset, char* read_buf, uint32 read_len) -{ - uint32 read_sz = 0; - uint32 ret = SEC_OK; - -#if DUMP_MORE_FOR_DEBUG - SMSG(true,"[%s] Read image for length %d at offset 0x%x\n",MOD,read_len,seek_offset); -#endif - - /* read from file */ - if (ASF_FILE_NULL != fp) - { - ASF_SEEK_SET(fp, seek_offset*sizeof(char)); - read_sz = ASF_READ(fp, read_buf, read_len); - - return read_sz; - } - /* read from mtd */ - else - { - if(SEC_OK != (ret = sec_dev_read_image ( pl2part(part_name), - (char*)read_buf, - seek_offset, - read_len, - NORMAL_ROM))) - { - SMSG(true,"[%s] read mtd '%s' fail at image offset 0x%x with length 0x%x\n",MOD,(char*)pl2part(part_name),seek_offset,read_len); - return 0; - } - - return read_len; - } -} - - -static int sec_signfmt_gen_hash_by_chunk(ASF_FILE img_fd, char* part_name, uint32 img_hash_off, uint32 img_hash_len, - uchar *final_hash_buf, SEC_CRYPTO_HASH_TYPE hash_type, uint32 chunk_size) -{ - uint32 br = 0; - uint32 ret = 0; - uchar *chunk_buf = NULL; - uchar *hash_tmp = NULL; - uchar *hash_comb = NULL; - uint32 seek_pos = 0; - uint32 hash_size = get_hash_size(hash_type); -#if DUMP_MORE_FOR_DEBUG - uint32 chunk_count = ((img_hash_len-1)/chunk_size)+1; -#endif - uint32 read_size = 0; - uint32 left_size = 0; - - if(!img_hash_len) - { - - SMSG(true,"[%s] hash length is zero, no need to do hash\n",MOD); - ret = -1; - memset(final_hash_buf, 0x00, hash_size); - goto end_error; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Hash size is %d (0x%x)\n",MOD, hash_size, hash_size); - SMSG(sec_info.bMsg,"[%s] Offset is %d (0x%x)\n",MOD, img_hash_off, img_hash_off); - SMSG(sec_info.bMsg,"[%s] Size is %d (0x%x)\n",MOD, img_hash_len, img_hash_len); - SMSG(sec_info.bMsg,"[%s] Chunk size is %d (0x%x)\n",MOD, chunk_size, chunk_size); - SMSG(sec_info.bMsg,"[%s] Chunk count is %d (0x%x)\n",MOD, chunk_count, chunk_count); -#endif - - /* allocate hash buffer */ - hash_tmp = ASF_MALLOC(hash_size); - hash_comb = ASF_MALLOC(hash_size*2); - memset(hash_tmp, 0x00, hash_size); - memset(hash_comb, 0x00, hash_size*2); - - /* allocate buffer with known chunk size */ - chunk_buf = ASF_MALLOC(chunk_size); - - /* caculate first hash */ - seek_pos = img_hash_off; - left_size = img_hash_len; - read_size = (left_size>=chunk_size)?chunk_size:left_size; - br = sec_signfmt_image_read(img_fd, part_name, seek_pos*sizeof(char), (char*)chunk_buf, read_size); - if(br != read_size) - { - SMSG(true,"[%s] read image content fail, read offset = '0x%x'\n",MOD,seek_pos); - ret = -2; - goto end_error; - } - if( sec_hash(chunk_buf,read_size,hash_tmp,hash_size) == -1) - { - SMSG(true,"[%s] hash fail, offset is '0x%x'(A)\n",MOD,seek_pos); - ret = -3; - goto end_error; - } - -#if DUMP_MORE_FOR_DEBUG - /* ------------------------------------- */ - /* dump hash value for debug */ - /* ------------------------------------- */ - SMSG(sec_info.bMsg,"[%s] Data value(4 bytes) ==>\n",MOD); - sec_signfmt_dump_buffer(chunk_buf, 4); - - SMSG(sec_info.bMsg,"[%s] Hash value(single) (0x%x): \n",MOD, seek_pos); - sec_signfmt_dump_buffer(hash_tmp, hash_size); -#endif - - /* copy to compose buffer (first block) */ - mcpy(hash_comb,hash_tmp,hash_size); - - /* move next */ - seek_pos += read_size; - left_size -= read_size; - - /* loop hash */ - while(left_size) - { - /* load data */ - read_size = (left_size>=chunk_size)?chunk_size:left_size; - br = sec_signfmt_image_read(img_fd, part_name, seek_pos*sizeof(char), (char*)chunk_buf, read_size); - - if(br != read_size) - { - SMSG(true,"[%s] read image content fail, read offset = '0x%x'\n",MOD,seek_pos); - ret = -4; - goto end_error; - } - - /* caculate this hash */ - if( sec_hash(chunk_buf,read_size,hash_tmp,hash_size) == -1) - { - SMSG(true,"[%s] hash fail, offset is '0x%x'(B)\n",MOD,seek_pos); - ret = -5; - goto end_error; - } - -#if DUMP_MORE_FOR_DEBUG - /* ------------------------------------- */ - /* dump hash value for debug */ - /* ------------------------------------- */ - SMSG(sec_info.bMsg,"[%s] Data value(4 bytes) ==>\n",MOD); - sec_signfmt_dump_buffer(chunk_buf, 4); - - SMSG(sec_info.bMsg,"[%s] Hash value(single) (0x%x): \n",MOD, seek_pos); - sec_signfmt_dump_buffer(hash_tmp, hash_size); -#endif - - /* compose two hash to buffer (second block) */ - mcpy(hash_comb+hash_size,hash_tmp,hash_size); - - /* caculate compose hash */ - if( sec_hash(hash_comb,hash_size*2,hash_tmp,hash_size) == -1) - { - SMSG(true,"[%s] hash fail, offset is '0x%x'(C)\n",MOD,seek_pos); - ret = -6; - goto end_error; - } - -#if DUMP_MORE_FOR_DEBUG - /* ------------------------------------- */ - /* dump hash value for debug */ - /* ------------------------------------- */ - SMSG(sec_info.bMsg,"[%s] Data value(4 bytes) ==>\n",MOD); - sec_signfmt_dump_buffer(chunk_buf, 4); - - SMSG(sec_info.bMsg,"[%s] Hash value(comp) (0x%x): \n",MOD, seek_pos); - sec_signfmt_dump_buffer(hash_tmp, hash_size); -#endif - - /* save this hash to compose buffer (first block) */ - mcpy(hash_comb,hash_tmp,hash_size); - - /* move next */ - seek_pos += read_size; - left_size -= read_size; - } - - /* ------------------------------------- */ - /* dump hash value for debug */ - /* ------------------------------------- */ -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Hash value(final) (0x%x): \n",MOD, seek_pos); - sec_signfmt_dump_buffer(hash_tmp, hash_size); -#endif - - /* copy hash */ - mcpy(final_hash_buf,hash_tmp,hash_size); - -end_error: - ASF_FREE(hash_comb); - ASF_FREE(chunk_buf); - ASF_FREE(hash_tmp); - - return ret; -} - - -/************************************************************************** - * FUNCTION To Search Extension Header - **************************************************************************/ -static uint32 sec_signfmt_search_extension(uchar *ext, uint32 ext_len, SEC_IMG_EXTENSTION_SET *ext_set) -{ - SEC_EXTENSTION_END_MARK *search_pattern; - uchar *d_ptr,*end_ptr; - uint32 hash_only_idx = 0; - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump extension data ============> START\n",MOD); - sec_signfmt_dump_buffer(ext,ext_len); - SMSG(sec_info.bMsg,"[%s] Dump extension data ============> END\n",MOD); -#endif - - end_ptr = ext + ext_len; - d_ptr = ext; - - while( d_ptr < end_ptr ) - { - search_pattern = (SEC_EXTENSTION_END_MARK *)d_ptr; - - if(search_pattern->magic!=SEC_EXTENSION_HEADER_MAGIC) - { - SMSG(true,"[%s] Image extension header magic wrong\n",MOD); - return ERR_SIGN_FORMAT_EXT_HDR_MAGIC_WRONG; - } - - switch(search_pattern->ext_type) - { - case SEC_EXT_HDR_CRYPTO: - ext_set->crypto = (SEC_EXTENSTION_CRYPTO *)d_ptr; - d_ptr += sizeof(SEC_EXTENSTION_CRYPTO); - break; - case SEC_EXT_HDR_FRAG_CFG: - ext_set->frag = (SEC_FRAGMENT_CFG *)d_ptr; - d_ptr += sizeof(SEC_FRAGMENT_CFG); - ext_set->hash_only = (SEC_EXTENSTION_HASH_ONLY **)ASF_MALLOC(ext_set->frag->frag_count*sizeof(SEC_EXTENSTION_HASH_ONLY *)); - break; - case SEC_EXT_HDR_HASH_ONLY: - ext_set->hash_only[hash_only_idx] = (SEC_EXTENSTION_HASH_ONLY *)d_ptr; - d_ptr += sizeof(SEC_EXTENSTION_HASH_ONLY) + get_hash_size(ext_set->hash_only[hash_only_idx]->sub_type); - hash_only_idx++; - break; - case SEC_EXT_HDR_END_MARK: - ext_set->end = (SEC_EXTENSTION_END_MARK *)d_ptr; - d_ptr += sizeof(SEC_EXTENSTION_END_MARK); - break; - case SEC_EXT_HDR_HASH_SIG: - default: - SMSG(true,"[%s] Image header type not support %d\n",MOD,search_pattern->ext_type); - return ERR_SIGN_FORMAT_EXT_TYPE_NOT_SUPPORT; - } - } - - if( ext_set->crypto == NULL || ext_set->frag == NULL || ext_set->hash_only == NULL || ext_set->end == NULL) - { - SMSG(true,"[%s] Some header is not searched\n",MOD); - return ERR_SIGN_FORMAT_EXT_HDR_NOT_FOUND; - } - - return SEC_OK; -} - - -/************************************************************************** - * FUNCTION To Get Hash Length - **************************************************************************/ -unsigned int sec_signfmt_get_hash_length_v3(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr, char *ext_buf) -{ - uint32 crypto_hdr_offset = 0; - uint32 read_sz = 0; - SEC_EXTENSTION_CRYPTO ext_crypto; - SEC_EXTENSTION_CRYPTO *ext_crypto_ptr = NULL; - uint32 ext_crypto_size = sizeof(SEC_EXTENSTION_CRYPTO); - - /* get from seccfg's extension header */ - if (ASF_FILE_NULL == fp) - { - ext_crypto_ptr = (SEC_EXTENSTION_CRYPTO *)(ext_buf + img_if->ext_offset + img_if->header.v3.signature_length); - - return get_hash_size((SEC_CRYPTO_HASH_TYPE)ext_crypto_ptr->hash_type); - } - /* get from file's extension header */ - else - { - memset(&ext_crypto, 0x00, ext_crypto_size); - - /* seek to crypto header offset */ - crypto_hdr_offset = file_img_hdr->signature_offset + file_img_hdr->signature_length; - - ASF_SEEK_SET(fp, crypto_hdr_offset); - - /* read crypto header */ - if (ext_crypto_size != (read_sz = ASF_READ(fp, (char*)&ext_crypto, ext_crypto_size))) - { - SMSG(true,"[%s] read sz '%d' != '%d'\n",MOD,read_sz,ext_crypto_size); - return -1; - } - - return get_hash_size((SEC_CRYPTO_HASH_TYPE)ext_crypto.hash_type); - } -} - -/************************************************************************** - * FUNCTION To Get Signature Length - **************************************************************************/ -unsigned int sec_signfmt_get_signature_length_v3(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr, char *ext_buf) -{ - uint32 crypto_hdr_offset = 0; - uint32 read_sz = 0; - SEC_EXTENSTION_CRYPTO ext_crypto; - SEC_EXTENSTION_CRYPTO *ext_crypto_ptr = NULL; - uint32 ext_crypto_size = sizeof(SEC_EXTENSTION_CRYPTO); - - /* get from seccfg's extension header */ - if (ASF_FILE_NULL == fp) - { - ext_crypto_ptr = (SEC_EXTENSTION_CRYPTO *)(ext_buf + img_if->ext_offset + img_if->header.v3.signature_length); - - return get_signature_size((SEC_CRYPTO_SIGNATURE_TYPE)ext_crypto_ptr->sig_type); - } - /* get from file's extension header */ - else - { - memset(&ext_crypto, 0x00, ext_crypto_size); - - /* seek to crypto header offset */ - crypto_hdr_offset = file_img_hdr->signature_offset + file_img_hdr->signature_length; - ASF_SEEK_SET(fp, crypto_hdr_offset); - - /* read crypto header */ - if (ext_crypto_size != (read_sz = ASF_READ(fp, (char*)&ext_crypto, ext_crypto_size))) - { - SMSG(true,"[%s] read sz '%d' != '%d'\n",MOD,read_sz,ext_crypto_size); - return -1; - } - - return get_signature_size((SEC_CRYPTO_SIGNATURE_TYPE)ext_crypto.sig_type); - } -} - -/************************************************************************** - * FUNCTION To Get Extension Length - **************************************************************************/ -unsigned int sec_signfmt_get_extension_length_v3(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr) -{ - /* the extension include signature + hash + extension header */ - - uint32 file_size = 0; - - /* get from seccfg's extension header */ - if (ASF_FILE_NULL == fp) - { - return img_if->ext_len; - } - /* get from file's extension header */ - else - { - ASF_SEEK_END(fp, 0); - file_size = ASF_FILE_POS(fp); - - return (file_size-SEC_IMG_HEADER_SIZE-file_img_hdr->image_length); - } -} - - -/************************************************************************** - * FUNCTION To Get Image Hash - **************************************************************************/ -int sec_signfmt_calculate_image_hash_v3(char* part_name, SECURE_IMG_INFO_V3 *img_if, char *final_hash_buf, - unsigned int hash_len, char *ext_buf) -{ - unsigned int ret = SEC_OK; - SEC_IMG_HEADER *img_hdr = (SEC_IMG_HEADER *)&img_if->header.v3; - SEC_IMG_EXTENSTION_SET ext_set; - uint32 ext_hdr_offset = 0; - uint32 ext_hdr_len = 0; - uchar *ext_hdr_buf = NULL; - uint32 hash_size = 0; - uint32 sig_size = 0; - uint32 i = 0; - uchar *cal_hash_buf = NULL; - uint32 cal_hash_buf_len = 0; - uchar *tmp_ptr = NULL; - uchar *verify_data = NULL; - uint32 verify_data_len = 0; - uint32 real_chunk_size = 0; - - /* ======================== */ - /* init check */ - /* ======================== */ -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump header ============> START\n",MOD); - sec_signfmt_dump_buffer((uchar*)img_hdr,sizeof(SEC_IMG_HEADER)); - SMSG(sec_info.bMsg,"[%s] Dump header ============> END\n",MOD); -#endif - - if (SEC_IMG_MAGIC != img_hdr->magic_number) - { - SMSG(true,"[%s] magic number is invalid '0x%x'\n",MOD,img_hdr->magic_number); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _magic_wrong_err; - } - - if (SEC_EXTENSION_MAGIC != img_hdr->sign_offset) - { - SMSG(true,"[%s] extension magic number is invalid '0x%x'\n",MOD,img_hdr->sign_offset); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _magic_wrong_err; - } - - /* ======================== */ - /* search for extension header */ - /* ======================== */ - memset(&ext_set, 0x00, sizeof(SEC_IMG_EXTENSTION_SET)); - ext_hdr_offset = img_if->ext_offset + img_hdr->signature_length; - ext_hdr_len = img_if->ext_len - img_hdr->signature_length; - ext_hdr_buf = (uchar*)(ext_buf + ext_hdr_offset); - if( SEC_OK != (ret = sec_signfmt_search_extension(ext_hdr_buf, ext_hdr_len, &ext_set)) ) - { - SMSG(true,"[%s] Image extension header not found\n",MOD); - goto _ext_hdr_search_fail; - } - hash_size = get_hash_size((SEC_CRYPTO_HASH_TYPE)ext_set.crypto->hash_type); - sig_size = get_signature_size((SEC_CRYPTO_SIGNATURE_TYPE)ext_set.crypto->sig_type); - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump ext hash value ============> START\n",MOD); - for(i=0;i<ext_set.frag->frag_count;i++) - { - SMSG(sec_info.bMsg,"[%s] Dump EXT hash [%d]\n",MOD,i); - sec_signfmt_dump_buffer(ext_set.hash_only[i]->hash_data,hash_size); - } - SMSG(sec_info.bMsg,"[%s] Dump ext hash value ============> END\n",MOD); -#endif - - /* ======================== */ - /* calculate each hash by chunk */ - /* ======================== */ - cal_hash_buf_len = hash_size*ext_set.frag->frag_count; - cal_hash_buf = (uchar*)ASF_MALLOC(cal_hash_buf_len); - if (NULL == cal_hash_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_cal_buf_fail; - } - memset(cal_hash_buf, 0x00, cal_hash_buf_len); -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] dump reset data\n",MOD); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - tmp_ptr = cal_hash_buf; -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Total cal hash length is %d\n",MOD,cal_hash_buf_len); -#endif - for(i=0;i<ext_set.frag->frag_count;i++) - { - memset(tmp_ptr, 0x00, hash_size); - if(ext_set.frag->chunk_size == 0) - { - real_chunk_size = ext_set.hash_only[i]->hash_len; - } - else - { - real_chunk_size = ext_set.frag->chunk_size; - } - if(sec_signfmt_gen_hash_by_chunk(ASF_FILE_NULL, part_name, ext_set.hash_only[i]->hash_offset, ext_set.hash_only[i]->hash_len, - tmp_ptr, ext_set.hash_only[i]->sub_type, real_chunk_size)!=0) - { - ret = ERR_SIGN_FORMAT_CAL_HASH_BY_CHUNK_FAIL; - goto _gen_hash_by_chunk_fail; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump CAL hash right after: [%d], offset is 0x%x\n",MOD,i,tmp_ptr); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - tmp_ptr += hash_size; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump CAL hash right after all done, offset is 0x%x\n",MOD,tmp_ptr); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump cal hash value ============> START\n",MOD); - tmp_ptr = cal_hash_buf; - for(i=0;i<ext_set.frag->frag_count;i++) - { - SMSG(true,"[%s] Dump CAL hash [%d]\n",MOD,i); - sec_signfmt_dump_buffer(tmp_ptr,hash_size); - tmp_ptr += hash_size; - } - SMSG(sec_info.bMsg,"[%s] Dump cal hash value ============> END\n",MOD); -#endif - - /* ======================== */ - /* copy cal hash to extension header */ - /* ======================== */ - tmp_ptr = cal_hash_buf; - for(i=0;i<ext_set.frag->frag_count;i++) - { - mcpy(ext_set.hash_only[i]->hash_data, tmp_ptr, hash_size); - tmp_ptr += hash_size; - } - - /* ======================== */ - /* compose final verify buffer */ - /* ======================== */ - verify_data_len = SEC_IMG_HEADER_SIZE+cal_hash_buf_len+ext_hdr_len; - verify_data = (uchar*)ASF_MALLOC(verify_data_len); - if (NULL == cal_hash_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_verify_buf_fail; - } - tmp_ptr = verify_data; - /* copy header */ - mcpy(tmp_ptr,img_hdr,SEC_IMG_HEADER_SIZE); - tmp_ptr += SEC_IMG_HEADER_SIZE; - /* copy cal hash */ - for(i=0;i<ext_set.frag->frag_count;i++) - { - mcpy(tmp_ptr,cal_hash_buf+i*hash_size,hash_size); - tmp_ptr += hash_size; - } - /* copy extension header */ - mcpy(tmp_ptr,ext_hdr_buf,ext_hdr_len); - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump verify data (%d):\n",MOD,verify_data_len); - sec_signfmt_dump_buffer(verify_data,verify_data_len); -#endif - - /* ======================== */ - /* generate final hash */ - /* ======================== */ - - /* hash */ - SMSG(sec_info.bMsg,"[%s] generate hash ... \n",MOD); - if(SEC_OK != (ret = sec_hash(verify_data, verify_data_len, (uchar*)final_hash_buf, hash_len ))) - { - SMSG(true,"[%s] generate hash fail\n\n",MOD); - ret = ERR_SIGN_FORMAT_GENERATE_HASH_FAIL; - goto _hash_fail; - } - - /* ================== */ - /* dump hash data */ - /* ================== */ - SMSG(sec_info.bMsg,"[%s] dump hash data\n",MOD); - dump_buf((uchar*)final_hash_buf,hash_len); - - SMSG(sec_info.bMsg,"[%s] generate hash pass\n\n",MOD); - -_hash_fail: - ASF_FREE(verify_data); -_malloc_verify_buf_fail: -_gen_hash_by_chunk_fail: - ASF_FREE(cal_hash_buf); -_malloc_cal_buf_fail: -_ext_hdr_search_fail: -_magic_wrong_err: - - return ret; -} - -/************************************************************************** - * FUNCTIONS To Verify File - **************************************************************************/ -int sec_signfmt_verify_file_v3(ASF_FILE fp, SEC_IMG_HEADER *img_hdr) -{ - uint32 ret = SEC_OK; - uint32 final_hash_sig_len = 0; - uchar *final_hash_sig_buf = NULL; - uint32 read_sz = 0; - SEC_IMG_EXTENSTION_SET ext_set; - uint32 ext_hdr_offset = 0; - uint32 ext_hdr_len = 0; - uchar *ext_hdr_buf = NULL; - uint32 file_size = 0; - uint32 hash_size = 0; - uint32 sig_size = 0; - uint32 i = 0; - uchar *cal_hash_buf = NULL; - uint32 cal_hash_buf_len = 0; - uchar *tmp_ptr = NULL; - uchar *verify_data = NULL; - uint32 verify_data_len = 0; - uint32 real_chunk_size = 0; - - /* ======================== */ - /* init check */ - /* ======================== */ -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump header ============> START\n",MOD); - sec_signfmt_dump_buffer((uchar*)img_hdr,sizeof(SEC_IMG_HEADER)); - SMSG(sec_info.bMsg,"[%s] Dump header ============> END\n",MOD); -#endif - - if (SEC_IMG_MAGIC != img_hdr->magic_number) - { - SMSG(true,"[%s] magic number is invalid '0x%x'\n",MOD,img_hdr->magic_number); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _magic_wrong_err; - } - - if (SEC_EXTENSION_MAGIC != img_hdr->sign_offset) - { - SMSG(true,"[%s] extension magic number is invalid '0x%x'\n",MOD,img_hdr->sign_offset); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _magic_wrong_err; - } - - /* ======================== */ - /* locate final signature and hash */ - /* ======================== */ - final_hash_sig_len = img_hdr->signature_length; - final_hash_sig_buf = (uchar*)ASF_MALLOC(final_hash_sig_len); - if (NULL == final_hash_sig_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_hash_sig_fail; - } - ASF_SEEK_SET(fp, img_hdr->signature_offset); - - if (final_hash_sig_len != (read_sz = ASF_READ(fp, final_hash_sig_buf, final_hash_sig_len))) - { - SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,final_hash_sig_len); - ret = ERR_FS_READ_SIZE_FAIL; - goto _read_hash_sig_fail; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump sign and hash value ============> START\n",MOD); - sec_signfmt_dump_buffer(final_hash_sig_buf,final_hash_sig_len); - SMSG(sec_info.bMsg,"[%s] Dump sign and hash value ============> END\n",MOD); -#endif - - /* read file size */ - ASF_SEEK_END(fp, 0); - file_size = ASF_FILE_POS(fp); - - /* ======================== */ - /* search for extension header */ - /* ======================== */ - memset(&ext_set, 0x00, sizeof(SEC_IMG_EXTENSTION_SET)); - ext_hdr_offset = SEC_IMG_HEADER_SIZE + img_hdr->image_length + img_hdr->signature_length; - ext_hdr_len = file_size - ext_hdr_offset; - ext_hdr_buf = (uchar*)ASF_MALLOC(ext_hdr_len); - if (NULL == ext_hdr_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_ext_hdr_fail; - } - ASF_SEEK_SET(fp, ext_hdr_offset); - - if (ext_hdr_len != (read_sz = ASF_READ(fp, ext_hdr_buf, ext_hdr_len))) - { - SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,ext_hdr_len); - ret = ERR_FS_READ_SIZE_FAIL; - goto _read_ext_hdr_fail; - } - if( SEC_OK != (ret = sec_signfmt_search_extension(ext_hdr_buf, ext_hdr_len, &ext_set)) ) - { - SMSG(true,"[%s] Image extension header not found\n",MOD); - goto _ext_hdr_search_fail; - } - - hash_size = get_hash_size((SEC_CRYPTO_HASH_TYPE)ext_set.crypto->hash_type); - sig_size = get_signature_size((SEC_CRYPTO_SIGNATURE_TYPE)ext_set.crypto->sig_type); - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump ext hash value ============> START\n",MOD); - for(i=0;i<ext_set.frag->frag_count;i++) - { - SMSG(sec_info.bMsg,"[%s] Dump EXT hash [%d]\n",MOD,i); - sec_signfmt_dump_buffer(ext_set.hash_only[i]->hash_data,hash_size); - } - SMSG(sec_info.bMsg,"[%s] Dump ext hash value ============> END\n",MOD); -#endif - - /* ======================== */ - /* calculate each hash by chunk */ - /* ======================== */ - cal_hash_buf_len = hash_size*ext_set.frag->frag_count; - cal_hash_buf = (uchar*)ASF_MALLOC(cal_hash_buf_len); - if (NULL == cal_hash_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_cal_buf_fail; - } - memset(cal_hash_buf, 0x00, cal_hash_buf_len); -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] dump reset data\n",MOD); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - tmp_ptr = cal_hash_buf; -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Total cal hash length is %d\n",MOD,cal_hash_buf_len); -#endif - for(i=0;i<ext_set.frag->frag_count;i++) - { - memset(tmp_ptr, 0x00, hash_size); - if(ext_set.frag->chunk_size == 0) - { - real_chunk_size = ext_set.hash_only[i]->hash_len; - } - else - { - real_chunk_size = ext_set.frag->chunk_size; - } - if(sec_signfmt_gen_hash_by_chunk(fp, NULL, SEC_IMG_HEADER_SIZE+ext_set.hash_only[i]->hash_offset, ext_set.hash_only[i]->hash_len, - tmp_ptr, ext_set.hash_only[i]->sub_type, real_chunk_size)!=0) - { - ret = ERR_SIGN_FORMAT_CAL_HASH_BY_CHUNK_FAIL; - goto _gen_hash_by_chunk_fail; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump CAL hash right after: [%d], offset is 0x%x\n",MOD,i,tmp_ptr); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - tmp_ptr += hash_size; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump CAL hash right after all done, offset is 0x%x\n",MOD,tmp_ptr); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump cal hash value ============> START\n",MOD); - tmp_ptr = cal_hash_buf; - for(i=0;i<ext_set.frag->frag_count;i++) - { - SMSG(sec_info.bMsg,"[%s] Dump CAL hash [%d]\n",MOD,i); - sec_signfmt_dump_buffer(tmp_ptr,hash_size); - tmp_ptr += hash_size; - } - SMSG(sec_info.bMsg,"[%s] Dump cal hash value ============> END\n",MOD); -#endif - - /* ======================== */ - /* compose final verify buffer */ - /* ======================== */ - verify_data_len = SEC_IMG_HEADER_SIZE+cal_hash_buf_len+ext_hdr_len; - verify_data = (uchar*)ASF_MALLOC(verify_data_len); - if (NULL == cal_hash_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_verify_buf_fail; - } - tmp_ptr = verify_data; - /* copy header */ - mcpy(tmp_ptr,img_hdr,SEC_IMG_HEADER_SIZE); - tmp_ptr += SEC_IMG_HEADER_SIZE; - /* copy cal hash */ - for(i=0;i<ext_set.frag->frag_count;i++) - { - mcpy(tmp_ptr,cal_hash_buf+i*hash_size,hash_size); - tmp_ptr += hash_size; - } - /* copy extension header */ - mcpy(tmp_ptr,ext_hdr_buf,ext_hdr_len); - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump verify data (%d):\n",MOD,verify_data_len); - sec_signfmt_dump_buffer(verify_data,verify_data_len); -#endif -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump signature data (%d):\n",MOD,sig_size); - sec_signfmt_dump_buffer(final_hash_sig_buf,sig_size); -#endif - - osal_verify_lock(); - - /* ======================== */ - /* verify buffer */ - /* ======================== */ - SMSG(sec_info.bMsg,"[%s] verify (lock)... \n",MOD); - if(SEC_OK != (ret = sec_verify(verify_data, verify_data_len, final_hash_sig_buf, sig_size ))) - { - osal_verify_unlock(); - SMSG(true,"[%s] verify fail (unlock), ret is %d\n\n",MOD,ret); - goto _verify_fail; - } - - osal_verify_unlock(); - - SMSG(sec_info.bMsg,"[%s] verify pass (unlock)\n\n",MOD); - -_verify_fail: - ASF_FREE(verify_data); -_malloc_verify_buf_fail: -_gen_hash_by_chunk_fail: - ASF_FREE(cal_hash_buf); -_malloc_cal_buf_fail: -_ext_hdr_search_fail: -_read_ext_hdr_fail: - ASF_FREE(ext_hdr_buf); -_malloc_ext_hdr_fail: -_read_hash_sig_fail: - ASF_FREE(final_hash_sig_buf); -_malloc_hash_sig_fail: -_magic_wrong_err: - - return ret; -} - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_signfmt_v4.c b/drivers/misc/mediatek/masp/asf/core/sec_signfmt_v4.c deleted file mode 100644 index 439e5dc74..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_signfmt_v4.c +++ /dev/null @@ -1,877 +0,0 @@ -#include "sec_sign_extension.h" -#include "sec_signfmt_v4.h" -#include "sec_signfmt_util.h" -#include "sec_log.h" -#include "sec_error.h" -#include "sec_boot_lib.h" -#include "sec_wrapper.h" -#include "sec_mtd_util.h" -#include <mach/sec_osal.h> - -/************************************************************************** - * MODULE NAME - **************************************************************************/ -#define MOD "SFMT_V4" - - -/****************************************************************************** - * IMAGE VERIFICATION MEMORY DUMP FUNCTIONS - ******************************************************************************/ -#define DUMP_MORE_FOR_DEBUG 0 - -static u64 sec_get_u64(uint32 high, uint32 low) -{ - u64 value = 0; - - value = high; - value = (value << 32) & 0xFFFFFFFF00000000ULL; - value += low; - - return value; -} - -#if DUMP_MORE_FOR_DEBUG -static void sec_signfmt_dump_buffer(uchar* buf, uint32 len) -{ - uint32 i = 0; - - for (i =1; i <len+1; i++) - { - SMSG(true,"0x%x,",buf[i-1]); - - if(0 == (i%8)) - SMSG(true,"\n"); - } - - if(0 != (len%8)) - SMSG(true,"\n"); -} -#endif - -/************************************************************************** - * FUNCTION To Generate Hash by Chunk - **************************************************************************/ -static int sec_signfmt_image_read_64(ASF_FILE fp, char* part_name, u64 seek_offset, char* read_buf, uint32 read_len) -{ - uint32 read_sz = 0; - uint32 ret = SEC_OK; - -#if DUMP_MORE_FOR_DEBUG - SMSG(true,"[%s] Read image for length %d at offset 0x%llx\n",MOD,read_len,seek_offset); -#endif - - /* read from file */ - if (ASF_FILE_NULL != fp) - { - ASF_SEEK_SET(fp, seek_offset*sizeof(char)); - read_sz = ASF_READ(fp, read_buf, read_len); - - return read_sz; - } - /* read from mtd */ - else - { - if(SEC_OK != (ret = sec_dev_read_image ( pl2part(part_name), - (char*)read_buf, - seek_offset, - read_len, - NORMAL_ROM))) - { - SMSG(true,"[%s] read mtd '%s' fail at image offset 0x%llx with length 0x%x\n",MOD,(char*)pl2part(part_name),seek_offset,read_len); - return 0; - } - - return read_len; - } -} - - -static int sec_signfmt_gen_hash_by_chunk_64(ASF_FILE img_fd, char* part_name, u64 img_hash_off, u64 img_hash_len, - uchar *final_hash_buf, SEC_CRYPTO_HASH_TYPE hash_type, uint32 chunk_size) -{ - uint32 br = 0; - uint32 ret = 0; - uchar *chunk_buf = NULL; - uchar *hash_tmp = NULL; - uchar *hash_comb = NULL; - u64 seek_pos = 0; - uint32 hash_size = get_hash_size(hash_type); -#if DUMP_MORE_FOR_DEBUG - u64 chunk_count = ((img_hash_len-1)/chunk_size)+1; -#endif - uint32 read_size = 0; - u64 left_size = 0; - - if(!img_hash_len) - { - - SMSG(true,"[%s] hash length is zero, no need to do hash\n",MOD); - ret = -1; - memset(final_hash_buf, 0x00, hash_size); - goto end_error; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Hash size is %d (0x%x)\n",MOD, hash_size, hash_size); - SMSG(sec_info.bMsg,"[%s] Offset is %d (0x%llx)\n",MOD, img_hash_off, img_hash_off); - SMSG(sec_info.bMsg,"[%s] Size is %d (0x%llx)\n",MOD, img_hash_len, img_hash_len); - SMSG(sec_info.bMsg,"[%s] Chunk size is %d (0x%x)\n",MOD, chunk_size, chunk_size); - SMSG(sec_info.bMsg,"[%s] Chunk count is %d (0x%llx)\n",MOD, chunk_count, chunk_count); -#endif - - /* allocate hash buffer */ - hash_tmp = ASF_MALLOC(hash_size); - hash_comb = ASF_MALLOC(hash_size*2); - memset(hash_tmp, 0x00, hash_size); - memset(hash_comb, 0x00, hash_size*2); - - /* allocate buffer with known chunk size */ - chunk_buf = ASF_MALLOC(chunk_size); - - /* caculate first hash */ - seek_pos = img_hash_off; - left_size = img_hash_len; - read_size = (left_size>=chunk_size)?chunk_size:(left_size & 0xFFFFFFFF); - br = sec_signfmt_image_read_64(img_fd, part_name, seek_pos*sizeof(char), (char*)chunk_buf, read_size); - if(br != read_size) - { - SMSG(true,"[%s] read image content fail, read offset = '0x%llx'\n",MOD,seek_pos); - ret = -2; - goto end_error; - } - if( sec_hash(chunk_buf,read_size,hash_tmp,hash_size) == -1) - { - SMSG(true,"[%s] hash fail, offset is '0x%llx'(A)\n",MOD,seek_pos); - ret = -3; - goto end_error; - } - -#if DUMP_MORE_FOR_DEBUG - /* ------------------------------------- */ - /* dump hash value for debug */ - /* ------------------------------------- */ - SMSG(sec_info.bMsg,"[%s] Data value(4 bytes) ==>\n",MOD); - sec_signfmt_dump_buffer(chunk_buf, 4); - - SMSG(sec_info.bMsg,"[%s] Hash value(single) (0x%llx): \n",MOD, seek_pos); - sec_signfmt_dump_buffer(hash_tmp, hash_size); -#endif - - /* copy to compose buffer (first block) */ - mcpy(hash_comb,hash_tmp,hash_size); - - /* move next */ - seek_pos += read_size; - left_size -= read_size; - - /* loop hash */ - while(left_size) - { - /* load data */ - read_size = (left_size>=chunk_size)?chunk_size:(left_size & 0xFFFFFFFF); - br = sec_signfmt_image_read_64(img_fd, part_name, seek_pos*sizeof(char), (char*)chunk_buf, read_size); - - if(br != read_size) - { - SMSG(true,"[%s] read image content fail, read offset = '0x%llx'\n",MOD,seek_pos); - ret = -4; - goto end_error; - } - - /* caculate this hash */ - if( sec_hash(chunk_buf,read_size,hash_tmp,hash_size) == -1) - { - SMSG(true,"[%s] hash fail, offset is '0x%llx'(B)\n",MOD,seek_pos); - ret = -5; - goto end_error; - } - -#if DUMP_MORE_FOR_DEBUG - /* ------------------------------------- */ - /* dump hash value for debug */ - /* ------------------------------------- */ - SMSG(sec_info.bMsg,"[%s] Data value(4 bytes) ==>\n",MOD); - sec_signfmt_dump_buffer(chunk_buf, 4); - - SMSG(sec_info.bMsg,"[%s] Hash value(single) (0x%llx): \n",MOD, seek_pos); - sec_signfmt_dump_buffer(hash_tmp, hash_size); -#endif - - /* compose two hash to buffer (second block) */ - mcpy(hash_comb+hash_size,hash_tmp,hash_size); - - /* caculate compose hash */ - if( sec_hash(hash_comb,hash_size*2,hash_tmp,hash_size) == -1) - { - SMSG(true,"[%s] hash fail, offset is '0x%llx'(C)\n",MOD,seek_pos); - ret = -6; - goto end_error; - } - -#if DUMP_MORE_FOR_DEBUG - /* ------------------------------------- */ - /* dump hash value for debug */ - /* ------------------------------------- */ - SMSG(sec_info.bMsg,"[%s] Data value(4 bytes) ==>\n",MOD); - sec_signfmt_dump_buffer(chunk_buf, 4); - - SMSG(sec_info.bMsg,"[%s] Hash value(comp) (0x%llx): \n",MOD, seek_pos); - sec_signfmt_dump_buffer(hash_tmp, hash_size); -#endif - - /* save this hash to compose buffer (first block) */ - mcpy(hash_comb,hash_tmp,hash_size); - - /* move next */ - seek_pos += read_size; - left_size -= read_size; - } - - /* ------------------------------------- */ - /* dump hash value for debug */ - /* ------------------------------------- */ -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Hash value(final) (0x%llx): \n",MOD, seek_pos); - sec_signfmt_dump_buffer(hash_tmp, hash_size); -#endif - - /* copy hash */ - mcpy(final_hash_buf,hash_tmp,hash_size); - -end_error: - ASF_FREE(hash_comb); - ASF_FREE(chunk_buf); - ASF_FREE(hash_tmp); - - return ret; -} - - -/************************************************************************** - * FUNCTION To Search Extension Header - **************************************************************************/ -static uint32 sec_signfmt_search_extension_v4(uchar *ext, uint32 ext_len, SEC_IMG_EXTENSTION_SET *ext_set) -{ - SEC_EXTENSTION_END_MARK *search_pattern; - uchar *d_ptr,*end_ptr; - uint32 hash_only_idx = 0; - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump extension data ============> START\n",MOD); - sec_signfmt_dump_buffer(ext,ext_len); - SMSG(sec_info.bMsg,"[%s] Dump extension data ============> END\n",MOD); -#endif - - end_ptr = ext + ext_len; - d_ptr = ext; - - while( d_ptr < end_ptr ) - { - search_pattern = (SEC_EXTENSTION_END_MARK *)d_ptr; - - if(search_pattern->magic!=SEC_EXTENSION_HEADER_MAGIC) - { - SMSG(true,"[%s] Image extension header magic wrong\n",MOD); - return ERR_SIGN_FORMAT_EXT_HDR_MAGIC_WRONG; - } - - switch(search_pattern->ext_type) - { - case SEC_EXT_HDR_CRYPTO: - ext_set->crypto = (SEC_EXTENSTION_CRYPTO *)d_ptr; - d_ptr += sizeof(SEC_EXTENSTION_CRYPTO); - break; - case SEC_EXT_HDR_FRAG_CFG: - ext_set->frag = (SEC_FRAGMENT_CFG *)d_ptr; - d_ptr += sizeof(SEC_FRAGMENT_CFG); - ext_set->hash_only_64 = (SEC_EXTENSTION_HASH_ONLY_64 **)ASF_MALLOC(ext_set->frag->frag_count*sizeof(SEC_EXTENSTION_HASH_ONLY_64 *)); - break; - case SEC_EXT_HDR_HASH_ONLY_64: - ext_set->hash_only_64[hash_only_idx] = (SEC_EXTENSTION_HASH_ONLY_64 *)d_ptr; - d_ptr += sizeof(SEC_EXTENSTION_HASH_ONLY_64) + get_hash_size(ext_set->hash_only_64[hash_only_idx]->sub_type); - hash_only_idx++; - break; - case SEC_EXT_HDR_END_MARK: - ext_set->end = (SEC_EXTENSTION_END_MARK *)d_ptr; - d_ptr += sizeof(SEC_EXTENSTION_END_MARK); - break; - case SEC_EXT_HDR_HASH_SIG: - default: - SMSG(true,"[%s] Image header type not support %d\n",MOD,search_pattern->ext_type); - return ERR_SIGN_FORMAT_EXT_TYPE_NOT_SUPPORT; - } - } - - if( ext_set->crypto == NULL || ext_set->frag == NULL || ext_set->hash_only_64 == NULL || ext_set->end == NULL) - { - SMSG(true,"[%s] Some header is not searched\n",MOD); - return ERR_SIGN_FORMAT_EXT_HDR_NOT_FOUND; - } - - return SEC_OK; -} - - -/************************************************************************** - * FUNCTION To Get Hash Length - **************************************************************************/ -unsigned int sec_signfmt_get_hash_length_v4(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr_p, char *ext_buf) -{ - u64 crypto_hdr_offset = 0; - uint32 read_sz = 0; - SEC_EXTENSTION_CRYPTO ext_crypto; - SEC_EXTENSTION_CRYPTO *ext_crypto_ptr = NULL; - uint32 ext_crypto_size = sizeof(SEC_EXTENSTION_CRYPTO); - SEC_IMG_HEADER_V4 *file_img_hdr = (SEC_IMG_HEADER_V4*)file_img_hdr_p; - - /* get from seccfg's extension header */ - if (ASF_FILE_NULL == fp) - { - ext_crypto_ptr = (SEC_EXTENSTION_CRYPTO *)(ext_buf + img_if->ext_offset + img_if->header.v4.signature_length); - - return get_hash_size((SEC_CRYPTO_HASH_TYPE)ext_crypto_ptr->hash_type); - } - /* get from file's extension header */ - else - { - memset(&ext_crypto, 0x00, ext_crypto_size); - - /* seek to crypto header offset */ - crypto_hdr_offset = sec_get_u64(file_img_hdr->image_length_high,file_img_hdr->image_length_low); - crypto_hdr_offset += file_img_hdr->image_offset; - crypto_hdr_offset += file_img_hdr->signature_length; - - ASF_SEEK_SET(fp, crypto_hdr_offset); - - /* read crypto header */ - if (ext_crypto_size != (read_sz = ASF_READ(fp, (char*)&ext_crypto, ext_crypto_size))) - { - SMSG(true,"[%s] read sz '%d' != '%d'\n",MOD,read_sz,ext_crypto_size); - return -1; - } - - return get_hash_size((SEC_CRYPTO_HASH_TYPE)ext_crypto.hash_type); - } -} - -/************************************************************************** - * FUNCTION To Get Signature Length - **************************************************************************/ -unsigned int sec_signfmt_get_signature_length_v4(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr_p, char *ext_buf) -{ - uint32 crypto_hdr_offset = 0; - uint32 read_sz = 0; - SEC_EXTENSTION_CRYPTO ext_crypto; - SEC_EXTENSTION_CRYPTO *ext_crypto_ptr = NULL; - uint32 ext_crypto_size = sizeof(SEC_EXTENSTION_CRYPTO); - SEC_IMG_HEADER_V4 *file_img_hdr = (SEC_IMG_HEADER_V4*)file_img_hdr_p; - - /* get from seccfg's extension header */ - if (ASF_FILE_NULL == fp) - { - ext_crypto_ptr = (SEC_EXTENSTION_CRYPTO *)(ext_buf + img_if->ext_offset + img_if->header.v4.signature_length); - - return get_signature_size((SEC_CRYPTO_SIGNATURE_TYPE)ext_crypto_ptr->sig_type); - } - /* get from file's extension header */ - else - { - memset(&ext_crypto, 0x00, ext_crypto_size); - - /* seek to crypto header offset */ - crypto_hdr_offset = sec_get_u64(file_img_hdr->image_length_high,file_img_hdr->image_length_low); - crypto_hdr_offset += file_img_hdr->image_offset; - crypto_hdr_offset += file_img_hdr->signature_length; - ASF_SEEK_SET(fp, crypto_hdr_offset); - - /* read crypto header */ - if (ext_crypto_size != (read_sz = ASF_READ(fp, (char*)&ext_crypto, ext_crypto_size))) - { - SMSG(true,"[%s] read sz '%d' != '%d'\n",MOD,read_sz,ext_crypto_size); - return -1; - } - - return get_signature_size((SEC_CRYPTO_SIGNATURE_TYPE)ext_crypto.sig_type); - } -} - -/************************************************************************** - * FUNCTION To Get Extension Length - **************************************************************************/ -unsigned int sec_signfmt_get_extension_length_v4(SECURE_IMG_INFO_V3 *img_if, ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr_p) -{ - /* the extension include signature + hash + extension header */ - - u64 file_size = 0; - SEC_IMG_HEADER_V4 *file_img_hdr = (SEC_IMG_HEADER_V4*)file_img_hdr_p; - - /* get from seccfg's extension header */ - if (ASF_FILE_NULL == fp) - { - return img_if->ext_len; - } - /* get from file's extension header */ - else - { - ASF_SEEK_END(fp, 0); - file_size = ASF_FILE_POS(fp); - - file_size -= SEC_IMG_HEADER_SIZE; - file_size -= sec_get_u64(file_img_hdr->image_length_high,file_img_hdr->image_length_low); - - return (file_size & 0xFFFFFFFF); - } -} - - -/************************************************************************** - * FUNCTION To Get Image Hash - **************************************************************************/ -int sec_signfmt_calculate_image_hash_v4(char* part_name, SECURE_IMG_INFO_V3 *img_if, char *final_hash_buf, - unsigned int hash_len, char *ext_buf) -{ - unsigned int ret = SEC_OK; - SEC_IMG_HEADER_V4 *img_hdr = (SEC_IMG_HEADER_V4 *)&img_if->header.v4; - SEC_IMG_EXTENSTION_SET ext_set; - uint32 ext_hdr_offset = 0; - uint32 ext_hdr_len = 0; - uchar *ext_hdr_buf = NULL; - uint32 hash_size = 0; - uint32 sig_size = 0; - uint32 i = 0; - uchar *cal_hash_buf = NULL; - uint32 cal_hash_buf_len = 0; - uchar *tmp_ptr = NULL; - uchar *verify_data = NULL; - uint32 verify_data_len = 0; - uint32 real_chunk_size = 0; - - /* ======================== */ - /* init check */ - /* ======================== */ -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump header ============> START\n",MOD); - sec_signfmt_dump_buffer((uchar*)img_hdr,sizeof(SEC_IMG_HEADER_V4)); - SMSG(sec_info.bMsg,"[%s] Dump header ============> END\n",MOD); -#endif - - if (SEC_IMG_MAGIC != img_hdr->magic_number) - { - SMSG(true,"[%s] magic number is invalid '0x%x'\n",MOD,img_hdr->magic_number); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _magic_wrong_err; - } - - if (SEC_EXTENSION_MAGIC_V4 != img_hdr->ext_magic) - { - SMSG(true,"[%s] extension magic number is invalid '0x%x'\n",MOD,img_hdr->ext_magic); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _magic_wrong_err; - } - - /* ======================== */ - /* search for extension header */ - /* ======================== */ - memset(&ext_set, 0x00, sizeof(SEC_IMG_EXTENSTION_SET)); - ext_hdr_offset = img_if->ext_offset + img_hdr->signature_length; - ext_hdr_len = img_if->ext_len - img_hdr->signature_length; - ext_hdr_buf = (uchar*)(ext_buf + ext_hdr_offset); - if( SEC_OK != (ret = sec_signfmt_search_extension_v4(ext_hdr_buf, ext_hdr_len, &ext_set)) ) - { - SMSG(true,"[%s] Image extension header not found\n",MOD); - goto _ext_hdr_search_fail; - } - hash_size = get_hash_size((SEC_CRYPTO_HASH_TYPE)ext_set.crypto->hash_type); - sig_size = get_signature_size((SEC_CRYPTO_SIGNATURE_TYPE)ext_set.crypto->sig_type); - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump ext hash value ============> START\n",MOD); - for(i=0;i<ext_set.frag->frag_count;i++) - { - SMSG(sec_info.bMsg,"[%s] Dump EXT hash [%d]\n",MOD,i); - sec_signfmt_dump_buffer(ext_set.hash_only_64[i]->hash_data,hash_size); - } - SMSG(sec_info.bMsg,"[%s] Dump ext hash value ============> END\n",MOD); -#endif - - /* ======================== */ - /* calculate each hash by chunk */ - /* ======================== */ - cal_hash_buf_len = hash_size*ext_set.frag->frag_count; - cal_hash_buf = (uchar*)ASF_MALLOC(cal_hash_buf_len); - if (NULL == cal_hash_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_cal_buf_fail; - } - memset(cal_hash_buf, 0x00, cal_hash_buf_len); -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] dump reset data\n",MOD); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - tmp_ptr = cal_hash_buf; -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Total cal hash length is %d\n",MOD,cal_hash_buf_len); -#endif - for(i=0;i<ext_set.frag->frag_count;i++) - { - memset(tmp_ptr, 0x00, hash_size); - if(ext_set.frag->chunk_size == 0) - { - real_chunk_size = ext_set.hash_only_64[i]->hash_len_64 & 0x00000000FFFFFFFFULL; - } - else - { - real_chunk_size = ext_set.frag->chunk_size; - } - if(sec_signfmt_gen_hash_by_chunk_64(ASF_FILE_NULL, part_name, ext_set.hash_only_64[i]->hash_offset_64, ext_set.hash_only_64[i]->hash_len_64, - tmp_ptr, ext_set.hash_only_64[i]->sub_type, real_chunk_size)!=0) - { - ret = ERR_SIGN_FORMAT_CAL_HASH_BY_CHUNK_FAIL; - goto _gen_hash_by_chunk_fail; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump CAL hash right after: [%d], offset is 0x%x\n",MOD,i,tmp_ptr); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - tmp_ptr += hash_size; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump CAL hash right after all done, offset is 0x%x\n",MOD,tmp_ptr); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump cal hash value ============> START\n",MOD); - tmp_ptr = cal_hash_buf; - for(i=0;i<ext_set.frag->frag_count;i++) - { - SMSG(true,"[%s] Dump CAL hash [%d]\n",MOD,i); - sec_signfmt_dump_buffer(tmp_ptr,hash_size); - tmp_ptr += hash_size; - } - SMSG(sec_info.bMsg,"[%s] Dump cal hash value ============> END\n",MOD); -#endif - - /* ======================== */ - /* copy cal hash to extension header */ - /* ======================== */ - tmp_ptr = cal_hash_buf; - for(i=0;i<ext_set.frag->frag_count;i++) - { - mcpy(ext_set.hash_only_64[i]->hash_data, tmp_ptr, hash_size); - tmp_ptr += hash_size; - } - - /* ======================== */ - /* compose final verify buffer */ - /* ======================== */ - verify_data_len = SEC_IMG_HEADER_SIZE+cal_hash_buf_len+ext_hdr_len; - verify_data = (uchar*)ASF_MALLOC(verify_data_len); - if (NULL == cal_hash_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_verify_buf_fail; - } - tmp_ptr = verify_data; - /* copy header */ - mcpy(tmp_ptr,img_hdr,SEC_IMG_HEADER_SIZE); - tmp_ptr += SEC_IMG_HEADER_SIZE; - /* copy cal hash */ - for(i=0;i<ext_set.frag->frag_count;i++) - { - mcpy(tmp_ptr,cal_hash_buf+i*hash_size,hash_size); - tmp_ptr += hash_size; - } - /* copy extension header */ - mcpy(tmp_ptr,ext_hdr_buf,ext_hdr_len); - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump verify data (%d):\n",MOD,verify_data_len); - sec_signfmt_dump_buffer(verify_data,verify_data_len); -#endif - - /* ======================== */ - /* generate final hash */ - /* ======================== */ - - /* hash */ - SMSG(sec_info.bMsg,"[%s] generate hash ... \n",MOD); - if(SEC_OK != (ret = sec_hash(verify_data, verify_data_len, (uchar*)final_hash_buf, hash_len ))) - { - SMSG(true,"[%s] generate hash fail\n\n",MOD); - ret = ERR_SIGN_FORMAT_GENERATE_HASH_FAIL; - goto _hash_fail; - } - - /* ================== */ - /* dump hash data */ - /* ================== */ - SMSG(sec_info.bMsg,"[%s] dump hash data\n",MOD); - dump_buf((uchar*)final_hash_buf,hash_len); - - SMSG(sec_info.bMsg,"[%s] generate hash pass\n\n",MOD); - -_hash_fail: - ASF_FREE(verify_data); -_malloc_verify_buf_fail: -_gen_hash_by_chunk_fail: - ASF_FREE(cal_hash_buf); -_malloc_cal_buf_fail: -_ext_hdr_search_fail: -_magic_wrong_err: - - return ret; -} - -/************************************************************************** - * FUNCTIONS To Verify File - **************************************************************************/ -int sec_signfmt_verify_file_v4(ASF_FILE fp, SEC_IMG_HEADER *file_img_hdr_p) -{ - uint32 ret = SEC_OK; - uint32 final_hash_sig_len = 0; - uchar *final_hash_sig_buf = NULL; - uint32 read_sz = 0; - SEC_IMG_EXTENSTION_SET ext_set; - u64 ext_hdr_offset = 0; - uint32 ext_hdr_len = 0; - uchar *ext_hdr_buf = NULL; - u64 file_size = 0; - uint32 hash_size = 0; - uint32 sig_size = 0; - uint32 i = 0; - uchar *cal_hash_buf = NULL; - uint32 cal_hash_buf_len = 0; - uchar *tmp_ptr = NULL; - uchar *verify_data = NULL; - uint32 verify_data_len = 0; - uint32 real_chunk_size = 0; - SEC_IMG_HEADER_V4 *file_img_hdr = (SEC_IMG_HEADER_V4*)file_img_hdr_p; - u64 img_signature_offset = 0; - - /* ======================== */ - /* init check */ - /* ======================== */ -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump header ============> START\n",MOD); - sec_signfmt_dump_buffer((uchar*)file_img_hdr,sizeof(SEC_IMG_HEADER_V4)); - SMSG(sec_info.bMsg,"[%s] Dump header ============> END\n",MOD); -#endif - - if (SEC_IMG_MAGIC != file_img_hdr->magic_number) - { - SMSG(true,"[%s] magic number is invalid '0x%x'\n",MOD,file_img_hdr->magic_number); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _magic_wrong_err; - } - - if (SEC_EXTENSION_MAGIC_V4 != file_img_hdr->ext_magic) - { - SMSG(true,"[%s] extension magic number is invalid '0x%x'\n",MOD,file_img_hdr->ext_magic); - ret = ERR_SIGN_FORMAT_MAGIC_WRONG; - goto _magic_wrong_err; - } - - /* ======================== */ - /* locate final signature and hash */ - /* ======================== */ - final_hash_sig_len = file_img_hdr->signature_length; - final_hash_sig_buf = (uchar*)ASF_MALLOC(final_hash_sig_len); - if (NULL == final_hash_sig_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_hash_sig_fail; - } - img_signature_offset = sec_get_u64(file_img_hdr->image_length_high, file_img_hdr->image_length_low); - img_signature_offset += file_img_hdr->image_offset; - ASF_SEEK_SET(fp, img_signature_offset); - - if (final_hash_sig_len != (read_sz = ASF_READ(fp, final_hash_sig_buf, final_hash_sig_len))) - { - SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,final_hash_sig_len); - ret = ERR_FS_READ_SIZE_FAIL; - goto _read_hash_sig_fail; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump sign and hash value ============> START\n",MOD); - sec_signfmt_dump_buffer(final_hash_sig_buf,final_hash_sig_len); - SMSG(sec_info.bMsg,"[%s] Dump sign and hash value ============> END\n",MOD); -#endif - - /* read file size */ - ASF_SEEK_END(fp, 0); - file_size = ASF_FILE_POS(fp); - - /* ======================== */ - /* search for extension header */ - /* ======================== */ - memset(&ext_set, 0x00, sizeof(SEC_IMG_EXTENSTION_SET)); - ext_hdr_offset = sec_get_u64(file_img_hdr->image_length_high, file_img_hdr->image_length_low) + file_img_hdr->image_offset + file_img_hdr->signature_length; - ext_hdr_len = (file_size - ext_hdr_offset) & 0xFFFFFFFF; - ext_hdr_buf = (uchar*)ASF_MALLOC(ext_hdr_len); - if (NULL == ext_hdr_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_ext_hdr_fail; - } - ASF_SEEK_SET(fp, ext_hdr_offset); - - if (ext_hdr_len != (read_sz = ASF_READ(fp, ext_hdr_buf, ext_hdr_len))) - { - SMSG(true,"[%s] read size '%d' != '%d'\n",MOD,read_sz,ext_hdr_len); - ret = ERR_FS_READ_SIZE_FAIL; - goto _read_ext_hdr_fail; - } - if( SEC_OK != (ret = sec_signfmt_search_extension_v4(ext_hdr_buf, ext_hdr_len, &ext_set)) ) - { - SMSG(true,"[%s] Image extension header not found\n",MOD); - goto _ext_hdr_search_fail; - } - - hash_size = get_hash_size((SEC_CRYPTO_HASH_TYPE)ext_set.crypto->hash_type); - sig_size = get_signature_size((SEC_CRYPTO_SIGNATURE_TYPE)ext_set.crypto->sig_type); - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump ext hash value ============> START\n",MOD); - for(i=0;i<ext_set.frag->frag_count;i++) - { - SMSG(sec_info.bMsg,"[%s] Dump EXT hash [%d]\n",MOD,i); - sec_signfmt_dump_buffer(ext_set.hash_only_64[i]->hash_data,hash_size); - } - SMSG(sec_info.bMsg,"[%s] Dump ext hash value ============> END\n",MOD); -#endif - - /* ======================== */ - /* calculate each hash by chunk */ - /* ======================== */ - cal_hash_buf_len = hash_size*ext_set.frag->frag_count; - cal_hash_buf = (uchar*)ASF_MALLOC(cal_hash_buf_len); - if (NULL == cal_hash_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_cal_buf_fail; - } - memset(cal_hash_buf, 0x00, cal_hash_buf_len); -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] dump reset data\n",MOD); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - tmp_ptr = cal_hash_buf; -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Total cal hash length is %d\n",MOD,cal_hash_buf_len); -#endif - for(i=0;i<ext_set.frag->frag_count;i++) - { - memset(tmp_ptr, 0x00, hash_size); - if(ext_set.frag->chunk_size == 0) - { - real_chunk_size = ext_set.hash_only_64[i]->hash_len_64 & 0x00000000FFFFFFFFULL; - } - else - { - real_chunk_size = ext_set.frag->chunk_size; - } - if(sec_signfmt_gen_hash_by_chunk_64(fp, NULL, SEC_IMG_HEADER_SIZE+ext_set.hash_only_64[i]->hash_offset_64, ext_set.hash_only_64[i]->hash_len_64, - tmp_ptr, ext_set.hash_only_64[i]->sub_type, real_chunk_size)!=0) - { - ret = ERR_SIGN_FORMAT_CAL_HASH_BY_CHUNK_FAIL; - goto _gen_hash_by_chunk_fail; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump CAL hash right after: [%d], offset is 0x%x\n",MOD,i,tmp_ptr); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - tmp_ptr += hash_size; - } - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump CAL hash right after all done, offset is 0x%x\n",MOD,tmp_ptr); - sec_signfmt_dump_buffer(cal_hash_buf,cal_hash_buf_len); -#endif - - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump cal hash value ============> START\n",MOD); - tmp_ptr = cal_hash_buf; - for(i=0;i<ext_set.frag->frag_count;i++) - { - SMSG(sec_info.bMsg,"[%s] Dump CAL hash [%d]\n",MOD,i); - sec_signfmt_dump_buffer(tmp_ptr,hash_size); - tmp_ptr += hash_size; - } - SMSG(sec_info.bMsg,"[%s] Dump cal hash value ============> END\n",MOD); -#endif - - /* ======================== */ - /* compose final verify buffer */ - /* ======================== */ - verify_data_len = SEC_IMG_HEADER_SIZE+cal_hash_buf_len+ext_hdr_len; - verify_data = (uchar*)ASF_MALLOC(verify_data_len); - if (NULL == cal_hash_buf) - { - ret = ERR_FS_READ_BUF_ALLOCATE_FAIL; - goto _malloc_verify_buf_fail; - } - tmp_ptr = verify_data; - /* copy header */ - mcpy(tmp_ptr,file_img_hdr,SEC_IMG_HEADER_SIZE); - tmp_ptr += SEC_IMG_HEADER_SIZE; - /* copy cal hash */ - for(i=0;i<ext_set.frag->frag_count;i++) - { - mcpy(tmp_ptr,cal_hash_buf+i*hash_size,hash_size); - tmp_ptr += hash_size; - } - /* copy extension header */ - mcpy(tmp_ptr,ext_hdr_buf,ext_hdr_len); - -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump verify data (%d):\n",MOD,verify_data_len); - sec_signfmt_dump_buffer(verify_data,verify_data_len); -#endif -#if DUMP_MORE_FOR_DEBUG - SMSG(sec_info.bMsg,"[%s] Dump signature data (%d):\n",MOD,sig_size); - sec_signfmt_dump_buffer(final_hash_sig_buf,sig_size); -#endif - - osal_verify_lock(); - - /* ======================== */ - /* verify buffer */ - /* ======================== */ - SMSG(sec_info.bMsg,"[%s] verify (lock)... \n",MOD); - if(SEC_OK != (ret = sec_verify(verify_data, verify_data_len, final_hash_sig_buf, sig_size ))) - { - osal_verify_unlock(); - SMSG(true,"[%s] verify fail (unlock), ret is %d\n\n",MOD,ret); - goto _verify_fail; - } - - osal_verify_unlock(); - - SMSG(sec_info.bMsg,"[%s] verify pass (unlock)\n\n",MOD); - -_verify_fail: - ASF_FREE(verify_data); -_malloc_verify_buf_fail: -_gen_hash_by_chunk_fail: - ASF_FREE(cal_hash_buf); -_malloc_cal_buf_fail: -_ext_hdr_search_fail: -_read_ext_hdr_fail: - ASF_FREE(ext_hdr_buf); -_malloc_ext_hdr_fail: -_read_hash_sig_fail: - ASF_FREE(final_hash_sig_buf); -_malloc_hash_sig_fail: -_magic_wrong_err: - - return ret; -} - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_usbdl.c b/drivers/misc/mediatek/masp/asf/core/sec_usbdl.c deleted file mode 100644 index ff89aaa09..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_usbdl.c +++ /dev/null @@ -1,50 +0,0 @@ -#include <mach/mt_sec_hal.h> -#include "sec_typedef.h" -#include "sec_rom_info.h" -#include "sec_usbdl.h" -#include "sec_log.h" - -/****************************************************************************** - * DEFINITIONS - ******************************************************************************/ -#define MOD "ASF" - -/****************************************************************************** - * EXTERNAL VARIABLES - **************************************************************************/ -extern AND_ROMINFO_T rom_info; - -/****************************************************************************** - * CHECK IF SECURE USBDL IS ENABLED - ******************************************************************************/ -int sec_usbdl_enabled (void) -{ - switch(rom_info.m_SEC_CTRL.m_sec_usb_dl) - { - case ATTR_SUSBDL_ENABLE: - SMSG(bMsg,"[%s] SUSBDL is enabled\n",MOD); - SMSG(bMsg,"0x%x, SD-FORCE\n",ATTR_SUSBDL_ENABLE); - return 1; - - /* SUSBDL can't be disabled on security chip */ - case ATTR_SUSBDL_DISABLE: - case ATTR_SUSBDL_ONLY_ENABLE_ON_SCHIP: - SMSG(bMsg,"[%s] SUSBDL is only enabled on S-CHIP\n",MOD); - if(TRUE == masp_hal_sbc_enabled()) - { - SMSG(true,"0x%x, SD-SC\n",ATTR_SUSBDL_ONLY_ENABLE_ON_SCHIP); - return 1; - } - else - { - SMSG(true,"0x%x, SD-NSC\n",ATTR_SUSBDL_ONLY_ENABLE_ON_SCHIP); - return 0; - } - default: - SMSG(true,"[%s] invalid susbdl config (SD-0x%x)\n",MOD,rom_info.m_SEC_CTRL.m_sec_usb_dl); - SEC_ASSERT(0); - return 1; - } -} - - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_usif.c b/drivers/misc/mediatek/masp/asf/core/sec_usif.c deleted file mode 100644 index 0d9b0d98c..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_usif.c +++ /dev/null @@ -1,114 +0,0 @@ -#include "sec_osal_light.h" - -#include "sec_boot_lib.h" -#include "sec_boot.h" -#include "sec_error.h" -#include "sec_typedef.h" -#include "sec_log.h" - -/************************************************************************** - * MACRO - **************************************************************************/ -#define MOD "ASF.USIF" - -/************************************************************************** - * EXTERNAL VARIABLES - *************************************************************************/ -extern SECURE_INFO sec_info; - - -/************************************************************************** - * FIND DEVICE PARTITION - **************************************************************************/ -int sec_usif_check(void) -{ - int ret = SEC_OK; - ASF_FILE fd; - const uint32 buf_len = 2048; - char *buf = ASF_MALLOC(buf_len); - char *pmtdbufp; - - uint32 rn = 0; - ssize_t pm_sz; - int cnt; - - ASF_GET_DS - - /* -------------------------- */ - /* open proc device */ - /* -------------------------- */ - SMSG(TRUE,"[%s] open /proc/dumchar_info\n",MOD); - fd = ASF_OPEN("/proc/dumchar_info"); - - if (ASF_FILE_ERROR(fd)) - { - SMSG(TRUE,"[%s] open /proc/dumchar_info fail\n",MOD); - goto _usif_dis; - } - - buf[buf_len - 1] = '\0'; - pm_sz = ASF_READ(fd, buf, buf_len - 1); - pmtdbufp = buf; - - /* -------------------------- */ - /* parsing proc device */ - /* -------------------------- */ - while (pm_sz > 0) - { - int m_num, m_sz, mtd_e_sz; - char m_name[16]; - m_name[0] = '\0'; - m_num = -1; - - m_num ++; - - /* -------------------------- */ - /* parsing proc/dumchar_info */ - /* -------------------------- */ - cnt = sscanf(pmtdbufp, "%15s %x %x %x",m_name, &m_sz, &mtd_e_sz, &rn); - - if ((4 == cnt) && (2 == rn)) - { - SMSG(TRUE,"[%s] RN = 2\n",MOD); - goto _usif_en; - } - else if ((4 == cnt) && (1 == rn)) - { - SMSG(TRUE,"[%s] RN = 1\n",MOD); - goto _usif_dis; - } - - while (pm_sz > 0 && *pmtdbufp != '\n') - { - pmtdbufp++; - pm_sz--; - } - - if (pm_sz > 0) - { - pmtdbufp++; - pm_sz--; - } - } - - SMSG(TRUE,"[%s] usif RN not found\n",MOD); - ret = ERR_USIF_PROC_RN_NOT_FOUND; - goto _exit; - -_usif_en: - SMSG(TRUE,"[%s] usif enabled\n",MOD); - sec_info.bUsifEn = TRUE; - goto _exit; - -_usif_dis: - SMSG(TRUE,"[%s] usif disabled\n",MOD); - sec_info.bUsifEn = FALSE; - -_exit: - ASF_CLOSE(fd); - ASF_FREE(buf); - ASF_PUT_DS - - return ret; -} - diff --git a/drivers/misc/mediatek/masp/asf/core/sec_usif_util.c b/drivers/misc/mediatek/masp/asf/core/sec_usif_util.c deleted file mode 100644 index 913324d0c..000000000 --- a/drivers/misc/mediatek/masp/asf/core/sec_usif_util.c +++ /dev/null @@ -1,176 +0,0 @@ -/************************************************************************** - * INCLUDE LIBRARY - **************************************************************************/ -#include "sec_boot_lib.h" - -#define PART_PATH_PREFIX "/dev/" - -/************************************************************************** - * EXTERNAL VARIABLES - *************************************************************************/ -extern SECURE_INFO sec_info; - -/************************************************************************** - * CHECK USIF ENABLED OR NOT - **************************************************************************/ -bool sec_usif_enabled(void) -{ - return sec_info.bUsifEn; -} - -/************************************************************************** - * RETURN PART NAME - **************************************************************************/ -void sec_usif_part_name (uint32 part_num, char* part_name) -{ - mcpy(part_name,pl2usif(mtd_part_map[part_num].name),strlen(pl2usif(mtd_part_map[part_num].name))); -} - -/************************************************************************** - * PART NUM TO PART PATH - **************************************************************************/ -void sec_usif_part_path(uint32 part_num, char* part_path, uint32 part_path_len) -{ - memset(part_path,0x0,part_path_len); - mcpy(part_path,PART_PATH_PREFIX,strlen(PART_PATH_PREFIX)); - sec_usif_part_name(part_num,part_path+strlen(PART_PATH_PREFIX)); - SMSG(TRUE,"usif part path %s\n",part_path); - -} - -/************************************************************************** - * PART NAME QUERY - **************************************************************************/ -char* usif2pl (char* part_name) -{ - /* ----------------- */ - /* seccfg */ - /* ----------------- */ - if(0 == mcmp(part_name,USIF_SECCFG,strlen(USIF_SECCFG))) - { - return (char*) PL_SECCFG; - } - /* ----------------- */ - /* uboot */ - /* ----------------- */ - else if(0 == mcmp(part_name,USIF_UBOOT,strlen(USIF_UBOOT))) - { - return (char*) PL_UBOOT; - } - /* ----------------- */ - /* logo */ - /* ----------------- */ - else if(0 == mcmp(part_name,USIF_LOGO,strlen(USIF_LOGO))) - { - return (char*) PL_LOGO; - } - /* ----------------- */ - /* boot image */ - /* ----------------- */ - else if(0 == mcmp(part_name,USIF_BOOTIMG,strlen(USIF_BOOTIMG))) - { - return (char*) PL_BOOTIMG; - } - /* ----------------- */ - /* user data */ - /* ----------------- */ - else if(0 == mcmp(part_name,USIF_USER,strlen(USIF_USER))) - { - return (char*) PL_USER; - } - /* ----------------- */ - /* system image */ - /* ----------------- */ - else if(0 == mcmp(part_name,USIF_ANDSYSIMG,strlen(USIF_ANDSYSIMG))) - { - return (char*) PL_ANDSYSIMG; - } - /* ----------------- */ - /* recovery */ - /* ----------------- */ - else if(0 == mcmp(part_name,USIF_RECOVERY,strlen(USIF_RECOVERY))) - { - return (char*) PL_RECOVERY; - } - /* ----------------- */ - /* sec ro */ - /* ----------------- */ - else if(0 == mcmp(part_name,USIF_SECRO,strlen(USIF_SECRO))) - { - return (char*) PL_SECRO; - } - /* ----------------- */ - /* not found */ - /* ----------------- */ - else - { - return part_name; - } -} - -char* pl2usif (char* part_name) -{ - /* ----------------- */ - /* seccfg */ - /* ----------------- */ - if(0 == mcmp(part_name,PL_SECCFG,strlen(PL_SECCFG))) - { - return (char*) USIF_SECCFG; - } - /* ----------------- */ - /* uboot */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_UBOOT,strlen(PL_UBOOT))) - { - return (char*) USIF_UBOOT; - } - /* ----------------- */ - /* logo */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_LOGO,strlen(PL_LOGO))) - { - return (char*) USIF_LOGO; - } - /* ----------------- */ - /* boot image */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_BOOTIMG,strlen(PL_BOOTIMG))) - { - return (char*) USIF_BOOTIMG; - } - /* ----------------- */ - /* user data */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_USER,strlen(PL_USER))) - { - return (char*) USIF_USER; - } - /* ----------------- */ - /* system image */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_ANDSYSIMG,strlen(PL_ANDSYSIMG))) - { - return (char*) USIF_ANDSYSIMG; - } - /* ----------------- */ - /* recovery */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_RECOVERY,strlen(PL_RECOVERY))) - { - return (char*) USIF_RECOVERY; - } - /* ----------------- */ - /* sec ro */ - /* ----------------- */ - else if(0 == mcmp(part_name,PL_SECRO,strlen(PL_SECRO))) - { - return (char*) USIF_SECRO; - } - /* ----------------- */ - /* not found */ - /* ----------------- */ - else - { - return part_name; - } -} diff --git a/drivers/misc/mediatek/masp/asf/crypto/bgn_core.c b/drivers/misc/mediatek/masp/asf/crypto/bgn_core.c deleted file mode 100644 index 0ce32959b..000000000 --- a/drivers/misc/mediatek/masp/asf/crypto/bgn_core.c +++ /dev/null @@ -1,264 +0,0 @@ -#include "sec_osal_light.h" -#include <mach/sec_osal.h> -#include "sec_cust_struct.h" -#include "bgn_internal.h" -#include "bgn_asm.h" - -#define MOD "BGN" - -/************************************************************************** - * DEBUG DEFINITION - **************************************************************************/ -#define SMSG printk - -/************************************************************************** - * TYPEDEF - **************************************************************************/ -typedef unsigned int uint32; -typedef unsigned char uchar; - -/************************************************************************** - * INIT/FREE FUNCTIONS - **************************************************************************/ - -void bgn_init( bgn *X ) -{ - X->s = 1; - X->n = 0; - X->p = NULL; -} - -void bgn_free( bgn *X ) -{ - if( X->p != NULL ) - { - memset( X->p, 0, X->n * ciL ); - osal_kfree( X->p ); - - } - X->s = 1; - X->n = 0; - X->p = NULL; - -} - -/************************************************************************** - * CORE FUNCTION - **************************************************************************/ -int bgn_exp_mod( bgn *X, const bgn *E, const bgn *N, bgn *P_RR ) -{ - ulong ei, mm, state; - bgn RR, T, W[64]; - int ret, i, j, ws, wbits; - int bs, nbl, nbi; - - if( bgn_cmp_int( N, 0 ) < 0 || ( N->p[0] & 1 ) == 0 ) - { - return( E_BGN_BAD_INPUT_DATA ); - } - - montg_init( &mm, N ); - - bgn_init( &RR ); - bgn_init( &T ); - - memset( W, 0, sizeof( W ) ); - - /* ws = 6. only accept E = 0x10001 */ - //ws = 6; - i = bgn_msb( E ); - ws = ( i > 671 ) ? 6 : ( i > 239 ) ? 5 : ( i > 79 ) ? 4 : ( i > 23 ) ? 3 : 1; - - - j = N->n + 1; - - /* ------------------------------------------ */ - /* bgn_grow : enlarge to the specified number */ - /* ------------------------------------------ */ - if(0 != (ret = bgn_grow( X, j ))) - { - goto _exit; - } - - if(0 != (ret = bgn_grow( &W[1], j ))) - { - goto _exit; - } - - if(0 != (ret = bgn_grow( &T, j * 2 ))) - { - goto _exit; - } - - /* --------------------- */ - /* P_RR = NULL */ - /* --------------------- */ - if(0 != (ret = bgn_lset( &RR, 1 ))) - { - goto _exit; - } - - if(0 != (ret = bgn_shift_l( &RR, N->n * 2 * biL ))) - { - goto _exit; - } - - if(0 != (ret = bgn_mod_bgn( &RR, &RR, N ))) - { - goto _exit; - } - - if( P_RR != NULL ) - { - memcpy( P_RR, &RR, sizeof( bgn ) ); - } - - /* --------------------- */ - /* compare signed values */ - /* --------------------- */ - if( bgn_cmp_num( X, N ) >= 0 ) - { - bgn_mod_bgn( &W[1], X, N ); - } - else - { - bgn_copy( &W[1], X ); - } - - /* --------------------- */ - /* A = A* B * R^-1 mod N */ - /* --------------------- */ - montg_mul( &W[1], &RR, N, mm, &T ); - - if(0 != (ret = bgn_copy( X, &RR ))) - { - goto _exit; - } - - montg_red( X, N, mm, &T ); - - - /* --------------------- */ - /* ws > 1 */ - /* --------------------- */ - j = 1 << (ws - 1); - - if(0 != (ret = bgn_grow( &W[j], N->n + 1 ))) - { - goto _exit; - } - - if(0 != (ret = bgn_copy( &W[j], &W[1] ))) - { - goto _exit; - } - - for( i = 0; i < ws - 1; i++ ) - { - montg_mul( &W[j], &W[j], N, mm, &T ); - } - - for( i = j + 1; i < (1 << ws); i++ ) - { - if(0 != (ret = bgn_grow( &W[i], N->n + 1 ))) - { - goto _exit; - } - - if(0 != (ret = bgn_copy( &W[i], &W[i - 1] ))) - { - goto _exit; - } - - montg_mul( &W[i], &W[1], N, mm, &T ); - } - - nbl = E->n; - bs = 0; - nbi = 0; - wbits = 0; - state = 0; - - while( 1 ) - { - if( bs == 0 ) - { - if( nbl-- == 0 ) - { - break; - } - - bs = sizeof( ulong ) << 3; - } - - bs--; - - ei = (E->p[nbl] >> bs) & 1; - - if( ei == 0 && state == 0 ) - { - continue; - } - - if( ei == 0 && state == 1 ) - { - montg_mul( X, X, N, mm, &T ); - continue; - } - - state = 2; - - nbi++; - wbits |= (ei << (ws - nbi)); - - if( nbi == ws ) - { - for( i = 0; i < ws; i++ ) - { - montg_mul( X, X, N, mm, &T ); - } - - montg_mul( X, &W[wbits], N, mm, &T ); - - state--; - nbi = 0; - wbits = 0; - } - } - - for( i = 0; i < nbi; i++ ) - { - montg_mul( X, X, N, mm, &T ); - - wbits <<= 1; - - if( (wbits & (1 << ws)) != 0 ) - { - montg_mul( X, &W[1], N, mm, &T ); - } - } - - montg_red( X, N, mm, &T ); - -_exit: - - for( i = (1 << (ws - 1)); i < (1 << ws); i++ ) - { - bgn_free( &W[i] ); - } - - if( P_RR != NULL ) - { - bgn_free( &W[1] ); - bgn_free( &T ); - } - else - { - bgn_free( &W[1] ); - bgn_free( &T ); - bgn_free( &RR ); - } - - return ret; -} - diff --git a/drivers/misc/mediatek/masp/asf/crypto/bgn_io.c b/drivers/misc/mediatek/masp/asf/crypto/bgn_io.c deleted file mode 100644 index 9f997e57d..000000000 --- a/drivers/misc/mediatek/masp/asf/crypto/bgn_io.c +++ /dev/null @@ -1,203 +0,0 @@ -#include "sec_osal_light.h" -#include "sec_cust_struct.h" -#include "bgn_internal.h" -#include "bgn_asm.h" - -#define MOD "BGN" - -/************************************************************************** - * TYPEDEF - **************************************************************************/ -typedef unsigned int uint32; -typedef unsigned char uchar; - - -/************************************************************************** - * INTERNAL DEFINITION - **************************************************************************/ -#define ASCII_MASK 255 -#define ASCII_0 0x30 -#define ASCII_7 0x37 -#define ASCII_9 0x39 -#define ASCII_A 0x41 -#define ASCII_F 0x46 -#define ASCII_W 0x57 -#define ASCII_a 0x61 -#define ASCII_f 0x66 - -/************************************************************************** - * FUNCTIONS - **************************************************************************/ -static int bgn_get_digit( ulong *d, int radix, char c ) -{ - *d = ASCII_MASK; - - if( c >= ASCII_0 && c <= ASCII_9 ) - { - *d = c - ASCII_0; - } - - if( c >= ASCII_A && c <= ASCII_F ) - { - *d = c - ASCII_7; - } - - if( c >= ASCII_a && c <= ASCII_f ) - { - *d = c - ASCII_W; - } - - if( *d >= (ulong) radix ) - { - return E_BGN_INVALID_CHARACTER; - } - - return 0; -} - -int bgn_read_str( bgn *X, int radix, const char *s, int length ) -{ - int ret, i, j, n, slen; - ulong d; - bgn T; - - - if( radix < 2 || radix > 16 ) - { - return( E_BGN_BAD_INPUT_DATA ); - } - - bgn_init( &T ); - slen = length; - - if( radix == 16 ) - { - n = B_T_L( slen << 2 ); - - if(0 != (ret = bgn_grow( X, n ))) - { - goto _exit; - } - - if(0 != (ret = bgn_lset( X, 0 ))) - { - goto _exit; - } - - for( i = slen - 1, j = 0; i >= 0; i--, j++ ) - { - if( i == 0 && s[i] == '-' ) - { - X->s = -1; - break; - } - - if(0 != (ret = bgn_get_digit( &d, radix, s[i] ))) - { - goto _exit; - } - - X->p[j / (2 * ciL)] |= d << ( (j % (2 * ciL)) << 2 ); - } - } - else - { - if(0 != (ret = bgn_lset( X, 0 ))) - { - goto _exit; - } - - for( i = 0; i < slen; i++ ) - { - if( i == 0 && s[i] == '-' ) - { - X->s = -1; - continue; - } - - if(0 != (ret = bgn_get_digit( &d, radix, s[i] ))) - { - goto _exit; - } - - if(0 != (ret = bgn_mul_int( &T, X, radix ))) - { - goto _exit; - } - - if( X->s == 1 ) - { - if(0 != (ret = bgn_add_int( X, &T, d ))) - { - goto _exit; - } - } - else - { - if(0 != (ret = bgn_sub_int( X, &T, d ))) - { - goto _exit; - } - } - } - } - -_exit: - - bgn_free( &T ); - - return ret; -} - -int bgn_read_bin( bgn *X, const uchar *buf, int len ) -{ - int ret, i, j, n; - - for( n = 0; n < len; n++ ) - { - if( buf[n] != 0 ) - { - break; - } - } - - if(0 != (ret = bgn_grow( X, C_T_L( len - n )))) - { - goto _exit; - } - - if(0 != (ret = bgn_lset( X, 0 ))) - { - goto _exit; - } - - for( i = len - 1, j = 0; i >= n; i--, j++ ) - { - X->p[j / ciL] |= ((ulong) buf[i]) << ((j % ciL) << 3); - } - -_exit: - - return ret; -} - -int bgn_write_bin( const bgn *X, uchar *buf, int len ) -{ - int i, j, n; - - n = bgn_size( X ); - - if( len < n ) - { - return( E_BGN_BUFFER_TOO_SMALL ); - } - - memset( buf, 0, len ); - - for( i = len - 1, j = 0; n > 0; i--, j++, n-- ) - { - buf[i] = (uchar)( X->p[j/ciL] >> ((j%ciL) << 3) ); - } - - return 0; -} diff --git a/drivers/misc/mediatek/masp/asf/crypto/bgn_util.c b/drivers/misc/mediatek/masp/asf/crypto/bgn_util.c deleted file mode 100644 index 319cec8f2..000000000 --- a/drivers/misc/mediatek/masp/asf/crypto/bgn_util.c +++ /dev/null @@ -1,1004 +0,0 @@ -#include "sec_osal_light.h" -#include <mach/sec_osal.h> -#include "sec_cust_struct.h" -#include "bgn_internal.h" -#include "bgn_asm.h" - -#define MOD "BGN" - -/************************************************************************** - * TYPEDEF - **************************************************************************/ -typedef unsigned int uint32; -typedef unsigned char uchar; - -/************************************************************************** - * FUNCTIONS - **************************************************************************/ -int bgn_grow( bgn *P_X, int nbl ) -{ - ulong *p; - - if( P_X->n < nbl ) - { - if( ( p = (ulong *) osal_kmalloc( nbl * ciL ) ) == NULL ) - { - return 1; - } - - memset( p, 0, nbl * ciL ); - - if( P_X->p != NULL ) - { - memcpy( p, P_X->p, P_X->n * ciL ); - memset( P_X->p, 0, P_X->n * ciL ); - osal_kfree( P_X->p ); - } - - P_X->n = nbl; - P_X->p = p; - } - - return 0; -} - -int bgn_copy( bgn *P_X, const bgn *Y ) -{ - int ret, i; - - if( P_X == Y ) - { - return( 0 ); - } - - for( i = Y->n - 1; i > 0; i-- ) - if( Y->p[i] != 0 ) - break; - i++; - - P_X->s = Y->s; - - if(0 != (ret = bgn_grow( P_X, i ))) - { - goto _exit; - } - - memset( P_X->p, 0, P_X->n * ciL ); - memcpy( P_X->p, Y->p, i * ciL ); - -_exit: - - return( ret ); -} - -void bgn_swap( bgn *P_X, bgn *Y ) -{ - bgn T; - - memcpy( &T, P_X, sizeof( bgn ) ); - memcpy( P_X, Y, sizeof( bgn ) ); - memcpy( Y, &T, sizeof( bgn ) ); -} - -int bgn_lset( bgn *P_X, int z ) -{ - int ret; - - if(0 != (ret = bgn_grow( P_X, 1 ))) - { - goto _exit; - } - - memset( P_X->p, 0, P_X->n * ciL ); - - P_X->p[0] = ( z < 0 ) ? -z : z; - P_X->s = ( z < 0 ) ? -1 : 1; - -_exit: - - return( ret ); -} - -int bgn_lsb( const bgn *P_X ) -{ - int i, j, count = 0; - - for( i = 0; i < P_X->n; i++ ) - for( j = 0; j < (int) biL; j++, count++ ) - if( ( ( P_X->p[i] >> j ) & 1 ) != 0 ) - return( count ); - - return( 0 ); -} - -int bgn_msb( const bgn *P_X ) -{ - int i, j; - - for( i = P_X->n - 1; i > 0; i-- ) - if( P_X->p[i] != 0 ) - break; - - for( j = biL - 1; j >= 0; j-- ) - if( ( ( P_X->p[i] >> j ) & 1 ) != 0 ) - break; - - return( ( i * biL ) + j + 1 ); -} - -int bgn_size( const bgn *P_X ) -{ - return( ( bgn_msb( P_X ) + 7 ) >> 3 ); -} - -int bgn_shift_l( bgn *P_X, int count ) -{ - int ret, i, v0, t1; - ulong r0 = 0, r1; - - v0 = count / (biL ); - t1 = count & (biL - 1); - - i = bgn_msb( P_X ) + count; - - if( P_X->n * (int) biL < i ) - { - if(0 != (ret = bgn_grow( P_X, B_T_L( i )))) - { - goto _exit; - } - } - - ret = 0; - - if( v0 > 0 ) - { - for( i = P_X->n - 1; i >= v0; i-- ) - { - P_X->p[i] = P_X->p[i - v0]; - } - - for( ; i >= 0; i-- ) - { - P_X->p[i] = 0; - } - } - - if( t1 > 0 ) - { - for( i = v0; i < P_X->n; i++ ) - { - r1 = P_X->p[i] >> (biL - t1); - P_X->p[i] <<= t1; - P_X->p[i] |= r0; - r0 = r1; - } - } - -_exit: - - return ret; -} - -int bgn_shift_r( bgn *P_X, int count ) -{ - int i, v0, v1; - ulong r0 = 0, r1; - - v0 = count / biL; - v1 = count & (biL - 1); - - if( v0 > 0 ) - { - for( i = 0; i < P_X->n - v0; i++ ) - { - P_X->p[i] = P_X->p[i + v0]; - } - - for( ; i < P_X->n; i++ ) - { - P_X->p[i] = 0; - } - } - - if( v1 > 0 ) - { - for( i = P_X->n - 1; i >= 0; i-- ) - { - r1 = P_X->p[i] << (biL - v1); - P_X->p[i] >>= v1; - P_X->p[i] |= r0; - r0 = r1; - } - } - - return 0; -} - -int bgn_cmp_abs( const bgn *P_X, const bgn *Y ) -{ - int i, j; - - for( i = P_X->n - 1; i >= 0; i-- ) - { - if( P_X->p[i] != 0 ) - break; - } - - for( j = Y->n - 1; j >= 0; j-- ) - { - if( Y->p[j] != 0 ) - break; - } - - if( i < 0 && j < 0 ) - { - return( 0 ); - } - - if( i > j ) - { - return( 1 ); - } - - if( j > i ) - { - return( -1 ); - } - - for( ; i >= 0; i-- ) - { - if( P_X->p[i] > Y->p[i] ) - { - return( 1 ); - } - - if( P_X->p[i] < Y->p[i] ) - { - return( -1 ); - } - } - - return( 0 ); -} - -int bgn_cmp_num( const bgn *P_X, const bgn *Y ) -{ - int i, j; - - for( i = P_X->n - 1; i >= 0; i-- ) - { - if( P_X->p[i] != 0 ) - break; - } - - for( j = Y->n - 1; j >= 0; j-- ) - { - if( Y->p[j] != 0 ) - break; - } - - if( i < 0 && j < 0 ) - { - return( 0 ); - } - - if( i > j ) return( P_X->s ); - if( j > i ) return( -P_X->s ); - - if( P_X->s > 0 && Y->s < 0 ) return( 1 ); - if( Y->s > 0 && P_X->s < 0 ) return( -1 ); - - for( ; i >= 0; i-- ) - { - if( P_X->p[i] > Y->p[i] ) return( P_X->s ); - if( P_X->p[i] < Y->p[i] ) return( -P_X->s ); - } - - return( 0 ); -} - -int bgn_cmp_int( const bgn *P_X, int z ) -{ - bgn Y; - ulong p[1]; - - *p = ( z < 0 ) ? -z : z; - Y.s = ( z < 0 ) ? -1 : 1; - Y.n = 1; - Y.p = p; - - return( bgn_cmp_num( P_X, &Y ) ); -} - -int bgn_add_abs( bgn *P_X, const bgn *P_A, const bgn *P_B ) -{ - int ret, i, j; - ulong *o, *p, c; - - if( P_X == P_B ) - { - const bgn *T = P_A; P_A = P_X; P_B = T; - } - - if( P_X != P_A ) - { - if(0 != (ret = bgn_copy( P_X, P_A ))) - { - goto _exit; - } - } - - P_X->s = 1; - - for( j = P_B->n - 1; j >= 0; j-- ) - { - if( P_B->p[j] != 0 ) - break; - } - - if(0 != (ret = bgn_grow( P_X, j + 1 ))) - { - goto _exit; - } - - o = P_B->p; p = P_X->p; c = 0; - - for( i = 0; i <= j; i++, o++, p++ ) - { - *p += c; c = ( *p < c ); - *p += *o; c += ( *p < *o ); - } - - while( c != 0 ) - { - if( i >= P_X->n ) - { - if(0 != (ret = bgn_grow( P_X, i + 1 ))) - { - goto _exit; - } - - p = P_X->p + i; - } - - *p += c; c = ( *p < c ); i++; - } - -_exit: - - return ret; -} - -void bgn_sub_hlp( int n, ulong *s, ulong *d ) -{ - int i; - ulong c, z; - - for( i = c = 0; i < n; i++, s++, d++ ) - { - z = ( *d < c ); *d -= c; - c = ( *d < *s ) + z; *d -= *s; - } - - while( c != 0 ) - { - z = ( *d < c ); *d -= c; - c = z; i++; d++; - } -} - -int bgn_sub_abs( bgn *P_X, const bgn *P_A, const bgn *P_B ) -{ - bgn TB; - int ret, n; - - if( bgn_cmp_abs( P_A, P_B ) < 0 ) - { - return( E_BGN_NEGATIVE_VALUE ); - } - - bgn_init( &TB ); - - if( P_X == P_B ) - { - if(0 != (ret = bgn_copy( &TB, P_B ))) - { - goto _exit; - } - P_B = &TB; - } - - if( P_X != P_A ) - { - if(0 != (ret = bgn_copy( P_X, P_A ))) - { - goto _exit; - } - } - - P_X->s = 1; - - ret = 0; - - for( n = P_B->n - 1; n >= 0; n-- ) - { - if( P_B->p[n] != 0 ) - break; - } - - bgn_sub_hlp( n + 1, P_B->p, P_X->p ); - -_exit: - - bgn_free( &TB ); - - return( ret ); -} - -int bgn_add_bgn( bgn *P_X, const bgn *P_A, const bgn *P_B ) -{ - int ret, s = P_A->s; - - if( P_A->s * P_B->s < 0 ) - { - if( bgn_cmp_abs( P_A, P_B ) >= 0 ) - { - if(0 != (ret = bgn_sub_abs( P_X, P_A, P_B ))) - { - goto _exit; - } - - P_X->s = s; - } - else - { - if(0 != (ret = bgn_sub_abs( P_X, P_B, P_A ))) - { - goto _exit; - } - - P_X->s = -s; - } - } - else - { - if(0 != (ret = bgn_add_abs( P_X, P_A, P_B ))) - { - goto _exit; - } - P_X->s = s; - } - -_exit: - - return( ret ); -} - -int bgn_sub_bgn( bgn *P_X, const bgn *P_A, const bgn *P_B ) -{ - int ret, s = P_A->s; - - if( P_A->s * P_B->s > 0 ) - { - if( bgn_cmp_abs( P_A, P_B ) >= 0 ) - { - if(0 != (ret = bgn_sub_abs( P_X, P_A, P_B ))) - { - goto _exit; - } - - P_X->s = s; - } - else - { - if(0 != (ret = bgn_sub_abs( P_X, P_B, P_A ))) - { - goto _exit; - } - - P_X->s = -s; - } - } - else - { - if(0 != (ret = bgn_add_abs( P_X, P_A, P_B ))) - { - goto _exit; - } - - P_X->s = s; - } - -_exit: - - return( ret ); -} - -int bgn_add_int( bgn *P_X, const bgn *P_A, int b ) -{ - bgn _B; - ulong p[1]; - - p[0] = ( b < 0 ) ? -b : b; - _B.s = ( b < 0 ) ? -1 : 1; - _B.n = 1; - _B.p = p; - - return( bgn_add_bgn( P_X, P_A, &_B ) ); -} - -int bgn_sub_int( bgn *P_X, const bgn *P_A, int b ) -{ - bgn _B; - ulong p[1]; - - p[0] = ( b < 0 ) ? -b : b; - _B.s = ( b < 0 ) ? -1 : 1; - _B.n = 1; - _B.p = p; - - return( bgn_sub_bgn( P_X, P_A, &_B ) ); -} - -void bgn_mul_hlp( int i, ulong *s, ulong *d, ulong b ) -{ - ulong c = 0, t = 0; - - for( ; i >= 16; i -= 16 ) - { - ALU_INIT - ALU_CORE ALU_CORE - ALU_CORE ALU_CORE - ALU_CORE ALU_CORE - ALU_CORE ALU_CORE - - ALU_CORE ALU_CORE - ALU_CORE ALU_CORE - ALU_CORE ALU_CORE - ALU_CORE ALU_CORE - ALU_STOP - } - - for( ; i >= 8; i -= 8 ) - { - ALU_INIT - ALU_CORE ALU_CORE - ALU_CORE ALU_CORE - - ALU_CORE ALU_CORE - ALU_CORE ALU_CORE - ALU_STOP - } - - for( ; i > 0; i-- ) - { - ALU_INIT - ALU_CORE - ALU_STOP - } - - t++; - - do { - *d += c; c = ( *d < c ); d++; - } - while( c != 0 ); -} - -int bgn_mul_bgn( bgn *P_X, const bgn *P_A, const bgn *P_B ) -{ - int ret, i, j; - bgn TA, TB; - - bgn_init( &TA ); - bgn_init( &TB ); - - if( P_X == P_A ) - { - if(0 != (ret = bgn_copy( &TA, P_A ))) - { - goto _exit; - } - - P_A = &TA; - } - - if( P_X == P_B ) - { - if(0 != (ret = bgn_copy( &TB, P_B ))) - { - goto _exit; - } - - P_B = &TB; - } - - for( i = P_A->n - 1; i >= 0; i-- ) - { - if( P_A->p[i] != 0 ) - break; - } - - for( j = P_B->n - 1; j >= 0; j-- ) - { - if( P_B->p[j] != 0 ) - break; - } - - if(0 != (ret = bgn_grow( P_X, i + j + 2 ))) - { - goto _exit; - } - - if(0 != (ret = bgn_lset( P_X, 0 ))) - { - goto _exit; - } - - for( i++; j >= 0; j-- ) - { - bgn_mul_hlp( i, P_A->p, P_X->p + j, P_B->p[j] ); - } - - P_X->s = P_A->s * P_B->s; - -_exit: - - bgn_free( &TB ); - bgn_free( &TA ); - - return( ret ); -} - -int bgn_mul_int( bgn *P_X, const bgn *P_A, ulong b ) -{ - bgn _B; - ulong p[1]; - - _B.s = 1; - _B.n = 1; - _B.p = p; - p[0] = b; - - return( bgn_mul_bgn( P_X, P_A, &_B ) ); -} - -int bgn_div_bgn( bgn *P_Q, bgn *P_R, const bgn *P_A, const bgn *P_B ) -{ - int ret, i, n, t, k; - bgn X, Y, Z, T1, T2; - - if( bgn_cmp_int( P_B, 0 ) == 0 ) - { - return( E_BGN_DIVISION_BY_ZERO ); - } - - bgn_init( &X ); - bgn_init( &Y ); - bgn_init( &Z ); - bgn_init( &T1 ); - bgn_init( &T2 ); - - if( bgn_cmp_abs( P_A, P_B ) < 0 ) - { - if( P_Q != NULL ) - { - if(0 != (ret = bgn_lset( P_Q, 0 ))) - { - goto _exit; - } - } - - if( P_R != NULL ) - { - if(0 != (ret = bgn_copy( P_R, P_A ))) - { - goto _exit; - } - } - - return( 0 ); - } - - if(0 != (ret = bgn_copy( &X, P_A ))) - { - goto _exit; - } - - if(0 != (ret = bgn_copy( &Y, P_B ))) - { - goto _exit; - } - - X.s = Y.s = 1; - - if(0 != (ret = bgn_grow( &Z, P_A->n + 2 ))) - { - goto _exit; - } - - if(0 != (ret = bgn_lset( &Z, 0 ))) - { - goto _exit; - } - - if(0 != (ret = bgn_grow( &T1, 2 ))) - { - goto _exit; - } - - if(0 != (ret = bgn_grow( &T2, 3 ))) - { - goto _exit; - } - - k = bgn_msb( &Y ) % biL; - - if( k < (int) biL - 1 ) - { - k = biL - 1 - k; - - if(0 != (ret = bgn_shift_l( &X, k ))) - { - goto _exit; - } - - if(0 != (ret = bgn_shift_l( &Y, k ))) - { - goto _exit; - } - } - else - { - k = 0; - } - - n = X.n - 1; - t = Y.n - 1; - bgn_shift_l( &Y, biL * (n - t) ); - - while( bgn_cmp_num( &X, &Y ) >= 0 ) - { - Z.p[n - t]++; - bgn_sub_bgn( &X, &X, &Y ); - } - - bgn_shift_r( &Y, biL * (n - t) ); - - for( i = n; i > t ; i-- ) - { - if( X.p[i] >= Y.p[t] ) - { - Z.p[i - t - 1] = ~0; - } - else - { - ulong q0, q1, r0, r1; - ulong d0, d1, d, m; - - d = Y.p[t]; - d0 = ( d << biH ) >> biH; - d1 = ( d >> biH ); - - q1 = X.p[i] / d1; - r1 = X.p[i] - d1 * q1; - r1 <<= biH; - r1 |= ( X.p[i - 1] >> biH ); - - m = q1 * d0; - if( r1 < m ) - { - q1--, r1 += d; - while( r1 >= d && r1 < m ) - q1--, r1 += d; - } - r1 -= m; - - q0 = r1 / d1; - r0 = r1 - d1 * q0; - r0 <<= biH; - r0 |= ( X.p[i - 1] << biH ) >> biH; - - m = q0 * d0; - if( r0 < m ) - { - q0--, r0 += d; - while( r0 >= d && r0 < m ) - q0--, r0 += d; - } - r0 -= m; - - Z.p[i - t - 1] = ( q1 << biH ) | q0; - } - - Z.p[i - t - 1]++; - - do - { - Z.p[i - t - 1]--; - - if(0 != (ret = bgn_lset( &T1, 0 ))) - { - goto _exit; - } - - T1.p[0] = (t < 1) ? 0 : Y.p[t - 1]; - T1.p[1] = Y.p[t]; - - if(0 != (ret = bgn_mul_int( &T1, &T1, Z.p[i - t - 1] ))) - { - goto _exit; - } - - if(0 != (ret = bgn_lset( &T2, 0 ))) - { - goto _exit; - } - - T2.p[0] = (i < 2) ? 0 : X.p[i - 2]; - T2.p[1] = (i < 1) ? 0 : X.p[i - 1]; - T2.p[2] = X.p[i]; - } while( bgn_cmp_num( &T1, &T2 ) > 0 ); - - if(0 != (ret = bgn_mul_int( &T1, &Y, Z.p[i - t - 1] ))) - { - goto _exit; - } - - if(0 != (ret = bgn_shift_l( &T1, biL * (i - t - 1) ))) - { - goto _exit; - } - - if(0 != (ret = bgn_sub_bgn( &X, &X, &T1 ))) - { - goto _exit; - } - - if( bgn_cmp_int( &X, 0 ) < 0 ) - { - if(0 != (ret = bgn_copy( &T1, &Y ))) - { - goto _exit; - } - - if(0 != (ret = bgn_shift_l( &T1, biL * (i - t - 1) ))) - { - goto _exit; - } - - if(0 != (ret = bgn_add_bgn( &X, &X, &T1 ))) - { - goto _exit; - } - - Z.p[i - t - 1]--; - } - } - - if( P_Q != NULL ) - { - bgn_copy( P_Q, &Z ); - P_Q->s = P_A->s * P_B->s; - } - - if( P_R != NULL ) - { - bgn_shift_r( &X, k ); - bgn_copy( P_R, &X ); - - P_R->s = P_A->s; - - if( bgn_cmp_int( P_R, 0 ) == 0 ) - { - P_R->s = 1; - } - } - -_exit: - - bgn_free( &X ); - bgn_free( &Y ); - bgn_free( &Z ); - bgn_free( &T1 ); - bgn_free( &T2 ); - - return( ret ); -} - -int bgn_div_int( bgn *P_Q, bgn *P_R, const bgn *P_A, int b ) -{ - bgn _B; - ulong p[1]; - - p[0] = ( b < 0 ) ? -b : b; - _B.s = ( b < 0 ) ? -1 : 1; - _B.n = 1; - _B.p = p; - - return( bgn_div_bgn( P_Q, P_R, P_A, &_B ) ); -} - -int bgn_mod_bgn( bgn *P_R, const bgn *P_A, const bgn *P_B ) -{ - int ret; - - if( bgn_cmp_int( P_B, 0 ) < 0 ) - { - return E_BGN_NEGATIVE_VALUE; - } - - if(0 != (ret = bgn_div_bgn( NULL, P_R, P_A, P_B ))) - { - goto _exit; - } - - while( bgn_cmp_int( P_R, 0 ) < 0 ) - { - if(0 != (ret = bgn_add_bgn( P_R, P_R, P_B ))) - { - goto _exit; - } - } - - while( bgn_cmp_num( P_R, P_B ) >= 0 ) - { - if(0 != (ret = bgn_sub_bgn( P_R, P_R, P_B ))) - { - goto _exit; - } - } - -_exit: - - return( ret ); -} - -int bgn_mod_int( ulong *r, const bgn *P_A, int b ) -{ - int i; - ulong x, y, z; - - if( b == 0 ) - { - return( E_BGN_DIVISION_BY_ZERO ); - } - - if( b < 0 ) - { - return E_BGN_NEGATIVE_VALUE; - } - - if( b == 1 ) - { - *r = 0; - return( 0 ); - } - - if( b == 2 ) - { - *r = P_A->p[0] & 1; - return( 0 ); - } - - for( i = P_A->n - 1, y = 0; i >= 0; i-- ) - { - x = P_A->p[i]; - y = ( y << biH ) | ( x >> biH ); - z = y / b; - y -= z * b; - - x <<= biH; - y = ( y << biH ) | ( x >> biH ); - z = y / b; - y -= z * b; - } - - if( P_A->s < 0 && y != 0 ) - y = b - y; - - *r = y; - - return( 0 ); -} diff --git a/drivers/misc/mediatek/masp/asf/crypto/rsa_core.c b/drivers/misc/mediatek/masp/asf/crypto/rsa_core.c deleted file mode 100644 index f4741a750..000000000 --- a/drivers/misc/mediatek/masp/asf/crypto/rsa_core.c +++ /dev/null @@ -1,326 +0,0 @@ -#include "sec_osal_light.h" -#include <mach/sec_osal.h> -#include "sec_cust_struct.h" -#include "rsa_def.h" -#include "bgn_internal.h" - -#define MOD "RSA" - -/************************************************************************** - * TYPEDEF - **************************************************************************/ -typedef unsigned int uint32; -typedef unsigned char uchar; - - -/************************************************************************** -* EXTERNAL VARIABLE -**************************************************************************/ -extern uchar sha1sum[]; - -/************************************************************************** -* GLOBAL VARIABLES -**************************************************************************/ -rsa_ctx rsa; -uchar rsa_ci[RSA_KEY_LEN]; -static unsigned char *rsa_buf = NULL; - -/************************************************************************** - * RSA DEBUG FLAG - **************************************************************************/ -#define RSA_DEBUG_LOG (0) - - -/************************************************************************** - * DEBUG DEFINITION - **************************************************************************/ -#if RSA_DEBUG_LOG -#define RSA_LOG printf -#else -#define RSA_LOG -#endif - - -/************************************************************************** - * INTERNAL DEFINIITION - **************************************************************************/ -#define MASK 0xFF -#define RSA_BUF_SIZE 1024 - - -/************************************************************************** - * INTERNAL FUNCTIONS - **************************************************************************/ -void rsa_init( rsa_ctx *ctx, int pad, int h_id, int (*f_rng)(void *), void *p_rng ); -int rsa_pub( rsa_ctx *ctx, const uchar *ip, uchar *op ); -int rsa_pri( rsa_ctx *ctx, const uchar *ip, uchar *op ); -void rsa_free( rsa_ctx *ctx ); - -/************************************************************************** - * FUNCTIONS - **************************************************************************/ -void rsa_init( rsa_ctx *ctx, int pad, int h_id, int (*f_rng)(void *), void *p_rng ) -{ - memset( ctx, 0, sizeof( rsa_ctx ) ); - - ctx->pad = pad; - ctx->h_id = h_id; - - ctx->f_rng = f_rng; - ctx->p_rng = p_rng; -} - -int rsa_pub( rsa_ctx *ctx, const uchar *ip, uchar *op ) -{ - int ret = 0, olen = 0; - bgn B; - - bgn_init( &B ); - - /* if no RSA pad, input data won't be extended to key length */ - if(0 != (ret = bgn_read_bin( &B, ip, RSA_KEY_LEN ))) - { - goto _exit; - } - - if( bgn_cmp_num( &B, &ctx->N ) >= 0 ) - { - bgn_free( &B ); - ret = E_RSA_BAD_INPUT_DATA; - goto _err; - } - - olen = ctx->len; - - /* ============================================================ */ - /* Following is the formula of RSA public key crypto algorithm */ - /* */ - /* => public key use ctx->E (public exponent) */ - /* */ - /* => Message = Cipher ^ (&ctx->E) mod (&ctx->N) */ - /* */ - /* ============================================================ */ - if(0 != (ret = bgn_exp_mod( &B, &ctx->E, &ctx->N, &ctx->RN ))) - { - goto _exit; - } - - if(0 != (ret = bgn_write_bin( &B, op, olen ))) - { - goto _exit; - } - -_exit: - - bgn_free( &B ); - - if( 0 != ret ) - { - //RSA_LOG("[%s] E_RSA_PUBLIC_FAILED\n",MOD); - ret = E_RSA_PUBLIC_FAILED; - goto _err; - } - - return 0; - -_err: - - return ret; -} - -int rsa_pri( rsa_ctx *ctx, const uchar *ip, uchar *op ) -{ - int ret = 0, olen = 0; - bgn B, B1, B2; - - bgn_init( &B ); - bgn_init( &B1 ); - bgn_init( &B2 ); - - if(0 != (ret = bgn_read_bin( &B, ip, ctx->len ))) - { - goto _exit; - } - - if( bgn_cmp_num( &B, &ctx->N ) >= 0 ) - { - bgn_free( &B ); - ret = E_RSA_BAD_INPUT_DATA; - goto _err; - } - - /* ============================================================ */ - /* Following is the formula of RSA private key crypto algorithm */ - /* */ - /* => private key use ctx->D (private exponent) */ - /* */ - /* => M' = M ^ (&ctx->D) mod (&ctx->N) */ - /* */ - /* ============================================================ */ - if(0 != (ret = bgn_exp_mod( &B, &ctx->D, &ctx->N, &ctx->RN ))) - { - goto _exit; - } - - olen = ctx->len; - - if(0 != (ret = bgn_write_bin( &B, op, olen ))) - { - goto _exit; - } - -_exit: - - bgn_free( &B ); - bgn_free( &B1 ); - bgn_free( &B2 ); - - if( ret != 0 ) - { - //RSA_LOG("[%s] E_RSA_PRIVATE_FAILED\n",MOD); - ret = E_RSA_PRIVATE_FAILED; - goto _err; - - } - - return 0; - -_err: - - return ret; -} - -int rsa_sign( rsa_ctx *ctx, int h_len, const uchar *hash, uchar *sig ) -{ - int ret = 0; - int nb_pad = 0, olen = 0; - uchar *p = sig; - - /* ---------------- */ - /* init */ - /* ---------------- */ - olen = ctx->len; - *p++ = 0; - *p++ = RSA_SIGN; - - /* ---------------- */ - /* PKCS 1.5 */ - /* ---------------- */ - nb_pad = olen - 3 - h_len; - - if( nb_pad < 8 ) - { - ret = E_RSA_BAD_INPUT_DATA; - goto _err; - } - - memset( p, MASK, nb_pad ); - p = p + nb_pad; - *p++ = 0; - - /* ---------------- */ - /* RAW padding */ - /* ---------------- */ - memcpy( p, hash, h_len ); - - /* ---------------- */ - /* private key */ - /* ---------------- */ - return rsa_pri( ctx, sig, sig ); - -_err: - - return ret; -} - - -int rsa_verify( rsa_ctx *ctx, int h_len, const uchar *hash, uchar *sig ) -{ - int ret = 0, len = 0, siglen = 0; - uchar *p; - uchar *buf; - - if(rsa_buf == NULL) - { - rsa_buf = (unsigned char *)osal_kmalloc(RSA_BUF_SIZE); - } - - memset(rsa_buf, 0x00, RSA_BUF_SIZE); - - buf = rsa_buf; - - siglen = ctx->len; - - if( siglen < 16 || siglen > RSA_BUF_SIZE ) - { - ret = E_RSA_BAD_INPUT_DATA; - goto _err; - } - - /* ---------------- */ - /* public key */ - /* ---------------- */ - if(0 != (ret = rsa_pub( ctx, sig, buf ))) - { - goto _err; - } - - p = buf; - - /* ---------------- */ - /* PKCS 1.5 */ - /* ---------------- */ - if( *p++ != 0 || *p++ != RSA_SIGN ) - { - ret = E_RSA_INVALID_PADDING; - goto _err; - } - - while( *p != 0 ) - { - if( p >= buf + siglen - 1 || *p != MASK ) - { - ret = E_RSA_INVALID_PADDING; - goto _err; - } - - p++; - } - - p++; - - len = siglen - (int)( p - buf ); - - /* ---------------- */ - /* RAW padding */ - /* ---------------- */ - if( len == h_len) - { - if( 0 == memcmp( p, hash, h_len ) ) - { - return 0; - } - else - { - ret = E_RSA_VERIFY_FAILED; - goto _err; - } - } - - ret = E_RSA_INVALID_PADDING; - -_err: - - return ret; -} - -void rsa_free( rsa_ctx *ctx ) -{ - bgn_free( &ctx->RQ ); - bgn_free( &ctx->RP ); - bgn_free( &ctx->RN ); - bgn_free( &ctx->D ); - bgn_free( &ctx->E ); - bgn_free( &ctx->N ); -} - diff --git a/drivers/misc/mediatek/masp/asf/crypto/rsa_lib.c b/drivers/misc/mediatek/masp/asf/crypto/rsa_lib.c deleted file mode 100644 index a49b3d7a3..000000000 --- a/drivers/misc/mediatek/masp/asf/crypto/rsa_lib.c +++ /dev/null @@ -1,249 +0,0 @@ -#include "sec_osal_light.h" -#include "sec_typedef.h" -#include "rsa_def.h" -#include "alg_sha1.h" -#include "bgn_export.h" -#include "sec_cust_struct.h" -#include "sec_auth.h" -#include "sec_error.h" -#include "sec_rom_info.h" -#include "sec_boot_lib.h" -#include "sec_sign_header.h" -#include "sec_key_util.h" -#include "sec_log.h" - -/************************************************************************** - * MODULE NAME - **************************************************************************/ -#define MOD "AUTHEN" - -/************************************************************************** -* LOCAL VARIABLE -**************************************************************************/ -uchar bRsaKeyInit = false; -uchar bRsaImgKeyInit = false; - -/************************************************************************** - * EXTERNAL VARIABLE - **************************************************************************/ -extern uchar sha1sum[]; -extern rsa_ctx rsa; -extern uchar rsa_ci[]; -extern AND_ROMINFO_T rom_info; -CUST_SEC_INTER g_cus_inter; - -/************************************************************************** - * RSA SML KEY INIT - **************************************************************************/ -int lib_init_key (uchar *nKey, uint32 nKey_len, uchar *eKey, uint32 eKey_len) -{ - int ret = SEC_OK; - - /* ------------------------------ */ - /* avoid re-init aes key - if re-init key again, key value will be decoded twice ..*/ - /* ------------------------------ */ - if(true == bRsaKeyInit) - { - return ret; - } - - bRsaKeyInit = true; - - if(0 != mcmp(rom_info.m_id,RI_NAME,RI_NAME_LEN)) - { - SMSG(true,"[%s] error. key not found\n",MOD); - ret = ERR_RSA_KEY_NOT_FOUND; - goto _end; - } - - /* ------------------------------ */ - /* clean rsa variable */ - /* ------------------------------ */ - memset( &rsa, 0, sizeof(rsa_ctx)); - - /* ------------------------------ */ - /* init RSA module / exponent key */ - /* ------------------------------ */ - rsa.len = RSA_KEY_SIZE; - - /* ------------------------------ */ - /* decode key */ - /* ------------------------------ */ - sec_decode_key( nKey, nKey_len, - rom_info.m_SEC_KEY.crypto_seed, - sizeof(rom_info.m_SEC_KEY.crypto_seed)); - - /* ------------------------------ */ - /* init mpi library */ - /* ------------------------------ */ - bgn_read_str( &rsa.N , 16, (char*)nKey, nKey_len ); - bgn_read_str( &rsa.E , 16, (char*)eKey, eKey_len ); - - /* ------------------------------ */ - /* debugging */ - /* ------------------------------ */ - dump_buf(nKey,0x4); - -_end: - - return ret; - -} - -/************************************************************************** - * SIGNING - **************************************************************************/ -int lib_sign(uchar* data_buf, uint32 data_len, uchar* sig_buf, uint32 sig_len) -{ - -#if 0 - - int i = 0; - - if (RSA_KEY_LEN != sig_len) - { - SMSG(true,"signature length is wrong (%d)\n",sig_len); - goto _err; - } - - /* hash the plain text */ - sha1(data_buf, data_len, sha1sum ); - - /* - 2011.09.27. Add OpenSSL compatibility support - - OpenSSL's command : - openssl rsautl -sign -in xxxxx -inkey xxx.pem -out signature - - RSA padding type : SIG_RSA_SHA1 - original implementation for W1126 and W1132 MP release - This padding rule can't be compatible with OpenSSL - The cipher results are not the same - - RSA padding type : SIG_RSA_RAW - This padding rule can be compatible with OpenSSL - The cipher results are the same - - */ - /* encrypt the hash value (sign) */ - SMSG(true,"[%s] RSA padding : RAW \n",MOD); - if( rsa_sign( &rsa, HASH_LEN, sha1sum, sig_buf ) != 0 ) - { - SMSG(true, "failed\n" ); - goto _err; - } - SMSG(true,"[%s] sign image ... pass\n\n",MOD); - - - /* output signature */ - SMSG(true,"[%s] output signature: \n",MOD); - SMSG(true," ------------------------------------\n"); - for(i=0;i<RSA_KEY_LEN;i++) - { - if(i==RSA_KEY_LEN-1) - { - if(sig_buf[i]<0x10) - { - SMSG(true,"0x0%x",sig_buf[i]); - } - else - { - SMSG(true,"0x%x",sig_buf[i]); - } - } - else - { - if(sig_buf[i]<0x10) - { - SMSG(true,"0x0%x,",sig_buf[i]); - } - else - { - SMSG(true,"0x%x,",sig_buf[i]); - } - } - } - SMSG(true,"\n"); - - /* self testing : verify this signature */ - SMSG(true,"\n[%s] verify signature",MOD); - if( rsa_verify( &rsa, HASH_LEN, sha1sum, sig_buf ) != 0 ) - { - SMSG(true, "failed\n" ); - goto _err; - } - SMSG(true,"... pass\n"); - -#endif - - return 0; - -#if 0 - -_err: - - return -1; - -#endif - -} - - -/************************************************************************** - * HASHING - **************************************************************************/ -int lib_hash (uchar* data_buf, uint32 data_len, uchar* hash_buf, uint32 hash_len) -{ - - if (HASH_LEN != hash_len) - { - SMSG(true,"hash length is wrong (%d)\n",hash_len); - goto _err; - } - - /* hash the plain text */ - sha1(data_buf, data_len, hash_buf ); - - return 0; - -_err: - - return -1; - -} - - -/************************************************************************** - * VERIFY SIGNATURE - **************************************************************************/ -int lib_verify (uchar* data_buf, uint32 data_len, uchar* sig_buf, uint32 sig_len) -{ - - if (RSA_KEY_LEN != sig_len) - { - SMSG(true,"signature length is wrong (%d)\n",sig_len); - goto _err; - } - - SMSG(true,"[%s] 0x%x,0x%x,0x%x,0x%x\n",MOD,data_buf[0],data_buf[1],data_buf[2],data_buf[3]); - - /* hash the plain text */ - sha1(data_buf, data_len, sha1sum); - - /* verify this signature */ - SMSG(true,"[%s] verify signature",MOD); - if( rsa_verify( &rsa, HASH_LEN, sha1sum, sig_buf ) != 0 ) - { - SMSG(true, " ... failed\n" ); - goto _err; - } - SMSG(true," ... pass\n"); - - return 0; - -_err: - - return -1; -} - diff --git a/drivers/misc/mediatek/masp/asf/crypto/rsa_util.c b/drivers/misc/mediatek/masp/asf/crypto/rsa_util.c deleted file mode 100644 index 4a6f948ff..000000000 --- a/drivers/misc/mediatek/masp/asf/crypto/rsa_util.c +++ /dev/null @@ -1,87 +0,0 @@ -#include "sec_osal_light.h" -#include "sec_cust_struct.h" -#include "bgn_internal.h" -#include "bgn_asm.h" - -#define MOD "BGN" - -/************************************************************************** - * TYPEDEF - **************************************************************************/ -typedef unsigned int uint32; -typedef unsigned char uchar; - - -/************************************************************************** - * FUNCTIONS - **************************************************************************/ -void montg_init( ulong *mm, const bgn *P_N ) -{ - ulong x, m0 = P_N->p[0]; - - x = m0; - x += ( ( m0 + 2 ) & 4 ) << 1; - x *= ( 2 - ( m0 * x ) ); - - if( biL >= 16 ) - { - x *= ( 2 - ( m0 * x ) ); - } - - if( biL >= 32 ) - { - x *= ( 2 - ( m0 * x ) ); - } - - if( biL >= 64 ) - { - x *= ( 2 - ( m0 * x ) ); - } - - *mm = ~x + 1; -} - -void montg_mul( bgn *P_A, const bgn *P_B, const bgn *P_N, ulong mm, const bgn *P_T ) -{ - int i, n, m; - ulong u0, u1, *d; - - memset( P_T->p, 0, P_T->n * ciL ); - - d = P_T->p; - n = P_N->n; - m = ( P_B->n < n ) ? P_B->n : n; - - for( i = 0; i < n; i++ ) - { - u0 = P_A->p[i]; - u1 = ( d[0] + u0 * P_B->p[0] ) * mm; - - bgn_mul_hlp( m, P_B->p, d, u0 ); - bgn_mul_hlp( n, P_N->p, d, u1 ); - - *d++ = u0; d[n + 1] = 0; - } - - memcpy( P_A->p, d, (n + 1) * ciL ); - - if( bgn_cmp_abs( P_A, P_N ) >= 0 ) - { - bgn_sub_hlp( n, P_N->p, P_A->p ); - } - else - { - bgn_sub_hlp( n, P_A->p, P_T->p ); - } -} - -void montg_red( bgn *P_A, const bgn *P_N, ulong mm, const bgn *P_T ) -{ - ulong z = 1; - bgn U; - - U.n = U.s = z; - U.p = &z; - - montg_mul( P_A, &U, P_N, mm, P_T ); -} diff --git a/drivers/misc/mediatek/masp/asfv2/asf_export_inc/sec_osal.h b/drivers/misc/mediatek/masp/asfv2/asf_export_inc/sec_osal.h index 8adec65dd..0c54a1142 100644 --- a/drivers/misc/mediatek/masp/asfv2/asf_export_inc/sec_osal.h +++ b/drivers/misc/mediatek/masp/asfv2/asf_export_inc/sec_osal.h @@ -2,17 +2,6 @@ #define SEC_OSAL_H /************************************************************************** - * Operating System Abstract Layer - ERROR Definition - **************************************************************************/ -#define OSAL_FILE_NULL (0) -#define OSAL_FILE_OPEN_FAIL (-1) -#define OSAL_FILE_CLOSE_FAIL (-2) -#define OSAL_FILE_SEEK_FAIL (-3) -#define OSAL_FILE_GET_POS_FAIL (-4) -#define OSAL_FILE_READ_FAIL (-5) - - -/************************************************************************** * Operating System Abstract Layer - External Function **************************************************************************/ extern void osal_kfree(void *buf); @@ -33,36 +22,14 @@ extern int osal_rid_lock(void); extern void osal_rid_unlock(void); extern void osal_msleep(unsigned int msec); extern void osal_assert(unsigned int val); -extern int osal_set_kernel_fs(void); -extern void osal_restore_fs(void); -extern int osal_filp_open_read_only(const char *file_path); -extern void *osal_get_filp_struct(int fp_id); -extern int osal_filp_close(int fp_id); -extern long long osal_filp_seek_set(int fp_id, long long off); -extern long long osal_filp_seek_end(int fp_id, long long off); -extern long long osal_filp_pos(int fp_id); -extern long osal_filp_read(int fp_id, char *buf, unsigned long len); -extern long osal_is_err(int fp_id); /************************************************************************** * Operating System Abstract Layer - Macro **************************************************************************/ #define SEC_ASSERT(a) osal_assert(a) -#define ASF_FILE int -#define ASF_FILE_NULL OSAL_FILE_NULL -#define ASF_GET_DS osal_set_kernel_fs() -#define ASF_PUT_DS osal_restore_fs() -#define ASF_OPEN(file_name) osal_filp_open_read_only(file_name) -#define ASF_FILE_ERROR(fp) (fp == OSAL_FILE_NULL) -#define ASF_CLOSE(fp) osal_filp_close(fp) -#define ASF_SEEK_SET(fp, off) osal_filp_seek_set(fp, off) -#define ASF_SEEK_END(fp, off) osal_filp_seek_end(fp, off) -#define ASF_FILE_POS(fp) osal_filp_pos(fp) #define ASF_MALLOC(len) osal_kmalloc(len) #define ASF_FREE(buf) osal_kfree(buf) -#define ASF_READ(fp, buf, len) osal_filp_read(fp, buf, len) #define ASF_STRTOK(str, delim) strsep(&str, delim) -#define ASF_IS_ERR(fp) osal_is_err(fp) #endif /* SEC_OSAL_H */ diff --git a/drivers/misc/mediatek/masp/asfv2/asf_inc/sec_ccci.h b/drivers/misc/mediatek/masp/asfv2/asf_inc/sec_ccci.h index 46162f76e..b15a94ce5 100644 --- a/drivers/misc/mediatek/masp/asfv2/asf_inc/sec_ccci.h +++ b/drivers/misc/mediatek/masp/asfv2/asf_inc/sec_ccci.h @@ -4,8 +4,6 @@ int masp_ccci_signfmt_verify_file(char *file_path, unsigned int *data_offset, unsigned int *data_sec_len); int masp_ccci_version_info(void); -int sec_ccci_file_open(char *file_path); -int sec_ccci_file_close(int fp_id); int masp_ccci_is_cipherfmt(int fp_id, unsigned int start_off, unsigned int *img_len); int masp_ccci_decrypt_cipherfmt(int fp_id, unsigned int start_off, char *buf, unsigned int buf_len, unsigned int *data_offset); diff --git a/drivers/misc/mediatek/masp/asfv2/core/sec_legacy.c b/drivers/misc/mediatek/masp/asfv2/core/sec_legacy.c index abdb6b62f..8f029c7b2 100644 --- a/drivers/misc/mediatek/masp/asfv2/core/sec_legacy.c +++ b/drivers/misc/mediatek/masp/asfv2/core/sec_legacy.c @@ -73,24 +73,6 @@ int masp_ccci_version_info(void) return CCCI_VERSION; } -int sec_ccci_file_open(char *file_path) -{ - int fp_id; - - fp_id = osal_filp_open_read_only(file_path); - - if (fp_id != OSAL_FILE_NULL) - return fp_id; - - return -1; -} - -int sec_ccci_file_close(int fp_id) -{ - return osal_filp_close(fp_id); -} - - int masp_ccci_is_cipherfmt(int fp_id, unsigned int start_off, unsigned int *img_len) { return 0; diff --git a/drivers/misc/mediatek/masp/asfv2/core/sec_osal.c b/drivers/misc/mediatek/masp/asfv2/core/sec_osal.c index d4d12ce96..1ebbd60d0 100644 --- a/drivers/misc/mediatek/masp/asfv2/core/sec_osal.c +++ b/drivers/misc/mediatek/masp/asfv2/core/sec_osal.c @@ -11,7 +11,6 @@ #include <linux/errno.h> #include <linux/mutex.h> #include <linux/mtd/mtd.h> -#include <linux/fs.h> #include <linux/mtd/partitions.h> #include <asm/uaccess.h> #include <linux/slab.h> @@ -41,11 +40,6 @@ DEFINE_SEMAPHORE(osal_secro_v5_sem); /***************************************************************************** * LOCAL VARIABLE *****************************************************************************/ -static mm_segment_t curr_fs; -#define OSAL_MAX_FP_COUNT 4096 -#define OSAL_FP_OVERFLOW OSAL_MAX_FP_COUNT -/* The array 0 will be not be used, and fp_id=0 will be though as NULL file */ -static struct file *g_osal_fp[OSAL_MAX_FP_COUNT] = { 0 }; /***************************************************************************** * PORTING LAYER @@ -159,191 +153,3 @@ void osal_assert(unsigned int val) ASSERT(val); } EXPORT_SYMBOL(osal_assert); - -int osal_set_kernel_fs(void) -{ - int val = 0; - - val = down_interruptible(&sec_mm_sem); - curr_fs = get_fs(); - set_fs(KERNEL_DS); - return val; -} -EXPORT_SYMBOL(osal_set_kernel_fs); - -void osal_restore_fs(void) -{ - set_fs(curr_fs); - up(&sec_mm_sem); -} -EXPORT_SYMBOL(osal_restore_fs); - -int osal_filp_open_read_only(const char *file_path) -{ - int filp_id = 0; - int val = 0; - - val = down_interruptible(&osal_fp_sem); - - for (filp_id = 1; filp_id < OSAL_MAX_FP_COUNT - 1; filp_id++) { - if (g_osal_fp[filp_id] == NULL) - break; - } - - g_osal_fp[filp_id] = filp_open(file_path, O_RDONLY, 0777); - - if (IS_ERR(g_osal_fp[filp_id])) { - g_osal_fp[OSAL_FILE_NULL] = g_osal_fp[filp_id]; /* Record the fail reason in pos 0 */ - g_osal_fp[filp_id] = NULL; - filp_id = OSAL_FILE_NULL; - } - - up(&osal_fp_sem); - - /* the fp_id = 0 will be thought as NULL file ponter */ - if (filp_id >= OSAL_FP_OVERFLOW) { - g_osal_fp[OSAL_FILE_NULL] = (struct file *)(-ENOMEM); /* Out of memory */ - return OSAL_FILE_NULL; - } - - return filp_id; -} -EXPORT_SYMBOL(osal_filp_open_read_only); - -void *osal_get_filp_struct(int fp_id) -{ - int val = 0; - struct file *ret; - - if (fp_id >= 1 && fp_id < OSAL_MAX_FP_COUNT) { - val = down_interruptible(&osal_fp_sem); - - ret = g_osal_fp[fp_id]; - - up(&osal_fp_sem); - - return (void *)ret; - } - - return (struct file *)(-ENOENT); /* No such file or directory */ -} -EXPORT_SYMBOL(osal_get_filp_struct); - -int osal_filp_close(int fp_id) -{ - int val = 0; - int ret = 0; - - if (fp_id >= 1 && fp_id < OSAL_MAX_FP_COUNT) { - val = down_interruptible(&osal_fp_sem); - - if (!IS_ERR(g_osal_fp[fp_id])) - ret = filp_close(g_osal_fp[fp_id], NULL); - g_osal_fp[fp_id] = NULL; - - up(&osal_fp_sem); - - return ret; - } - - return OSAL_FILE_CLOSE_FAIL; -} -EXPORT_SYMBOL(osal_filp_close); - -loff_t osal_filp_seek_set(int fp_id, loff_t off) -{ - loff_t offset; - int val = 0; - - if (fp_id >= 1 && fp_id < OSAL_MAX_FP_COUNT) { - val = down_interruptible(&osal_fp_sem); - - offset = g_osal_fp[fp_id]->f_op->llseek(g_osal_fp[fp_id], off, SEEK_SET); - - up(&osal_fp_sem); - - return offset; - } - - return OSAL_FILE_SEEK_FAIL; -} -EXPORT_SYMBOL(osal_filp_seek_set); - -loff_t osal_filp_seek_end(int fp_id, loff_t off) -{ - loff_t offset; - int val = 0; - - if (fp_id >= 1 && fp_id < OSAL_MAX_FP_COUNT) { - val = down_interruptible(&osal_fp_sem); - - offset = g_osal_fp[fp_id]->f_op->llseek(g_osal_fp[fp_id], off, SEEK_END); - - up(&osal_fp_sem); - - return offset; - } - - return OSAL_FILE_SEEK_FAIL; -} -EXPORT_SYMBOL(osal_filp_seek_end); - -loff_t osal_filp_pos(int fp_id) -{ - loff_t offset; - int val = 0; - - if (fp_id >= 1 && fp_id < OSAL_MAX_FP_COUNT) { - val = down_interruptible(&osal_fp_sem); - - offset = g_osal_fp[fp_id]->f_pos; - - up(&osal_fp_sem); - - return offset; - } - - return OSAL_FILE_GET_POS_FAIL; -} -EXPORT_SYMBOL(osal_filp_pos); - -long osal_filp_read(int fp_id, char *buf, unsigned long len) -{ - ssize_t read_len; - int val = 0; - - if (fp_id >= 1 && fp_id < OSAL_MAX_FP_COUNT) { - val = down_interruptible(&osal_fp_sem); - - read_len = - g_osal_fp[fp_id]->f_op->read(g_osal_fp[fp_id], buf, len, - &g_osal_fp[fp_id]->f_pos); - - up(&osal_fp_sem); - - return read_len; - } - - return OSAL_FILE_READ_FAIL; -} -EXPORT_SYMBOL(osal_filp_read); - -long osal_is_err(int fp_id) -{ - bool err; - int val = 0; - - if (fp_id >= 1 && fp_id < OSAL_MAX_FP_COUNT) { - val = down_interruptible(&osal_fp_sem); - - err = IS_ERR(g_osal_fp[fp_id]); - - up(&osal_fp_sem); - - return err; - } - - /*osal_assert(0); */ - return 1; -} -EXPORT_SYMBOL(osal_is_err); |
