1/** 2 * Copyright (c) 2022-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import { CertAbstractVo } from './CertManagerVo/CertAbstractVo'; 17import { CertInfoVo } from './CertManagerVo/CertInfoVo'; 18import { CredentialAbstractVo } from './CertManagerVo/CredentialAbstractVo'; 19import { CredentialVo } from './CertManagerVo/CredentialVo'; 20import { BusinessError } from '@ohos.base'; 21import CertManager from '@ohos.security.certManager'; 22import cert from '@ohos.security.cert'; 23 24const TAG = 'CertManager Model: '; 25 26export enum CMModelErrorCode { 27 CM_MODEL_ERROR_SUCCESS = 0, 28 CM_MODEL_ERROR_FAILED = -1, 29 CM_MODEL_ERROR_EXCEPTION = -2, 30 CM_MODEL_ERROR_UNKNOWN_OPT = -3, 31 CM_MODEL_ERROR_NOT_SUPPORT = -4, 32 CM_MODEL_ERROR_NOT_FOUND = -5, 33 CM_MODEL_ERROR_INCORRECT_FORMAT = -6, 34 CM_MODEL_ERROR_MAX_QUANTITY_REACHED = -7, 35 CM_MODEL_ERROR_ALIAS_LENGTH_REACHED_LIMIT = -8, 36 CM_MODEL_ERROR_PASSWORD_ERR = -9, 37 CM_MODEL_ERROR_ADVANCED_SECURITY = -10, 38 CM_MODEL_ERROR_ 39} 40 41export enum CMModelOptType { 42 CM_MODEL_OPT_UNKNOWN = 0, 43 CM_MODEL_OPT_SYSTEM_CA = 1, 44 CM_MODEL_OPT_USER_CA = 2, 45 CM_MODEL_OPT_APP_CRED = 3, 46 CM_MODEL_OPT_PRIVATE_CRED = 4, 47 CM_MODEL_OPT_SYSTEM_CRED = 5, 48 CM_MODEL_OPT_USER_CA_P7B = 6, 49} 50 51export enum DialogErrorCode { 52 DIALOG_ERROR_INTERNAL = -1000, 53 DIALOG_OPERATION_CANCELS = -1001, 54 DIALOG_ERROR_PARAM_INVALID = -1010, 55} 56 57export enum CertManagerStore { 58 /* credential certificate store for end entity certificates. */ 59 CERT_MANAGER_CREDENTIAL_STORE = 0, 60 /* read only, updated by system only. */ 61 CERT_MANAGER_SYSTEM_TRUSTED_STORE = 1, 62 /* modifiable by applications and user. */ 63 CERT_MANAGER_USER_TRUSTED_STORE = 2, 64 /* application specific trusted certificate store; modifiable by the application only. */ 65 CERT_MANAGER_APPLICATION_TRUSTED_STORE = 3, 66} 67 68export class CertMangerModel { 69 getCertOrCredList(optType: CMModelOptType, callback: Function): void { 70 console.info(TAG + 'getCertOrCredList start'); 71 72 switch (optType) { 73 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CA: 74 this.getSystemTrustedCertificateList((errCode: CMModelErrorCode, certList: Array<CertAbstractVo>) => { 75 callback(errCode, certList); 76 }); 77 break; 78 case CMModelOptType.CM_MODEL_OPT_USER_CA: 79 this.getAllUserTrustedCertificates((errCode: CMModelErrorCode, certList: Array<CertAbstractVo>) => { 80 callback(errCode, certList); 81 }); 82 break; 83 case CMModelOptType.CM_MODEL_OPT_APP_CRED: 84 this.getAppCredList((errCode: CMModelErrorCode, credList: Array<CredentialAbstractVo>) => { 85 callback(errCode, credList); 86 }); 87 break; 88 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CRED: 89 this.getSystemCredList((errCode: CMModelErrorCode, credList: Array<CredentialAbstractVo>) => { 90 callback(errCode, credList) 91 }) 92 break; 93 default: 94 callback(CMModelErrorCode.CM_MODEL_ERROR_UNKNOWN_OPT, undefined); 95 break; 96 } 97 } 98 99 getCertOrCred(optType: CMModelOptType, uri: string, callback: Function): void { 100 console.info(TAG + 'getCertOrCred start'); 101 102 switch (optType) { 103 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CA: 104 this.getSystemTrustedCertificate(uri, (errCode: CMModelErrorCode, certInfo: CertInfoVo) => { 105 callback(errCode, certInfo); 106 }); 107 break; 108 case CMModelOptType.CM_MODEL_OPT_USER_CA: 109 this.getUserTrustedCertificate(uri, (errCode: CMModelErrorCode, certInfo: CertInfoVo) => { 110 callback(errCode, certInfo); 111 }); 112 break; 113 case CMModelOptType.CM_MODEL_OPT_APP_CRED: 114 this.getAppCredential(uri, (errCode: CMModelErrorCode, credInfo: CredentialVo) => { 115 callback(errCode, credInfo); 116 }); 117 break; 118 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CRED: 119 this.getSystemCredential(uri, (errCode: CMModelErrorCode, credInfo: CredentialVo) => { 120 callback(errCode, credInfo) 121 }) 122 break; 123 default: 124 callback(CMModelErrorCode.CM_MODEL_ERROR_UNKNOWN_OPT, undefined); 125 break; 126 } 127 } 128 129 deleteCertOrCred(optType: CMModelOptType, uri: string, callback: Function): void { 130 console.info(TAG + 'deleteCertOrCred start'); 131 132 switch (optType) { 133 case CMModelOptType.CM_MODEL_OPT_USER_CA: 134 this.deleteUserTrustedCertificate(uri, (errCode: CMModelErrorCode) => { 135 callback(errCode); 136 }); 137 break; 138 case CMModelOptType.CM_MODEL_OPT_APP_CRED: 139 this.deleteAppCredential(uri, (errCode: CMModelErrorCode) => { 140 callback(errCode); 141 }); 142 break; 143 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CA: 144 callback(CMModelErrorCode.CM_MODEL_ERROR_NOT_SUPPORT); 145 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CRED: 146 this.deleteSystemCredential(uri, (errCode: CMModelErrorCode) => { 147 callback(errCode) 148 }) 149 break; 150 default: 151 callback(CMModelErrorCode.CM_MODEL_ERROR_UNKNOWN_OPT); 152 break; 153 } 154 } 155 156 setCertStatus(optType: CMModelOptType, uri: string, status: boolean, callback: Function): void { 157 console.info(TAG + 'setCertStatus start'); 158 159 switch (optType) { 160 case CMModelOptType.CM_MODEL_OPT_USER_CA: 161 this.setCertificateStatus(uri, CertManagerStore.CERT_MANAGER_USER_TRUSTED_STORE, status, 162 (errCode: CMModelErrorCode) => { 163 callback(errCode); 164 }); 165 break; 166 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CA: 167 this.setCertificateStatus(uri, CertManagerStore.CERT_MANAGER_SYSTEM_TRUSTED_STORE, status, 168 (errCode: CMModelErrorCode) => { 169 callback(errCode); 170 }); 171 break; 172 case CMModelOptType.CM_MODEL_OPT_APP_CRED: 173 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CRED: 174 callback(CMModelErrorCode.CM_MODEL_ERROR_NOT_SUPPORT); 175 break; 176 default: 177 callback(CMModelErrorCode.CM_MODEL_ERROR_UNKNOWN_OPT); 178 break; 179 } 180 } 181 182 delAllCertOrCred(optType: CMModelOptType, callback: Function): void { 183 console.info(TAG + 'delAllCertOrCred start'); 184 185 switch (optType) { 186 case CMModelOptType.CM_MODEL_OPT_USER_CA: 187 this.delAllUserCertificate((errCode: CMModelErrorCode) => { 188 callback(errCode); 189 }); 190 break; 191 case CMModelOptType.CM_MODEL_OPT_APP_CRED: 192 this.delAllAppCredential((errCode: CMModelErrorCode) => { 193 callback(errCode); 194 }); 195 break; 196 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CA: 197 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CRED: 198 callback(CMModelErrorCode.CM_MODEL_ERROR_NOT_SUPPORT); 199 break; 200 default: 201 callback(CMModelErrorCode.CM_MODEL_ERROR_UNKNOWN_OPT); 202 break; 203 } 204 } 205 206 getAuthAppList(optType: CMModelOptType, uri: string, callback: Function): void { 207 console.info(TAG + 'getAuthAppList start'); 208 209 switch (optType) { 210 case CMModelOptType.CM_MODEL_OPT_APP_CRED: 211 this.getAuthorizedAppList(uri, (errCode: CMModelErrorCode, appUidList: Array<string>) => { 212 callback(errCode, appUidList); 213 }); 214 break; 215 case CMModelOptType.CM_MODEL_OPT_USER_CA: 216 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CA: 217 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CRED: 218 callback(CMModelErrorCode.CM_MODEL_ERROR_NOT_SUPPORT); 219 break; 220 default: 221 callback(CMModelErrorCode.CM_MODEL_ERROR_UNKNOWN_OPT); 222 break; 223 } 224 } 225 226 setAppAuthPromise(optType: CMModelOptType, uri: string, appUid: string, status: boolean): Promise<void> { 227 console.info(TAG + 'setAppAuth start'); 228 switch (optType) { 229 case CMModelOptType.CM_MODEL_OPT_APP_CRED: 230 return new Promise((resolve, reject) => { 231 this.setAuthorizedAppStatus(uri, appUid, status, (errCode: CMModelErrorCode, data: string) => { 232 if (errCode === CMModelErrorCode.CM_MODEL_ERROR_SUCCESS) { 233 resolve(void(data)); 234 } else { 235 reject(errCode); 236 } 237 }); 238 }); 239 default: 240 return new Promise((resolve, reject) => { 241 reject(CMModelErrorCode.CM_MODEL_ERROR_UNKNOWN_OPT); 242 }); 243 } 244 } 245 246 setAppAuth(optType: CMModelOptType, uri: string, appUid: string, status: boolean, callback: Function): void { 247 console.info(TAG + 'setAppAuth start'); 248 249 switch (optType) { 250 case CMModelOptType.CM_MODEL_OPT_APP_CRED: 251 this.setAuthorizedAppStatus(uri, appUid, status, (errCode: CMModelErrorCode, data: string) => { 252 callback(errCode, data); 253 }); 254 break; 255 case CMModelOptType.CM_MODEL_OPT_USER_CA: 256 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CA: 257 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CRED: 258 callback(CMModelErrorCode.CM_MODEL_ERROR_NOT_SUPPORT); 259 break; 260 default: 261 callback(CMModelErrorCode.CM_MODEL_ERROR_UNKNOWN_OPT); 262 break; 263 } 264 } 265 266 installCertOrCred(optType: CMModelOptType, alias: string, data: Uint8Array, pwd: string, callback: Function): void { 267 console.info(TAG + 'installCertOrCred start'); 268 switch (optType) { 269 case CMModelOptType.CM_MODEL_OPT_USER_CA: 270 this.installUserCertificate(data, alias, optType, (errCode: CMModelErrorCode, uri: string) => { 271 callback(errCode, uri); 272 }); 273 break; 274 case CMModelOptType.CM_MODEL_OPT_USER_CA_P7B: 275 this.installUserCertificate(data, alias, optType, (errCode: CMModelErrorCode, uri: string) => { 276 callback(errCode, uri); 277 }); 278 break; 279 case CMModelOptType.CM_MODEL_OPT_APP_CRED: 280 this.installPublicCertificate(data, alias, pwd, (errCode: CMModelErrorCode) => { 281 callback(errCode); 282 }); 283 break; 284 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CRED: 285 this.installSystemAppCertificate(data, alias, pwd, (errCode: CMModelErrorCode) => { 286 callback(errCode); 287 }); 288 break; 289 case CMModelOptType.CM_MODEL_OPT_SYSTEM_CA: 290 callback(CMModelErrorCode.CM_MODEL_ERROR_NOT_SUPPORT); 291 break; 292 default: 293 callback(CMModelErrorCode.CM_MODEL_ERROR_UNKNOWN_OPT); 294 break; 295 } 296 } 297 298 private async getSystemTrustedCertificateList(callback: Function): Promise<void> { 299 console.info(TAG + 'getSystemTrustedCertificateList start'); 300 try { 301 let subjectNameCN: string = ''; 302 let result = await CertManager.getSystemTrustedCertificateList(); 303 let certList: CertAbstractVo[] = []; 304 let regex: RegExp = new RegExp('(?<=CN=).*?(?=,)', 'g'); 305 if (result.certList !== undefined) { 306 for (let i = 0; i < result.certList.length; i++) { 307 if (result.certList[i].subjectName.length !== 0) { 308 let temp = result.certList[i].subjectName.match(regex); 309 subjectNameCN = (temp !== undefined) ? String(temp) : ''; 310 console.info('subjectNameCN is:' + subjectNameCN); 311 } 312 certList.push(new CertAbstractVo(String(result.certList[i].uri), String(result.certList[i].certAlias), 313 Boolean(result.certList[i].status), String(result.certList[i].subjectName), String(subjectNameCN))); 314 } 315 console.info(TAG + 'getSystemTrustedCertificateList end'); 316 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, certList); 317 } else { 318 console.error(TAG + 'getSystemTrustedCertificateList failed, undefined'); 319 callback(CMModelErrorCode.CM_MODEL_ERROR_FAILED, undefined); 320 } 321 } catch (err) { 322 let e: BusinessError = err as BusinessError; 323 console.error(TAG + 'getSystemTrustedCertificateList err, message: ' + e.message + ', code: ' + e.code); 324 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION, undefined); 325 } 326 } 327 328 private async getSystemTrustedCertificate(certUri: string, callback: Function): Promise<void> { 329 console.info(TAG + 'getSystemTrustedCertificate start'); 330 try { 331 let result = await CertManager.getSystemTrustedCertificate(certUri); 332 let subjectNameMap: Map<string, string> = new Map(); 333 let issuerNameMap: Map<string, string> = new Map(); 334 let dateMap: Map<string, string> = new Map(); 335 let regex1: RegExp = new RegExp('(?<=CN=).*?(?=,)', 'g'); 336 let regex2: RegExp = new RegExp('(?<=OU=).*?(?=,)', 'g'); 337 let regex3: RegExp = new RegExp('(?<=O=).*', 'g'); 338 339 if (result.certInfo !== undefined) { 340 if (result.certInfo.subjectName.length !== 0) { 341 let subjectNameCN = result.certInfo.subjectName.match(regex1); 342 console.info('subjectNameCN is:' + subjectNameCN); 343 let subjectNameOU = result.certInfo.subjectName.match(regex2); 344 console.info('subjectNameOU is:' + subjectNameOU); 345 let subjectNameO = result.certInfo.subjectName.match(regex3); 346 console.info('subjectNameO is:' + subjectNameO); 347 subjectNameMap.set('常用名称:', String(subjectNameCN)); 348 subjectNameMap.set('组织:', String(subjectNameO)); 349 subjectNameMap.set('组织单位:', String(subjectNameOU)); 350 subjectNameMap.set('序列号:', String(result.certInfo.serial)); 351 } 352 if (result.certInfo.issuerName.length !== 0) { 353 let issuerNameCN = result.certInfo.issuerName.match(regex1); 354 console.info('issuerNameCN is:' + issuerNameCN); 355 let issuerNameOU = result.certInfo.issuerName.match(regex2); 356 console.info('issuerNameOU is:' + issuerNameOU); 357 let issuerNameO = result.certInfo.issuerName.match(regex3); 358 console.info('issuerNameO is:' + issuerNameO); 359 issuerNameMap.set('常用名称:', String(issuerNameCN)); 360 issuerNameMap.set('组织:', String(issuerNameO)); 361 issuerNameMap.set('组织单位:', String(issuerNameOU)); 362 } 363 dateMap.set('颁发时间:', String(result.certInfo.notBefore)); 364 dateMap.set('有效期至:', String(result.certInfo.notAfter)); 365 366 let certData: Uint8Array = result.certInfo.cert; 367 let certInfo = new CertInfoVo(String(result.certInfo.uri), String(result.certInfo.certAlias), 368 Boolean(result.certInfo.status), String(result.certInfo.issuerName), String(result.certInfo.subjectName), 369 String(result.certInfo.serial), String(result.certInfo.notBefore), 370 String(result.certInfo.notAfter), String(result.certInfo.fingerprintSha256), 371 certData, subjectNameMap, issuerNameMap, dateMap); 372 console.info(TAG + 'getSystemTrustedCertificate end'); 373 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, certInfo); 374 } else { 375 console.error(TAG + 'getSystemTrustedCertificate failed, undefined'); 376 callback(CMModelErrorCode.CM_MODEL_ERROR_FAILED, undefined); 377 } 378 } catch (err) { 379 let e: BusinessError = err as BusinessError; 380 console.error(TAG + 'getSystemTrustedCertificate err, message: ' + e.message + ', code: ' + e.code); 381 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION, undefined); 382 } 383 } 384 385 private async getAllUserTrustedCertificates(callback: Function): Promise<void> { 386 console.info(TAG + 'getAllUserTrustedCertificates start'); 387 try { 388 let subjectNameCN: string = ''; 389 let result = await CertManager.getAllUserTrustedCertificates(); 390 let certList: CertAbstractVo[] = []; 391 let regex: RegExp = new RegExp('(?<=CN=).*?(?=,)', 'g'); 392 if (result.certList !== undefined) { 393 for (let i = 0; i < result.certList.length; i++) { 394 if (result.certList[i].subjectName.length !== 0) { 395 let temp = result.certList[i].subjectName.match(regex); 396 subjectNameCN = (temp !== undefined) ? String(temp) : ''; 397 console.info('subjectNameCN is:' + subjectNameCN); 398 } 399 if (String(result.certList[i].uri).indexOf('u=0;') === -1) { 400 certList.push(new CertAbstractVo(String(result.certList[i].uri), String(result.certList[i].certAlias), 401 Boolean(result.certList[i].status), String(result.certList[i].subjectName), String(subjectNameCN))); 402 } 403 } 404 console.info(TAG + 'getAllUserTrustedCertificates end'); 405 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, certList); 406 } else { 407 console.error(TAG + 'getAllUserTrustedCertificates failed, undefined'); 408 callback(CMModelErrorCode.CM_MODEL_ERROR_FAILED, undefined); 409 } 410 } catch (err) { 411 let e: BusinessError = err as BusinessError; 412 console.error(TAG + 'getAllUserTrustedCertificates err, message: ' + e.message + ', code: ' + e.code); 413 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 414 } 415 } 416 417 private async getUserTrustedCertificate(certUri: string, callback: Function): Promise<void> { 418 console.info(TAG + 'getUserTrustedCertificate start'); 419 try { 420 let result = await CertManager.getUserTrustedCertificate(certUri); 421 let subjectNameMap: Map<string, string> = new Map(); 422 let issuerNameMap: Map<string, string> = new Map(); 423 let dateMap: Map<string, string> = new Map(); 424 let regex1: RegExp = new RegExp('(?<=CN=).*?(?=,)', 'g'); 425 let regex2: RegExp = new RegExp('(?<=OU=).*?(?=,)', 'g'); 426 let regex3: RegExp = new RegExp('(?<=O=).*', 'g'); 427 428 if (result.certInfo !== undefined) { 429 if (result.certInfo.subjectName.length !== 0) { 430 let subjectNameCN = result.certInfo.subjectName.match(regex1); 431 console.info('subjectNameCN is:' + subjectNameCN); 432 let subjectNameOU = result.certInfo.subjectName.match(regex2); 433 console.info('subjectNameOU is:' + subjectNameOU); 434 let subjectNameO = result.certInfo.subjectName.match(regex3); 435 console.info('SubjectNameO is:' + subjectNameO); 436 subjectNameMap.set('常用名称:', String(subjectNameCN)); 437 subjectNameMap.set('组织:', String(subjectNameO)); 438 subjectNameMap.set('组织单位:', String(subjectNameOU)); 439 subjectNameMap.set('序列号:', String(result.certInfo.serial)); 440 } 441 if (result.certInfo.issuerName.length !== 0) { 442 let issuerNameCN = result.certInfo.issuerName.match(regex1); 443 console.info('issuerNameCN is:' + issuerNameCN); 444 let issuerNameOU = result.certInfo.issuerName.match(regex2); 445 console.info('issuerNameOU is:' + issuerNameOU); 446 let issuerNameO = result.certInfo.issuerName.match(regex3); 447 console.info('issuerNameO is:' + issuerNameO); 448 issuerNameMap.set('常用名称:', String(issuerNameCN)); 449 issuerNameMap.set('组织:', String(issuerNameO)); 450 issuerNameMap.set('组织单位:', String(issuerNameOU)); 451 } 452 dateMap.set('颁发时间:', String(result.certInfo.notBefore)); 453 dateMap.set('有效期至:', String(result.certInfo.notAfter)); 454 let certData: Uint8Array = result.certInfo.cert; 455 let certInfo = new CertInfoVo(String(result.certInfo.uri), String(result.certInfo.certAlias), 456 Boolean(result.certInfo.status), String(result.certInfo.issuerName), String(result.certInfo.subjectName), 457 String(result.certInfo.serial), String(result.certInfo.notBefore), 458 String(result.certInfo.notAfter), String(result.certInfo.fingerprintSha256), 459 certData, subjectNameMap, issuerNameMap, dateMap); 460 console.info(TAG + 'getUserTrustedCertificate end'); 461 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, certInfo); 462 } else { 463 console.error(TAG + 'getUserTrustedCertificate failed, undefined'); 464 callback(CMModelErrorCode.CM_MODEL_ERROR_FAILED, undefined); 465 } 466 } catch (err) { 467 let e: BusinessError = err as BusinessError; 468 console.error(TAG + 'getUserTrustedCertificate err, message: ' + e.message + ', code: ' + e.code); 469 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION, undefined); 470 } 471 } 472 473 private async deleteUserTrustedCertificate(certUri: string, callback: Function): Promise<void> { 474 console.info(TAG + 'deleteUserTrustedCertificate start'); 475 try { 476 await CertManager.uninstallUserTrustedCertificate(certUri); 477 console.info(TAG + 'deleteUserTrustedCertificate end'); 478 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS); 479 } catch (err) { 480 let e: BusinessError = err as BusinessError; 481 console.error(TAG + 'deleteUserTrustedCertificate err, message: ' + e.message + ', code: ' + e.code); 482 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 483 } 484 } 485 486 private async setCertificateStatus(certUri: string, store: number, 487 status: boolean, callback: Function): Promise<void> { 488 console.info(TAG + 'setCertificateStatus start'); 489 try { 490 await CertManager.setCertificateStatus(certUri, store, status); 491 console.info(TAG + 'setCertificateStatus end'); 492 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS); 493 } catch (err) { 494 let e: BusinessError = err as BusinessError; 495 console.error(TAG + 'setCertificateStatus failed with err, message: ' + e.message + ', code: ' + e.code); 496 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 497 } 498 } 499 500 private async getAppCredList(callback: Function): Promise<void> { 501 console.info(TAG + 'getAppCredList start'); 502 try { 503 let result = await CertManager.getAllPublicCertificates(); 504 let credList: CredentialAbstractVo[] = []; 505 if (result && result.credentialList !== undefined) { 506 for (let i = 0; i < result.credentialList.length; i++) { 507 credList.push(new CredentialAbstractVo(String(result.credentialList[i].type), 508 String(result.credentialList[i].alias), String(result.credentialList[i].keyUri))); 509 } 510 console.info(TAG + 'getAppCredList end'); 511 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, credList); 512 } else { 513 console.error(TAG + 'getAppCredList failed, undefined.'); 514 callback(CMModelErrorCode.CM_MODEL_ERROR_FAILED, undefined); 515 } 516 } catch (err) { 517 let e: BusinessError = err as BusinessError; 518 console.error(TAG + 'getAppCredList failed with err, message: ' + e.message + ', code: ' + e.code); 519 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 520 } 521 } 522 523 private async getSystemCredList(callback: Function): Promise<void> { 524 console.info(TAG + 'getSystemList start'); 525 try { 526 let result = await CertManager.getAllSystemAppCertificates(); 527 let credList: CredentialAbstractVo[] = []; 528 if (result.credentialList !== undefined) { 529 for (let i = 0; i < result.credentialList.length; i++) { 530 credList.push(new CredentialAbstractVo(String(result.credentialList[i].type), 531 String(result.credentialList[i].alias), String(result.credentialList[i].keyUri))); 532 } 533 console.info(TAG + 'getSystemCredList end'); 534 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, credList); 535 } else { 536 console.error(TAG + 'getSystemCredList failed, undefined.'); 537 callback(CMModelErrorCode.CM_MODEL_ERROR_FAILED, undefined) 538 } 539 } catch (err) { 540 let e: BusinessError = err as BusinessError; 541 console.error(TAG, 'getSystemCredList failed with err, message: ' + e.message + ', code: ' + e.code) 542 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION) 543 } 544 } 545 546 private async getAppCredential(certUri: string, callback: Function): Promise<void> { 547 console.info(TAG + 'getAppCredential start'); 548 try { 549 let result = await CertManager.getPublicCertificate(certUri); 550 if (result.credential !== undefined) { 551 let certData: Uint8Array = result.credential.credData; 552 let credInfo = new CredentialVo(String(result.credential.type), String(result.credential.alias), 553 String(result.credential.keyUri), Number(result.credential.certNum), 554 Number(result.credential.keyNum), certData); 555 console.info(TAG + 'getAppCredential end'); 556 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, credInfo); 557 } else { 558 console.error(TAG + 'getAppCredential failed, undefined'); 559 callback(CMModelErrorCode.CM_MODEL_ERROR_FAILED, undefined); 560 } 561 } catch (err) { 562 let e: BusinessError = err as BusinessError; 563 console.error(TAG + 'getAppCredential failed with err, message: ' + e.message + ', code: ' + e.code); 564 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION, undefined); 565 } 566 } 567 568 private async getSystemCredential(certUri: string, callback: Function): Promise<void> { 569 console.info(TAG + 'getSystemCredential start'); 570 try { 571 let result = await CertManager.getSystemAppCertificate(certUri); 572 if (result.credential !== undefined) { 573 let certData: Uint8Array = result.credential.credData; 574 let credInfo = new CredentialVo(String(result.credential.type), String(result.credential.alias), 575 String(result.credential.keyUri), Number(result.credential.certNum), 576 Number(result.credential.keyNum), certData); 577 console.info(TAG + 'getSystemCredential end'); 578 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, credInfo); 579 } else { 580 console.error(TAG + 'getSystemCredential failed, undefined'); 581 callback(CMModelErrorCode.CM_MODEL_ERROR_FAILED, undefined); 582 } 583 } catch (err) { 584 let e: BusinessError = err as BusinessError; 585 console.error(TAG + 'getSystemCredential failed with err, message: ' + e.message + ', code: ' + e.code); 586 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION, undefined); 587 } 588 } 589 590 private async deleteAppCredential(certUri: string, callback: Function): Promise<void> { 591 console.info(TAG + 'deleteAppCredential start'); 592 try { 593 await CertManager.uninstallPublicCertificate(certUri); 594 console.info(TAG + 'deleteAppCredential end'); 595 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS); 596 } catch (err) { 597 let e: BusinessError = err as BusinessError; 598 console.error(TAG + 'deleteAppCredential failed with err, message: ' + e.message + ', code: ' + e.code); 599 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 600 } 601 } 602 603 private async deleteSystemCredential(certUri: string, callback: Function): Promise<void> { 604 console.info(TAG, 'deleteSystemCredential start'); 605 try { 606 await CertManager.uninstallSystemAppCertificate(certUri); 607 console.info(TAG, 'deleteSystemCredential end'); 608 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS); 609 } catch (err) { 610 let e: BusinessError = err as BusinessError; 611 console.error(TAG + 'deleteSystemCredential failed with err, message: ' + e.message + ', code: ' + e.code); 612 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 613 } 614 } 615 616 private async delAllUserCertificate(callback: Function): Promise<void> { 617 console.info(TAG + 'delAllUserCertificate start'); 618 try { 619 await CertManager.uninstallAllUserTrustedCertificate(); 620 console.info(TAG + 'delAllUserCertificate end'); 621 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS); 622 } catch (err) { 623 let e: BusinessError = err as BusinessError; 624 console.error(TAG + 'delAllUserCertificate failed with err, message: ' + e.message + ', code: ' + e.code); 625 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 626 } 627 } 628 629 private async delAllAppCredential(callback: Function): Promise<void> { 630 console.info(TAG + 'delAllAppCredential start'); 631 try { 632 await CertManager.uninstallAllAppCertificate(); 633 console.info(TAG + 'delAllAppCredential end'); 634 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS); 635 } catch (err) { 636 let e: BusinessError = err as BusinessError; 637 console.error(TAG + 'delAllAppCredential failed with err, message: ' + e.message + ', code: ' + e.code); 638 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 639 } 640 } 641 642 private async getAuthorizedAppList(uri: string, callback: Function): Promise<void> { 643 console.info(TAG + 'getAuthorizedAppList start'); 644 try { 645 let result = await CertManager.getAuthorizedAppList(uri); 646 console.info(TAG + 'getAuthorizedAppList end'); 647 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, result.appUidList); 648 } catch (err) { 649 let e: BusinessError = err as BusinessError; 650 console.error(TAG + 'getAuthorizedAppList failed with err, message: ' + e.message + ', code: ' + e.code); 651 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION, undefined); 652 } 653 } 654 655 private async setAuthorizedAppStatus( 656 uri: string, 657 appUid: string, 658 status: boolean, 659 callback: Function 660 ): Promise<void> { 661 console.info(TAG + 'setAuthorizedAppStatus start'); 662 try { 663 if (status) { 664 let result = await CertManager.grantPublicCertificate(uri, appUid); 665 console.info(TAG + 'setAuthorizedAppStatus true end'); 666 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, result.uri); 667 } else { 668 console.info(TAG + 'appId:' + appUid + 'uri:' + uri); 669 await CertManager.removeGrantedPublicCertificate(uri, appUid); 670 console.info(TAG + 'setAuthorizedAppStatus false end'); 671 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS); 672 } 673 } catch (err) { 674 let e: BusinessError = err as BusinessError; 675 console.error(TAG + 'setAuthorizedAppStatus failed with err, message: ' + e.message + ', code: ' + e.code); 676 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 677 } 678 } 679 680 private async installUserCertificate(data: Uint8Array, alias: string, optType: CMModelOptType, callback: Function): Promise<void> { 681 console.info(TAG + 'installUserCertificate start'); 682 if ((data === undefined) || (data.length === 0)) { 683 callback(CMModelErrorCode.CM_MODEL_ERROR_INCORRECT_FORMAT); 684 console.error(TAG + 'installUserCertificate data is empty.'); 685 return; 686 } 687 try { 688 let certFormat: CertManager.CertFileFormat = CertManager.CertFileFormat.PEM_DER; 689 if (optType == CMModelOptType.CM_MODEL_OPT_USER_CA_P7B) { 690 certFormat = CertManager.CertFileFormat.P7B; 691 } 692 let result = await CertManager.installUserTrustedCertificate({ 693 inData: data, 694 alias: alias, 695 certFormat: certFormat, 696 certScope: CertManager.CertScope.CURRENT_USER 697 }); 698 console.info(TAG + 'installUserCertificate end'); 699 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS, result.uri); 700 } catch (err) { 701 let e: BusinessError = err as BusinessError; 702 if (e.code === CertManager.CMErrorCode.CM_ERROR_INCORRECT_FORMAT) { 703 callback(CMModelErrorCode.CM_MODEL_ERROR_INCORRECT_FORMAT) 704 } else if (e.code === CertManager.CMErrorCode.CM_ERROR_MAX_CERT_COUNT_REACHED) { 705 callback(CMModelErrorCode.CM_MODEL_ERROR_MAX_QUANTITY_REACHED) 706 } else if (e.code === CertManager.CMErrorCode.CM_ERROR_ALIAS_LENGTH_REACHED_LIMIT) { 707 callback(CMModelErrorCode.CM_MODEL_ERROR_ALIAS_LENGTH_REACHED_LIMIT) 708 } else { 709 console.error(TAG + 'installUserCertificate failed with err, message: ' + e.message + ', code: ' + e.code); 710 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 711 } 712 } 713 } 714 715 private async installPublicCertificate( 716 data: Uint8Array, 717 alias: string, 718 pwd: string, 719 callback: Function 720 ): Promise<void> { 721 console.info(TAG + 'installPublicCertificate start'); 722 try { 723 await CertManager.installPublicCertificate(data, pwd, alias); 724 console.info(TAG + 'installPublicCertificate end'); 725 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS); 726 } catch (err) { 727 let e: BusinessError = err as BusinessError; 728 if (e.code === CertManager.CMErrorCode.CM_ERROR_INCORRECT_FORMAT) { 729 callback(CMModelErrorCode.CM_MODEL_ERROR_INCORRECT_FORMAT) 730 } else if (e.code === CertManager.CMErrorCode.CM_ERROR_MAX_CERT_COUNT_REACHED) { 731 callback(CMModelErrorCode.CM_MODEL_ERROR_MAX_QUANTITY_REACHED) 732 } else if (e.code === CertManager.CMErrorCode.CM_ERROR_ALIAS_LENGTH_REACHED_LIMIT) { 733 callback(CMModelErrorCode.CM_MODEL_ERROR_ALIAS_LENGTH_REACHED_LIMIT) 734 } else if (e.code === CertManager.CMErrorCode.CM_ERROR_PASSWORD_IS_ERR) { 735 callback(CMModelErrorCode.CM_MODEL_ERROR_PASSWORD_ERR); 736 } else { 737 console.error(TAG + 'installPublicCertificate failed with err, message: ' + e.message + ', code: ' + e.code); 738 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 739 } 740 } 741 } 742 743 private async installSystemAppCertificate( 744 data: Uint8Array, 745 alias: string, 746 pwd: string, 747 callback: Function 748 ): Promise<void> { 749 console.info(TAG, 'installSystemAppCertificate start'); 750 try { 751 await CertManager.installSystemAppCertificate(data, pwd, alias); 752 console.info(TAG + 'installSystemAppCertificate end'); 753 callback(CMModelErrorCode.CM_MODEL_ERROR_SUCCESS); 754 } catch (err) { 755 let e: BusinessError = err as BusinessError; 756 if (e.code === CertManager.CMErrorCode.CM_ERROR_INCORRECT_FORMAT) { 757 callback(CMModelErrorCode.CM_MODEL_ERROR_INCORRECT_FORMAT); 758 } else if (e.code === CertManager.CMErrorCode.CM_ERROR_MAX_CERT_COUNT_REACHED) { 759 callback(CMModelErrorCode.CM_MODEL_ERROR_MAX_QUANTITY_REACHED); 760 } else if (e.code === CertManager.CMErrorCode.CM_ERROR_ALIAS_LENGTH_REACHED_LIMIT) { 761 callback(CMModelErrorCode.CM_MODEL_ERROR_ALIAS_LENGTH_REACHED_LIMIT); 762 } else if (e.code === CertManager.CMErrorCode.CM_ERROR_PASSWORD_IS_ERR) { 763 callback(CMModelErrorCode.CM_MODEL_ERROR_PASSWORD_ERR); 764 } else { 765 console.error(TAG + 'installSystemAppCertificate failed with err, message: ' + e.message + ', code: ' + e.code); 766 callback(CMModelErrorCode.CM_MODEL_ERROR_EXCEPTION); 767 } 768 } 769 } 770} 771 772let certMangerModel = new CertMangerModel(); 773 774export default certMangerModel as CertMangerModel; 775