From 706069ed4f0e987be3699c88f76992bea7303795 Mon Sep 17 00:00:00 2001 From: Leal Date: Mon, 21 Jul 2025 16:19:16 +0800 Subject: [PATCH] =?UTF-8?q?ani=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Leal --- .../ets/@ohos.security.certManager.ets | 97 ++++++++++++++----- .../include/cm_finish_impl.h | 15 +-- .../include/cm_get_app_cert_impl.h | 2 +- .../include/cm_get_cert_info_impl.h | 2 +- .../include/cm_get_cred_list_impl.h | 2 +- .../include/cm_install_user_ca_sync_impl.h | 2 +- .../certificate_manager_ani/src/cm_ani.cpp | 16 ++- .../src/cm_finish_impl.cpp | 66 ++----------- .../src/cm_install_private_cert_impl.cpp | 6 +- .../ets/@ohos.security.certManagerDialog.ets | 8 +- .../include/cm_open_dialog.h | 2 +- .../src/cm_open_cert_detail_dialog.cpp | 2 +- .../src/cm_open_install_dialog.cpp | 24 ++--- .../src/cm_open_uninstall_dialog.cpp | 2 +- .../builder/include/cm_result_builder.h | 2 +- .../impl/include/cm_ani_async_impl.h | 13 +-- .../cm_ani_common/impl/include/cm_ani_impl.h | 3 +- .../impl/src/cm_ani_async_impl.cpp | 25 ++--- .../cm_ani_common/impl/src/cm_ani_common.cpp | 4 +- 19 files changed, 140 insertions(+), 153 deletions(-) diff --git a/interfaces/kits/ani/certificate_manager_ani/ets/@ohos.security.certManager.ets b/interfaces/kits/ani/certificate_manager_ani/ets/@ohos.security.certManager.ets index 88cb6ad..5812aae 100644 --- a/interfaces/kits/ani/certificate_manager_ani/ets/@ohos.security.certManager.ets +++ b/interfaces/kits/ani/certificate_manager_ani/ets/@ohos.security.certManager.ets @@ -29,7 +29,9 @@ native function initNative(authUri: string, native function updateNative(handle: ArrayBuffer, data: ArrayBuffer): NativeResult; -native function finishNative(handle: ArrayBuffer, signature?: ArrayBuffer): NativeResult; +native function signatureFinishNative(handle: ArrayBuffer): NativeResult; + +native function verifyFinishNative(handle: ArrayBuffer, signature: ArrayBuffer): NativeResult; native function abortNative(handle: ArrayBuffer): NativeResult; @@ -220,24 +222,6 @@ export namespace certificateManager { handle: Uint8Array; } - function taskExecuteReturn(pool: Promise, callback: AsyncCallback, result: T): void { - pool.then((ret: NullishType) => { - let nativeResult: NativeResult = ret as NativeResult; - let err = new BusinessError(); - if (nativeResult.result !== undefined) { - result = nativeResult.result as T; - } - if (nativeResult.code === 0) { - err.code = 0; - callback(err, result); - } else { - err.code = nativeResult.code; - err.message = nativeResult.message; - callback(err, result); - } - }); - } - export enum CertType { CA_CERT_SYSTEM = 0, CA_CERT_USER = 1 @@ -265,6 +249,44 @@ export namespace certificateManager { EL4 = 4, } + const MAX_DATA_LEN: double = 0x6400000; + + function checkBufferLen(buffer: Uint8Array, minLen: double, maxLen: double) { + if (buffer.length < minLen || buffer.length > maxLen) { + let error = new BusinessError(); + error.code = 401; + error.message = 'the input parameters is invalid.'; + throw error; + } + } + + function checkStrLen(str: string, minLen: double, maxLen: double) { + if (str.length < minLen || str.length > maxLen) { + let error = new BusinessError(); + error.code = 401; + error.message = 'the input parameters is invalid.'; + throw error; + } + } + + function taskExecuteReturn(pool: Promise, callback: AsyncCallback, result: T): void { + pool.then((ret: NullishType) => { + let nativeResult: NativeResult = ret as NativeResult; + let err = new BusinessError(); + if (nativeResult.result !== undefined) { + result = nativeResult.result as T; + } + if (nativeResult.code === 0) { + err.code = 0; + callback(err, result); + } else { + err.code = nativeResult.code; + err.message = nativeResult.message; + callback(err, result); + } + }); + } + function createPromise(task: () => NativeResult, result: T): Promise { return new Promise((resolve, reject: (error: BusinessError) => void) => { let nativeResult: NativeResult = task(); @@ -299,11 +321,13 @@ export namespace certificateManager { } export function uninstallPrivateCertificate(keyUri: string, callback: AsyncCallback): void { + checkStrLen(keyUri, 1, MAX_DATA_LEN); let pool = taskpool.execute(uninstallPrivateCertificateNative, keyUri); taskExecuteReturn(pool, callback, undefined); } export function uninstallPrivateCertificate(keyUri: string): Promise { + checkStrLen(keyUri, 1, MAX_DATA_LEN); return createPromise(() => uninstallPrivateCertificateNative(keyUri), undefined); } @@ -317,62 +341,83 @@ export namespace certificateManager { } export function getPrivateCertificate(keyUri: string, callback: AsyncCallback): void { + checkStrLen(keyUri, 1, MAX_DATA_LEN); let pool = taskpool.execute(getPrivateCertificateNative, keyUri); taskExecuteReturn(pool, callback, {}); } export function getPrivateCertificate(keyUri: string): Promise { + checkStrLen(keyUri, 1, MAX_DATA_LEN); return createPromise(() => getPrivateCertificateNative(keyUri), {}); } export function init(authUri: string, spec: CMSignatureSpec, callback: AsyncCallback): void { + checkStrLen(authUri, 1, MAX_DATA_LEN); let result: CMHandle = { handle: new Uint8Array() }; let pool = taskpool.execute(initNative, authUri, spec); taskExecuteReturn(pool, callback, result); } export function init(authUri: string, spec: CMSignatureSpec): Promise { + checkStrLen(authUri, 1, MAX_DATA_LEN); let result: CMHandle = { handle: new Uint8Array() }; return createPromise(() => initNative(authUri, spec), result); } export function update(handle: Uint8Array, data: Uint8Array, callback: AsyncCallback): void { + checkBufferLen(handle, 1, MAX_DATA_LEN); + checkBufferLen(data, 1, MAX_DATA_LEN); let pool = taskpool.execute(updateNative, handle.buffer as ArrayBuffer, data.buffer as ArrayBuffer); taskExecuteReturn(pool, callback, undefined); } export function update(handle: Uint8Array, data: Uint8Array): Promise { + checkBufferLen(handle, 1, MAX_DATA_LEN); + checkBufferLen(data, 1, MAX_DATA_LEN); return createPromise(() => updateNative(handle.buffer as ArrayBuffer, data.buffer as ArrayBuffer), undefined); } export function finish(handle: Uint8Array, callback: AsyncCallback): void { - let pool = taskpool.execute(finishNative, handle.buffer as ArrayBuffer, undefined); + checkBufferLen(handle, 1, MAX_DATA_LEN); + let pool = taskpool.execute(signatureFinishNative, handle.buffer as ArrayBuffer); taskExecuteReturn(pool, callback, {}); } export function finish(handle: Uint8Array, signature: Uint8Array, callback: AsyncCallback): void { - let pool = taskpool.execute(finishNative, handle.buffer as ArrayBuffer, signature.buffer as ArrayBuffer); + checkBufferLen(handle, 1, MAX_DATA_LEN); + checkBufferLen(signature, 1, MAX_DATA_LEN); + let pool = taskpool.execute(verifyFinishNative, handle.buffer as ArrayBuffer, signature.buffer as ArrayBuffer); taskExecuteReturn(pool, callback, {}); } export function finish(handle: Uint8Array, signature?: Uint8Array): Promise { - return createPromise(() => finishNative(handle.buffer as ArrayBuffer, signature?.buffer as ArrayBuffer?? undefined), {}); + checkBufferLen(handle, 1, MAX_DATA_LEN); + let defaultSignature = signature ?? new Uint8Array(); + if (signature !== undefined) { + checkBufferLen(signature, 1, MAX_DATA_LEN); + return createPromise(() => verifyFinishNative(handle.buffer as ArrayBuffer, defaultSignature.buffer as ArrayBuffer), {}); + } + return createPromise(() => signatureFinishNative(handle.buffer as ArrayBuffer), {}); } export function abort(handle: Uint8Array, callback: AsyncCallback): void { + checkBufferLen(handle, 1, MAX_DATA_LEN); let pool = taskpool.execute(abortNative, handle.buffer as ArrayBuffer); taskExecuteReturn(pool, callback, undefined); } export function abort(handle: Uint8Array): Promise { + checkBufferLen(handle, 1, MAX_DATA_LEN); return createPromise(() => abortNative(handle.buffer as ArrayBuffer), undefined); } export function getPublicCertificate(keyUri: string): Promise { + checkStrLen(keyUri, 1, MAX_DATA_LEN); return createPromise(() => getPublicCertificateNative(keyUri), {}); } export function isAuthorizedApp(keyUri: string): Promise { + checkStrLen(keyUri, 1, MAX_DATA_LEN); return createPromise(() => isAuthorizedAppNative(keyUri), false); } @@ -385,6 +430,7 @@ export namespace certificateManager { } export function getUserTrustedCertificate(certUri: string): Promise { + checkStrLen(certUri, 1, MAX_DATA_LEN); return createPromise(() => getUserCANative(certUri), {}); } @@ -398,6 +444,12 @@ export namespace certificateManager { export function getCertificateStorePath(property: CertStoreProperty): string { let certType: CertType = property.certType; + if (certType === CertType.CA_CERT_USER && property.certScope === undefined) { + let error = new BusinessError(); + error.code = 401; + error.message = 'the input parameters is invalid.'; + throw error; + } let certScope: CertScope = property.certScope?? CertScope.CURRENT_USER; let certAlg: CertAlgorithm = property.certAlg?? CertAlgorithm.INTERNATIONAL; let nativeResult: NativeResult = getCertificateStorePathNative(certType, certScope, certAlg); @@ -425,6 +477,7 @@ export namespace certificateManager { } export function uninstallUserTrustedCertificateSync(certUri: string) : void { + checkStrLen(certUri, 1, MAX_DATA_LEN); let nativeResult: NativeResult = uninstallUserCASyncNative(certUri); if (nativeResult.code === 0) { return; diff --git a/interfaces/kits/ani/certificate_manager_ani/include/cm_finish_impl.h b/interfaces/kits/ani/certificate_manager_ani/include/cm_finish_impl.h index b649397..2676b33 100644 --- a/interfaces/kits/ani/certificate_manager_ani/include/cm_finish_impl.h +++ b/interfaces/kits/ani/certificate_manager_ani/include/cm_finish_impl.h @@ -33,7 +33,6 @@ public: ~CmFinishImpl() {}; int32_t GetParamsFromEnv() override; - void OnFinish() override; }; class CmSignatureFinishImpl : public CmFinishImpl { @@ -44,6 +43,7 @@ public: int32_t Init() override; int32_t InvokeInnerApi() override; int32_t UnpackResult() override; + void OnFinish() override; }; class CmVerifyFinishImpl : public CmFinishImpl { @@ -55,19 +55,6 @@ public: int32_t InvokeInnerApi() override; int32_t UnpackResult() override; int32_t GetParamsFromEnv() override; -}; - -class CmFinishImplProxy : public CertManagerAniImpl { -private: - std::shared_ptr finishImpl = nullptr; -public: - CmFinishImplProxy(ani_env *env, ani_arraybuffer aniHandle, ani_arraybuffer aniSignature); - ~CmFinishImplProxy() {}; - - int32_t Init() override; - int32_t GetParamsFromEnv() override; - int32_t InvokeInnerApi() override; - int32_t UnpackResult() override; void OnFinish() override; }; } diff --git a/interfaces/kits/ani/certificate_manager_ani/include/cm_get_app_cert_impl.h b/interfaces/kits/ani/certificate_manager_ani/include/cm_get_app_cert_impl.h index 7d6ef1d..824c032 100644 --- a/interfaces/kits/ani/certificate_manager_ani/include/cm_get_app_cert_impl.h +++ b/interfaces/kits/ani/certificate_manager_ani/include/cm_get_app_cert_impl.h @@ -24,7 +24,7 @@ namespace OHOS::Security::CertManager::Ani { class CmGetAppCertImpl : public CertManagerAniImpl { private: - ani_string aniKeyUri; + ani_string aniKeyUri = nullptr; CmBlob keyUri = { 0 }; Credential *credential = nullptr; uint32_t store = -1; diff --git a/interfaces/kits/ani/certificate_manager_ani/include/cm_get_cert_info_impl.h b/interfaces/kits/ani/certificate_manager_ani/include/cm_get_cert_info_impl.h index f672fd9..d5227b2 100644 --- a/interfaces/kits/ani/certificate_manager_ani/include/cm_get_cert_info_impl.h +++ b/interfaces/kits/ani/certificate_manager_ani/include/cm_get_cert_info_impl.h @@ -27,7 +27,7 @@ private: /* parsed params */ CmBlob certUri = { 0 }; CertInfo *certificate = nullptr; - uint32_t store; + uint32_t store = 0; public: CmGetCertInfoImpl(ani_env *env, ani_string aniCertUri, uint32_t store); ~CmGetCertInfoImpl() {}; diff --git a/interfaces/kits/ani/certificate_manager_ani/include/cm_get_cred_list_impl.h b/interfaces/kits/ani/certificate_manager_ani/include/cm_get_cred_list_impl.h index 4ec1f5e..3a1af7f 100644 --- a/interfaces/kits/ani/certificate_manager_ani/include/cm_get_cred_list_impl.h +++ b/interfaces/kits/ani/certificate_manager_ani/include/cm_get_cred_list_impl.h @@ -24,7 +24,7 @@ namespace OHOS::Security::CertManager::Ani { class CmGetCredListImpl : public CertManagerAniImpl { protected: CredentialList *credentialList = nullptr; - uint32_t store; + uint32_t store = 0; public: CmGetCredListImpl(ani_env *env, uint32_t store); ~CmGetCredListImpl() {}; diff --git a/interfaces/kits/ani/certificate_manager_ani/include/cm_install_user_ca_sync_impl.h b/interfaces/kits/ani/certificate_manager_ani/include/cm_install_user_ca_sync_impl.h index 67174f2..f2db28a 100644 --- a/interfaces/kits/ani/certificate_manager_ani/include/cm_install_user_ca_sync_impl.h +++ b/interfaces/kits/ani/certificate_manager_ani/include/cm_install_user_ca_sync_impl.h @@ -29,7 +29,7 @@ private: CmBlob certData = { 0 }; uint32_t certScope = 0; - CmBlob certUri; + CmBlob certUri = { 0 }; public: CmInstallUserCaSyncImpl(ani_env *env, ani_arraybuffer aniCertData, ani_enum_item aniCertScope); ~CmInstallUserCaSyncImpl() {}; diff --git a/interfaces/kits/ani/certificate_manager_ani/src/cm_ani.cpp b/interfaces/kits/ani/certificate_manager_ani/src/cm_ani.cpp index dd55d50..7fd9d96 100644 --- a/interfaces/kits/ani/certificate_manager_ani/src/cm_ani.cpp +++ b/interfaces/kits/ani/certificate_manager_ani/src/cm_ani.cpp @@ -102,9 +102,15 @@ static ani_object updateNative(ani_env *env, ani_arraybuffer aniHandle, ani_arra return updateImpl->Invoke(); } -static ani_object finishNative(ani_env *env, ani_arraybuffer aniHandle, ani_arraybuffer aniSignature) +static ani_object verifyFinishNative(ani_env *env, ani_arraybuffer aniHandle, ani_arraybuffer aniSignature) { - auto finishImpl = std::make_shared(env, aniHandle, aniSignature); + auto finishImpl = std::make_shared(env, aniHandle, aniSignature); + return finishImpl->Invoke(); +} + +static ani_object signatureFinishNative(ani_env *env, ani_arraybuffer aniHandle) +{ + auto finishImpl = std::make_shared(env, aniHandle); return finishImpl->Invoke(); } @@ -172,8 +178,10 @@ static const std::array NATIVE_METHODS { reinterpret_cast(initNative)}, ani_native_function {"updateNative", nullptr, reinterpret_cast(updateNative)}, - ani_native_function {"finishNative", nullptr, - reinterpret_cast(finishNative)}, + ani_native_function {"verifyFinishNative", nullptr, + reinterpret_cast(verifyFinishNative)}, + ani_native_function {"signatureFinishNative", nullptr, + reinterpret_cast(signatureFinishNative)}, ani_native_function {"abortNative", nullptr, reinterpret_cast(abortNative)}, ani_native_function {"getPublicCertificateNative", nullptr, diff --git a/interfaces/kits/ani/certificate_manager_ani/src/cm_finish_impl.cpp b/interfaces/kits/ani/certificate_manager_ani/src/cm_finish_impl.cpp index 2417c27..c1764ad 100644 --- a/interfaces/kits/ani/certificate_manager_ani/src/cm_finish_impl.cpp +++ b/interfaces/kits/ani/certificate_manager_ani/src/cm_finish_impl.cpp @@ -39,12 +39,6 @@ int32_t CmFinishImpl::GetParamsFromEnv() return CM_SUCCESS; } -void CmFinishImpl::OnFinish() -{ - CM_FREE_BLOB(this->signature); - return; -} - // CmSignatureFinishImpl CmSignatureFinishImpl::CmSignatureFinishImpl(ani_env *env, ani_arraybuffer aniHandle) : CmFinishImpl(env) { @@ -83,6 +77,12 @@ int32_t CmSignatureFinishImpl::UnpackResult() return CM_SUCCESS; } +void CmSignatureFinishImpl::OnFinish() +{ + CM_FREE_BLOB(this->signature); + return; +} + // CmVerifyFinishImpl CmVerifyFinishImpl::CmVerifyFinishImpl(ani_env *env, ani_arraybuffer aniHandle, ani_arraybuffer aniSignature) : CmFinishImpl(env) @@ -129,58 +129,8 @@ int32_t CmVerifyFinishImpl::UnpackResult() return CM_SUCCESS; } -CmFinishImplProxy::CmFinishImplProxy(ani_env *env, ani_arraybuffer aniHandle, - ani_arraybuffer aniSignature) : CertManagerAniImpl(env) -{ - if (AniUtils::IsUndefined(env, aniSignature)) { - this->finishImpl = std::make_shared(env, aniHandle); - } else { - this->finishImpl = std::make_shared(env, aniHandle, aniSignature); - } -} - -int32_t CmFinishImplProxy::Init() -{ - if (this->finishImpl == nullptr) { - CM_LOG_E("finishImpl is nullptr"); - return CMR_ERROR_NULL_POINTER; - } - return this->finishImpl->Init(); -} - -int32_t CmFinishImplProxy::GetParamsFromEnv() -{ - if (this->finishImpl == nullptr) { - CM_LOG_E("finishImpl is nullptr"); - return CMR_ERROR_NULL_POINTER; - } - return this->finishImpl->GetParamsFromEnv(); -} - -int32_t CmFinishImplProxy::InvokeInnerApi() -{ - if (this->finishImpl == nullptr) { - CM_LOG_E("finishImpl is nullptr"); - return CMR_ERROR_NULL_POINTER; - } - return this->finishImpl->InvokeInnerApi(); -} - -int32_t CmFinishImplProxy::UnpackResult() +void CmVerifyFinishImpl::OnFinish() { - if (this->finishImpl == nullptr) { - CM_LOG_E("finishImpl is nullptr"); - return CMR_ERROR_NULL_POINTER; - } - return this->finishImpl->UnpackResult(); -} - -void CmFinishImplProxy::OnFinish() -{ - if (this->finishImpl == nullptr) { - CM_LOG_E("finishImpl is nullptr"); - return; - } - this->finishImpl->OnFinish(); + return; } } \ No newline at end of file diff --git a/interfaces/kits/ani/certificate_manager_ani/src/cm_install_private_cert_impl.cpp b/interfaces/kits/ani/certificate_manager_ani/src/cm_install_private_cert_impl.cpp index aeabba2..9532fde 100644 --- a/interfaces/kits/ani/certificate_manager_ani/src/cm_install_private_cert_impl.cpp +++ b/interfaces/kits/ani/certificate_manager_ani/src/cm_install_private_cert_impl.cpp @@ -70,7 +70,11 @@ int32_t CmInstallPrivateCertImpl::InvokeInnerApi() struct CmAppCertParam certParam = { &this->keystore, &this->keystorePwd, &this->certAlias, APPLICATION_PRIVATE_CERTIFICATE_STORE, INIT_INVALID_VALUE, level }; - return CmInstallAppCertEx(&certParam, &this->retUri); + int32_t ret = CmInstallAppCertEx(&certParam, &this->retUri); + if (ret == CMR_ERROR_PASSWORD_IS_ERR) { + return CMR_ERROR_INVALID_CERT_FORMAT; + } + return ret; } int32_t CmInstallPrivateCertImpl::UnpackResult() diff --git a/interfaces/kits/ani/certificate_manager_dialog_ani/ets/@ohos.security.certManagerDialog.ets b/interfaces/kits/ani/certificate_manager_dialog_ani/ets/@ohos.security.certManagerDialog.ets index 3bc5db2..d4a2cba 100644 --- a/interfaces/kits/ani/certificate_manager_dialog_ani/ets/@ohos.security.certManagerDialog.ets +++ b/interfaces/kits/ani/certificate_manager_dialog_ani/ets/@ohos.security.certManagerDialog.ets @@ -15,7 +15,7 @@ import type common from '@ohos.app.ability.common'; import { BusinessError, AsyncCallback } from '@ohos.base'; -import type buffer from '@ohos.buffer' +import util from '@ohos.util'; native function openCertificateManagerDialogNative( context: common.Context, @@ -130,7 +130,8 @@ export namespace certificateManagerDialog { } }); // convert cert data to base64 string - let certStringBase64 = buffer.from(cert.buffer as ArrayBuffer).toString('base64'); + let base64Helper = new util.Base64Helper(); + let certStringBase64 = base64Helper.encodeToStringSync(cert, util.Type.BASIC); let result: NativeResult = openInstallCertificateDialogNative(context, { certType: certType, certScope: certScope, @@ -178,7 +179,8 @@ export namespace certificateManagerDialog { } }); // convert cert data to base64 string - let certStringBase64 = buffer.from(cert.buffer as ArrayBuffer).toString('base64'); + let base64Helper = new util.Base64Helper(); + let certStringBase64 = base64Helper.encodeToStringSync(cert, util.Type.BASIC); let result: NativeResult = openCertificateDetailDialogNative(context, certStringBase64, property.showInstallButton, callback); if (result.code !== 0) { let err = new BusinessError(); diff --git a/interfaces/kits/ani/certificate_manager_dialog_ani/include/cm_open_dialog.h b/interfaces/kits/ani/certificate_manager_dialog_ani/include/cm_open_dialog.h index 9243652..be45f3d 100644 --- a/interfaces/kits/ani/certificate_manager_dialog_ani/include/cm_open_dialog.h +++ b/interfaces/kits/ani/certificate_manager_dialog_ani/include/cm_open_dialog.h @@ -96,7 +96,7 @@ public: virtual ani_object GetDefaultResult(ani_env *env); protected: - ani_vm *vm; + ani_vm *vm = nullptr; ani_ref aniCallback = nullptr; bool isReleased = false; int32_t sessionId = 0; diff --git a/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_cert_detail_dialog.cpp b/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_cert_detail_dialog.cpp index 3089c96..5fd48ed 100644 --- a/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_cert_detail_dialog.cpp +++ b/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_cert_detail_dialog.cpp @@ -34,7 +34,7 @@ int32_t CmOpenCertDetailDialog::GetParamsFromEnv() { if (OHOS::system::GetParameter("const.product.devicetype", "") != "2in1") { CM_LOG_E("deviceType is not 2in1"); - return DIALOG_ERROR_NOT_SUPPORTED; + return CMR_DIALOG_ERROR_NOT_SUPPORTED; } int32_t ret = CertManagerAsyncImpl::GetParamsFromEnv(); if (ret != CM_SUCCESS) { diff --git a/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_install_dialog.cpp b/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_install_dialog.cpp index 431944d..3741e3d 100644 --- a/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_install_dialog.cpp +++ b/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_install_dialog.cpp @@ -38,21 +38,11 @@ int32_t CmOpenInstallDialog::GetParamsFromEnv() { if (OHOS::system::GetParameter("const.product.devicetype", "") != "2in1") { CM_LOG_E("deviceType is not 2in1"); - return DIALOG_ERROR_NOT_SUPPORTED; - } - int32_t ret = CertManagerAsyncImpl::GetParamsFromEnv(); - if (ret != CM_SUCCESS) { - CM_LOG_E("parse params failed. ret = %d", ret); - return ret; - } - ani_env *vmEnv = GetEnv(this->vm); - if (vmEnv == nullptr) { - CM_LOG_E("get env failed."); - return CMR_ERROR_INVALID_ARGUMENT; + return CMR_DIALOG_ERROR_NOT_SUPPORTED; } int32_t aniCertType = 0; - if (vmEnv->EnumItem_GetValue_Int(this->aniCertType, (ani_int *)&aniCertType) != ANI_OK) { + if (env->EnumItem_GetValue_Int(this->aniCertType, (ani_int *)&aniCertType) != ANI_OK) { CM_LOG_E("get certType value failed."); return CMR_ERROR_INVALID_ARGUMENT; } @@ -65,17 +55,23 @@ int32_t CmOpenInstallDialog::GetParamsFromEnv() } int32_t aniCertScope = 0; - if (vmEnv->EnumItem_GetValue_Int(this->aniCertScope, (ani_int *)&aniCertScope) != ANI_OK) { + if (env->EnumItem_GetValue_Int(this->aniCertScope, (ani_int *)&aniCertScope) != ANI_OK) { CM_LOG_E("get certScope value failed."); return CMR_ERROR_INVALID_ARGUMENT; } this->certScope = static_cast(aniCertType); - ret = AniUtils::ParseString(vmEnv, this->aniCert, this->cert); + int32_t ret = AniUtils::ParseString(env, this->aniCert, this->cert); if (ret != CM_SUCCESS) { CM_LOG_E("parse cert failed, ret = %d", ret); return ret; } + + ret = CertManagerAsyncImpl::GetParamsFromEnv(); + if (ret != CM_SUCCESS) { + CM_LOG_E("parse params failed. ret = %d", ret); + return ret; + } return CM_SUCCESS; } diff --git a/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_uninstall_dialog.cpp b/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_uninstall_dialog.cpp index 4e7b58b..884d1b2 100644 --- a/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_uninstall_dialog.cpp +++ b/interfaces/kits/ani/certificate_manager_dialog_ani/src/cm_open_uninstall_dialog.cpp @@ -34,7 +34,7 @@ int32_t CmOpenUninstallDialog::GetParamsFromEnv() { if (OHOS::system::GetParameter("const.product.devicetype", "") != "2in1") { CM_LOG_E("deviceType is not 2in1"); - return DIALOG_ERROR_NOT_SUPPORTED; + return CMR_DIALOG_ERROR_NOT_SUPPORTED; } int32_t ret = CertManagerAsyncImpl::GetParamsFromEnv(); if (ret != CM_SUCCESS) { diff --git a/interfaces/kits/ani/cm_ani_common/builder/include/cm_result_builder.h b/interfaces/kits/ani/cm_ani_common/builder/include/cm_result_builder.h index 0425644..6fab49b 100644 --- a/interfaces/kits/ani/cm_ani_common/builder/include/cm_result_builder.h +++ b/interfaces/kits/ani/cm_ani_common/builder/include/cm_result_builder.h @@ -38,7 +38,7 @@ private: int32_t credentialSetStringProperty(ani_object credentialObj); int32_t buildOutData(); public: - ani_object cmResult; + ani_object cmResult = nullptr; CMResultBuilder(ani_env *env); CMResultBuilder *setUri(CmBlob *uri); diff --git a/interfaces/kits/ani/cm_ani_common/impl/include/cm_ani_async_impl.h b/interfaces/kits/ani/cm_ani_common/impl/include/cm_ani_async_impl.h index 4e3b3bb..b78a85e 100644 --- a/interfaces/kits/ani/cm_ani_common/impl/include/cm_ani_async_impl.h +++ b/interfaces/kits/ani/cm_ani_common/impl/include/cm_ani_async_impl.h @@ -26,13 +26,10 @@ using namespace OHOS::AbilityRuntime; class CertManagerAsyncImpl : public CertManagerAniImpl { public: - ani_env *env {}; - ani_vm *vm {}; - int32_t resultCode = 0; - ani_object result {}; - ani_object callback {}; - ani_ref globalCallback {}; - ani_object aniContext {}; + ani_vm *vm = nullptr; + ani_object callback = nullptr; + ani_ref globalCallback = nullptr; + ani_object aniContext = nullptr; std::shared_ptr abilityContext = nullptr; public: @@ -43,7 +40,7 @@ public: int32_t GetParamsFromEnv() override; int32_t InvokeInnerApi() override; int32_t Init() override; - ani_object GenerateResult(); + ani_object GenerateResult() override; }; } // OHOS::Security::CertManager::Ani diff --git a/interfaces/kits/ani/cm_ani_common/impl/include/cm_ani_impl.h b/interfaces/kits/ani/cm_ani_common/impl/include/cm_ani_impl.h index 21cd00d..d506d4e 100644 --- a/interfaces/kits/ani/cm_ani_common/impl/include/cm_ani_impl.h +++ b/interfaces/kits/ani/cm_ani_common/impl/include/cm_ani_impl.h @@ -34,8 +34,7 @@ public: virtual int32_t InvokeInnerApi() = 0; virtual int32_t UnpackResult() = 0; virtual void OnFinish() = 0; - - ani_object GenerateResult(); + virtual ani_object GenerateResult(); ani_object Invoke(); }; } // OHOS::Security::CertManager::Ani diff --git a/interfaces/kits/ani/cm_ani_common/impl/src/cm_ani_async_impl.cpp b/interfaces/kits/ani/cm_ani_common/impl/src/cm_ani_async_impl.cpp index 62c6d90..7daf094 100644 --- a/interfaces/kits/ani/cm_ani_common/impl/src/cm_ani_async_impl.cpp +++ b/interfaces/kits/ani/cm_ani_common/impl/src/cm_ani_async_impl.cpp @@ -25,6 +25,7 @@ using namespace OHOS::AbilityRuntime; CertManagerAsyncImpl::CertManagerAsyncImpl(ani_env *env, ani_object aniContext, ani_object callback) : CertManagerAniImpl(env) { + this->env = env; env->GetVM(&this->vm); this->callback = callback; this->aniContext = aniContext; @@ -34,15 +35,6 @@ CertManagerAsyncImpl::~CertManagerAsyncImpl() {} int32_t CertManagerAsyncImpl::Init() { - ani_env *vmEnv = GetEnv(this->vm); - if (vmEnv == nullptr) { - CM_LOG_E("get env failed."); - return CMR_ERROR_INVALID_ARGUMENT; - } - if (vmEnv->GlobalReference_Create(reinterpret_cast(this->callback), &this->globalCallback) != ANI_OK) { - CM_LOG_E("failed to create global callback."); - return CMR_ERROR_INVALID_ARGUMENT; - } return CM_SUCCESS; } @@ -54,6 +46,11 @@ int32_t CertManagerAsyncImpl::GetParamsFromEnv() return CMR_ERROR_INVALID_ARGUMENT; } + if (vmEnv->GlobalReference_Create(reinterpret_cast(this->callback), &this->globalCallback) != ANI_OK) { + CM_LOG_E("failed to create global callback."); + return CMR_ERROR_INVALID_ARGUMENT; + } + ani_boolean stageMode = false; ani_status status = IsStageContext(vmEnv, this->aniContext, stageMode); if (status != ANI_OK || !stageMode) { @@ -87,19 +84,13 @@ int32_t CertManagerAsyncImpl::InvokeInnerApi() ani_object CertManagerAsyncImpl::GenerateResult() { - ani_env *vmEnv = GetEnv(this->vm); - if (vmEnv == nullptr) { - CM_LOG_E("get env failed."); - return nullptr; - } - int32_t ret; if (this->resultCode != CM_SUCCESS) { - return GetAniDialogNativeResult(vmEnv, this->resultCode); + return GetAniDialogNativeResult(this->env, this->resultCode); } ani_object nativeResult{}; - ret = AniUtils::GenerateNativeResult(vmEnv, this->resultCode, nullptr, this->result, nativeResult); + ret = AniUtils::GenerateNativeResult(this->env, this->resultCode, nullptr, this->result, nativeResult); if (ret != CM_SUCCESS) { CM_LOG_E("generate native result failed, ret = %d", ret); return nullptr; diff --git a/interfaces/kits/ani/cm_ani_common/impl/src/cm_ani_common.cpp b/interfaces/kits/ani/cm_ani_common/impl/src/cm_ani_common.cpp index 51fca18..20510da 100644 --- a/interfaces/kits/ani/cm_ani_common/impl/src/cm_ani_common.cpp +++ b/interfaces/kits/ani/cm_ani_common/impl/src/cm_ani_common.cpp @@ -37,7 +37,7 @@ static int32_t TranformDialogErrorCode(int32_t errorCode) if (iter != Dialog::DIALOG_CODE_TO_JS_CODE_MAP.end()) { return iter->second; } - return INNER_FAILURE; + return Dialog::DIALOG_ERROR_GENERIC; } static const char *GetJsErrorMsg(int32_t errCode) @@ -55,7 +55,7 @@ static const char *GetDialogJsErrorMsg(int32_t errCode) if (iter != Dialog::DIALOG_CODE_TO_MSG_MAP.end()) { return (iter->second).c_str(); } - return GENERIC_MSG.c_str(); + return Dialog::DIALOG_GENERIC_MSG.c_str(); } ani_object GetAniErrorResult(ani_env *env, int32_t resultCode) -- Gitee