154aa6d63Sopenharmony_ci/* 254aa6d63Sopenharmony_ci * Copyright (c) 2024-2024 Huawei Device Co., Ltd. 354aa6d63Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 454aa6d63Sopenharmony_ci * you may not use this file except in compliance with the License. 554aa6d63Sopenharmony_ci * You may obtain a copy of the License at 654aa6d63Sopenharmony_ci * 754aa6d63Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 854aa6d63Sopenharmony_ci * 954aa6d63Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1054aa6d63Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1154aa6d63Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1254aa6d63Sopenharmony_ci * See the License for the specific language governing permissions and 1354aa6d63Sopenharmony_ci * limitations under the License. 1454aa6d63Sopenharmony_ci */ 1554aa6d63Sopenharmony_ci#include <memory> 1654aa6d63Sopenharmony_ci#include <gtest/gtest.h> 1754aa6d63Sopenharmony_ci#include "sign_bin.h" 1854aa6d63Sopenharmony_ci#include "sign_provider.h" 1954aa6d63Sopenharmony_ci#include "local_sign_provider.h" 2054aa6d63Sopenharmony_ci 2154aa6d63Sopenharmony_ci#define VERSION 9 2254aa6d63Sopenharmony_ci#define BYTE_NUMBER 32 2354aa6d63Sopenharmony_ci 2454aa6d63Sopenharmony_cinamespace OHOS { 2554aa6d63Sopenharmony_cinamespace SignatureTools { 2654aa6d63Sopenharmony_civoid ConstructSignerConfig(SignerConfig& signerConfig, Options& options) 2754aa6d63Sopenharmony_ci{ 2854aa6d63Sopenharmony_ci signerConfig.SetCompatibleVersion(VERSION); 2954aa6d63Sopenharmony_ci 3054aa6d63Sopenharmony_ci std::map<std::string, std::string> params; 3154aa6d63Sopenharmony_ci params["keyPwd"] = "123456"; 3254aa6d63Sopenharmony_ci params["mode"] = "localSign"; 3354aa6d63Sopenharmony_ci params["keyAlias"] = "oh-app1-key-v1"; 3454aa6d63Sopenharmony_ci params["signAlg"] = "SHA256withECDSA"; 3554aa6d63Sopenharmony_ci params["appCertFile"] = "./hapSign/app-release1.pem"; 3654aa6d63Sopenharmony_ci params["signCode"] = "1"; 3754aa6d63Sopenharmony_ci params["compatibleVersion"] = "9"; 3854aa6d63Sopenharmony_ci params["outFile"] = "./hapSign/signed.bin"; 3954aa6d63Sopenharmony_ci params["profileFile"] = "./hapSign/app1-profile1.p7b"; 4054aa6d63Sopenharmony_ci params["keystorePwd"] = "123456"; 4154aa6d63Sopenharmony_ci params["keystoreFile"] = "./hapSign/ohtest.p12"; 4254aa6d63Sopenharmony_ci params["inFile"] = "./hapSign/unsigned.bin"; 4354aa6d63Sopenharmony_ci params["profileSigned"] = "1"; 4454aa6d63Sopenharmony_ci signerConfig.FillParameters(params); 4554aa6d63Sopenharmony_ci 4654aa6d63Sopenharmony_ci ContentDigestAlgorithm contentDigestAlgorithm("SHA-256", BYTE_NUMBER); 4754aa6d63Sopenharmony_ci std::pair<std::string, void*> signatureAlgAndParams("SHA256withECDSA", nullptr); 4854aa6d63Sopenharmony_ci SignatureAlgorithmHelper signatureAlgorithm(SignatureAlgorithmId::ECDSA_WITH_SHA256, "ECDSA_WITH_SHA256", 4954aa6d63Sopenharmony_ci contentDigestAlgorithm, signatureAlgAndParams); 5054aa6d63Sopenharmony_ci std::vector<SignatureAlgorithmHelper> signatureAlgorithms; 5154aa6d63Sopenharmony_ci signatureAlgorithms.push_back(signatureAlgorithm); 5254aa6d63Sopenharmony_ci signerConfig.SetSignatureAlgorithms(signatureAlgorithms); 5354aa6d63Sopenharmony_ci 5454aa6d63Sopenharmony_ci options.emplace("mode", std::string("localSign")); 5554aa6d63Sopenharmony_ci char keyPwd[] = "123456"; 5654aa6d63Sopenharmony_ci options.emplace("keyPwd", keyPwd); 5754aa6d63Sopenharmony_ci options.emplace("outFile", std::string("./hapSign/signed.bin")); 5854aa6d63Sopenharmony_ci options.emplace("keyAlias", std::string("oh-app1-key-v1")); 5954aa6d63Sopenharmony_ci options.emplace("profileFile", std::string("./hapSign/app1-profile1.p7b")); 6054aa6d63Sopenharmony_ci options.emplace("signAlg", std::string("SHA256withECDSA")); 6154aa6d63Sopenharmony_ci char keystorePwd[] = "123456"; 6254aa6d63Sopenharmony_ci options.emplace("keystorePwd", keystorePwd); 6354aa6d63Sopenharmony_ci options.emplace("keystoreFile", std::string("./hapSign/ohtest.p12")); 6454aa6d63Sopenharmony_ci options.emplace("appCertFile", std::string("./hapSign/app-release1.pem")); 6554aa6d63Sopenharmony_ci options.emplace("inFile", std::string("./hapSign/unsigned.bin")); 6654aa6d63Sopenharmony_ci signerConfig.SetOptions(&options); 6754aa6d63Sopenharmony_ci} 6854aa6d63Sopenharmony_ci 6954aa6d63Sopenharmony_civoid ConstructSignParams(std::map<std::string, std::string>& signParams) 7054aa6d63Sopenharmony_ci{ 7154aa6d63Sopenharmony_ci signParams["a"] = "4"; 7254aa6d63Sopenharmony_ci signParams["appCertFile"] = "./hapSign/app-release1.pem"; 7354aa6d63Sopenharmony_ci signParams["compatibleVersion"] = "9"; 7454aa6d63Sopenharmony_ci signParams["inFile"] = "./hapSign/unsigned.bin"; 7554aa6d63Sopenharmony_ci signParams["inForm"] = "bin"; 7654aa6d63Sopenharmony_ci signParams["keyAlias"] = "oh-app1-key-v1"; 7754aa6d63Sopenharmony_ci signParams["keyPwd"] = "123456"; 7854aa6d63Sopenharmony_ci signParams["keystoreFile"] = "./hapSign/ohtest.p12"; 7954aa6d63Sopenharmony_ci signParams["keystorePwd"] = "123456"; 8054aa6d63Sopenharmony_ci signParams["outFile"] = "./hapSign/signed.bin"; 8154aa6d63Sopenharmony_ci signParams["profileFile"] = "./hapSign/app1-profile1.p7b"; 8254aa6d63Sopenharmony_ci signParams["profileSigned"] = "1"; 8354aa6d63Sopenharmony_ci signParams["signAlg"] = "SHA256withECDSA"; 8454aa6d63Sopenharmony_ci signParams["signCode"] = "1"; 8554aa6d63Sopenharmony_ci} 8654aa6d63Sopenharmony_ci 8754aa6d63Sopenharmony_ciclass SignBinTest : public testing::Test { 8854aa6d63Sopenharmony_cipublic: 8954aa6d63Sopenharmony_ci static void SetUpTestCase(void) 9054aa6d63Sopenharmony_ci { 9154aa6d63Sopenharmony_ci (void)rename("./hapSign/unsigned.txt", "./hapSign/unsigned.bin"); 9254aa6d63Sopenharmony_ci }; 9354aa6d63Sopenharmony_ci static void TearDownTestCase() 9454aa6d63Sopenharmony_ci { 9554aa6d63Sopenharmony_ci }; 9654aa6d63Sopenharmony_ci void SetUp() 9754aa6d63Sopenharmony_ci { 9854aa6d63Sopenharmony_ci }; 9954aa6d63Sopenharmony_ci void TearDown() 10054aa6d63Sopenharmony_ci { 10154aa6d63Sopenharmony_ci }; 10254aa6d63Sopenharmony_ci}; 10354aa6d63Sopenharmony_ci 10454aa6d63Sopenharmony_ci/** 10554aa6d63Sopenharmony_ci * @tc.name: GenerateFileDigest001 10654aa6d63Sopenharmony_ci * @tc.desc: The return digest size is 0, because the algorithm does not support. 10754aa6d63Sopenharmony_ci * @tc.size: MEDIUM 10854aa6d63Sopenharmony_ci * @tc.type: FUNC 10954aa6d63Sopenharmony_ci * @tc.level Level 1 11054aa6d63Sopenharmony_ci * @tc.require: SR000H63TL 11154aa6d63Sopenharmony_ci */ 11254aa6d63Sopenharmony_ciHWTEST_F(SignBinTest, GenerateFileDigest001, testing::ext::TestSize.Level1) 11354aa6d63Sopenharmony_ci{ 11454aa6d63Sopenharmony_ci std::shared_ptr<SignBin> api = std::make_shared<SignBin>(); 11554aa6d63Sopenharmony_ci std::vector<int8_t> generateFileDigest = api->GenerateFileDigest("./signed.bin", "SHA266"); 11654aa6d63Sopenharmony_ci EXPECT_EQ(generateFileDigest.size(), 0); 11754aa6d63Sopenharmony_ci} 11854aa6d63Sopenharmony_ci 11954aa6d63Sopenharmony_ci/** 12054aa6d63Sopenharmony_ci * @tc.name: GenerateFileDigest002 12154aa6d63Sopenharmony_ci * @tc.desc: The return digest size is 0, because the input file does not exist. 12254aa6d63Sopenharmony_ci * @tc.size: MEDIUM 12354aa6d63Sopenharmony_ci * @tc.type: FUNC 12454aa6d63Sopenharmony_ci * @tc.level Level 1 12554aa6d63Sopenharmony_ci * @tc.require: SR000H63TL 12654aa6d63Sopenharmony_ci */ 12754aa6d63Sopenharmony_ciHWTEST_F(SignBinTest, GenerateFileDigest002, testing::ext::TestSize.Level1) 12854aa6d63Sopenharmony_ci{ 12954aa6d63Sopenharmony_ci std::shared_ptr<SignBin> api = std::make_shared<SignBin>(); 13054aa6d63Sopenharmony_ci std::vector<int8_t> generateFileDigest = api->GenerateFileDigest("./signed.bin", "SHA384withECDSA"); 13154aa6d63Sopenharmony_ci EXPECT_EQ(generateFileDigest.size(), 0); 13254aa6d63Sopenharmony_ci} 13354aa6d63Sopenharmony_ci 13454aa6d63Sopenharmony_ci/** 13554aa6d63Sopenharmony_ci * @tc.name: Sign001 13654aa6d63Sopenharmony_ci * @tc.desc: The block head data made failed 13754aa6d63Sopenharmony_ci * @tc.size: MEDIUM 13854aa6d63Sopenharmony_ci * @tc.type: FUNC 13954aa6d63Sopenharmony_ci * @tc.level Level 1 14054aa6d63Sopenharmony_ci * @tc.require: SR000H63TL 14154aa6d63Sopenharmony_ci */ 14254aa6d63Sopenharmony_ciHWTEST_F(SignBinTest, Sign001, testing::ext::TestSize.Level1) 14354aa6d63Sopenharmony_ci{ 14454aa6d63Sopenharmony_ci // go to branch "The block head data made failed" 14554aa6d63Sopenharmony_ci std::shared_ptr<SignBin> api = std::make_shared<SignBin>(); 14654aa6d63Sopenharmony_ci 14754aa6d63Sopenharmony_ci // 1.construct SignerConfig 14854aa6d63Sopenharmony_ci SignerConfig signerConfig; 14954aa6d63Sopenharmony_ci Options options; 15054aa6d63Sopenharmony_ci ConstructSignerConfig(signerConfig, options); 15154aa6d63Sopenharmony_ci 15254aa6d63Sopenharmony_ci // 2.construct signParams 15354aa6d63Sopenharmony_ci std::string appCertFile = "./hapSign/app-release1.pem"; 15454aa6d63Sopenharmony_ci std::string compatibleVersion = "9"; 15554aa6d63Sopenharmony_ci std::string inFile = "./hapSign/unvalid.bin"; 15654aa6d63Sopenharmony_ci std::string inForm = "bin"; 15754aa6d63Sopenharmony_ci std::string keyAlias = "oh-app1-key-v1"; 15854aa6d63Sopenharmony_ci static char keyPwd[] = "123456"; 15954aa6d63Sopenharmony_ci std::string keystoreFile = "./hapSign/ohtest.p12"; 16054aa6d63Sopenharmony_ci static char keystorePwd[] = "123456"; 16154aa6d63Sopenharmony_ci std::string outFile = "./hapSign/signed.bin"; 16254aa6d63Sopenharmony_ci std::string profileFile = "./hapSign/app1-profile1.p7b"; 16354aa6d63Sopenharmony_ci std::string profileSigned = "1"; 16454aa6d63Sopenharmony_ci std::string signAlg = "SHA256withECDSA"; 16554aa6d63Sopenharmony_ci std::string signCode = "1"; 16654aa6d63Sopenharmony_ci std::string mode = "localSign"; 16754aa6d63Sopenharmony_ci 16854aa6d63Sopenharmony_ci std::map<std::string, std::string> signParams; 16954aa6d63Sopenharmony_ci signParams["a"] = "4"; 17054aa6d63Sopenharmony_ci signParams["appCertFile"] = appCertFile; 17154aa6d63Sopenharmony_ci signParams["compatibleVersion"] = compatibleVersion; 17254aa6d63Sopenharmony_ci signParams["inFile"] = inFile; 17354aa6d63Sopenharmony_ci signParams["inForm"] = inForm; 17454aa6d63Sopenharmony_ci signParams["keyAlias"] = keyAlias; 17554aa6d63Sopenharmony_ci signParams["keyPwd"] = keyPwd; 17654aa6d63Sopenharmony_ci signParams["keystoreFile"] = keystoreFile; 17754aa6d63Sopenharmony_ci signParams["keystorePwd"] = keystorePwd; 17854aa6d63Sopenharmony_ci signParams["outFile"] = outFile; 17954aa6d63Sopenharmony_ci signParams["profileFile"] = profileFile; 18054aa6d63Sopenharmony_ci signParams["profileSigned"] = profileSigned; 18154aa6d63Sopenharmony_ci signParams["signAlg"] = signAlg; 18254aa6d63Sopenharmony_ci signParams["signCode"] = signCode; 18354aa6d63Sopenharmony_ci signParams["mode"] = mode; 18454aa6d63Sopenharmony_ci 18554aa6d63Sopenharmony_ci bool flag = api->Sign(signerConfig, signParams); 18654aa6d63Sopenharmony_ci EXPECT_EQ(flag, false); 18754aa6d63Sopenharmony_ci} 18854aa6d63Sopenharmony_ci 18954aa6d63Sopenharmony_ci/** 19054aa6d63Sopenharmony_ci * @tc.name: Sign002 19154aa6d63Sopenharmony_ci * @tc.desc: The sign data made failed. 19254aa6d63Sopenharmony_ci * @tc.size: MEDIUM 19354aa6d63Sopenharmony_ci * @tc.type: FUNC 19454aa6d63Sopenharmony_ci * @tc.level Level 1 19554aa6d63Sopenharmony_ci * @tc.require: SR000H63TL 19654aa6d63Sopenharmony_ci */ 19754aa6d63Sopenharmony_ciHWTEST_F(SignBinTest, Sign002, testing::ext::TestSize.Level1) 19854aa6d63Sopenharmony_ci{ 19954aa6d63Sopenharmony_ci // go to branch "The sign data made failed" 20054aa6d63Sopenharmony_ci std::shared_ptr<SignBin> api = std::make_shared<SignBin>(); 20154aa6d63Sopenharmony_ci 20254aa6d63Sopenharmony_ci // 1.construct SignerConfig 20354aa6d63Sopenharmony_ci SignerConfig signerConfig; 20454aa6d63Sopenharmony_ci Options options; 20554aa6d63Sopenharmony_ci ConstructSignerConfig(signerConfig, options); 20654aa6d63Sopenharmony_ci 20754aa6d63Sopenharmony_ci // 2.construct sign params 20854aa6d63Sopenharmony_ci std::map<std::string, std::string> signParams; 20954aa6d63Sopenharmony_ci ConstructSignParams(signParams); 21054aa6d63Sopenharmony_ci 21154aa6d63Sopenharmony_ci bool flag = api->Sign(signerConfig, signParams); 21254aa6d63Sopenharmony_ci EXPECT_EQ(flag, false); 21354aa6d63Sopenharmony_ci} 21454aa6d63Sopenharmony_ci 21554aa6d63Sopenharmony_ci/** 21654aa6d63Sopenharmony_ci * @tc.name: SignBin001 21754aa6d63Sopenharmony_ci * @tc.desc: check Compatible Version failed. 21854aa6d63Sopenharmony_ci * @tc.size: MEDIUM 21954aa6d63Sopenharmony_ci * @tc.type: FUNC 22054aa6d63Sopenharmony_ci * @tc.level Level 1 22154aa6d63Sopenharmony_ci * @tc.require: SR000H63TL 22254aa6d63Sopenharmony_ci */ 22354aa6d63Sopenharmony_ciHWTEST_F(SignBinTest, SignBin001, testing::ext::TestSize.Level1) 22454aa6d63Sopenharmony_ci{ 22554aa6d63Sopenharmony_ci // go to branch "check Compatible Version failed" 22654aa6d63Sopenharmony_ci std::unique_ptr<SignProvider> signProvider = std::make_unique<LocalSignProvider>(); 22754aa6d63Sopenharmony_ci std::shared_ptr<Options> params = std::make_shared<Options>(); 22854aa6d63Sopenharmony_ci 22954aa6d63Sopenharmony_ci std::string mode = "localSign"; 23054aa6d63Sopenharmony_ci std::string keyAlias = "oh-app1-key-v1"; 23154aa6d63Sopenharmony_ci std::string signAlg = "SHA256withECDSA"; 23254aa6d63Sopenharmony_ci std::string signCode = "1"; 23354aa6d63Sopenharmony_ci std::string appCertFile = "./hapSign/app-release1.pem"; 23454aa6d63Sopenharmony_ci std::string profileFile = "./hapSign/app1-profile1.p7b"; 23554aa6d63Sopenharmony_ci std::string inFile = "./hapSign/unsigned.bin"; 23654aa6d63Sopenharmony_ci std::string keystoreFile = "./hapSign/ohtest.p12"; 23754aa6d63Sopenharmony_ci std::string outFile = "./hapSign/signed.bin"; 23854aa6d63Sopenharmony_ci std::string inForm = "bin"; 23954aa6d63Sopenharmony_ci char keyPwd[] = "123456"; 24054aa6d63Sopenharmony_ci char keystorePwd[] = "123456"; 24154aa6d63Sopenharmony_ci std::string compatibleVersion = ""; 24254aa6d63Sopenharmony_ci 24354aa6d63Sopenharmony_ci (*params)["mode"] = mode; 24454aa6d63Sopenharmony_ci (*params)["keyAlias"] = keyAlias; 24554aa6d63Sopenharmony_ci (*params)["signAlg"] = signAlg; 24654aa6d63Sopenharmony_ci (*params)["signCode"] = signCode; 24754aa6d63Sopenharmony_ci (*params)["appCertFile"] = appCertFile; 24854aa6d63Sopenharmony_ci (*params)["profileFile"] = profileFile; 24954aa6d63Sopenharmony_ci (*params)["inFile"] = inFile; 25054aa6d63Sopenharmony_ci (*params)["keystoreFile"] = keystoreFile; 25154aa6d63Sopenharmony_ci (*params)["outFile"] = outFile; 25254aa6d63Sopenharmony_ci (*params)["inForm"] = inForm; 25354aa6d63Sopenharmony_ci (*params)["keyPwd"] = keyPwd; 25454aa6d63Sopenharmony_ci (*params)["keystorePwd"] = keystorePwd; 25554aa6d63Sopenharmony_ci (*params)["compatibleVersion"] = compatibleVersion; 25654aa6d63Sopenharmony_ci bool ret = signProvider->SignBin(params.get()); 25754aa6d63Sopenharmony_ci EXPECT_EQ(ret, false); 25854aa6d63Sopenharmony_ci} 25954aa6d63Sopenharmony_ci 26054aa6d63Sopenharmony_ci/** 26154aa6d63Sopenharmony_ci * @tc.name: SignBin002 26254aa6d63Sopenharmony_ci * @tc.desc: Test function result of SignBin002 will be SUCCESS. 26354aa6d63Sopenharmony_ci * @tc.size: MEDIUM 26454aa6d63Sopenharmony_ci * @tc.type: FUNC 26554aa6d63Sopenharmony_ci * @tc.level Level 1 26654aa6d63Sopenharmony_ci * @tc.require: SR000H63TL 26754aa6d63Sopenharmony_ci */ 26854aa6d63Sopenharmony_ciHWTEST_F(SignBinTest, SignBin002, testing::ext::TestSize.Level1) 26954aa6d63Sopenharmony_ci{ 27054aa6d63Sopenharmony_ci std::unique_ptr<SignProvider> signProvider = std::make_unique<LocalSignProvider>(); 27154aa6d63Sopenharmony_ci std::shared_ptr<Options> params = std::make_shared<Options>(); 27254aa6d63Sopenharmony_ci 27354aa6d63Sopenharmony_ci std::string mode = "localSign"; 27454aa6d63Sopenharmony_ci std::string keyAlias = "oh-app1-key-v1"; 27554aa6d63Sopenharmony_ci std::string signAlg = "SHA256withECDSA"; 27654aa6d63Sopenharmony_ci std::string signCode = "1"; 27754aa6d63Sopenharmony_ci std::string appCertFile = "./hapSign/app-release1.pem"; 27854aa6d63Sopenharmony_ci std::string profileFile = "./hapSign/app1-profile1.p7b"; 27954aa6d63Sopenharmony_ci std::string inFile = "./hapSign/unsigned.bin"; 28054aa6d63Sopenharmony_ci std::string keystoreFile = "./hapSign/ohtest.p12"; 28154aa6d63Sopenharmony_ci std::string outFile = "./hapSign/signed.bin"; 28254aa6d63Sopenharmony_ci std::string inForm = "bin"; 28354aa6d63Sopenharmony_ci char keyPwd[] = "123456"; 28454aa6d63Sopenharmony_ci char keystorePwd[] = "123456"; 28554aa6d63Sopenharmony_ci std::string compatibleVersion = "9"; 28654aa6d63Sopenharmony_ci 28754aa6d63Sopenharmony_ci (*params)["mode"] = mode; 28854aa6d63Sopenharmony_ci (*params)["keyAlias"] = keyAlias; 28954aa6d63Sopenharmony_ci (*params)["signAlg"] = signAlg; 29054aa6d63Sopenharmony_ci (*params)["signCode"] = signCode; 29154aa6d63Sopenharmony_ci (*params)["appCertFile"] = appCertFile; 29254aa6d63Sopenharmony_ci (*params)["profileFile"] = profileFile; 29354aa6d63Sopenharmony_ci (*params)["inFile"] = inFile; 29454aa6d63Sopenharmony_ci (*params)["keystoreFile"] = keystoreFile; 29554aa6d63Sopenharmony_ci (*params)["outFile"] = outFile; 29654aa6d63Sopenharmony_ci (*params)["inForm"] = inForm; 29754aa6d63Sopenharmony_ci (*params)["keyPwd"] = keyPwd; 29854aa6d63Sopenharmony_ci (*params)["keystorePwd"] = keystorePwd; 29954aa6d63Sopenharmony_ci (*params)["compatibleVersion"] = compatibleVersion; 30054aa6d63Sopenharmony_ci bool ret = signProvider->SignBin(params.get()); 30154aa6d63Sopenharmony_ci EXPECT_EQ(ret, true); 30254aa6d63Sopenharmony_ci} 30354aa6d63Sopenharmony_ci 30454aa6d63Sopenharmony_ci} // namespace SignatureTools 30554aa6d63Sopenharmony_ci} // namespace OHOS 306