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