diff --git a/certmanager/src/main/ets/@ohos.security.certManager.d.ts b/certmanager/src/main/ets/@ohos.security.certManager.d.ts index bc6fa8d8967f745123123a43b2e58d8bcd563f8e..c3b6d48b1c5cea93b2650900b5b56f3d04d52318 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 5e601eee84b45b6b775e7b51bf2cd4387d02632a..caab03a7b7839a86bbc40da1df2b2396d4b5bfa6 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 cf9e57b464c12a8c7e96af6b80481e992c3bff14..f5500fcea7611f48741d93fb28724b11e4360ed2 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 9813cc98f3861a2451e8638e14729c2d834cb88e..e0e88143776e9ce7bb9c667c323c12e0983a55a1 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 620ee65234721e126e7f4440c4196756d5c482a9..07c197096f9735a1734baa3de01b222d97142579 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 17697195329370c2d42d52e7e212ad8123e323a4..9e370500c8397ab8f679c6c1c5d291415d5399ce 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 f0e4060da2095cd492129bd96b96397262c57593..e215154da56fbbf3724803262258cb43608ae341 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 5df72295335dc8fb3fd9c77385ed747479943cfd..8434ec214f52efe39e0b61a0cc88eb1dd980c9f4 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;