sec_secroimg.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #ifndef AC_REGION_H
  2. #define AC_REGION_H
  3. #include "sec_osal_light.h"
  4. /**************************************************************************
  5. * [FILE SYSTEM SECROIMG PATH]
  6. **************************************************************************/
  7. /* it is only used for non-security platform */
  8. #define FS_SECRO_PATH "/system/secro/AC_REGION"
  9. /**************************************************************************
  10. * [AC REGION ID]
  11. **************************************************************************/
  12. #define ROM_SEC_AC_REGION_ID "AND_AC_REGION"
  13. #define ROM_SEC_AC_REGION_ID_LEN (13)
  14. #define RES_FOR_HEADER (0x400) /* 1KB */
  15. #define ROM_SEC_AC_SEARCH_LEN 0x100000 /* 1MB */
  16. #define MAX_SECRO_V3_OFFSET 0xFFFFFFFF
  17. /**************************************************************************
  18. * [AC-REGION HEADER FORNAT]
  19. **************************************************************************/
  20. #define AC_H_MAGIC (0x48484848)
  21. typedef struct {
  22. unsigned char m_id[16];
  23. unsigned int magic_number;
  24. unsigned int region_length; /* include andro and sv5 */
  25. unsigned int region_offset;
  26. unsigned int hash_length;
  27. unsigned int hash_offset;
  28. unsigned int andro_length;
  29. unsigned int andro_offset;
  30. unsigned int md_length;
  31. unsigned int md_offset;
  32. unsigned int md2_length;
  33. unsigned int md2_offset;
  34. unsigned char world_phone_support; /* for secro v5 format to support world phone case */
  35. unsigned char world_phone_md_count; /* for secro v5 format to support world phone case */
  36. unsigned char reserve[2];
  37. } AND_AC_HEADER_T;
  38. /**************************************************************************
  39. * [AC-REGION ANDRO FORNAT]
  40. **************************************************************************/
  41. #define AC_ANDRO_MAGIC (0x41414141)
  42. #define AP_SECRO_MAX_LEN (2939)
  43. /* control flag */
  44. #define FACTORY_EN_CODE (0x45)
  45. typedef struct {
  46. unsigned int magic_number;
  47. unsigned char sml_aes_key[32]; /* sml aes key */
  48. unsigned char factory_en;
  49. unsigned char reserve2[AP_SECRO_MAX_LEN];
  50. } AND_AC_ANDRO_T;
  51. /**************************************************************************
  52. * [AC-REGION MD FORNAT]
  53. **************************************************************************/
  54. #define AC_MD_MAGIC (0x35353535)
  55. #define MD_SECRO_MAX_LEN (4092)
  56. typedef struct {
  57. unsigned int magic_number;
  58. unsigned char reserve[MD_SECRO_MAX_LEN];
  59. } AND_AC_MD_T;
  60. #define AC_MD2_MAGIC (0x36363636)
  61. #define MD2_SECRO_MAX_LEN (4092)
  62. typedef struct {
  63. unsigned int magic_number;
  64. unsigned char reserve[MD2_SECRO_MAX_LEN];
  65. } AND_AC_MD2_T;
  66. /**************************************************************************
  67. * [Padding format to be able to align to 512/1024/2048/4096 for flash]
  68. **************************************************************************/
  69. typedef struct {
  70. unsigned int md_num;
  71. unsigned int md_len;
  72. unsigned char md_name[64];
  73. unsigned char reserve[8];
  74. } AND_AC_MD_INFO_V3a_T;
  75. #define MAX_V5_SUPPORT_MD_NUM 10
  76. typedef struct {
  77. AND_AC_MD_INFO_V3a_T md_v3a_info[MAX_V5_SUPPORT_MD_NUM];
  78. unsigned char reserve[224];
  79. } AND_SECROIMG_PADDING_T;
  80. /**************************************************************************
  81. * [AC-REGION FORNAT]
  82. **************************************************************************/
  83. typedef struct {
  84. AND_AC_HEADER_T m_header; /* 64 */
  85. AND_AC_ANDRO_T m_andro; /* 0xBA0 : 2976 */
  86. AND_AC_MD_T m_md; /* 0x1000 : 4096 */
  87. AND_AC_MD2_T m_md2; /* 0x1000 : 4096 */
  88. unsigned char hash[32]; /* it can be extended to SHA256 */
  89. AND_SECROIMG_PADDING_T m_padding; /* 0x400 : 1024 ,use padding area to store MD1 ~ MD10 modem_info */
  90. } AND_SECROIMG_T;
  91. /**************************************************************************
  92. * [SECROIMG v5a FORNAT for v5] - To support world phone
  93. **************************************************************************/
  94. typedef struct {
  95. unsigned char m_identifier[16];
  96. unsigned int magic_number;
  97. unsigned int region_len; /* include andro, sv5 and hash */
  98. unsigned int region_off;
  99. unsigned int hash_len;
  100. unsigned int hash_off;
  101. unsigned int md_info_len;
  102. unsigned int md_info_off;
  103. unsigned int md_len;
  104. unsigned int md_off;
  105. unsigned char reserve[12];
  106. } AND_AC_HEADER_V5a_T;
  107. #define AC_MD_INFO_MAGIC (0x42424242)
  108. typedef struct {
  109. unsigned int magic_number; /* Should be 0x42424242 */
  110. unsigned char md_name[64];
  111. unsigned int md_num;
  112. unsigned char reserve[2904];
  113. } AND_AC_MD_INFO_V5a_T;
  114. #define AC_SV5_MAGIC_MD_V5a (0x37373737)
  115. #define MD_V5a_SECRO_MAX_LEN (8188)
  116. typedef struct {
  117. unsigned int magic_number; /* Should be 0x37373737 */
  118. unsigned char reserve[MD_V5a_SECRO_MAX_LEN];
  119. } AND_AC_MD_V5a_T;
  120. #define AND_SECROIMG_V5a_SIZE (0x3000)
  121. typedef struct {
  122. AND_AC_HEADER_V5a_T m_header_v5a; /* 64B */
  123. AND_AC_MD_INFO_V5a_T m_md_info_v5a; /* 0xBA0 : 2976B */
  124. AND_AC_MD_V5a_T m_md_sro_v5a; /* 0x1000 : 8192B */
  125. unsigned char hash_v5a[32]; /* 32B, it can be extended to SHA256 */
  126. AND_SECROIMG_PADDING_T padding;
  127. } AND_SECROIMG_V5a_T;
  128. /**************************************************************************
  129. * [EXPORT FUNCTION]
  130. **************************************************************************/
  131. extern unsigned int sec_secro_check(void);
  132. extern bool sec_secro_ac(void);
  133. extern unsigned int sec_secro_v5_check(void);
  134. extern unsigned char masp_secro_en(void);
  135. /**************************************************************************
  136. * [EXPORT VARIABLE]
  137. **************************************************************************/
  138. extern AND_SECROIMG_T secroimg;
  139. extern AND_SECROIMG_V5a_T secroimg_v5;
  140. extern unsigned int secro_v3_off;
  141. extern bool bSecroExist;
  142. extern bool bSecroIntergiy;
  143. extern bool bSecroV5Exist;
  144. extern bool bSecroV5Intergiy;
  145. #endif /* AC_REGION_H */