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