/* * Copyright (c) 2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include "securec.h" #include "../profile_resources.h" namespace OHOS { namespace SignatureTools { bool SignProfileTest001(const uint8_t* data, size_t size) { std::string content(data, data + size); Options options; std::string mode = SIGN_PROFILE_MODE; std::string keyAlias = SIGN_PROFILE_KEY_ALIAS; std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE; std::string signAlg = SIGN_PROFILE_SIGN_ALG; std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE; std::string outFile = SIGN_PROFILE_OUT_FILE; std::string inFile = SIGN_PROFILE_IN_FILE; char keyStorePwd[] = "123456"; char keypwd[] = "123456"; options[Options::KEY_ALIAS] = keyAlias; options[Options::MODE] = mode; options[Options::PROFILE_CERT_FILE] = profileCertFile; options[Options::SIGN_ALG] = signAlg; options[Options::KEY_STORE_FILE] = keystoreFile; options[Options::OUT_FILE] = outFile; options[Options::IN_FILE] = inFile; options[Options::KEY_RIGHTS] = keypwd; options[Options::KEY_STORE_RIGHTS] = keyStorePwd; LocalizationAdapter adapter(&options); SignerFactory factory; std::shared_ptr signer = factory.GetSigner(adapter); PKCS7Data p7; std::string p7b; int result = p7.Sign(content, signer, signAlg, p7b); return result == 0; } bool SignProfileTest002(const uint8_t* data, size_t size) { Options options; std::string mode = SIGN_PROFILE_MODE; std::string keyAlias = SIGN_PROFILE_KEY_ALIAS; std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE; std::string signAlg = SIGN_PROFILE_SIGN_ALG; std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE; std::string outFile = SIGN_PROFILE_OUT_FILE; std::string inFile = SIGN_PROFILE_IN_FILE; char keyStorePwd[] = "123456"; char keypwd[] = "123456"; options[Options::KEY_ALIAS] = keyAlias; options[Options::MODE] = mode; options[Options::PROFILE_CERT_FILE] = profileCertFile; options[Options::SIGN_ALG] = signAlg; options[Options::KEY_STORE_FILE] = keystoreFile; options[Options::OUT_FILE] = outFile; options[Options::IN_FILE] = inFile; options[Options::KEY_RIGHTS] = keypwd; options[Options::KEY_STORE_RIGHTS] = keyStorePwd; LocalizationAdapter adapter(&options); SignerFactory factory; std::shared_ptr signer = factory.GetSigner(adapter); STACK_OF(X509)* certs = signer->GetCertificates(); PKCS7Data::PrintCertChainSub(certs); return true; } bool SignProfileTest003(const uint8_t* data, size_t size) { std::string provision(reinterpret_cast(data), size); ProfileInfo info; AppProvisionVerifyResult result = ParseAndVerify(provision, info); return result == AppProvisionVerifyResult::PROVISION_OK; } bool DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size) { SignProfileTest001(data, size); SignProfileTest002(data, size); SignProfileTest003(data, size); return true; } } } /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { /* Run your code on data */ OHOS::SignatureTools::DoSomethingInterestingWithMyAPI(data, size); return 0; }