diff --git a/interfaces/innerkits/appverify/include/util/hap_signing_block_utils.h b/interfaces/innerkits/appverify/include/util/hap_signing_block_utils.h index bc74d7acfebf517a54c224db8b6b6c4fca8c3710..c66a700a6e08cec502012f6f2063fe4b9504eb09 100644 --- a/interfaces/innerkits/appverify/include/util/hap_signing_block_utils.h +++ b/interfaces/innerkits/appverify/include/util/hap_signing_block_utils.h @@ -60,6 +60,8 @@ public: SignatureInfo& signInfo); private: + DLL_EXPORT static const long long HAP_SIG_BLOCK_MAGIC_HIGH_OLD; + DLL_EXPORT static const long long HAP_SIG_BLOCK_MAGIC_LOW_OLD; DLL_EXPORT static const long long HAP_SIG_BLOCK_MAGIC_HIGH; DLL_EXPORT static const long long HAP_SIG_BLOCK_MAGIC_LOW; DLL_EXPORT static const int ZIP_HEAD_OF_SIGNING_BLOCK_LENGTH; @@ -76,6 +78,7 @@ private: /* the specifications of hap sign block */ static constexpr long long MAX_HAP_SIGN_BLOCK_SIZE = 1024 * 1024 * 10LL; // 10MB static constexpr int MAX_BLOCK_COUNT = 10; + static constexpr int VERSION_FOR_NEW_MAGIC_NUM = 3; private: DLL_EXPORT static bool FindEocdInHap(RandomAccessFile& hapFile, std::pair& eocd); diff --git a/interfaces/innerkits/appverify/src/util/hap_signing_block_utils.cpp b/interfaces/innerkits/appverify/src/util/hap_signing_block_utils.cpp index 2345edd2b07be02bb118f929ba8a72821095c170..1acb4d13ed22ac9d49e080c27211be369580960c 100644 --- a/interfaces/innerkits/appverify/src/util/hap_signing_block_utils.cpp +++ b/interfaces/innerkits/appverify/src/util/hap_signing_block_utils.cpp @@ -27,8 +27,10 @@ namespace OHOS { namespace Security { namespace Verify { -const long long HapSigningBlockUtils::HAP_SIG_BLOCK_MAGIC_LOW = 2334950737560224072LL; -const long long HapSigningBlockUtils::HAP_SIG_BLOCK_MAGIC_HIGH = 3617552046287187010LL; +const long long HapSigningBlockUtils::HAP_SIG_BLOCK_MAGIC_LOW_OLD = 2334950737560224072LL; +const long long HapSigningBlockUtils::HAP_SIG_BLOCK_MAGIC_HIGH_OLD = 3617552046287187010LL; +const long long HapSigningBlockUtils::HAP_SIG_BLOCK_MAGIC_LOW = 7451613641622775868LL; +const long long HapSigningBlockUtils::HAP_SIG_BLOCK_MAGIC_HIGH = 4497797983070462062LL; /* 1MB = 1024 * 1024 Bytes */ const long long HapSigningBlockUtils::CHUNK_SIZE = 1048576LL; @@ -250,8 +252,15 @@ bool HapSigningBlockUtils::FindHapSigningBlock(RandomAccessFile& hapFile, long l bool HapSigningBlockUtils::CheckSignBlockHead(const HapSignBlockHead& hapSignBlockHead) { - if ((hapSignBlockHead.hapSignBlockMagicLo != HAP_SIG_BLOCK_MAGIC_LOW) || - (hapSignBlockHead.hapSignBlockMagicHi != HAP_SIG_BLOCK_MAGIC_HIGH)) { + long long magic_low = HAP_SIG_BLOCK_MAGIC_LOW; + long long magic_high = HAP_SIG_BLOCK_MAGIC_HIGH; + if (hapSignBlockHead.version < VERSION_FOR_NEW_MAGIC_NUM) { + magic_low = HAP_SIG_BLOCK_MAGIC_LOW_OLD; + magic_high = HAP_SIG_BLOCK_MAGIC_HIGH_OLD; + } + + if ((hapSignBlockHead.hapSignBlockMagicLo != magic_low) || + (hapSignBlockHead.hapSignBlockMagicHi != magic_high)) { HAPVERIFY_LOG_ERROR(LABEL, "No HAP Signing Block before ZIP Central Directory"); return false; }