• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025-2025 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 "ani_sym_key_generator.h"
17 #include "ani_sym_key.h"
18 
19 using namespace taihe;
20 using namespace ohos::security::cryptoFramework::cryptoFramework;
21 using namespace ANI::CryptoFramework;
22 
23 namespace ANI::CryptoFramework {
SymKeyGeneratorImpl()24 SymKeyGeneratorImpl::SymKeyGeneratorImpl() : generator(nullptr) {}
25 
SymKeyGeneratorImpl(HcfSymKeyGenerator * obj)26 SymKeyGeneratorImpl::SymKeyGeneratorImpl(HcfSymKeyGenerator *obj) : generator(obj) {}
27 
~SymKeyGeneratorImpl()28 SymKeyGeneratorImpl::~SymKeyGeneratorImpl()
29 {
30     HcfObjDestroy(generator);
31     generator = nullptr;
32 }
33 
GenerateSymKeySync()34 SymKey SymKeyGeneratorImpl::GenerateSymKeySync()
35 {
36     return make_holder<SymKeyImpl, SymKey>(nullptr);
37 }
38 
ConvertKeySync(DataBlob const & key)39 SymKey SymKeyGeneratorImpl::ConvertKeySync(DataBlob const& key)
40 {
41     if (generator == nullptr) {
42         ANI_LOGE_THROW(HCF_INVALID_PARAMS, "generator obj is nullptr!");
43         return make_holder<SymKeyImpl, SymKey>(nullptr);
44     }
45     HcfSymKey *symKey = nullptr;
46     HcfBlob keyData = { .data = key.data.data(), .len = key.data.size() };
47     HcfResult res = generator->convertSymKey(generator, &keyData, &symKey);
48     if (res != HCF_SUCCESS) {
49         ANI_LOGE_THROW(res, "convertSymKey key failed!");
50         return make_holder<SymKeyImpl, SymKey>(nullptr);
51     }
52     return make_holder<SymKeyImpl, SymKey>(symKey);
53 }
54 
GetAlgName()55 string SymKeyGeneratorImpl::GetAlgName()
56 {
57     if (generator == nullptr) {
58         return "";
59     }
60     const char *algName = generator->getAlgoName(generator);
61     return (algName == nullptr) ? "" : string(algName);
62 }
63 
CreateSymKeyGenerator(string_view algName)64 SymKeyGenerator CreateSymKeyGenerator(string_view algName)
65 {
66     HcfSymKeyGenerator *generator = nullptr;
67     HcfResult res = HcfSymKeyGeneratorCreate(algName.c_str(), &generator);
68     if (res != HCF_SUCCESS) {
69         ANI_LOGE_THROW(res, "create C generator obj fail.");
70         return make_holder<SymKeyGeneratorImpl, SymKeyGenerator>(nullptr);
71     }
72     return make_holder<SymKeyGeneratorImpl, SymKeyGenerator>(generator);
73 }
74 } // namespace ANI::CryptoFramework
75 
76 TH_EXPORT_CPP_API_CreateSymKeyGenerator(CreateSymKeyGenerator);
77