From 8acb4efa671f49ca82d2e4f4a9de44ff47c1b8af Mon Sep 17 00:00:00 2001 From: kang1024 Date: Thu, 8 May 2025 21:34:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=AE=97=E6=B3=95=E5=BA=93arkts=E9=9D=99?= =?UTF-8?q?=E6=80=81=E5=8C=96=E6=94=B9=E9=80=A0=E6=96=B0=E5=A2=9Esign?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: kang1024 --- frameworks/js/ani/BUILD.gn | 1 + ...rity.cryptoFramework.cryptoFramework.taihe | 34 ++++- frameworks/js/ani/inc/ani_sign.h | 41 +++++++ frameworks/js/ani/inc/ani_verify.h | 4 +- frameworks/js/ani/src/ani_sign.cpp | 116 ++++++++++++++++++ frameworks/js/ani/src/ani_verify.cpp | 6 +- ...y.cryptoFramework.cryptoFramework.impl.cpp | 42 ++++++- frameworks/js/ani/test/test_main.ets | 6 +- frameworks/js/ani/test/test_sign.ets | 69 +++++++++++ 9 files changed, 308 insertions(+), 11 deletions(-) create mode 100644 frameworks/js/ani/inc/ani_sign.h create mode 100644 frameworks/js/ani/src/ani_sign.cpp create mode 100644 frameworks/js/ani/test/test_sign.ets diff --git a/frameworks/js/ani/BUILD.gn b/frameworks/js/ani/BUILD.gn index e760d74..a8946f1 100644 --- a/frameworks/js/ani/BUILD.gn +++ b/frameworks/js/ani/BUILD.gn @@ -55,6 +55,7 @@ taihe_shared_library("crypto_framework_ani") { "${framework_path}/js/ani/src/ani_pri_key.cpp", "${framework_path}/js/ani/src/ani_pub_key.cpp", "${framework_path}/js/ani/src/ani_rand.cpp", + "${framework_path}/js/ani/src/ani_sign.cpp", "${framework_path}/js/ani/src/ani_sym_key.cpp", "${framework_path}/js/ani/src/ani_sym_key_generator.cpp", "${framework_path}/js/ani/src/ani_verify.cpp", diff --git a/frameworks/js/ani/idl/ohos.security.cryptoFramework.cryptoFramework.taihe b/frameworks/js/ani/idl/ohos.security.cryptoFramework.cryptoFramework.taihe index f1eaaf0..56cd6a3 100644 --- a/frameworks/js/ani/idl/ohos.security.cryptoFramework.cryptoFramework.taihe +++ b/frameworks/js/ani/idl/ohos.security.cryptoFramework.cryptoFramework.taihe @@ -38,6 +38,11 @@ union OptStrUint8Arr { UINT8ARRAY: @typedarray Array; } +union OptStrInt { + STRING: String; + INT32: i32; +} + union OptIntUint8Arr { INT32: i32; UINT8ARRAY: @typedarray Array; @@ -126,6 +131,15 @@ enum AsyKeySpecEnum: i32 { X25519_PK_BN = 602 } +enum SignSpecEnum: i32 { + PSS_MD_NAME_STR = 100, + PSS_MGF_NAME_STR = 101, + PSS_MGF1_MD_STR = 102, + PSS_SALT_LEN_NUM = 103, + PSS_TRAILER_FIELD_NUM = 104, + SM2_USER_ID_UINT8ARR = 105 +} + struct KeyEncodingConfig { password: String; cipherName: String; @@ -303,12 +317,28 @@ interface Verify { @gen_async("recover") @gen_promise("recover") RecoverSync(signature: DataBlob): OptDataBlob; - SetVerifySpec(itemType: i32, itemValue: OptIntUint8Arr): void; - GetVerifySpec(itemType: i32): OptIntUint8Arr; + SetVerifySpec(itemType: SignSpecEnum, itemValue: OptIntUint8Arr): void; + GetVerifySpec(itemType: SignSpecEnum): OptStrInt; @get("algName") GetAlgName(): String; } function CreateVerify(algName: String): Verify; +interface Sign { + @gen_async("init") + @gen_promise("init") + InitSync(priKey: PriKey): void; + @gen_async("update") + @gen_promise("update") + UpdateSync(data: DataBlob): void; + @gen_async("sign") + @gen_promise("sign") + SignSync(data: OptDataBlob): DataBlob; + SetSignSpec(itemType: SignSpecEnum, itemValue: OptIntUint8Arr): void; + GetSignSpec(itemType: SignSpecEnum): OptStrInt; + @get("algName") GetAlgName(): String; +} +function CreateSign(algName: String): Sign; + struct AsyKeySpec { algName: String; specType: AsyKeySpecType; diff --git a/frameworks/js/ani/inc/ani_sign.h b/frameworks/js/ani/inc/ani_sign.h new file mode 100644 index 0000000..d6683e9 --- /dev/null +++ b/frameworks/js/ani/inc/ani_sign.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2025-2025 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. + */ + +#ifndef ANI_SIGN_H +#define ANI_SIGN_H + +#include "ani_common.h" +#include "signature.h" + +namespace ANI::CryptoFramework { +class SignImpl { +public: + SignImpl(); + explicit SignImpl(HcfSign *sign); + ~SignImpl(); + + void InitSync(weak::PriKey priKey); + void UpdateSync(DataBlob const& data); + DataBlob SignSync(OptDataBlob const& data); + void SetSignSpec(SignSpecEnum itemType, OptIntUint8Arr const& itemValue); + OptStrInt GetSignSpec(SignSpecEnum itemType); + string GetAlgName(); + +private: + HcfSign *sign_ = nullptr; +}; +} // namespace ANI::CryptoFramework + +#endif // ANI_SIGN_H diff --git a/frameworks/js/ani/inc/ani_verify.h b/frameworks/js/ani/inc/ani_verify.h index 12f3b7d..94af0a2 100644 --- a/frameworks/js/ani/inc/ani_verify.h +++ b/frameworks/js/ani/inc/ani_verify.h @@ -30,8 +30,8 @@ public: void UpdateSync(DataBlob const& input); bool VerifySync(OptDataBlob const& data, DataBlob const& signature); OptDataBlob RecoverSync(DataBlob const& signature); - void SetVerifySpec(int32_t itemType, OptIntUint8Arr const& itemValue); - OptIntUint8Arr GetVerifySpec(int32_t itemType); + void SetVerifySpec(SignSpecEnum itemType, OptIntUint8Arr const& itemValue); + OptStrInt GetVerifySpec(SignSpecEnum itemType); string GetAlgName(); private: diff --git a/frameworks/js/ani/src/ani_sign.cpp b/frameworks/js/ani/src/ani_sign.cpp new file mode 100644 index 0000000..011cdaa --- /dev/null +++ b/frameworks/js/ani/src/ani_sign.cpp @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2025-2025 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 "ani_sign.h" + +namespace ANI::CryptoFramework { +SignImpl::SignImpl() {} + +SignImpl::SignImpl(HcfSign *sign) : sign_(sign) {} + +SignImpl::~SignImpl() +{ + HcfObjDestroy(this->sign_); + this->sign_ = nullptr; +} + +void SignImpl::InitSync(weak::PriKey priKey) +{ + if (this->sign_ == nullptr) { + ANI_LOGE_THROW(HCF_INVALID_PARAMS, "sign obj is nullptr!"); + return; + } + HcfPriKey *obj = reinterpret_cast(priKey->GetPriKeyObj()); + HcfResult res = this->sign_->init(this->sign_, nullptr, obj); + if (res != HCF_SUCCESS) { + ANI_LOGE_THROW(res, "sign init failed."); + return; + } +} + +void SignImpl::UpdateSync(DataBlob const& data) +{ + if (this->sign_ == nullptr) { + ANI_LOGE_THROW(HCF_INVALID_PARAMS, "sign obj is nullptr!"); + return; + } + HcfBlob inBlob = { .data = data.data.data(), .len = data.data.size() }; + HcfResult res = this->sign_->update(this->sign_, &inBlob); + if (res != HCF_SUCCESS) { + ANI_LOGE_THROW(res, "sign update failed!"); + return; + } +} + +DataBlob SignImpl::SignSync(OptDataBlob const& data) +{ + if (this->sign_ == nullptr) { + ANI_LOGE_THROW(HCF_INVALID_PARAMS, "sign obj is nullptr!"); + return {}; + } + HcfBlob *inBlob = nullptr; + HcfBlob dataBlob = { .data = nullptr, .len = 0 }; + if (data.get_tag() == OptDataBlob::tag_t::DATABLOB) { + dataBlob.data = data.get_DATABLOB_ref().data.data(); + dataBlob.len = data.get_DATABLOB_ref().data.size(); + inBlob = &dataBlob; + } + HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfResult res = this->sign_->sign(this->sign_, inBlob, &outBlob); + if (res != HCF_SUCCESS) { + ANI_LOGE_THROW(res, "sign doFinal failed!"); + return {}; + } + array out(move_data_t{}, outBlob.data, outBlob.len); + HcfBlobDataClearAndFree(&outBlob); + return { out }; +} + +void SignImpl::SetSignSpec(SignSpecEnum itemType, OptIntUint8Arr const& itemValue) +{ + TH_THROW(std::runtime_error, "SetSignSpec not implemented"); +} + +OptStrInt SignImpl::GetSignSpec(SignSpecEnum itemType) +{ + TH_THROW(std::runtime_error, "GetSignSpec not implemented"); +} + +string SignImpl::GetAlgName() +{ + if (this->sign_ == nullptr) { + ANI_LOGE_THROW(HCF_INVALID_PARAMS, "sign obj is nullptr!"); + return ""; + } + const char *algName = this->sign_->getAlgoName(this->sign_); + return string(algName); +} + +Sign CreateSign(string_view algName) +{ + HcfSign *sign = nullptr; + HcfResult res = HcfSignCreate(algName.c_str(), &sign); + if (res != HCF_SUCCESS) { + ANI_LOGE_THROW(res, "create sign obj fail!"); + return make_holder(); + } + return make_holder(sign); +} +} // namespace ANI::CryptoFramework + +// Since these macros are auto-generate, lint will cause false positive. +// NOLINTBEGIN +TH_EXPORT_CPP_API_CreateSign(ANI::CryptoFramework::CreateSign); +// NOLINTEND diff --git a/frameworks/js/ani/src/ani_verify.cpp b/frameworks/js/ani/src/ani_verify.cpp index 99830f6..1f6e4d2 100644 --- a/frameworks/js/ani/src/ani_verify.cpp +++ b/frameworks/js/ani/src/ani_verify.cpp @@ -79,15 +79,15 @@ bool VerifyImpl::VerifySync(OptDataBlob const& data, DataBlob const& signature) OptDataBlob VerifyImpl::RecoverSync(DataBlob const& signature) { - TH_THROW(std::runtime_error, "SetVerifySpec not implemented"); + TH_THROW(std::runtime_error, "RecoverSync not implemented"); } -void VerifyImpl::SetVerifySpec(int32_t itemType, OptIntUint8Arr const& itemValue) +void VerifyImpl::SetVerifySpec(SignSpecEnum itemType, OptIntUint8Arr const& itemValue) { TH_THROW(std::runtime_error, "SetVerifySpec not implemented"); } -OptIntUint8Arr VerifyImpl::GetVerifySpec(int32_t itemType) +OptStrInt VerifyImpl::GetVerifySpec(SignSpecEnum itemType) { TH_THROW(std::runtime_error, "GetVerifySpec not implemented"); } diff --git a/frameworks/js/ani/src/impl/ohos.security.cryptoFramework.cryptoFramework.impl.cpp b/frameworks/js/ani/src/impl/ohos.security.cryptoFramework.cryptoFramework.impl.cpp index d050bba..eb429d2 100644 --- a/frameworks/js/ani/src/impl/ohos.security.cryptoFramework.cryptoFramework.impl.cpp +++ b/frameworks/js/ani/src/impl/ohos.security.cryptoFramework.cryptoFramework.impl.cpp @@ -360,11 +360,11 @@ public: TH_THROW(std::runtime_error, "RecoverSync not implemented"); } - void SetVerifySpec(int32_t itemType, OptIntUint8Arr const& itemValue) { + void SetVerifySpec(SignSpecEnum itemType, OptIntUint8Arr const& itemValue) { TH_THROW(std::runtime_error, "SetVerifySpec not implemented"); } - OptIntUint8Arr GetVerifySpec(int32_t itemType) { + OptStrInt GetVerifySpec(SignSpecEnum itemType) { TH_THROW(std::runtime_error, "GetVerifySpec not implemented"); } @@ -373,6 +373,37 @@ public: } }; +class SignImpl { +public: + SignImpl() { + // Don't forget to implement the constructor. + } + + void InitSync(weak::PriKey priKey) { + TH_THROW(std::runtime_error, "InitSync not implemented"); + } + + void UpdateSync(DataBlob const& data) { + TH_THROW(std::runtime_error, "UpdateSync not implemented"); + } + + DataBlob SignSync(OptDataBlob const& data) { + TH_THROW(std::runtime_error, "SignSync not implemented"); + } + + void SetSignSpec(SignSpecEnum itemType, OptIntUint8Arr const& itemValue) { + TH_THROW(std::runtime_error, "SetSignSpec not implemented"); + } + + OptStrInt GetSignSpec(SignSpecEnum itemType) { + TH_THROW(std::runtime_error, "GetSignSpec not implemented"); + } + + string GetAlgName() { + TH_THROW(std::runtime_error, "GetAlgName not implemented"); + } +}; + class AsyKeyGeneratorBySpecImpl { public: AsyKeyGeneratorBySpecImpl() { @@ -450,6 +481,12 @@ Verify CreateVerify(string_view algName) { return make_holder(); } +Sign CreateSign(string_view algName) { + // The parameters in the make_holder function should be of the same type + // as the parameters in the constructor of the actual implementation class. + return make_holder(); +} + AsyKeyGeneratorBySpec CreateAsyKeyGeneratorBySpec(OptAsyKeySpec const& asyKeySpec) { // The parameters in the make_holder function should be of the same type // as the parameters in the constructor of the actual implementation class. @@ -467,5 +504,6 @@ TH_EXPORT_CPP_API_CreateAsyKeyGenerator(CreateAsyKeyGenerator); TH_EXPORT_CPP_API_CreateKdf(CreateKdf); TH_EXPORT_CPP_API_CreateCipher(CreateCipher); TH_EXPORT_CPP_API_CreateVerify(CreateVerify); +TH_EXPORT_CPP_API_CreateSign(CreateSign); TH_EXPORT_CPP_API_CreateAsyKeyGeneratorBySpec(CreateAsyKeyGeneratorBySpec); // NOLINTEND diff --git a/frameworks/js/ani/test/test_main.ets b/frameworks/js/ani/test/test_main.ets index 6d2a8d7..b63faca 100644 --- a/frameworks/js/ani/test/test_main.ets +++ b/frameworks/js/ani/test/test_main.ets @@ -19,9 +19,10 @@ import { testMac } from "./test_mac"; import { testKdf } from "./test_kdf"; import { testAsyKeyGenerator } from "./test_asy_key_generator"; import { testSymKeyGenerator } from "./test_sym_key_generator"; +import { testAsyKeyGeneratorBySpec } from "./test_asy_key_generator_by_spec"; import { testCipher } from "./test_cipher"; +import { testSign } from "./test_sign"; import { testVerify } from "./test_verify"; -import { testAsyKeyGeneratorBySpec } from "./test_asy_key_generator_by_spec"; function main() { testRandom(); @@ -30,7 +31,8 @@ function main() { testKdf(); testAsyKeyGenerator(); testSymKeyGenerator(); + testAsyKeyGeneratorBySpec(); testCipher(); + testSign(); testVerify(); - testAsyKeyGeneratorBySpec(); } diff --git a/frameworks/js/ani/test/test_sign.ets b/frameworks/js/ani/test/test_sign.ets new file mode 100644 index 0000000..aa1405e --- /dev/null +++ b/frameworks/js/ani/test/test_sign.ets @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025-2025 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. + */ + +import { BusinessError } from "@ohos.base"; +import cryptoFramework from "@ohos.security.cryptoFramework"; +import utils from "./test_utils"; + +function sign(algName: string, priKey: cryptoFramework.PriKey, + input1: cryptoFramework.DataBlob, input2: cryptoFramework.DataBlob) { + let signer = cryptoFramework.createSign(algName); + signer.initSync(priKey); + signer.updateSync(input1); + let signData = signer.signSync(input2); + console.log("sign algName: " + signer.algName); + return signData; +} + +function verify(algName: string, pubKey: cryptoFramework.PubKey, signData: cryptoFramework.DataBlob, + input1: cryptoFramework.DataBlob, input2: cryptoFramework.DataBlob) { + let verifier = cryptoFramework.createVerify(algName); + verifier.initSync(pubKey); + verifier.updateSync(input1); + let res = verifier.verifySync(input2, signData); + console.log("verify algName: " + verifier.algName); + return res; +} + +function testSignSync() { + try { + let algName = "SM2_256|SM3"; + let str1 = "This is Sign test plan1"; + let str2 = "This is Sign test plan2"; + let input1: cryptoFramework.DataBlob = { + data: utils.stringToUint8Array(str1) + }; + let input2: cryptoFramework.DataBlob = { + data: utils.stringToUint8Array(str2) + }; + let generator = cryptoFramework.createAsyKeyGenerator("SM2_256"); + console.log("AsyKeyGenerator algName: " + generator.algName); + let keyPair = generator.generateKeyPairSync(); + let signData = sign(algName, keyPair.priKey, input1, input2); + let res = verify(algName, keyPair.pubKey, signData, input1, input2); + if (res === true) { + console.info('Sign success'); + } else { + console.error('Sign failed'); + } + } catch (err: BusinessError) { + console.error(`[error] Sign: ${err.code} ${err.message}`); + } +} + +export function testSign() { + console.log(">>>>>>>>>>>>>>>>>>>> SignSync"); + testSignSync(); +} -- Gitee From 95de6f216cbabd3de6a3e19e7431d2ffa818960f Mon Sep 17 00:00:00 2001 From: kang1024 Date: Mon, 12 May 2025 15:34:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dani=E4=B8=ADDataBlob?= =?UTF-8?q?=E7=9A=84size=E4=B8=BA0=E4=BD=86data=E4=B8=BA""=E4=B8=8Enapi?= =?UTF-8?q?=E4=B8=AD=E7=9A=84nullptr=E8=A1=8C=E4=B8=BA=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E4=B8=8D=E4=B8=80=E8=87=B4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: kang1024 --- frameworks/js/ani/inc/ani_common.h | 6 + .../js/ani/src/ani_asy_key_generator.cpp | 10 +- .../ani/src/ani_asy_key_generator_by_spec.cpp | 204 ++++++------------ frameworks/js/ani/src/ani_cipher.cpp | 33 ++- frameworks/js/ani/src/ani_common.cpp | 16 ++ frameworks/js/ani/src/ani_constructor.cpp | 1 + frameworks/js/ani/src/ani_kdf.cpp | 34 +-- frameworks/js/ani/src/ani_key.cpp | 2 +- frameworks/js/ani/src/ani_mac.cpp | 5 +- frameworks/js/ani/src/ani_md.cpp | 5 +- frameworks/js/ani/src/ani_pri_key.cpp | 4 +- frameworks/js/ani/src/ani_pub_key.cpp | 4 +- frameworks/js/ani/src/ani_rand.cpp | 5 +- frameworks/js/ani/src/ani_sign.cpp | 10 +- frameworks/js/ani/src/ani_sym_key.cpp | 2 +- .../js/ani/src/ani_sym_key_generator.cpp | 3 +- frameworks/js/ani/src/ani_verify.cpp | 11 +- 17 files changed, 147 insertions(+), 208 deletions(-) diff --git a/frameworks/js/ani/inc/ani_common.h b/frameworks/js/ani/inc/ani_common.h index cb3a6ba..1e09036 100644 --- a/frameworks/js/ani/inc/ani_common.h +++ b/frameworks/js/ani/inc/ani_common.h @@ -26,11 +26,17 @@ #include "result.h" #include "memory.h" #include "object_base.h" +#include "big_integer.h" namespace ANI::CryptoFramework { using namespace taihe; using namespace ohos::security::cryptoFramework::cryptoFramework; +template +void ArrayU8ToDataBlob(const array &arr, T &blob); + +void StringToDataBlob(const string &str, HcfBlob &blob); + int ConvertResultCode(HcfResult res); #define ANI_LOGE_THROW(code, msg) \ diff --git a/frameworks/js/ani/src/ani_asy_key_generator.cpp b/frameworks/js/ani/src/ani_asy_key_generator.cpp index 8a17812..1f64ce4 100644 --- a/frameworks/js/ani/src/ani_asy_key_generator.cpp +++ b/frameworks/js/ani/src/ani_asy_key_generator.cpp @@ -51,16 +51,14 @@ KeyPair AsyKeyGeneratorImpl::ConvertKeySync(OptDataBlob const& pubKey, OptDataBl HcfKeyPair *keyPair = nullptr; HcfBlob *pubKeyBlob = nullptr; HcfBlob *priKeyBlob = nullptr; - HcfBlob skBlob = { .data = nullptr, .len = 0 }; - HcfBlob pkBlob = { .data = nullptr, .len = 0 }; + HcfBlob pkBlob = {}; + HcfBlob skBlob = {}; if (pubKey.get_tag() == OptDataBlob::tag_t::DATABLOB) { - pkBlob.data = pubKey.get_DATABLOB_ref().data.data(); - pkBlob.len = pubKey.get_DATABLOB_ref().data.size(); + ArrayU8ToDataBlob(pubKey.get_DATABLOB_ref().data, pkBlob); pubKeyBlob = &pkBlob; } if (priKey.get_tag() == OptDataBlob::tag_t::DATABLOB) { - skBlob.data = priKey.get_DATABLOB_ref().data.data(); - skBlob.len = priKey.get_DATABLOB_ref().data.size(); + ArrayU8ToDataBlob(priKey.get_DATABLOB_ref().data, skBlob); priKeyBlob = &skBlob; } HcfResult res = this->generator_->convertKey(this->generator_, nullptr, pubKeyBlob, priKeyBlob, &(keyPair)); diff --git a/frameworks/js/ani/src/ani_asy_key_generator_by_spec.cpp b/frameworks/js/ani/src/ani_asy_key_generator_by_spec.cpp index 11f6579..3504d76 100644 --- a/frameworks/js/ani/src/ani_asy_key_generator_by_spec.cpp +++ b/frameworks/js/ani/src/ani_asy_key_generator_by_spec.cpp @@ -38,42 +38,30 @@ void SetDSAKeyPairParamsSpecAttribute(DSAKeyPairSpec const& dsaParams, HcfDsaKey { dsaKeyPairSpec.base.base.specType = HCF_KEY_PAIR_SPEC; dsaKeyPairSpec.base.base.algName = const_cast(dsaParams.base.algName.c_str()); - dsaKeyPairSpec.base.p.data = dsaParams.params.p.data(); - dsaKeyPairSpec.base.p.len = dsaParams.params.p.size(); - dsaKeyPairSpec.base.q.data = dsaParams.params.q.data(); - dsaKeyPairSpec.base.q.len = dsaParams.params.q.size(); - dsaKeyPairSpec.base.g.data = dsaParams.params.g.data(); - dsaKeyPairSpec.base.g.len = dsaParams.params.g.size(); - dsaKeyPairSpec.pk.data = dsaParams.pk.data(); - dsaKeyPairSpec.pk.len = dsaParams.pk.size(); - dsaKeyPairSpec.sk.data = dsaParams.sk.data(); - dsaKeyPairSpec.sk.len = dsaParams.sk.size(); + ArrayU8ToDataBlob(dsaParams.params.p, dsaKeyPairSpec.base.p); + ArrayU8ToDataBlob(dsaParams.params.q, dsaKeyPairSpec.base.q); + ArrayU8ToDataBlob(dsaParams.params.g, dsaKeyPairSpec.base.g); + ArrayU8ToDataBlob(dsaParams.pk, dsaKeyPairSpec.pk); + ArrayU8ToDataBlob(dsaParams.sk, dsaKeyPairSpec.sk); } void SetDSAPubKeyParamsSpecAttribute(DSAPubKeySpec const& dsaParams, HcfDsaPubKeyParamsSpec &dsaPubKeySpec) { dsaPubKeySpec.base.base.specType = HCF_PUBLIC_KEY_SPEC; dsaPubKeySpec.base.base.algName = const_cast(dsaParams.base.algName.c_str()); - dsaPubKeySpec.base.p.data = dsaParams.params.p.data(); - dsaPubKeySpec.base.p.len = dsaParams.params.p.size(); - dsaPubKeySpec.base.q.data = dsaParams.params.q.data(); - dsaPubKeySpec.base.q.len = dsaParams.params.q.size(); - dsaPubKeySpec.base.g.data = dsaParams.params.g.data(); - dsaPubKeySpec.base.g.len = dsaParams.params.g.size(); - dsaPubKeySpec.pk.data = dsaParams.pk.data(); - dsaPubKeySpec.pk.len = dsaParams.pk.size(); + ArrayU8ToDataBlob(dsaParams.params.p, dsaPubKeySpec.base.p); + ArrayU8ToDataBlob(dsaParams.params.q, dsaPubKeySpec.base.q); + ArrayU8ToDataBlob(dsaParams.params.g, dsaPubKeySpec.base.g); + ArrayU8ToDataBlob(dsaParams.pk, dsaPubKeySpec.pk); } void SetDSACommonParamsSpecAttribute(DSACommonParamsSpec const& dsaParams, HcfDsaCommParamsSpec &dsaCommonParamsSpec) { dsaCommonParamsSpec.base.specType = HCF_COMMON_PARAMS_SPEC; dsaCommonParamsSpec.base.algName = const_cast(dsaParams.base.algName.c_str()); - dsaCommonParamsSpec.p.data = dsaParams.p.data(); - dsaCommonParamsSpec.p.len = dsaParams.p.size(); - dsaCommonParamsSpec.q.data = dsaParams.q.data(); - dsaCommonParamsSpec.q.len = dsaParams.q.size(); - dsaCommonParamsSpec.g.data = dsaParams.g.data(); - dsaCommonParamsSpec.g.len = dsaParams.g.size(); + ArrayU8ToDataBlob(dsaParams.p, dsaCommonParamsSpec.p); + ArrayU8ToDataBlob(dsaParams.q, dsaCommonParamsSpec.q); + ArrayU8ToDataBlob(dsaParams.g, dsaCommonParamsSpec.g); } void SetECCKeyPairParamsSpecAttribute(ECCKeyPairSpec const& eccParams, HcfEccKeyPairParamsSpec &eccKeyPairSpec) @@ -87,26 +75,17 @@ void SetECCKeyPairParamsSpecAttribute(ECCKeyPairSpec const& eccParams, HcfEccKey HcfECFieldFp* fieldFp = reinterpret_cast(eccKeyPairSpec.base.field); fieldFp->base.fieldType = const_cast(eccParams.params.field.get_ECFIELDFP_ref().base.fieldType.c_str()); - fieldFp->p.data = eccParams.params.field.get_ECFIELDFP_ref().p.data(); - fieldFp->p.len = eccParams.params.field.get_ECFIELDFP_ref().p.size(); + ArrayU8ToDataBlob(eccParams.params.field.get_ECFIELDFP_ref().p, fieldFp->p); } - eccKeyPairSpec.base.a.data = eccParams.params.a.data(); - eccKeyPairSpec.base.a.len = eccParams.params.a.size(); - eccKeyPairSpec.base.b.data = eccParams.params.b.data(); - eccKeyPairSpec.base.b.len = eccParams.params.b.size(); - eccKeyPairSpec.base.g.x.data = eccParams.params.g.x.data(); - eccKeyPairSpec.base.g.x.len = eccParams.params.g.x.size(); - eccKeyPairSpec.base.g.y.data = eccParams.params.g.y.data(); - eccKeyPairSpec.base.g.y.len = eccParams.params.g.y.size(); - eccKeyPairSpec.base.n.data = eccParams.params.n.data(); - eccKeyPairSpec.base.n.len = eccParams.params.n.size(); eccKeyPairSpec.base.h = eccParams.params.h; - eccKeyPairSpec.pk.x.data = eccParams.pk.x.data(); - eccKeyPairSpec.pk.x.len = eccParams.pk.x.size(); - eccKeyPairSpec.pk.y.data = eccParams.pk.y.data(); - eccKeyPairSpec.pk.y.len = eccParams.pk.y.size(); - eccKeyPairSpec.sk.data = eccParams.sk.data(); - eccKeyPairSpec.sk.len = eccParams.sk.size(); + ArrayU8ToDataBlob(eccParams.params.a, eccKeyPairSpec.base.a); + ArrayU8ToDataBlob(eccParams.params.b, eccKeyPairSpec.base.b); + ArrayU8ToDataBlob(eccParams.params.g.x, eccKeyPairSpec.base.g.x); + ArrayU8ToDataBlob(eccParams.params.g.y, eccKeyPairSpec.base.g.y); + ArrayU8ToDataBlob(eccParams.params.n, eccKeyPairSpec.base.n); + ArrayU8ToDataBlob(eccParams.pk.x, eccKeyPairSpec.pk.x); + ArrayU8ToDataBlob(eccParams.pk.y, eccKeyPairSpec.pk.y); + ArrayU8ToDataBlob(eccParams.sk, eccKeyPairSpec.sk); } void SetECCPubKeyParamsSpecAttribute(ECCPubKeySpec const& eccParams, HcfEccPubKeyParamsSpec &eccPubKeySpec) @@ -120,24 +99,16 @@ void SetECCPubKeyParamsSpecAttribute(ECCPubKeySpec const& eccParams, HcfEccPubKe HcfECFieldFp* fieldFp = reinterpret_cast(eccPubKeySpec.base.field); fieldFp->base.fieldType = const_cast(eccParams.params.field.get_ECFIELDFP_ref().base.fieldType.c_str()); - fieldFp->p.data = eccParams.params.field.get_ECFIELDFP_ref().p.data(); - fieldFp->p.len = eccParams.params.field.get_ECFIELDFP_ref().p.size(); + ArrayU8ToDataBlob(eccParams.params.field.get_ECFIELDFP_ref().p, fieldFp->p); } - eccPubKeySpec.base.a.data = eccParams.params.a.data(); - eccPubKeySpec.base.a.len = eccParams.params.a.size(); - eccPubKeySpec.base.b.data = eccParams.params.b.data(); - eccPubKeySpec.base.b.len = eccParams.params.b.size(); - eccPubKeySpec.base.g.x.data = eccParams.params.g.x.data(); - eccPubKeySpec.base.g.x.len = eccParams.params.g.x.size(); - eccPubKeySpec.base.g.y.data = eccParams.params.g.y.data(); - eccPubKeySpec.base.g.y.len = eccParams.params.g.y.size(); - eccPubKeySpec.base.n.data = eccParams.params.n.data(); - eccPubKeySpec.base.n.len = eccParams.params.n.size(); eccPubKeySpec.base.h = eccParams.params.h; - eccPubKeySpec.pk.x.data = eccParams.pk.x.data(); - eccPubKeySpec.pk.x.len = eccParams.pk.x.size(); - eccPubKeySpec.pk.y.data = eccParams.pk.y.data(); - eccPubKeySpec.pk.y.len = eccParams.pk.y.size(); + ArrayU8ToDataBlob(eccParams.params.a, eccPubKeySpec.base.a); + ArrayU8ToDataBlob(eccParams.params.b, eccPubKeySpec.base.b); + ArrayU8ToDataBlob(eccParams.params.g.x, eccPubKeySpec.base.g.x); + ArrayU8ToDataBlob(eccParams.params.g.y, eccPubKeySpec.base.g.y); + ArrayU8ToDataBlob(eccParams.params.n, eccPubKeySpec.base.n); + ArrayU8ToDataBlob(eccParams.pk.x, eccPubKeySpec.pk.x); + ArrayU8ToDataBlob(eccParams.pk.y, eccPubKeySpec.pk.y); } void SetECCPriKeyParamsSpecAttribute(ECCPriKeySpec const& eccParams, HcfEccPriKeyParamsSpec &eccPriKeySpec) @@ -151,22 +122,15 @@ void SetECCPriKeyParamsSpecAttribute(ECCPriKeySpec const& eccParams, HcfEccPriKe HcfECFieldFp* fieldFp = reinterpret_cast(eccPriKeySpec.base.field); fieldFp->base.fieldType = const_cast(eccParams.params.field.get_ECFIELDFP_ref().base.fieldType.c_str()); - fieldFp->p.data = eccParams.params.field.get_ECFIELDFP_ref().p.data(); - fieldFp->p.len = eccParams.params.field.get_ECFIELDFP_ref().p.size(); + ArrayU8ToDataBlob(eccParams.params.field.get_ECFIELDFP_ref().p, fieldFp->p); } - eccPriKeySpec.base.a.data = eccParams.params.a.data(); - eccPriKeySpec.base.a.len = eccParams.params.a.size(); - eccPriKeySpec.base.b.data = eccParams.params.b.data(); - eccPriKeySpec.base.b.len = eccParams.params.b.size(); - eccPriKeySpec.base.g.x.data = eccParams.params.g.x.data(); - eccPriKeySpec.base.g.x.len = eccParams.params.g.x.size(); - eccPriKeySpec.base.g.y.data = eccParams.params.g.y.data(); - eccPriKeySpec.base.g.y.len = eccParams.params.g.y.size(); - eccPriKeySpec.base.n.data = eccParams.params.n.data(); - eccPriKeySpec.base.n.len = eccParams.params.n.size(); eccPriKeySpec.base.h = eccParams.params.h; - eccPriKeySpec.sk.data = eccParams.sk.data(); - eccPriKeySpec.sk.len = eccParams.sk.size(); + ArrayU8ToDataBlob(eccParams.params.a, eccPriKeySpec.base.a); + ArrayU8ToDataBlob(eccParams.params.b, eccPriKeySpec.base.b); + ArrayU8ToDataBlob(eccParams.params.g.x, eccPriKeySpec.base.g.x); + ArrayU8ToDataBlob(eccParams.params.g.y, eccPriKeySpec.base.g.y); + ArrayU8ToDataBlob(eccParams.params.n, eccPriKeySpec.base.n); + ArrayU8ToDataBlob(eccParams.sk, eccPriKeySpec.sk); } void SetECCCommonParamsSpecAttribute(ECCCommonParamsSpec const& eccParams, HcfEccCommParamsSpec &eccCommonParamsSpec) @@ -179,50 +143,38 @@ void SetECCCommonParamsSpecAttribute(ECCCommonParamsSpec const& eccParams, HcfEc } else if (eccParams.field.get_tag() == OptECField::tag_t::ECFIELDFP) { HcfECFieldFp* fieldFp = reinterpret_cast(eccCommonParamsSpec.field); fieldFp->base.fieldType = const_cast(eccParams.field.get_ECFIELDFP_ref().base.fieldType.c_str()); - fieldFp->p.data = eccParams.field.get_ECFIELDFP_ref().p.data(); - fieldFp->p.len = eccParams.field.get_ECFIELDFP_ref().p.size(); + ArrayU8ToDataBlob(eccParams.field.get_ECFIELDFP_ref().p, fieldFp->p); } - eccCommonParamsSpec.a.data = eccParams.a.data(); - eccCommonParamsSpec.a.len = eccParams.a.size(); - eccCommonParamsSpec.b.data = eccParams.b.data(); - eccCommonParamsSpec.b.len = eccParams.b.size(); - eccCommonParamsSpec.g.x.data = eccParams.g.x.data(); - eccCommonParamsSpec.g.x.len = eccParams.g.x.size(); - eccCommonParamsSpec.g.y.data = eccParams.g.y.data(); - eccCommonParamsSpec.g.y.len = eccParams.g.y.size(); - eccCommonParamsSpec.n.data = eccParams.n.data(); - eccCommonParamsSpec.n.len = eccParams.n.size(); eccCommonParamsSpec.h = eccParams.h; + ArrayU8ToDataBlob(eccParams.a, eccCommonParamsSpec.a); + ArrayU8ToDataBlob(eccParams.b, eccCommonParamsSpec.b); + ArrayU8ToDataBlob(eccParams.g.x, eccCommonParamsSpec.g.x); + ArrayU8ToDataBlob(eccParams.g.y, eccCommonParamsSpec.g.y); + ArrayU8ToDataBlob(eccParams.n, eccCommonParamsSpec.n); } void SetRSAKeyPairParamsSpecAttribute(RSAKeyPairSpec const& rsaParams, HcfRsaKeyPairParamsSpec &rsaKeyPairSpec) { rsaKeyPairSpec.base.base.specType = HCF_KEY_PAIR_SPEC; rsaKeyPairSpec.base.base.algName = const_cast(rsaParams.base.algName.c_str()); - rsaKeyPairSpec.base.n.data = rsaParams.params.n.data(); - rsaKeyPairSpec.base.n.len = rsaParams.params.n.size(); - rsaKeyPairSpec.pk.data = rsaParams.pk.data(); - rsaKeyPairSpec.pk.len = rsaParams.pk.size(); - rsaKeyPairSpec.sk.data = rsaParams.sk.data(); - rsaKeyPairSpec.sk.len = rsaParams.sk.size(); + ArrayU8ToDataBlob(rsaParams.params.n, rsaKeyPairSpec.base.n); + ArrayU8ToDataBlob(rsaParams.pk, rsaKeyPairSpec.pk); + ArrayU8ToDataBlob(rsaParams.sk, rsaKeyPairSpec.sk); } void SetRSAPubKeyParamsSpecAttribute(RSAPubKeySpec const& rsaParams, HcfRsaPubKeyParamsSpec &rsaPubKeySpec) { rsaPubKeySpec.base.base.specType = HCF_PUBLIC_KEY_SPEC; rsaPubKeySpec.base.base.algName = const_cast(rsaParams.base.algName.c_str()); - rsaPubKeySpec.base.n.data = rsaParams.params.n.data(); - rsaPubKeySpec.base.n.len = rsaParams.params.n.size(); - rsaPubKeySpec.pk.data = rsaParams.pk.data(); - rsaPubKeySpec.pk.len = rsaParams.pk.size(); + ArrayU8ToDataBlob(rsaParams.params.n, rsaPubKeySpec.base.n); + ArrayU8ToDataBlob(rsaParams.pk, rsaPubKeySpec.pk); } void SetRSACommonParamsSpecAttribute(RSACommonParamsSpec const& rsaParams, HcfRsaCommParamsSpec &rsaCommonParamsSpec) { rsaCommonParamsSpec.base.specType = HCF_COMMON_PARAMS_SPEC; rsaCommonParamsSpec.base.algName = const_cast(rsaParams.base.algName.c_str()); - rsaCommonParamsSpec.n.data = rsaParams.n.data(); - rsaCommonParamsSpec.n.len = rsaParams.n.size(); + ArrayU8ToDataBlob(rsaParams.n, rsaCommonParamsSpec.n); } void SetEd25519KeyPairParamsSpecAttribute(ED25519KeyPairSpec const& ed25519Params, @@ -230,10 +182,8 @@ void SetEd25519KeyPairParamsSpecAttribute(ED25519KeyPairSpec const& ed25519Param { ed25519KeyPairSpec.base.specType = HCF_KEY_PAIR_SPEC; ed25519KeyPairSpec.base.algName = const_cast(ed25519Params.base.algName.c_str()); - ed25519KeyPairSpec.pk.data = ed25519Params.pk.data(); - ed25519KeyPairSpec.pk.len = ed25519Params.pk.size(); - ed25519KeyPairSpec.sk.data = ed25519Params.sk.data(); - ed25519KeyPairSpec.sk.len = ed25519Params.sk.size(); + ArrayU8ToDataBlob(ed25519Params.pk, ed25519KeyPairSpec.pk); + ArrayU8ToDataBlob(ed25519Params.sk, ed25519KeyPairSpec.sk); } void SetEd25519PubKeyParamsSpecAttribute(ED25519PubKeySpec const& ed25519Params, @@ -241,8 +191,7 @@ void SetEd25519PubKeyParamsSpecAttribute(ED25519PubKeySpec const& ed25519Params, { ed25519PubKeySpec.base.specType = HCF_PUBLIC_KEY_SPEC; ed25519PubKeySpec.base.algName = const_cast(ed25519Params.base.algName.c_str()); - ed25519PubKeySpec.pk.data = ed25519Params.pk.data(); - ed25519PubKeySpec.pk.len = ed25519Params.pk.size(); + ArrayU8ToDataBlob(ed25519Params.pk, ed25519PubKeySpec.pk); } void SetEd25519PriKeyParamsSpecAttribute(ED25519PriKeySpec const& ed25519Params, @@ -250,8 +199,7 @@ void SetEd25519PriKeyParamsSpecAttribute(ED25519PriKeySpec const& ed25519Params, { ed25519PriKeySpec.base.specType = HCF_PRIVATE_KEY_SPEC; ed25519PriKeySpec.base.algName = const_cast(ed25519Params.base.algName.c_str()); - ed25519PriKeySpec.sk.data = ed25519Params.sk.data(); - ed25519PriKeySpec.sk.len = ed25519Params.sk.size(); + ArrayU8ToDataBlob(ed25519Params.sk, ed25519PriKeySpec.sk); } void SetX25519KeyPairParamsSpecAttribute(X25519KeyPairSpec const& x25519Params, @@ -259,10 +207,8 @@ void SetX25519KeyPairParamsSpecAttribute(X25519KeyPairSpec const& x25519Params, { x25519KeyPairSpec.base.specType = HCF_KEY_PAIR_SPEC; x25519KeyPairSpec.base.algName = const_cast(x25519Params.base.algName.c_str()); - x25519KeyPairSpec.pk.data = x25519Params.pk.data(); - x25519KeyPairSpec.pk.len = x25519Params.pk.size(); - x25519KeyPairSpec.sk.data = x25519Params.sk.data(); - x25519KeyPairSpec.sk.len = x25519Params.sk.size(); + ArrayU8ToDataBlob(x25519Params.pk, x25519KeyPairSpec.pk); + ArrayU8ToDataBlob(x25519Params.sk, x25519KeyPairSpec.sk); } void SetX25519PubKeyParamsSpecAttribute(X25519PubKeySpec const& x25519Params, @@ -270,8 +216,7 @@ void SetX25519PubKeyParamsSpecAttribute(X25519PubKeySpec const& x25519Params, { x25519PubKeySpec.base.specType = HCF_PUBLIC_KEY_SPEC; x25519PubKeySpec.base.algName = const_cast(x25519Params.base.algName.c_str()); - x25519PubKeySpec.pk.data = x25519Params.pk.data(); - x25519PubKeySpec.pk.len = x25519Params.pk.size(); + ArrayU8ToDataBlob(x25519Params.pk, x25519PubKeySpec.pk); } void SetX25519PriKeyParamsSpecAttribute(X25519PriKeySpec const& x25519Params, @@ -279,60 +224,47 @@ void SetX25519PriKeyParamsSpecAttribute(X25519PriKeySpec const& x25519Params, { x25519PriKeySpec.base.specType = HCF_PRIVATE_KEY_SPEC; x25519PriKeySpec.base.algName = const_cast(x25519Params.base.algName.c_str()); - x25519PriKeySpec.sk.data = x25519Params.sk.data(); - x25519PriKeySpec.sk.len = x25519Params.sk.size(); + ArrayU8ToDataBlob(x25519Params.sk, x25519PriKeySpec.sk); } void SetDhKeyPairParamsSpecAttribute(DHKeyPairSpec const& dhParams, HcfDhKeyPairParamsSpec &dhKeyPairSpec) { dhKeyPairSpec.base.base.specType = HCF_KEY_PAIR_SPEC; dhKeyPairSpec.base.base.algName = const_cast(dhParams.base.algName.c_str()); - dhKeyPairSpec.base.p.data = dhParams.params.p.data(); - dhKeyPairSpec.base.p.len = dhParams.params.p.size(); - dhKeyPairSpec.base.g.data = dhParams.params.g.data(); - dhKeyPairSpec.base.g.len = dhParams.params.g.size(); dhKeyPairSpec.base.length = dhParams.params.l; - dhKeyPairSpec.pk.data = dhParams.pk.data(); - dhKeyPairSpec.pk.len = dhParams.pk.size(); - dhKeyPairSpec.sk.data = dhParams.sk.data(); - dhKeyPairSpec.sk.len = dhParams.sk.size(); + ArrayU8ToDataBlob(dhParams.params.p, dhKeyPairSpec.base.p); + ArrayU8ToDataBlob(dhParams.params.g, dhKeyPairSpec.base.g); + ArrayU8ToDataBlob(dhParams.pk, dhKeyPairSpec.pk); + ArrayU8ToDataBlob(dhParams.sk, dhKeyPairSpec.sk); } void SetDhPubKeyParamsSpecAttribute(DHPubKeySpec const& dhParams, HcfDhPubKeyParamsSpec &dhPubKeySpec) { dhPubKeySpec.base.base.specType = HCF_PUBLIC_KEY_SPEC; dhPubKeySpec.base.base.algName = const_cast(dhParams.base.algName.c_str()); - dhPubKeySpec.base.p.data = dhParams.params.p.data(); - dhPubKeySpec.base.p.len = dhParams.params.p.size(); - dhPubKeySpec.base.g.data = dhParams.params.g.data(); - dhPubKeySpec.base.g.len = dhParams.params.g.size(); dhPubKeySpec.base.length = dhParams.params.l; - dhPubKeySpec.pk.data = dhParams.pk.data(); - dhPubKeySpec.pk.len = dhParams.pk.size(); + ArrayU8ToDataBlob(dhParams.params.p, dhPubKeySpec.base.p); + ArrayU8ToDataBlob(dhParams.params.g, dhPubKeySpec.base.g); + ArrayU8ToDataBlob(dhParams.pk, dhPubKeySpec.pk); } void SetDhPriKeyParamsSpecAttribute(DHPriKeySpec const& dhParams, HcfDhPriKeyParamsSpec &dhPriKeySpec) { dhPriKeySpec.base.base.specType = HCF_PRIVATE_KEY_SPEC; dhPriKeySpec.base.base.algName = const_cast(dhParams.base.algName.c_str()); - dhPriKeySpec.base.p.data = dhParams.params.p.data(); - dhPriKeySpec.base.p.len = dhParams.params.p.size(); - dhPriKeySpec.base.g.data = dhParams.params.g.data(); - dhPriKeySpec.base.g.len = dhParams.params.g.size(); dhPriKeySpec.base.length = dhParams.params.l; - dhPriKeySpec.sk.data = dhParams.sk.data(); - dhPriKeySpec.sk.len = dhParams.sk.size(); + ArrayU8ToDataBlob(dhParams.params.p, dhPriKeySpec.base.p); + ArrayU8ToDataBlob(dhParams.params.g, dhPriKeySpec.base.g); + ArrayU8ToDataBlob(dhParams.sk, dhPriKeySpec.sk); } void SetDhCommonParamsSpecAttribute(DHCommonParamsSpec const& dhParams, HcfDhCommParamsSpec &dhCommonParamsSpec) { dhCommonParamsSpec.base.specType = HCF_COMMON_PARAMS_SPEC; dhCommonParamsSpec.base.algName = const_cast(dhParams.base.algName.c_str()); - dhCommonParamsSpec.p.data = dhParams.p.data(); - dhCommonParamsSpec.p.len = dhParams.p.size(); - dhCommonParamsSpec.g.data = dhParams.g.data(); - dhCommonParamsSpec.g.len = dhParams.g.size(); dhCommonParamsSpec.length = dhParams.l; + ArrayU8ToDataBlob(dhParams.p, dhCommonParamsSpec.p); + ArrayU8ToDataBlob(dhParams.g, dhCommonParamsSpec.g); } HcfAsyKeyParamsSpec* CreateDSASpec(OptAsyKeySpec const& asyKeySpec) diff --git a/frameworks/js/ani/src/ani_cipher.cpp b/frameworks/js/ani/src/ani_cipher.cpp index d335c59..943da4a 100644 --- a/frameworks/js/ani/src/ani_cipher.cpp +++ b/frameworks/js/ani/src/ani_cipher.cpp @@ -43,30 +43,23 @@ const char *GetCcmParamsSpecType() void SetIvParamsSpecAttribute(const IvParamsSpec ¶ms, HcfIvParamsSpec &ivParamsSpec) { ivParamsSpec.base.getType = GetIvParamsSpecType; - ivParamsSpec.iv.data = params.iv.data.data(); - ivParamsSpec.iv.len = params.iv.data.size(); + ArrayU8ToDataBlob(params.iv.data, ivParamsSpec.iv); } void SetGcmParamsSpecAttribute(const GcmParamsSpec ¶ms, HcfGcmParamsSpec &gcmParamsSpec) { gcmParamsSpec.base.getType = GetGcmParamsSpecType; - gcmParamsSpec.iv.data = params.iv.data.data(); - gcmParamsSpec.iv.len = params.iv.data.size(); - gcmParamsSpec.aad.data = params.aad.data.data(); - gcmParamsSpec.aad.len = params.aad.data.size(); - gcmParamsSpec.tag.data = params.authTag.data.data(); - gcmParamsSpec.tag.len = params.authTag.data.size(); + ArrayU8ToDataBlob(params.iv.data, gcmParamsSpec.iv); + ArrayU8ToDataBlob(params.aad.data, gcmParamsSpec.aad); + ArrayU8ToDataBlob(params.authTag.data, gcmParamsSpec.tag); } void SetCcmParamsSpecAttribute(const CcmParamsSpec ¶ms, HcfCcmParamsSpec &ccmParamsSpec) { ccmParamsSpec.base.getType = GetCcmParamsSpecType; - ccmParamsSpec.iv.data = params.iv.data.data(); - ccmParamsSpec.iv.len = params.iv.data.size(); - ccmParamsSpec.aad.data = params.aad.data.data(); - ccmParamsSpec.aad.len = params.aad.data.size(); - ccmParamsSpec.tag.data = params.authTag.data.data(); - ccmParamsSpec.tag.len = params.authTag.data.size(); + ArrayU8ToDataBlob(params.iv.data, ccmParamsSpec.iv); + ArrayU8ToDataBlob(params.aad.data, ccmParamsSpec.aad); + ArrayU8ToDataBlob(params.authTag.data, ccmParamsSpec.tag); } } // namespace @@ -122,8 +115,9 @@ DataBlob CipherImpl::UpdateSync(DataBlob const& input) ANI_LOGE_THROW(HCF_INVALID_PARAMS, "cipher obj is nullptr!"); return {}; } - HcfBlob inBlob = { .data = input.data.data(), .len = input.data.size() }; - HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfBlob inBlob = {}; + HcfBlob outBlob = {}; + ArrayU8ToDataBlob(input.data, inBlob); HcfResult res = this->cipher_->update(this->cipher_, &inBlob, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "cipher update failed!"); @@ -141,13 +135,12 @@ DataBlob CipherImpl::DoFinalSync(OptDataBlob const& input) return {}; } HcfBlob *inBlob = nullptr; - HcfBlob dataBlob = { .data = nullptr, .len = 0 }; + HcfBlob dataBlob = {}; if (input.get_tag() == OptDataBlob::tag_t::DATABLOB) { - dataBlob.data = input.get_DATABLOB_ref().data.data(); - dataBlob.len = input.get_DATABLOB_ref().data.size(); + ArrayU8ToDataBlob(input.get_DATABLOB_ref().data, dataBlob); inBlob = &dataBlob; } - HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfBlob outBlob = {}; HcfResult res = this->cipher_->doFinal(this->cipher_, inBlob, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "cipher doFinal failed!"); diff --git a/frameworks/js/ani/src/ani_common.cpp b/frameworks/js/ani/src/ani_common.cpp index 670a713..ef59e97 100644 --- a/frameworks/js/ani/src/ani_common.cpp +++ b/frameworks/js/ani/src/ani_common.cpp @@ -28,6 +28,22 @@ enum ResultCode { } // namespace namespace ANI::CryptoFramework { +template void ArrayU8ToDataBlob(const array &arr, HcfBlob &blob); +template void ArrayU8ToDataBlob(const array &arr, HcfBigInteger &blob); + +template +void ArrayU8ToDataBlob(const array &arr, T &blob) +{ + blob.data = arr.empty() ? nullptr : arr.data(); + blob.len = arr.size(); +} + +void StringToDataBlob(const string &str, HcfBlob &blob) +{ + blob.data = str.empty() ? nullptr : reinterpret_cast(const_cast(str.c_str())); + blob.len = str.size(); +} + int ConvertResultCode(HcfResult res) { static std::unordered_map resCodeMap = { diff --git a/frameworks/js/ani/src/ani_constructor.cpp b/frameworks/js/ani/src/ani_constructor.cpp index 15c0af8..ce1f62a 100644 --- a/frameworks/js/ani/src/ani_constructor.cpp +++ b/frameworks/js/ani/src/ani_constructor.cpp @@ -13,6 +13,7 @@ * limitations under the License. */ +#include "taihe/runtime.hpp" #include "ohos.security.cryptoFramework.cryptoFramework.ani.hpp" ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) diff --git a/frameworks/js/ani/src/ani_kdf.cpp b/frameworks/js/ani/src/ani_kdf.cpp index 5978754..2a1df58 100644 --- a/frameworks/js/ani/src/ani_kdf.cpp +++ b/frameworks/js/ani/src/ani_kdf.cpp @@ -29,15 +29,11 @@ void SetPBKDF2ParamsSpecAttribute(const PBKDF2Spec ¶ms, HcfPBKDF2ParamsSpec { pbkdf2Spec.base.algName = params.base.algName.c_str(); if (params.password.get_tag() == OptStrUint8Arr::tag_t::STRING) { - pbkdf2Spec.password.data = reinterpret_cast - (const_cast(params.password.get_STRING_ref().c_str())); - pbkdf2Spec.password.len = params.password.get_STRING_ref().size(); + StringToDataBlob(params.password.get_STRING_ref(), pbkdf2Spec.password); } else { // OptStrUint8Arr::tag_t::UINT8ARRAY - pbkdf2Spec.password.data = params.password.get_UINT8ARRAY_ref().data(); - pbkdf2Spec.password.len = params.password.get_UINT8ARRAY_ref().size(); + ArrayU8ToDataBlob(params.password.get_UINT8ARRAY_ref(), pbkdf2Spec.password); } - pbkdf2Spec.salt.data = params.salt.data(); - pbkdf2Spec.salt.len = params.salt.size(); + ArrayU8ToDataBlob(params.salt, pbkdf2Spec.salt); pbkdf2Spec.iterations = params.iterations; size_t keySize = params.keySize; outBlob.data = static_cast(HcfMalloc(keySize, 0)); @@ -49,16 +45,12 @@ void SetHkdfParamsSpecAttribute(const HKDFSpec ¶ms, HcfHkdfParamsSpec &hkdfS { hkdfSpec.base.algName = params.base.algName.c_str(); if (params.key.get_tag() == OptStrUint8Arr::tag_t::STRING) { - hkdfSpec.key.data = reinterpret_cast(const_cast(params.key.get_STRING_ref().c_str())); - hkdfSpec.key.len = params.key.get_STRING_ref().size(); + StringToDataBlob(params.key.get_STRING_ref(), hkdfSpec.key); } else { // OptStrUint8Arr::tag_t::UINT8ARRAY - hkdfSpec.key.data = params.key.get_UINT8ARRAY_ref().data(); - hkdfSpec.key.len = params.key.get_UINT8ARRAY_ref().size(); + ArrayU8ToDataBlob(params.key.get_UINT8ARRAY_ref(), hkdfSpec.key); } - hkdfSpec.salt.data = params.salt.data(); - hkdfSpec.salt.len = params.salt.size(); - hkdfSpec.info.data = params.info.data(); - hkdfSpec.info.len = params.info.size(); + ArrayU8ToDataBlob(params.salt, hkdfSpec.salt); + ArrayU8ToDataBlob(params.info, hkdfSpec.info); size_t keySize = params.keySize; outBlob.data = static_cast(HcfMalloc(keySize, 0)); outBlob.len = (outBlob.data == nullptr) ? 0 : keySize; @@ -69,15 +61,11 @@ void SetScryptParamsSpecAttribute(const ScryptSpec ¶ms, HcfScryptParamsSpec { scryptSpec.base.algName = params.base.algName.c_str(); if (params.passphrase.get_tag() == OptStrUint8Arr::tag_t::STRING) { - scryptSpec.passPhrase.data = reinterpret_cast - (const_cast(params.passphrase.get_STRING_ref().c_str())); - scryptSpec.passPhrase.len = params.passphrase.get_STRING_ref().size(); + StringToDataBlob(params.passphrase.get_STRING_ref(), scryptSpec.passPhrase); } else { // OptStrUint8Arr::tag_t::UINT8ARRAY - scryptSpec.passPhrase.data = params.passphrase.get_UINT8ARRAY_ref().data(); - scryptSpec.passPhrase.len = params.passphrase.get_UINT8ARRAY_ref().size(); + ArrayU8ToDataBlob(params.passphrase.get_UINT8ARRAY_ref(), scryptSpec.passPhrase); } - scryptSpec.salt.data = params.salt.data(); - scryptSpec.salt.len = params.salt.size(); + ArrayU8ToDataBlob(params.salt, scryptSpec.salt); scryptSpec.n = params.n; scryptSpec.r = params.r; scryptSpec.p = params.p; @@ -110,7 +98,7 @@ DataBlob KdfImpl::GenerateSecretSync(OptExtKdfSpec const& params) HcfPBKDF2ParamsSpec pbkdf2Spec = {}; HcfHkdfParamsSpec hkdfSpec = {}; HcfScryptParamsSpec scryptSpec = {}; - HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfBlob outBlob = {}; const std::string &algName = params.get_KDFSPEC_ref().algName.c_str(); if (params.get_tag() == OptExtKdfSpec::tag_t::PBKDF2SPEC && algName == PBKDF2_ALG_NAME) { SetPBKDF2ParamsSpecAttribute(params.get_PBKDF2SPEC_ref(), pbkdf2Spec, outBlob); diff --git a/frameworks/js/ani/src/ani_key.cpp b/frameworks/js/ani/src/ani_key.cpp index c14df61..33aa6d1 100644 --- a/frameworks/js/ani/src/ani_key.cpp +++ b/frameworks/js/ani/src/ani_key.cpp @@ -37,7 +37,7 @@ DataBlob KeyImpl::GetEncoded() ANI_LOGE_THROW(HCF_INVALID_PARAMS, "key obj is nullptr!"); return {}; } - HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfBlob outBlob = {}; HcfResult res = this->key_->getEncoded(this->key_, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "getEncoded failed."); diff --git a/frameworks/js/ani/src/ani_mac.cpp b/frameworks/js/ani/src/ani_mac.cpp index 6cf8885..a8843dc 100644 --- a/frameworks/js/ani/src/ani_mac.cpp +++ b/frameworks/js/ani/src/ani_mac.cpp @@ -47,7 +47,8 @@ void MacImpl::UpdateSync(DataBlob const& input) ANI_LOGE_THROW(HCF_INVALID_PARAMS, "mac obj is nullptr!"); return; } - HcfBlob inBlob = { .data = input.data.data(), .len = input.data.size() }; + HcfBlob inBlob = {}; + ArrayU8ToDataBlob(input.data, inBlob); HcfResult res = this->mac_->update(this->mac_, &inBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "mac update failed!"); @@ -61,7 +62,7 @@ DataBlob MacImpl::DoFinalSync() ANI_LOGE_THROW(HCF_INVALID_PARAMS, "mac obj is nullptr!"); return {}; } - HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfBlob outBlob = {}; HcfResult res = this->mac_->doFinal(this->mac_, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "mac doFinal failed!"); diff --git a/frameworks/js/ani/src/ani_md.cpp b/frameworks/js/ani/src/ani_md.cpp index c150797..c9e5856 100644 --- a/frameworks/js/ani/src/ani_md.cpp +++ b/frameworks/js/ani/src/ani_md.cpp @@ -32,7 +32,8 @@ void MdImpl::UpdateSync(DataBlob const& input) ANI_LOGE_THROW(HCF_INVALID_PARAMS, "md obj is nullptr!"); return; } - HcfBlob inBlob = { .data = input.data.data(), .len = input.data.size() }; + HcfBlob inBlob = {}; + ArrayU8ToDataBlob(input.data, inBlob); HcfResult res = this->md_->update(this->md_, &inBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "md update failed!"); @@ -46,7 +47,7 @@ DataBlob MdImpl::DigestSync() ANI_LOGE_THROW(HCF_INVALID_PARAMS, "md obj is nullptr!"); return {}; } - HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfBlob outBlob = {}; HcfResult res = this->md_->doFinal(this->md_, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "mac doFinal failed!"); diff --git a/frameworks/js/ani/src/ani_pri_key.cpp b/frameworks/js/ani/src/ani_pri_key.cpp index 2950e65..8a0da4c 100644 --- a/frameworks/js/ani/src/ani_pri_key.cpp +++ b/frameworks/js/ani/src/ani_pri_key.cpp @@ -53,7 +53,7 @@ string PriKeyImpl::GetEncodedPem(string_view format, optional_view(&this->priKey_->base); } DataBlob PriKeyImpl::GetEncoded() @@ -62,7 +62,7 @@ DataBlob PriKeyImpl::GetEncoded() ANI_LOGE_THROW(HCF_INVALID_PARAMS, "priKey obj is nullptr!"); return {}; } - HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfBlob outBlob = {}; HcfResult res = this->priKey_->base.getEncoded(&this->priKey_->base, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "getEncoded failed."); diff --git a/frameworks/js/ani/src/ani_pub_key.cpp b/frameworks/js/ani/src/ani_pub_key.cpp index d6d00d1..1762147 100644 --- a/frameworks/js/ani/src/ani_pub_key.cpp +++ b/frameworks/js/ani/src/ani_pub_key.cpp @@ -48,7 +48,7 @@ string PubKeyImpl::GetEncodedPem(string_view format) int64_t PubKeyImpl::GetKeyObj() { - TH_THROW(std::runtime_error, "GetKeyObj not implemented"); + return reinterpret_cast(&this->pubKey_->base); } DataBlob PubKeyImpl::GetEncoded() @@ -57,7 +57,7 @@ DataBlob PubKeyImpl::GetEncoded() ANI_LOGE_THROW(HCF_INVALID_PARAMS, "pubKey obj is nullptr!"); return {}; } - HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfBlob outBlob = {}; HcfResult res = this->pubKey_->base.getEncoded(&this->pubKey_->base, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "getEncoded failed."); diff --git a/frameworks/js/ani/src/ani_rand.cpp b/frameworks/js/ani/src/ani_rand.cpp index 915d908..a8dfb23 100644 --- a/frameworks/js/ani/src/ani_rand.cpp +++ b/frameworks/js/ani/src/ani_rand.cpp @@ -32,7 +32,7 @@ DataBlob RandomImpl::GenerateRandomSync(int32_t len) ANI_LOGE_THROW(HCF_INVALID_PARAMS, "rand obj is nullptr!"); return {}; } - HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfBlob outBlob = {}; HcfResult res = this->rand_->generateRandom(this->rand_, len, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "generateRandom failed!"); @@ -49,7 +49,8 @@ void RandomImpl::SetSeed(DataBlob const& seed) ANI_LOGE_THROW(HCF_INVALID_PARAMS, "rand obj is nullptr!"); return; } - HcfBlob seedBlob = { .data = seed.data.data(), .len = seed.data.size() }; + HcfBlob seedBlob = {}; + ArrayU8ToDataBlob(seed.data, seedBlob); HcfResult res = this->rand_->setSeed(this->rand_, &seedBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "set seed failed."); diff --git a/frameworks/js/ani/src/ani_sign.cpp b/frameworks/js/ani/src/ani_sign.cpp index 011cdaa..379ada0 100644 --- a/frameworks/js/ani/src/ani_sign.cpp +++ b/frameworks/js/ani/src/ani_sign.cpp @@ -46,7 +46,8 @@ void SignImpl::UpdateSync(DataBlob const& data) ANI_LOGE_THROW(HCF_INVALID_PARAMS, "sign obj is nullptr!"); return; } - HcfBlob inBlob = { .data = data.data.data(), .len = data.data.size() }; + HcfBlob inBlob = {}; + ArrayU8ToDataBlob(data.data, inBlob); HcfResult res = this->sign_->update(this->sign_, &inBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "sign update failed!"); @@ -61,13 +62,12 @@ DataBlob SignImpl::SignSync(OptDataBlob const& data) return {}; } HcfBlob *inBlob = nullptr; - HcfBlob dataBlob = { .data = nullptr, .len = 0 }; + HcfBlob dataBlob = {}; if (data.get_tag() == OptDataBlob::tag_t::DATABLOB) { - dataBlob.data = data.get_DATABLOB_ref().data.data(); - dataBlob.len = data.get_DATABLOB_ref().data.size(); + ArrayU8ToDataBlob(data.get_DATABLOB_ref().data, dataBlob); inBlob = &dataBlob; } - HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfBlob outBlob = {}; HcfResult res = this->sign_->sign(this->sign_, inBlob, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "sign doFinal failed!"); diff --git a/frameworks/js/ani/src/ani_sym_key.cpp b/frameworks/js/ani/src/ani_sym_key.cpp index 939e96d..23323c7 100644 --- a/frameworks/js/ani/src/ani_sym_key.cpp +++ b/frameworks/js/ani/src/ani_sym_key.cpp @@ -47,7 +47,7 @@ DataBlob SymKeyImpl::GetEncoded() ANI_LOGE_THROW(HCF_INVALID_PARAMS, "symKey obj is nullptr!"); return {}; } - HcfBlob outBlob = { .data = nullptr, .len = 0 }; + HcfBlob outBlob = {}; HcfResult res = this->symKey_->key.getEncoded(&this->symKey_->key, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "getEncoded failed."); diff --git a/frameworks/js/ani/src/ani_sym_key_generator.cpp b/frameworks/js/ani/src/ani_sym_key_generator.cpp index 7f16f3c..18d4a02 100644 --- a/frameworks/js/ani/src/ani_sym_key_generator.cpp +++ b/frameworks/js/ani/src/ani_sym_key_generator.cpp @@ -49,7 +49,8 @@ SymKey SymKeyGeneratorImpl::ConvertKeySync(DataBlob const& key) return make_holder(); } HcfSymKey *symKey = nullptr; - HcfBlob keyData = { .data = key.data.data(), .len = key.data.size() }; + HcfBlob keyData = {}; + ArrayU8ToDataBlob(key.data, keyData); HcfResult res = this->generator_->convertSymKey(this->generator_, &keyData, &symKey); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "convertSymKey key failed!"); diff --git a/frameworks/js/ani/src/ani_verify.cpp b/frameworks/js/ani/src/ani_verify.cpp index 1f6e4d2..f1f48cf 100644 --- a/frameworks/js/ani/src/ani_verify.cpp +++ b/frameworks/js/ani/src/ani_verify.cpp @@ -47,7 +47,8 @@ void VerifyImpl::UpdateSync(DataBlob const& input) ANI_LOGE_THROW(HCF_INVALID_PARAMS, "verify obj is nullptr!"); return; } - HcfBlob inBlob = { .data = input.data.data(), .len = input.data.size() }; + HcfBlob inBlob = {}; + ArrayU8ToDataBlob(input.data, inBlob); HcfResult res = this->verify_->update(this->verify_, &inBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "verify update failed!"); @@ -62,13 +63,13 @@ bool VerifyImpl::VerifySync(OptDataBlob const& data, DataBlob const& signature) return false; } HcfBlob *inBlob = nullptr; - HcfBlob dataBlob = { .data = nullptr, .len = 0 }; + HcfBlob dataBlob = {}; if (data.get_tag() == OptDataBlob::tag_t::DATABLOB) { - dataBlob.data = data.get_DATABLOB_ref().data.data(); - dataBlob.len = data.get_DATABLOB_ref().data.size(); + ArrayU8ToDataBlob(data.get_DATABLOB_ref().data, dataBlob); inBlob = &dataBlob; } - HcfBlob signatureData = { .data = signature.data.data(), .len = signature.data.size() }; + HcfBlob signatureData = {}; + ArrayU8ToDataBlob(signature.data, signatureData); bool res = this->verify_->verify(this->verify_, inBlob, &signatureData); if (!res) { LOGE("verify doFinal failed."); -- Gitee