From 6d520d491c58f62c78b2539d301fcc7a119e5393 Mon Sep 17 00:00:00 2001 From: kang1024 Date: Sat, 9 Aug 2025 16:58:37 +0800 Subject: [PATCH] =?UTF-8?q?arkts=E9=9D=99=E6=80=81=E5=8C=96Cipher=E7=9A=84?= =?UTF-8?q?update=E5=92=8CdoFinal=E6=8E=A5=E5=8F=A3=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=BF=94=E5=9B=9Enull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: kang1024 --- frameworks/js/ani/dts/cryptoFramework.d.ts | 12 +++++----- ...rity.cryptoFramework.cryptoFramework.taihe | 4 ++-- frameworks/js/ani/inc/ani_cipher.h | 4 ++-- frameworks/js/ani/src/ani_cipher.cpp | 24 ++++++++++++------- ...y.cryptoFramework.cryptoFramework.impl.cpp | 4 ++-- 5 files changed, 27 insertions(+), 21 deletions(-) diff --git a/frameworks/js/ani/dts/cryptoFramework.d.ts b/frameworks/js/ani/dts/cryptoFramework.d.ts index 8dfe765..a628b5c 100644 --- a/frameworks/js/ani/dts/cryptoFramework.d.ts +++ b/frameworks/js/ani/dts/cryptoFramework.d.ts @@ -185,12 +185,12 @@ declare namespace cryptoFramework { init(opMode: CryptoMode, key: Key, params: ParamsSpec | null, callback: AsyncCallback): void; init(opMode: CryptoMode, key: Key, params: ParamsSpec | null): Promise; initSync(opMode: CryptoMode, key: Key, params: ParamsSpec | null): void; - update(data: DataBlob, callback: AsyncCallback): void; - update(data: DataBlob): Promise; - updateSync(data: DataBlob): DataBlob; - doFinal(data: DataBlob | null, callback: AsyncCallback): void; - doFinal(data: DataBlob | null): Promise; - doFinalSync(data: DataBlob | null): DataBlob; + update(data: DataBlob, callback: AsyncCallback): void; + update(data: DataBlob): Promise; + updateSync(data: DataBlob): DataBlob | null; + doFinal(data: DataBlob | null, callback: AsyncCallback): void; + doFinal(data: DataBlob | null): Promise; + doFinalSync(data: DataBlob | null): DataBlob | null; setCipherSpec(itemType: CipherSpecItem, itemValue: Uint8Array): void; getCipherSpec(itemType: CipherSpecItem): string | Uint8Array; readonly algName: string; diff --git a/frameworks/js/ani/idl/ohos.security.cryptoFramework.cryptoFramework.taihe b/frameworks/js/ani/idl/ohos.security.cryptoFramework.cryptoFramework.taihe index 8ae1bbe..600c975 100644 --- a/frameworks/js/ani/idl/ohos.security.cryptoFramework.cryptoFramework.taihe +++ b/frameworks/js/ani/idl/ohos.security.cryptoFramework.cryptoFramework.taihe @@ -344,10 +344,10 @@ interface Cipher { InitSync(opMode: CryptoMode, key: Key, params: OptParamsSpec): void; @gen_async("update") @gen_promise("update") - UpdateSync(input: DataBlob): DataBlob; + UpdateSync(input: DataBlob): OptDataBlob; @gen_async("doFinal") @gen_promise("doFinal") - DoFinalSync(input: OptDataBlob): DataBlob; + DoFinalSync(input: OptDataBlob): OptDataBlob; SetCipherSpec(itemType: CipherSpecItem, itemValue: @typedarray Array): void; GetCipherSpec(itemType: CipherSpecItem): OptStrUint8Arr; @get("algName") GetAlgName(): String; diff --git a/frameworks/js/ani/inc/ani_cipher.h b/frameworks/js/ani/inc/ani_cipher.h index 2a57537..66c2741 100644 --- a/frameworks/js/ani/inc/ani_cipher.h +++ b/frameworks/js/ani/inc/ani_cipher.h @@ -27,8 +27,8 @@ public: ~CipherImpl(); void InitSync(CryptoMode opMode, weak::Key key, OptParamsSpec const& params); - DataBlob UpdateSync(DataBlob const& input); - DataBlob DoFinalSync(OptDataBlob const& input); + OptDataBlob UpdateSync(DataBlob const& input); + OptDataBlob DoFinalSync(OptDataBlob const& input); void SetCipherSpec(ThCipherSpecItem itemType, array_view itemValue); OptStrUint8Arr GetCipherSpec(ThCipherSpecItem itemType); string GetAlgName(); diff --git a/frameworks/js/ani/src/ani_cipher.cpp b/frameworks/js/ani/src/ani_cipher.cpp index 287a286..0492d0e 100644 --- a/frameworks/js/ani/src/ani_cipher.cpp +++ b/frameworks/js/ani/src/ani_cipher.cpp @@ -127,7 +127,7 @@ void CipherImpl::InitSync(CryptoMode opMode, weak::Key key, OptParamsSpec const& HcfIvParamsSpec ivParamsSpec = {}; HcfGcmParamsSpec gcmParamsSpec = {}; HcfCcmParamsSpec ccmParamsSpec = {}; - if (params.get_tag() != OptParamsSpec::tag_t::EMPTY) { + if (params.get_tag() == OptParamsSpec::tag_t::PARAMSSPEC) { const OptExtParamsSpec &tmp = params.get_PARAMSSPEC_ref(); const std::string &algName = tmp.get_PARAMSSPEC_ref().algName.c_str(); if (tmp.get_tag() == OptExtParamsSpec::tag_t::IVPARAMSSPEC && algName == IV_PARAMS_SPEC) { @@ -153,11 +153,11 @@ void CipherImpl::InitSync(CryptoMode opMode, weak::Key key, OptParamsSpec const& } } -DataBlob CipherImpl::UpdateSync(DataBlob const& input) +OptDataBlob CipherImpl::UpdateSync(DataBlob const& input) { if (this->cipher_ == nullptr) { ANI_LOGE_THROW(HCF_INVALID_PARAMS, "cipher obj is nullptr!"); - return {}; + return OptDataBlob::make_EMPTY(); } HcfBlob inBlob = {}; HcfBlob outBlob = {}; @@ -165,19 +165,22 @@ DataBlob CipherImpl::UpdateSync(DataBlob const& input) HcfResult res = this->cipher_->update(this->cipher_, &inBlob, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "cipher update failed!"); - return {}; + return OptDataBlob::make_EMPTY(); } array data = {}; DataBlobToArrayU8(outBlob, data); HcfBlobDataClearAndFree(&outBlob); - return { data }; + if (data.empty()) { + return OptDataBlob::make_EMPTY(); + } + return OptDataBlob::make_DATABLOB(DataBlob({ data })); } -DataBlob CipherImpl::DoFinalSync(OptDataBlob const& input) +OptDataBlob CipherImpl::DoFinalSync(OptDataBlob const& input) { if (this->cipher_ == nullptr) { ANI_LOGE_THROW(HCF_INVALID_PARAMS, "cipher obj is nullptr!"); - return {}; + return OptDataBlob::make_EMPTY(); } HcfBlob *inBlob = nullptr; HcfBlob dataBlob = {}; @@ -189,12 +192,15 @@ DataBlob CipherImpl::DoFinalSync(OptDataBlob const& input) HcfResult res = this->cipher_->doFinal(this->cipher_, inBlob, &outBlob); if (res != HCF_SUCCESS) { ANI_LOGE_THROW(res, "cipher doFinal failed!"); - return {}; + return OptDataBlob::make_EMPTY(); } array data = {}; DataBlobToArrayU8(outBlob, data); HcfBlobDataClearAndFree(&outBlob); - return { data }; + if (data.empty()) { + return OptDataBlob::make_EMPTY(); + } + return OptDataBlob::make_DATABLOB(DataBlob({ data })); } void CipherImpl::SetCipherSpec(ThCipherSpecItem itemType, array_view itemValue) 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 375b8f6..82e5998 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 @@ -335,11 +335,11 @@ public: TH_THROW(std::runtime_error, "InitSync not implemented"); } - DataBlob UpdateSync(DataBlob const& input) { + OptDataBlob UpdateSync(DataBlob const& input) { TH_THROW(std::runtime_error, "UpdateSync not implemented"); } - DataBlob DoFinalSync(OptDataBlob const& input) { + OptDataBlob DoFinalSync(OptDataBlob const& input) { TH_THROW(std::runtime_error, "DoFinalSync not implemented"); } -- Gitee