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