diff --git a/frameworks/js/ani/dts/cryptoFramework.d.ts b/frameworks/js/ani/dts/cryptoFramework.d.ts index 8dfe765c45d34e0ff569012a6a988c56ce5b33af..a628b5c3a6953099d7a1dc26cbf38d5592af218c 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 8ae1bbed4239b693f715ffba7d8987baa6264c09..600c975482f206375f93ef2ede17c73cdf1902c4 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 2a5753769311940f7204df3b3a5873e98cb70ff5..66c2741cf83160ed72d9134f5214e8279c27f8fd 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 287a286b4229a6eb048ea88837c9e20608b93906..0492d0e02933e2815abed2e8628d03bda312d9d5 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 375b8f6be3dbc32bedb08b480c4fbe14fd407593..82e59986cf4a229dd03c3a01d7cfc63a87cc98ad 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"); }