1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "jit_code_signer_factory.h" 17 18 #include "jit_fort_helper.h" 19 #ifdef JIT_CODE_SIGN_ENABLE 20 #include "jit_code_signer_hybrid.h" 21 #include "jit_code_signer_single.h" 22 #include "log.h" 23 #endif 24 25 namespace OHOS { 26 namespace Security { 27 namespace CodeSign { 28 JitCodeSignerFactory()29JitCodeSignerFactory::JitCodeSignerFactory() {} 30 GetInstance()31JitCodeSignerFactory &JitCodeSignerFactory::GetInstance() 32 { 33 static JitCodeSignerFactory singleJitCodeSignerFactory; 34 return singleJitCodeSignerFactory; 35 } 36 37 #ifdef JIT_CODE_SIGN_ENABLE CreateJitCodeSigner(JitBufferIntegrityLevel level)38JitCodeSignerBase *JitCodeSignerFactory::CreateJitCodeSigner( 39 JitBufferIntegrityLevel level) 40 { 41 if (!IsSupportPACFeature()) { 42 return nullptr; 43 } 44 switch (level) { 45 case JitBufferIntegrityLevel::Level0: 46 return new JitCodeSignerSingle(); 47 case JitBufferIntegrityLevel::Level1: 48 return new JitCodeSignerHybrid(); 49 default: 50 LOG_ERROR("Unsupport level of jit code signer."); 51 return nullptr; 52 } 53 } 54 #else // !JIT_CODE_SIGN_ENABLE CreateJitCodeSigner(JitBufferIntegrityLevel level)55JitCodeSignerBase *JitCodeSignerFactory::CreateJitCodeSigner( 56 JitBufferIntegrityLevel level) 57 { 58 return nullptr; 59 } 60 #endif 61 } 62 } 63 }