From e00f67a0552c8e0a6cae68a23eaaf929cc30a791 Mon Sep 17 00:00:00 2001 From: qingliutan Date: Sun, 27 Apr 2025 19:47:50 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7CA=E8=AF=81=E4=B9=A6=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E6=94=AF=E6=8C=81p7b=E6=A0=BC=E5=BC=8F=E7=9A=84?= =?UTF-8?q?=E8=AF=81=E4=B9=A6=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qingliutan --- .../main/ets/@ohos.security.certManager.d.ts | 12 +++++++++++ .../ets/common/constants/FileFilterParams.ets | 2 +- .../src/main/ets/model/CertMangerModel.ets | 21 +++++++++++++++---- .../main/ets/pages/certInstallFromStorage.ets | 6 +++++- .../src/main/ets/pages/certPwdInput.ets | 1 - .../ets/pages/detail/CredPwdInputPage.ets | 1 - .../src/main/ets/presenter/CmFaPresenter.ets | 3 ++- .../main/ets/presenter/CmInstallPresenter.ets | 2 ++ 8 files changed, 39 insertions(+), 9 deletions(-) diff --git a/certmanager/src/main/ets/@ohos.security.certManager.d.ts b/certmanager/src/main/ets/@ohos.security.certManager.d.ts index bc6fa8d..c3b6d48 100755 --- a/certmanager/src/main/ets/@ohos.security.certManager.d.ts +++ b/certmanager/src/main/ets/@ohos.security.certManager.d.ts @@ -148,9 +148,21 @@ declare namespace CertManagerFunc { keyUri: string; } + export enum CertFileFormat { + PEM_DER = 0, + P7B = 1, + } + + export enum CertScope { + CURRENT_USER = 1, + GLOBAL_USER = 2 + } + export interface CertBlob { inData: Uint8Array; alias: string; + certFormat? : CertFileFormat; + certScope? : CertScope; } export interface CMResult { diff --git a/certmanager/src/main/ets/common/constants/FileFilterParams.ets b/certmanager/src/main/ets/common/constants/FileFilterParams.ets index 5e601ee..caab03a 100755 --- a/certmanager/src/main/ets/common/constants/FileFilterParams.ets +++ b/certmanager/src/main/ets/common/constants/FileFilterParams.ets @@ -15,6 +15,6 @@ export default class FilterParams { public static readonly MAX_SELECT_FILE_NUM = 1; - public static readonly CERT_FILE_SUFFIX = ['.pem,.cer,.crt,.der']; + public static readonly CERT_FILE_SUFFIX = ['.pem,.cer,.crt,.der,.p7b,.spc']; public static readonly CREDENTIAL_FILE_SUFFIX = ['.pfx,.p12']; } \ No newline at end of file diff --git a/certmanager/src/main/ets/model/CertMangerModel.ets b/certmanager/src/main/ets/model/CertMangerModel.ets index cf9e57b..f5500fc 100755 --- a/certmanager/src/main/ets/model/CertMangerModel.ets +++ b/certmanager/src/main/ets/model/CertMangerModel.ets @@ -34,7 +34,8 @@ export enum CMModelErrorCode { CM_MODEL_ERROR_MAX_QUANTITY_REACHED = -7, CM_MODEL_ERROR_ALIAS_LENGTH_REACHED_LIMIT = -8, CM_MODEL_ERROR_PASSWORD_ERR = -9, - CM_MODEL_ERROR_ADVANCED_SECURITY = -10 + CM_MODEL_ERROR_ADVANCED_SECURITY = -10, + CM_MODEL_ERROR_ } export enum CMModelOptType { @@ -44,6 +45,7 @@ export enum CMModelOptType { CM_MODEL_OPT_APP_CRED = 3, CM_MODEL_OPT_PRIVATE_CRED = 4, CM_MODEL_OPT_SYSTEM_CRED = 5, + CM_MODEL_OPT_USER_CA_P7B = 6, } export enum CertManagerStore { @@ -259,7 +261,12 @@ export class CertMangerModel { console.info(TAG + 'installCertOrCred start'); switch (optType) { case CMModelOptType.CM_MODEL_OPT_USER_CA: - this.installUserCertificate(data, alias, (errCode: CMModelErrorCode, uri: string) => { + this.installUserCertificate(data, alias, optType, (errCode: CMModelErrorCode, uri: string) => { + callback(errCode, uri); + }); + break; + case CMModelOptType.CM_MODEL_OPT_USER_CA_P7B: + this.installUserCertificate(data, alias, optType, (errCode: CMModelErrorCode, uri: string) => { callback(errCode, uri); }); break; @@ -664,7 +671,7 @@ export class CertMangerModel { } } - private async installUserCertificate(data: Uint8Array, alias: string, callback: Function): Promise { + private async installUserCertificate(data: Uint8Array, alias: string, optType: CMModelOptType, callback: Function): Promise { console.info(TAG + 'installUserCertificate start'); if ((data === undefined) || (data.length === 0)) { callback(CMModelErrorCode.CM_MODEL_ERROR_INCORRECT_FORMAT); @@ -672,9 +679,15 @@ export class CertMangerModel { return; } try { + let certFormat: CertManager.CertFileFormat = CertManager.CertFileFormat.PEM_DER; + if (optType == CMModelOptType.CM_MODEL_OPT_USER_CA_P7B) { + certFormat = CertManager.CertFileFormat.P7B; + } let result = await CertManager.installUserTrustedCertificate({ inData: data, - alias: alias + alias: alias, + certFormat: certFormat, + certScope: CertManager.CertScope.CURRENT_USER }); console.info(TAG + 'installUserCertificate end'); callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, result.uri); diff --git a/certmanager/src/main/ets/pages/certInstallFromStorage.ets b/certmanager/src/main/ets/pages/certInstallFromStorage.ets index 9813cc9..e0e8814 100755 --- a/certmanager/src/main/ets/pages/certInstallFromStorage.ets +++ b/certmanager/src/main/ets/pages/certInstallFromStorage.ets @@ -30,6 +30,8 @@ import { RouterFileVo } from '../model/CertManagerVo/RouterInfoVo'; import { CredPwdInputParam } from './detail/CredPwdInputPage'; import { SheetParam } from '../common/util/SheetParam'; import FilterParams from '../common/constants/FileFilterParams'; +import { UIContext } from '@kit.ArkUI'; +import { common } from '@kit.AbilityKit'; const COPIES_NUM: number = 12; @@ -164,7 +166,8 @@ export struct CertInstallFromStorage { FileIoModel.getMediaFileSuffix(fileUri, (suffix: string | undefined) => { if (suffix !== undefined) { console.debug(TAG, 'suffix = ', suffix); - if ((suffix === 'cer') || (suffix === 'pem') || (suffix === 'crt') || (suffix === 'der')) { + if ((suffix === 'cer') || (suffix === 'pem') || (suffix === 'crt') || (suffix === 'der') || + (suffix === 'p7b') || (suffix === 'spc')) { CmInstallPresenter.getInstance().installCert(fileUri, '', suffix, false); } else { this.mFaPresenter.unrecognizedFileTips(); @@ -317,6 +320,7 @@ export struct CertInstallFromStorage { this.startInstallEvidenceBySheet(); } else { this.mFaPresenter.startInstallEvidence(this.context); + new UIContext().getHostContext() as common.Context; } }) } diff --git a/certmanager/src/main/ets/pages/certPwdInput.ets b/certmanager/src/main/ets/pages/certPwdInput.ets index 620ee65..07c1970 100755 --- a/certmanager/src/main/ets/pages/certPwdInput.ets +++ b/certmanager/src/main/ets/pages/certPwdInput.ets @@ -135,7 +135,6 @@ struct CertPwdInput { left: $r('app.float.distance_16'), right: $r('app.float.distance_24'), }) - .enabled(this.certPwd !== undefined && this.certPwd.length > 0) .onClick(() => { let fileInfo: RouterFileVo = router.getParams() as RouterFileVo; this.isPasswordError = false; diff --git a/certmanager/src/main/ets/pages/detail/CredPwdInputPage.ets b/certmanager/src/main/ets/pages/detail/CredPwdInputPage.ets index 1769719..9e37050 100755 --- a/certmanager/src/main/ets/pages/detail/CredPwdInputPage.ets +++ b/certmanager/src/main/ets/pages/detail/CredPwdInputPage.ets @@ -104,7 +104,6 @@ export struct CredPwdInputPage { top: $r('app.float.distance_16'), bottom: $r('app.float.distance_24') }) - .enabled(this.certPwd !== undefined && this.certPwd.length > 0) .onClick(() => { if (this.credFile === undefined || this.credFile === null) { console.error(TAG + 'Cred file is undefined'); diff --git a/certmanager/src/main/ets/presenter/CmFaPresenter.ets b/certmanager/src/main/ets/presenter/CmFaPresenter.ets index f0e4060..e215154 100755 --- a/certmanager/src/main/ets/presenter/CmFaPresenter.ets +++ b/certmanager/src/main/ets/presenter/CmFaPresenter.ets @@ -65,7 +65,8 @@ export default class CmFaPresenter { FileIoModel.getMediaFileSuffix(fileUri, (suffix: string | undefined) => { if (suffix !== undefined) { console.debug(TAG, 'suffix = ', suffix); - if ((suffix === 'cer') || (suffix === 'pem') || (suffix === 'crt') || (suffix === 'der')) { + if ((suffix === 'cer') || (suffix === 'pem') || (suffix === 'crt') || (suffix === 'der') || + (suffix === 'p7b') || (suffix === 'spc')) { CmInstallPresenter.getInstance().installCert(fileUri, '', suffix, true); } else { this.unrecognizedFileTips(); diff --git a/certmanager/src/main/ets/presenter/CmInstallPresenter.ets b/certmanager/src/main/ets/presenter/CmInstallPresenter.ets index 5df7229..8434ec2 100755 --- a/certmanager/src/main/ets/presenter/CmInstallPresenter.ets +++ b/certmanager/src/main/ets/presenter/CmInstallPresenter.ets @@ -51,6 +51,8 @@ export default class CmInstallPresenter { console.debug(TAG + 'updateCertFileType suffix: ' + suffix); if ((suffix === 'cer') || (suffix === 'pem') || (suffix === 'crt') || (suffix === 'der')) { this.optType = CMModelOptType.CM_MODEL_OPT_USER_CA; + } else if ((suffix === 'p7b') || (suffix === 'spc')) { + this.optType = CMModelOptType.CM_MODEL_OPT_USER_CA_P7B; } else if (((suffix === 'p12') || (suffix === 'pfx')) && AppStorage.get('installUserCred') === true) { this.optType = CMModelOptType.CM_MODEL_OPT_APP_CRED; -- Gitee