From f4ba74a3a4f0fe6d84ffaecb2313721b37e31b1e Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Mon, 11 Aug 2025 09:55:12 +0800 Subject: [PATCH 01/16] First commit --- .gitignore | 12 + AppScope/app.json5 | 10 + AppScope/resources/base/element/string.json | 8 + AppScope/resources/base/media/background.png | Bin 0 -> 91942 bytes AppScope/resources/base/media/foreground.png | Bin 0 -> 8805 bytes .../resources/base/media/layered_image.json | 7 + build-profile.json5 | 42 ++ code-linter.json5 | 32 + entry/.gitignore | 6 + entry/build-profile.json5 | 28 + entry/hvigorfile.ts | 6 + entry/obfuscation-rules.txt | 23 + entry/oh-package.json5 | 10 + .../main/ets/Common/TrustedServiceOption.ets | 21 + entry/src/main/ets/Utils/AssetUtils.ets | 93 +++ .../main/ets/entryability/EntryAbility.ets | 44 ++ .../entrybackupability/EntryBackupAbility.ets | 16 + .../main/ets/model/TrustedAuthentication.ets | 641 ++++++++++++++++++ entry/src/main/ets/pages/Index.ets | 378 +++++++++++ entry/src/main/ets/pages/PageOne.ets | 94 +++ entry/src/main/ets/pages/PageTwo.ets | 147 ++++ entry/src/main/module.json5 | 63 ++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/float.json | 8 + .../main/resources/base/element/string.json | 20 + .../main/resources/base/media/background.png | Bin 0 -> 91942 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 8805 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 5 + .../resources/base/profile/router_map.json | 20 + .../main/resources/dark/element/color.json | 8 + entry/src/mock/mock-config.json5 | 2 + entry/src/ohosTest/ets/test/Ability.test.ets | 35 + entry/src/ohosTest/ets/test/List.test.ets | 5 + entry/src/ohosTest/module.json5 | 11 + entry/src/test/List.test.ets | 5 + entry/src/test/LocalUnit.test.ets | 33 + hvigor/hvigor-config.json5 | 22 + hvigorfile.ts | 6 + oh-package-lock.json5 | 27 + oh-package.json5 | 10 + 43 files changed, 1916 insertions(+) create mode 100644 .gitignore create mode 100644 AppScope/app.json5 create mode 100644 AppScope/resources/base/element/string.json create mode 100644 AppScope/resources/base/media/background.png create mode 100644 AppScope/resources/base/media/foreground.png create mode 100644 AppScope/resources/base/media/layered_image.json create mode 100644 build-profile.json5 create mode 100644 code-linter.json5 create mode 100644 entry/.gitignore create mode 100644 entry/build-profile.json5 create mode 100644 entry/hvigorfile.ts create mode 100644 entry/obfuscation-rules.txt create mode 100644 entry/oh-package.json5 create mode 100644 entry/src/main/ets/Common/TrustedServiceOption.ets create mode 100644 entry/src/main/ets/Utils/AssetUtils.ets create mode 100644 entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 entry/src/main/ets/model/TrustedAuthentication.ets create mode 100644 entry/src/main/ets/pages/Index.ets create mode 100644 entry/src/main/ets/pages/PageOne.ets create mode 100644 entry/src/main/ets/pages/PageTwo.ets create mode 100644 entry/src/main/module.json5 create mode 100644 entry/src/main/resources/base/element/color.json create mode 100644 entry/src/main/resources/base/element/float.json create mode 100644 entry/src/main/resources/base/element/string.json create mode 100644 entry/src/main/resources/base/media/background.png create mode 100644 entry/src/main/resources/base/media/foreground.png create mode 100644 entry/src/main/resources/base/media/layered_image.json create mode 100644 entry/src/main/resources/base/media/startIcon.png create mode 100644 entry/src/main/resources/base/profile/backup_config.json create mode 100644 entry/src/main/resources/base/profile/main_pages.json create mode 100644 entry/src/main/resources/base/profile/router_map.json create mode 100644 entry/src/main/resources/dark/element/color.json create mode 100644 entry/src/mock/mock-config.json5 create mode 100644 entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 entry/src/ohosTest/ets/test/List.test.ets create mode 100644 entry/src/ohosTest/module.json5 create mode 100644 entry/src/test/List.test.ets create mode 100644 entry/src/test/LocalUnit.test.ets create mode 100644 hvigor/hvigor-config.json5 create mode 100644 hvigorfile.ts create mode 100644 oh-package-lock.json5 create mode 100644 oh-package.json5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d2ff201 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/AppScope/app.json5 b/AppScope/app.json5 new file mode 100644 index 0000000..25f3897 --- /dev/null +++ b/AppScope/app.json5 @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.example.testdigitalshield", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:layered_image", + "label": "$string:app_name" + } +} diff --git a/AppScope/resources/base/element/string.json b/AppScope/resources/base/element/string.json new file mode 100644 index 0000000..184bc06 --- /dev/null +++ b/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "TestDigitalShield" + } + ] +} diff --git a/AppScope/resources/base/media/background.png b/AppScope/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f GIT binary patch literal 91942 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 = [ + { + tag: trustedAppService.AttestTag.ATTEST_TAG_ALGORITHM, + value: trustedAppService.AttestKeyAlg.ATTEST_ALG_ECC + }, + { + tag: trustedAppService.AttestTag.ATTEST_TAG_KEY_SIZE, + value: trustedAppService.AttestKeySize.ATTEST_ECC_KEY_SIZE_256 + }, + { + tag: trustedAppService.AttestTag.ATTEST_TAG_DEVICE_ID, + value: BigInt(2) + } +]; +const createOptions: trustedAppService.AttestOptions = { + properties: createProperties +}; + +export default createOptions; diff --git a/entry/src/main/ets/Utils/AssetUtils.ets b/entry/src/main/ets/Utils/AssetUtils.ets new file mode 100644 index 0000000..6ee6e0d --- /dev/null +++ b/entry/src/main/ets/Utils/AssetUtils.ets @@ -0,0 +1,93 @@ +import { util } from '@kit.ArkTS'; +import { asset } from '@kit.AssetStoreKit'; +import { BusinessError } from '@kit.BasicServicesKit'; + +class AssetUtils { + hasShield: boolean = false; + + stringToArray(str: string): Uint8Array { + let textEncoder: util.TextEncoder = new util.TextEncoder(); + return textEncoder.encodeInto(str); + } + + DeleteDataFromAssetStore(name: string) { + let query: asset.AssetMap = new Map(); + query.set(asset.Tag.ALIAS, this.stringToArray(name)); + try { + asset.remove(query).then(() => { + console.info(`Asset removed successfully`); + }).catch((err: BusinessError) => { + console.error(`Failed to remove Asset. Code is ${err.code}, message is ${err.message}`); + }); + } catch (error) { + let err = error as BusinessError; + console.error(`Failed to remove Asset. Code is ${err.code}, message is ${err.message}`); + } + } + + async AddDataToAssetStore(data: Uint8Array, name: string, label: string): Promise { + let attr: asset.AssetMap = new Map(); + console.info('secret input', data); + attr.set(asset.Tag.SECRET, data); + attr.set(asset.Tag.ALIAS, this.stringToArray(name)); + attr.set(asset.Tag.ACCESSIBILITY, asset.Accessibility.DEVICE_FIRST_UNLOCKED); + attr.set(asset.Tag.DATA_LABEL_NORMAL_1, this.stringToArray(label)); + try { + asset.add(attr).then(() => { + console.info('Asset Added successfully'); + }).catch((err: BusinessError) => { + console.error(`Failed to add Asset. Code is ${err.code}, message is ${err.message}`); + if (err.code === 24000003) { + this.UpdateDataToAssetStore(data, name, label); + } + }); + } catch (error) { + let err = error as BusinessError; + console.error(`Failed to add Asset. Code is ${err.code}, message is ${err.message}`); + } + } + + UpdateDataToAssetStore(newData: Uint8Array, name: string, label: string){ + let query: asset.AssetMap = new Map(); + query.set(asset.Tag.ALIAS, this.stringToArray(name)); + let attrsToUpdate: asset.AssetMap = new Map(); + attrsToUpdate.set(asset.Tag.SECRET, newData); + attrsToUpdate.set(asset.Tag.DATA_LABEL_NORMAL_1, this.stringToArray(label)); + try { + asset.update(query, attrsToUpdate).then(() => { + console.info('Asset updated successfully'); + }).catch((err: BusinessError) => { + console.error(`Failed to update Asset. Code is ${err.code}, message is ${err.message}`); + }); + } catch (error) { + let err = error as BusinessError; + console.error(`Failed to update Asset. Code is ${err.code}, message is ${err.message}`); + } + } + + async QueryDataFromAssetStore(name: string):Promise{ + let query: asset.AssetMap = new Map(); + query.set(asset.Tag.ALIAS, this.stringToArray(name)); + query.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ALL); + let emptyArray = new Uint8Array(0); + console.info('Asset query begin'); + try{ + console.info('Asset query begin in try'); + let res: Array = await asset.query(query); + for(let i = 0; i < res.length; i++){ + console.info('Asset query begin in loop'); + let secret: Uint8Array = res[i].get(asset.Tag.SECRET) as Uint8Array; + console.info('secret output', secret); + return secret; + } + console.info('Asset query begin again'); + }catch (error) { + let err = error as BusinessError; + console.error(`Failed to query Asset. Code is ${err.code}, message is ${err.message}`); + return emptyArray; + } + return emptyArray; + } +} + +export default new AssetUtils(); \ No newline at end of file diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000..508880a --- /dev/null +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,44 @@ +import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +const DOMAIN = 0x0000; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err)); + return; + } + hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground'); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 0000000..8e4de99 --- /dev/null +++ b/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,16 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +const DOMAIN = 0x0000; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(DOMAIN, 'testTag', 'onBackup ok'); + await Promise.resolve(); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(DOMAIN, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + await Promise.resolve(); + } +} \ No newline at end of file diff --git a/entry/src/main/ets/model/TrustedAuthentication.ets b/entry/src/main/ets/model/TrustedAuthentication.ets new file mode 100644 index 0000000..0e37dd2 --- /dev/null +++ b/entry/src/main/ets/model/TrustedAuthentication.ets @@ -0,0 +1,641 @@ +import { huks } from '@kit.UniversalKeystoreKit' +import { util } from '@kit.ArkTS' +import { BusinessError } from '@kit.BasicServicesKit' +import AssetUtils from '../Utils/AssetUtils' +import { resourceManager } from '@kit.LocalizationKit' +import { trustedAuthentication } from '@kit.DeviceSecurityKit' +import { userAuth } from '@kit.UserAuthenticationKit' + + +const TUI_PIN_SET = 1 +const TUI_PIN_MODIFY = 2 +const TUI_PIN_DISABLE = 3 +const TUI_CONTENT_FACE_VERIFY = 5 +const TUI_CONTENT_FINGERPRINT_VERTFY = 6 +const TUI_BIND_FACE = 7 +const TUI_BIND_FINGERPRINT = 8 +const TUI_PIN_SET_MIX = 9 +let keyAlias = 'test_sign_key_alias'; +let handle: number; +let challenge: Uint8Array; +let signature: Uint8Array; +let authTokenData: Uint8Array; + +class throwObject { + isThrow: boolean = false +} + +function generateKeyItem(keyAlias: string, huksOptions: huks.HuksOptions, throwObject: throwObject) { + return new Promise((resolve, reject) => { + try { + huks.generateKeyItem(keyAlias, huksOptions, (error, data) => { + if (error) { + reject(error); + } else { + resolve(data); + } + }); + } catch (error) { + throwObject.isThrow = true; + throw (error as Error); + } + }); +}; + +function GetEccVerifyProperties() { + let properties: Array = [{ + tag: huks.HuksTag.HUKS_TAG_ALGORITHM, + value: huks.HuksKeyAlg.HUKS_ALG_ECC + }, { + tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, + value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 + }, { + tag: huks.HuksTag.HUKS_TAG_PURPOSE, + value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY + }, { + tag: huks.HuksTag.HUKS_TAG_DIGEST, + value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 + }, { + tag: huks.HuksTag.HUKS_TAG_USER_AUTH_TYPE, + value: huks.HuksUserAuthType.HUKS_USER_AUTH_TYPE_FACE + }]; + return properties; +} + +function GetEccSignProperties() { + let properties: Array = [{ + tag: huks.HuksTag.HUKS_TAG_ALGORITHM, + value: huks.HuksKeyAlg.HUKS_ALG_ECC + }, { + tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, + value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 + }, { + tag: huks.HuksTag.HUKS_TAG_PURPOSE, + value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN + }, { + tag: huks.HuksTag.HUKS_TAG_DIGEST, + value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 + }, { + tag: huks.HuksTag.HUKS_TAG_KEY_SECURE_SIGN_TYPE, + value: huks.HuksSecureSignType.HUKS_SECURE_SIGN_WITH_AUTHINFO + }]; + return properties; +} + +async function publicGenKeyFunc(keyAlias: string, huksOptions: huks.HuksOptions) { + console.info(`enter promise generatekeyItem`); + let throwObject: throwObject = { isThrow: false }; + try { + await generateKeyItem(keyAlias, huksOptions, throwObject) + .then((data) => { + console.info(`promise: generateKeyItem success, data = ${JSON.stringify(data)}`); + }) + .catch((error: Error) => { + if (throwObject.isThrow) { + throw (error as Error); + } else { + console.error(`promise: generateKeyItem failed, ` + JSON.stringify(error)); + } + }); + } catch (error) { + console.error(`promise: generateKeyItem input arg invlaid ` + JSON.stringify(error)) + } +}; + +function encodeUtf8(s: string): number[] { + const encoder = new util.TextEncoder(); + const dest = new Uint8Array(s.length * 4); + const result = encoder.encodeIntoUint8Array(s, dest); + const encodedBytes = dest.subarray(0, result.written); + return Array.from(encodedBytes); +} + +function stringToUint8Array(str: string): Uint8Array { + const utf8Bytes = new Uint8Array(encodeUtf8(str)); + return utf8Bytes; +} + +async function SignFinish(handle: number, authToken: Uint8Array, plaintext: string): Promise { + let signProperties = GetEccSignProperties(); + let options: huks.HuksOptions = { + properties: signProperties, + inData: stringToUint8Array(plaintext) + } + console.log("====inData====" + options.inData); + console.error("AAA finish 开始" + handle, options, authToken); + try { + let data = await huks.finishSession(handle, options, authToken); + let signature = data.outData as Uint8Array; + console.log('Sign Finish Success! Result: ' + JSON.stringify(data)); + return signature + } catch (error) { + console.error('Sign Finish Exception ' + JSON.stringify(error)); + throw new Error('Sign Finish Exception ' + (error as BusinessError).message); + } +} + +async function Verify(indata: string, signature: Uint8Array) { + let indataArray = stringToUint8Array(indata) + console.log('indata size = ' + indataArray.length + ' signature size = ' + signature.length); + let appendInfo = signature.subarray(0, 41); + let newSignature = signature.subarray(41); + + let newIndata = new Uint8Array(appendInfo.length + indataArray.length); + newIndata.set(appendInfo, 0); + newIndata.set(indataArray, appendInfo.length); + let verifyProperties = GetEccVerifyProperties(); + let options: huks.HuksOptions = { + properties: verifyProperties, + inData: signature + } + await huks.initSession(keyAlias, options).then((data) => { + handle = data.handle; + console.log('Verify Init Success! Result: ' + JSON.stringify(data)) + }).catch((err: Error) => { + console.log('Init err: ' + JSON.stringify(err)); + }) + + console.log('Verify Update Begin' + JSON.stringify(options) + 'handel' + JSON.stringify(handle)); + options.inData = newIndata; + await huks.updateSession(handle, options).then(() => { + console.log('Verify Update Begin(infunction)' + JSON.stringify(options.inData)); + }).catch((err: Error) => { + console.log('Verify update err: ' + JSON.stringify(err)); + }) + + console.log('Verify Finish Begin' + JSON.stringify(options)); + console.log('Verify Finish SIG' + JSON.stringify(signature)); + options.inData = newSignature; + await huks.finishSession(handle, options).then(() => { + console.log('Verify Finisht Success! Result:' + JSON.stringify(options.inData)); + }).catch((err: Error) => { + console.log('Verify finish err: ' + JSON.stringify(err)); + }); +}; + +class TrustedAuth { + bigIntToUint8Array(value: bigint): Uint8Array { + if (value < 0n) { + throw new Error("only non-negative bigint values are supported"); + } + + if (value === 0n) { + return new Uint8Array([0]); + } + + const hex = value.toString(16); + const len = hex.length % 2 === 0 ? hex.length / 2 : (hex.length + 1) / 2; + const array = new Uint8Array(len); + for (let i = 0; i < len; i++) { + const offset = i * 2; + const byteStr = hex.slice(offset, offset + 2) || '00'; + array[i] = parseInt(byteStr, 16); + } + return array; + } + + uint8ArrayToBigInt(bytes: Uint8Array): bigint { + let hex = ''; + for (const byte of bytes) { + hex += byte.toString(16).padStart(2, '0'); + } + return BigInt('0x' + hex); + } + + async bindFaceID(handle: number, authToken: Uint8Array, inputdata: string): Promise { + let signature = await SignFinish(handle, authToken, inputdata); + await Verify(inputdata, signature); + let appendInfo = signature.subarray(0, 42); + let credentialId = appendInfo.subarray(8, 40); + let checkHash = appendInfo.subarray(40, 41); + let authType = appendInfo.subarray(4, 8); + console.log('credentialId', credentialId); + console.log('checkHash', checkHash); + console.log('authType', authType); + await AssetUtils.AddDataToAssetStore(credentialId, 'face_credentialID', 'face_credential_label'); + } + + async ImportImage(): Promise { + try { + const context = getContext(this); + const resourceMgr: resourceManager.ResourceManager = context.resourceManager; + const fileData: Uint8Array = await resourceMgr.getRawFileContent('icon.png'); + + const firstTenElementsView = fileData.subarray(0, 20); + console.log('image size is ', fileData.buffer.byteLength); + console.log('image subarray is ', firstTenElementsView); + return fileData.buffer; + } catch (error) { + console.error('Failed to load image', error); + throw new Error('Uable to import image:' + (error as BusinessError).message); + } + } + + async PwdVerify(challenge: Uint8Array, assetName: string): Promise { + try { + let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); + let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const buffer: ArrayBuffer = await this.ImportImage(); + const label: trustedAuthentication.TUILable = { + image: buffer, + title: '数字盾密码验证' + } + const result = await trustedAuthentication.trustedAuthentication(challenge, credentialID, label); + console.log('数字盾密码认证:', result.authToken.length, result.authToken); + return result; + } catch (error) { + console.error('数字盾密码认证:', error); + throw new Error('数字盾密码认证失败:' + (error as BusinessError).message); + } + } + + async setPwdMix(challenge: Uint8Array, assetName: string): Promise { + try { + const passwordInfo: trustedAuthentication.PasswordInfo = { + pwdType: trustedAuthentication.PasswordType.PASSWORD_TYPE_MIXED, + pwdMaxLength: 10, + pwdMinLength: 6, + maxAuthFailCount: 6 + }; + const buffer: ArrayBuffer = await this.ImportImage(); + const label: trustedAuthentication.TUILable = { + image: buffer, + title: '开通数字盾' + } + const authInfo = await trustedAuthentication.enableTrustedAuthentication(challenge, passwordInfo, label); + let assetLabel = assetName + 'label'; + await AssetUtils.AddDataToAssetStore(this.bigIntToUint8Array(authInfo.authID), assetName, assetLabel); + console.log('开通数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + return authInfo; + } catch (error) { + console.error('开通数字盾失败:', error); + throw new Error('开通数字盾失败:' + (error as BusinessError).message); + } + } + + async SetPwd(challenge: Uint8Array, assetName: string): Promise { + try { + const passwordInfo: trustedAuthentication.PasswordInfo = { + pwdType: trustedAuthentication.PasswordType.PASSWORD_TYPE_DIGITAL, + pwdMaxLength: 10, + pwdMinLength: 6, + maxAuthFailCount: 6 + }; + const buffer: ArrayBuffer = await this.ImportImage(); + const label: trustedAuthentication.TUILable = { + image: buffer, + title: '开通数字盾' + } + const authInfo = await trustedAuthentication.enableTrustedAuthentication(challenge, passwordInfo, label); + let assetLabel = assetName + 'label'; + await AssetUtils.AddDataToAssetStore(this.bigIntToUint8Array(authInfo.authID), assetName, assetLabel); + console.log('开通数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + return authInfo; + } catch (error) { + console.error('开通数字盾失败:', error); + throw new Error('开通数字盾失败:' + (error as BusinessError).message); + } + } + + async ModifyPwd(challenge: Uint8Array, assetName: string): Promise { + try { + const passwordInfo: trustedAuthentication.PasswordInfo = { + pwdType: trustedAuthentication.PasswordType.PASSWORD_TYPE_DIGITAL, + pwdMaxLength: 10, + pwdMinLength: 6, + maxAuthFailCount: 6 + }; + let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); + let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const buffer: ArrayBuffer = await this.ImportImage(); + const label: trustedAuthentication.TUILable = { + image: buffer, + title: '修改金融盾' + } + const authInfo = + await trustedAuthentication.modifyTrustedAuthenticationPwd(challenge, passwordInfo, credentialID, label); + console.log('修改数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + return authInfo; + } catch (error) { + console.error('密码修改失败:', error); + throw new Error('密码修改失败:' + (error as BusinessError).message); + } + } + + async DisablePwd(challenge: Uint8Array, assetName: string): Promise { + try { + let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); + let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const buffer: ArrayBuffer = await this.ImportImage(); + const label: trustedAuthentication.TUILable = { + image: buffer, + title: '关闭金融盾' + } + const authInfo = await trustedAuthentication.disableTrustedAuthentication(challenge, true, credentialID, label); + AssetUtils.DeleteDataFromAssetStore('pin_label1'); + AssetUtils.DeleteDataFromAssetStore('credentialID'); + AssetUtils.DeleteDataFromAssetStore('face_credentialID'); + AssetUtils.DeleteDataFromAssetStore('finger+credentialID'); + console.log('关闭数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + return authInfo; + } catch (error) { + console.error('关闭数字盾失败:', error); + throw new Error('关闭数字盾失败:' + (error as BusinessError).message); + } + } + + async disablePwdWithoutAuth(challenge: Uint8Array, assetName: string): Promise { + try { + let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); + let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + let emptyBuffer = new ArrayBuffer(0); + const label: trustedAuthentication.TUILable = { + image: emptyBuffer, + title: '' + } + const authInfo = await trustedAuthentication.disableTrustedAuthentication(challenge, false, credentialID, label); + AssetUtils.DeleteDataFromAssetStore('pin_label1'); + AssetUtils.DeleteDataFromAssetStore('credentialID'); + AssetUtils.DeleteDataFromAssetStore('face_credentialID'); + AssetUtils.DeleteDataFromAssetStore('finger+credentialID'); + console.log('关闭数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + return authInfo.authToken; + } catch (error) { + console.error('关闭数字盾失败:', error); + throw new Error('关闭数字盾失败:' + (error as BusinessError).message); + } + } + + async FaceAuthContent(challenge: Uint8Array, assetName: string): Promise { + try { + let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); + let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const reqParams: trustedAuthentication.AuthReqParams = { + reqType: trustedAuthentication.AuthType.AUTH_TYPE_FACE, + authContent: ["challenge:123456|0", "用户:张家龙|1", "账号:123456|1", "交易金额: 10000000|2", + "交易时间:2025-0605|2"] + } + const buffer: ArrayBuffer = await this.ImportImage(); + const label: trustedAuthentication.TUILable = { + image: buffer, + title: '人脸交易认证' + } + const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); + console.log('人脸交易认证:', result.authToken); + return result; + } catch (error) { + console.error('人脸交易认证失败:', error); + throw new Error('人脸交易认证失败:' + (error as BusinessError).message); + } + } + + async FingerPrintAuthContent(challenge: Uint8Array, assetName: string): Promise{ + try { + let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); + let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const reqParams: trustedAuthentication.AuthReqParams = { + reqType: trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT, + authContent: ["challenge:123456|0", "用户:张家龙|1", "账号:123456|1", "交易金额: 10000000|2", + "交易时间:2025-0605|2"] + } + const buffer: ArrayBuffer = await this.ImportImage(); + const label: trustedAuthentication.TUILable = { + image: buffer, + title: '指纹交易认证' + } + const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); + console.log('指纹交易认证:', result.authToken); + return result; + } catch (error) { + console.error('指纹交易认证失败:', error); + throw new Error('指纹交易认证失败:' + (error as BusinessError).message); + } + } + + async ContentVerifyByPwd(challenge: Uint8Array, assetName: string): Promise{ + try { + let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); + let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const reqParams: trustedAuthentication.AuthReqParams = { + reqType: trustedAuthentication.AuthType.AUTH_TYPE_TUI_PIN, + authContent: ["challenge:123456|0", "用户:张家龙|1", "账号:123456|1", "交易金额: 10000000|2", + "交易时间:2025-0605|2"] + } + const buffer: ArrayBuffer = await this.ImportImage(); + const label: trustedAuthentication.TUILable = { + image: buffer, + title: '密码交易认证' + } + const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); + console.log('密码交易认证:', result.authToken); + return result; + } catch (error) { + console.error('密码交易认证失败:', error); + throw new Error('密码交易认证失败:' + (error as BusinessError).message); + } + } + + async TestGenKeyForTuiPinSign(){ + let properties: Array = [{ + tag: huks.HuksTag.HUKS_TAG_ALGORITHM, + value: huks.HuksKeyAlg.HUKS_ALG_ECC + },{ + tag: huks.HuksTag.HUKS_TAG_PURPOSE, + value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY + },{ + tag: huks.HuksTag.HUKS_TAG_ALGORITHM, + value: huks.HuksKeyAlg.HUKS_ALG_ECC + },{ + tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, + value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 + },{ + tag: huks.HuksTag.HUKS_TAG_DIGEST, + value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 + }, { + tag: huks.HuksTag.HUKS_TAG_KEY_AUTH_PURPOSE, + value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN + },{ + tag: huks.HuksTag.HUKS_TAG_USER_AUTH_TYPE, + value: huks.HuksUserAuthType.HUKS_USER_AUTH_TYPE_PIN | huks.HuksUserAuthType.HUKS_USER_AUTH_TYPE_FINGERPRINT | + huks.HuksUserAuthType.HUKS_USER_AUTH_TYPE_FACE + },{ + tag: huks.HuksTag.HUKS_TAG_KEY_AUTH_ACCESS_TYPE, + value: huks.HuksAuthAccessType.HUKS_AUTH_ACCESS_ALWAYS_VALID + },{ + tag: huks.HuksTag.HUKS_TAG_CHALLENGE_TYPE, + value: huks.HuksChallengeType.HUKS_CHALLENGE_TYPE_NORMAL + }]; + let huksOptions: huks.HuksOptions = { + properties: properties, + inData: new Uint8Array(new Array()) + } + await publicGenKeyFunc(keyAlias,huksOptions); + }; + + async SignInit(): Promise{ + let signProperties = GetEccSignProperties(); + let options: huks.HuksOptions = { + properties: signProperties, + inData: new Uint8Array + } + + let result = await huks.initSession(keyAlias, options); + handle = result.handle; + challenge = result.challenge as Uint8Array + console.error('initSession complete' + handle + '----' + challenge); + return result; + } + + async disableTrustedBioAuthentication(assetName: string, authType: number): Promise{ + try{ + let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); + let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + await trustedAuthentication.disableTrustedBioAuthentication(credentialID, authType); + console.log('解绑成功'); + } catch (error) { + console.error('解绑失败', JSON.stringify(error)); + throw new Error('解绑失败' + (error as BusinessError).message); + } + } + + async HuksSignAndVerify(session: huks.HuksSessionHandle, authToken: Uint8Array): Promise{ + let inputdata = "challenge:123456|0, \n用户:张家龙|1, \n账号:123456|1, \n交易金额: 10000000|2, \n交易时间:2025-0605|2"; + try{ + let signature = await SignFinish(session.handle, authToken, inputdata); + Verify(inputdata, signature); + console.log('IAM auth on success'); + } catch (error) { + console.error('IAM auth catch error', JSON.stringify(error)); + throw new Error('拉起IAM控件失败' + (error as BusinessError).message); + } + } + + async UserAuthTUIPINBeforeSign(indata: string, session: huks.HuksSessionHandle, authType:number, label: string) : Promise{ + let challenge: Uint8Array = session.challenge as Uint8Array; + let tempAuthToken: trustedAuthentication.AuthToken; + if(authType === TUI_PIN_SET){ + console.log('============创建密码============'); + tempAuthToken = await this.SetPwd(challenge, label); + } else if(authType === TUI_PIN_MODIFY){ + console.log('============修改密码============'); + tempAuthToken = await this.ModifyPwd(challenge, label); + } else if(authType === TUI_PIN_DISABLE){ + console.log('============关闭数字盾============'); + tempAuthToken = await this.DisablePwd(challenge, label); + } else if(authType === TUI_PIN_SET_MIX){ + console.log('============创建密码============'); + tempAuthToken = await this.setPwdMix(challenge, label); + } else{ + console.log('============开始密码交易认证============'); + tempAuthToken = await this.ContentVerifyByPwd(challenge, label); + } + const TuiAuthToken: trustedAuthentication.AuthToken = tempAuthToken; + let authToken = TuiAuthToken.authToken; + let inputdata = "challenge:123456|0, \n用户:张家龙|1, \n账号:123456|1, \n交易金额: 10000000|2, \n交易时间:2025-0605|2"; + try { + SignFinish(session.handle,authToken, inputdata).then((data) =>{ + signature = data as Uint8Array; + Verify(inputdata, signature); + }); + console.log('HUKS -> IAM auth on success'); + }catch (error) { + console.error('HUKS -> IAM auth error', JSON.stringify(error)); + throw new Error('拉起IAM控件失败' + (error as BusinessError).message); + } + } + + async UserAuthBeforeSign(indata: string, session: huks.HuksSessionHandle, authType:number):Promise{ + let authTypeList: number[] = new Array(); + if(authType === TUI_BIND_FACE || authType === TUI_CONTENT_FACE_VERIFY){ + authTypeList[0] = userAuth.UserAuthType.FACE; + authTypeList[1] = userAuth.UserAuthType.FINGERPRINT; + } else{ + authTypeList[0] = userAuth.UserAuthType.FINGERPRINT; + authTypeList[1] = userAuth.UserAuthType.FACE; + } + const authParam: userAuth.AuthParam = { + challenge: session.challenge as Uint8Array, + authType: authTypeList, + authTrustLevel: userAuth.AuthTrustLevel.ATL4 + }; + const widgetParam: userAuth.WidgetParam ={ + title: '请输入密码', + navigationButtonText: '请输入盾密码' + }; + try { + console.log('auth start'); + const userAuthInstance = userAuth.getUserAuthInstance(authParam, widgetParam); + console.log('auth success'); + + return new Promise((resolve, reject) => { + userAuthInstance.on('result', { + onResult(result){ + authTokenData = result.token; + resolve(authTokenData); + } + }); + userAuthInstance.start(); + }); + }catch (error){ + console.error('HUKS -> IAM auth error', JSON.stringify(error)); + throw new Error('拉起IAM控件失败' + (error as BusinessError).message); + } + } + + async GetTUIAuthTokenBeforeBioVerify(session: huks.HuksSessionHandle, authType: number, assetName: string): Promise{ + let challenge: Uint8Array = session.challenge as Uint8Array; + let tempAuthToken: trustedAuthentication.AuthToken; + + try { + if(authType === TUI_BIND_FACE){ + try { + userAuth.getAvailableStatus(userAuth.UserAuthType.FACE,userAuth.AuthTrustLevel.ATL4); + console.info('current auth trustlevel supported'); + } catch (error) { + const err: BusinessError = error as BusinessError; + console.error(`current trust level not supported. Code is ${err?.code}, message is ${err?.message}`) + throw new Error((err as BusinessError).message) + } + try { + let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FACE); + console.info(`get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + } catch (error) { + console.error(`get current enrolled state failed, error = ${JSON.stringify(error)}`); + throw new Error('bind' + (error as BusinessError).message); + } + tempAuthToken = await this.PwdVerify(challenge, assetName); + }else if(authType === TUI_BIND_FINGERPRINT){ + try { + userAuth.getAvailableStatus(userAuth.UserAuthType.FINGERPRINT,userAuth.AuthTrustLevel.ATL3); + console.info('current auth trustlevel supported'); + } catch (error) { + const err: BusinessError = error as BusinessError; + console.error(`current trust level not supported. Code is ${err?.code}, message is ${err?.message}`) + throw new Error((err as BusinessError).message) + } + try { + let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FINGERPRINT); + console.info(`get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + } catch (error) { + console.error(`get current enrolled state failed, error = ${JSON.stringify(error)}`); + throw new Error('bind' + (error as BusinessError).message); + } + tempAuthToken = await this.PwdVerify(challenge, assetName); + } else if(authType === TUI_CONTENT_FACE_VERIFY){ + tempAuthToken = await this.FaceAuthContent(challenge, assetName); + }else if(authType === TUI_CONTENT_FINGERPRINT_VERTFY){ + tempAuthToken = await this.FingerPrintAuthContent(challenge, assetName); + } else{ + throw new Error(`invalid auth type; ${JSON.stringify(authType)}`); + } + return tempAuthToken.authToken; + }catch (error){ + const err: BusinessError = error as BusinessError; + console.error(`get TUI Authtoken failed. Code is ${err?.code}, message is ${err?.message}`) + throw new Error((err as BusinessError).message) + } + } +} + +export default new TrustedAuth(); + diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000..89704c1 --- /dev/null +++ b/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,378 @@ +/* +* Copyright (c) 2025 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import { trustedAppService } from '@kit.DeviceSecurityKit'; +import { trustedAuthentication } from '@kit.DeviceSecurityKit'; +import TrustedAuth from '../model/TrustedAuthentication'; +import createOptions from '../Common/TrustedServiceOption'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +import { PromptAction } from '@kit.ArkUI'; + +const TUI_PIN_MODIFY = 2 +const TUI_PIN_DISABLE = 3 +const TUI_BIND_FACE = 7 +const TUI_BIND_FINGERPRINT = 8 + +@Entry +@Component +struct Index { + @State message: string = ''; + @Provide hasShield: boolean = false; + @State faceBind: boolean = false; + @State fingerprintBind: boolean = false; + pageInfos: NavPathStack = new NavPathStack(); + uiContext: UIContext = this.getUIContext(); + promptAction: PromptAction = this.uiContext.getPromptAction(); + + async createAttestKey(): Promise { + trustedAppService.createAttestKey(createOptions) + .then(() => { + this.message += '\n\n 创建证明密钥成功'; + }) + .catch((err: BusinessError) => { + this.message += '\n\n 创建证明密钥失败: ' + err.message; + }); + } + + aboutToAppear(): void { + const bytes = [0x00, 0x00, 0x00, 0x80, 0x80, 0xd2, 0x41, 0x40]; + const buffer = new ArrayBuffer(bytes.length); + const uint8View = new Uint8Array(buffer); + for (let i = 0; i < bytes.length; i++) { + uint8View[i] = bytes[i]; + } + const dataView = new DataView(buffer); + const doubleValue = dataView.getFloat64(0, true); + this.message += `result = ${doubleValue.toString()}\n`; + let v = 40.054015247234702; + this.message += `result = ${v.toFixed(15)}\n`; + } + + build() { + Navigation(this.pageInfos) { + NavDestination() { + Column() { + Column() { + Text('身份认证设置') + .width('100%') + .fontSize(500) + .fontSize(14) + .textAlign(TextAlign.Start) + .margin({ top: 28, bottom: 8 }) + } + .width('calc(100% - 56vp)') + .margin({ + left: 28, + right: 28 + }) + + Row() { + Text('数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + if (this.hasShield) { + Button('修改密码') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_PIN_MODIFY, "pin_label1"); + this.message += `修改数字盾密码成功`; + } catch (error) { + console.error('修改数字盾密码失败:', error); + this.message += `\n\n修改数字盾密码失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } else { + Button(' 开通 ') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(() => { + this.pageInfos.pushPath({ name: "PageOne" }) + }) + } + } + .width('calc(100% - 32vp)') + .height(56) + .backgroundColor(Color.White) + .borderRadius(16) + .margin({ + left: 16, + right: 16 + }) + + if (this.hasShield) { + Column() { + Text('关闭数字盾') + .width('100%') + .fontSize(500) + .fontSize(14) + .textAlign(TextAlign.Start) + .margin({ top: 28, bottom: 8 }) + } + .width('calc(100% - 56vp)') + .margin({ + left: 28, + right: 28 + }) + + Column() { + Row() { + Text('需认证关闭数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('关闭') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_PIN_DISABLE, "pin_label1"); + this.message += `关闭数字盾成功`; + this.hasShield = false; + this.fingerprintBind = false; + this.faceBind = false; + } catch (error) { + console.error('n关闭数字盾失败:', error); + this.message += `\n\n关闭数字盾失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } + .width('100%') + .height(56) + + Divider().width('93%') + Row() { + Text('无需认证关闭数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('关闭') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + const rand = cryptoFramework.createRandom(); + const len: number = 32; + const challenge: Uint8Array = rand?.generateRandomSync(len)?.data; + const authToken = await TrustedAuth.disablePwdWithoutAuth(challenge, "pin_label1"); + console.log('关闭数字盾成功:', authToken); + this.message += `关闭数字盾成功`; + this.hasShield = false; + this.fingerprintBind = false; + this.faceBind = false; + } catch (error) { + console.error('n关闭数字盾失败:', error); + this.message += `\n\n关闭数字盾失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } + .width('100%') + .height(56) + } + .width('calc(100% - 32vp)') + .height(112) + .backgroundColor(Color.White) + .borderRadius(16) + .margin({ + left: 16, + right: 16 + }) + + Column() { + Text('生物特征认证方式') + .width('100%') + .fontSize(500) + .fontSize(14) + .textAlign(TextAlign.Start) + .margin({ top: 28, bottom: 8 }) + } + .width('calc(100% - 56vp)') + .margin({ + left: 28, + right: 28 + }) + + Column() { + if (!this.fingerprintBind) { + Row() { + Text('指纹识别').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('绑定') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FINGERPRINT, + "pin_label1"); + let bioAuthToken: Uint8Array = + await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FINGERPRINT); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; + await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) + this.message += `指纹绑定成功`; + this.fingerprintBind = true; + } catch (error) { + console.error('n指纹绑定失败:', error); + this.message += `\n\n指纹绑定失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } + .width('100%') + .height(56) + } else { + Row() { + Text('指纹识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('解绑') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let authType = trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT; + await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); + this.message += `解绑指纹成功`; + this.fingerprintBind = false; + } catch (error) { + // 捕获错误并处理 + console.error('解绑指纹失败:', error); + this.message += `\n\n解绑指纹失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + }.width('100%') + .height(56) + } + Divider().width('93%') + if (!this.faceBind) { + Row() { + Text('人脸识别').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('绑定') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FACE, "pin_label1"); + let bioAuthToken: Uint8Array = + await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FACE); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; + await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) + this.message += `人脸绑定成功`; + this.faceBind = true; + } catch (error) { + console.error('n人脸绑定失败:', error); + this.message += `\n\n人脸绑定失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + }.width('100%') + .height(56) + } else { + Row() { + Text('人脸识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('解绑') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let authType = trustedAuthentication.AuthType.AUTH_TYPE_FACE; + await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); + this.message += `解绑人脸成功`; + this.faceBind = false; + } catch (error) { + // 捕获错误并处理 + console.error('检查失败:', error); + this.message += `\n\n解绑人脸失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + }.width('100%') + .height(56) + } + } + .width('calc(100% - 32vp)') + .height(112) + .backgroundColor(Color.White) + .borderRadius(16) + .margin({ + left: 16, + right: 16 + }) + } + Blank() + Button('去转账').width('calc(100% - 32vp)').onClick(() => { + this.pageInfos.pushPath({ name: "PageTwo" }) + }).margin({ bottom: 16 }) + } + .width('100%') + .height('100%') + } + .title('金融数字盾') + .hideBackButton(true) + .backgroundColor('#F1F3F5') + } + .hideToolBar(true) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/PageOne.ets b/entry/src/main/ets/pages/PageOne.ets new file mode 100644 index 0000000..da44a48 --- /dev/null +++ b/entry/src/main/ets/pages/PageOne.ets @@ -0,0 +1,94 @@ +import TrustedAuth from '../model/TrustedAuthentication'; +import { PromptAction } from '@kit.ArkUI'; + +const TUI_PIN_SET = 1 +const TUI_PIN_SET_MIX = 9 + + + +@Builder +export function PageOneBuilder(name: string, param: Object) { + PageOne() +} + +@Component +export struct PageOne { + @State onlyNum: boolean = true; + @State message: string = ''; + @State type: number = 0; + @Consume hasShield:boolean; + uiContext: UIContext = this.getUIContext(); + promptAction: PromptAction = this.uiContext.getPromptAction(); + pageInfos: NavPathStack = new NavPathStack(); + + build() { + NavDestination() { + Column(){ + Column(){ + Text('请设定数字盾的验证方式').width('100%').fontSize(500).fontSize(14).textAlign(TextAlign.Start).margin({top: 28, bottom: 8}) + } + .width('calc(100% - 56vp)') + .margin({ + left: 28, + right: 28 + }) + Row(){ + Checkbox().margin({left:18}).select(this.onlyNum!!) + Text('数字密码').textAlign(TextAlign.Start).margin({left: 8}) + } + .width(328) + .height(56) + .backgroundColor(Color.White) + .borderRadius(16) + .margin({ + left: 16, + right: 16 + }).margin({ bottom: 6 }) + Row(){ + Checkbox().margin({left:18}).select(!this.onlyNum).onClick(() => { + this.onlyNum = !this.onlyNum + }) + Text('数字+英文组合密码').textAlign(TextAlign.Start).margin({left: 8}) + } + .width(328) + .height(56) + .backgroundColor(Color.White) + .borderRadius(16) + .margin({ + left: 16, + right: 16 + }) + Blank() + Button('立即开通').width('calc(100% - 32vp)').onClick(async () => { + this.message = ''; + if(this.onlyNum){ + this.type = TUI_PIN_SET; + } + else{ + this.type = TUI_PIN_SET_MIX; + } + try { + await TrustedAuth.TestGenKeyForTuiPinSign(); + console.log('生成密钥成功'); + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, this.type, 'pin_label1'); + this.message += `开通数字盾成功`; + this.hasShield = true; + } catch (error) { + // 捕获错误并处理 + console.error('检查失败:', error); + this.message += `\n\n开通数字盾失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }).margin({bottom: 16}) + }.width('100%').height('100%') + } + .title('数字盾') + .backgroundColor('#F1F3F5') + } +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/PageTwo.ets b/entry/src/main/ets/pages/PageTwo.ets new file mode 100644 index 0000000..e9cd576 --- /dev/null +++ b/entry/src/main/ets/pages/PageTwo.ets @@ -0,0 +1,147 @@ +import TrustedAuth from '../model/TrustedAuthentication'; +import { PromptAction } from "@kit.ArkUI"; +import { trustedAuthentication } from '@kit.DeviceSecurityKit'; + +const TUI_CONTENT_PWD_VERIFY = 4 +const TUI_CONTENT_FACE_VERIFY = 5 +const TUI_CONTENT_FINGERPRINT_VERIFY = 6 + +@Builder +export function PageTwoBuilder(name: string, param: Object) { + PageTwo() +} + +@Builder +export function BindSheetBuilder(name: string, param: Object) { + BindSheetTemp() +} + +@Component +export struct BindSheetTemp { + @State message: string = ''; + @Consume receiver: string; + @Consume receiveAccount: string; + @Consume tradingAmount: string; + uiContext: UIContext = this.getUIContext(); + promptAction: PromptAction = this.uiContext.getPromptAction(); + build() { + Column({ space: 12 }){ + Button('密码交易认证').width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = this.receiver + '/' + this.receiveAccount + '/' + this.tradingAmount; + await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_CONTENT_PWD_VERIFY, "pin_label1"); + this.message += `密码交易认证成功`; + } catch (error) { + console.error('n密码交易认证失败:', error); + this.message += `\n\n密码交易认证失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + Button('指纹交易认证').width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FINGERPRINT_VERIFY, "pin_label1"); + let bioAuthToken: Uint8Array = await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_CONTENT_FINGERPRINT_VERIFY); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) + this.message += `指纹交易认证成功`; + } catch (error) { + console.error('n指纹交易认证失败:', error); + this.message += `\n\n指纹交易认证失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + Button('人脸交易认证').width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FACE_VERIFY, "pin_label1"); + let bioAuthToken: Uint8Array = await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_CONTENT_FACE_VERIFY); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) + this.message += `人脸交易认证成功`; + } catch (error) { + console.error('n人脸交易认证失败:', error); + this.message += `\n\n人脸交易认证失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + }.margin({top: 24, bottom: 24}) + } +} + +@Component +export struct PageTwo { + @State onlyNum: boolean = true; + @Provide receiver: string = ''; + @Provide receiveAccount: string = ''; + @Provide tradingAmount: string = ''; + @State bindSheetShow: boolean = false; + pageInfos: NavPathStack = new NavPathStack(); + sheetTitleOption: SheetTitleOptions = {title: '选择认证方式'} + sheetOption: SheetOptions = {height: SheetSize.FIT_CONTENT, title: this.sheetTitleOption} + + build() { + NavDestination() { + Column(){ + Column(){ + Blank().height('2%') + Row(){ + Text('收款人').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({left:12}) + TextArea({placeholder:'张某某', text: this.receiver}).width('75%').fontSize(16).backgroundColor(Color.White) + }.width('100%').height('32%') + Divider().width('93%') + Row(){ + Text('收款账号').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({left:12}) + TextArea({placeholder:'6666 1234 **** **** 888', text: this.receiveAccount}).width('75%').fontSize(16).backgroundColor(Color.White) + }.width('100%').height('32%') + Divider().width('93%') + Row(){ + Text('交易金额').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({left:12}) + TextArea({placeholder:'0.0', text: this.tradingAmount}).width('75%').fontSize(16).backgroundColor(Color.White) + }.width('100%').height('32%') + Blank().height('2%') + } + .width('calc(100% - 32vp)') + .height('30%') + .backgroundColor(Color.White) + .borderRadius(16) + .margin({ + left: 16, + right: 16, + top: 8, + bottom: 24 + }) + Button('下一步').width('calc(100% - 32vp)') + .onClick(() => { + this.bindSheetShow = true;}) + .bindSheet(this.bindSheetShow!!, BindSheetBuilder('',''), this.sheetOption); + } + } + .title('银行卡转账') + .backgroundColor('#F1F3F5') + } +} \ No newline at end of file diff --git a/entry/src/main/module.json5 b/entry/src/main/module.json5 new file mode 100644 index 0000000..51bfbb5 --- /dev/null +++ b/entry/src/main/module.json5 @@ -0,0 +1,63 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "routerMap": "$profile:router_map", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "extensionAbilities": [ + { + "name": "EntryBackupAbility", + "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ] + } + ], + "requestPermissions": [ + { + "name": "ohos.permission.ACCESS_BIOMETRIC", + "reason": "$string:reason", + "usedScene": { + "abilities": [ + "EntryAbility" + ], + "when": "inuse" + } + } + ] + } +} \ No newline at end of file diff --git a/entry/src/main/resources/base/element/color.json b/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000..3c71296 --- /dev/null +++ b/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/base/element/float.json b/entry/src/main/resources/base/element/float.json new file mode 100644 index 0000000..a0a93dd --- /dev/null +++ b/entry/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000..250ee11 --- /dev/null +++ b/entry/src/main/resources/base/element/string.json @@ -0,0 +1,20 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + }, + { + "name": "reason", + "value": "申请必要权限" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/base/media/background.png b/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f GIT binary patch literal 91942 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/entry/src/main/resources/base/profile/backup_config.json b/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000..78f40ae --- /dev/null +++ b/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000..55c3f00 --- /dev/null +++ b/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/base/profile/router_map.json b/entry/src/main/resources/base/profile/router_map.json new file mode 100644 index 0000000..5767a4e --- /dev/null +++ b/entry/src/main/resources/base/profile/router_map.json @@ -0,0 +1,20 @@ +{ + "routerMap": [ + { + "name": "PageOne", + "pageSourceFile": "src/main/ets/pages/PageOne.ets", + "buildFunction": "PageOneBuilder", + "data": { + "description": "this is pageOne" + } + }, + { + "name": "PageTwo", + "pageSourceFile": "src/main/ets/pages/PageTwo.ets", + "buildFunction": "PageTwoBuilder", + "data": { + "description": "this is pageTwo" + } + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/dark/element/color.json b/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000..79b11c2 --- /dev/null +++ b/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/entry/src/mock/mock-config.json5 b/entry/src/mock/mock-config.json5 new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/entry/src/mock/mock-config.json5 @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/entry/src/ohosTest/ets/test/Ability.test.ets b/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000..85c78f6 --- /dev/null +++ b/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,35 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/entry/src/ohosTest/ets/test/List.test.ets b/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000..794c7dc --- /dev/null +++ b/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,5 @@ +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/entry/src/ohosTest/module.json5 b/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000..509a3a2 --- /dev/null +++ b/entry/src/ohosTest/module.json5 @@ -0,0 +1,11 @@ +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "phone" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/entry/src/test/List.test.ets b/entry/src/test/List.test.ets new file mode 100644 index 0000000..bb5b5c3 --- /dev/null +++ b/entry/src/test/List.test.ets @@ -0,0 +1,5 @@ +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/entry/src/test/LocalUnit.test.ets b/entry/src/test/LocalUnit.test.ets new file mode 100644 index 0000000..165fc16 --- /dev/null +++ b/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,33 @@ +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/hvigor/hvigor-config.json5 b/hvigor/hvigor-config.json5 new file mode 100644 index 0000000..5bebc97 --- /dev/null +++ b/hvigor/hvigor-config.json5 @@ -0,0 +1,22 @@ +{ + "modelVersion": "5.0.5", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/hvigorfile.ts b/hvigorfile.ts new file mode 100644 index 0000000..f3cb9f1 --- /dev/null +++ b/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/oh-package-lock.json5 b/oh-package-lock.json5 new file mode 100644 index 0000000..7fcf818 --- /dev/null +++ b/oh-package-lock.json5 @@ -0,0 +1,27 @@ +{ + "meta": { + "stableOrder": true + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "@ohos/hamock@1.0.0": "@ohos/hamock@1.0.0", + "@ohos/hypium@1.0.21": "@ohos/hypium@1.0.21" + }, + "packages": { + "@ohos/hamock@1.0.0": { + "name": "@ohos/hamock", + "version": "1.0.0", + "integrity": "sha512-K6lDPYc6VkKe6ZBNQa9aoG+ZZMiwqfcR/7yAVFSUGIuOAhPvCJAo9+t1fZnpe0dBRBPxj2bxPPbKh69VuyAtDg==", + "resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/hamock/-/hamock-1.0.0.har", + "registryType": "ohpm" + }, + "@ohos/hypium@1.0.21": { + "name": "@ohos/hypium", + "version": "1.0.21", + "integrity": "sha512-iyKGMXxE+9PpCkqEwu0VykN/7hNpb+QOeIuHwkmZnxOpI+dFZt6yhPB7k89EgV1MiSK/ieV/hMjr5Z2mWwRfMQ==", + "resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/hypium/-/hypium-1.0.21.har", + "registryType": "ohpm" + } + } +} \ No newline at end of file diff --git a/oh-package.json5 b/oh-package.json5 new file mode 100644 index 0000000..a8aff0c --- /dev/null +++ b/oh-package.json5 @@ -0,0 +1,10 @@ +{ + "modelVersion": "5.0.5", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.21", + "@ohos/hamock": "1.0.0" + } +} -- Gitee From 8fed3021b8b9cbc2503015a3ac8fd2da9bc6abc0 Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Mon, 11 Aug 2025 21:04:28 +0800 Subject: [PATCH 02/16] Second commit --- build-profile.json5 | 3 +- .../main/ets/Common/TrustedServiceOption.ets | 19 +- .../main/ets/model/TrustedAuthentication.ets | 216 +++++----- entry/src/main/ets/pages/Index.ets | 358 +--------------- entry/src/main/ets/pages/MainPage.ets | 383 ++++++++++++++++++ entry/src/main/ets/pages/PageOne.ets | 125 ++++-- entry/src/main/ets/pages/PageTwo.ets | 170 ++++---- .../resources/base/profile/router_map.json | 8 + 8 files changed, 723 insertions(+), 559 deletions(-) create mode 100644 entry/src/main/ets/pages/MainPage.ets diff --git a/build-profile.json5 b/build-profile.json5 index 9e87e7e..531f096 100644 --- a/build-profile.json5 +++ b/build-profile.json5 @@ -5,8 +5,7 @@ { "name": "default", "signingConfig": "default", - "targetSdkVersion": "5.0.5(17)", - "compatibleSdkVersion": "5.0.5(17)", + "compatibleSdkVersion": "6.0.0(20)", "runtimeOS": "HarmonyOS", "buildOption": { "strictMode": { diff --git a/entry/src/main/ets/Common/TrustedServiceOption.ets b/entry/src/main/ets/Common/TrustedServiceOption.ets index 2713f6b..5e04dff 100644 --- a/entry/src/main/ets/Common/TrustedServiceOption.ets +++ b/entry/src/main/ets/Common/TrustedServiceOption.ets @@ -1,4 +1,19 @@ -import { trustedAppService } from '@kit.DeviceSecurityKit' +/* +* Copyright (c) 2025 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import { trustedAppService } from '@kit.DeviceSecurityKit'; const createProperties: Array = [ { @@ -18,4 +33,4 @@ const createOptions: trustedAppService.AttestOptions = { properties: createProperties }; -export default createOptions; +export default createOptions; \ No newline at end of file diff --git a/entry/src/main/ets/model/TrustedAuthentication.ets b/entry/src/main/ets/model/TrustedAuthentication.ets index 0e37dd2..4f13d70 100644 --- a/entry/src/main/ets/model/TrustedAuthentication.ets +++ b/entry/src/main/ets/model/TrustedAuthentication.ets @@ -1,20 +1,20 @@ -import { huks } from '@kit.UniversalKeystoreKit' -import { util } from '@kit.ArkTS' -import { BusinessError } from '@kit.BasicServicesKit' -import AssetUtils from '../Utils/AssetUtils' -import { resourceManager } from '@kit.LocalizationKit' -import { trustedAuthentication } from '@kit.DeviceSecurityKit' -import { userAuth } from '@kit.UserAuthenticationKit' - +import { resourceManager } from '@kit.LocalizationKit'; +import { huks } from '@kit.UniversalKeystoreKit'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { userAuth } from '@kit.UserAuthenticationKit'; +import { trustedAuthentication } from '@kit.DeviceSecurityKit'; +import { util } from '@kit.ArkTS'; +import AssetUtils from '../Utils/AssetUtils'; const TUI_PIN_SET = 1 const TUI_PIN_MODIFY = 2 const TUI_PIN_DISABLE = 3 const TUI_CONTENT_FACE_VERIFY = 5 -const TUI_CONTENT_FINGERPRINT_VERTFY = 6 +const TUI_CONTENT_FINGERPRINT_VERIFY = 6 const TUI_BIND_FACE = 7 const TUI_BIND_FINGERPRINT = 8 const TUI_PIN_SET_MIX = 9 +const TUI_PIN_MODIFY_MIX = 10 let keyAlias = 'test_sign_key_alias'; let handle: number; let challenge: Uint8Array; @@ -102,19 +102,6 @@ async function publicGenKeyFunc(keyAlias: string, huksOptions: huks.HuksOptions) } }; -function encodeUtf8(s: string): number[] { - const encoder = new util.TextEncoder(); - const dest = new Uint8Array(s.length * 4); - const result = encoder.encodeIntoUint8Array(s, dest); - const encodedBytes = dest.subarray(0, result.written); - return Array.from(encodedBytes); -} - -function stringToUint8Array(str: string): Uint8Array { - const utf8Bytes = new Uint8Array(encodeUtf8(str)); - return utf8Bytes; -} - async function SignFinish(handle: number, authToken: Uint8Array, plaintext: string): Promise { let signProperties = GetEccSignProperties(); let options: huks.HuksOptions = { @@ -134,6 +121,19 @@ async function SignFinish(handle: number, authToken: Uint8Array, plaintext: stri } } +function encodeUtf8(s: string): number[] { + const encoder = new util.TextEncoder(); + const dest = new Uint8Array(s.length * 4); + const result = encoder.encodeIntoUint8Array(s, dest); + const encodedBytes = dest.subarray(0, result.written); + return Array.from(encodedBytes); +} + +function stringToUint8Array(str: string): Uint8Array { + const utf8Bytes = new Uint8Array(encodeUtf8(str)); + return utf8Bytes; +} + async function Verify(indata: string, signature: Uint8Array) { let indataArray = stringToUint8Array(indata) console.log('indata size = ' + indataArray.length + ' signature size = ' + signature.length); @@ -152,7 +152,7 @@ async function Verify(indata: string, signature: Uint8Array) { handle = data.handle; console.log('Verify Init Success! Result: ' + JSON.stringify(data)) }).catch((err: Error) => { - console.log('Init err: ' + JSON.stringify(err)); + console.error('Init err: ' + JSON.stringify(err)); }) console.log('Verify Update Begin' + JSON.stringify(options) + 'handel' + JSON.stringify(handle)); @@ -206,13 +206,13 @@ class TrustedAuth { let signature = await SignFinish(handle, authToken, inputdata); await Verify(inputdata, signature); let appendInfo = signature.subarray(0, 42); - let credentialId = appendInfo.subarray(8, 40); + let credentialID = appendInfo.subarray(8, 40); let checkHash = appendInfo.subarray(40, 41); let authType = appendInfo.subarray(4, 8); - console.log('credentialId', credentialId); + console.log('credentialId', credentialID); console.log('checkHash', checkHash); console.log('authType', authType); - await AssetUtils.AddDataToAssetStore(credentialId, 'face_credentialID', 'face_credential_label'); + await AssetUtils.AddDataToAssetStore(credentialID, 'face_credentialID', 'face_credential_label'); } async ImportImage(): Promise { @@ -226,8 +226,8 @@ class TrustedAuth { console.log('image subarray is ', firstTenElementsView); return fileData.buffer; } catch (error) { - console.error('Failed to load image', error); - throw new Error('Uable to import image:' + (error as BusinessError).message); + console.error('Failed to load image:', error); + throw new Error('Unable to import image:' + (error as BusinessError).message); } } @@ -249,7 +249,7 @@ class TrustedAuth { } } - async setPwdMix(challenge: Uint8Array, assetName: string): Promise { + async SetPwdMix(challenge: Uint8Array, assetName: string): Promise { try { const passwordInfo: trustedAuthentication.PasswordInfo = { pwdType: trustedAuthentication.PasswordType.PASSWORD_TYPE_MIXED, @@ -297,6 +297,31 @@ class TrustedAuth { } } + async ModifyPwdMix(challenge: Uint8Array, assetName: string): Promise { + try { + const passwordInfo: trustedAuthentication.PasswordInfo = { + pwdType: trustedAuthentication.PasswordType.PASSWORD_TYPE_MIXED, + pwdMaxLength: 10, + pwdMinLength: 6, + maxAuthFailCount: 6 + }; + let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); + let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const buffer: ArrayBuffer = await this.ImportImage(); + const label: trustedAuthentication.TUILable = { + image: buffer, + title: '修改金融盾' + } + const authInfo = + await trustedAuthentication.modifyTrustedAuthenticationPwd(challenge, passwordInfo, credentialID, label); + console.log('修改数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + return authInfo; + } catch (error) { + console.error('密码修改失败:', error); + throw new Error('密码修改失败:' + (error as BusinessError).message); + } + } + async ModifyPwd(challenge: Uint8Array, assetName: string): Promise { try { const passwordInfo: trustedAuthentication.PasswordInfo = { @@ -335,7 +360,7 @@ class TrustedAuth { AssetUtils.DeleteDataFromAssetStore('pin_label1'); AssetUtils.DeleteDataFromAssetStore('credentialID'); AssetUtils.DeleteDataFromAssetStore('face_credentialID'); - AssetUtils.DeleteDataFromAssetStore('finger+credentialID'); + AssetUtils.DeleteDataFromAssetStore('finger_credentialID'); console.log('关闭数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); return authInfo; } catch (error) { @@ -351,7 +376,7 @@ class TrustedAuth { let emptyBuffer = new ArrayBuffer(0); const label: trustedAuthentication.TUILable = { image: emptyBuffer, - title: '' + title: "" } const authInfo = await trustedAuthentication.disableTrustedAuthentication(challenge, false, credentialID, label); AssetUtils.DeleteDataFromAssetStore('pin_label1'); @@ -368,14 +393,16 @@ class TrustedAuth { async FaceAuthContent(challenge: Uint8Array, assetName: string): Promise { try { + let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FACE); + console.info(`get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const buffer: ArrayBuffer = await this.ImportImage(); const reqParams: trustedAuthentication.AuthReqParams = { reqType: trustedAuthentication.AuthType.AUTH_TYPE_FACE, authContent: ["challenge:123456|0", "用户:张家龙|1", "账号:123456|1", "交易金额: 10000000|2", "交易时间:2025-0605|2"] } - const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, title: '人脸交易认证' @@ -389,16 +416,18 @@ class TrustedAuth { } } - async FingerPrintAuthContent(challenge: Uint8Array, assetName: string): Promise{ + async FingerPrintAuthContent(challenge: Uint8Array, assetName: string): Promise { try { + let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FINGERPRINT); + console.info(`get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const buffer: ArrayBuffer = await this.ImportImage(); const reqParams: trustedAuthentication.AuthReqParams = { reqType: trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT, authContent: ["challenge:123456|0", "用户:张家龙|1", "账号:123456|1", "交易金额: 10000000|2", "交易时间:2025-0605|2"] } - const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, title: '指纹交易认证' @@ -412,16 +441,16 @@ class TrustedAuth { } } - async ContentVerifyByPwd(challenge: Uint8Array, assetName: string): Promise{ + async ContentVerifyByPwd(challenge: Uint8Array, assetName: string): Promise { try { let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const buffer: ArrayBuffer = await this.ImportImage(); const reqParams: trustedAuthentication.AuthReqParams = { reqType: trustedAuthentication.AuthType.AUTH_TYPE_TUI_PIN, authContent: ["challenge:123456|0", "用户:张家龙|1", "账号:123456|1", "交易金额: 10000000|2", "交易时间:2025-0605|2"] } - const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, title: '密码交易认证' @@ -435,33 +464,30 @@ class TrustedAuth { } } - async TestGenKeyForTuiPinSign(){ + async TestGenKeyForTuiPinSign() { let properties: Array = [{ tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_ECC - },{ + }, { tag: huks.HuksTag.HUKS_TAG_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY - },{ - tag: huks.HuksTag.HUKS_TAG_ALGORITHM, - value: huks.HuksKeyAlg.HUKS_ALG_ECC - },{ + }, { tag: huks.HuksTag.HUKS_TAG_KEY_SIZE, value: huks.HuksKeySize.HUKS_AES_KEY_SIZE_256 - },{ + }, { tag: huks.HuksTag.HUKS_TAG_DIGEST, value: huks.HuksKeyDigest.HUKS_DIGEST_SHA256 }, { tag: huks.HuksTag.HUKS_TAG_KEY_AUTH_PURPOSE, value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN - },{ + }, { tag: huks.HuksTag.HUKS_TAG_USER_AUTH_TYPE, value: huks.HuksUserAuthType.HUKS_USER_AUTH_TYPE_PIN | huks.HuksUserAuthType.HUKS_USER_AUTH_TYPE_FINGERPRINT | huks.HuksUserAuthType.HUKS_USER_AUTH_TYPE_FACE - },{ + }, { tag: huks.HuksTag.HUKS_TAG_KEY_AUTH_ACCESS_TYPE, value: huks.HuksAuthAccessType.HUKS_AUTH_ACCESS_ALWAYS_VALID - },{ + }, { tag: huks.HuksTag.HUKS_TAG_CHALLENGE_TYPE, value: huks.HuksChallengeType.HUKS_CHALLENGE_TYPE_NORMAL }]; @@ -469,10 +495,10 @@ class TrustedAuth { properties: properties, inData: new Uint8Array(new Array()) } - await publicGenKeyFunc(keyAlias,huksOptions); + await publicGenKeyFunc(keyAlias, huksOptions); }; - async SignInit(): Promise{ + async SignInit(): Promise { let signProperties = GetEccSignProperties(); let options: huks.HuksOptions = { properties: signProperties, @@ -486,8 +512,8 @@ class TrustedAuth { return result; } - async disableTrustedBioAuthentication(assetName: string, authType: number): Promise{ - try{ + async disableTrustedBioAuthentication(assetName: string, authType: number): Promise { + try { let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); await trustedAuthentication.disableTrustedBioAuthentication(credentialID, authType); @@ -498,11 +524,11 @@ class TrustedAuth { } } - async HuksSignAndVerify(session: huks.HuksSessionHandle, authToken: Uint8Array): Promise{ - let inputdata = "challenge:123456|0, \n用户:张家龙|1, \n账号:123456|1, \n交易金额: 10000000|2, \n交易时间:2025-0605|2"; - try{ + async HuksSignAndVerify(session: huks.HuksSessionHandle, authToken: Uint8Array): Promise { + let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额: 10000000|2\n交易时间:2025-0605|2"; + try { let signature = await SignFinish(session.handle, authToken, inputdata); - Verify(inputdata, signature); + console.log('IAM auth on success'); } catch (error) { console.error('IAM auth catch error', JSON.stringify(error)); @@ -510,57 +536,59 @@ class TrustedAuth { } } - async UserAuthTUIPINBeforeSign(indata: string, session: huks.HuksSessionHandle, authType:number, label: string) : Promise{ + async UserAuthTUIPINBeforeSign(indata: string, session: huks.HuksSessionHandle, authType: number, + label: string): Promise { let challenge: Uint8Array = session.challenge as Uint8Array; let tempAuthToken: trustedAuthentication.AuthToken; - if(authType === TUI_PIN_SET){ + if (authType === TUI_PIN_SET) { console.log('============创建密码============'); tempAuthToken = await this.SetPwd(challenge, label); - } else if(authType === TUI_PIN_MODIFY){ + } else if (authType === TUI_PIN_MODIFY) { console.log('============修改密码============'); tempAuthToken = await this.ModifyPwd(challenge, label); - } else if(authType === TUI_PIN_DISABLE){ + } else if (authType === TUI_PIN_DISABLE) { console.log('============关闭数字盾============'); tempAuthToken = await this.DisablePwd(challenge, label); - } else if(authType === TUI_PIN_SET_MIX){ + } else if (authType === TUI_PIN_SET_MIX) { console.log('============创建密码============'); - tempAuthToken = await this.setPwdMix(challenge, label); - } else{ + tempAuthToken = await this.SetPwdMix(challenge, label); + } else if (authType === TUI_PIN_MODIFY_MIX) { + console.log('============修改密码============'); + tempAuthToken = await this.ModifyPwdMix(challenge, label); + } else { console.log('============开始密码交易认证============'); tempAuthToken = await this.ContentVerifyByPwd(challenge, label); } const TuiAuthToken: trustedAuthentication.AuthToken = tempAuthToken; let authToken = TuiAuthToken.authToken; - let inputdata = "challenge:123456|0, \n用户:张家龙|1, \n账号:123456|1, \n交易金额: 10000000|2, \n交易时间:2025-0605|2"; + let inputdata = + "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额: 10000000|2\n交易时间:2025-0605|2"; try { - SignFinish(session.handle,authToken, inputdata).then((data) =>{ + SignFinish(session.handle, authToken, inputdata).then((data) => { signature = data as Uint8Array; Verify(inputdata, signature); }); console.log('HUKS -> IAM auth on success'); - }catch (error) { + } catch (error) { console.error('HUKS -> IAM auth error', JSON.stringify(error)); throw new Error('拉起IAM控件失败' + (error as BusinessError).message); } } - async UserAuthBeforeSign(indata: string, session: huks.HuksSessionHandle, authType:number):Promise{ + async UserAuthBeforeSign(indata: string, session: huks.HuksSessionHandle, authType: number): Promise { let authTypeList: number[] = new Array(); - if(authType === TUI_BIND_FACE || authType === TUI_CONTENT_FACE_VERIFY){ + if (authType === TUI_BIND_FACE || authType === TUI_CONTENT_FACE_VERIFY) { authTypeList[0] = userAuth.UserAuthType.FACE; - authTypeList[1] = userAuth.UserAuthType.FINGERPRINT; - } else{ + } else { authTypeList[0] = userAuth.UserAuthType.FINGERPRINT; - authTypeList[1] = userAuth.UserAuthType.FACE; } const authParam: userAuth.AuthParam = { challenge: session.challenge as Uint8Array, authType: authTypeList, authTrustLevel: userAuth.AuthTrustLevel.ATL4 }; - const widgetParam: userAuth.WidgetParam ={ - title: '请输入密码', - navigationButtonText: '请输入盾密码' + const widgetParam: userAuth.WidgetParam = { + title: ' ' }; try { console.log('auth start'); @@ -569,70 +597,72 @@ class TrustedAuth { return new Promise((resolve, reject) => { userAuthInstance.on('result', { - onResult(result){ + onResult(result) { authTokenData = result.token; + console.log('auth result authTokenData', authTokenData); resolve(authTokenData); } }); userAuthInstance.start(); }); - }catch (error){ + } catch (error) { console.error('HUKS -> IAM auth error', JSON.stringify(error)); throw new Error('拉起IAM控件失败' + (error as BusinessError).message); } } - async GetTUIAuthTokenBeforeBioVerify(session: huks.HuksSessionHandle, authType: number, assetName: string): Promise{ + async GetTUIAuthTokenBeforeBioVerify(session: huks.HuksSessionHandle, authType: number, + assetName: string): Promise { let challenge: Uint8Array = session.challenge as Uint8Array; let tempAuthToken: trustedAuthentication.AuthToken; try { - if(authType === TUI_BIND_FACE){ + if (authType === TUI_BIND_FACE) { try { - userAuth.getAvailableStatus(userAuth.UserAuthType.FACE,userAuth.AuthTrustLevel.ATL4); - console.info('current auth trustlevel supported'); + userAuth.getAvailableStatus(userAuth.UserAuthType.FACE, userAuth.AuthTrustLevel.ATL4); + console.info('current auth trust level supported'); } catch (error) { const err: BusinessError = error as BusinessError; - console.error(`current trust level not supported. Code is ${err?.code}, message is ${err?.message}`) + console.error(`current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`) throw new Error((err as BusinessError).message) } try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FACE); - console.info(`get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + console.info(`get current face enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); } catch (error) { - console.error(`get current enrolled state failed, error = ${JSON.stringify(error)}`); + console.error(`get current face enrolled state failed, error = ${JSON.stringify(error)}`); throw new Error('bind' + (error as BusinessError).message); } tempAuthToken = await this.PwdVerify(challenge, assetName); - }else if(authType === TUI_BIND_FINGERPRINT){ + } else if (authType === TUI_BIND_FINGERPRINT) { try { - userAuth.getAvailableStatus(userAuth.UserAuthType.FINGERPRINT,userAuth.AuthTrustLevel.ATL3); - console.info('current auth trustlevel supported'); + userAuth.getAvailableStatus(userAuth.UserAuthType.FINGERPRINT, userAuth.AuthTrustLevel.ATL3); + console.info('current auth trust level supported'); } catch (error) { const err: BusinessError = error as BusinessError; - console.error(`current trust level not supported. Code is ${err?.code}, message is ${err?.message}`) + console.error(`current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`) throw new Error((err as BusinessError).message) } try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FINGERPRINT); - console.info(`get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + console.info(`get current fingerprint enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); } catch (error) { - console.error(`get current enrolled state failed, error = ${JSON.stringify(error)}`); + console.error(`get current fingerprint enrolled state failed, error = ${JSON.stringify(error)}`); throw new Error('bind' + (error as BusinessError).message); } tempAuthToken = await this.PwdVerify(challenge, assetName); - } else if(authType === TUI_CONTENT_FACE_VERIFY){ + } else if (authType === TUI_CONTENT_FACE_VERIFY) { tempAuthToken = await this.FaceAuthContent(challenge, assetName); - }else if(authType === TUI_CONTENT_FINGERPRINT_VERTFY){ + } else if (authType === TUI_CONTENT_FINGERPRINT_VERIFY) { tempAuthToken = await this.FingerPrintAuthContent(challenge, assetName); - } else{ + } else { throw new Error(`invalid auth type; ${JSON.stringify(authType)}`); } return tempAuthToken.authToken; - }catch (error){ + } catch (error) { const err: BusinessError = error as BusinessError; - console.error(`get TUI Authtoken failed. Code is ${err?.code}, message is ${err?.message}`) - throw new Error((err as BusinessError).message) + console.error(`get TUI Authtoken failed. Code is ${err?.code}, message is ${err?.message}`); + throw new Error((err as BusinessError).message); } } } diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 89704c1..0893998 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -12,367 +12,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import { trustedAppService } from '@kit.DeviceSecurityKit'; -import { trustedAuthentication } from '@kit.DeviceSecurityKit'; -import TrustedAuth from '../model/TrustedAuthentication'; -import createOptions from '../Common/TrustedServiceOption'; -import { BusinessError } from '@kit.BasicServicesKit'; -import { cryptoFramework } from '@kit.CryptoArchitectureKit'; - -import { PromptAction } from '@kit.ArkUI'; - -const TUI_PIN_MODIFY = 2 -const TUI_PIN_DISABLE = 3 -const TUI_BIND_FACE = 7 -const TUI_BIND_FINGERPRINT = 8 - @Entry @Component struct Index { - @State message: string = ''; + @Provide pageInfos: NavPathStack = new NavPathStack(); @Provide hasShield: boolean = false; - @State faceBind: boolean = false; - @State fingerprintBind: boolean = false; - pageInfos: NavPathStack = new NavPathStack(); - uiContext: UIContext = this.getUIContext(); - promptAction: PromptAction = this.uiContext.getPromptAction(); - - async createAttestKey(): Promise { - trustedAppService.createAttestKey(createOptions) - .then(() => { - this.message += '\n\n 创建证明密钥成功'; - }) - .catch((err: BusinessError) => { - this.message += '\n\n 创建证明密钥失败: ' + err.message; - }); - } + @Provide faceBind: boolean = false; + @Provide fingerprintBind: boolean = false; aboutToAppear(): void { - const bytes = [0x00, 0x00, 0x00, 0x80, 0x80, 0xd2, 0x41, 0x40]; - const buffer = new ArrayBuffer(bytes.length); - const uint8View = new Uint8Array(buffer); - for (let i = 0; i < bytes.length; i++) { - uint8View[i] = bytes[i]; - } - const dataView = new DataView(buffer); - const doubleValue = dataView.getFloat64(0, true); - this.message += `result = ${doubleValue.toString()}\n`; - let v = 40.054015247234702; - this.message += `result = ${v.toFixed(15)}\n`; + this.pageInfos.pushPath({name: "MainPage"}) } build() { - Navigation(this.pageInfos) { - NavDestination() { - Column() { - Column() { - Text('身份认证设置') - .width('100%') - .fontSize(500) - .fontSize(14) - .textAlign(TextAlign.Start) - .margin({ top: 28, bottom: 8 }) - } - .width('calc(100% - 56vp)') - .margin({ - left: 28, - right: 28 - }) - - Row() { - Text('数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) - Blank() - if (this.hasShield) { - Button('修改密码') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(async () => { - this.message = ''; - try { - let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; - await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_PIN_MODIFY, "pin_label1"); - this.message += `修改数字盾密码成功`; - } catch (error) { - console.error('修改数字盾密码失败:', error); - this.message += `\n\n修改数字盾密码失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - } else { - Button(' 开通 ') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(() => { - this.pageInfos.pushPath({ name: "PageOne" }) - }) - } - } - .width('calc(100% - 32vp)') - .height(56) - .backgroundColor(Color.White) - .borderRadius(16) - .margin({ - left: 16, - right: 16 - }) - - if (this.hasShield) { - Column() { - Text('关闭数字盾') - .width('100%') - .fontSize(500) - .fontSize(14) - .textAlign(TextAlign.Start) - .margin({ top: 28, bottom: 8 }) - } - .width('calc(100% - 56vp)') - .margin({ - left: 28, - right: 28 - }) - - Column() { - Row() { - Text('需认证关闭数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) - Blank() - Button('关闭') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(async () => { - this.message = ''; - try { - let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; - await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_PIN_DISABLE, "pin_label1"); - this.message += `关闭数字盾成功`; - this.hasShield = false; - this.fingerprintBind = false; - this.faceBind = false; - } catch (error) { - console.error('n关闭数字盾失败:', error); - this.message += `\n\n关闭数字盾失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - } - .width('100%') - .height(56) - - Divider().width('93%') - Row() { - Text('无需认证关闭数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) - Blank() - Button('关闭') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(async () => { - this.message = ''; - try { - const rand = cryptoFramework.createRandom(); - const len: number = 32; - const challenge: Uint8Array = rand?.generateRandomSync(len)?.data; - const authToken = await TrustedAuth.disablePwdWithoutAuth(challenge, "pin_label1"); - console.log('关闭数字盾成功:', authToken); - this.message += `关闭数字盾成功`; - this.hasShield = false; - this.fingerprintBind = false; - this.faceBind = false; - } catch (error) { - console.error('n关闭数字盾失败:', error); - this.message += `\n\n关闭数字盾失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - } - .width('100%') - .height(56) - } - .width('calc(100% - 32vp)') - .height(112) - .backgroundColor(Color.White) - .borderRadius(16) - .margin({ - left: 16, - right: 16 - }) - - Column() { - Text('生物特征认证方式') - .width('100%') - .fontSize(500) - .fontSize(14) - .textAlign(TextAlign.Start) - .margin({ top: 28, bottom: 8 }) - } - .width('calc(100% - 56vp)') - .margin({ - left: 28, - right: 28 - }) - - Column() { - if (!this.fingerprintBind) { - Row() { - Text('指纹识别').textAlign(TextAlign.Start).margin({ left: 12 }) - Blank() - Button('绑定') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(async () => { - this.message = ''; - try { - let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; - const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FINGERPRINT, - "pin_label1"); - let bioAuthToken: Uint8Array = - await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FINGERPRINT); - let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; - let resignAuthToken = - await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; - await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) - this.message += `指纹绑定成功`; - this.fingerprintBind = true; - } catch (error) { - console.error('n指纹绑定失败:', error); - this.message += `\n\n指纹绑定失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - } - .width('100%') - .height(56) - } else { - Row() { - Text('指纹识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) - Blank() - Button('解绑') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(async () => { - this.message = ''; - try { - let authType = trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT; - await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); - this.message += `解绑指纹成功`; - this.fingerprintBind = false; - } catch (error) { - // 捕获错误并处理 - console.error('解绑指纹失败:', error); - this.message += `\n\n解绑指纹失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - }.width('100%') - .height(56) - } - Divider().width('93%') - if (!this.faceBind) { - Row() { - Text('人脸识别').textAlign(TextAlign.Start).margin({ left: 12 }) - Blank() - Button('绑定') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(async () => { - this.message = ''; - try { - let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; - const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FACE, "pin_label1"); - let bioAuthToken: Uint8Array = - await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FACE); - let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; - let resignAuthToken = - await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; - await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) - this.message += `人脸绑定成功`; - this.faceBind = true; - } catch (error) { - console.error('n人脸绑定失败:', error); - this.message += `\n\n人脸绑定失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - }.width('100%') - .height(56) - } else { - Row() { - Text('人脸识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) - Blank() - Button('解绑') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(async () => { - this.message = ''; - try { - let authType = trustedAuthentication.AuthType.AUTH_TYPE_FACE; - await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); - this.message += `解绑人脸成功`; - this.faceBind = false; - } catch (error) { - // 捕获错误并处理 - console.error('检查失败:', error); - this.message += `\n\n解绑人脸失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - }.width('100%') - .height(56) - } - } - .width('calc(100% - 32vp)') - .height(112) - .backgroundColor(Color.White) - .borderRadius(16) - .margin({ - left: 16, - right: 16 - }) - } - Blank() - Button('去转账').width('calc(100% - 32vp)').onClick(() => { - this.pageInfos.pushPath({ name: "PageTwo" }) - }).margin({ bottom: 16 }) - } - .width('100%') - .height('100%') - } - .title('金融数字盾') - .hideBackButton(true) - .backgroundColor('#F1F3F5') + Navigation(this.pageInfos){ } + .height('100%') .hideToolBar(true) + .hideNavBar(true) } } \ No newline at end of file diff --git a/entry/src/main/ets/pages/MainPage.ets b/entry/src/main/ets/pages/MainPage.ets new file mode 100644 index 0000000..2bccbf5 --- /dev/null +++ b/entry/src/main/ets/pages/MainPage.ets @@ -0,0 +1,383 @@ +/* +* Copyright (c) 2025 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import { trustedAppService } from '@kit.DeviceSecurityKit'; +import { trustedAuthentication } from '@kit.DeviceSecurityKit'; +import TrustedAuth from '../model/TrustedAuthentication'; +import createOptions from '../Common/TrustedServiceOption'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +import { PromptAction } from '@kit.ArkUI'; +import AssetUtils from '../Utils/AssetUtils'; + +const TUI_PIN_DISABLE = 3 +const TUI_BIND_FACE = 7 +const TUI_BIND_FINGERPRINT = 8 + +@Builder +export function MainPageBuilder(name: string, param: Object) { + MainPage() +} + +@Component +export struct MainPage { + @State message: string = ''; + @Consume hasShield: boolean; + @Consume faceBind: boolean; + @Consume fingerprintBind: boolean; + @Consume pageInfos: NavPathStack; + uiContext: UIContext = this.getUIContext(); + promptAction: PromptAction = this.uiContext.getPromptAction(); + + async createAttestKey(): Promise { + trustedAppService.createAttestKey(createOptions) + .then(() => { + this.message += '\n\n 创建证明密钥成功'; + }) + .catch((err: BusinessError) => { + this.message += '\n\n 创建证明密钥失败: ' + err.message; + }); + } + + async aboutToAppear(): Promise { + const bytes = [0x00, 0x00, 0x00, 0x80, 0x80, 0xd2, 0x41, 0x40]; + const buffer = new ArrayBuffer(bytes.length); + const uint8View = new Uint8Array(buffer); + for (let i = 0; i < bytes.length; i++) { + uint8View[i] = bytes[i]; + } + const dataView = new DataView(buffer); + const doubleValue = dataView.getFloat64(0, true); + this.message += `result = ${doubleValue.toString()}\n`; + let v = 40.054015247234702; + this.message += `result = ${v.toFixed(15)}\n`; + let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore('pin_label1') + if (resArray.length != 0) { + this.hasShield = true; + } + } + + build() { + NavDestination() { + Scroll() { + Column() { + Column() { + Text('身份认证设置') + .width('100%') + .fontSize(500) + .fontSize(14) + .textAlign(TextAlign.Start) + .margin({ top: 28, bottom: 8 }) + } + .width('calc(100% - 56vp)') + .margin({ + left: 28, + right: 28 + }) + + Row() { + Text('数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + if (this.hasShield) { + Button('修改密码') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.pageInfos.pushPath({name: "PageOne"}) + }); + } else { + Button(' 开通 ') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(() => { + this.pageInfos.pushPath({ name: "PageOne" }) + }) + } + } + .width('calc(100% - 32vp)') + .height(56) + .backgroundColor(Color.White) + .borderRadius(16) + .margin({ + left: 16, + right: 16 + }) + + if (this.hasShield) { + Column() { + Text('关闭数字盾') + .width('100%') + .fontSize(500) + .fontSize(14) + .textAlign(TextAlign.Start) + .margin({ top: 28, bottom: 8 }) + } + .width('calc(100% - 56vp)') + .margin({ + left: 28, + right: 28 + }) + + Column() { + Row() { + Text('需认证关闭数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('关闭') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_PIN_DISABLE, "pin_label1"); + this.message += `关闭数字盾成功`; + this.hasShield = false; + this.fingerprintBind = false; + this.faceBind = false; + } catch (error) { + console.error('n关闭数字盾失败:', error); + this.message += `\n\n关闭数字盾失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } + .width('100%') + .height(56) + + Divider().width('93%') + Row() { + Text('无需认证关闭数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('关闭') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + const rand = cryptoFramework.createRandom(); + const len: number = 32; + const challenge: Uint8Array = rand?.generateRandomSync(len)?.data; + const authToken = await TrustedAuth.disablePwdWithoutAuth(challenge, "pin_label1"); + console.log('关闭数字盾成功:', authToken); + this.message += `关闭数字盾成功`; + this.hasShield = false; + this.fingerprintBind = false; + this.faceBind = false; + } catch (error) { + console.error('n关闭数字盾失败:', error); + this.message += `\n\n关闭数字盾失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } + .width('100%') + .height(56) + } + .width('calc(100% - 32vp)') + .height(112) + .backgroundColor(Color.White) + .borderRadius(16) + .margin({ + left: 16, + right: 16 + }) + + Column() { + Text('生物特征认证方式') + .width('100%') + .fontSize(500) + .fontSize(14) + .textAlign(TextAlign.Start) + .margin({ top: 28, bottom: 8 }) + } + .width('calc(100% - 56vp)') + .margin({ + left: 28, + right: 28 + }) + + Column() { + if (!this.fingerprintBind) { + Row() { + Text('指纹识别').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('绑定') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FINGERPRINT, + "pin_label1"); + let bioAuthToken: Uint8Array = + await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FINGERPRINT); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; + await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) + this.message += `指纹绑定成功`; + this.fingerprintBind = true; + } catch (error) { + console.error('n指纹绑定失败:', error); + if(error.message === 'Authentication template has not been enrolled.'){ + this.message += `\n\n指纹绑定失败:请前往系统界面绑定生物信息` + }else{ + this.message += `\n\n指纹绑定失败: ${error}`; + } + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } + .width('100%') + .height(56) + } else { + Row() { + Text('指纹识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('解绑') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let authType = trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT; + await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); + this.message += `解绑指纹成功`; + this.fingerprintBind = false; + } catch (error) { + // 捕获错误并处理 + console.error('解绑指纹失败:', error); + this.message += `\n\n解绑指纹失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + }.width('100%') + .height(56) + } + Divider().width('93%') + if (!this.faceBind) { + Row() { + Text('人脸识别').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('绑定') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FACE, "pin_label1"); + let bioAuthToken: Uint8Array = + await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FACE); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; + await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) + this.message += `人脸绑定成功`; + this.faceBind = true; + } catch (error) { + console.error('n人脸绑定失败:', error); + if(error.message === 'Authentication template has not been enrolled.'){ + this.message += `\n\n人脸绑定失败:请前往系统界面绑定生物信息` + }else{ + this.message += `\n\n人脸绑定失败: ${error}`; + } + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + }.width('100%') + .height(56) + } else { + Row() { + Text('人脸识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('解绑') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let authType = trustedAuthentication.AuthType.AUTH_TYPE_FACE; + await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); + this.message += `解绑人脸成功`; + this.faceBind = false; + } catch (error) { + // 捕获错误并处理 + console.error('检查失败:', error); + this.message += `\n\n解绑人脸失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } + .width('100%') + .height(56) + } + } + .width('calc(100% - 32vp)') + .height(112) + .backgroundColor(Color.White) + .borderRadius(16) + .margin({ + left: 16, + right: 16, + bottom: 16 + }) + } + } + .justifyContent(FlexAlign.Start) + .constraintSize({minHeight:'100%'}) + .width('100%') + }.height('calc(100% - 56vp)') + Button('去转账').width('calc(100% - 32vp)').onClick(() => { + this.pageInfos.pushPath({ name: "PageTwo" }) + }).margin({ bottom: 16 }) + } + .title('金融数字盾') + .hideBackButton(true) + .backgroundColor('#F1F3F5') + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/PageOne.ets b/entry/src/main/ets/pages/PageOne.ets index da44a48..20327fb 100644 --- a/entry/src/main/ets/pages/PageOne.ets +++ b/entry/src/main/ets/pages/PageOne.ets @@ -2,8 +2,9 @@ import TrustedAuth from '../model/TrustedAuthentication'; import { PromptAction } from '@kit.ArkUI'; const TUI_PIN_SET = 1 +const TUI_PIN_MODIFY = 2 const TUI_PIN_SET_MIX = 9 - +const TUI_PIN_MODIFY_MIX = 10 @Builder @@ -16,41 +17,49 @@ export struct PageOne { @State onlyNum: boolean = true; @State message: string = ''; @State type: number = 0; - @Consume hasShield:boolean; + @Consume hasShield: boolean; + @Consume pageInfos: NavPathStack; uiContext: UIContext = this.getUIContext(); promptAction: PromptAction = this.uiContext.getPromptAction(); - pageInfos: NavPathStack = new NavPathStack(); build() { NavDestination() { - Column(){ - Column(){ - Text('请设定数字盾的验证方式').width('100%').fontSize(500).fontSize(14).textAlign(TextAlign.Start).margin({top: 28, bottom: 8}) + Column() { + Column() { + Text('请设定数字盾的验证方式') + .width('100%') + .fontSize(500) + .fontSize(14) + .textAlign(TextAlign.Start) + .margin({ top: 28, bottom: 8 }) } .width('calc(100% - 56vp)') .margin({ left: 28, right: 28 }) - Row(){ - Checkbox().margin({left:18}).select(this.onlyNum!!) - Text('数字密码').textAlign(TextAlign.Start).margin({left: 8}) + + Row() { + Checkbox().margin({ left: 18 }).select(this.onlyNum!!) + Text('数字密码').textAlign(TextAlign.Start).margin({ left: 8 }) } - .width(328) + .width('calc(100% - 32vp)') .height(56) .backgroundColor(Color.White) .borderRadius(16) .margin({ left: 16, right: 16 - }).margin({ bottom: 6 }) - Row(){ - Checkbox().margin({left:18}).select(!this.onlyNum).onClick(() => { + }) + .margin({ bottom: 6 }) + + Row() { + Checkbox().margin({ left: 18 }).select(!this.onlyNum).onClick(() => { this.onlyNum = !this.onlyNum }) - Text('数字+英文组合密码').textAlign(TextAlign.Start).margin({left: 8}) + Text('数字+英文组合密码').textAlign(TextAlign.Start).margin({ left: 8 }) } - .width(328) + .width('calc(100% - 32vp)') .height(56) .backgroundColor(Color.White) .borderRadius(16) @@ -58,34 +67,66 @@ export struct PageOne { left: 16, right: 16 }) + Blank() - Button('立即开通').width('calc(100% - 32vp)').onClick(async () => { - this.message = ''; - if(this.onlyNum){ - this.type = TUI_PIN_SET; - } - else{ - this.type = TUI_PIN_SET_MIX; - } - try { - await TrustedAuth.TestGenKeyForTuiPinSign(); - console.log('生成密钥成功'); - let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; - await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, this.type, 'pin_label1'); - this.message += `开通数字盾成功`; - this.hasShield = true; - } catch (error) { - // 捕获错误并处理 - console.error('检查失败:', error); - this.message += `\n\n开通数字盾失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }).margin({bottom: 16}) + if(this.hasShield){ + Button('立即修改').width('calc(100% - 32vp)').onClick(async () => { + this.message = ''; + if (this.onlyNum) { + this.type = TUI_PIN_MODIFY; + } else { + this.type = TUI_PIN_MODIFY_MIX; + } + try { + await TrustedAuth.TestGenKeyForTuiPinSign(); + console.log('生成密钥成功'); + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, this.type, 'pin_label1'); + this.message += `修改数字盾密码成功`; + this.hasShield = true; + } catch (error) { + // 捕获错误并处理 + console.error('检查失败:', error); + this.message += `修改数字盾密码失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + this.pageInfos.pop(); + }).margin({ bottom: 16 }) + } + else{ + Button('立即开通').width('calc(100% - 32vp)').onClick(async () => { + this.message = ''; + if (this.onlyNum) { + this.type = TUI_PIN_SET; + } else { + this.type = TUI_PIN_SET_MIX; + } + try { + await TrustedAuth.TestGenKeyForTuiPinSign(); + console.log('生成密钥成功'); + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, this.type, 'pin_label1'); + this.message += `开通数字盾成功`; + this.hasShield = true; + } catch (error) { + // 捕获错误并处理 + console.error('检查失败:', error); + this.message += `\n\n开通数字盾失败: ${error}`; + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + this.pageInfos.pop(); + }).margin({ bottom: 16 }) + } }.width('100%').height('100%') } .title('数字盾') diff --git a/entry/src/main/ets/pages/PageTwo.ets b/entry/src/main/ets/pages/PageTwo.ets index e9cd576..2a74cc9 100644 --- a/entry/src/main/ets/pages/PageTwo.ets +++ b/entry/src/main/ets/pages/PageTwo.ets @@ -22,10 +22,13 @@ export struct BindSheetTemp { @Consume receiver: string; @Consume receiveAccount: string; @Consume tradingAmount: string; + @Consume faceBind: boolean; + @Consume fingerprintBind: boolean; uiContext: UIContext = this.getUIContext(); promptAction: PromptAction = this.uiContext.getPromptAction(); + build() { - Column({ space: 12 }){ + Column({ space: 12 }) { Button('密码交易认证').width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { this.message = ''; try { @@ -43,53 +46,69 @@ export struct BindSheetTemp { duration: 100, }) }); - Button('指纹交易认证').width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { - this.message = ''; - try { - let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; - const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FINGERPRINT_VERIFY, "pin_label1"); - let bioAuthToken: Uint8Array = await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_CONTENT_FINGERPRINT_VERIFY); - let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; - let resignAuthToken = - await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) - this.message += `指纹交易认证成功`; - } catch (error) { - console.error('n指纹交易认证失败:', error); - this.message += `\n\n指纹交易认证失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - Button('人脸交易认证').width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { - this.message = ''; - try { - let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; - const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FACE_VERIFY, "pin_label1"); - let bioAuthToken: Uint8Array = await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_CONTENT_FACE_VERIFY); - let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; - let resignAuthToken = - await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) - this.message += `人脸交易认证成功`; - } catch (error) { - console.error('n人脸交易认证失败:', error); - this.message += `\n\n人脸交易认证失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - }.margin({top: 24, bottom: 24}) + if (this.fingerprintBind) { + Button('指纹交易认证').width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FINGERPRINT_VERIFY, "pin_label1"); + let bioAuthToken: Uint8Array = + await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_CONTENT_FINGERPRINT_VERIFY); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) + this.message += `指纹交易认证成功`; + } catch (error) { + console.error('n指纹交易认证失败:', error); + if(error.code === 1019100019){ + this.message += `指纹交易认证失败:请用数字盾的指纹进行认证,多次失败请返回上一页解绑后重新绑定`; + } + else{ + this.message += `\n\n指纹交易认证失败: ${error}`; + } + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } + if (this.faceBind) { + Button('人脸交易认证').width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FACE_VERIFY, "pin_label1"); + let bioAuthToken: Uint8Array = + await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_CONTENT_FACE_VERIFY); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) + this.message += `人脸交易认证成功`; + } catch (error) { + console.error('n人脸交易认证失败:', error); + if(error.code === 1019100019){ + this.message += `人脸交易认证失败:请确认认证信息是否正确,多次失败请返回上一页解绑后重新绑定`; + } + else{ + this.message += `\n\n人脸交易认证失败: ${error}`; + } + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } + }.margin({ top: 24, bottom: 24 }) } } @@ -101,32 +120,43 @@ export struct PageTwo { @Provide tradingAmount: string = ''; @State bindSheetShow: boolean = false; pageInfos: NavPathStack = new NavPathStack(); - sheetTitleOption: SheetTitleOptions = {title: '选择认证方式'} - sheetOption: SheetOptions = {height: SheetSize.FIT_CONTENT, title: this.sheetTitleOption} + sheetTitleOption: SheetTitleOptions = { title: '选择认证方式' } + sheetOption: SheetOptions = { height: SheetSize.FIT_CONTENT, title: this.sheetTitleOption } build() { NavDestination() { - Column(){ - Column(){ - Blank().height('2%') - Row(){ - Text('收款人').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({left:12}) - TextArea({placeholder:'张某某', text: this.receiver}).width('75%').fontSize(16).backgroundColor(Color.White) - }.width('100%').height('32%') + Column() { + Column() { + Blank().height(4) + Row() { + Text('收款人').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({ left: 12 }) + TextArea({ placeholder: '张某某', text: this.receiver }) + .width('75%') + .fontSize(16) + .backgroundColor(Color.White) + }.width('100%').height(48) + Divider().width('93%') - Row(){ - Text('收款账号').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({left:12}) - TextArea({placeholder:'6666 1234 **** **** 888', text: this.receiveAccount}).width('75%').fontSize(16).backgroundColor(Color.White) - }.width('100%').height('32%') + Row() { + Text('收款账号').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({ left: 12 }) + TextArea({ placeholder: '6666 1234 **** **** 888', text: this.receiveAccount }) + .width('75%') + .fontSize(16) + .backgroundColor(Color.White) + }.width('100%').height(48) + Divider().width('93%') - Row(){ - Text('交易金额').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({left:12}) - TextArea({placeholder:'0.0', text: this.tradingAmount}).width('75%').fontSize(16).backgroundColor(Color.White) - }.width('100%').height('32%') - Blank().height('2%') + Row() { + Text('交易金额').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({ left: 12 }) + TextArea({ placeholder: '0.0', text: this.tradingAmount }) + .width('75%') + .fontSize(16) + .backgroundColor(Color.White) + }.width('100%').height(48) + + Blank().height(4) } .width('calc(100% - 32vp)') - .height('30%') .backgroundColor(Color.White) .borderRadius(16) .margin({ @@ -135,10 +165,12 @@ export struct PageTwo { top: 8, bottom: 24 }) + Button('下一步').width('calc(100% - 32vp)') .onClick(() => { - this.bindSheetShow = true;}) - .bindSheet(this.bindSheetShow!!, BindSheetBuilder('',''), this.sheetOption); + this.bindSheetShow = true; + }) + .bindSheet(this.bindSheetShow!!, BindSheetBuilder('', ''), this.sheetOption); } } .title('银行卡转账') diff --git a/entry/src/main/resources/base/profile/router_map.json b/entry/src/main/resources/base/profile/router_map.json index 5767a4e..868d93f 100644 --- a/entry/src/main/resources/base/profile/router_map.json +++ b/entry/src/main/resources/base/profile/router_map.json @@ -1,5 +1,13 @@ { "routerMap": [ + { + "name": "MainPage", + "pageSourceFile": "src/main/ets/pages/MainPage.ets", + "buildFunction": "MainPageBuilder", + "data": { + "description": "this is MainPage" + } + }, { "name": "PageOne", "pageSourceFile": "src/main/ets/pages/PageOne.ets", -- Gitee From acd217b09d76690be3b2ef5a6c440c81d599bdd8 Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Mon, 11 Aug 2025 22:04:02 +0800 Subject: [PATCH 03/16] Third commit --- .../main/ets/model/TrustedAuthentication.ets | 2 +- .../src/main/resources/base/element/string.json | 2 +- entry/src/main/resources/rawfile/startIcon.png | Bin 0 -> 20093 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 entry/src/main/resources/rawfile/startIcon.png diff --git a/entry/src/main/ets/model/TrustedAuthentication.ets b/entry/src/main/ets/model/TrustedAuthentication.ets index 4f13d70..420c48d 100644 --- a/entry/src/main/ets/model/TrustedAuthentication.ets +++ b/entry/src/main/ets/model/TrustedAuthentication.ets @@ -219,7 +219,7 @@ class TrustedAuth { try { const context = getContext(this); const resourceMgr: resourceManager.ResourceManager = context.resourceManager; - const fileData: Uint8Array = await resourceMgr.getRawFileContent('icon.png'); + const fileData: Uint8Array = await resourceMgr.getRawFileContent('startIcon.png'); const firstTenElementsView = fileData.subarray(0, 20); console.log('image size is ', fileData.buffer.byteLength); diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json index 250ee11..8fb7a77 100644 --- a/entry/src/main/resources/base/element/string.json +++ b/entry/src/main/resources/base/element/string.json @@ -10,7 +10,7 @@ }, { "name": "EntryAbility_label", - "value": "label" + "value": "TestDigitalShield" }, { "name": "reason", diff --git a/entry/src/main/resources/rawfile/startIcon.png b/entry/src/main/resources/rawfile/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..205ad8b5a8a42e8762fbe4899b8e5e31ce822b8b GIT binary patch literal 20093 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 -- Gitee From c24ed61500e89ca7ba2f225421dea4162104cf8f Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Tue, 12 Aug 2025 11:38:40 +0800 Subject: [PATCH 04/16] Third commit --- README.md | 86 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 59 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index e2156a4..bfcef27 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,71 @@ -# DigitalShield +# 数字盾服务 -#### 介绍 -{**以下是 Gitee 平台说明,您可以替换此简介** -Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 -无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} +### 介绍 +本示例利用Device Security Kit的数字盾服务,开发一个银行转账的数字盾。 +通过在可信执行环境(TEE)中开放固定的接口,帮助用户直接调用接口进行身份认证,密钥管理,统一可信UI界面展示,关键资产存储等能力共同构建数字盾能力 -#### 软件架构 -软件架构说明 +## 使用说明 +### 数字盾服务签名申请 +1. 完成应用开发准备 (https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-dev-overview) +2. 开通Device Security服务中的数字盾服务 (https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/devicesecurity-deviceverify-activateservice) +3. 基于服务账号生成鉴权令牌 (https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/devicesecurity-deviceverify-token) +4. 将签名补充在build-profile.json5的signingConfigs中 +### 编译安装 +使用DevEco Studio打开工程,并进行编译安装。 -#### 安装教程 +### 生物认证 +> 数字盾的生物认证能力依赖于系统录入的指纹和人脸信息,在进行生物信息交易认证前,需要用户在系统设置页面对指纹和人脸信息进行录入 -1. xxxx -2. xxxx -3. xxxx +### 应用使用 +1. 用户打开应用首先进行数字盾的开通,根据用户需要设置纯数字或数字+英文的格式的初始PIN码开通数字盾 +2. 用户根据需要对数字盾PIN码进行修改,同样可选纯数字或数字+英文的格式 +3. 根据设备支持能力类型及个人诉求在应用内绑定指纹或者人脸 +4. 进入转账页面,输入转账信息,选择密码(PIN),人脸(绑定后按钮可见),指纹(绑定后按钮可见)其中任一方式进行交易认证 +5. 根据用户需要,选择需认证或无认证关闭数字盾 -#### 使用说明 +## 工程目录 -1. xxxx -2. xxxx -3. xxxx +``` +├──entry/src/main/ets/ +│ ├──Common +│ │ └──TrustedServiceOption.ets // 可信服务配置 +│ ├──entryability +│ │ └──EntryAbility.ets // Ability的生命周期回调内容 +│ ├──entrybackupability +│ │ └──EntryBackupAbility.ets // EntryBackupAbility的生命周期回调内容 +│ ├──model +│ │ └──TrustedAuthentication.ets // Device Security Kit数字盾能力实现 +│ ├──pages +│ │ └──Index.ets // Navigation导航入口界面 +│ │ └──MainPage.ets // 数字盾信息主界面 +│ │ └──PageOne.ets // 密码类型选择界面 +│ │ └──PageTwo.ets // 交易信息界面 +│ └──Utils // 工具 +│ └──AssetUtils.ets // 关键资产存储服务工具 +├──resource +└──module.json5 -#### 参与贡献 +``` -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request +## 具体实现 +1. 使用Universal KeyStore Kit生成会话密钥,初始化对话 +2. 调用Device Security Kit的接口开通数字盾,并将credentialID存入Asset Store Kit中 +3. 调用Device Security Kit的不同接口完成修改、关闭数字盾和生物信息绑定,交易信息确认等能力 +4. 通过User Authentication Kit完成确认生物信息是否支持,是否录入以及生物信息认证能力 +## 相关权限 +需要网络权限:ohos.permission.ACCESS_BIOMETRIC -#### 特技 +## 依赖 +1. Asset Store Kit (关键资产存储服务) +2. Universal KeyStore Kit (密钥管理服务) +3. User Authentication Kit (用户认证服务) -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +### 约束与限制 +1. 本示例仅支持标准系统上运行,支持设备:phone。 +2. HarmonyOS系统:HarmonyOS 6.0 Beta3及以上。 +3. DevEco Studio版本:DevEco Studio 6.0 Beta3及以上。 +4. HarmonyOS SDK版本:HarmonyOS 6.0 Bete3 SDK及以上。 +5. 需要在华为开发者联盟网站上注册成为开发者,并完成企业开发者实名认证 +6. 需要在AppGallery Connect页面申请数字盾权限 \ No newline at end of file -- Gitee From d44dfe3d7bf1fb04f6eb4bc02e77c6264bf3321c Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Tue, 12 Aug 2025 11:49:43 +0800 Subject: [PATCH 05/16] README update --- README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index bfcef27..258d95b 100644 --- a/README.md +++ b/README.md @@ -29,20 +29,20 @@ ``` ├──entry/src/main/ets/ │ ├──Common -│ │ └──TrustedServiceOption.ets // 可信服务配置 +│ │ └──TrustedServiceOption.ets // 可信服务配置 │ ├──entryability -│ │ └──EntryAbility.ets // Ability的生命周期回调内容 +│ │ └──EntryAbility.ets // Ability的生命周期回调内容 │ ├──entrybackupability -│ │ └──EntryBackupAbility.ets // EntryBackupAbility的生命周期回调内容 +│ │ └──EntryBackupAbility.ets // EntryBackupAbility的生命周期回调内容 │ ├──model -│ │ └──TrustedAuthentication.ets // Device Security Kit数字盾能力实现 +│ │ └──TrustedAuthentication.ets // Device Security Kit数字盾能力实现 │ ├──pages -│ │ └──Index.ets // Navigation导航入口界面 -│ │ └──MainPage.ets // 数字盾信息主界面 -│ │ └──PageOne.ets // 密码类型选择界面 -│ │ └──PageTwo.ets // 交易信息界面 -│ └──Utils // 工具 -│ └──AssetUtils.ets // 关键资产存储服务工具 +│ │ └──Index.ets // Navigation导航入口界面 +│ │ └──MainPage.ets // 数字盾信息主界面 +│ │ └──PageOne.ets // 密码类型选择界面 +│ │ └──PageTwo.ets // 交易信息界面 +│ └──Utils // 工具 +│ └──AssetUtils.ets // 关键资产存储服务工具 ├──resource └──module.json5 @@ -55,7 +55,7 @@ 4. 通过User Authentication Kit完成确认生物信息是否支持,是否录入以及生物信息认证能力 ## 相关权限 -需要网络权限:ohos.permission.ACCESS_BIOMETRIC +需要允许应用使用生物特征识别能力进行身份认证权限:ohos.permission.ACCESS_BIOMETRIC ## 依赖 1. Asset Store Kit (关键资产存储服务) @@ -67,5 +67,5 @@ 2. HarmonyOS系统:HarmonyOS 6.0 Beta3及以上。 3. DevEco Studio版本:DevEco Studio 6.0 Beta3及以上。 4. HarmonyOS SDK版本:HarmonyOS 6.0 Bete3 SDK及以上。 -5. 需要在华为开发者联盟网站上注册成为开发者,并完成企业开发者实名认证 -6. 需要在AppGallery Connect页面申请数字盾权限 \ No newline at end of file +5. 需要在华为开发者联盟网站上注册成为开发者,并完成企业开发者实名认证 (https://developer.huawei.com/consumer/cn/) +6. 需要在AppGallery Connect页面申请数字盾权限 (https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/) \ No newline at end of file -- Gitee From ecab2b7a8173707328956fa6a02f4f4b22496e8d Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Tue, 12 Aug 2025 11:54:17 +0800 Subject: [PATCH 06/16] README update2 --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 258d95b..260b337 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 数字盾服务 +# 基于数字盾服务实现大额转账交易安全数字盾 ### 介绍 本示例利用Device Security Kit的数字盾服务,开发一个银行转账的数字盾。 @@ -37,9 +37,9 @@ │ ├──model │ │ └──TrustedAuthentication.ets // Device Security Kit数字盾能力实现 │ ├──pages -│ │ └──Index.ets // Navigation导航入口界面 -│ │ └──MainPage.ets // 数字盾信息主界面 -│ │ └──PageOne.ets // 密码类型选择界面 +│ │ ├──Index.ets // Navigation导航入口界面 +│ │ ├──MainPage.ets // 数字盾信息主界面 +│ │ ├──PageOne.ets // 密码类型选择界面 │ │ └──PageTwo.ets // 交易信息界面 │ └──Utils // 工具 │ └──AssetUtils.ets // 关键资产存储服务工具 -- Gitee From 2fdea6854cf2f9f3e3799e34970c7866a95c08a2 Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Tue, 12 Aug 2025 20:18:36 +0800 Subject: [PATCH 07/16] hide bind button --- .../main/ets/model/TrustedAuthentication.ets | 16 - entry/src/main/ets/pages/MainPage.ets | 328 ++++++++++-------- 2 files changed, 185 insertions(+), 159 deletions(-) diff --git a/entry/src/main/ets/model/TrustedAuthentication.ets b/entry/src/main/ets/model/TrustedAuthentication.ets index 420c48d..187295c 100644 --- a/entry/src/main/ets/model/TrustedAuthentication.ets +++ b/entry/src/main/ets/model/TrustedAuthentication.ets @@ -618,14 +618,6 @@ class TrustedAuth { try { if (authType === TUI_BIND_FACE) { - try { - userAuth.getAvailableStatus(userAuth.UserAuthType.FACE, userAuth.AuthTrustLevel.ATL4); - console.info('current auth trust level supported'); - } catch (error) { - const err: BusinessError = error as BusinessError; - console.error(`current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`) - throw new Error((err as BusinessError).message) - } try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FACE); console.info(`get current face enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); @@ -635,14 +627,6 @@ class TrustedAuth { } tempAuthToken = await this.PwdVerify(challenge, assetName); } else if (authType === TUI_BIND_FINGERPRINT) { - try { - userAuth.getAvailableStatus(userAuth.UserAuthType.FINGERPRINT, userAuth.AuthTrustLevel.ATL3); - console.info('current auth trust level supported'); - } catch (error) { - const err: BusinessError = error as BusinessError; - console.error(`current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`) - throw new Error((err as BusinessError).message) - } try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FINGERPRINT); console.info(`get current fingerprint enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); diff --git a/entry/src/main/ets/pages/MainPage.ets b/entry/src/main/ets/pages/MainPage.ets index 2bccbf5..b2f1946 100644 --- a/entry/src/main/ets/pages/MainPage.ets +++ b/entry/src/main/ets/pages/MainPage.ets @@ -19,6 +19,7 @@ import TrustedAuth from '../model/TrustedAuthentication'; import createOptions from '../Common/TrustedServiceOption'; import { BusinessError } from '@kit.BasicServicesKit'; import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { userAuth } from '@kit.UserAuthenticationKit'; import { PromptAction } from '@kit.ArkUI'; import AssetUtils from '../Utils/AssetUtils'; @@ -35,6 +36,9 @@ export function MainPageBuilder(name: string, param: Object) { @Component export struct MainPage { @State message: string = ''; + @State bioState: number = 2; + @State hasFaceAbility: boolean = true; + @State hasFingerprintAbility: boolean = true; @Consume hasShield: boolean; @Consume faceBind: boolean; @Consume fingerprintBind: boolean; @@ -68,6 +72,36 @@ export struct MainPage { if (resArray.length != 0) { this.hasShield = true; } + if(this.hasFingerprintAbility){ + try { + userAuth.getAvailableStatus(userAuth.UserAuthType.FINGERPRINT, userAuth.AuthTrustLevel.ATL3); + console.info('current auth trust level supported'); + } catch (error) { + const err: BusinessError = error as BusinessError; + if(error.code === 12500010){ + console.error(`Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`) + }else{ + console.error(`current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`) + this.hasFingerprintAbility = false; + this.bioState--; + } + } + } + if(this.hasFaceAbility){ + try { + userAuth.getAvailableStatus(userAuth.UserAuthType.FACE, userAuth.AuthTrustLevel.ATL4); + console.info('current auth trust level supported'); + } catch (error) { + const err: BusinessError = error as BusinessError; + if(error.code === 12500010){ + console.error(`Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`) + }else{ + console.error(`current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`) + this.hasFaceAbility = false; + this.bioState--; + } + } + } } build() { @@ -203,160 +237,168 @@ export struct MainPage { right: 16 }) - Column() { - Text('生物特征认证方式') - .width('100%') - .fontSize(500) - .fontSize(14) - .textAlign(TextAlign.Start) - .margin({ top: 28, bottom: 8 }) + if(this.bioState != 0){ + Column() { + Text('生物特征认证方式') + .width('100%') + .fontSize(500) + .fontSize(14) + .textAlign(TextAlign.Start) + .margin({ top: 28, bottom: 8 }) + } + .width('calc(100% - 56vp)') + .margin({ + left: 28, + right: 28 + }) } - .width('calc(100% - 56vp)') - .margin({ - left: 28, - right: 28 - }) Column() { - if (!this.fingerprintBind) { - Row() { - Text('指纹识别').textAlign(TextAlign.Start).margin({ left: 12 }) - Blank() - Button('绑定') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(async () => { - this.message = ''; - try { - let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; - const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FINGERPRINT, - "pin_label1"); - let bioAuthToken: Uint8Array = - await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FINGERPRINT); - let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; - let resignAuthToken = - await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; - await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) - this.message += `指纹绑定成功`; - this.fingerprintBind = true; - } catch (error) { - console.error('n指纹绑定失败:', error); - if(error.message === 'Authentication template has not been enrolled.'){ - this.message += `\n\n指纹绑定失败:请前往系统界面绑定生物信息` - }else{ - this.message += `\n\n指纹绑定失败: ${error}`; + if(this.hasFingerprintAbility){ + if (!this.fingerprintBind) { + Row() { + Text('指纹识别').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('绑定') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FINGERPRINT, + "pin_label1"); + let bioAuthToken: Uint8Array = + await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FINGERPRINT); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; + await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) + this.message += `指纹绑定成功`; + this.fingerprintBind = true; + } catch (error) { + console.error('n指纹绑定失败:', error); + if(error.message === 'Authentication template has not been enrolled.'){ + this.message += `\n\n指纹绑定失败:请前往系统界面绑定生物信息` + }else{ + this.message += `\n\n指纹绑定失败: ${error}`; + } + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } + .width('100%') + .height(56) + } else { + Row() { + Text('指纹识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('解绑') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let authType = trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT; + await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); + this.message += `解绑指纹成功`; + this.fingerprintBind = false; + } catch (error) { + // 捕获错误并处理 + console.error('解绑指纹失败:', error); + this.message += `\n\n解绑指纹失败: ${error}`; } - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + }.width('100%') + .height(56) } - .width('100%') - .height(56) - } else { - Row() { - Text('指纹识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) - Blank() - Button('解绑') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(async () => { - this.message = ''; - try { - let authType = trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT; - await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); - this.message += `解绑指纹成功`; - this.fingerprintBind = false; - } catch (error) { - // 捕获错误并处理 - console.error('解绑指纹失败:', error); - this.message += `\n\n解绑指纹失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - }.width('100%') - .height(56) } - Divider().width('93%') - if (!this.faceBind) { - Row() { - Text('人脸识别').textAlign(TextAlign.Start).margin({ left: 12 }) - Blank() - Button('绑定') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(async () => { - this.message = ''; - try { - let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; - const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FACE, "pin_label1"); - let bioAuthToken: Uint8Array = - await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FACE); - let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; - let resignAuthToken = - await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; - await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) - this.message += `人脸绑定成功`; - this.faceBind = true; - } catch (error) { - console.error('n人脸绑定失败:', error); - if(error.message === 'Authentication template has not been enrolled.'){ - this.message += `\n\n人脸绑定失败:请前往系统界面绑定生物信息` - }else{ - this.message += `\n\n人脸绑定失败: ${error}`; + if(this.bioState === 2){ + Divider().width('93%') + } + if(this.hasFaceAbility){ + if (!this.faceBind) { + Row() { + Text('人脸识别').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('绑定') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + console.info("签名初始化完成"); + let indata: string = "aaabbb"; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FACE, "pin_label1"); + let bioAuthToken: Uint8Array = + await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FACE); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; + await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) + this.message += `人脸绑定成功`; + this.faceBind = true; + } catch (error) { + console.error('n人脸绑定失败:', error); + if(error.message === 'Authentication template has not been enrolled.'){ + this.message += `\n\n人脸绑定失败:请前往系统界面绑定生物信息` + }else{ + this.message += `\n\n人脸绑定失败: ${error}`; + } + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + }.width('100%') + .height(56) + } else { + Row() { + Text('人脸识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) + Blank() + Button('解绑') + .buttonStyle(ButtonStyleMode.NORMAL) + .margin({ top: 14, bottom: 14, right: 12 }) + .onClick(async () => { + this.message = ''; + try { + let authType = trustedAuthentication.AuthType.AUTH_TYPE_FACE; + await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); + this.message += `解绑人脸成功`; + this.faceBind = false; + } catch (error) { + // 捕获错误并处理 + console.error('检查失败:', error); + this.message += `\n\n解绑人脸失败: ${error}`; } - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - }.width('100%') - .height(56) - } else { - Row() { - Text('人脸识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) - Blank() - Button('解绑') - .buttonStyle(ButtonStyleMode.NORMAL) - .margin({ top: 14, bottom: 14, right: 12 }) - .onClick(async () => { - this.message = ''; - try { - let authType = trustedAuthentication.AuthType.AUTH_TYPE_FACE; - await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); - this.message += `解绑人脸成功`; - this.faceBind = false; - } catch (error) { - // 捕获错误并处理 - console.error('检查失败:', error); - this.message += `\n\n解绑人脸失败: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); + this.promptAction.openToast({ + message: this.message, + duration: 100, + }) + }); + } + .width('100%') + .height(56) } - .width('100%') - .height(56) } } .width('calc(100% - 32vp)') - .height(112) + .height(`calc(56vp * ${this.bioState})`) .backgroundColor(Color.White) .borderRadius(16) .margin({ -- Gitee From 0ff13ee0e2ac965095a8943dbf4d403fdf7e88bd Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Wed, 13 Aug 2025 17:17:18 +0800 Subject: [PATCH 08/16] redundant clean --- entry/src/main/ets/Utils/AssetUtils.ets | 12 +++---- .../entrybackupability/EntryBackupAbility.ets | 4 +-- .../main/ets/model/TrustedAuthentication.ets | 12 +++---- entry/src/mock/mock-config.json5 | 2 -- entry/src/ohosTest/ets/test/Ability.test.ets | 35 ------------------- entry/src/ohosTest/ets/test/List.test.ets | 5 --- entry/src/ohosTest/module.json5 | 11 ------ entry/src/test/List.test.ets | 5 --- entry/src/test/LocalUnit.test.ets | 33 ----------------- 9 files changed, 14 insertions(+), 105 deletions(-) delete mode 100644 entry/src/mock/mock-config.json5 delete mode 100644 entry/src/ohosTest/ets/test/Ability.test.ets delete mode 100644 entry/src/ohosTest/ets/test/List.test.ets delete mode 100644 entry/src/ohosTest/module.json5 delete mode 100644 entry/src/test/List.test.ets delete mode 100644 entry/src/test/LocalUnit.test.ets diff --git a/entry/src/main/ets/Utils/AssetUtils.ets b/entry/src/main/ets/Utils/AssetUtils.ets index 6ee6e0d..a2f61bd 100644 --- a/entry/src/main/ets/Utils/AssetUtils.ets +++ b/entry/src/main/ets/Utils/AssetUtils.ets @@ -10,7 +10,7 @@ class AssetUtils { return textEncoder.encodeInto(str); } - DeleteDataFromAssetStore(name: string) { + async DeleteDataFromAssetStore(name: string): Promise { let query: asset.AssetMap = new Map(); query.set(asset.Tag.ALIAS, this.stringToArray(name)); try { @@ -47,7 +47,7 @@ class AssetUtils { } } - UpdateDataToAssetStore(newData: Uint8Array, name: string, label: string){ + async UpdateDataToAssetStore(newData: Uint8Array, name: string, label: string): Promise { let query: asset.AssetMap = new Map(); query.set(asset.Tag.ALIAS, this.stringToArray(name)); let attrsToUpdate: asset.AssetMap = new Map(); @@ -65,23 +65,23 @@ class AssetUtils { } } - async QueryDataFromAssetStore(name: string):Promise{ + async QueryDataFromAssetStore(name: string){ let query: asset.AssetMap = new Map(); query.set(asset.Tag.ALIAS, this.stringToArray(name)); query.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ALL); let emptyArray = new Uint8Array(0); console.info('Asset query begin'); - try{ + try { console.info('Asset query begin in try'); let res: Array = await asset.query(query); - for(let i = 0; i < res.length; i++){ + for (let i = 0; i < res.length; i++) { console.info('Asset query begin in loop'); let secret: Uint8Array = res[i].get(asset.Tag.SECRET) as Uint8Array; console.info('secret output', secret); return secret; } console.info('Asset query begin again'); - }catch (error) { + } catch (error) { let err = error as BusinessError; console.error(`Failed to query Asset. Code is ${err.code}, message is ${err.message}`); return emptyArray; diff --git a/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets index 8e4de99..54ae78a 100644 --- a/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets +++ b/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -4,12 +4,12 @@ import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; const DOMAIN = 0x0000; export default class EntryBackupAbility extends BackupExtensionAbility { - async onBackup() { + async onBackup(): Promise { hilog.info(DOMAIN, 'testTag', 'onBackup ok'); await Promise.resolve(); } - async onRestore(bundleVersion: BundleVersion) { + async onRestore(bundleVersion: BundleVersion): Promise { hilog.info(DOMAIN, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); await Promise.resolve(); } diff --git a/entry/src/main/ets/model/TrustedAuthentication.ets b/entry/src/main/ets/model/TrustedAuthentication.ets index 187295c..997299f 100644 --- a/entry/src/main/ets/model/TrustedAuthentication.ets +++ b/entry/src/main/ets/model/TrustedAuthentication.ets @@ -25,7 +25,7 @@ class throwObject { isThrow: boolean = false } -function generateKeyItem(keyAlias: string, huksOptions: huks.HuksOptions, throwObject: throwObject) { +function generateKeyItem(keyAlias: string, huksOptions: huks.HuksOptions, throwObject: throwObject): Promise { return new Promise((resolve, reject) => { try { huks.generateKeyItem(keyAlias, huksOptions, (error, data) => { @@ -42,7 +42,7 @@ function generateKeyItem(keyAlias: string, huksOptions: huks.HuksOptions, throwO }); }; -function GetEccVerifyProperties() { +function GetEccVerifyProperties(): Array { let properties: Array = [{ tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_ECC @@ -62,7 +62,7 @@ function GetEccVerifyProperties() { return properties; } -function GetEccSignProperties() { +function GetEccSignProperties(): Array { let properties: Array = [{ tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_ECC @@ -82,7 +82,7 @@ function GetEccSignProperties() { return properties; } -async function publicGenKeyFunc(keyAlias: string, huksOptions: huks.HuksOptions) { +async function publicGenKeyFunc(keyAlias: string, huksOptions: huks.HuksOptions): Promise { console.info(`enter promise generatekeyItem`); let throwObject: throwObject = { isThrow: false }; try { @@ -134,7 +134,7 @@ function stringToUint8Array(str: string): Uint8Array { return utf8Bytes; } -async function Verify(indata: string, signature: Uint8Array) { +async function Verify(indata: string, signature: Uint8Array): Promise { let indataArray = stringToUint8Array(indata) console.log('indata size = ' + indataArray.length + ' signature size = ' + signature.length); let appendInfo = signature.subarray(0, 41); @@ -464,7 +464,7 @@ class TrustedAuth { } } - async TestGenKeyForTuiPinSign() { + async TestGenKeyForTuiPinSign(): Promise { let properties: Array = [{ tag: huks.HuksTag.HUKS_TAG_ALGORITHM, value: huks.HuksKeyAlg.HUKS_ALG_ECC diff --git a/entry/src/mock/mock-config.json5 b/entry/src/mock/mock-config.json5 deleted file mode 100644 index 7a73a41..0000000 --- a/entry/src/mock/mock-config.json5 +++ /dev/null @@ -1,2 +0,0 @@ -{ -} \ No newline at end of file diff --git a/entry/src/ohosTest/ets/test/Ability.test.ets b/entry/src/ohosTest/ets/test/Ability.test.ets deleted file mode 100644 index 85c78f6..0000000 --- a/entry/src/ohosTest/ets/test/Ability.test.ets +++ /dev/null @@ -1,35 +0,0 @@ -import { hilog } from '@kit.PerformanceAnalysisKit'; -import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; - -export default function abilityTest() { - describe('ActsAbilityTest', () => { - // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(() => { - // Presets an action, which is performed only once before all test cases of the test suite start. - // This API supports only one parameter: preset action function. - }) - beforeEach(() => { - // Presets an action, which is performed before each unit test case starts. - // The number of execution times is the same as the number of test cases defined by **it**. - // This API supports only one parameter: preset action function. - }) - afterEach(() => { - // Presets a clear action, which is performed after each unit test case ends. - // The number of execution times is the same as the number of test cases defined by **it**. - // This API supports only one parameter: clear action function. - }) - afterAll(() => { - // Presets a clear action, which is performed after all test cases of the test suite end. - // This API supports only one parameter: clear action function. - }) - it('assertContain', 0, () => { - // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. - hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); - let a = 'abc'; - let b = 'b'; - // Defines a variety of assertion methods, which are used to declare expected boolean conditions. - expect(a).assertContain(b); - expect(a).assertEqual(a); - }) - }) -} \ No newline at end of file diff --git a/entry/src/ohosTest/ets/test/List.test.ets b/entry/src/ohosTest/ets/test/List.test.ets deleted file mode 100644 index 794c7dc..0000000 --- a/entry/src/ohosTest/ets/test/List.test.ets +++ /dev/null @@ -1,5 +0,0 @@ -import abilityTest from './Ability.test'; - -export default function testsuite() { - abilityTest(); -} \ No newline at end of file diff --git a/entry/src/ohosTest/module.json5 b/entry/src/ohosTest/module.json5 deleted file mode 100644 index 509a3a2..0000000 --- a/entry/src/ohosTest/module.json5 +++ /dev/null @@ -1,11 +0,0 @@ -{ - "module": { - "name": "entry_test", - "type": "feature", - "deviceTypes": [ - "phone" - ], - "deliveryWithInstall": true, - "installationFree": false - } -} diff --git a/entry/src/test/List.test.ets b/entry/src/test/List.test.ets deleted file mode 100644 index bb5b5c3..0000000 --- a/entry/src/test/List.test.ets +++ /dev/null @@ -1,5 +0,0 @@ -import localUnitTest from './LocalUnit.test'; - -export default function testsuite() { - localUnitTest(); -} \ No newline at end of file diff --git a/entry/src/test/LocalUnit.test.ets b/entry/src/test/LocalUnit.test.ets deleted file mode 100644 index 165fc16..0000000 --- a/entry/src/test/LocalUnit.test.ets +++ /dev/null @@ -1,33 +0,0 @@ -import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; - -export default function localUnitTest() { - describe('localUnitTest', () => { - // Defines a test suite. Two parameters are supported: test suite name and test suite function. - beforeAll(() => { - // Presets an action, which is performed only once before all test cases of the test suite start. - // This API supports only one parameter: preset action function. - }); - beforeEach(() => { - // Presets an action, which is performed before each unit test case starts. - // The number of execution times is the same as the number of test cases defined by **it**. - // This API supports only one parameter: preset action function. - }); - afterEach(() => { - // Presets a clear action, which is performed after each unit test case ends. - // The number of execution times is the same as the number of test cases defined by **it**. - // This API supports only one parameter: clear action function. - }); - afterAll(() => { - // Presets a clear action, which is performed after all test cases of the test suite end. - // This API supports only one parameter: clear action function. - }); - it('assertContain', 0, () => { - // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. - let a = 'abc'; - let b = 'b'; - // Defines a variety of assertion methods, which are used to declare expected boolean conditions. - expect(a).assertContain(b); - expect(a).assertEqual(a); - }); - }); -} \ No newline at end of file -- Gitee From ebcb1c359a92522f3af41eeda5e9d9f0f02e25b6 Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Thu, 14 Aug 2025 09:53:03 +0800 Subject: [PATCH 09/16] bug fixed --- README.md | 5 +++++ entry/src/main/ets/Utils/AssetUtils.ets | 6 +++--- .../main/ets/model/TrustedAuthentication.ets | 8 ++++---- screenshots/index.jpg | Bin 0 -> 106578 bytes 4 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 screenshots/index.jpg diff --git a/README.md b/README.md index 260b337..af97572 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,11 @@ 本示例利用Device Security Kit的数字盾服务,开发一个银行转账的数字盾。 通过在可信执行环境(TEE)中开放固定的接口,帮助用户直接调用接口进行身份认证,密钥管理,统一可信UI界面展示,关键资产存储等能力共同构建数字盾能力 +## 效果预览 +| 数字盾预览 | +|-----------------------------------------------| +| | + ## 使用说明 ### 数字盾服务签名申请 1. 完成应用开发准备 (https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-dev-overview) diff --git a/entry/src/main/ets/Utils/AssetUtils.ets b/entry/src/main/ets/Utils/AssetUtils.ets index a2f61bd..2e7417d 100644 --- a/entry/src/main/ets/Utils/AssetUtils.ets +++ b/entry/src/main/ets/Utils/AssetUtils.ets @@ -10,7 +10,7 @@ class AssetUtils { return textEncoder.encodeInto(str); } - async DeleteDataFromAssetStore(name: string): Promise { + DeleteDataFromAssetStore(name: string): void { let query: asset.AssetMap = new Map(); query.set(asset.Tag.ALIAS, this.stringToArray(name)); try { @@ -25,7 +25,7 @@ class AssetUtils { } } - async AddDataToAssetStore(data: Uint8Array, name: string, label: string): Promise { + AddDataToAssetStore(data: Uint8Array, name: string, label: string): void { let attr: asset.AssetMap = new Map(); console.info('secret input', data); attr.set(asset.Tag.SECRET, data); @@ -65,7 +65,7 @@ class AssetUtils { } } - async QueryDataFromAssetStore(name: string){ + async QueryDataFromAssetStore(name: string): Promise{ let query: asset.AssetMap = new Map(); query.set(asset.Tag.ALIAS, this.stringToArray(name)); query.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ALL); diff --git a/entry/src/main/ets/model/TrustedAuthentication.ets b/entry/src/main/ets/model/TrustedAuthentication.ets index 997299f..8e3f03d 100644 --- a/entry/src/main/ets/model/TrustedAuthentication.ets +++ b/entry/src/main/ets/model/TrustedAuthentication.ets @@ -314,7 +314,7 @@ class TrustedAuth { } const authInfo = await trustedAuthentication.modifyTrustedAuthenticationPwd(challenge, passwordInfo, credentialID, label); - console.log('修改数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + console.log('修改数字盾成功:', authInfo.authToken); return authInfo; } catch (error) { console.error('密码修改失败:', error); @@ -339,7 +339,7 @@ class TrustedAuth { } const authInfo = await trustedAuthentication.modifyTrustedAuthenticationPwd(challenge, passwordInfo, credentialID, label); - console.log('修改数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + console.log('修改数字盾成功:', authInfo.authToken); return authInfo; } catch (error) { console.error('密码修改失败:', error); @@ -361,7 +361,7 @@ class TrustedAuth { AssetUtils.DeleteDataFromAssetStore('credentialID'); AssetUtils.DeleteDataFromAssetStore('face_credentialID'); AssetUtils.DeleteDataFromAssetStore('finger_credentialID'); - console.log('关闭数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + console.log('关闭数字盾成功:', authInfo.authToken); return authInfo; } catch (error) { console.error('关闭数字盾失败:', error); @@ -383,7 +383,7 @@ class TrustedAuth { AssetUtils.DeleteDataFromAssetStore('credentialID'); AssetUtils.DeleteDataFromAssetStore('face_credentialID'); AssetUtils.DeleteDataFromAssetStore('finger+credentialID'); - console.log('关闭数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + console.log('关闭数字盾成功:', authInfo.authToken); return authInfo.authToken; } catch (error) { console.error('关闭数字盾失败:', error); diff --git a/screenshots/index.jpg b/screenshots/index.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d430df5f20855c5b6849efb792cdb4ad92093833 GIT binary patch literal 106578 zcmeFZ3pktE+BcrIGwq(49>yrzqGp((D5`NNifQXG(`-2(7aa#{>z9FSFloAFubj{@?q*zU%t-`~UAdSDxp7 z*6CU6e%7_V^a${^y9@ zM*wR2;1mFW#>B^7_B{Xj6+i#ae-HZ$T@8)9@fZF-IjhTEANaj=0Dy1tpTz$^1$}hw zdR(YF(X#p1un+`Y@OY&Tyj3=bKcet z9O2~?5EObX^z6l`_^9vWu3QZb{=JZ0pK5669M-WodekD=)y_5ezf3#N0UCe!==mR> z?%8Ds*sZZ^kH)T@R)DVh@$KI8d&mAO?cVd@-hChZ9*Ou=-P`x<-nDPvzP%ss-M4Sg zhk#wX_k8f7#%Fsqzp#c}Npz>b+vZy+M}l3 zAME>c_0(|?jn58ieei{~rs28MS7Yu!{t)=b7e?nVT!z;0mP2-i0Q>i-b7}0+0Js9i zzV`WRgZ@9ue7);yb=!7*{d=GOoel%O1_0avpZ+=c&msTs4AtLtCN{s1Fl zA_eeh1Xd?@u)?ti}{iunGakM2qloewEzBKzrSNG1g)Q zV*RphZp+zaZtp9=4~JVv2t!!1vvc_`4~9ubWYp%9kBT5d;L1fX$;H?3y3}-E1XaL?$~H`m53zswKjW?$C*|0*@qk-M)mFh%sDIF z&r0y?Imo2AfPP<-+nY94C#JUocK}TVeJ5s8erF!`{9@?m4P4V=21r8gANMtr$2z>UYwzb>v?0W3- z5~3(RP`;u(N(~9hWLopx`WnOH3yE8oPSgdA?ph^`+NZkzrQ7|N&wI_S99b+IKiciW zVrC8t5)CvI1+3-6L_UlA-_hINwxEh0C~y-s*LvKdoxcOToD37uSy>6-!#KP7e1j7$ z%7i}rxzZzt9t5izXWC4;UMjm5bXqx9Z>;u@&@OFXfH>&)r(v zR|F@7hyW5*EGFB3aQm}$^j1EoEzaE~gN*eyaFjHTTf%I4&MC6zz+IY}8rFi(|I4lV zrwrNM4~7_lT{EZ?nbeAf46QFHb4{EVJ^e1=^y8HQFt33nI06Jxze&3Bsn13}1^9fJ zxHQ<#fGuRz`7^x(69gI>GRC9PpzsC(SR1(xgUm6#`jxfM%u&a_+yQ)aWIOQKbrC!H z?Q+Ufd3xCx)$|ovWz$D)Osd!lrAYUn506iUPWxrOEs%^dona8)W!Be6IB|i$y{?&M z6Kn;r&O(w%g9AegWqVH8lqx*<$~z_!N^97M!chkq3L!E{>q(8dW_PZ8Ww5C*P|yRGir zP-cSbo01*C8zCdrvNyXc>ZZAtFwjPTLQ)me$k4>Av7=XZ0M3%F1=S?{a^%QUnlEi{ zyGvH@ns9L$Zl^Fd9ZGfOZPb6NR}Gu|$=};#33ZgEHyx~HeHbE*7{w(L<{$F5^>zUE zW;=lJYT4zMf-!F74q&)!{jukA-1Z1fNoo;%V|TZRmz#~<=G(ecjaeD<#bwy4&LH1W zVZtYG3s%AzFWp8+v^Zd$TPxaWOEDbD&7!=&3X81-U9vM{ISK7%@k!0kLs_u6%gi#t zF*k%9*8PB|CvpE{;5$i|gs`Aenk0T*H-C(qePOF* z4DdXCZ*bmP3x^`Jzn!~%G|jtLwO-mky6euAOZ73k>_kICPFf2A={ivAEfC6VOW!Sh zLzqdZEF@4Xh$p$hOR%lx0s9Aj_Q{Ygnm3GxG66~4CS*qjvwNi5Vs9gcx{9P|8v@G{=U(Q&f#z$v+QhT1nY+u`YyoxJD&C$|j zS66YxUdeH^d~l)}VUAGH*h@eRXR+X>HJDTkOHpEOuky~*Niw7#6&Ey*cwE;3#w~&T z$yj^{4w>@B(qxfmN8Q=R){F5W?}SZ$6hoCL4($Ag?X11h<-yLPMCX9}HQ6b~61$ii zbJTt)&`0R3+kqM(-gw41Hp@ovU_PzTSVu!tL}p>>!(PMC_gUSoEt$aw#Mn%6q4;6? z&p^)6nAyy-ji(!{OK%y8yLSKw-ewLFN{Tr>Oe0lJn6hs(7bZAkLR&|iP4z}{ox#VH zak0v-=|lqI;hOX1*R;}7IOpADs{Q7*l)?NrjBi>?P|_H`($}5B%rd06la47lton8p zkv)s(AzkNuR%rr zbZ4KwzyR+7VIIG&#v9o4vi6`~R)@ywSo#xq%f>z_bwl-j!uk6Tzy8O;@PGR%l4(jb zrxF{-u@C&39yujzwgGK~!ylvP9?nsX*?9;o`sqo&DKRFobPfhQVk zYSMK}`1(LJtr8ji&Y$BW)U<&)r{H|#X0FvcfW++=caK_qmA%N2C^Y+nr}Ofz~k0MNe7~G2t!9x zh7#EMU>}%G^z3lbC4=1}V#74Dv5b~9`vVRQwHaiBWNp@;-TU8e^nadkkAC&_>F;Od zM;%i$IQKDzA%yJpY(-eK*XtLv+vT{tU(q z?K`YG~%Rph5LuqmOhnEDQSPX+q@T!M+-ua5CKthcq@B z15DSSk}djQ=WYp&AECl9j?Aq1MCftC4uJ3wo9x`_{BhxGGa`snzXtA_NvGm**p0;k zb6Jr>t1?i>gJEY#gS?C_91SU+HYBDf92JTyBCC6ZqjodEfG*lGVskuCQ!}`^q9jB4 z`9^Z^y&Aod?}v%0(RpdAx;b95KK-W1-uPs2NjVe2cRdiyGWa6au&_uAWj8&&1MrG1 zOH%e3KY3-EWnlKY)&-)W=fgv^%hHkMvwL0bzY#hZ6!oeC){0!JMwS9YASH z@?^(}s>n@7-#**CFbp==)7z&b@j~zSJQ0#X2NhY_^`Czmam-`qqmKB0F>`NcK~M919J!e@m1VC* zF{@j^#}vz+Th9Li!0E7|sY~4U9PoC?~?^EtG*rKNU z>=sjQ6R0?neVobzx|-$JSiDqx|9)Bsl~PMeN2qQqQ{=j(gQfkiS)a(Ym$ux4Yrip~ zt+wdu;0H=I^01C)W@bHex1}6Jfnb%9a#U-|y`d<<&GQ3LLI-E6XHvDd;FoD3CMR|W zVCy8RCa2Nc&i-)+;NGJWxl+#+4=@7!Jq}MIC^@W>V<*NirpqXo`1xATu8HHhdC~RT zJ6K@B&DMUM>5wlb$DLvD0@Fup7qdnsI(-dfD0`3sg=3e$Hi z(DF!G>SoxBpM(yOwD$OS5!ebAmhhg+%B11ghDR39j};{o9_|3j?2@LP`6?9asApI5 zxxo1r$40a;E?GjzP_7=r>@!=7Lh`dK-{MUP8ANg>iE1zH!8&i(F%Ew}5jG@et}H=c zAQB`(#rP3bus_-IYH)^J;2sa!@ZcNJ;gN|b&Z|dG`Cc+mz-UU?_wgw@4#V1u2{C-F z)Tc$otHR5@FBxUL%zSLy*$%z61h7+|XOIYU3t2(uHd5!Qg@mnLr?mcY&YS-VC?8;@ZV$958(mR{)AzY@yIO|Kl|G!C z%#N1)&hCMl$`MX%Bq<~-o(pw$zDK!tg>{7Zq3^Sr#kZ_J!CCuoVi>xN65$@TX06fG z`+DV_xG}9PufZv6&>K<9gv>u-K>H> zt`E4;keGxs4oNI2Y0lW&|1y>>uPIMY+${#?fuo;Ir0zJ*Y-g3RCna)uB_X%gb>QJ#Cy^7(65* ztA3hLILvAIWx{`NS@Gjwc3OLJUm(l-kXDzOyk>3~Gn!j7H>G20s~@^|)DEeoZNbNy z<15tK8@6zmGG^HzNdJ=_=n?m`wkA*tbN((7MMOhvL7oQ!ojjY=)ApAv&+@kvuQ%bp zkt+SzFM5{+%>oz@*a9a9n%{cr}H4($r zKiO2F?MMWv$D5Phn%y5|C#K|S#d|HGeXB-ti$N*x_j6s4lcHKDm~-mSWMVZ>7lx|Z zY7C&AecBDw7E^U9;gPs10np&d)N^K##}lpItpI6Xw#>z=c(q8iCkAwCBdEU$0EgAZWUi1nsg%OeZMZrz5uM z0NiLdajv$GuU=A~O~eRr61aJ>n40*Ic(t%@?fBSjYzwn?QUG-7SsY5%mBu+s(_8yD z&`sH-kX~444xUOj5|6c23%9P8O2g(_dZPFOi`|nufTM6uOC4y-Hgr0W>4Rnj9-ryG zp6a=Y=zu+59ax_yNw8v~VdCP$ivwjkrYtNQ21P*Y*OksrGV0wC|0=%DnHf^yyJ3>u z#ma3*WCIfuf+yh&?dCIsl*{c1zrWEKen7L}8d1h9Vc$H-u5klQ0oQ z%1=t8H2ci&d=*mbxBaxS%2n2#H*96>?CR*3qJYW888ngc@%xDp)XC*|*(K~J@xz3K zsqSxI@;~d0DAqO^mBOUI)*y=x-{1pXR>N@AjhebOpp|h=>y4lKCdC_klP+kSEh^kF3^7V3(KB;(C_b;B-I%Ac4-2pzWf($k${`Je@UT0u4Ol|j^rFIoX>t@={+IHqYf437GaX81&tVSvhPB~<~pg- z0;&<109{Mm*sudT9Xz!%p838gPf8^hKT76+gn9#M*M(UhfJy0}O4Bb^r!N{9CK4&U z(~8xSA9nxpkE7%NjVtq4Es@9C5?3vu7(v50l}aIf!A)@XbbUzt_4^2(-BXL+HQRWP zQBHcJ{ysSWq*#$KqKBuEvWmR5H2IpEO=*;z-uszl;YY7D#CwB@YWw3HmG!=a;EpOF z(;SUG?7xhpM!aBwrh>^XsdMwAgoVt^*)2!=v8$5>rYD3kWWg*R7{%9&HKLZw%3k!w z7l%51@`;f*KY~`;Lob{tBbVnC4wcBqs$R1UIxBcl!n}OAHd=wD8sbh+sxflO-rn6L ztszD%)r^I~Q%Q+r6xleUWU>8^T{n+IBK?(Dv?U12UP2D0ifn;qzM-Z96@ecGf#E0G z*@46)I@FDOc)eHjDgO1u<{3&+1`VdN$CTIdTH5;8W*dV~$X&a1&(v3qursj@GiGJU z44AI8M^URG+Zsw3>1kXuv7B}v>>MATF|NRq(&OsqbgIYR+*rEqAzbt$Q5AM`h5N`B zYRv^6!E{5=NK}$h@<#X9yoCM3Ex#SVo<*=nG3=uuTrSi`;UqN*o zzq%xli9G#^f~`1O{K#28*cuc)SCadUHC=W~bt_jXaHZ-U!=vbp;Ut2(vxH~l5DHS- zNVKGSv``lYKHR!BzRP^<)rhJ`MZWVY_!TpK$V^EL*lu5`lQ|6hgveB8oA84DkPhu?a6R6qg@$!Y@ zM&AfTZq1!MFAt=rtBseGcUa=3tR2cd@yvAKbd8O(OF0|Mu7P!x&*2T7wwQ#{8>erQ zCI@`kxlcygIH(*{4-|nIbu>02+hMe4rzL!kt>spar8>xA2>7rJs`04;@XwaNzZ+;= z(AID*V4Wi6E2(?xjJeEov!!!2ER7wX+A{gEOB+<*2Wk*3cTwAZW@jnQCO38)8ruEv z=~Wr}m~5hH~gNL;5Bb2#ddmq z^}arvwU+9REz~k5G%U3!Vt9fNsp&M|j#<516yr^~m0bE}aCrrNb%Gzlb%J`&1=(Eh z%d?t)7~kQ4^Xp}?W8hsyNaSeNeF4JxC8)!qpHtxsEBT5h=zNr|Lb_MvY!-TQA63sU zs7m+tThG#HEqyzHIM`a4xnj$e@*>UNIK(`&vqcMPz#}=T>f80TF5wo|bBtdNG2M&e zhnXNK*t*W`%l(i31olztlbyb@jIH){>HqrDBbp$$ZpKU&DskI4NN3Fs8A+Snq5v*v zn_j7RFv1%;yH7u@%2h}Hg$>j;23(Y~z60nnHq(GX1n$-{wbf*DMZj}{>Wi#?(a`l! zdwl-|XkYM^J-R>rGI!=^!qoWH07hDsDn8mNg@iK_U;E)ZwdeIN>z4?fI2XS-?;4nL zlT1I(k`#(XdAmG+9w6Kbb8MQwQeV-_NVjXFCqofV&X}~WXD1~ux)zyXjpkZAzII3d%=qbQI ztyTU79@D?8@c%mr>;ioF_ia|ci~mHQ0>1mFkbm*ZPuW;e7A%kxTZEm<7E>#R4D~i1 zj8xI=h|6`I)VmS0^d+B>#hh2l@M^X5{n9`!xjoO0%7`Y>@}X@V&Z2Gyr*3nCLyNJ1 zEYgT0iMm2>8>X0y4e_N_Koj2{imrCHxP(Y8p&Hf0#77()F@Z@e>~z+H)O^n<>~p6p zGb6;Qn-fqEZ5j;bmxH%T;A#vyKOK_jkgKZt5MHm6=Sk@SDT_~T_e|O$JuvQyxRX#F3=HAcDvfq3U)y6pT%+oAk2;Q< zEgcx$syHj-xmIyDE(^DxbJrKrpLw4Grm_td?qP7gHFs#d*d{X?)uP88;UgJ%Wy{@j zX)Sc0<#Za1#f13?Z26jMGx*kMi-Xj)*G|>B45_>pyW}|FJ`A~&YwaEf0O98D($sA zvmm!9*UQ7=EgMxeZkFpMI&|oS4c@lct}>bS;}ozBRqX~F8!0czt$aUkXU@*_+3spU zk?8ocXV|5y4i~!E3KzBvs77t{Be z$gx=(8aTxOWn0~=gJ)q_tXN5W+xfwD`nNZ#MLm2B^ z*ND;z!u~1xIpI9rr_M#j}a_i5Q;zj3-THHwQY75Zsorwf|Iw!mn^;iS3;= zT_HEO-@@+zkO&`rVpZtHvN_b1m>oc_H=ZbWC-H<8p?!^2I{;`t?+FSftE!T;Z z4NJ9B?jO1&kr9u);Kp7 zK@UZR&X@ejM~04eg|nIimk631yYg9bDXlH-PUnaSISF$=J7DA8%kha%4SXiA4u{*g z=0R{udrS}+MK#UAW0#~)-z_M73o?HlZ+H1h*E0~-2Zr@UbscNZ&8!TKb5JW&uIHy* zFJ>+-$2>in8kr{_vhAEHpE(JVfW=1BeJ#&m5&ol(e}y-HHHSA&qzVFUV6r6ZsypW= zN9J*!>ej(N=6Z zTtY3U8tY}*e=WFyX=86Dx+Flrwmdzbo<2Cpk(~QSFT#_F_x$?xIXVA0kwOlW?0vj# zv;#1uq|noU6Fjv^^}Ni4^_=vthPW;Fw6>yM5%s0-4dh@aQJhMfL5>{C$wRWQz#~X_ z@pvK85SR8eaJrr?Z*IYtYMUFjjYP`cwz%=IBg+Di;;Z7dKE!%adV=?@kMi#)S{W~b z6(kxHMWhyHGw;P02g~p50M_eU-p6rVy}J9C1fhHToMMSd(@4`@Kxz_ul+hrS#jNVzlE#W2%pihhkvoS^YH3PM$ z)s`vgOOx)D?F~~azGjm@iRkLF1K_Y?4TZLyY%TP5Rf14~RX%@GU3h_%x5XL4~hf;Jn;tgzc#X0sBafFA>+}KRrqD3hVIRyh4Yy z2W8#*_3FfQU|A6}&=!WOD9eh-b@NW~Tdk+aJFJ$(D|3qRP7`D#N)5YqV(=^x!nWQ+WUkwiPn|s z=@FK#hw^ylJ(O4XZ5KSejt{TM5b5F4sX;S{4QdBN_S6)(-I9F~x8nuOa z>mv|O9{jnzoinP$nouPpsU&?SMcZ{4o;5s~Wn$Ei&fQfany~`tF4E1G;jyT5*&1H=jN(Q6v+op2~>2dHMPT#EUR%7}W zM)->X^btQiif9x*h7T%n3yXLgY`K~}?7Jy%J{W61hOt=Rx>`9oe(k;bJzQCQOAk#V zPXR$aSm~3jTLpxURZxI%({6lvmRLVVOXWNly97?oFhaHsCiC@3uhH!TYn4z&i`U1+BGxT;fx~q>+x>U_rQJHDwxOyvm_S%385~(n zp7)$a1T(jZDz-ckvIB@QmhC6!3TQNx89NY;%6MPWe7xjd;7pYPAtr5X z^{lLH&C+UEbxD4K9GiZTUwLg}0xVuN%fT4S0$|>VzF_27XGN?&&G|IJcV- zKs9HzY1ZLPp6XgCkyVlR8;iv?b2VJBjk`_nO1-pi>3avA(o70U7>yjw@)g(Ev_UnU z&-(O=j?Z0laLP(|y5C5)v(-za2W60p$L$qB;mKg)v5lu4W03Jf#vWiI>r$d6aihi| zFV=i0E%*4A@-D@Kq33+b>DaW^CI_rdCXx+9BgQyYLR6y_3`xbZzzCqOB5|;2?LyG{ zkuCArbL?0Xd2P0mx&uI6aecqH7j1tsc!m!9DVRIGA+Hl2w^lrPwi>K9^uJyRnHrv6 zg4%-kZJPBmknH85uF>zNA{^FZDzCJ&F|?S(O|jax-avMA41Ibe@ROhUfvo<7s+Hxc z4ucN^wcr}Vg9hZ_gzaOt+5SaDFAsfeh(PU-4JH$^IU1neC2dNV=o0j|>VvW)>k^@L zo7y5z7)n&5wr;P}+^?w}@P3`nfXQ@0i-aaB2lvqN!=E z>8!i{QtQd8l^MrFS$xs>Zc2Qw@I(oI8dtxOumccR_i+OhcU^z1UODZ!&zzxu$*<$3 z+OJZSh@_j6h$NgTLE3l2mK&Tmi1YZ0Ee9I7$b8pxUWrSqDGO08FQ(D1U-i7Cm*-&0 zIlAj0v@6wRASM3_usqzsZZ3Ng-BOQjAnu9@Q8mH)MNAl#Jx6ssXW?lU zm!S8kVh1ofLM>m+EV+Z=)u_HLdq2^GhG|EP=cvu;m-55U0L$mkGz>?(!&-&P!nso3 z!FDx%V0--CZ@oklpte9>mUi4RaX7Jn ztJGb?*o$6X-U0l&zm&V)yn6GH;_J@svB)Kp=eoxqQ&!`^?T_yEoV*n8=_~b+d0+D+ zBi8)-YvM4=?;_S?tmjH{jv3`t-&D;itvpXSxF;e=ZT8l)wc5xEIRmuRJi6b*8Cx|* zVy`F9$2f7DO(|LPKj5TQx=wHo_x%uoY@&ANl8C8mTg66SPYxJo=`FzQpHV3&dY_vc z*3C9Wk5zq)YZoJ>X;<-e-ED-{8Vc?7H+#LOw}O*h0JD2a)zH@ed3B)AlS_lVSy?k9 zSqQMj(}l(3j>ugbzQuKS=N39xTc^htJGwrWbM|~kQ^Q^8E^mi78k9tb?txhuHDmA8 z_80Afh?+t7^kqhsxhGdJ&+^bZEU+6lrkjx*hh3L*x9dxlMWxFOu+w*a&*?1w5*$OF zKsAJzB<&6E;lwG5f>ZVpa5FNy=JmtLZCwUYEz6#NoY6Uv`fLaA;y9qb*<(H)qPAHu z7}iZY0Nn%0Mb!@+l|C@7>7e(8LuuC%Qty85lwCTBRm#a?a`a7%lU6kBz>B_#8r|31& zudJY)?oZc&+roQueQ`(9KnVV+wea44;CyXhh5Vs}=fe$>XNVW~Uf8^_U7M}yGhjdm zw{>>_TLmhe?I`<`2_P{1a&5}TlOs&`LNYRFx&&wld4w)fZWP^jJ?{*39;+0Z zK7S-$iWtnF9A*Q3)*cA7pw4U7{3Z0GQUS|>^xnNOcA71dida1YzVm&a03fnx^BE=+ z=O?I!hNxlm48wTOUnF!?j5H&gPD0m$YfZ>l~;YWS?Pz;e|ER- z0CUNW$U?Q*!7)AM09_T>pFV_1>t}Kz^M=qOpw(r%0GfYfEm%iS(gfl0WP8r{*Qx>o z%SruLI%?b?sD7C3jShsgFKD$JHCTsS4e*|>8E@0J5+F_S%rR6*qIkY|H0aXYrlN!q zt!qi3_Vavt+$7DfxvPC%t#9fo&qg^S@n$W7DPSnDWxtzD`SmNcy+8fu*cSBy=C*Fi zxyh2M+_KnoBNMYM2E-TsfqO${@up!aP(L?t?EM~X*L%-7!Rzz*bl-PxR$ESvs?p@M z^`Z_l)}``@qrA*)WDgY9KrhN~?ddC{(dfrMoL`HxoOXk1*p3j_=ZBL;3j?;59OM+6 za35tn0)oEq5`A{C?3Wo>Mfh7*LJzoWc8HZRJmV&DB_B^sy!hsHc=dMz3os;P3=9c` ztc4~IhnK7yZJzC#v0146wxr13uwess+}btrMqy@V=5VyvyZ1sWi7gPI#_TaD0y%r* zeXbj3NN#(l^KR2ci!e3Dlit&J7(oxunawGt$T*M4t&?@`3H*GaDreT$$uH z{=l7l-}tDr#2ZqYYdgeA#Oj6lxG8Fyl+}r!*HM>ddMOByf5#}%WPlzT&C^s|Eq8P^ zVL{5;wVE6&Aeu0kx6cLqv=BLsaqmGHXK5j* zXub+!_vI=w2))T>%+jG!?LKLz2n&F0F* zdqX!}IGNFqS0w53M7AUY5`lKkDJKSS*2cDgZ6*I7AwQ1ZymrU~2*U7-H?&N;n zoeDU(iB83MyW5{Nk=;UaYaFgP9O1$Dk1}8yJ{`U*^%4VB?vg5oxe+%$_B>qe<4Ir3 zZef>d{w;J`jp~^F$*$Hq+G9O7Y9v<{nYqtmYM%)v+~*3liD>1no*Yew(e*1y(!kT4 z;O{60v+9P36~qRzz4*3Z+i;BG^SvLr5k)s{Bpc$&%8(}aT6&$*MMA|N@2kB_TRVV9 zXywRe>0fTGt=jYT--R<1li#J!pyuw?0`5MgM-P@Pd-s*o$ zGWdF2vIDSe%&gYzOw?nh;1^ucz zWfWH+Lofr6gEGc5v(*5g?W!->2->|S(M^$NN8R!cz+&Ldxe>Kj&M11zT9J3YZ`E!G zP-{?O`}N9NW)tV6t+ZGS;+KL8(S}zdfWz}2zCLk&kxCWw(tDpYX z^;qu8@$h-oi_QM@Ou_TmTpP8f_x(0Xz4_*^Nq2Rf!3agh(yIR@nR>z@0ONq!0QxSxE+N2!EYENg2F(q!fm1sOWh^?E7P zKV!ynf_r!+KA!93{LW#qxYGiDuqlhlYRK$hfq@u~c$|oHz2wJU$r(81e#K((*- z`=`GFF2R*}!%`uOw(1IQ<;5pXaW7-3*!dOB!+Z1KiW`RJ~Wc%{zeezMEAnX!!~ia0$RW$o*cx||DFYHdUU%Qcy& zw{3J%*?b90d7#TEe8};KNL-6i-GUg|@jS(28BTx)352^GfS-tZJCt$RPBrYFwP4W zoA_OOS4+7&?D`d!j}R7P;Fx<8o2Vl5UKKmuh`$((phU8uz258TWd>p118-ktsAWQ)H+lARL`p&-SSJE^kwC8L4pzD?1YVd}~F79Hi=4Fxy*6aIan>A1fzXeTn zzu8tQMsJ@wRG)sIsVr1}`{OVF>aYL5>-TR7{96M5mcYLy@NWtH%SgaFA@{dC6_-W!T49 zL9uw$djf^$y7swrk5-q3SC#oCs*-+`1B19XQ0=pouB0!ILZHV*TEGOF3G;-!DO4Hjlq`K%ZpXuhs zS75gS{;)@<8s&E^NXx;_I(ZX6ZeFY~&6UsMq}yA^9)5N7j3C-QFvdB)@7l(#H~aS% zQ>U)QmO6Q}V89Trri~j^4H^d}C}a0;y1;;kds<^ao^IH3#VLQQ6Gq>4x7^7On;i5N zm*~bh#~jbS>Fn6d$}AJ09#O4e_94g;OkqhC8|n1j^}V$-^#w|=;1}MTxz2Sh;#k$k z>8<9-BO)WewgFSNuZ2!T7E}Z7prM~OSJH-4J;{GEKK!b^ZDtnVl1(Tr^OmnGKDd4- z7t|la0QtvSM~*sD$+)?a&ZGoxN~g}s0zcE&9X^i5M-C;9p&Kb_Pm#B2aI@7}a%A)gFl5Fg?8@fnnEw%EySDZDBqV4aL!7`_s1jKXHiX*^MtmzXUdmocxh%*_#?yyg8s5axd zskkR5QQN;fN~!V9d2g?;n78mgfaOAju=2$e&)Ft#jXY{;eMzE@S( zP3O~u@fzeLG}s%_v%SRQt=Aub`m%5RvfbE(tD1y^+yY8UKBh27_;o#J?*^t{q8Vb@ zdD~b)Li?KUu(C)QQlA4ul^VUgtB0PkGCN~RE@_M?$yPO&rzE>RY0oD^kmWhJmQrl! zz=EQY$Q=QPf(2)vq#x>Xu;n6v?zS+nhA!G!KTsbs8<^Y03AQ9s+unr8YqEyF`MGLr|2R9*2v4}3U$J@%N;}B*&&fV~ zg}r8sfx@hTBH-LLxfMlBOc;`gSngM}cv`$B>5}zqu4j^+|15b*3leAz)AHbJ>bAc8 z@Yis7d==bSayR=a#*@nsI&EyRQ${T!^MJTTIs+}M|LR^F2O zvlIJj?d}E)d4aoq{OI^fxQzhh*1A0?tOwdbp(E_{kEg#>+q$5Lo+X};|LKeQo5Wh}TG^5AmJUW@gQMLT8LRPtFFlDi|E`l; zi=$e=z1=H{E6Vsz>l@fp$$mETO_jfu?ZYjEz_ehoj+BVeFcI(5SF34)${f$OCZe%~ zmG#I+5r(2jYy87b)JZJII-g3}D?Un7A}NxZqS#e0UICWPxOuFd*>FYr3%^RJvj60p ztfPK5Lo6M$lA~lCMI3y#h8!C4=2`lT82SY9T9$pjDV!Hki-6en^m+PpkeuHQ#bW&B zT3w5QYJg#RX{q{QYU-n1cMG_Vt#4mWc^qKJ!4G#F(B$)um&V&W4Oj%%!iomw=mJO` z-`t3gQWu5TV)5Kqoz8XG{es*e7f-XNk&IY7YRSh&=`}UsHhzp>2Wvu& zN5OVXGA5vSJS=qwkP`Uv5lTjLL`Iv`#LTlafoCB;tv7lU&RnLBroqAfp|)D}CrXmk zQ$qNN&VSRfcfT<$^npF_OkGpAcFkt!v`_=sLQ$ONKJ~9QU6%F`S0Zb1Q)29>X-39e zwqk0p$-Z+_#-;XQhk)86qlHAJQ=d25d9_)oM{Q@=$J*Z1^_`$o#|v}c-pmeufTMU6 zQ#>qKVpgo{O^N3EMSGi1uoZU~FN+hc+&~^Y;7eVF{rs@#Q*#Y3MwcGDAg1P7GgL#f z4aT;SFv*E(!Cqq>B9Dt0ao@2$_2(1MoEW2)WE4-dJb6%k<@F8e@WArYTXM-qc=T`% zkrFMRgTA_GM)6?#wDVx{!Xlb9YQEK=O!)Y%>|{n8|5>bAF^io5N?D)%UVb11JC z(FSckGfZT%v5u5zk-?KyxnZS#_9YG2q6t54bu5V#IrW*&M`U*=w+*KR|yj$ zw%F?LhP{irNfw|d!sB4XjcUsh-2hyzK5*T8?zV~fd3v8w)eXLNJ~9pJD@t{ak$H@T zPT$W?f8fu|j|+eQvc}1uIa}OFaw?+-RJMXZplD6uXZzFcl=G<(51$!^J{rC~iG}H> zxdwdx#&T`s=K=E6VL?z)o-<^2aie4I_FRapDeG`hEdq|2boUV)FWgJZwKn+eAfiX2 zfpQHgsC^*Uj%8WhPdPqiZ^89xReK~P2sagZ&v(!JZM|T~;dT<++P8m%PS3#GWsIh7 zC7c|HJ7uF(e|^AYWwymWoLamH(|GB#qy>_x-bEctUvtS_zu4l_w0(Q~PVj~-tvsYA z8S+!uIf^&6*G-hA8J&brN-QjqAs$T`AJ3z}vhSmm3Ea-=lo(B2kY`lK_f_(DLRZ7E z-+@Zvi#!+&uw;hZ$e0f<8a?;IXxD{ud;=78M*v0D&QSoFmhK*=sXR71Zvs3mK&)3!kk)3VUmBpH}Q~sFJM3dcINw9HD zd=U`n=Itf~I!Qg3wvOJ-fg-wh0Ohl1U}Lm9cXFnjT0P-DD%L(WF#n8Q9Wi!go;)>w zpP`*Nhi@6kb-OV0l?}V09y2rDx?OFVM9HEPaf*~_Tw43bB^SkoHh#S|c2<+aw45lg zQ)?N89s8NR`eJf0)vmgo-*w=U4lw9N%bjBFStiJB3~!vw8ZRlPRO&=i(&1f3 zsZNS!h{bAl@OpEps^>4~1I=v*J%j^ z)aIur{J@i2I2>KYekX2l{3(Hd=RSC-JX@TRnce($-_w8C9r0h%FaNJ5hM!qi_gYsw zG*?nTb0#z^8u$D|zbga4ldw?Z5d_0`nD3JRi}mrSS@zQEu{6gfze{%L&>^zm&pXr5 zV4HT{M;V8{lGqKl+zZzVHN(E?VEb}(^uP*J6tPDe4BpvlA<6>|qV!i+h2mXLS zYPDm`*HiDRd9vJjLQEP#(RHeD|3-#GuXz2^#7RIgjvcviO&`XMc2T&&z{6Vh{Z3ZL z0i6wyXKG1AS*6{2p*lVqC>wj*3XQAW9bwvTd|~faW@dI8+9c4EEL5H%TY4!iO@s`1 zE-DvfV&;e8?$K@ieJe`zT}ykIvNJ3LS(+v}!Er<=J9zhuXPPZz42R&aR&{3>wNPP$dMmSZm~Zcd|2Zb^QNxak_guy=aNoBJ?Rg_ye(18G@vMoc3Vc3_WwVv zA%E=rUrJz0xd|>eUzqn)R_;yz$<4m_mgG-z=zH;>yrNZpqWp^X+aJ$=l*1qO;Qxbm z@YA)gf3)>CNK-^Vd zIxS>s#wogW@ljbO?NZV^zbAaEkZn9Z#nRzU|12l@&Js$W`K1DqRV>JQ=hH)H7S4>- zt9&$;wVY-91oWT#HhJvYH<0w=-al7>_hZ`5HJiqKVf@#kQ|BwbbIvCJa{Qm8=nm(C zlwU&ST66-T_~&He1g=i`&j&8C8j)Ddy?yyXVHRiL?F*~S)xRuy`%X6?HtC%+6|8`t z$`~Q@@BgZ#^rwE{%$vyjul=6)_I`Epk#9BaZ-17q1gMn^Qtmw%YVN9J#hW8oTM@3% z1u1}cHTj`DG%xbzgcES1^x@GX76Rq%%K`yk(C?1>azu9XvLE}te{;iGp@?1xfVRda z8n*BCMTTFw_)pb`qj5dd1L4mS&x;9PZYdQ2{LcRmOtxw+TS@Zt0k4GXP{ zcYL`hBAdgvh>q^q)%ga$jTbBRbBsHTy?p%Jy6K!spGCgA^A=)y3mse10hljb^z! zDf0z(m}>|9y=1UqD>!3s_W^&po`GRjT+vucd9i~{OlQgSsXW(R?U)o=hF?49Rwp_# zY>>2O(gIc=V^$EKZ}ijggMbcf0soT@wDG&8T%8^}ybDD~vK4_ql}>NUY>y^A>Zx?v zMhBCH&m}~%N$cW@qCV+fe^tyu+wl!e1kcN$wm6b$S}UbcKb?8G@oi~fNbRagFdOTJ zNu`=X)P)c%e;>J<)G=EiA8IOfgP9A}VBommA{t}jS!Bp=%uLB@3NSe@9SQSt4xiiJ zfBH0t-pX<30m)ku%i{HGiPwN?{SWuhHHc078R@fN8>{#B*ftQr5C;LTcEq0UjXqm) zC)C<=tzy|jKVd^C*XnTsIe5HL3N-FWlKwKC2cU5|_z4JCFtYMnR5pwWX&Kl=RzyIz zsDOTR)9)6o?Tyl5>2AnKCqVeav&V+n($302^@sF%0k0X`qEhe5A$L>o`WKgOfqlF8 zvjMu_RJJ4bz^&XE?Q^XqDB|d;jnbkW)zt;DUCCynA1kl@?o>knYX0-?v~*fUUE`-bTmEI5{4_Q%bgGQ+MnK%qqsfzk0 zi@%@fw>YQZS~A_xrV+v#fo=GUryJ75fvNS$CpAbXwN@b?=B8a)r;;6r9S5XDf^1Wx z{tP%F2<;bCSap~j%C>;k%^|a4wbY^hdPEade~m7?>1uT&RMT+Mmyxgr*_eAB=^xyG zdPiA(cBeEU%9!ETKib8}fvJF<)Lh-+%3$#3FzcDuW?D5w?O`O}iWHE#-Ff8&nw5P& zP!Oe;#w;Bxnw^o-?YjuNcgEf*`C~_KmY>bxK%w0+S`gPI{6zD#CIVMJn?KD}A04*s zf@^Jh(e`S!JaPi`k7wF{sZyJcHqLwP1>kdE3&0EL-FUo0H)9u;&xl&`WT|MqzPhkt zk!ji0u*ZOIaZZl!)6>h+EqcbL;%sb04R#S-;X=Ql#RE%S$>yx=mI8R1HOn9;^< zZ_5RL>7?_p>RRH9KJ!jd!;!o(H%v=3-vXGrle=SUhTVouVwk#^`XtBQr4H2Yj-~83 zFHZMG^1L_#t`UNeL<=(A(Qgf{?eHFmUx;@qoOlJ}oh>w}t?(8JiID2^ANGYRgTV7c*Ag&~m6YDU=h zHFt0S`0MZZn0LZ;oj-QYrhK4xO-X3c5M{c11yB*9COfF{7~ewiO4iHam8ij zudc|XRrklXiwVl*{xx+4JBZ%bcvdJ0yGT_?OL zFhZALzF)ZuX=k}s!e7YB8u;G)c6sdlJv_4c*Hudl2Wx;1-StpZD z)_onN4OwS-B{>Y0 zR_gPV$H~FId%Lqrt5v~!4HzB_Y%d7$VAnz9HLE|hR<=07(P_-oR6vhm5QtgnGVI<# zE}QS<#ao>-K$8iDB9zsDriZ`l>&!szt<}%xgw{@FfwOFL-T_8ES5KB%BOWK8d9{W$EmaKa+Y>=(&Pz4SBW z@~N!i?4*h(-71Gkz>(XD-Ka@55{Bo~r>&3MM$;d*xcQoQ!AB0?nerrn zmx{1p64?f2P(I-hecFtn;F6Vnr^qEFP`!Mp75QNDa$AQ5Z>kb)6OX1Fq?FFw ztn;5tOW)eHzmmsj!tb1ot2~9BaSxo@P!ss9AUw9ux((WeF%NcM7()%VKBr>50R2YY zSh}7axJ9>NJkz<=d^71}Rsh&hj@SyGB-SLRo;ro7j@E)Wv>G^icj zpO!tl;Lx5`3GQ*&MlyqZ1&WR5m8!4^cSv{U2ov5B?ok&<)8Vy+c{5rFvY>Hv6Z>3J z{&rgE79yplKI+`1jIM-YPmxJj?!{uwzMRa0yhKZqw}>0r;tSSt+@6xySD&a%bnJc2 z9CsGjBHbZmgV@5gxv2w&MyCwTTqnz0*TRw(lI=@$%c^u4cL_G(a`nJ4JBtbX@8|j+ z1!{f!oU0-*zbaTLP7T=5&Nlzv|2YsLtEJlUccV_eKeSzbUhA++dK}U4rcKJ-73bY4 zZ2Xz(k&(ex3VqlXE4C+Wc`d`I0yd+T!9AO&+Z?{z!KZr1mXU=q0>^&yW*%HSYN)rm z-g~pPJj%f)jVh!!-fpAXlx;ScWOy{?WnTB4GmeOqgLN$ff+%&LGMx>Nvm9iMyNQUH z7Wfn0%h5Xzlg~z+cLg2W#T(}*R3}C~B@yzkZg?gd&GE!!I(uZggu$u03fa|FkUQQSqi<-%25d@Y^Q{;mx(NkyQqF7&tvy09X(kYs*W*$bxa_(QjDcx z%)U)4J_96Zj1}8Z8cHOweWKJd~&u(7Q}p~q)Gof~SvzZ<;a zyOqDbHnP#%y_MK7S8>w#jZ#?ve-_!Y3fU-=RlIzgiw}7zGrFI*xENj? z5fiSH-@;o8WglM9Z}Icf$?zi;#2u2@#dx#94QkkDwl0#q2a6s-b0u8yW_~$Ue?A-K z3KfQ-qlfO|FmUw=z4%f6irM)@qEtUbeAu8-oTGagPr7_{@;>~tzNU|++rVhY=X=hd zQqq99pYYYbaQIiHOuREN7^Zwu`qvpGZwUXV9Lm(wZ+=w*)y)@pRM5IlUKR%8$mOF} z=`{-1sLy&=Otk!as}{T~+%hg6^9P5BaY6iN+KF+`Pp!rjL2@9N1C&psyJ&q8srzx~EG#>_X7$AeNu2ivi2G zVVVnWgRV5Yl9^p%oq~3>d?qexC6u2RX-r@@xdIx8c+1e$@XMaeu1!5|Osf!X2UnuF z^nzGt&z+749VIhs6#~0l$qLKYEEiB-ajhaEsi%z6h-FeLvjgRjh*m=6U>LP);ckEn zM>GuN?jnHlVyb5p_K4SAI!G!VWmz&d`}#fWJ%XZAUQD>_Z2r>Y$iOcvoT_lxVX|yX zp!FKd0%<9tw+3G;GwZ_nh!`F~Sp zsoHQVMaMY4mb2&S7<>58^9CsYdZd2h9po`zpxGwA(nw%E#EX0?YAP0W!b5de z3ykHAZP(&}X^AjzRq!eygO=!l6uVvn;V>rK_I_S%?Hvpw83^FMC(lTFd#G1lXvPxS zZ)bw<^gTMc;CHaLh`}r!ohAn|q$bV(kQZ0yQVHRk_xH%%s^`{$13ch*;*HX$mlLOV zN&_o@!^|AZX>9}W07-BMo7ij`+>99@;k~T5*hWj2!Cm-`!|;!{$br7iFT(=I;m;zo zOvaKo0Yb`roowpaG1q$Uk~zNlO#9jGtBcY$VMO$8pQH~c#biAaDSWlLQzh;kIi0hU z2+uNY+>aim<0tEm+Ib)LYUdF_r{h8B)WTv@ZJIz^+bAO81j=Zv>p61;E-)AHb+G`p zf97(zF;6_{wy<;2D>q~{d*-!(;fCEUYu`RfrPo=v)6#*2_u|#BzkRWEyn}Y37c2B| zbXkNV8YLS$ya`JK`_GRZ=?iANZdUd$l$@K$*vt+o*H0~(HOXsfUJj96mxa5x<~#!{ zTli#BST`Qa-V518)Q76aFEk6m7Rg5>`17bf^EwMCF1#ygI2zGlA#WV6Af{y8pfw{f zQtbgC+a4)!Kn8|`1DHq3DTK*<^|pj|u*$Q84_Yhm_7X~okGPdx-(!6iRNdU>n4+*K zzRoVXyJl^DIpBKhU(CVi!M5>1xw{Pw2tF2(3nKZ zi_V$RtkYr%UU~hesivvyV6g|6inej$9$j2UXAwrGNl}9)6iDA3+T2Nv=iQzFpo8=aUrdOcCXr#ZTXOo38izWg@85Jbn(XbER1Wyd9X~^XreI; z{;UgN23O-kzhf6SWgV3P9rXjkWI5g&(sIz*n9}2Ce|%(YR!W&NTXq13e%rd+ZGel$ z4j!O|OhgBixMrDXM=cynvXIV*0>vX$%Y9Adl+l|EvOhQK4#ymUt1FdE@B!PTm#(}w zO1n+3o0bjl1rHKa7zlAM1gt8AB3rcW?6kEiAAV1@Rfq|NFME1fvpmaKN(YXd8466M zqXUSjpsGpB2{4=wV%hfkHbu%U;I0R*LLE~IgB63uS=+#lO;Ey70G4mG40<%vyaC{) zUPmlm?cTyxfl2LiKHG$LE^fsFsay{SEJnfyXk8}{&n~4HC276q%vT-|=brUoF^`sD zF2axTcoKWB1>!|Neh$#5R5-X)Qi2JUD0vKQS2HE44I3BT*f{rPutDyIH!jDDr@ zzEG@q+WdQH<=^?Tf0)Jl+Ea_GQK^b^myBN(Pj>ImzsC5H`Rqq#%dbYS7{9$@R0i*_ zHJUqPH0Sj$b3gacey;j|)&?HeDt=7#4@gxgsDCbvKl#kSe0v<nm8D08^DX{;81EH2l;#}$)K6?0fL|{al`Tt-i z{{SC-XF0B&ssHi=eS~*3#0%`xg9L1o|1~}2Ft@#awe!_sZciAgC#>;L_6v58uy&8u z_ixp&{;M@ge=PW;JpNWu{-_TB-!_lVSO2;T`3LCe{y2m`O5mTp1P(ZRGy#-du>dP# zW}V3%qfgNiW;PqN9!>4hV1`;ohoLb@SL;}gC?moay4pFMmb3KG+fy0CjfgCypI}-R zx?MfBX8mPakY|zQj)ka*63SA*EnF$Xk^_%v`eqs$w`87{VG-D8-AL7i`C&+&qN)2L z9`BldICwF^|NOS>)|z6yLH%^tWxmCjKO2`?L}kRZxHScRVWJbt8K{XmIWp9sDs50P zce5`j-YrMBva%m^(I;e^XGUuaMfL^j?w29NhudD@(kJv4P_8eaoe&>3b*V(RR%Jg} zM)b$7ob_>+v+R=bmrh?&I&7bUeEwU-6&QWKg$^Xw*sSjRHQqe=yT0=4M=i@<6`!Ee z4dRF>ht811$NM^F$?5S708uRG1)i5_L$aGKwLsux?`gGM~kQzr# z*9#OVE0GX%5a;`}6usuL@j#cpdFTQV<6eulq~^72o;D5HWF0Bc8{VX+lI!ZoxGxE` z+?vSfIcV~Ca$ZKQg6HJsA;z*HNzN~xh7w(}?;|o?pU+D+oZzlY%dUsSaV|U9pxgxS z4Y97gCYvJ&e<9hMj!rvuzL+^F)n z?zp#9ZjsVu909W6B__noaDe%~Zo3GWxhoVQRs{0vm|yNXHS7wIb1(n2RAC0?n2$=H zGh4&c(&alt-jNzU1jtjmk?&Hi*OVg;vk}@%aLAiuVu+F0)>EnK!0&D9* z75A1XOh|fgs#GB4>)y*?m7yfEz0MW4Xu~{O0$F-c4GPzG6KW@>)F6x7d#^rHh@v-7 zt$3MiPg94SECfPZS4s-AdE=aU1nKub76%~AuvZ3T0v7Z z4B8x=^-8{Lr*AX=xjE7T26tcZ*v-0it7|85c}JSn^btI>-46b-(QRLULVDfkkPz^{ zyIfxJWq&Xm5mn(^e1xzWvtC)pDu;YaS>JW@rO&l>v7BOH@J$@xL)~r4PElN*IeJw0 zGopcB2HOy~mQ|a!uOi3O(>ngB+7*8wo`{jFM3&J5EVG1nYqqZ=*Q$3{&!2l)SxvGK zwUBaQF%hoE7GAb4iI)xliGi*Qdo@0E8E0M0H-6qz$VJql>QM7y1REL?OJR&gqWkhv z%I#OwWX?mntwOMZl9C;}5H9xGOL#E7R#m;h@pGaF;q(&-BWXozh4O%vv)!(e$6V|l zSVO2m>?>xlNS|u8duP*1Er*{pNQ1U9%*LBejO>E%P8Y2$pia&lBel_uD&zJF-Gt_F zWrwndA%pcrtm`NVihu)f_{+2DR+1Ehz;D^@4Sp+~7e!axg_z4Q`v8AweH ziZ7IWzOqCNNDm+eq5~{blYbWp{ulLD|Czfvq8*g$5tB5~!O4vrYEgz9GzZdrM|+H$ zQo8NRxG8e=@-|;Y_lxU@Wi2f+bNeG9>+XkVG;i>Hyjju=_cm+yHup_jBUMngM4s^N z`FYB6mWyl5iq&5YTh($6mfHU`-bnrj|^#rJhSF2y_E`}#$fcV< z$XSkFET`I{(e!|#oi6y#CG9i168M%l^y~2n9p~6Qdf@1|i=BuGXSoUOl2xX~LkIG? z<-VOwU`q_c&5z$z)+Qy$SX6*B5$e=X;l`PK@uw@WR!uL_nR~ zgiUH7OTDdS|?n1~~<1df{i`?(%2$ zyA$^y$78hZTe@socu7Eq^2}-0y{9W{U`C3K6CETu_Rk8Vuw(r{oDq7`aMaMzqBU{I zRMslkyTR{9hfU16dufvobV+90{^K|1y&MObCj=F6 zcY!UUO=#BuYj6o`Ipe7Uu6C-U2F>iV;>VoyIWHWSz4Ga5C$ckgJ+>X(HxtDg#dlJ| znilcDB>lLZm$S3I%d`CX`)XgDMPh$=>*t-vhR=EnZ5LiHE=|V-(PMBEu#@Q(5)v^?|v(0yM~(*rPW%BszqD7}1F*xe*D$-l z9MBn3;cCkf-H2m;75wS*?Q0J58~zEpWBV9?+wRscEdPo-UJpFo;h62_u4n-e&(?sR zTuScQ`W`8PtoJURD?W&alOyfjKq|-Pw-&eOf5Til{-4>f|7*YNlues~d`5Jmp2V>- z5vRuj-rjL*Sm7%8>0yHs>i5$%oO)YTev_|n3}T_+p{lb?)tAhOJ5H@L%A^9B#f6~> z+nGnt-@kWKOzk3?xHTPAZ2{FU*nX{bZ>oAqG45nFv1aFv z5V(lLSJobpQ~jz!^@hYv=!|MtU%(AWW#t@6Gv$z7ca-j79bpPfebi8X>;7H_K8KH! zw`ZPPv1HJLNFx$GtC`s#MVC!$!3}3q2UURz*aFe--t%DgqtLL(D*C@^Zh~g#-3@!`~t+mrMr8AdEi|MVGhv4Oa@Q zhG~}qr)#Un0{G7yqj^2PaIx71%3)^kkkwz~aB?9X1 zI%=}RJ^A~4b-J%(Bu!Bs%pD|}Zg?}DGR0HGtcJhfDLtFr{A^bD^DLZ+098gLhe*>6 zG1)J&iFLZa?V6;Vd~yB53FfUihYbIWiR@q9?#~?cRA)AexLR)5kd2(iohZAL1ApZD z{ns|C|6p%><{Wv7lj#Ard_*&JARNrVywfyNj zJv|%UFaCp8{ZFzgsW2_8;DxGC>-^{pCH}j=8Rh0FH=Mt~o`(H1&IBb5=|Z~3Y7UOo zyrW2x*j@tu|Cbk3|K(RzLu$FRJ}kcG@mG&>6Ux;6OkJnX{#hdCzt_NbH0ff=;VO`J zFf7W>_fIR0d*+wzBHxOket#UUsPt*WePWVMPJHnBhsPQGPYRXZ3MN$lwPfJ$Wc_Wk zN7t(7zG(_PG~o;Pfdh`#_0B+goXWs+3yeFuE??)tjSQL}b!gmKYExKDD55amIc&3X zc*{0#5wZIoX6cz}7l)Jh#q&SAx(pULryCQ}HrKyfuDAdsqHz4x{9gqs&3J8$bU>>Fp%lCnA4CvJE@=o$~1<+U;_$)e=(n()qhSmgKT& zLbfBI&h2TkD4p~aTxDJvcYFz=zlqA|gX18v132qSkbVsrp>I(#BP)Xr+MiY=rU z9~Z^u{R^Yw?ROmZve z&Xc7QFWNUxM7_;2zqE{qK{2woU%n)&5A~Q6JZMqn16&UTE>2`qH}XS6QBDEF`Ce&& zFz1-}vah+IItD&HwePF(E;&U19C?)nvOo$jv7#~>|1{4$Rn`cQobIQ5_D1PO?Wo_~ z+vhbVia+3Dh!e$KW63`_m-~e`SnhbmsP^ZoZa*&>7N4{-;GB24SEC-=w;VE+R-DQi zvFl8LGslA~GnNuPm{CKC%OpiO`|{eup7Cz=SXz(+t{egLL7t#c?v^+%OclTW+BUBa zbLh&Dckg9bC;XYaz!93l(n*|l5XzF2N4th!R?qeuaTE7w$~tH`I=vU#)7NL=Re5#e z+Z!~mmx_%lJZY3zIhH{!OB2uStLjNM+^nzo@vJ9I*SondKrsrBEk*|zO`b@dl|Blp zT%FH+;6$G=ANr<{ieEEdx9EAbykYmX6ubLLSY7u$zXF<1Cq;*`t)eARso{(5dQ2&d zg?0v!TH=F!1{Hv{@)dNsSXGrXwxe6UX}5Y^!=wme5iJ1^%4HdzGc7_nMl z^8#4SWw9C;kf^yYFM2N1(DezAVrqZhy~|xZGEza44o)kgYqY)n+c@nmQHO>-Qry4+ z!z$HK$CwqI<<#br>2YR75ku0&$w7d#F{KluCq#h>#o2T%+-p3k@`t4^I!PThY>53s@M;p1&I{$Y?En~WBIbc;e6i~b8zHItz1RnvJ zdxqTosEPj@o{gNjb{Q?p&vZp}vJ%UC7To+zqw7*K@6wy*;kpg7%F;-ijOd7qEQ@fh zg@Cf@EtThe*2YWc6&I@ljOoK}u7^yAZKHATEH(NCwk=)MK<^48bd0uN_X2c7aN$;DtfoYxlSGPSeIU?B7A6|e&NLqy`qls_^7Yt&Rmgw%Qgv&T8Uop z)8*+ZXr2RjB-q&74iGka8FXgq*{Pgx% z+z1{{XA02GRAPmbtpMf=Hx}hdJT7}T_$p^$0*F-mJM58XVYyxSg9&D8S)WgjuX3XF zRxT#2;I+YECpe&QJbyW=ZpApx!l3|>=BmDkd=Cja=KC;n9w8g5La5Jqvk`99KpI~a z+ls60))A>VCdB zWTWy%!4mPI05_hjV?9$WO}z9}=Clo%L>RTQp+3wLgmfAu!PRY=YOMTCmi}^;x_<&G zsWapf2U1jesfAQ{r`a=2QnxClJxV0>9h$Gyut={a6;}6S=(PrA45oqA%wYTUD6Xz{ zLSNQ&ax0?eSc4a)GSJ~;M(?&be_A4If+lhc0XWyyrqbtI`Ykg8#euM6-2PEIBb^*V zChXpJ_1md{U^&ECM zElK$th_BL#MugP#x=q8N2dU$2ek80xrIO;FRTJ1 zVvx&a)7h@O8TFEWyj*Qzt^Q&;uCt|kBa+^ad;qI%Yv zXzv^zjqq44BbL&$2-5|_hAQe3S^zhR*wIWkh;8r{QIAiRIJRfr3tg*}`*JG$*@);C zxMLUmSrer^h$LFrAvf%_=?L*F zN-rU+Fgq$PL=`VLssOr+=HVwl$}*>_+IfXi>bSr$$!&{#G5gh;o0HNV!Ikz2cm|OhI~lT{3Z%j&jIc5jTP1SjtX6H z-EoTF2(i{uz!kAYy9E$GUg<%V50SEiMTshV;0=Hn;Fvp1HCkY|cu;;HfF#Nth9R^0 za|exoUSkgT^ajX8vw-7-5j_Y)Ky-9gd&*)7IJu9dT!5z29_fwq8kY_)-Fz^g-G6-P zkx*m9o9fARRpZ_fkxQlFqZsHnmJZg{uHEXpn)OFR7z!}#DI(b<_fd# zx4nRq=ZV-(BzG^imYWj@25NGLTreHjVSUn$f#~{TV_nn@B2d2 zim2H%8NAL2^C=dbj;{Bvd9;+`hKN~o^5)64Adqh?-YAWzFo1v~;BkF}(0`TnkkN;J z8Fiu(L$qWXaA*me?)Ag+N%*r&8Z2 z)d}U}K{GZ~^KKYI28-rnWHHG{r4*XfgmkgDVk!3m4f2w6@{YiiT|!C!0aJU1AL-W_FFW~| zo++$OzYb@#17Bt9d^^&uemxuJ#)^yMBKw7#mV3Q+=w<^P)Wo*N38InsQ6Nfv%`l|u z{_vBR*#1mJXO2%lBB}|(xzh`t3#rY!as}pwCZrOmR>k?ce*uMj(wb0Ko`PeHm48@I z5Iz*s<->_2HWZ6M_%QVx&YMi;XYO2C;O3W=&#K2HqllQx(#+Ea#pxlUKngWhF0Ix% z!*FXNE%`b)7@w|iatA!WcB+I@lQFGaz`&Xx@p^@nH_XM9F;S#ku!^k$J3SSz*uAh6 z3ajLe2qK4YK_mjPVR;(2y~J;N*svCPU?szSpc2#7ux=ty6*OIT?)rNDt2au{Pj-j> z=~^x&MS*V36k|;^3BhZIxm7D%y5Q?yF(#&0$CxP2&d-S~%>=vqfulkKRZPdi`A^V> zbp7PrK4U}VczJw(FpC-{*mtL{pmR+9Y=Ph5 z_k<2MMYU_4duy9 zx9aeop`GvYdjiOQUmKVuap0}FV}lOxf-rwHVF=L49v1(vSRmSN@wVkDnHAE z85#ygOdv^<7Xy9f&e)iJqm-fh2px z3T1(Am7f>H&SE3q>^!R|hv0t6hfdlCgONJo)*ZW(k_SOR^lctqIz*iBS}!CpGA87@ z6SQ1q)!7YIfwHnHQdxPY^vZ_kh9FnIISFXjLkNmXg@zI?d( zQtY+>tkMF3;?YMZ4(F{h{l<5;V#E6*IrPjjvO&=F7pJ@&J`Y1{`q}&PhKR;oD6a*q z1%W=(rA(>E*dZN0-gO$Fsh0sE!SKmRX!OE7CW*lIE#Cu}&>@^6pbJ17YlGIGEqS?o zl~n{cH0X6h??hS7jHXG>P?JACh(*4bdfZpNt(AbBVdo)0fLk9F>oI&dmen4r8Jm|w z2n8F|$sM6^_f|oDbIK~x_vLbw^_LH1W1{rA0cIKpsp>37)+?Z^XMIY0Sz5hULM#;w zmYcgkIi-+ZO1Cj2TkgE-Sh7JeT>_yz-hw|AaO(B!)6YFp@LTn<(4(p_jllFWDsBu% z4OEpNPIdG#@^HlT8zt`={TIzMg&OWoAZx~-VO+B%~RsiW; zJ@<7J%rX-%_EpRha+ZVX3AKs{oSrS&A%+bHIsS#g!i+9I0?u&-zW-KLo!5GZUU zK-}6!`B7LaD)c#U`12TgjIX`PFk_b;phwEFi-C|UHWXD|x)=H2>IOf_gL{1UmX1|Y zbQ_-9i>_>5)sytd1@ zPsb=hnv&U|{YAS)_k~D`7L3e2!h++$jNoZ%Hvaktxp^I#SiSkrNfv=#J!q4ypLD zsEmjzuUkvo`{BCdjG$@JVFYIlapsgx3LcD#CSK1{jYxNToZO~Ii|2d#vdtnMoetbH zzG^x=GHLbJ8GO?&^Qq0RM}{>ZZT!UqhJ%gF*UFR^EwtC}3caJ|P=||M(N>Ipb8((9k!&hgQ5Mw8r;2vu zv^$!uDMh$$`$HwxY7#1nxQWgjW1b0|QEXmJkA@}s(1|M#Ic;sy6jTv=OCRvh`#FJi zEF*~~1Sy71huktDJ)F4fH-lfu080Yt_y9t$PSX>2*QlE#T z8;Qx zHq-V;z*7bjcceUjuGR{t+Jg8Jpjw zcjioc00;A~6-Hcz!T2(X$7xhlndsAr-udx?$K1G&iD<4PR@oiPpGK>{UMY&KWh(l+ zVp@>);h_0jF2~gBW4wmGhAqK@(%Vk2gnG$61xwmCMnvP{qjY_0<5X5l-cmp*f72$4 z96w<-RkDJge94>kGBqU~a|fm{Qv#_nw@vO*%T8P=P3@UndFPE%KIj&M(8OcGKJ?Ep z7hEsp@t-UQbC8resu1Qb1n5%D&5Gu>2dP5Ev1DhIoHG$=7o3&eu(&0f6ZM;aTYM_H!kD6Sby0CFjL;h@Uk;h4u~-3P zV1vmr&|BY!^ zfO5PZAo(O37nW?j=v=B=0^&dk=Q6xt!-x0j8-Cn$=Zaie7fiVoFVSAtrS5)@&g5CAZUbqyRo9as}?eb-rUV`>ubg~-qd49!uo zfLsP(PMdy{Mfm|(uvW~=GY`MmC*DZK-r!tMhUk}og(HL6|% zpu+UuQb@k|M`)k_JIA1Fpoe=wwEg_j{@S3*<&Zg_cMDox9oM+_tKYjn#P5Iq?aO;> zZxF`Ncle`M{NrlypL3B+ zqGe!<0CPtz`)hx`c>jmgyMOcY{?E1WFL#1Y{@Dq5rcXM!ZEbQumt{nxO$H&kYgb=v13lG+~eo*3QOp`%aF#JxLLA ztD6^|`GVZBE7!f2C(rFtz^`cAkP;i@%F&Yd9Y%xd3ADt$W*q>mr-) z-bG{Jj!5(HNIk>&)H#A2_Xr~l(v*wByE@AG7Ea3j?#QyB=!yWtQe4?h_ zmPm?&p$mVey_tEOt0vIu0@;-o>e7)N(OG4nU{hdY>9F`VRX8$r0;x1Jz=a;Msc0alj9Uf}<-E$6lw;=HlF?ck6 z9x4YnAz`Pw%z5FieyuWf15)X@h)LqY0IvX1KtQr>oYkq&SZmj3Oo@PX0RIcWNDSbh+tWjZS*l#(68@UTVE&8 zrriUBe5rM#s1T}6yuMKS^6%>Pehy(WiukG2W&fyHtyZcH{a20P!-taXeaKj z_P)5f;q7uo$o|85C;YNe)ppL>PJ6NbTr0|*ouJR(gg%_?TTzC4*syQvq% z=ej)~VJL$K(W$YXGLslPwqU%3kaw{Dd2huWY2s@Aeswed; zx60E@p^=;o>@-GYi9A?zGsF=q9^&qS0z#ARunZ#V7&2C9A!HF_B>|t8k9e{I*T1F< zGor<8SM^@LmLpzc;NXM|?o>BJO=E_n6;f>`Ik#W17+x(Ic}|?F6e0Y7u=nm^X`T7r zx1COtnI>s!JtWbnQ=Mp{QEL=6BHB(pv#^FG&puj~D1KYgz859I=ZwHDm#{;m7> z{eC}y{uMk3`9ZUAu^IQmDb7ZSiocpoCKBeWqbEmhu4j2S)(45KF>^k#vtU$I*-2WM z&|bK_^MnehJ_~E5gAB(u^YbEYDBlh)5WdtX4Q35mf`b_PR&(d!qjLG27(f@+K2ly~ zIy#ouT$>Tz*Dh)ijTcY4?6?HDTd?ZwO}^ws7z|3|uSw>u=yL)m^K_y3!jZ+XIGgof zsrCkKZZMC`Q#$Z{-xY}ab;qzzMqE4M%nxd5{(y>s4j7g3VKl5crg|YYYO%DIRpO=h zEW4M(KGqpUoiX|&?25Bmfv^L}T|SAoEu2n;mFF4o&VeRm_FwZG3{6D?E-jRr3R7%iSuxqQ z>**$-g}H7VdTlrIjn?CLnywB%?ZA^-)+1q{E@;~8%d^Ro!m#N(4RhuuE%M!uXGXV; zNVjP-vpz)xdc6+_VAzfvn<703tR~9h#YO=_Fr&Y>>27YEg((vN;S#EG)Xwe>z)Fn* za31J|s_$nJ8%f|@?VXp#cn+qb2en(6T8{wKrPgXnMs7QOf7E;B;qlMHcwO{;CA z=81VIv)oJ(>8h|X)f;r0~Rg+)aOmfy^$pm4>w}%bkUI(~9dnO`Y?H2Ck&fMQ&JE z{dLwj@llq3R47s#Ye86)W|Z|Vhxvosx&p^6N1{T7L2dMx6dJR&Sk4HusLokfm@dwL zxYwlWagEjB+W7bOE;S%Gq5`T@AMV>NFJtypzaCVYE#;qJAfDU(9J>-iq%$pZXvDA` zJ4otghq0#+LKMFkE=TB>Dv@J#jMq^Lr#0^eWKX$cl!xL8MfbLCCn%mbHd{H`cqy%xGtg5 z!|7O4%S8pX?4enK$@fdC3;VStEueSB6)mZJ^O z+KVWmTQZ0k0mNR^RMYHwb&u0eepWe;nTD@HM%5ns3GrEid6RSQcId4W$DOyo+$Qo` zTh-qzq_9)M3bNu%>5Vm0uh`9zh8~W;L|k=is>k9Tm%?x;%nQ0jY5~42QK3+l-9ZA{ zC$w<>qi9$SrGk03I)gdqnKyRp@kV0}`!?0jC|=A533<>+h|xz!-5AxF@y4v&ByS!) zPCs-akR9Y3$-e1P)w_2y)#Y!Zh)St4Nm|3%duOZM9)sl z9#hgpI(|}-;c$h^{)P81THnqXDrESOtL03JvN8gMMCrseRA_I1aAN=af!&=wn9kuK z(P}4p7C3M)Adnk`at$C5-e}EZy$4lE2ZCTA+@$N&kv2UiOY3N;Zh#7HI*(~mDddePmN0hl*4Qyr2|Hnt9VrL`p*+^o6gkSgmVpoAsEk+! zj6NC`QWChl=YC;grA4aoPOWsve|2~}$O$Nk5A>J+5X6BoP_hPv04j1*#KFC1V0TC7OstMi;-vV-IX3uIC zb~K1-y@D8=qITZJjQ6iRdzdM~?Nf^Pc>9%CwuHM!@7nTAue{O1Rd3?olc3MWlMLW` zC7e-YtPB`KWE#QzT<-qSN&P6t^s>~CmV(&49TG)`6UwjDL0p`u(Ft08yaiB5%t*s%XeN z(=o<<G&!uwUEN$c=ph+c(-!J$_g1ZX|iAUVyj`rP(s&hmp2+Q7sh zcLN))q&TU)cLwxX72WrHOEcndeI55}Th4F~DkntpH};pcNBmbq{e%b(tcd0mrtw%nsz6>U}M z?@zgLvhBT+Vh!I%7^JJxR;q_K{?xrr0No7l8yu;nsr2c@s262qrc1h!Om=?mQKnhp zRfw+g0j#Ztt9>8anV&SYP@Kmic%M@Txqn2-fF+VNT`(mp%G8oEb(3IIeVcxzBlVET zPf03wCuRe!^SsV)uW=41Vh-DW&`Dehp2RdIOEp4UNbPp?YEF=k&c)wh%J$=5DNsJB_jXOZ$H6v_;Ws*XF>mUP!B9fnN0IU5zCLR7_rJ z$(k<=iS~d64Nwz2bx}bRqtJ1$hs99 zeIYfpco+ZeH3!#p^PV#pKz~#(dr42G&rQ**=Oc~6x5IvLr@YbnUHM1EjpPceOl3_M$9wxg;r-?E{!_XKy_c(|CIk~PN}ci-F8|tuY13>)%uo)YFxm*I9v9` zLB!tsY3OYL?xp6hWWCX{dQ!I-VmZ?AV*S`aFc9d6uMV%Kxr=tbYsQ^ybAv;u-iHr~ zI<4o3oK|8bu6Tcd`^Vnnb3-Qpt%9_+??-;Fa9yK2=5lt+ z>0dK`*trcT<8SyAL!HQ!h1GAutBERyH9lCxJ`GG4&($x^2{TGI25^H#XE+UZPis_& z>xRhjV@`vSUYW1o3Tlsc{^PBB)t|i4nmHJhBQ5spdugIQ4KQQmk4FMHjP56mp)-7x zwBj5&ueKOpmT!)zih1GMtj1x|yRMQr!OfbyNt9!RWh0!4eoaU+jn(;_J8HJk!6 zuok4!K9NL@x=2pE)wsaBABgmHzd3vz3bjXK>MU0{+uVbia=~my z^nWo=<6Yn@6Pq5}Ti!cTh|Ii$#ZOC<<<(UsqjmHCGqSz}!-Al3o{kPECQVkkH@Y5b zO3gH-gqoTXr%c^hM|oE6W{9l^>>K^|3lWH(ruRq8bjQQ~sk~@BUA%V}BS)()+pKS7 zlB4H>9_)XjH9Da6o?x^pKH*chZ~uEn*)dEZTGJUjWL$)2Mw^c{8G5pp}o%7MaAt0_hnR_rq1x|FJP=} za2;fYCUTb>*75k=FNB$!Sw+BgkLL3v9Azkr5g@h{#p8eiG`WRXVNRCf78S)0QkDY- zZt;Pl=IAYTPir5s6uj*|OE_D|hwPR|z@oaw-ic_ytlNJ~&i?I)1b73s2lv!UO` zFG*Eiu!Z_ynk9t}T*2<0>ile4-qToeVrhZ}Lcu5E2f=DYgs29W!sZ0st_fi2R&zyd^97Ynn1VVZb3UVD`GOfSc;Q3F8?xf$I-7mw;(tX1qx<)_GTAL z%tI|2i)Z}~!7G1)yBT%Hu3Ur##CXJecg*zxv$YOPSQj9)>SfHR1%U#4S3RV*AzbjM z?%3bqOLlTWC{U!XM>Is^l=$db;OTaJobBut=4cQlw3tbyCCXEzi+3iEnY{iBm5Gy0 z%V36Y%7QNn{c_GA0pr5`fSuzGh6e9Uf)m~a<+h&y#+voIOoQx7T6o- z96J8`(>*e2e{1i;ox;A;rTgf^M-K6kIoJu$g%)LbNz2B#wtK{xzVr_cSSK69Os)BC z)kI2LOF5!rb2C2`AqYG1Suwi+X{I!Zw0>Fz&2i``v6Q@%;b#L@sm zcPyp-^$=af>C2_r#NFq4M2^2Gi^}P%+qDb3uzwmUI26MOfQ zt>#phu=D4yR1DV9aqOsK8YQ%iVCvFwbnLr)<~Wa#Kw68P5T4f7^H71eKD8f+YN)@4 z)5o@#luQ(FKdjwBC3~kH?lZa^QvEd*4C|rb=*9Gshsr5>XzF~0OA@MT-Gy6}fvTS@ zVGXP}R@85mYv`-HpUsZ^yuR(j*hYR;dG~{fJqbjIjk1$TZONOlDHio<+>de^ez&J` z*l{6X%ar*ZK&_R^jw1Of*?3}jMX`i}%dPl$eV=s2F`_9$=4354L;=A}U${!5s&nWV z{?g?}-^@#71)aQ9oO;zQ^UragGzsY^EnN7YL;`C1a(v+-QKueJFW6; zGp94rQ8)&-?X#8H%#ARogL&1+FVolYV<|@8c@<*uB`maOfMBZLgc>j>dyfU+F%^h1{2gaQ>QeZO{BdBMQWipP)GvD~eTlV?4yi zt;<5c;M!P?wpcqFSG+Ya^vigBUaraE{WAH|Q{TonTFs>LkT+Vn%cB}920FyaAys)U zMZ{?1+akqwcFhD#Q|f{yYWn-4S>cW;`90{ z6Thp&%w3Dk>PwN_4E~jk9-xVz6ETd8yu8Ws%eTffMvJ*%&u_?|Px&vrk|JlWiQ!b8BT0MFMpDGUN} zE41v;7rl991OhFyX&k8f+s7ZKcvdOKR_lWRh|z9= z_eH?L7*+1!O>$X1pXCsPVD@w$$Sj8gOyTbHZM}pApW7-okvPpQnqYiqJ4|U0zUG) zh*DSl`N7nfTRp)8$89f!j^#&~WKs!B@k!p$18T`-Z?T;{D8mmED(m5RoiX$TLE}-- zcoFy@|7T;_U%I9<5AOklOZ~`!p6i3Y0|zbcpAXKSsW&sub%!;k8aTIFF$rPwfL(AT zAAWG>XT-4X^=bi7Kw++^j@dK_p=D)C%KB_%iI?5q8Wu8l%~3P0wrJ_~E1I<5$F1#1&YY zI1m*#Cp1>Xzj_kTgR1XxkpFosxh~EY0P%>Z?jH*Qiv#BsrNSj*IeY0!h`D91NoBQ* zMII(22bj+e($5bSR!k`y`G~cmIhQDu38S&#CYw%-33L;f$hR>k2^_#XERVLYD`m5EE8qaWw2g$DW$nw*3rvc|)jTA3EL%to@UwAq z)34A*ORxPd+J*vm9U#+{x6{}|X+KIJ{JK+oR#V>nLbu>WiOiq6$a0cvnakeMS z%`L_2mb9dt3J!2UI{r~**06q(JztHz5M#CN6)e!+aB)t`oiaNh6sIlihoD$+$iStR zDS1R9ee#CL{~l-BI!u+ni7Uh9S72m~>zH+;{PYmkdG6DSDe>(p|Hec|j<&sTB6MI# zUbUPujy2z~V+WZLyR<-$wca7n%?KU+pKARcu#W!#aCG1M^dC%_-$?*I{ckaC=>L}* z*yBI>(5&}$e^X$hf1Wq~PAD?Z>-GN~^VCwBB=v+=)!M&{fd8onPJerM^_|p@h!!J1 zAAUwNt5v^!{$J(={}n0pJKrIZ^;a!Kc5cVn+JC;oZ}`UV=+!CkwwBxu%WwawQ91mA zTK6p@gcxACKSgjvnp>ym^O5@pQAvd*T=0x(%$@e*0f|AOJzA z;oF9Gq-2+m#+&{z1|^9RNwWV4{QB45e;tQ^eGmRG90#bk-)od)n-7fqzYqWaazgkG zpX~m%>Hj(c|EC-Q=7sYxW#ftZK?y;%=B=BK08*SVIKQ(UMIgSO=;>)Y9$b3xGSwq8 zkfx#ot?*;<0KDh=Pg<@nOh*1s%u|Wg#L*1LhTOv18Qf+qXJ{H| zhBe>Xfw*mJfB%k_@p%a11lY{N#F$Q-0|h#n;-t7q%+{s+a91Z#V8GS-`U_0=w{jS2 ztwM?`Ab$_{1^tnF$W0#S27 zkc``nS}ut|Y6b`}diFf%pIYAol0iN^DFM}8(h!^LnO>fD_8q<|9dLAWdeHgrfe-Fo zquG1W=eI5Xy3*$;CxyS-0c%!xiU5r7ug?ZMZsYesAuIvPy&+2WeX17lTEC^AwEw_u zw-4-mtf`Cb@hx#4RTc|D*RQMeJRvcNFtKR!$0tgI7Ts8qmG7txOdEXyblTotC@>0o zpoW~T8&mHiem7VOW}$C%k2`);&kwT-?HU++Q;i|wF z4-%^*EDDPKw=P6<6nQF{GibiOwvY|ohxHT|ZRa6o)G8yD6pb2DG?n9V^WikQA}^dDG zJ(*435BmAV3)x|}xoVnEQ6ljyvyGlZbZN7|eqoSlUY&tjG%7&#?s>g@e(_9^UTleJ zZMm8f6}ciOX*}4gX-s024~qMM?~5{o*&B8}_2EAmdY9;a?l^9qu2*GU)Ym+BvesaZ!=%a4gmS>(Pd5bD@GzhTmLmb`G&3DO-}Xl_jcM z&**N*kS%gfL=Nh%cKNUo@Fknd-qSZ>?iS|vxEd6GLaYsr1b=SdSGPoU|8joKW+Ulh zA8txwQCZE}vQZ^%o5gA*t<1n*r|5}`v>15IJ3mwfKQ>=L5IfSlQl0D%zCJrg58vcEa%sFP5(R_p*mDlWaon z<`f&)@7n>Zvrqx&O zW>`#qof6=^xrb=~$-sAU)1uH}L4chHvQHi2W73TZMp?OLPA=V%+*8S03MLROwAv-s z)&N8jm%mA?AMQjhrhx)FqR2UUwQ{22-S>>E+`n-(aBK+k@8J;mZ7ROrtpPL}dvM1i zJ9{BJ|JIMcrMXf|YaM^`ft-bsCPs?LQA8R)0cj`<7P3Q9$KLgsD=|3`k4W3-eM=jp0#7hU0~ zP(vgMohYva@-Q!|4p121%O*NW7jnmC?&}%0TfP}JgmbTZu#mdFc4>B8|DuI#FhYF{qE4?ho$JRi~o9ZoA1uo?J&+>Jp!cPh2)eNZng44}`=in7h@vTc z?moOTKTXAMI~9cZOZVtT%zA7T+TluGNx+_@9lYyr9d@B3)oqegHIPcW^zt52<(4`$_OIoT(@V&Z6Lr^>b$%NrXM&5NfbWj6@v zF}a|LX&xUOxj{=@kh7kj>*}sHZKvD}AZhlkN`XFyVFHVJIU`V<+4)9`_#;6B!T5Cz zb1^5r;M~VjTcd!!4XWK^*f+7g?A9W$*k(`fHKdgGWQYT!eh%lw+J^2e<1H#`)C1np zi+7NhdppS0SDrm5qd$)lC!B7# zwj{N-YS8x+aTSiaugz0CAotLJ;ysTA7S!`crSJS0?w@ipjoBD|A^EX6k%2-3O%#Q{8`|k8$0&nv+Vk>0z(m~*XN9FELrf-(CXm5mbz<;Cl?&01}gtG0u<#=Y(9>41Wd zs!Y5v^bFd&KeSPkx2&FPj*~M6k@~G2b_)lumk*7NHb>95F!qT&{6oonkp?WuJjZfb zRc)|WppwccDh&%UF8lGOD|_!Y(7;8k1f^~RT9Zxf-J>CA&-GW{-#j~NNqk%}>l)X& zpFo&MpLd-zx42omrA0LD`n^M?|l4tK|;;7dcTge z(XR3F+6ReVh_}t|rdn8;1rFpccG&B0tt=KVtG&kncHn(AZ}3HV93txpQ`we~d*Xts z{V3jwHo7W;(L+Nsx)Z*e&4W2Q7`DvS5LZMn-5zoKLH4`%n{TZX26jYf_Z4WyTmblk z?hNbXafd-ahBP@xN>56;coBOu+}RfzX&+6R0>)#im|Q~2in6&e2?&J29wO!U__V5- zgOX~c-pmx>ym}yldJM)vVl_(F;*rPk?SZ7Rh>{{}AqqJJjURBGs1Y|$$Sm6fFK;By zqJ$7#sJF*vU;77s625S)@%+n4UZSX#mJ#m(?IO553A3#CsSXS0I8KGia)=NCw5vxU z!FNyC$~bX(vw=E6NHEgSOQ7j$da3oBnpln+vwL5Q*6ZclHxixCzI;WaZYjy~ zhK|yAYPJhZs5W~hbKB^T6$~XFZ6S}|lO|{RbRx zr1kTL&h0Z3bG5IgilvE84O9n$fhnRL8g z%r&K*yd5IjZ=BlornN z)Cocj+GztIHOTtvHAV5s6mio{$$`t#O1qkGs9D{NdPW4b4|z{vvBA9!=KG)^W<+sr zOYT9{e{A)C?8ya+&370tP9oQd8CcS&?V1`NxqRc72tvMv&BE2$ix*Rn!MYyMfCV50 z+z-s%0iqH^D~Q$tK#9zEKpG+eyuydyAJu2{?v8Ia6=IMbBoI>DL7-zNP%hpj%FQa; ziBWii!X-NH;GVE$Upml_e`mdzh$G^%frMsL$Z^Mv@|@bMw6PmZK&&#IJyoofMtgTG z=wg->1XTHqde?ZTW@|~XKUP6MK2oF zdbfOcpFsMx&`%&ezu!6!pw+fc>rDLoUYgFtEkx`udaH<-e?9!K!}71M!*6I9xZUz? zelHM|=w_4lo@s9d_ z``OH zfAyHcR+RnxHo@cl17f&X{lAY&Oe?D%t7pV^Qo&#G?mFuQ&e6>BOQq>k7L2G>LW&(z zJ~nMt-V`Obf5JYr4+g~lmjlI7O2QpuYyGpFQ-;yL1Klz(Kwel}tMG!qZptiswa{=k zlD%9eW*1&evTq3APP8867DcZ4z;{)yL0XD@8z3R!w&CpT)g~FrN5>r<;J5B=$vUo< zU9wY@wc#3YyXO?;ECqkY>zEF|s36s}0WQB_p&3>lN`;TEfi5T6Tnj9D5Wx5=76;T` znU^JF>e7kRu-Jo~yVd+WV=@<(x)y1uUJ)u)H&3ht^fbn57Ai^-l@vNz?eXrh`o#@e z*sE9LJ=>nrjg1;&OK}dhGP)tNk&1JrGzB*?XCpWcswf#!zam|S?LBTnyW+b1RUj{? zr+4Ap0MB#M5b&4LaMd`a#8ENn@}#Vf6I2?&j+D+vROA5B4N>Q^7i9NlmRSa4XZl$I zG*N%Ts>lPrZw#md%etFLeax@sU@@fcuxbHY*9TuKm2Z^698*63Y3BNM3@)K7Sji;T ziJlsP)$uznpN)i=16{uEyQID{A1t8R2cG7mrjbx^`HE8s2#qR92+T8>E2dOFPE;PU z_yWiRVH9QR6Y;FriQ)I0T+CbZI8p&*fS(}r)I$fV0Ojm(oX@P+-HcKOq4Pe>r$DdA zNPn6ZCh+wJoO`0jF!aI*kd{vj=Q)Oz(#Vshz{|Q14IYv5-si2BC58vfUIX^~+ss&} zFNB)&H|ZNOQz~DyHgpiUvXqUCr;R<||7&?(!-toK*p>c?3n{McE5H!_Ge92gQP zu&04l7U7!1GD_+Aa~+><$rK^A?ZLwr<;(F}*H|BXjcbbv^5=j8NzGl*RY7}v_lj*9 z!Kop2`9&Sq@v-~gE?I}LJ*5dqp=V4xVl7S)>E=1YbDT;abkkaU6wj2T>@o^&lY* z>Y<5lhbA^YOab){5S^DW0bH-$7@rJ!WhVW{%R{o`Qj2BAs;lbx{^N`V-tXH-pLg7G z+vMpC!j8PatVFE+KJDKhIuxK|ITQst>Kvm-p`nHg!FIG zU$LXe^xEY+<-HN8F#M^BM*|W{65V<*$aiyCWauq9CdiuEWGA7yC7x1;fNh9x*R28d z3NOoq%*2z~XSuyn?faxBtOQgvjj~0ZreOqZ36Kn4Q2(OACcZAY1BFCD`0!l>e6o1u z@TY@g@k>VpVfL0KX!A0gQ#lJekLET?Joa8izhXS8TX3{+FLVi_UJ?&+bG;!Ra2Xh7 zZ)7wNxH`cf&3#}@&3{r*5EuD+flqi0Fbx^0iQdSdhO5F0VKZ~76JtT z!+CKf$~K3Ht3#FeI%3^Mg2-LR?|W;>1{V220E{)rE>XdH`zK0gRr0)L`TZM z-Kd1AxT~K~+{_&xG3Cq>hrJ)ZMr7tJ*jCKf_vB_7xsD4?ewspmTTm=P2x9mbyJ3n-m>qQKG zNiIv?ywaai&JNsdakci=`D%Lm%w$}Nlr%RG$wLPwK_a8?w{CcudwFPrnCJ2tZ?r<5 zkDul!uU@B!rwkhYJXY%nj{541FI<#5_WuPeo6%fegpY!lUtJHoehruGs*UGV zQi;iJ9pGV)cZZ)HX<3qtGJ(i~HnWmRdUbeymGb(wPvuO6{+hjmL_wdenJlNWb>TuC zoi|#LNMym)qY(-6`3vTQTvt~g7vt;W}6VFk1Ld{ZM zm|!d(HhXybCo-f$S0ncu9<#Ayyvp0y@~o}VqGz12?e3mk-Yayb$wSBUfgQn>VRvNq zzN)940>hmj)v*yCqjoItP8q{tLwv57m|TIyhNY0D6)pv{xm2{J=pM{XggzfM8N~N4s{5()6RNytJC*9?(VsUO6Ci|+ z0RLwdB9gsM)Tnwur4BW9NzCJ{L{a>>w;3TF5ywl*@TORLt;8Z@_zTb^B6BD6Jm|DR z+c_@Z!CTBXSsrMKj5D`$2<+bgL$4NB%OTo3H|k?sM1xLOejQsvwnyuV*}%D4BWzDc zls1UY4maJd#%bc33LGZNOrQusK3nrCWbbd?C0Ea&X)e(+3ZPgqVV)@vvySFE{qBNY z%=T_U?73Hxuu7a#u>~PyoN;zO`MNotPdBCRh6&vxMvmFPTgVwVD04LSI>vR?00bAl zj<#Fb!*TM#-OSxK9@0nbUQP&WldF6uV$YToZ$%1QG(Ha9`>V$;zlOZg`h4(Uy?k`y zs=kH!ws#iHHxxVGq&KvoD=U_(A#PvHX3k&A*i3uJ82Lua)gdz-u&4i-jm?iJpr~X> z9ec3l;6doDj=ht4*d0rGxMGVPQGjw>q?i#Z%tOJ~4IXlO_rE@9O7eZu*A#}w+`+b0 z)JUk+bjXrde)I#vAcJj}fUlv+e4rae^nB4rTh}AnYqlYiNnccu(scM}`@l%U_~DVz zZE$)0wNP2EE#h7YO5A~hwb3Ps3zO#Wln7HmjPbEG&FMYviEYldum{jSMA|9;mV(D2vVWW!YztY=z;d^E+n;fc znrAUZb%7l)e-tLpN2dc74Rio~&yH~}2NzP;uf{K|o87UTCT=e7{ABo{Fl~#oO<9?I zqcwZO!R9M5V>YnS@4e(T&(morbmzXEVS;x!#I@=mIxI8EI^qYyatTd|@*j9sl4QOl zV!wwJG$(q;-I%rANCoe5B1-QI90t9=q#t0<2XRi|t4Vn^3JKVv{S*%z?|!qqt>Kpq z_UD_uyYxMs4fN-mf7tEYLxAGlzsYZJ=sF2Uu4i2yb%-c_LAH-op^$b6C*K4_ntf@( zLFB7UY=fj|_}~AR|A5~OsEJi0$aM+qEJ?5r(i6FA?CcD? zBH7R#16oydz%PxtRl&Wqa~+6dC&$8oLS6CXo$p7_R>*A~q=`ymI89^+bLa+qNo^m8oxdsiuIM%s<9$q;WJ=sTD55#- zu)mE|A$+(18kM8{Q~2u*Y&{Up&;v{Dg09#B5=a$ourK;bg-WLbh&}Y!y8NVJenRL# z+D=Tys!rQMQHEUuq7RRy_DwYGiK3UQ_Ymf2%Zr}3V@WCgev#-9m>r7VmM*hy`fQL_ zqtw5!j;kmsa%K}vLmhL9^Ek^9r`zafN7a%AYAwwio7(#0iIjlCH(HeX{n0mCIY-D7 zw7yrYqKX&X2%>rDY~I=nn zrSvrsOO%OurZM{e8 z7o4|~thgv0tSKgZQBi(qKjb-MVqW4$j&tiq^B9ltD?#OPHr@{?o3 z@;f1%?SN{Wev?C8UEi`8mYCc^bCe`jC%ibxx#CLgI4K4YigGd+3S$Ud4uP@dIhl}Duk9po|=Rh8S$#-g%=_DRM;tGNs!bvAaZbZK&6@ZS`1+2)pRX;Rd@u>Lrt6?xgGpA!#Oh38J3GjI)+Z}sR<1Nen4qJRK1a=( zGrS^qK3ST`?x|=f4~*{`UdfKzvFWU>!W8ed5c0}Qh3mUN3I}}(>gU!bNSTi0MLL#X zPRQsfLW^#O;r+)QYdE@BvnMUHa}?CwD>5s0#6V?l;!V_gY9gD=Y4!|&5+EB~9cJj% z)v?C&(^9r)+f>=vY9J}`nt&*{Snt%py-X#qY6>Z-=S`{U$wdXX!7ZQPn1Y2t4+u6^jKk_gU@~~wWM>R z%DQBA|~GO0}>ev+eBS=5MLo za^#T*L%*QHejpedola8FXS~%76B2i?=UcdO1M7=AIWz#!lAKH{(KfO(YBJvBMc+rS zTahSbwLy{&JGchHM`t}PLVT~e_~iMj?OqE#@gAw52jx4=fX1iC9?L4+x$|DG<)*op z*mkn|H8)1AqoAjnTBvY)r5%{dV>c&7=fzQ!nn@Wjtv%(T0tlE$sUxZPOWIbyhJN5v z;JX$V2Vl^pzB^&+)bWlG?=I0Ar;eCNFMkwUUghyR>0P;Jyx0Tn>4O4!t=WOQeubxd zUR^n3%kMnZ_ba`=HkXE@?m`@flNO`L=uECJDmL$ZU=^uWo^fhv!T@m=ST>uby|*ah z>#GEwD3n_^k$$5&%16Y&a~u^-4%eh?KCBmTWRum=yJg413OGBwvu_Q@)yMzp$T5n6 zW_m}-wt)4n+kroov?YRak9_%*DP!#G#G28TcDS3HuYX6{PB~pQ3n}q;iVEoNE+ajF z3w3w!J3EyNQR6Q(v)6)qSOhLe4COnWE2G?aIkTMWmH(YCTy#B9!eI48Ur+kn=9tM3 zZB;5Kx4FBuP@!v_{#@-2C^5B~=|0#Ff?o{>lGVD`AA-QwF+IalCLNrR8Zcw4a^n} zXZasE6}2U3@BaZ<+QHI7LIk#WPO+0JnCMzx`hFGwymay0v3<4wJcKMZUrqO(3G+1}r9;XgQf9NxJ*P80iu2 zfoET1<6GeGWC);nu zH9Zj@Hw3YBa>EJ?T+u-ZqSJF5?dqX5K-NG@ElDiQf|t-Up zk?kv07*t}ECkX;tRq=#n%)*HVar~a_!o5K78ljEpiDcPpL%sGH8hBZV5=aw3o2=RU z@0AD|8$1{N9b$xFKo*DcK(vK@Lr|9_NJehePvj64jh-Nn9rJT{Sp5_7DZA#yOqba{ zPG4P$`5m0 zEA~2edWdLmC?fTW=#z`EL=ABxhIw6-uePixW@G@LMCHga_Mr9g7xTc%WKd3ThuLxS zNx0j2LE^*;EN~XdmYzRRx}$OL3r|?t7u`w`)guJY7v;NpuiuS7S$`Pp{#7?8^{cLJ zYoCx~x&VV4;9RM9$Nx|9iM&ncLUN40{uUTAR?p~Xd$@rbBy?C2PVm!zbe~iZcf`~> zpt@ovW*{a$>GOzLW9W4FR%7ZSo8*#J{n>? zm*KDkhhHt-X$a&JOmP(!;Y3<0ZxDTE&1U9Cuqf6A3n;08fM&5fN0e_dQdR%u=3ZP2 z1IZNV7{Ae4TAvS3z!8E`lEx$e*ras(lWsh zu#MdQXlt`}|JJ(ls-N+r%4_JtC_J5r&n~88Dv4JQehN7nV9Vp}+Cs-RbcMaoUenv# z`?--&q2caa0RA2nnr7uX2C89u?W&B)D}~F@?F{CZ?Jjo0ipH-FJ^VXT7f4F9*81;( zP=^OA2(Q%dp!)TJ6{e({z^s;$i$dzyEnn5zw$np8h_r#EovxjbPyZq+@xxJWN-HLS z>ou6&AHO|b>hS-x_a#tGU2EI1*4o>u)PkTQ(CQTgM8z;DV+SC;3ZyiIAYrH=Q-DNf z2oSX1%2c3;0tu5Qnm{6<$Phz-sDP2V7{ZW1K!yN8Kp;$k;D4;r+wXpD*IoDj`v1M( z%2`?LBxm!U_kH$o_RiV+dFFzH4j_Z-2225I1BFc0#kxxhnY)3;tynRu)^QW4-WD)B zgV}mpn}wQbwGb)r{5xZ}nnU>naAxz+&I{Oc0hVbL)F$=vW7Z#VP+xqYU>@bnI9b$O zsy=W|$)>BHfD4O@NB#&pWUV9sxMF~n)Z%0>zrSDFwDBiMw>PDZc*9ifp8{HQgTnU` zgp>!Mw>))#y%n#PX#JPfUN>rXEz;^#7rDF*6scO~)%c?UXIe>_rq#7sbA&G6(LHt)Z@U_#5zHpC!i?yV80hx=K z=7uCq0pva!fqaH1&**Nao${oZoHOzFdi=y(YLw zN~7Pnq|NuDYpB!(zGp3fTu_Bvcq=2Kv+teGKG1Eqiil4uB0kYp2~ztWc>Pv}w0jTfosnLT4IRQnc9BL3w_VZ|&K5&B7Vj*_ov}Fm!dZS=4vV}x$eV$@caZmr z^1H$R%uUh)*2rj2Oq$6b{N$&b^Z%w%=}!Uu)1Td?6U|@rNG|+>R_>J+o&hi*QTnH> z|B)YmlP}QbL+k&vfOb<$Zff{=n*2yu`*wTr6_UuB|#gS^uqYbb< zM-0-;%lezIynj0+MG@Y@PO&z0VWNG%$<0@Eg}6>n6o@>l0ZLLDJ%XGg^ko*!lRjtL z!)rahAQv?ykEEppbHNkTLjcLVxKER|=x+$WVQt`%3vLH~sNZcGc12^{=iBMQZ#`C^ zrUu8+>wqZLqn^{MxBaDAM)2tSa}iYCR|*cPB=lrpU4S3%A(VqiJnVa2s<+ntoZmLg z3@IY!h-j%IUq1<)9)p4#O=C%4>l8jlVumkNOWxWJCT`$DZ1ro^c5;G{=xu!X1)6!n7X zaA(|G(8!@bA7GloYE>ZthK5$*tv0ff{WIoym}gt}cbil7kg1fb$)1NMI*2Os+0LV#f3DhJ4gURr7M7_|;emtHMS9R6J zM>`3hPuzc14O}vxRzoGl1}N5Gc)-L@I!>7mlVY8sYd1co>5)&B;Jm8@R20Jw4v_CQ z*m5n>M28fdnHeQQt{710!la;xSYO}VFS{{=1i#KGIzU819JQ{Mnk&u(-0xY`F+^qu zIyj1Kc^q4Znq`UcGfB-;F8W~9Mk=DMk#uz-xA^=J+{#-h64i~5v&u>7r}#E{)Vl2LO3N72jU`HM z()^60d*g^`wRwCzsBX|0S6WO`-Y@JHMI{E-opm}S5F$HHV|pmlU!VSzHa59jVq*+8 znt_>vRa(05ZY_yd~}Q7@S&@mBz%CDGEW*n zJ~*atis6~3Fk5i7mH|!+7IAeJQ|m%ENG9y^l}O#O*l}YyB>ON{&yXALOFj6>-jkqh740vsQMFLDQ@=w? z`?_b{@A2YF=7DzgzuGUrVIf`vs*tIyakwKOVdU5V1GuN9AK&z{ozKqFIKuZ;RQD_z z?4nRDn6i)^r60|&wizv{g;qu_8z&Yz#kU`>tgvmOWxCS8DfL><&{!F3Gz z;vyim6cJhUR8os@;_8^9%6&z|U4cQZAPD_N)~b^yN#1>|=o7 zr=g{+7I*ZSpPP|~)puiM&V?DEt2L80%jW42QiD=^mIsQ75@Pu46*C6N#Mk~JfN1!Fma#Z-u~-P4i_4(ZnGctBQ! zn1fHmCkN_|8wDG?MD39&}Nn!~E^{c{eKv_I*Z`(ge>P~SK$ z*%x;tCrKiyYVDAiz61^Mq=Yo)`Wn}~`y~iP9?7uk=db{cO==R^c=i&?4HL!fnH?J0;2gzm~avOs*%`8+~DtO(pK_jP#=Mv0iptM|*(@72twPw>{JX zZLYRl0yf%1G_FhgQN20mdYz7jE+0us0vK=V!Bum$?h@wag1(QQgbc3MdMsZ*>7p=t zRAJ_b%og*X)q}s{7O&$;?z{lH@4W*!A$;K2*xp!JNO2;;KMkKWk%Lm1MiK0fI)pGe z#OEEYh`In7zaGV{tVwo~*UyU7oN=9lzHQYCA)5HIC1uVoCEvwGY{Z4R0viQN zhzE@)r2?a4HoKUq#-$_Nhv-qRt(yQ>1U!>GyM^pI>^7!pmzy=+maJK~-eBR&3v;bpEyV*HYR1F7@vQPO+?Q+H;$^jGN&}?bW>$lbQyk1;ZoqPlX`fZ| z;!$w~29aT19i@|)_HND~gC5tRa`YvrGnmb=EFMVXRh7>d=$@o+VPfD7PlJ=Yw14 z#pz$a{Uu1H$W84_g`2?+CNqG_g2W0NyJdXLhUFgA zamXJzKoCD;!Zn^20^9q&f0&PfkRV)OQ5amh5zZ%Z%?l=?nWvisF4lF}<(>V_Br@B2 zcc1#v6@9|Y4Ge-i#i60lkoHQ~mmr(ccbHB2Xi*_9%ncb6il(cEBV_v)eOdRAn*JP`A8I?gq~yQiI@VIz z;|477Y2~V^V!cXltEXAd^_Ie(&ceWUx#bnDVNi+h;^*}~-wC09ghtkqXn=KNA!^Z< z(~cKvdWjPYizntwbw>admx;CFIj>4ov>mMz^<9Zc5wX9`!A>bi(OhP^aNmgjx1sfv z&&u`y>y+YE5j{Mqkq_Uy7Ive|fIC{P4LqAlfpuyGguav7Y}!4y>VFx#7;Mc71L)kK z#Di3Pkm~ht6rXNaeY9X3??EyNZ21(p^PM0qi`-Xf|8vrYVCz7?U5{e0t z`BjOD1^L8%(=pEZD*L;wM(m`zrQbx9CM1w>?L$$~m~~<4TJt`=?eogpmz8kj?2?c) zQEiINJDS_Vc<^AyX@pX{FfsA!;++v*3a}BUUm8&YvvXfb`yTt?PdBgFbZ8qqPTSfv zgLee@;;p$XW~@_p!2FoURRBYAM~}q`mBs*k#~RP>Pyg9QW_Vwy}aKqvt9y zswv4wNF)lnjkSLx^EQI&R%@+7Ob)VHaOBplEuQ3O>)#x5eb~Tsi=6kul8dDVizjPx zx#EXhBKmO;2CC-Jrw%M)D(HcBR~-OzEiE->c%3Tjns`0TIqtX}-_=5)K#CQE9Ai@+QI20YV|m_F1Eq; z_ULVd+I&n0pzaf*?VsyJjn=bsoB#-rCaBe9a{+D4-PM_kgDNh}whLZqw9HoG3l79a zi>B8FVG;)`?4iyNo=zj1#+1tqg=Ff{PD>N>Gco4#yelae^14^j<2Q^hh;;Xkh};X# zh@HyFHL7dKah(xj@r2Ol5NR=RF{DGLqPi9;Eok%jw5$lWr!S`*m-sA6K=d>rx`-kQ zOSq`qeabU~mFP%H!ua%>V9x$1-s>n-arG*#amqd^?OeWPW;M>HFdaK)tjWq6rdE}5 zPb|Wk@=w0f`3%N?1_G-eiB`jQ*Y+UU3 zJCBfW|MUbB1X`^>0CVbW)UW8c&DTPwQGWcXCdTF@0fXv%O4Ljo@OjHT!JmTL?`fPr z?l+YU`|OQc%_L&r4BqBjCQ{sXnjS*Q2b^cK|ixISO9dy^+VrGRK#qVM0XYJ41mp#qzLQgh&ha}i>@M%~yPdz1=Jt+<(n+{4iNA<8hqI2h|!m-$J=X(4sy_OAY3B7^m zN{;qY1{E!9xgMVu#P5WO_3Oj-|8>3)RzNL*RR7)gIssVnJ3E=a_I;nmv%bh3F;xG$ z)UEA$NIq$1@StZ4rssn~UxH4BV*=JqVih)1)$EIr zaPG}r@#DKnrsET!mp9XqkeOZL>aZ;x>(6+#r7tF5m~EzLw}%4=`%9-^g7Qoll^bdn z+c(qHmiwmE$se~{E+o8;V>A6J9=G3$hbE6lUOw{rX0ct~e$-#}Z}R>?-d|sq_XqO+ z02uek`vYJcCm+8-<^2IL&i*&Y2XE#Jz$D|2-wo=)*;bf3tP&AJsJIPmq;X;R%m$yvABT~X^N z(;d=~Uo;HQC)hRRq+x^L7AYBwNwK#-l`xrHOat6)tSuF5tO1b9Rkjuxhonwdbm5 zjWkVTLp1Zu`0P|MaTM6iTOA`brb^s)_oP1?NazZWs|vhi#&Le@=9}P1JDc?oO)E76 zRQ8mL7b>2YZd<;m$Bq^LTJjE{5NNA3Yc5})kHUG5)3yE;M=bFgjw%(fvmFXZmFKQ6fKz4)Z0B)%8* z{EK(inx+xWdus;x>?vguirt-VRlX~L?8Cd9A8;^#i5x*S^_SG&?)-;Pn-^E1VDY|1 zmc7@od)AKp@a5Hn9}ff#z4rFqyIMN;>Y#VpsJ^IDUj1TtM?!ZeQsXElc>G*B+nN<4 z3$+~W(XgKI@4RXmnO!h|_x-d`Te87vZcIBiP1fXce3^Mp76MtdImM$=?C#>ZJVucXVL3D*x$ z^~0x=5Gm<9r0FzVPFfrjUE?)bYPlow`$~`VEa~30tf|TnTBJ6>_7FkU>I8O#=S$NU zodgq(fw8eBenZ3(aWYj9MDmk`G|oe`j5e(Ls4|bkWtfQ|RgAfVbc0j1IPkgg z*lH9ZUEgbebx}$%S_{|<=M%YH)7sOrC=*!>E{A`mEs>GNO1vkcd$W%sS#}2yQ$r*a zW77AusYr{0Ql4BAy(B{g^Qyv2-VL zzij#px^>RV!7gIOmuTX12wlMbQ6Qcr+?NLV$$HP1X!bXp-B;>|&B7Ij$a2H%N{HHc z`XLfVt=CMZVhSx&x#veFXwub&iwd&qYN6M|5sqAYJA>BNhEO$!B{Tf0Nw>Y_u5e>f z8@SQTDazBLHus{vi=;cqeXmg4tkr6sajkdhWcWEo1}dc@6b{|#P=l!f8!s@8J!LJ% zC;Ubjj$Eg1FS?e`@r=PN)P|_EX9qdOde8V&e;C)P2Wy-vGpvvnSd@_a*DiLbnD5@b zhVQPpONWk%z8*%Bt{NpX?>I2?<>-E0oa+%XUVj z>D!`ONy7e(Hl*T*8$r@QFC<~ApuH%q?|C3zs+mvrtF(a+N(bBwdelM@7a-@8O8uqi z40N7Z)GFLzVG_`xukz*Y#DKwvOxA@>Ov4__3y=$@o?ss~c&Xcx1u?i2l^%TqWJ>tM z8W!lC#iqdGCr^n3uv#abA!+qUz1XiLJ)?)5H??Fu!NjCY0WzwmFG{81=kZ(;SCBGS zHM;cy_M#cPiP0*uuR#3| z{-_wA-V;%H!|jtum$#av~j3!N?XgmIj5k&G^)L6$8M+kTYiiFMx`*f6_&B4 z7BRm{0H_@9A3rq13!#!sQprBJzpvEIlaTad>nZO|J6?p&-RLy6m*s9SvOj5LQy2P0 z#TnL)5NoCW{548{r;F&0mVqD*sp%gOW)=GACFqS;&I7(yrGI0fs%N>8dH7V|Iu7{I zuO0y;-y2R=2&uDMK86*3KPulzEj7tE5F)}j| zZL+PO)}P-*Wo6Udgmr(x<7pF*1#xHv_|@K32BNiE-(7E-)1VLUeKJ}iJ$aCIP7#YI z1(A&=lLF6Gm-OrH5{3)H78beo-7?h<(sTcP-G(N54xwLumq_$QMT^N;TvgLJTB*}c z<-`oH0%Fy0)~q)OmunRc9bfi3+Zdg+6tzCrvV^n@tXZw0G_^LcQr*p|{!CTd$7}VL zh!hjk&VjLSFu3&qiEE}PCp|f!Byf$NzN(gosua^_v)Sf@a}=N zULNE}ny4cXtMwei`NmhTj1RC+%{=Nmb=&2jI(8+x`93affx-L$+kWDYYH*+}*`u|t zCSy5^#G;p=2;XJ>9c)eQL03+plTP8XcZZnW#CXw{vRIGXvH*RI-I6m zkU$*Q4c}jv%2J9c#>-}pTWC0BYMDWHznHo+*Ik2igaIT*OyS)qvM(3j9D8o3aVGz< zvRh3qLVtpapG=}-y|{`M`n>sECmQV_A+8Iy_RP*@iRJ;YtxykIIvOE0s5Qa!7;2oiw$*v6C#S%mY78@xb$5<52`5B`T5z~>!c!q%f1P?r! z6>w(kn7hi(nxwoGH6+~9q%f>ZTIIb@n%bWdF`TSZn5!BDRx20sCW9|D##oOO#2=j( zG7@t(62JcX0&1T@?_*MQL3OPXC$MV0b?rcI{o_X*^0EFw>@Zej4xTOi-2JJcpxRw; z&A^3RXF<@!8Wn8xdd>=28CX^ijWB~SZTpJxFt*Qf7?-m#>6&py#y%+sk2|j6+>i=8 z%SYQ{;QF1MmmvHxTO@s43#`YrZG-o?!qmzie!vS}xL0=9z07CP5m~E>_@KqV|2FgT zoyU4co~-MwFW}(L-R9=zwWbwgl2ww1wQqrzV8z$9LM$%Cc$X1JC+-)(nb;h*57j5v zQNpopu(e&glgax*FF+c1cYR+HTS)>bQ78D;?axA!vI{+w;bL04wYejws~pM;k@Pa{ z4TF{X({iZBi3Pp0fecF9G_JJHlCs}xpZ2V~d4b6Ubs*F_tj!Q+YHJ&GA{pKTZx++X zU~sto0@$>*`S@p+k*EH+cGw%O;hXNjitI!S2VFZ>&$^@6uQleH1R=z!RJPOHOj@FB z=C}tg53CBP^)AFeE7-CyYxTyR4{A{8qLeA;BFZNJNldov^bQb%}|tZX9N z{_E4wJN9nrH+m^C-K23V$WzLC{zif&mu**fxI?VJh{##JdTpyP`oSL;-~TJi3O34m z(aeal5}A%zfO{foxpS`4I>q1|LlqE%w}phAh|PIQQPdcVoa8U|u9oR@?JPwdb@AQf zQpT{w$CF=kIz8g?pkU)mn+_Z9a`1zpspS`og#D6!hHaes%1pp9YEL-M4*7&iTLCN6 zJ8T7oBm}EWEcI|}2)nRBHxm{XR+pSWW~9a|Kj%NGgjbJrI_hBO^z~a$kx#9HzT7na zADM2uztS^LZ@e1=ccsTEJ#y)E7C9aC<3nt$_h@M*p+wDj z4zUzKX=JBSUxE^SuHq$K*(NkAp7zuu=3>wh`^;jywa zqWnH4zd_4K9`Yd-wMITx{9iu0Z+ks$**z^BJM0u;{ z9xz;YKXcwCCod)Yc!zIiy2jJCk&)iVjJ6Rzalrig;}(eC{GgV&02y$mXBY(VU&;?T z0&)c82>g)3tr(3VyHMC|hoJ{^`OB|8!y8Pnl!?tCzpH@M~Ll-q>1w6;j#4KL;`Lt3hyn zikQ=}8RP3qnZ364_1vbd*M6mI`~--`o6~+jpMHbaKc9XBZozMW`x=m6_iM8xe(%DY z#Rimw*-ypxCbP=*SC%zmH-m_Vz5?WDa9?}*rc^hJ?Nv#*%05|2SGaK$%dmJdhYh^o z!d7hK)o@&)&VV-dpYzy4cclg};qdTQ39$$rF5LPnro8{VsqEh~b@IQPI{V+f$~^wst6!LE`B%L96;uCifWKqv7he5K zSpBP}D*tuZf29O};nn{jR&Pvcdi-1&fD$bEjmq$=UUmOQy?Srmgq%lnwIC3+`q^)4 gmieii18uQm%|t4RdWgDZ=Fi#I{v2LydD-`W0GN=zy#N3J literal 0 HcmV?d00001 -- Gitee From 0ca34f686d3e01042f3a6bfbc100008de930910a Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Thu, 14 Aug 2025 09:57:27 +0800 Subject: [PATCH 10/16] README fix --- README.en.md | 36 ------------------------------------ README.md | 4 ++-- 2 files changed, 2 insertions(+), 38 deletions(-) delete mode 100644 README.en.md diff --git a/README.en.md b/README.en.md deleted file mode 100644 index 219d571..0000000 --- a/README.en.md +++ /dev/null @@ -1,36 +0,0 @@ -# DigitalShield - -#### Description -{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} - -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md index af97572..d275efe 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 基于数字盾服务实现大额转账交易安全数字盾 -### 介绍 +## 介绍 本示例利用Device Security Kit的数字盾服务,开发一个银行转账的数字盾。 通过在可信执行环境(TEE)中开放固定的接口,帮助用户直接调用接口进行身份认证,密钥管理,统一可信UI界面展示,关键资产存储等能力共同构建数字盾能力 @@ -67,7 +67,7 @@ 2. Universal KeyStore Kit (密钥管理服务) 3. User Authentication Kit (用户认证服务) -### 约束与限制 +## 约束与限制 1. 本示例仅支持标准系统上运行,支持设备:phone。 2. HarmonyOS系统:HarmonyOS 6.0 Beta3及以上。 3. DevEco Studio版本:DevEco Studio 6.0 Beta3及以上。 -- Gitee From f1b24c1e82aef0d4549a95b9c78dcd65c59d9010 Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Thu, 14 Aug 2025 17:43:43 +0800 Subject: [PATCH 11/16] copyright log and quote fix --- README.md | 2 +- entry/src/main/ets/Utils/AssetUtils.ets | 49 +++-- .../main/ets/entryability/EntryAbility.ets | 24 ++- .../entrybackupability/EntryBackupAbility.ets | 14 ++ .../main/ets/model/TrustedAuthentication.ets | 179 ++++++++++-------- entry/src/main/ets/pages/MainPage.ets | 82 ++++---- entry/src/main/ets/pages/PageOne.ets | 35 +++- entry/src/main/ets/pages/PageTwo.ets | 50 +++-- screenshots/index.jpg | Bin 106578 -> 0 bytes screenshots/index.png | Bin 0 -> 163711 bytes 10 files changed, 263 insertions(+), 172 deletions(-) delete mode 100644 screenshots/index.jpg create mode 100644 screenshots/index.png diff --git a/README.md b/README.md index d275efe..de5e619 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ ## 效果预览 | 数字盾预览 | |-----------------------------------------------| -| | +| | ## 使用说明 ### 数字盾服务签名申请 diff --git a/entry/src/main/ets/Utils/AssetUtils.ets b/entry/src/main/ets/Utils/AssetUtils.ets index 2e7417d..6033fea 100644 --- a/entry/src/main/ets/Utils/AssetUtils.ets +++ b/entry/src/main/ets/Utils/AssetUtils.ets @@ -1,6 +1,23 @@ +/* +* Copyright (c) 2025 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ import { util } from '@kit.ArkTS'; import { asset } from '@kit.AssetStoreKit'; import { BusinessError } from '@kit.BasicServicesKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; + +const DOMAIN = 0x0000 class AssetUtils { hasShield: boolean = false; @@ -15,35 +32,35 @@ class AssetUtils { query.set(asset.Tag.ALIAS, this.stringToArray(name)); try { asset.remove(query).then(() => { - console.info(`Asset removed successfully`); + hilog.info(DOMAIN, 'testTag', 'Asset removed successfully'); }).catch((err: BusinessError) => { - console.error(`Failed to remove Asset. Code is ${err.code}, message is ${err.message}`); + hilog.error(DOMAIN, 'testTag', `Failed to remove Asset. Code is ${err.code}, message is ${err.message}`); }); } catch (error) { let err = error as BusinessError; - console.error(`Failed to remove Asset. Code is ${err.code}, message is ${err.message}`); + hilog.error(DOMAIN, 'testTag', `Failed to remove Asset. Code is ${err.code}, message is ${err.message}`); } } AddDataToAssetStore(data: Uint8Array, name: string, label: string): void { let attr: asset.AssetMap = new Map(); - console.info('secret input', data); + hilog.info(DOMAIN, 'testTag', 'secret input', data); attr.set(asset.Tag.SECRET, data); attr.set(asset.Tag.ALIAS, this.stringToArray(name)); attr.set(asset.Tag.ACCESSIBILITY, asset.Accessibility.DEVICE_FIRST_UNLOCKED); attr.set(asset.Tag.DATA_LABEL_NORMAL_1, this.stringToArray(label)); try { asset.add(attr).then(() => { - console.info('Asset Added successfully'); + hilog.info(DOMAIN, 'testTag', 'Asset Added successfully'); }).catch((err: BusinessError) => { - console.error(`Failed to add Asset. Code is ${err.code}, message is ${err.message}`); + hilog.error(DOMAIN, 'testTag', `Failed to add Asset. Code is ${err.code}, message is ${err.message}`); if (err.code === 24000003) { this.UpdateDataToAssetStore(data, name, label); } }); } catch (error) { let err = error as BusinessError; - console.error(`Failed to add Asset. Code is ${err.code}, message is ${err.message}`); + hilog.error(DOMAIN, 'testTag', `Failed to add Asset. Code is ${err.code}, message is ${err.message}`); } } @@ -55,13 +72,13 @@ class AssetUtils { attrsToUpdate.set(asset.Tag.DATA_LABEL_NORMAL_1, this.stringToArray(label)); try { asset.update(query, attrsToUpdate).then(() => { - console.info('Asset updated successfully'); + hilog.info(DOMAIN, 'testTag', 'Asset updated successfully'); }).catch((err: BusinessError) => { - console.error(`Failed to update Asset. Code is ${err.code}, message is ${err.message}`); + hilog.error(DOMAIN, 'testTag', `Failed to update Asset. Code is ${err.code}, message is ${err.message}`); }); } catch (error) { let err = error as BusinessError; - console.error(`Failed to update Asset. Code is ${err.code}, message is ${err.message}`); + hilog.error(DOMAIN, 'testTag', `Failed to update Asset. Code is ${err.code}, message is ${err.message}`); } } @@ -70,20 +87,20 @@ class AssetUtils { query.set(asset.Tag.ALIAS, this.stringToArray(name)); query.set(asset.Tag.RETURN_TYPE, asset.ReturnType.ALL); let emptyArray = new Uint8Array(0); - console.info('Asset query begin'); + hilog.info(DOMAIN, 'testTag', 'Asset query begin'); try { - console.info('Asset query begin in try'); + hilog.info(DOMAIN, 'testTag', 'Asset query begin in try'); let res: Array = await asset.query(query); for (let i = 0; i < res.length; i++) { - console.info('Asset query begin in loop'); + hilog.info(DOMAIN, 'testTag', 'Asset query begin in loop'); let secret: Uint8Array = res[i].get(asset.Tag.SECRET) as Uint8Array; - console.info('secret output', secret); + hilog.info(DOMAIN, 'testTag', 'secret output', secret); return secret; } - console.info('Asset query begin again'); + hilog.info(DOMAIN, 'testTag', 'Asset query begin again'); } catch (error) { let err = error as BusinessError; - console.error(`Failed to query Asset. Code is ${err.code}, message is ${err.message}`); + hilog.error(DOMAIN, 'testTag', `Failed to query Asset. Code is ${err.code}, message is ${err.message}`); return emptyArray; } return emptyArray; diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index 508880a..3456b0e 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -1,12 +1,30 @@ -import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +/* +* Copyright (c) 2025 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +import { ConfigurationConstant, UIAbility } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { window } from '@kit.ArkUI'; const DOMAIN = 0x0000; export default class EntryAbility extends UIAbility { - onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { - this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); + onCreate(): void { + try{ + this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); + } catch (error) { + hilog.error(DOMAIN, 'testTag', '%{public}s', 'setColorMode Error'); + } hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate'); } diff --git a/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets index 54ae78a..56fcf22 100644 --- a/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets +++ b/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -1,3 +1,17 @@ +/* +* Copyright (c) 2025 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ import { hilog } from '@kit.PerformanceAnalysisKit'; import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; diff --git a/entry/src/main/ets/model/TrustedAuthentication.ets b/entry/src/main/ets/model/TrustedAuthentication.ets index 8e3f03d..014563b 100644 --- a/entry/src/main/ets/model/TrustedAuthentication.ets +++ b/entry/src/main/ets/model/TrustedAuthentication.ets @@ -1,3 +1,17 @@ +/* +* Copyright (c) 2025 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ import { resourceManager } from '@kit.LocalizationKit'; import { huks } from '@kit.UniversalKeystoreKit'; import { BusinessError } from '@kit.BasicServicesKit'; @@ -5,6 +19,7 @@ import { userAuth } from '@kit.UserAuthenticationKit'; import { trustedAuthentication } from '@kit.DeviceSecurityKit'; import { util } from '@kit.ArkTS'; import AssetUtils from '../Utils/AssetUtils'; +import { hilog } from '@kit.PerformanceAnalysisKit'; const TUI_PIN_SET = 1 const TUI_PIN_MODIFY = 2 @@ -15,6 +30,7 @@ const TUI_BIND_FACE = 7 const TUI_BIND_FINGERPRINT = 8 const TUI_PIN_SET_MIX = 9 const TUI_PIN_MODIFY_MIX = 10 +const DOMAIN = 0x0000 let keyAlias = 'test_sign_key_alias'; let handle: number; let challenge: Uint8Array; @@ -83,22 +99,22 @@ function GetEccSignProperties(): Array { } async function publicGenKeyFunc(keyAlias: string, huksOptions: huks.HuksOptions): Promise { - console.info(`enter promise generatekeyItem`); + hilog.info(DOMAIN, 'testTag', `enter promise generatekeyItem`); let throwObject: throwObject = { isThrow: false }; try { await generateKeyItem(keyAlias, huksOptions, throwObject) .then((data) => { - console.info(`promise: generateKeyItem success, data = ${JSON.stringify(data)}`); + hilog.info(DOMAIN, 'testTag', `promise: generateKeyItem success, data = ${JSON.stringify(data)}`); }) .catch((error: Error) => { if (throwObject.isThrow) { throw (error as Error); } else { - console.error(`promise: generateKeyItem failed, ` + JSON.stringify(error)); + hilog.error(DOMAIN, 'testTag', `promise: generateKeyItem failed, ` + JSON.stringify(error)); } }); } catch (error) { - console.error(`promise: generateKeyItem input arg invlaid ` + JSON.stringify(error)) + hilog.error(DOMAIN, 'testTag', `promise: generateKeyItem input arg invlaid ` + JSON.stringify(error)); } }; @@ -108,15 +124,15 @@ async function SignFinish(handle: number, authToken: Uint8Array, plaintext: stri properties: signProperties, inData: stringToUint8Array(plaintext) } - console.log("====inData====" + options.inData); - console.error("AAA finish 开始" + handle, options, authToken); + hilog.info(DOMAIN, 'testTag', '====inData====' + options.inData); + hilog.info(DOMAIN, 'testTag', 'AAA finish 开始' + handle, options, authToken); try { let data = await huks.finishSession(handle, options, authToken); let signature = data.outData as Uint8Array; - console.log('Sign Finish Success! Result: ' + JSON.stringify(data)); + hilog.info(DOMAIN, 'testTag', 'Sign Finish Success! Result: ' + JSON.stringify(data)); return signature } catch (error) { - console.error('Sign Finish Exception ' + JSON.stringify(error)); + hilog.error(DOMAIN, 'testTag', 'Sign Finish Exception ' + JSON.stringify(error)); throw new Error('Sign Finish Exception ' + (error as BusinessError).message); } } @@ -136,7 +152,7 @@ function stringToUint8Array(str: string): Uint8Array { async function Verify(indata: string, signature: Uint8Array): Promise { let indataArray = stringToUint8Array(indata) - console.log('indata size = ' + indataArray.length + ' signature size = ' + signature.length); + hilog.info(DOMAIN, 'testTag', 'indata size = ' + indataArray.length + ' signature size = ' + signature.length); let appendInfo = signature.subarray(0, 41); let newSignature = signature.subarray(41); @@ -150,33 +166,31 @@ async function Verify(indata: string, signature: Uint8Array): Promise { } await huks.initSession(keyAlias, options).then((data) => { handle = data.handle; - console.log('Verify Init Success! Result: ' + JSON.stringify(data)) + hilog.info(DOMAIN, 'testTag', 'Verify Init Success! Result: ' + JSON.stringify(data)); }).catch((err: Error) => { - console.error('Init err: ' + JSON.stringify(err)); + hilog.error(DOMAIN, 'testTag', 'Init err: ' + JSON.stringify(err)); }) - - console.log('Verify Update Begin' + JSON.stringify(options) + 'handel' + JSON.stringify(handle)); + hilog.info(DOMAIN, 'testTag', 'Verify Update Begin' + JSON.stringify(options) + 'handel' + JSON.stringify(handle)); options.inData = newIndata; await huks.updateSession(handle, options).then(() => { - console.log('Verify Update Begin(infunction)' + JSON.stringify(options.inData)); + hilog.info(DOMAIN, 'testTag', 'Verify Update Begin(infunction)' + JSON.stringify(options.inData)); }).catch((err: Error) => { - console.log('Verify update err: ' + JSON.stringify(err)); + hilog.error(DOMAIN, 'testTag', 'Verify update err: ' + JSON.stringify(err)); }) - - console.log('Verify Finish Begin' + JSON.stringify(options)); - console.log('Verify Finish SIG' + JSON.stringify(signature)); + hilog.info(DOMAIN, 'testTag', 'Verify Finish Begin' + JSON.stringify(options)); + hilog.info(DOMAIN, 'testTag', 'Verify Finish SIG' + JSON.stringify(signature)); options.inData = newSignature; await huks.finishSession(handle, options).then(() => { - console.log('Verify Finisht Success! Result:' + JSON.stringify(options.inData)); + hilog.info(DOMAIN, 'testTag', 'Verify Finisht Success! Result:' + JSON.stringify(options.inData)); }).catch((err: Error) => { - console.log('Verify finish err: ' + JSON.stringify(err)); + hilog.error(DOMAIN, 'testTag', 'Verify finish err: ' + JSON.stringify(err)); }); }; class TrustedAuth { bigIntToUint8Array(value: bigint): Uint8Array { if (value < 0n) { - throw new Error("only non-negative bigint values are supported"); + throw new Error('only non-negative bigint values are supported'); } if (value === 0n) { @@ -209,9 +223,9 @@ class TrustedAuth { let credentialID = appendInfo.subarray(8, 40); let checkHash = appendInfo.subarray(40, 41); let authType = appendInfo.subarray(4, 8); - console.log('credentialId', credentialID); - console.log('checkHash', checkHash); - console.log('authType', authType); + hilog.info(DOMAIN, 'testTag', 'credentialId', credentialID); + hilog.info(DOMAIN, 'testTag', 'checkHash', checkHash); + hilog.info(DOMAIN, 'testTag', 'authType', authType); await AssetUtils.AddDataToAssetStore(credentialID, 'face_credentialID', 'face_credential_label'); } @@ -222,11 +236,11 @@ class TrustedAuth { const fileData: Uint8Array = await resourceMgr.getRawFileContent('startIcon.png'); const firstTenElementsView = fileData.subarray(0, 20); - console.log('image size is ', fileData.buffer.byteLength); - console.log('image subarray is ', firstTenElementsView); + hilog.info(DOMAIN, 'testTag', 'image size is ', fileData.buffer.byteLength); + hilog.info(DOMAIN, 'testTag', 'image subarray is ', firstTenElementsView); return fileData.buffer; } catch (error) { - console.error('Failed to load image:', error); + hilog.error(DOMAIN, 'testTag', 'Failed to load image:', error); throw new Error('Unable to import image:' + (error as BusinessError).message); } } @@ -241,10 +255,10 @@ class TrustedAuth { title: '数字盾密码验证' } const result = await trustedAuthentication.trustedAuthentication(challenge, credentialID, label); - console.log('数字盾密码认证:', result.authToken.length, result.authToken); + hilog.info(DOMAIN, 'testTag', '数字盾密码认证:', result.authToken.length, result.authToken); return result; } catch (error) { - console.error('数字盾密码认证:', error); + hilog.error(DOMAIN, 'testTag', '数字盾密码认证:', error); throw new Error('数字盾密码认证失败:' + (error as BusinessError).message); } } @@ -265,10 +279,10 @@ class TrustedAuth { const authInfo = await trustedAuthentication.enableTrustedAuthentication(challenge, passwordInfo, label); let assetLabel = assetName + 'label'; await AssetUtils.AddDataToAssetStore(this.bigIntToUint8Array(authInfo.authID), assetName, assetLabel); - console.log('开通数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + hilog.info(DOMAIN, 'testTag', '开通数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); return authInfo; } catch (error) { - console.error('开通数字盾失败:', error); + hilog.error(DOMAIN, 'testTag', '开通数字盾失败:', error); throw new Error('开通数字盾失败:' + (error as BusinessError).message); } } @@ -289,10 +303,10 @@ class TrustedAuth { const authInfo = await trustedAuthentication.enableTrustedAuthentication(challenge, passwordInfo, label); let assetLabel = assetName + 'label'; await AssetUtils.AddDataToAssetStore(this.bigIntToUint8Array(authInfo.authID), assetName, assetLabel); - console.log('开通数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + hilog.info(DOMAIN, 'testTag', '开通数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); return authInfo; } catch (error) { - console.error('开通数字盾失败:', error); + hilog.error(DOMAIN, 'testTag', '开通数字盾失败:', error); throw new Error('开通数字盾失败:' + (error as BusinessError).message); } } @@ -314,10 +328,10 @@ class TrustedAuth { } const authInfo = await trustedAuthentication.modifyTrustedAuthenticationPwd(challenge, passwordInfo, credentialID, label); - console.log('修改数字盾成功:', authInfo.authToken); + hilog.info(DOMAIN, 'testTag', '修改数字盾成功:', authInfo.authToken); return authInfo; } catch (error) { - console.error('密码修改失败:', error); + hilog.error(DOMAIN, 'testTag', '密码修改失败:', error); throw new Error('密码修改失败:' + (error as BusinessError).message); } } @@ -339,10 +353,10 @@ class TrustedAuth { } const authInfo = await trustedAuthentication.modifyTrustedAuthenticationPwd(challenge, passwordInfo, credentialID, label); - console.log('修改数字盾成功:', authInfo.authToken); + hilog.info(DOMAIN, 'testTag', '修改数字盾成功:', authInfo.authToken); return authInfo; } catch (error) { - console.error('密码修改失败:', error); + hilog.error(DOMAIN, 'testTag', '密码修改失败:', error); throw new Error('密码修改失败:' + (error as BusinessError).message); } } @@ -361,10 +375,10 @@ class TrustedAuth { AssetUtils.DeleteDataFromAssetStore('credentialID'); AssetUtils.DeleteDataFromAssetStore('face_credentialID'); AssetUtils.DeleteDataFromAssetStore('finger_credentialID'); - console.log('关闭数字盾成功:', authInfo.authToken); + hilog.info(DOMAIN, 'testTag', '关闭数字盾成功:', authInfo.authToken); return authInfo; } catch (error) { - console.error('关闭数字盾失败:', error); + hilog.error(DOMAIN, 'testTag', '关闭数字盾失败:', error); throw new Error('关闭数字盾失败:' + (error as BusinessError).message); } } @@ -376,17 +390,17 @@ class TrustedAuth { let emptyBuffer = new ArrayBuffer(0); const label: trustedAuthentication.TUILable = { image: emptyBuffer, - title: "" + title: '' } const authInfo = await trustedAuthentication.disableTrustedAuthentication(challenge, false, credentialID, label); AssetUtils.DeleteDataFromAssetStore('pin_label1'); AssetUtils.DeleteDataFromAssetStore('credentialID'); AssetUtils.DeleteDataFromAssetStore('face_credentialID'); AssetUtils.DeleteDataFromAssetStore('finger+credentialID'); - console.log('关闭数字盾成功:', authInfo.authToken); + hilog.info(DOMAIN, 'testTag', '关闭数字盾成功:', authInfo.authToken); return authInfo.authToken; } catch (error) { - console.error('关闭数字盾失败:', error); + hilog.error(DOMAIN, 'testTag', '关闭数字盾失败:', error); throw new Error('关闭数字盾失败:' + (error as BusinessError).message); } } @@ -394,24 +408,24 @@ class TrustedAuth { async FaceAuthContent(challenge: Uint8Array, assetName: string): Promise { try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FACE); - console.info(`get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + hilog.info(DOMAIN, 'testTag', `get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); const buffer: ArrayBuffer = await this.ImportImage(); const reqParams: trustedAuthentication.AuthReqParams = { reqType: trustedAuthentication.AuthType.AUTH_TYPE_FACE, - authContent: ["challenge:123456|0", "用户:张家龙|1", "账号:123456|1", "交易金额: 10000000|2", - "交易时间:2025-0605|2"] + authContent: ['challenge:123456|0', '用户:张家龙|1', '账号:123456|1', '交易金额: 10000000|2', + '交易时间:2025-0605|2'] } const label: trustedAuthentication.TUILable = { image: buffer, title: '人脸交易认证' } const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); - console.log('人脸交易认证:', result.authToken); + hilog.info(DOMAIN, 'testTag', '人脸交易认证:', result.authToken); return result; } catch (error) { - console.error('人脸交易认证失败:', error); + hilog.error(DOMAIN, 'testTag', '人脸交易认证失败:', error); throw new Error('人脸交易认证失败:' + (error as BusinessError).message); } } @@ -419,24 +433,24 @@ class TrustedAuth { async FingerPrintAuthContent(challenge: Uint8Array, assetName: string): Promise { try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FINGERPRINT); - console.info(`get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + hilog.info(DOMAIN, 'testTag', `get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); const buffer: ArrayBuffer = await this.ImportImage(); const reqParams: trustedAuthentication.AuthReqParams = { reqType: trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT, - authContent: ["challenge:123456|0", "用户:张家龙|1", "账号:123456|1", "交易金额: 10000000|2", - "交易时间:2025-0605|2"] + authContent: ['challenge:123456|0', '用户:张家龙|1', '账号:123456|1', '交易金额: 10000000|2', + '交易时间:2025-0605|2'] } const label: trustedAuthentication.TUILable = { image: buffer, title: '指纹交易认证' } const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); - console.log('指纹交易认证:', result.authToken); + hilog.info(DOMAIN, 'testTag', '指纹交易认证:', result.authToken); return result; } catch (error) { - console.error('指纹交易认证失败:', error); + hilog.error(DOMAIN, 'testTag', '指纹交易认证失败:', error); throw new Error('指纹交易认证失败:' + (error as BusinessError).message); } } @@ -448,18 +462,18 @@ class TrustedAuth { const buffer: ArrayBuffer = await this.ImportImage(); const reqParams: trustedAuthentication.AuthReqParams = { reqType: trustedAuthentication.AuthType.AUTH_TYPE_TUI_PIN, - authContent: ["challenge:123456|0", "用户:张家龙|1", "账号:123456|1", "交易金额: 10000000|2", - "交易时间:2025-0605|2"] + authContent: ['challenge:123456|0', '用户:张家龙|1', '账号:123456|1', '交易金额: 10000000|2', + '交易时间:2025-0605|2'] } const label: trustedAuthentication.TUILable = { image: buffer, title: '密码交易认证' } const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); - console.log('密码交易认证:', result.authToken); + hilog.info(DOMAIN, 'testTag', '密码交易认证:', result.authToken); return result; } catch (error) { - console.error('密码交易认证失败:', error); + hilog.error(DOMAIN, 'testTag', '密码交易认证失败:', error); throw new Error('密码交易认证失败:' + (error as BusinessError).message); } } @@ -508,7 +522,7 @@ class TrustedAuth { let result = await huks.initSession(keyAlias, options); handle = result.handle; challenge = result.challenge as Uint8Array - console.error('initSession complete' + handle + '----' + challenge); + hilog.info(DOMAIN, 'testTag', 'initSession complete' + handle + '----' + challenge); return result; } @@ -517,21 +531,20 @@ class TrustedAuth { let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); await trustedAuthentication.disableTrustedBioAuthentication(credentialID, authType); - console.log('解绑成功'); + hilog.info(DOMAIN, 'testTag', '解绑成功'); } catch (error) { - console.error('解绑失败', JSON.stringify(error)); + hilog.error(DOMAIN, 'testTag', '解绑失败', JSON.stringify(error)); throw new Error('解绑失败' + (error as BusinessError).message); } } async HuksSignAndVerify(session: huks.HuksSessionHandle, authToken: Uint8Array): Promise { - let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额: 10000000|2\n交易时间:2025-0605|2"; + let inputdata = 'challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额: 10000000|2\n交易时间:2025-0605|2'; try { let signature = await SignFinish(session.handle, authToken, inputdata); - - console.log('IAM auth on success'); + hilog.info(DOMAIN, 'testTag', 'IAM auth on success'); } catch (error) { - console.error('IAM auth catch error', JSON.stringify(error)); + hilog.error(DOMAIN, 'testTag','IAM auth catch error', JSON.stringify(error)); throw new Error('拉起IAM控件失败' + (error as BusinessError).message); } } @@ -541,41 +554,41 @@ class TrustedAuth { let challenge: Uint8Array = session.challenge as Uint8Array; let tempAuthToken: trustedAuthentication.AuthToken; if (authType === TUI_PIN_SET) { - console.log('============创建密码============'); + hilog.info(DOMAIN, 'testTag', '============创建密码============'); tempAuthToken = await this.SetPwd(challenge, label); } else if (authType === TUI_PIN_MODIFY) { - console.log('============修改密码============'); + hilog.info(DOMAIN, 'testTag', '============修改密码============'); tempAuthToken = await this.ModifyPwd(challenge, label); } else if (authType === TUI_PIN_DISABLE) { - console.log('============关闭数字盾============'); + hilog.info(DOMAIN, 'testTag', '============关闭数字盾============'); tempAuthToken = await this.DisablePwd(challenge, label); } else if (authType === TUI_PIN_SET_MIX) { - console.log('============创建密码============'); + hilog.info(DOMAIN, 'testTag', '============创建密码============'); tempAuthToken = await this.SetPwdMix(challenge, label); } else if (authType === TUI_PIN_MODIFY_MIX) { - console.log('============修改密码============'); + hilog.info(DOMAIN, 'testTag', '============修改密码============'); tempAuthToken = await this.ModifyPwdMix(challenge, label); } else { - console.log('============开始密码交易认证============'); + hilog.info(DOMAIN, 'testTag', '============开始密码交易认证============'); tempAuthToken = await this.ContentVerifyByPwd(challenge, label); } const TuiAuthToken: trustedAuthentication.AuthToken = tempAuthToken; let authToken = TuiAuthToken.authToken; let inputdata = - "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额: 10000000|2\n交易时间:2025-0605|2"; + 'challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额: 10000000|2\n交易时间:2025-0605|2'; try { SignFinish(session.handle, authToken, inputdata).then((data) => { signature = data as Uint8Array; Verify(inputdata, signature); }); - console.log('HUKS -> IAM auth on success'); + hilog.info(DOMAIN, 'testTag', 'HUKS -> IAM auth on success'); } catch (error) { - console.error('HUKS -> IAM auth error', JSON.stringify(error)); + hilog.error(DOMAIN, 'testTag', 'HUKS -> IAM auth error', JSON.stringify(error)); throw new Error('拉起IAM控件失败' + (error as BusinessError).message); } } - async UserAuthBeforeSign(indata: string, session: huks.HuksSessionHandle, authType: number): Promise { + async UserAuthBeforeSign(session: huks.HuksSessionHandle, authType: number): Promise { let authTypeList: number[] = new Array(); if (authType === TUI_BIND_FACE || authType === TUI_CONTENT_FACE_VERIFY) { authTypeList[0] = userAuth.UserAuthType.FACE; @@ -591,22 +604,22 @@ class TrustedAuth { title: ' ' }; try { - console.log('auth start'); + hilog.info(DOMAIN, 'testTag', 'auth start'); const userAuthInstance = userAuth.getUserAuthInstance(authParam, widgetParam); - console.log('auth success'); + hilog.info(DOMAIN, 'testTag', 'auth success'); - return new Promise((resolve, reject) => { + return new Promise((resolve) => { userAuthInstance.on('result', { onResult(result) { authTokenData = result.token; - console.log('auth result authTokenData', authTokenData); + hilog.info(DOMAIN, 'testTag', 'auth result authTokenData', authTokenData); resolve(authTokenData); } }); userAuthInstance.start(); }); } catch (error) { - console.error('HUKS -> IAM auth error', JSON.stringify(error)); + hilog.error(DOMAIN, 'testTag', 'HUKS -> IAM auth error', JSON.stringify(error)); throw new Error('拉起IAM控件失败' + (error as BusinessError).message); } } @@ -620,18 +633,18 @@ class TrustedAuth { if (authType === TUI_BIND_FACE) { try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FACE); - console.info(`get current face enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + hilog.info(DOMAIN, 'testTag', `get current face enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); } catch (error) { - console.error(`get current face enrolled state failed, error = ${JSON.stringify(error)}`); + hilog.error(DOMAIN, 'testTag', `get current face enrolled state failed, error = ${JSON.stringify(error)}`); throw new Error('bind' + (error as BusinessError).message); } tempAuthToken = await this.PwdVerify(challenge, assetName); } else if (authType === TUI_BIND_FINGERPRINT) { try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FINGERPRINT); - console.info(`get current fingerprint enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + hilog.info(DOMAIN, 'testTag', `get current fingerprint enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); } catch (error) { - console.error(`get current fingerprint enrolled state failed, error = ${JSON.stringify(error)}`); + hilog.error(DOMAIN, 'testTag', `get current fingerprint enrolled state failed, error = ${JSON.stringify(error)}`); throw new Error('bind' + (error as BusinessError).message); } tempAuthToken = await this.PwdVerify(challenge, assetName); @@ -645,7 +658,7 @@ class TrustedAuth { return tempAuthToken.authToken; } catch (error) { const err: BusinessError = error as BusinessError; - console.error(`get TUI Authtoken failed. Code is ${err?.code}, message is ${err?.message}`); + hilog.error(DOMAIN, 'testTag', `get TUI Authtoken failed. Code is ${err?.code}, message is ${err?.message}`); throw new Error((err as BusinessError).message); } } diff --git a/entry/src/main/ets/pages/MainPage.ets b/entry/src/main/ets/pages/MainPage.ets index b2f1946..288e012 100644 --- a/entry/src/main/ets/pages/MainPage.ets +++ b/entry/src/main/ets/pages/MainPage.ets @@ -23,13 +23,15 @@ import { userAuth } from '@kit.UserAuthenticationKit'; import { PromptAction } from '@kit.ArkUI'; import AssetUtils from '../Utils/AssetUtils'; +import { hilog } from '@kit.PerformanceAnalysisKit'; const TUI_PIN_DISABLE = 3 const TUI_BIND_FACE = 7 const TUI_BIND_FINGERPRINT = 8 +const DOMAIN = 0x0000 @Builder -export function MainPageBuilder(name: string, param: Object) { +export function MainPageBuilder() { MainPage() } @@ -75,13 +77,13 @@ export struct MainPage { if(this.hasFingerprintAbility){ try { userAuth.getAvailableStatus(userAuth.UserAuthType.FINGERPRINT, userAuth.AuthTrustLevel.ATL3); - console.info('current auth trust level supported'); + hilog.info(DOMAIN, 'testTag', 'current auth trust level supported'); } catch (error) { const err: BusinessError = error as BusinessError; if(error.code === 12500010){ - console.error(`Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`) + hilog.error(DOMAIN, 'testTag', `Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`); }else{ - console.error(`current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`) + hilog.error(DOMAIN, 'testTag', `current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`); this.hasFingerprintAbility = false; this.bioState--; } @@ -90,13 +92,13 @@ export struct MainPage { if(this.hasFaceAbility){ try { userAuth.getAvailableStatus(userAuth.UserAuthType.FACE, userAuth.AuthTrustLevel.ATL4); - console.info('current auth trust level supported'); + hilog.info(DOMAIN, 'testTag', 'current auth trust level supported'); } catch (error) { const err: BusinessError = error as BusinessError; if(error.code === 12500010){ - console.error(`Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`) + hilog.error(DOMAIN, 'testTag', `Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`); }else{ - console.error(`current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`) + hilog.error(DOMAIN, 'testTag', `current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`); this.hasFaceAbility = false; this.bioState--; } @@ -130,14 +132,14 @@ export struct MainPage { .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(async () => { - this.pageInfos.pushPath({name: "PageOne"}) + this.pageInfos.pushPath({name: 'PageOne'}) }); } else { Button(' 开通 ') .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(() => { - this.pageInfos.pushPath({ name: "PageOne" }) + this.pageInfos.pushPath({ name: 'PageOne' }) }) } } @@ -176,16 +178,16 @@ export struct MainPage { this.message = ''; try { let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; - await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_PIN_DISABLE, "pin_label1"); + hilog.info(DOMAIN, 'testTag', '签名初始化完成'); + let indata: string = 'aaabbb'; + await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_PIN_DISABLE, 'pin_label1'); this.message += `关闭数字盾成功`; this.hasShield = false; this.fingerprintBind = false; this.faceBind = false; } catch (error) { - console.error('n关闭数字盾失败:', error); - this.message += `\n\n关闭数字盾失败: ${error}`; + hilog.error(DOMAIN, 'testTag', 'n关闭数字盾失败:', error); + this.message += `关闭数字盾失败: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -209,15 +211,15 @@ export struct MainPage { const rand = cryptoFramework.createRandom(); const len: number = 32; const challenge: Uint8Array = rand?.generateRandomSync(len)?.data; - const authToken = await TrustedAuth.disablePwdWithoutAuth(challenge, "pin_label1"); - console.log('关闭数字盾成功:', authToken); + const authToken = await TrustedAuth.disablePwdWithoutAuth(challenge, 'pin_label1'); + hilog.info(DOMAIN, 'testTag', '关闭数字盾成功:', authToken); this.message += `关闭数字盾成功`; this.hasShield = false; this.fingerprintBind = false; this.faceBind = false; } catch (error) { - console.error('n关闭数字盾失败:', error); - this.message += `\n\n关闭数字盾失败: ${error}`; + hilog.error(DOMAIN, 'testTag', 'n关闭数字盾失败:', error); + this.message += `关闭数字盾失败: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -266,26 +268,25 @@ export struct MainPage { this.message = ''; try { let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; + hilog.info(DOMAIN, 'testTag', '签名初始化完成'); const tuiAuthToken: Uint8Array = await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FINGERPRINT, - "pin_label1"); + 'pin_label1'); let bioAuthToken: Uint8Array = - await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FINGERPRINT); + await TrustedAuth.UserAuthBeforeSign(session, TUI_BIND_FINGERPRINT); let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; let resignAuthToken = await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; + let inputdata = 'challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2'; await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) this.message += `指纹绑定成功`; this.fingerprintBind = true; } catch (error) { - console.error('n指纹绑定失败:', error); + hilog.error(DOMAIN, 'testTag', 'n指纹绑定失败:', error); if(error.message === 'Authentication template has not been enrolled.'){ - this.message += `\n\n指纹绑定失败:请前往系统界面绑定生物信息` + this.message += `指纹绑定失败:请前往系统界面绑定生物信息` }else{ - this.message += `\n\n指纹绑定失败: ${error}`; + this.message += `指纹绑定失败: ${error}`; } } this.promptAction.openToast({ @@ -307,13 +308,13 @@ export struct MainPage { this.message = ''; try { let authType = trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT; - await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); + await TrustedAuth.disableTrustedBioAuthentication('pin_label1', authType); this.message += `解绑指纹成功`; this.fingerprintBind = false; } catch (error) { // 捕获错误并处理 - console.error('解绑指纹失败:', error); - this.message += `\n\n解绑指纹失败: ${error}`; + hilog.error(DOMAIN, 'testTag', '解绑指纹失败:', error); + this.message += `解绑指纹失败: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -339,25 +340,24 @@ export struct MainPage { this.message = ''; try { let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; + hilog.info(DOMAIN, 'testTag', '签名初始化完成'); const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FACE, "pin_label1"); + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FACE, 'pin_label1'); let bioAuthToken: Uint8Array = - await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_BIND_FACE); + await TrustedAuth.UserAuthBeforeSign(session, TUI_BIND_FACE); let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; let resignAuthToken = await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - let inputdata = "challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2"; + let inputdata = 'challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2'; await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) this.message += `人脸绑定成功`; this.faceBind = true; } catch (error) { - console.error('n人脸绑定失败:', error); + hilog.error(DOMAIN, 'testTag', 'n人脸绑定失败:', error); if(error.message === 'Authentication template has not been enrolled.'){ - this.message += `\n\n人脸绑定失败:请前往系统界面绑定生物信息` + this.message += `人脸绑定失败:请前往系统界面绑定生物信息` }else{ - this.message += `\n\n人脸绑定失败: ${error}`; + this.message += `人脸绑定失败: ${error}`; } } this.promptAction.openToast({ @@ -378,13 +378,13 @@ export struct MainPage { this.message = ''; try { let authType = trustedAuthentication.AuthType.AUTH_TYPE_FACE; - await TrustedAuth.disableTrustedBioAuthentication("pin_label1", authType); + await TrustedAuth.disableTrustedBioAuthentication('pin_label1', authType); this.message += `解绑人脸成功`; this.faceBind = false; } catch (error) { // 捕获错误并处理 - console.error('检查失败:', error); - this.message += `\n\n解绑人脸失败: ${error}`; + hilog.error(DOMAIN, 'testTag', '检查失败:', error); + this.message += `解绑人脸失败: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -413,7 +413,7 @@ export struct MainPage { .width('100%') }.height('calc(100% - 56vp)') Button('去转账').width('calc(100% - 32vp)').onClick(() => { - this.pageInfos.pushPath({ name: "PageTwo" }) + this.pageInfos.pushPath({ name: 'PageTwo' }) }).margin({ bottom: 16 }) } .title('金融数字盾') diff --git a/entry/src/main/ets/pages/PageOne.ets b/entry/src/main/ets/pages/PageOne.ets index 20327fb..d96b56a 100644 --- a/entry/src/main/ets/pages/PageOne.ets +++ b/entry/src/main/ets/pages/PageOne.ets @@ -1,14 +1,29 @@ +/* +* Copyright (c) 2025 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ import TrustedAuth from '../model/TrustedAuthentication'; import { PromptAction } from '@kit.ArkUI'; +import { hilog } from '@kit.PerformanceAnalysisKit'; const TUI_PIN_SET = 1 const TUI_PIN_MODIFY = 2 const TUI_PIN_SET_MIX = 9 const TUI_PIN_MODIFY_MIX = 10 - +const DOMAIN = 0x0000 @Builder -export function PageOneBuilder(name: string, param: Object) { +export function PageOneBuilder() { PageOne() } @@ -79,16 +94,16 @@ export struct PageOne { } try { await TrustedAuth.TestGenKeyForTuiPinSign(); - console.log('生成密钥成功'); + hilog.info(DOMAIN, 'testTag', '生成密钥成功'); let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; + hilog.info(DOMAIN, 'testTag', '签名初始化完成'); + let indata: string = 'aaabbb'; await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, this.type, 'pin_label1'); this.message += `修改数字盾密码成功`; this.hasShield = true; } catch (error) { // 捕获错误并处理 - console.error('检查失败:', error); + hilog.error(DOMAIN, 'testTag', '检查失败:', error); this.message += `修改数字盾密码失败: ${error}`; } this.promptAction.openToast({ @@ -108,16 +123,16 @@ export struct PageOne { } try { await TrustedAuth.TestGenKeyForTuiPinSign(); - console.log('生成密钥成功'); + hilog.info(DOMAIN, 'testTag', '生成密钥成功'); let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; + hilog.info(DOMAIN, 'testTag', '签名初始化完成'); + let indata: string = 'aaabbb'; await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, this.type, 'pin_label1'); this.message += `开通数字盾成功`; this.hasShield = true; } catch (error) { // 捕获错误并处理 - console.error('检查失败:', error); + hilog.error(DOMAIN, 'testTag', '检查失败:', error); this.message += `\n\n开通数字盾失败: ${error}`; } this.promptAction.openToast({ diff --git a/entry/src/main/ets/pages/PageTwo.ets b/entry/src/main/ets/pages/PageTwo.ets index 2a74cc9..b81f3d2 100644 --- a/entry/src/main/ets/pages/PageTwo.ets +++ b/entry/src/main/ets/pages/PageTwo.ets @@ -1,18 +1,34 @@ +/* +* Copyright (c) 2025 Huawei Device Co., Ltd. +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ import TrustedAuth from '../model/TrustedAuthentication'; -import { PromptAction } from "@kit.ArkUI"; +import { PromptAction } from '@kit.ArkUI'; import { trustedAuthentication } from '@kit.DeviceSecurityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; const TUI_CONTENT_PWD_VERIFY = 4 const TUI_CONTENT_FACE_VERIFY = 5 const TUI_CONTENT_FINGERPRINT_VERIFY = 6 +const DOMAIN = 0x0000 @Builder -export function PageTwoBuilder(name: string, param: Object) { +export function PageTwoBuilder() { PageTwo() } @Builder -export function BindSheetBuilder(name: string, param: Object) { +export function BindSheetBuilder() { BindSheetTemp() } @@ -33,13 +49,13 @@ export struct BindSheetTemp { this.message = ''; try { let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); + hilog.info(DOMAIN, 'testTag', '签名初始化完成'); let indata: string = this.receiver + '/' + this.receiveAccount + '/' + this.tradingAmount; - await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_CONTENT_PWD_VERIFY, "pin_label1"); + await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_CONTENT_PWD_VERIFY, 'pin_label1'); this.message += `密码交易认证成功`; } catch (error) { - console.error('n密码交易认证失败:', error); - this.message += `\n\n密码交易认证失败: ${error}`; + hilog.error(DOMAIN, 'testTag', 'n密码交易认证失败:', error); + this.message += `密码交易认证失败: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -51,19 +67,18 @@ export struct BindSheetTemp { this.message = ''; try { let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; + hilog.info(DOMAIN, 'testTag', '签名初始化完成'); const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FINGERPRINT_VERIFY, "pin_label1"); + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FINGERPRINT_VERIFY, 'pin_label1'); let bioAuthToken: Uint8Array = - await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_CONTENT_FINGERPRINT_VERIFY); + await TrustedAuth.UserAuthBeforeSign(session, TUI_CONTENT_FINGERPRINT_VERIFY); let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; let resignAuthToken = await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) this.message += `指纹交易认证成功`; } catch (error) { - console.error('n指纹交易认证失败:', error); + hilog.error(DOMAIN, 'testTag', 'n指纹交易认证失败:', error); if(error.code === 1019100019){ this.message += `指纹交易认证失败:请用数字盾的指纹进行认证,多次失败请返回上一页解绑后重新绑定`; } @@ -82,19 +97,18 @@ export struct BindSheetTemp { this.message = ''; try { let session = await TrustedAuth.SignInit(); - console.info("签名初始化完成"); - let indata: string = "aaabbb"; + hilog.info(DOMAIN, 'testTag', '签名初始化完成'); const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FACE_VERIFY, "pin_label1"); + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FACE_VERIFY, 'pin_label1'); let bioAuthToken: Uint8Array = - await TrustedAuth.UserAuthBeforeSign(indata, session, TUI_CONTENT_FACE_VERIFY); + await TrustedAuth.UserAuthBeforeSign(session, TUI_CONTENT_FACE_VERIFY); let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; let resignAuthToken = await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) this.message += `人脸交易认证成功`; } catch (error) { - console.error('n人脸交易认证失败:', error); + hilog.error(DOMAIN, 'testTag', 'n人脸交易认证失败:', error); if(error.code === 1019100019){ this.message += `人脸交易认证失败:请确认认证信息是否正确,多次失败请返回上一页解绑后重新绑定`; } @@ -170,7 +184,7 @@ export struct PageTwo { .onClick(() => { this.bindSheetShow = true; }) - .bindSheet(this.bindSheetShow!!, BindSheetBuilder('', ''), this.sheetOption); + .bindSheet(this.bindSheetShow!!, BindSheetBuilder(), this.sheetOption); } } .title('银行卡转账') diff --git a/screenshots/index.jpg b/screenshots/index.jpg deleted file mode 100644 index d430df5f20855c5b6849efb792cdb4ad92093833..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106578 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 diff --git a/screenshots/index.png b/screenshots/index.png new file mode 100644 index 0000000000000000000000000000000000000000..af6be326a0025d3c0c0fba9d8221bfd8b558aafb GIT binary patch literal 163711 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\gLy?R)^u^2iOHI7aI1+}(3;uI< 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 GasLm}^;Zf2 literal 0 HcmV?d00001 -- Gitee From 51ddc2df74e3706b26cc3841586a497fd583fb6a Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Thu, 14 Aug 2025 23:23:19 +0800 Subject: [PATCH 12/16] code review fix 1 --- README.md | 13 +- .../main/ets/model/TrustedAuthentication.ets | 148 +++++----- entry/src/main/ets/pages/MainPage.ets | 113 ++++---- ...{PageOne.ets => PasswordSelectionPage.ets} | 42 +-- .../pages/{PageTwo.ets => TradingPage.ets} | 54 ++-- .../main/ets/{Utils => utils}/AssetUtils.ets | 2 +- .../TrustedServiceOption.ets | 0 .../main/resources/base/element/string.json | 241 +++++++++++++++- .../resources/base/profile/router_map.json | 16 +- .../main/resources/en_US/element/color.json | 8 + .../main/resources/en_US/element/float.json | 8 + .../main/resources/en_US/element/string.json | 259 ++++++++++++++++++ .../main/resources/zh_CN/element/color.json | 8 + .../main/resources/zh_CN/element/float.json | 8 + .../main/resources/zh_CN/element/string.json | 259 ++++++++++++++++++ 15 files changed, 979 insertions(+), 200 deletions(-) rename entry/src/main/ets/pages/{PageOne.ets => PasswordSelectionPage.ets} (74%) rename entry/src/main/ets/pages/{PageTwo.ets => TradingPage.ets} (70%) rename entry/src/main/ets/{Utils => utils}/AssetUtils.ets (97%) rename entry/src/main/ets/{Common => utils}/TrustedServiceOption.ets (100%) create mode 100644 entry/src/main/resources/en_US/element/color.json create mode 100644 entry/src/main/resources/en_US/element/float.json create mode 100644 entry/src/main/resources/en_US/element/string.json create mode 100644 entry/src/main/resources/zh_CN/element/color.json create mode 100644 entry/src/main/resources/zh_CN/element/float.json create mode 100644 entry/src/main/resources/zh_CN/element/string.json diff --git a/README.md b/README.md index de5e619..a7e61fe 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,6 @@ ``` ├──entry/src/main/ets/ -│ ├──Common -│ │ └──TrustedServiceOption.ets // 可信服务配置 │ ├──entryability │ │ └──EntryAbility.ets // Ability的生命周期回调内容 │ ├──entrybackupability @@ -44,10 +42,11 @@ │ ├──pages │ │ ├──Index.ets // Navigation导航入口界面 │ │ ├──MainPage.ets // 数字盾信息主界面 -│ │ ├──PageOne.ets // 密码类型选择界面 -│ │ └──PageTwo.ets // 交易信息界面 -│ └──Utils // 工具 -│ └──AssetUtils.ets // 关键资产存储服务工具 +│ │ ├──PasswordSelectionPage.ets // 密码类型选择界面 +│ │ └──TradingPage.ets // 交易信息界面 +│ └──utils // 工具 +│ ├──AssetUtils.ets // 关键资产存储服务工具 +│ └──TrustedServiceOption.ets // 可信服务配置 ├──resource └──module.json5 @@ -68,7 +67,7 @@ 3. User Authentication Kit (用户认证服务) ## 约束与限制 -1. 本示例仅支持标准系统上运行,支持设备:phone。 +1. 本示例仅支持标准系统上运行,支持设备:手机。 2. HarmonyOS系统:HarmonyOS 6.0 Beta3及以上。 3. DevEco Studio版本:DevEco Studio 6.0 Beta3及以上。 4. HarmonyOS SDK版本:HarmonyOS 6.0 Bete3 SDK及以上。 diff --git a/entry/src/main/ets/model/TrustedAuthentication.ets b/entry/src/main/ets/model/TrustedAuthentication.ets index 014563b..30fcb2c 100644 --- a/entry/src/main/ets/model/TrustedAuthentication.ets +++ b/entry/src/main/ets/model/TrustedAuthentication.ets @@ -18,7 +18,7 @@ import { BusinessError } from '@kit.BasicServicesKit'; import { userAuth } from '@kit.UserAuthenticationKit'; import { trustedAuthentication } from '@kit.DeviceSecurityKit'; import { util } from '@kit.ArkTS'; -import AssetUtils from '../Utils/AssetUtils'; +import AssetUtils from '../utils/AssetUtils'; import { hilog } from '@kit.PerformanceAnalysisKit'; const TUI_PIN_SET = 1 @@ -31,11 +31,8 @@ const TUI_BIND_FINGERPRINT = 8 const TUI_PIN_SET_MIX = 9 const TUI_PIN_MODIFY_MIX = 10 const DOMAIN = 0x0000 -let keyAlias = 'test_sign_key_alias'; +const KEY_ALIAS = 'test_sign_key_alias'; let handle: number; -let challenge: Uint8Array; -let signature: Uint8Array; -let authTokenData: Uint8Array; class throwObject { isThrow: boolean = false @@ -125,7 +122,7 @@ async function SignFinish(handle: number, authToken: Uint8Array, plaintext: stri inData: stringToUint8Array(plaintext) } hilog.info(DOMAIN, 'testTag', '====inData====' + options.inData); - hilog.info(DOMAIN, 'testTag', 'AAA finish 开始' + handle, options, authToken); + hilog.info(DOMAIN, 'testTag', 'AAA finish Start' + handle, options, authToken); try { let data = await huks.finishSession(handle, options, authToken); let signature = data.outData as Uint8Array; @@ -164,16 +161,16 @@ async function Verify(indata: string, signature: Uint8Array): Promise { properties: verifyProperties, inData: signature } - await huks.initSession(keyAlias, options).then((data) => { + await huks.initSession(KEY_ALIAS, options).then((data) => { handle = data.handle; hilog.info(DOMAIN, 'testTag', 'Verify Init Success! Result: ' + JSON.stringify(data)); }).catch((err: Error) => { hilog.error(DOMAIN, 'testTag', 'Init err: ' + JSON.stringify(err)); }) - hilog.info(DOMAIN, 'testTag', 'Verify Update Begin' + JSON.stringify(options) + 'handel' + JSON.stringify(handle)); + hilog.info(DOMAIN, 'testTag', 'Verify Update Begin' + JSON.stringify(options) + 'handle' + JSON.stringify(handle)); options.inData = newIndata; await huks.updateSession(handle, options).then(() => { - hilog.info(DOMAIN, 'testTag', 'Verify Update Begin(infunction)' + JSON.stringify(options.inData)); + hilog.info(DOMAIN, 'testTag', 'Verify Update Begin(inFunction)' + JSON.stringify(options.inData)); }).catch((err: Error) => { hilog.error(DOMAIN, 'testTag', 'Verify update err: ' + JSON.stringify(err)); }) @@ -181,7 +178,7 @@ async function Verify(indata: string, signature: Uint8Array): Promise { hilog.info(DOMAIN, 'testTag', 'Verify Finish SIG' + JSON.stringify(signature)); options.inData = newSignature; await huks.finishSession(handle, options).then(() => { - hilog.info(DOMAIN, 'testTag', 'Verify Finisht Success! Result:' + JSON.stringify(options.inData)); + hilog.info(DOMAIN, 'testTag', 'Verify Finish Success! Result:' + JSON.stringify(options.inData)); }).catch((err: Error) => { hilog.error(DOMAIN, 'testTag', 'Verify finish err: ' + JSON.stringify(err)); }); @@ -252,14 +249,14 @@ class TrustedAuth { const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: '数字盾密码验证' + title: $r('app.string.ShieldPwVerification') } const result = await trustedAuthentication.trustedAuthentication(challenge, credentialID, label); - hilog.info(DOMAIN, 'testTag', '数字盾密码认证:', result.authToken.length, result.authToken); + hilog.info(DOMAIN, 'testTag', 'DigitalShield password verification success:', result.authToken.length, result.authToken); return result; } catch (error) { - hilog.error(DOMAIN, 'testTag', '数字盾密码认证:', error); - throw new Error('数字盾密码认证失败:' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'DigitalShield password verification failed:', error); + throw new Error('DigitalShield password verification failed:' + (error as BusinessError).message); } } @@ -274,16 +271,16 @@ class TrustedAuth { const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: '开通数字盾' + title: $r('app.string.OpenShield') } const authInfo = await trustedAuthentication.enableTrustedAuthentication(challenge, passwordInfo, label); let assetLabel = assetName + 'label'; await AssetUtils.AddDataToAssetStore(this.bigIntToUint8Array(authInfo.authID), assetName, assetLabel); - hilog.info(DOMAIN, 'testTag', '开通数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + hilog.info(DOMAIN, 'testTag', 'Open Shield Success:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); return authInfo; } catch (error) { - hilog.error(DOMAIN, 'testTag', '开通数字盾失败:', error); - throw new Error('开通数字盾失败:' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'Open Shield Fail:', error); + throw new Error('Open Shield Fail:' + (error as BusinessError).message); } } @@ -298,16 +295,16 @@ class TrustedAuth { const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: '开通数字盾' + title: $r('app.string.OpenShield') } const authInfo = await trustedAuthentication.enableTrustedAuthentication(challenge, passwordInfo, label); let assetLabel = assetName + 'label'; await AssetUtils.AddDataToAssetStore(this.bigIntToUint8Array(authInfo.authID), assetName, assetLabel); - hilog.info(DOMAIN, 'testTag', '开通数字盾成功:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + hilog.info(DOMAIN, 'testTag', 'Open Shield Success:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); return authInfo; } catch (error) { - hilog.error(DOMAIN, 'testTag', '开通数字盾失败:', error); - throw new Error('开通数字盾失败:' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'Open Shield Fail:', error); + throw new Error('Open Shield Fail:' + (error as BusinessError).message); } } @@ -324,15 +321,15 @@ class TrustedAuth { const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: '修改金融盾' + title: $r('app.string.ModifyShield') } const authInfo = await trustedAuthentication.modifyTrustedAuthenticationPwd(challenge, passwordInfo, credentialID, label); - hilog.info(DOMAIN, 'testTag', '修改数字盾成功:', authInfo.authToken); + hilog.info(DOMAIN, 'testTag', 'Modify Shield Success:', authInfo.authToken); return authInfo; } catch (error) { - hilog.error(DOMAIN, 'testTag', '密码修改失败:', error); - throw new Error('密码修改失败:' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'Modify Shield Fail:', error); + throw new Error('Modify Shield Fail:' + (error as BusinessError).message); } } @@ -349,15 +346,15 @@ class TrustedAuth { const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: '修改金融盾' + title: $r('app.string.ModifyShield') } const authInfo = await trustedAuthentication.modifyTrustedAuthenticationPwd(challenge, passwordInfo, credentialID, label); - hilog.info(DOMAIN, 'testTag', '修改数字盾成功:', authInfo.authToken); + hilog.info(DOMAIN, 'testTag', 'Modify Shield Success:', authInfo.authToken); return authInfo; } catch (error) { - hilog.error(DOMAIN, 'testTag', '密码修改失败:', error); - throw new Error('密码修改失败:' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'Modify Shield Fail:', error); + throw new Error('Modify Shield Fail:' + (error as BusinessError).message); } } @@ -368,18 +365,18 @@ class TrustedAuth { const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: '关闭金融盾' + title: $r('app.string.CloseShield') } const authInfo = await trustedAuthentication.disableTrustedAuthentication(challenge, true, credentialID, label); AssetUtils.DeleteDataFromAssetStore('pin_label1'); AssetUtils.DeleteDataFromAssetStore('credentialID'); AssetUtils.DeleteDataFromAssetStore('face_credentialID'); AssetUtils.DeleteDataFromAssetStore('finger_credentialID'); - hilog.info(DOMAIN, 'testTag', '关闭数字盾成功:', authInfo.authToken); + hilog.info(DOMAIN, 'testTag', 'Close Shield Success:', authInfo.authToken); return authInfo; } catch (error) { - hilog.error(DOMAIN, 'testTag', '关闭数字盾失败:', error); - throw new Error('关闭数字盾失败:' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'Close Shield Fail:', error); + throw new Error('Close Shield Fail:' + (error as BusinessError).message); } } @@ -397,18 +394,19 @@ class TrustedAuth { AssetUtils.DeleteDataFromAssetStore('credentialID'); AssetUtils.DeleteDataFromAssetStore('face_credentialID'); AssetUtils.DeleteDataFromAssetStore('finger+credentialID'); - hilog.info(DOMAIN, 'testTag', '关闭数字盾成功:', authInfo.authToken); + hilog.info(DOMAIN, 'testTag', 'Close Shield Success:', authInfo.authToken); return authInfo.authToken; } catch (error) { - hilog.error(DOMAIN, 'testTag', '关闭数字盾失败:', error); - throw new Error('关闭数字盾失败:' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'Close Shield Fail:', error); + throw new Error('Close Shield Fail:' + (error as BusinessError).message); } } async FaceAuthContent(challenge: Uint8Array, assetName: string): Promise { try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FACE); - hilog.info(DOMAIN, 'testTag', `get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + hilog.info(DOMAIN, 'testTag', + `get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); const buffer: ArrayBuffer = await this.ImportImage(); @@ -419,21 +417,22 @@ class TrustedAuth { } const label: trustedAuthentication.TUILable = { image: buffer, - title: '人脸交易认证' + title: $r('app.string.FaceVerification') } const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); - hilog.info(DOMAIN, 'testTag', '人脸交易认证:', result.authToken); + hilog.info(DOMAIN, 'testTag', 'Face Verification Success:', result.authToken); return result; } catch (error) { - hilog.error(DOMAIN, 'testTag', '人脸交易认证失败:', error); - throw new Error('人脸交易认证失败:' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'Face Verification Fail:', error); + throw new Error('Face Verification Fail:' + (error as BusinessError).message); } } async FingerPrintAuthContent(challenge: Uint8Array, assetName: string): Promise { try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FINGERPRINT); - hilog.info(DOMAIN, 'testTag', `get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + hilog.info(DOMAIN, 'testTag', + `get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); const buffer: ArrayBuffer = await this.ImportImage(); @@ -444,14 +443,14 @@ class TrustedAuth { } const label: trustedAuthentication.TUILable = { image: buffer, - title: '指纹交易认证' + title: $r('app.string.FingerprintVerification') } const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); - hilog.info(DOMAIN, 'testTag', '指纹交易认证:', result.authToken); + hilog.info(DOMAIN, 'testTag', 'Fingerprint Verification Success:', result.authToken); return result; } catch (error) { - hilog.error(DOMAIN, 'testTag', '指纹交易认证失败:', error); - throw new Error('指纹交易认证失败:' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'Fingerprint Verification Fail:', error); + throw new Error('Fingerprint Verification Fail:' + (error as BusinessError).message); } } @@ -467,14 +466,14 @@ class TrustedAuth { } const label: trustedAuthentication.TUILable = { image: buffer, - title: '密码交易认证' + title: $r('app.string.PINVerification') } const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); - hilog.info(DOMAIN, 'testTag', '密码交易认证:', result.authToken); + hilog.info(DOMAIN, 'testTag', 'Pin Verification Success:', result.authToken); return result; } catch (error) { - hilog.error(DOMAIN, 'testTag', '密码交易认证失败:', error); - throw new Error('密码交易认证失败:' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'Pin Verification Fail:', error); + throw new Error('Pin Verification Fail:' + (error as BusinessError).message); } } @@ -509,7 +508,7 @@ class TrustedAuth { properties: properties, inData: new Uint8Array(new Array()) } - await publicGenKeyFunc(keyAlias, huksOptions); + await publicGenKeyFunc(KEY_ALIAS, huksOptions); }; async SignInit(): Promise { @@ -519,9 +518,9 @@ class TrustedAuth { inData: new Uint8Array } - let result = await huks.initSession(keyAlias, options); - handle = result.handle; - challenge = result.challenge as Uint8Array + let result = await huks.initSession(KEY_ALIAS, options); + let handle = result.handle; + let challenge = result.challenge as Uint8Array hilog.info(DOMAIN, 'testTag', 'initSession complete' + handle + '----' + challenge); return result; } @@ -531,10 +530,10 @@ class TrustedAuth { let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); await trustedAuthentication.disableTrustedBioAuthentication(credentialID, authType); - hilog.info(DOMAIN, 'testTag', '解绑成功'); + hilog.info(DOMAIN, 'testTag', 'unBound success'); } catch (error) { - hilog.error(DOMAIN, 'testTag', '解绑失败', JSON.stringify(error)); - throw new Error('解绑失败' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'unBound fail', JSON.stringify(error)); + throw new Error('unBound fail' + (error as BusinessError).message); } } @@ -544,8 +543,8 @@ class TrustedAuth { let signature = await SignFinish(session.handle, authToken, inputdata); hilog.info(DOMAIN, 'testTag', 'IAM auth on success'); } catch (error) { - hilog.error(DOMAIN, 'testTag','IAM auth catch error', JSON.stringify(error)); - throw new Error('拉起IAM控件失败' + (error as BusinessError).message); + hilog.error(DOMAIN, 'testTag', 'IAM auth catch error', JSON.stringify(error)); + throw new Error('pull up IAM Fail' + (error as BusinessError).message); } } @@ -554,22 +553,22 @@ class TrustedAuth { let challenge: Uint8Array = session.challenge as Uint8Array; let tempAuthToken: trustedAuthentication.AuthToken; if (authType === TUI_PIN_SET) { - hilog.info(DOMAIN, 'testTag', '============创建密码============'); + hilog.info(DOMAIN, 'testTag', '============createPW============'); tempAuthToken = await this.SetPwd(challenge, label); } else if (authType === TUI_PIN_MODIFY) { - hilog.info(DOMAIN, 'testTag', '============修改密码============'); + hilog.info(DOMAIN, 'testTag', '============modifyPW============'); tempAuthToken = await this.ModifyPwd(challenge, label); } else if (authType === TUI_PIN_DISABLE) { - hilog.info(DOMAIN, 'testTag', '============关闭数字盾============'); + hilog.info(DOMAIN, 'testTag', '============closeShield============'); tempAuthToken = await this.DisablePwd(challenge, label); } else if (authType === TUI_PIN_SET_MIX) { - hilog.info(DOMAIN, 'testTag', '============创建密码============'); + hilog.info(DOMAIN, 'testTag', '============createPW============'); tempAuthToken = await this.SetPwdMix(challenge, label); } else if (authType === TUI_PIN_MODIFY_MIX) { - hilog.info(DOMAIN, 'testTag', '============修改密码============'); + hilog.info(DOMAIN, 'testTag', '============modifyPW============'); tempAuthToken = await this.ModifyPwdMix(challenge, label); } else { - hilog.info(DOMAIN, 'testTag', '============开始密码交易认证============'); + hilog.info(DOMAIN, 'testTag', '============startPINVerification============'); tempAuthToken = await this.ContentVerifyByPwd(challenge, label); } const TuiAuthToken: trustedAuthentication.AuthToken = tempAuthToken; @@ -578,13 +577,13 @@ class TrustedAuth { 'challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额: 10000000|2\n交易时间:2025-0605|2'; try { SignFinish(session.handle, authToken, inputdata).then((data) => { - signature = data as Uint8Array; + let signature = data as Uint8Array; Verify(inputdata, signature); }); hilog.info(DOMAIN, 'testTag', 'HUKS -> IAM auth on success'); } catch (error) { hilog.error(DOMAIN, 'testTag', 'HUKS -> IAM auth error', JSON.stringify(error)); - throw new Error('拉起IAM控件失败' + (error as BusinessError).message); + throw new Error('pull up IAM Fail' + (error as BusinessError).message); } } @@ -611,7 +610,7 @@ class TrustedAuth { return new Promise((resolve) => { userAuthInstance.on('result', { onResult(result) { - authTokenData = result.token; + let authTokenData = result.token; hilog.info(DOMAIN, 'testTag', 'auth result authTokenData', authTokenData); resolve(authTokenData); } @@ -620,7 +619,7 @@ class TrustedAuth { }); } catch (error) { hilog.error(DOMAIN, 'testTag', 'HUKS -> IAM auth error', JSON.stringify(error)); - throw new Error('拉起IAM控件失败' + (error as BusinessError).message); + throw new Error('pull up IAM Fail' + (error as BusinessError).message); } } @@ -633,7 +632,8 @@ class TrustedAuth { if (authType === TUI_BIND_FACE) { try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FACE); - hilog.info(DOMAIN, 'testTag', `get current face enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + hilog.info(DOMAIN, 'testTag', + `get current face enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); } catch (error) { hilog.error(DOMAIN, 'testTag', `get current face enrolled state failed, error = ${JSON.stringify(error)}`); throw new Error('bind' + (error as BusinessError).message); @@ -642,9 +642,11 @@ class TrustedAuth { } else if (authType === TUI_BIND_FINGERPRINT) { try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FINGERPRINT); - hilog.info(DOMAIN, 'testTag', `get current fingerprint enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); + hilog.info(DOMAIN, 'testTag', + `get current fingerprint enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); } catch (error) { - hilog.error(DOMAIN, 'testTag', `get current fingerprint enrolled state failed, error = ${JSON.stringify(error)}`); + hilog.error(DOMAIN, 'testTag', + `get current fingerprint enrolled state failed, error = ${JSON.stringify(error)}`); throw new Error('bind' + (error as BusinessError).message); } tempAuthToken = await this.PwdVerify(challenge, assetName); diff --git a/entry/src/main/ets/pages/MainPage.ets b/entry/src/main/ets/pages/MainPage.ets index 288e012..1dfc656 100644 --- a/entry/src/main/ets/pages/MainPage.ets +++ b/entry/src/main/ets/pages/MainPage.ets @@ -13,22 +13,21 @@ * limitations under the License. */ -import { trustedAppService } from '@kit.DeviceSecurityKit'; import { trustedAuthentication } from '@kit.DeviceSecurityKit'; import TrustedAuth from '../model/TrustedAuthentication'; -import createOptions from '../Common/TrustedServiceOption'; import { BusinessError } from '@kit.BasicServicesKit'; import { cryptoFramework } from '@kit.CryptoArchitectureKit'; import { userAuth } from '@kit.UserAuthenticationKit'; import { PromptAction } from '@kit.ArkUI'; -import AssetUtils from '../Utils/AssetUtils'; +import AssetUtils from '../utils/AssetUtils'; import { hilog } from '@kit.PerformanceAnalysisKit'; const TUI_PIN_DISABLE = 3 const TUI_BIND_FACE = 7 const TUI_BIND_FINGERPRINT = 8 const DOMAIN = 0x0000 +const NOT_ENROLLED_ERROR = 12500010 @Builder export function MainPageBuilder() { @@ -48,16 +47,6 @@ export struct MainPage { uiContext: UIContext = this.getUIContext(); promptAction: PromptAction = this.uiContext.getPromptAction(); - async createAttestKey(): Promise { - trustedAppService.createAttestKey(createOptions) - .then(() => { - this.message += '\n\n 创建证明密钥成功'; - }) - .catch((err: BusinessError) => { - this.message += '\n\n 创建证明密钥失败: ' + err.message; - }); - } - async aboutToAppear(): Promise { const bytes = [0x00, 0x00, 0x00, 0x80, 0x80, 0xd2, 0x41, 0x40]; const buffer = new ArrayBuffer(bytes.length); @@ -80,7 +69,7 @@ export struct MainPage { hilog.info(DOMAIN, 'testTag', 'current auth trust level supported'); } catch (error) { const err: BusinessError = error as BusinessError; - if(error.code === 12500010){ + if(error.code === NOT_ENROLLED_ERROR){ hilog.error(DOMAIN, 'testTag', `Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`); }else{ hilog.error(DOMAIN, 'testTag', `current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`); @@ -95,7 +84,7 @@ export struct MainPage { hilog.info(DOMAIN, 'testTag', 'current auth trust level supported'); } catch (error) { const err: BusinessError = error as BusinessError; - if(error.code === 12500010){ + if(error.code === NOT_ENROLLED_ERROR){ hilog.error(DOMAIN, 'testTag', `Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`); }else{ hilog.error(DOMAIN, 'testTag', `current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`); @@ -111,7 +100,7 @@ export struct MainPage { Scroll() { Column() { Column() { - Text('身份认证设置') + Text($r('app.string.IDSetting')) .width('100%') .fontSize(500) .fontSize(14) @@ -125,21 +114,21 @@ export struct MainPage { }) Row() { - Text('数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) + Text($r('app.string.DigitalShield')).textAlign(TextAlign.Start).margin({ left: 12 }) Blank() if (this.hasShield) { - Button('修改密码') + Button($r('app.string.ModifyPassword')) .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(async () => { - this.pageInfos.pushPath({name: 'PageOne'}) + this.pageInfos.pushPath({name: 'PasswordSelectionPage'}) }); } else { - Button(' 开通 ') + Button($r('app.string.OpenWord')) .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(() => { - this.pageInfos.pushPath({ name: 'PageOne' }) + this.pageInfos.pushPath({ name: 'PasswordSelectionPage' }) }) } } @@ -154,7 +143,7 @@ export struct MainPage { if (this.hasShield) { Column() { - Text('关闭数字盾') + Text($r('app.string.CloseShield')) .width('100%') .fontSize(500) .fontSize(14) @@ -169,25 +158,25 @@ export struct MainPage { Column() { Row() { - Text('需认证关闭数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) + Text($r('app.string.CloseShieldWithVerification')).textAlign(TextAlign.Start).margin({ left: 12 }) Blank() - Button('关闭') + Button($r('app.string.CloseWord')) .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(async () => { this.message = ''; try { let session = await TrustedAuth.SignInit(); - hilog.info(DOMAIN, 'testTag', '签名初始化完成'); + hilog.info(DOMAIN, 'testTag', 'Finish Signature Initialization'); let indata: string = 'aaabbb'; await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_PIN_DISABLE, 'pin_label1'); - this.message += `关闭数字盾成功`; + this.message += $r('app.string.CloseShieldSuccess'); this.hasShield = false; this.fingerprintBind = false; this.faceBind = false; } catch (error) { - hilog.error(DOMAIN, 'testTag', 'n关闭数字盾失败:', error); - this.message += `关闭数字盾失败: ${error}`; + hilog.error(DOMAIN, 'testTag', 'Close Shield Fail:', error); + this.message += $r('app.string.CloseShieldFail') + `: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -200,9 +189,9 @@ export struct MainPage { Divider().width('93%') Row() { - Text('无需认证关闭数字盾').textAlign(TextAlign.Start).margin({ left: 12 }) + Text($r('app.string.CloseShieldWithoutVerification')).textAlign(TextAlign.Start).margin({ left: 12 }) Blank() - Button('关闭') + Button($r('app.string.CloseWord')) .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(async () => { @@ -212,14 +201,14 @@ export struct MainPage { const len: number = 32; const challenge: Uint8Array = rand?.generateRandomSync(len)?.data; const authToken = await TrustedAuth.disablePwdWithoutAuth(challenge, 'pin_label1'); - hilog.info(DOMAIN, 'testTag', '关闭数字盾成功:', authToken); - this.message += `关闭数字盾成功`; + hilog.info(DOMAIN, 'testTag', 'Close Shield Success:', authToken); + this.message += $r('app.string.CloseShieldSuccess'); this.hasShield = false; this.fingerprintBind = false; this.faceBind = false; } catch (error) { - hilog.error(DOMAIN, 'testTag', 'n关闭数字盾失败:', error); - this.message += `关闭数字盾失败: ${error}`; + hilog.error(DOMAIN, 'testTag', 'Close Shield Fail:', error); + this.message += $r('app.string.CloseShieldFail')+ `: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -241,7 +230,7 @@ export struct MainPage { if(this.bioState != 0){ Column() { - Text('生物特征认证方式') + Text($r('app.string.BioFeatureVerification')) .width('100%') .fontSize(500) .fontSize(14) @@ -259,16 +248,16 @@ export struct MainPage { if(this.hasFingerprintAbility){ if (!this.fingerprintBind) { Row() { - Text('指纹识别').textAlign(TextAlign.Start).margin({ left: 12 }) + Text($r('app.string.Fingerprint')).textAlign(TextAlign.Start).margin({ left: 12 }) Blank() - Button('绑定') + Button($r('app.string.Bind')) .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(async () => { this.message = ''; try { let session = await TrustedAuth.SignInit(); - hilog.info(DOMAIN, 'testTag', '签名初始化完成'); + hilog.info(DOMAIN, 'testTag', 'Finish Signature Initialization'); const tuiAuthToken: Uint8Array = await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FINGERPRINT, 'pin_label1'); @@ -279,14 +268,14 @@ export struct MainPage { await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); let inputdata = 'challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2'; await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) - this.message += `指纹绑定成功`; + this.message += $r('app.string.BindFingerprintSuccess'); this.fingerprintBind = true; } catch (error) { - hilog.error(DOMAIN, 'testTag', 'n指纹绑定失败:', error); + hilog.error(DOMAIN, 'testTag', 'Bind Fingerprint Fail:', error); if(error.message === 'Authentication template has not been enrolled.'){ - this.message += `指纹绑定失败:请前往系统界面绑定生物信息` + this.message += $r('app.string.BindFingerprintFailWithNotification') }else{ - this.message += `指纹绑定失败: ${error}`; + this.message += $r('app.string.BindFingerprintFail')+ `: ${error}`; } } this.promptAction.openToast({ @@ -299,9 +288,9 @@ export struct MainPage { .height(56) } else { Row() { - Text('指纹识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) + Text( $r('app.string.FingerprintBound')).textAlign(TextAlign.Start).margin({ left: 12 }) Blank() - Button('解绑') + Button($r('app.string.UnBound')) .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(async () => { @@ -309,12 +298,12 @@ export struct MainPage { try { let authType = trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT; await TrustedAuth.disableTrustedBioAuthentication('pin_label1', authType); - this.message += `解绑指纹成功`; + this.message += $r('app.string.UnBoundFingerprintSuccess'); this.fingerprintBind = false; } catch (error) { // 捕获错误并处理 - hilog.error(DOMAIN, 'testTag', '解绑指纹失败:', error); - this.message += `解绑指纹失败: ${error}`; + hilog.error(DOMAIN, 'testTag', 'UnBound Fingerprint Fail:', error); + this.message += $r('app.string.UnBoundFingerprintFail')+`: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -331,16 +320,16 @@ export struct MainPage { if(this.hasFaceAbility){ if (!this.faceBind) { Row() { - Text('人脸识别').textAlign(TextAlign.Start).margin({ left: 12 }) + Text($r('app.string.Face')).textAlign(TextAlign.Start).margin({ left: 12 }) Blank() - Button('绑定') + Button($r('app.string.Bind')) .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(async () => { this.message = ''; try { let session = await TrustedAuth.SignInit(); - hilog.info(DOMAIN, 'testTag', '签名初始化完成'); + hilog.info(DOMAIN, 'testTag', 'Finish Signature Initialization'); const tuiAuthToken: Uint8Array = await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FACE, 'pin_label1'); let bioAuthToken: Uint8Array = @@ -350,14 +339,14 @@ export struct MainPage { await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); let inputdata = 'challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2'; await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) - this.message += `人脸绑定成功`; + this.message += $r('app.string.BindFaceSuccess'); this.faceBind = true; } catch (error) { - hilog.error(DOMAIN, 'testTag', 'n人脸绑定失败:', error); + hilog.error(DOMAIN, 'testTag', 'Bind Face Fail:', error); if(error.message === 'Authentication template has not been enrolled.'){ - this.message += `人脸绑定失败:请前往系统界面绑定生物信息` + this.message += $r('app.string.BindFaceFailWithNotification') }else{ - this.message += `人脸绑定失败: ${error}`; + this.message += $r('app.string.BindFaceFail')+ ` : ${error}`; } } this.promptAction.openToast({ @@ -369,9 +358,9 @@ export struct MainPage { .height(56) } else { Row() { - Text('人脸识别--已绑定').textAlign(TextAlign.Start).margin({ left: 12 }) + Text($r('app.string.FaceBound')).textAlign(TextAlign.Start).margin({ left: 12 }) Blank() - Button('解绑') + Button($r('app.string.UnBound')) .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(async () => { @@ -379,12 +368,12 @@ export struct MainPage { try { let authType = trustedAuthentication.AuthType.AUTH_TYPE_FACE; await TrustedAuth.disableTrustedBioAuthentication('pin_label1', authType); - this.message += `解绑人脸成功`; + this.message += $r('app.string.UnBoundFaceSuccess'); this.faceBind = false; } catch (error) { // 捕获错误并处理 - hilog.error(DOMAIN, 'testTag', '检查失败:', error); - this.message += `解绑人脸失败: ${error}`; + hilog.error(DOMAIN, 'testTag', 'UnBound Face Fail:', error); + this.message += $r('app.string.UnBoundFaceFail')+`: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -412,11 +401,11 @@ export struct MainPage { .constraintSize({minHeight:'100%'}) .width('100%') }.height('calc(100% - 56vp)') - Button('去转账').width('calc(100% - 32vp)').onClick(() => { - this.pageInfos.pushPath({ name: 'PageTwo' }) + Button($r('app.string.Trade')).width('calc(100% - 32vp)').onClick(() => { + this.pageInfos.pushPath({ name: 'TradingPage' }) }).margin({ bottom: 16 }) } - .title('金融数字盾') + .title($r('app.string.FinDigitalShield')) .hideBackButton(true) .backgroundColor('#F1F3F5') .width('100%') diff --git a/entry/src/main/ets/pages/PageOne.ets b/entry/src/main/ets/pages/PasswordSelectionPage.ets similarity index 74% rename from entry/src/main/ets/pages/PageOne.ets rename to entry/src/main/ets/pages/PasswordSelectionPage.ets index d96b56a..5ff9689 100644 --- a/entry/src/main/ets/pages/PageOne.ets +++ b/entry/src/main/ets/pages/PasswordSelectionPage.ets @@ -23,12 +23,12 @@ const TUI_PIN_MODIFY_MIX = 10 const DOMAIN = 0x0000 @Builder -export function PageOneBuilder() { - PageOne() +export function PasswordSelectionPageBuilder() { + PasswordSelectionPage() } @Component -export struct PageOne { +export struct PasswordSelectionPage { @State onlyNum: boolean = true; @State message: string = ''; @State type: number = 0; @@ -41,7 +41,7 @@ export struct PageOne { NavDestination() { Column() { Column() { - Text('请设定数字盾的验证方式') + Text($r('app.string.PlzSetVerificationWay')) .width('100%') .fontSize(500) .fontSize(14) @@ -56,7 +56,7 @@ export struct PageOne { Row() { Checkbox().margin({ left: 18 }).select(this.onlyNum!!) - Text('数字密码').textAlign(TextAlign.Start).margin({ left: 8 }) + Text($r('app.string.PureNumber')).textAlign(TextAlign.Start).margin({ left: 8 }) } .width('calc(100% - 32vp)') .height(56) @@ -72,7 +72,7 @@ export struct PageOne { Checkbox().margin({ left: 18 }).select(!this.onlyNum).onClick(() => { this.onlyNum = !this.onlyNum }) - Text('数字+英文组合密码').textAlign(TextAlign.Start).margin({ left: 8 }) + Text($r('app.string.NumberPlusAlphabet')).textAlign(TextAlign.Start).margin({ left: 8 }) } .width('calc(100% - 32vp)') .height(56) @@ -85,7 +85,7 @@ export struct PageOne { Blank() if(this.hasShield){ - Button('立即修改').width('calc(100% - 32vp)').onClick(async () => { + Button($r('app.string.ModifyWord')).width('calc(100% - 32vp)').onClick(async () => { this.message = ''; if (this.onlyNum) { this.type = TUI_PIN_MODIFY; @@ -94,17 +94,17 @@ export struct PageOne { } try { await TrustedAuth.TestGenKeyForTuiPinSign(); - hilog.info(DOMAIN, 'testTag', '生成密钥成功'); + hilog.info(DOMAIN, 'testTag', 'Generate Key Success'); let session = await TrustedAuth.SignInit(); - hilog.info(DOMAIN, 'testTag', '签名初始化完成'); + hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); let indata: string = 'aaabbb'; await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, this.type, 'pin_label1'); - this.message += `修改数字盾密码成功`; + this.message += $r('app.string.ModifyPwSuccess'); this.hasShield = true; } catch (error) { - // 捕获错误并处理 - hilog.error(DOMAIN, 'testTag', '检查失败:', error); - this.message += `修改数字盾密码失败: ${error}`; + // catch error + hilog.error(DOMAIN, 'testTag', 'Modify Pw Fail:', error); + this.message += $r('app.string.ModifyPwFail')+`: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -114,7 +114,7 @@ export struct PageOne { }).margin({ bottom: 16 }) } else{ - Button('立即开通').width('calc(100% - 32vp)').onClick(async () => { + Button($r('app.string.OpenWord')).width('calc(100% - 32vp)').onClick(async () => { this.message = ''; if (this.onlyNum) { this.type = TUI_PIN_SET; @@ -123,17 +123,17 @@ export struct PageOne { } try { await TrustedAuth.TestGenKeyForTuiPinSign(); - hilog.info(DOMAIN, 'testTag', '生成密钥成功'); + hilog.info(DOMAIN, 'testTag', 'GenerateKeySuccess'); let session = await TrustedAuth.SignInit(); - hilog.info(DOMAIN, 'testTag', '签名初始化完成'); + hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); let indata: string = 'aaabbb'; await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, this.type, 'pin_label1'); - this.message += `开通数字盾成功`; + this.message += $r('app.string.OpenShieldSuccess'); this.hasShield = true; } catch (error) { - // 捕获错误并处理 - hilog.error(DOMAIN, 'testTag', '检查失败:', error); - this.message += `\n\n开通数字盾失败: ${error}`; + // catch error + hilog.error(DOMAIN, 'testTag', 'OpenShield Fail:', error); + this.message += $r('app.string.OpenShieldFail')+`: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -144,7 +144,7 @@ export struct PageOne { } }.width('100%').height('100%') } - .title('数字盾') + .title($r('app.string.DigitalShield')) .backgroundColor('#F1F3F5') } } \ No newline at end of file diff --git a/entry/src/main/ets/pages/PageTwo.ets b/entry/src/main/ets/pages/TradingPage.ets similarity index 70% rename from entry/src/main/ets/pages/PageTwo.ets rename to entry/src/main/ets/pages/TradingPage.ets index b81f3d2..1b0ce10 100644 --- a/entry/src/main/ets/pages/PageTwo.ets +++ b/entry/src/main/ets/pages/TradingPage.ets @@ -23,8 +23,8 @@ const TUI_CONTENT_FINGERPRINT_VERIFY = 6 const DOMAIN = 0x0000 @Builder -export function PageTwoBuilder() { - PageTwo() +export function TradingPageBuilder() { + TradingPage() } @Builder @@ -45,17 +45,17 @@ export struct BindSheetTemp { build() { Column({ space: 12 }) { - Button('密码交易认证').width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { + Button($r('app.string.PINVerification')).width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { this.message = ''; try { let session = await TrustedAuth.SignInit(); - hilog.info(DOMAIN, 'testTag', '签名初始化完成'); + hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); let indata: string = this.receiver + '/' + this.receiveAccount + '/' + this.tradingAmount; await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_CONTENT_PWD_VERIFY, 'pin_label1'); - this.message += `密码交易认证成功`; + this.message += $r('app.string.PINVerificationSuccess'); } catch (error) { - hilog.error(DOMAIN, 'testTag', 'n密码交易认证失败:', error); - this.message += `密码交易认证失败: ${error}`; + hilog.error(DOMAIN, 'testTag', 'PIN Verification Fail:', error); + this.message += $r('app.string.PINVerificationFail')+ `: ${error}`; } this.promptAction.openToast({ message: this.message, @@ -63,11 +63,11 @@ export struct BindSheetTemp { }) }); if (this.fingerprintBind) { - Button('指纹交易认证').width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { + Button($r('app.string.FingerprintVerification')).width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { this.message = ''; try { let session = await TrustedAuth.SignInit(); - hilog.info(DOMAIN, 'testTag', '签名初始化完成'); + hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); const tuiAuthToken: Uint8Array = await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FINGERPRINT_VERIFY, 'pin_label1'); let bioAuthToken: Uint8Array = @@ -76,14 +76,14 @@ export struct BindSheetTemp { let resignAuthToken = await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) - this.message += `指纹交易认证成功`; + this.message += $r('app.string.FingerprintVerificationSuccess'); } catch (error) { - hilog.error(DOMAIN, 'testTag', 'n指纹交易认证失败:', error); + hilog.error(DOMAIN, 'testTag', 'Fingerprint Verification Fail:', error); if(error.code === 1019100019){ - this.message += `指纹交易认证失败:请用数字盾的指纹进行认证,多次失败请返回上一页解绑后重新绑定`; + this.message += $r('app.string.FingerprintVerificationFailWithNotification'); } else{ - this.message += `\n\n指纹交易认证失败: ${error}`; + this.message += $r('app.string.FingerprintVerificationFail')+ `: ${error}`; } } this.promptAction.openToast({ @@ -93,11 +93,11 @@ export struct BindSheetTemp { }); } if (this.faceBind) { - Button('人脸交易认证').width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { + Button($r('app.string.FaceVerification')).width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { this.message = ''; try { let session = await TrustedAuth.SignInit(); - hilog.info(DOMAIN, 'testTag', '签名初始化完成'); + hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); const tuiAuthToken: Uint8Array = await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FACE_VERIFY, 'pin_label1'); let bioAuthToken: Uint8Array = @@ -106,14 +106,14 @@ export struct BindSheetTemp { let resignAuthToken = await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) - this.message += `人脸交易认证成功`; + this.message += $r('app.string.FaceVerificationSuccess'); } catch (error) { - hilog.error(DOMAIN, 'testTag', 'n人脸交易认证失败:', error); + hilog.error(DOMAIN, 'testTag', 'Face Verification Fail:', error); if(error.code === 1019100019){ - this.message += `人脸交易认证失败:请确认认证信息是否正确,多次失败请返回上一页解绑后重新绑定`; + this.message += $r('app.string.FaceVerificationFailWithNotification'); } else{ - this.message += `\n\n人脸交易认证失败: ${error}`; + this.message += $r('app.string.FaceVerificationFail')+ `: ${error}`; } } this.promptAction.openToast({ @@ -127,14 +127,14 @@ export struct BindSheetTemp { } @Component -export struct PageTwo { +export struct TradingPage { @State onlyNum: boolean = true; @Provide receiver: string = ''; @Provide receiveAccount: string = ''; @Provide tradingAmount: string = ''; @State bindSheetShow: boolean = false; pageInfos: NavPathStack = new NavPathStack(); - sheetTitleOption: SheetTitleOptions = { title: '选择认证方式' } + sheetTitleOption: SheetTitleOptions = { title: $r('app.string.ChooseVerificationMethod') } sheetOption: SheetOptions = { height: SheetSize.FIT_CONTENT, title: this.sheetTitleOption } build() { @@ -143,8 +143,8 @@ export struct PageTwo { Column() { Blank().height(4) Row() { - Text('收款人').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({ left: 12 }) - TextArea({ placeholder: '张某某', text: this.receiver }) + Text($r('app.string.Recipient')).width('20%').fontSize(14).textAlign(TextAlign.Start).margin({ left: 12 }) + TextArea({ placeholder: $r('app.string.MRZhang'), text: this.receiver }) .width('75%') .fontSize(16) .backgroundColor(Color.White) @@ -152,7 +152,7 @@ export struct PageTwo { Divider().width('93%') Row() { - Text('收款账号').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({ left: 12 }) + Text($r('app.string.AccountNumber')).width('20%').fontSize(14).textAlign(TextAlign.Start).margin({ left: 12 }) TextArea({ placeholder: '6666 1234 **** **** 888', text: this.receiveAccount }) .width('75%') .fontSize(16) @@ -161,7 +161,7 @@ export struct PageTwo { Divider().width('93%') Row() { - Text('交易金额').width('20%').fontSize(14).textAlign(TextAlign.Start).margin({ left: 12 }) + Text($r('app.string.TradingAmount')).width('20%').fontSize(14).textAlign(TextAlign.Start).margin({ left: 12 }) TextArea({ placeholder: '0.0', text: this.tradingAmount }) .width('75%') .fontSize(16) @@ -180,14 +180,14 @@ export struct PageTwo { bottom: 24 }) - Button('下一步').width('calc(100% - 32vp)') + Button($r('app.string.NextWord')).width('calc(100% - 32vp)') .onClick(() => { this.bindSheetShow = true; }) .bindSheet(this.bindSheetShow!!, BindSheetBuilder(), this.sheetOption); } } - .title('银行卡转账') + .title($r('app.string.TransactionWord')) .backgroundColor('#F1F3F5') } } \ No newline at end of file diff --git a/entry/src/main/ets/Utils/AssetUtils.ets b/entry/src/main/ets/utils/AssetUtils.ets similarity index 97% rename from entry/src/main/ets/Utils/AssetUtils.ets rename to entry/src/main/ets/utils/AssetUtils.ets index 6033fea..1e525d5 100644 --- a/entry/src/main/ets/Utils/AssetUtils.ets +++ b/entry/src/main/ets/utils/AssetUtils.ets @@ -64,7 +64,7 @@ class AssetUtils { } } - async UpdateDataToAssetStore(newData: Uint8Array, name: string, label: string): Promise { + UpdateDataToAssetStore(newData: Uint8Array, name: string, label: string): void { let query: asset.AssetMap = new Map(); query.set(asset.Tag.ALIAS, this.stringToArray(name)); let attrsToUpdate: asset.AssetMap = new Map(); diff --git a/entry/src/main/ets/Common/TrustedServiceOption.ets b/entry/src/main/ets/utils/TrustedServiceOption.ets similarity index 100% rename from entry/src/main/ets/Common/TrustedServiceOption.ets rename to entry/src/main/ets/utils/TrustedServiceOption.ets diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json index 8fb7a77..cc9f5b7 100644 --- a/entry/src/main/resources/base/element/string.json +++ b/entry/src/main/resources/base/element/string.json @@ -14,7 +14,246 @@ }, { "name": "reason", - "value": "申请必要权限" + "value": "Apply Necessary Rights" + }, + { + "name": "IDSetting", + "value": "Setting" + }, + { + "name": "DigitalShield", + "value": "Digital Shield" + }, + { + "name": "ModifyPassword", + "value": "Modify Password" + }, + { + "name": "OpenWord", + "value": "Enable" + }, + { + "name": "CloseShield", + "value": "Unable shield" + }, + { + "name": "CloseShieldWithVerification", + "value": "Unable shield with verification" + }, + { + "name": "CloseWord", + "value": "Unable" + }, + { + "name": "FinishSignatureInitialization", + "value": "Signature initialization finish" + }, + { + "name": "CloseShieldSuccess", + "value": "Unable shield success" + }, + { + "name": "CloseShieldFail", + "value": "Unable shield fail" + }, + { + "name": "CloseShieldWithoutVerification", + "value": "Unable shield without Verification" + }, + { + "name": "BioFeatureVerification", + "value": "Bio verification method" + }, + { + "name": "Fingerprint", + "value": "Fingerprint" + }, + { + "name": "Bind", + "value": "Bind" + }, + { + "name": "BindFingerprintSuccess", + "value": "Bind fingerprint success" + }, + { + "name": "BindFingerprintFail", + "value": "Bind fingerprint fail" + }, + { + "name": "BindFingerprintFailWithNotification", + "value": "Bind fingerprint fail:please bind bio feature in system setting" + }, + { + "name": "FingerprintBound", + "value": "Fingerprint--Bound" + }, + { + "name": "UnBound", + "value": "Unbound" + }, + { + "name": "UnBoundFingerprintSuccess", + "value": "Unbound fingerprint success" + }, + { + "name": "UnBoundFingerprintFail", + "value": "Unbound fingerprint fail" + }, + { + "name": "Face", + "value": "Face" + }, + { + "name": "BindFaceSuccess", + "value": "Bind face success" + }, + { + "name": "BindFaceFail", + "value": "Bind face fail" + }, + { + "name": "BindFaceFailWithNotification", + "value": "Bind face fail:please bind bio feature in system setting" + }, + { + "name": "FaceBound", + "value": "Face--Bound" + }, + { + "name": "UnBoundFaceSuccess", + "value": "Unbound face success" + }, + { + "name": "UnBoundFaceFail", + "value": "Unbound face fail" + }, + { + "name": "Trade", + "value": "Transfer" + }, + { + "name": "FinDigitalShield", + "value": "Financial Digital Shield" + }, + { + "name": "PlzSetVerificationWay", + "value": "Verification method setting" + }, + { + "name": "PureNumber", + "value": "Pure Number" + }, + { + "name": "NumberPlusAlphabet", + "value": "Number + Alphabet" + }, + { + "name": "ModifyWord", + "value": "Modify" + }, + { + "name": "GenerateKeySuccess", + "value": "Generate key success" + }, + { + "name": "ModifyPwSuccess", + "value": "Modify password success" + }, + { + "name": "ModifyPwFail", + "value": "Modify password fail" + }, + { + "name": "OpenShieldSuccess", + "value": "Enable Shield Success" + }, + { + "name": "OpenShieldFail", + "value": "Enable Shield Fail" + }, + { + "name": "ChooseVerificationMethod", + "value": "Choose verification method" + }, + { + "name": "Recipient", + "value": "Recipient" + }, + { + "name": "MRZhang", + "value": "Mr.Zhang" + }, + { + "name": "AccountNumber", + "value": "Target account number" + }, + { + "name": "TradingAmount", + "value": "Transaction amount" + }, + { + "name": "NextWord", + "value": "Next" + }, + { + "name": "TransactionWord", + "value": "Transaction" + }, + { + "name": "ShieldPwVerification", + "value": "Shield PIN verification" + }, + { + "name": "OpenShield", + "value": "Enable Shield" + }, + { + "name": "ModifyShield", + "value": "Modify Shield" + }, + { + "name": "FaceVerification", + "value": "Face Verification" + }, + { + "name": "FingerprintVerification", + "value": "Fingerprint Verification" + }, + { + "name": "PINVerification", + "value": "Pin Verification" + }, + { + "name": "PINVerificationSuccess", + "value": "PIN verification success" + }, + { + "name": "PINVerificationFail", + "value": "PIN verification fail" + }, + { + "name": "FingerprintVerificationSuccess", + "value": "Fingerprint verification success" + }, + { + "name": "FingerprintVerificationFail", + "value": "Fingerprint verification fail" + },{ + "name": "FingerprintVerificationFailWithNotification", + "value": "Fingerprint verification fail:please use the bound fingerprint,unbound after mutiple trys" + }, + { + "name": "FaceVerificationSuccess", + "value": "Face verification success" + }, + { + "name": "FaceVerificationFail", + "value": "Face verification fail" + }, + { + "name": "FaceVerificationFailWithNotification", + "value": "Face verification fail:please check the bound info,unbound after mutiple trys" } ] } \ No newline at end of file diff --git a/entry/src/main/resources/base/profile/router_map.json b/entry/src/main/resources/base/profile/router_map.json index 868d93f..05daf5b 100644 --- a/entry/src/main/resources/base/profile/router_map.json +++ b/entry/src/main/resources/base/profile/router_map.json @@ -9,19 +9,19 @@ } }, { - "name": "PageOne", - "pageSourceFile": "src/main/ets/pages/PageOne.ets", - "buildFunction": "PageOneBuilder", + "name": "PasswordSelectionPage", + "pageSourceFile": "src/main/ets/pages/PasswordSelectionPage.ets", + "buildFunction": "PasswordSelectionPageBuilder", "data": { - "description": "this is pageOne" + "description": "this is PasswordSelectionPage" } }, { - "name": "PageTwo", - "pageSourceFile": "src/main/ets/pages/PageTwo.ets", - "buildFunction": "PageTwoBuilder", + "name": "TradingPage", + "pageSourceFile": "src/main/ets/pages/TradingPage.ets", + "buildFunction": "TradingPageBuilder", "data": { - "description": "this is pageTwo" + "description": "this is TradingPage" } } ] diff --git a/entry/src/main/resources/en_US/element/color.json b/entry/src/main/resources/en_US/element/color.json new file mode 100644 index 0000000..3c71296 --- /dev/null +++ b/entry/src/main/resources/en_US/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/en_US/element/float.json b/entry/src/main/resources/en_US/element/float.json new file mode 100644 index 0000000..a0a93dd --- /dev/null +++ b/entry/src/main/resources/en_US/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/en_US/element/string.json b/entry/src/main/resources/en_US/element/string.json new file mode 100644 index 0000000..cc9f5b7 --- /dev/null +++ b/entry/src/main/resources/en_US/element/string.json @@ -0,0 +1,259 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "TestDigitalShield" + }, + { + "name": "reason", + "value": "Apply Necessary Rights" + }, + { + "name": "IDSetting", + "value": "Setting" + }, + { + "name": "DigitalShield", + "value": "Digital Shield" + }, + { + "name": "ModifyPassword", + "value": "Modify Password" + }, + { + "name": "OpenWord", + "value": "Enable" + }, + { + "name": "CloseShield", + "value": "Unable shield" + }, + { + "name": "CloseShieldWithVerification", + "value": "Unable shield with verification" + }, + { + "name": "CloseWord", + "value": "Unable" + }, + { + "name": "FinishSignatureInitialization", + "value": "Signature initialization finish" + }, + { + "name": "CloseShieldSuccess", + "value": "Unable shield success" + }, + { + "name": "CloseShieldFail", + "value": "Unable shield fail" + }, + { + "name": "CloseShieldWithoutVerification", + "value": "Unable shield without Verification" + }, + { + "name": "BioFeatureVerification", + "value": "Bio verification method" + }, + { + "name": "Fingerprint", + "value": "Fingerprint" + }, + { + "name": "Bind", + "value": "Bind" + }, + { + "name": "BindFingerprintSuccess", + "value": "Bind fingerprint success" + }, + { + "name": "BindFingerprintFail", + "value": "Bind fingerprint fail" + }, + { + "name": "BindFingerprintFailWithNotification", + "value": "Bind fingerprint fail:please bind bio feature in system setting" + }, + { + "name": "FingerprintBound", + "value": "Fingerprint--Bound" + }, + { + "name": "UnBound", + "value": "Unbound" + }, + { + "name": "UnBoundFingerprintSuccess", + "value": "Unbound fingerprint success" + }, + { + "name": "UnBoundFingerprintFail", + "value": "Unbound fingerprint fail" + }, + { + "name": "Face", + "value": "Face" + }, + { + "name": "BindFaceSuccess", + "value": "Bind face success" + }, + { + "name": "BindFaceFail", + "value": "Bind face fail" + }, + { + "name": "BindFaceFailWithNotification", + "value": "Bind face fail:please bind bio feature in system setting" + }, + { + "name": "FaceBound", + "value": "Face--Bound" + }, + { + "name": "UnBoundFaceSuccess", + "value": "Unbound face success" + }, + { + "name": "UnBoundFaceFail", + "value": "Unbound face fail" + }, + { + "name": "Trade", + "value": "Transfer" + }, + { + "name": "FinDigitalShield", + "value": "Financial Digital Shield" + }, + { + "name": "PlzSetVerificationWay", + "value": "Verification method setting" + }, + { + "name": "PureNumber", + "value": "Pure Number" + }, + { + "name": "NumberPlusAlphabet", + "value": "Number + Alphabet" + }, + { + "name": "ModifyWord", + "value": "Modify" + }, + { + "name": "GenerateKeySuccess", + "value": "Generate key success" + }, + { + "name": "ModifyPwSuccess", + "value": "Modify password success" + }, + { + "name": "ModifyPwFail", + "value": "Modify password fail" + }, + { + "name": "OpenShieldSuccess", + "value": "Enable Shield Success" + }, + { + "name": "OpenShieldFail", + "value": "Enable Shield Fail" + }, + { + "name": "ChooseVerificationMethod", + "value": "Choose verification method" + }, + { + "name": "Recipient", + "value": "Recipient" + }, + { + "name": "MRZhang", + "value": "Mr.Zhang" + }, + { + "name": "AccountNumber", + "value": "Target account number" + }, + { + "name": "TradingAmount", + "value": "Transaction amount" + }, + { + "name": "NextWord", + "value": "Next" + }, + { + "name": "TransactionWord", + "value": "Transaction" + }, + { + "name": "ShieldPwVerification", + "value": "Shield PIN verification" + }, + { + "name": "OpenShield", + "value": "Enable Shield" + }, + { + "name": "ModifyShield", + "value": "Modify Shield" + }, + { + "name": "FaceVerification", + "value": "Face Verification" + }, + { + "name": "FingerprintVerification", + "value": "Fingerprint Verification" + }, + { + "name": "PINVerification", + "value": "Pin Verification" + }, + { + "name": "PINVerificationSuccess", + "value": "PIN verification success" + }, + { + "name": "PINVerificationFail", + "value": "PIN verification fail" + }, + { + "name": "FingerprintVerificationSuccess", + "value": "Fingerprint verification success" + }, + { + "name": "FingerprintVerificationFail", + "value": "Fingerprint verification fail" + },{ + "name": "FingerprintVerificationFailWithNotification", + "value": "Fingerprint verification fail:please use the bound fingerprint,unbound after mutiple trys" + }, + { + "name": "FaceVerificationSuccess", + "value": "Face verification success" + }, + { + "name": "FaceVerificationFail", + "value": "Face verification fail" + }, + { + "name": "FaceVerificationFailWithNotification", + "value": "Face verification fail:please check the bound info,unbound after mutiple trys" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/zh_CN/element/color.json b/entry/src/main/resources/zh_CN/element/color.json new file mode 100644 index 0000000..3c71296 --- /dev/null +++ b/entry/src/main/resources/zh_CN/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/zh_CN/element/float.json b/entry/src/main/resources/zh_CN/element/float.json new file mode 100644 index 0000000..a0a93dd --- /dev/null +++ b/entry/src/main/resources/zh_CN/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} \ No newline at end of file diff --git a/entry/src/main/resources/zh_CN/element/string.json b/entry/src/main/resources/zh_CN/element/string.json new file mode 100644 index 0000000..1fb6260 --- /dev/null +++ b/entry/src/main/resources/zh_CN/element/string.json @@ -0,0 +1,259 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "TestDigitalShield" + }, + { + "name": "reason", + "value": "申请必要权限" + }, + { + "name": "IDSetting", + "value": "身份认证设置" + }, + { + "name": "DigitalShield", + "value": "数字盾" + }, + { + "name": "ModifyPassword", + "value": "修改密码" + }, + { + "name": "OpenWord", + "value": "立即开通" + }, + { + "name": "CloseShield", + "value": "关闭数字盾" + }, + { + "name": "CloseShieldWithVerification", + "value": "需认证关闭数字盾" + }, + { + "name": "CloseWord", + "value": "关闭" + }, + { + "name": "FinishSignatureInitialization", + "value": "签名初始化完成" + }, + { + "name": "CloseShieldSuccess", + "value": "关闭数字盾成功" + }, + { + "name": "CloseShieldFail", + "value": "关闭数字盾失败" + }, + { + "name": "CloseShieldWithoutVerification", + "value": "无需认证关闭数字盾" + }, + { + "name": "BioFeatureVerification", + "value": "生物特征认证方式" + }, + { + "name": "Fingerprint", + "value": "指纹识别" + }, + { + "name": "Bind", + "value": "绑定" + }, + { + "name": "BindFingerprintSuccess", + "value": "指纹绑定成功" + }, + { + "name": "BindFingerprintFail", + "value": "指纹绑定失败" + }, + { + "name": "BindFingerprintFailWithNotification", + "value": "指纹绑定失败:请前往系统界面绑定生物信息" + }, + { + "name": "FingerprintBound", + "value": "指纹识别--已绑定" + }, + { + "name": "UnBound", + "value": "解绑" + }, + { + "name": "UnBoundFingerprintSuccess", + "value": "解绑指纹成功" + }, + { + "name": "UnBoundFingerprintFail", + "value": "解绑指纹失败" + }, + { + "name": "Face", + "value": "人脸识别" + }, + { + "name": "BindFaceSuccess", + "value": "人脸绑定成功" + }, + { + "name": "BindFaceFail", + "value": "人脸绑定失败" + }, + { + "name": "BindFaceFailWithNotification", + "value": "人脸绑定失败:请前往系统界面绑定生物信息" + }, + { + "name": "FaceBound", + "value": "人脸识别--已绑定" + }, + { + "name": "UnBoundFaceSuccess", + "value": "解绑人脸成功" + }, + { + "name": "UnBoundFaceFail", + "value": "解绑人脸失败" + }, + { + "name": "Trade", + "value": "去转账" + }, + { + "name": "FinDigitalShield", + "value": "金融数字盾" + }, + { + "name": "PlzSetVerificationWay", + "value": "请设定数字盾的验证方式" + }, + { + "name": "PureNumber", + "value": "数字密码" + }, + { + "name": "NumberPlusAlphabet", + "value": "数字+英文组合密码" + }, + { + "name": "ModifyWord", + "value": "立即修改" + }, + { + "name": "GenerateKeySuccess", + "value": "生成密钥成功" + }, + { + "name": "ModifyPwSuccess", + "value": "修改数字盾密码成功" + }, + { + "name": "ModifyPwFail", + "value": "修改数字盾密码失败" + }, + { + "name": "OpenShieldSuccess", + "value": "开通数字盾成功" + }, + { + "name": "OpenShieldFail", + "value": "开通数字盾失败" + }, + { + "name": "ChooseVerificationMethod", + "value": "选择认证方式" + }, + { + "name": "Recipient", + "value": "收款人" + }, + { + "name": "MRZhang", + "value": "张某某" + }, + { + "name": "AccountNumber", + "value": "收款账号" + }, + { + "name": "TradingAmount", + "value": "交易金额" + }, + { + "name": "NextWord", + "value": "下一步" + }, + { + "name": "TransactionWord", + "value": "银行卡转账" + }, + { + "name": "ShieldPwVerification", + "value": "数字盾密码验证" + }, + { + "name": "OpenShield", + "value": "开通数字盾" + }, + { + "name": "ModifyShield", + "value": "修改金融盾" + }, + { + "name": "FaceVerification", + "value": "人脸交易认证" + }, + { + "name": "FingerprintVerification", + "value": "指纹交易认证" + }, + { + "name": "PINVerification", + "value": "密码交易认证" + }, + { + "name": "PINVerificationSuccess", + "value": "密码交易认证成功" + }, + { + "name": "PINVerificationFail", + "value": "密码交易认证失败" + }, + { + "name": "FingerprintVerificationSuccess", + "value": "指纹交易认证成功" + }, + { + "name": "FingerprintVerificationFail", + "value": "指纹交易认证失败" + },{ + "name": "FingerprintVerificationFailWithNotification", + "value": "指纹交易认证失败:请用数字盾的指纹进行认证,多次失败请返回上一页解绑后重新绑定," + }, + { + "name": "FaceVerificationSuccess", + "value": "人脸交易认证成功" + }, + { + "name": "FaceVerificationFail", + "value": "人脸交易认证失败" + }, + { + "name": "FaceVerificationFailWithNotification", + "value": "人脸交易认证失败:请确认认证信息是否正确,多次失败请返回上一页解绑后重新绑定" + } + ] +} \ No newline at end of file -- Gitee From df5ebbbb8a60211d2227f8bf7a574e6c0d342fb1 Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Fri, 15 Aug 2025 16:56:12 +0800 Subject: [PATCH 13/16] code review fix 2 --- README.md | 2 +- .../main/ets/model/TrustedAuthentication.ets | 113 ++++++----- entry/src/main/ets/pages/Index.ets | 1 + entry/src/main/ets/pages/MainPage.ets | 129 ++++++++----- .../main/ets/pages/PasswordSelectionPage.ets | 29 +-- entry/src/main/ets/pages/TradingPage.ets | 178 +++++++++++------- .../main/resources/base/element/string.json | 2 +- 7 files changed, 283 insertions(+), 171 deletions(-) diff --git a/README.md b/README.md index a7e61fe..85de618 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ 3. User Authentication Kit (用户认证服务) ## 约束与限制 -1. 本示例仅支持标准系统上运行,支持设备:手机。 +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 2. HarmonyOS系统:HarmonyOS 6.0 Beta3及以上。 3. DevEco Studio版本:DevEco Studio 6.0 Beta3及以上。 4. HarmonyOS SDK版本:HarmonyOS 6.0 Bete3 SDK及以上。 diff --git a/entry/src/main/ets/model/TrustedAuthentication.ets b/entry/src/main/ets/model/TrustedAuthentication.ets index 30fcb2c..c830ae9 100644 --- a/entry/src/main/ets/model/TrustedAuthentication.ets +++ b/entry/src/main/ets/model/TrustedAuthentication.ets @@ -223,12 +223,25 @@ class TrustedAuth { hilog.info(DOMAIN, 'testTag', 'credentialId', credentialID); hilog.info(DOMAIN, 'testTag', 'checkHash', checkHash); hilog.info(DOMAIN, 'testTag', 'authType', authType); - await AssetUtils.AddDataToAssetStore(credentialID, 'face_credentialID', 'face_credential_label'); + AssetUtils.AddDataToAssetStore(credentialID, 'face_credentialID', 'face_credential_label'); + } + + async bindFingerID(handle: number, authToken: Uint8Array, inputdata: string): Promise { + let signature = await SignFinish(handle, authToken, inputdata); + await Verify(inputdata, signature); + let appendInfo = signature.subarray(0, 42); + let credentialID = appendInfo.subarray(8, 40); + let checkHash = appendInfo.subarray(40, 41); + let authType = appendInfo.subarray(4, 8); + hilog.info(DOMAIN, 'testTag', 'credentialId', credentialID); + hilog.info(DOMAIN, 'testTag', 'checkHash', checkHash); + hilog.info(DOMAIN, 'testTag', 'authType', authType); + AssetUtils.AddDataToAssetStore(credentialID, 'finger_credentialID', 'finger_credential_label'); } async ImportImage(): Promise { try { - const context = getContext(this); + const context = AppStorage.get('context') as Context; const resourceMgr: resourceManager.ResourceManager = context.resourceManager; const fileData: Uint8Array = await resourceMgr.getRawFileContent('startIcon.png'); @@ -246,13 +259,15 @@ class TrustedAuth { try { let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const context = AppStorage.get('context') as Context; const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: $r('app.string.ShieldPwVerification') + title: context.resourceManager.getStringSync($r('app.string.ShieldPwVerification')) } const result = await trustedAuthentication.trustedAuthentication(challenge, credentialID, label); - hilog.info(DOMAIN, 'testTag', 'DigitalShield password verification success:', result.authToken.length, result.authToken); + hilog.info(DOMAIN, 'testTag', 'DigitalShield password verification success:', result.authToken.length, + result.authToken); return result; } catch (error) { hilog.error(DOMAIN, 'testTag', 'DigitalShield password verification failed:', error); @@ -268,15 +283,17 @@ class TrustedAuth { pwdMinLength: 6, maxAuthFailCount: 6 }; + const context = AppStorage.get('context') as Context; const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: $r('app.string.OpenShield') + title: context.resourceManager.getStringSync($r('app.string.OpenShield')) } const authInfo = await trustedAuthentication.enableTrustedAuthentication(challenge, passwordInfo, label); let assetLabel = assetName + 'label'; - await AssetUtils.AddDataToAssetStore(this.bigIntToUint8Array(authInfo.authID), assetName, assetLabel); - hilog.info(DOMAIN, 'testTag', 'Open Shield Success:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + AssetUtils.AddDataToAssetStore(this.bigIntToUint8Array(authInfo.authID), assetName, assetLabel); + hilog.info(DOMAIN, 'testTag', 'Open Shield Success:', authInfo.authID, authInfo.authToken.length, + authInfo.authToken); return authInfo; } catch (error) { hilog.error(DOMAIN, 'testTag', 'Open Shield Fail:', error); @@ -292,15 +309,17 @@ class TrustedAuth { pwdMinLength: 6, maxAuthFailCount: 6 }; + const context = AppStorage.get('context') as Context; const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: $r('app.string.OpenShield') + title: context.resourceManager.getStringSync($r('app.string.OpenShield')) } const authInfo = await trustedAuthentication.enableTrustedAuthentication(challenge, passwordInfo, label); let assetLabel = assetName + 'label'; - await AssetUtils.AddDataToAssetStore(this.bigIntToUint8Array(authInfo.authID), assetName, assetLabel); - hilog.info(DOMAIN, 'testTag', 'Open Shield Success:', authInfo.authID, authInfo.authToken.length, authInfo.authToken); + AssetUtils.AddDataToAssetStore(this.bigIntToUint8Array(authInfo.authID), assetName, assetLabel); + hilog.info(DOMAIN, 'testTag', 'Open Shield Success:', authInfo.authID, authInfo.authToken.length, + authInfo.authToken); return authInfo; } catch (error) { hilog.error(DOMAIN, 'testTag', 'Open Shield Fail:', error); @@ -318,10 +337,11 @@ class TrustedAuth { }; let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const context = AppStorage.get('context') as Context; const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: $r('app.string.ModifyShield') + title: context.resourceManager.getStringSync($r('app.string.ModifyShield')) } const authInfo = await trustedAuthentication.modifyTrustedAuthenticationPwd(challenge, passwordInfo, credentialID, label); @@ -343,10 +363,11 @@ class TrustedAuth { }; let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const context = AppStorage.get('context') as Context; const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: $r('app.string.ModifyShield') + title: context.resourceManager.getStringSync($r('app.string.ModifyShield')) } const authInfo = await trustedAuthentication.modifyTrustedAuthenticationPwd(challenge, passwordInfo, credentialID, label); @@ -362,10 +383,11 @@ class TrustedAuth { try { let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const context = AppStorage.get('context') as Context; const buffer: ArrayBuffer = await this.ImportImage(); const label: trustedAuthentication.TUILable = { image: buffer, - title: $r('app.string.CloseShield') + title: context.resourceManager.getStringSync($r('app.string.CloseShield')) } const authInfo = await trustedAuthentication.disableTrustedAuthentication(challenge, true, credentialID, label); AssetUtils.DeleteDataFromAssetStore('pin_label1'); @@ -393,7 +415,7 @@ class TrustedAuth { AssetUtils.DeleteDataFromAssetStore('pin_label1'); AssetUtils.DeleteDataFromAssetStore('credentialID'); AssetUtils.DeleteDataFromAssetStore('face_credentialID'); - AssetUtils.DeleteDataFromAssetStore('finger+credentialID'); + AssetUtils.DeleteDataFromAssetStore('finger_credentialID'); hilog.info(DOMAIN, 'testTag', 'Close Shield Success:', authInfo.authToken); return authInfo.authToken; } catch (error) { @@ -402,22 +424,23 @@ class TrustedAuth { } } - async FaceAuthContent(challenge: Uint8Array, assetName: string): Promise { + async FaceAuthContent(indata: string, challenge: Uint8Array, + assetName: string): Promise { try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FACE); hilog.info(DOMAIN, 'testTag', `get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const context = AppStorage.get('context') as Context; const buffer: ArrayBuffer = await this.ImportImage(); const reqParams: trustedAuthentication.AuthReqParams = { reqType: trustedAuthentication.AuthType.AUTH_TYPE_FACE, - authContent: ['challenge:123456|0', '用户:张家龙|1', '账号:123456|1', '交易金额: 10000000|2', - '交易时间:2025-0605|2'] + authContent: indata.split('\n') } const label: trustedAuthentication.TUILable = { image: buffer, - title: $r('app.string.FaceVerification') + title: context.resourceManager.getStringSync($r('app.string.FaceVerification')) } const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); hilog.info(DOMAIN, 'testTag', 'Face Verification Success:', result.authToken); @@ -428,22 +451,23 @@ class TrustedAuth { } } - async FingerPrintAuthContent(challenge: Uint8Array, assetName: string): Promise { + async FingerPrintAuthContent(indata: string, challenge: Uint8Array, + assetName: string): Promise { try { let enrolledState = userAuth.getEnrolledState(userAuth.UserAuthType.FINGERPRINT); hilog.info(DOMAIN, 'testTag', `get current enrolled state success enrolledState = ${JSON.stringify(enrolledState)}`); let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const context = AppStorage.get('context') as Context; const buffer: ArrayBuffer = await this.ImportImage(); const reqParams: trustedAuthentication.AuthReqParams = { reqType: trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT, - authContent: ['challenge:123456|0', '用户:张家龙|1', '账号:123456|1', '交易金额: 10000000|2', - '交易时间:2025-0605|2'] + authContent: indata.split('\n') } const label: trustedAuthentication.TUILable = { image: buffer, - title: $r('app.string.FingerprintVerification') + title: context.resourceManager.getStringSync($r('app.string.FingerprintVerification')) } const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); hilog.info(DOMAIN, 'testTag', 'Fingerprint Verification Success:', result.authToken); @@ -454,19 +478,20 @@ class TrustedAuth { } } - async ContentVerifyByPwd(challenge: Uint8Array, assetName: string): Promise { + async ContentVerifyByPwd(indata: string, challenge: Uint8Array, + assetName: string): Promise { try { let resArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore(assetName); let credentialID: bigint = this.uint8ArrayToBigInt(resArray); + const context = AppStorage.get('context') as Context; const buffer: ArrayBuffer = await this.ImportImage(); const reqParams: trustedAuthentication.AuthReqParams = { reqType: trustedAuthentication.AuthType.AUTH_TYPE_TUI_PIN, - authContent: ['challenge:123456|0', '用户:张家龙|1', '账号:123456|1', '交易金额: 10000000|2', - '交易时间:2025-0605|2'] + authContent: indata.split('\n') } const label: trustedAuthentication.TUILable = { image: buffer, - title: $r('app.string.PINVerification') + title: context.resourceManager.getStringSync($r('app.string.PINVerification')) } const result = await trustedAuthentication.procContentAuthentication(challenge, credentialID, reqParams, label); hilog.info(DOMAIN, 'testTag', 'Pin Verification Success:', result.authToken); @@ -518,11 +543,16 @@ class TrustedAuth { inData: new Uint8Array } - let result = await huks.initSession(KEY_ALIAS, options); - let handle = result.handle; - let challenge = result.challenge as Uint8Array - hilog.info(DOMAIN, 'testTag', 'initSession complete' + handle + '----' + challenge); - return result; + try { + let result = await huks.initSession(KEY_ALIAS, options); + let handle = result.handle; + let challenge = result.challenge as Uint8Array + hilog.info(DOMAIN, 'testTag', 'initSession complete' + handle + '----' + challenge); + return result; + } catch (error) { + hilog.error(DOMAIN, 'testTag', 'initSession failed'); + throw new Error('initSession fail' + (error as BusinessError).message); + } } async disableTrustedBioAuthentication(assetName: string, authType: number): Promise { @@ -537,11 +567,10 @@ class TrustedAuth { } } - async HuksSignAndVerify(session: huks.HuksSessionHandle, authToken: Uint8Array): Promise { - let inputdata = 'challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额: 10000000|2\n交易时间:2025-0605|2'; + async HuksSignAndVerify(indata:string, session: huks.HuksSessionHandle, authToken: Uint8Array): Promise { try { - let signature = await SignFinish(session.handle, authToken, inputdata); - hilog.info(DOMAIN, 'testTag', 'IAM auth on success'); + let signature = await SignFinish(session.handle, authToken, indata); + hilog.info(DOMAIN, 'testTag', 'IAM auth on success' + signature); } catch (error) { hilog.error(DOMAIN, 'testTag', 'IAM auth catch error', JSON.stringify(error)); throw new Error('pull up IAM Fail' + (error as BusinessError).message); @@ -569,16 +598,14 @@ class TrustedAuth { tempAuthToken = await this.ModifyPwdMix(challenge, label); } else { hilog.info(DOMAIN, 'testTag', '============startPINVerification============'); - tempAuthToken = await this.ContentVerifyByPwd(challenge, label); + tempAuthToken = await this.ContentVerifyByPwd(indata, challenge, label); } const TuiAuthToken: trustedAuthentication.AuthToken = tempAuthToken; let authToken = TuiAuthToken.authToken; - let inputdata = - 'challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额: 10000000|2\n交易时间:2025-0605|2'; try { - SignFinish(session.handle, authToken, inputdata).then((data) => { + SignFinish(session.handle, authToken, indata).then((data) => { let signature = data as Uint8Array; - Verify(inputdata, signature); + Verify(indata, signature); }); hilog.info(DOMAIN, 'testTag', 'HUKS -> IAM auth on success'); } catch (error) { @@ -623,7 +650,7 @@ class TrustedAuth { } } - async GetTUIAuthTokenBeforeBioVerify(session: huks.HuksSessionHandle, authType: number, + async GetTUIAuthTokenBeforeBioVerify(indata: string, session: huks.HuksSessionHandle, authType: number, assetName: string): Promise { let challenge: Uint8Array = session.challenge as Uint8Array; let tempAuthToken: trustedAuthentication.AuthToken; @@ -651,9 +678,9 @@ class TrustedAuth { } tempAuthToken = await this.PwdVerify(challenge, assetName); } else if (authType === TUI_CONTENT_FACE_VERIFY) { - tempAuthToken = await this.FaceAuthContent(challenge, assetName); + tempAuthToken = await this.FaceAuthContent(indata, challenge, assetName); } else if (authType === TUI_CONTENT_FINGERPRINT_VERIFY) { - tempAuthToken = await this.FingerPrintAuthContent(challenge, assetName); + tempAuthToken = await this.FingerPrintAuthContent(indata, challenge, assetName); } else { throw new Error(`invalid auth type; ${JSON.stringify(authType)}`); } diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 0893998..0bb639c 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -22,6 +22,7 @@ struct Index { aboutToAppear(): void { this.pageInfos.pushPath({name: "MainPage"}) + AppStorage.setOrCreate('context', this.getUIContext().getHostContext()) } build() { diff --git a/entry/src/main/ets/pages/MainPage.ets b/entry/src/main/ets/pages/MainPage.ets index 1dfc656..c94764b 100644 --- a/entry/src/main/ets/pages/MainPage.ets +++ b/entry/src/main/ets/pages/MainPage.ets @@ -46,6 +46,8 @@ export struct MainPage { @Consume pageInfos: NavPathStack; uiContext: UIContext = this.getUIContext(); promptAction: PromptAction = this.uiContext.getPromptAction(); + context: Context = this.uiContext.getHostContext() as Context; + resourceManager = this.context.resourceManager; async aboutToAppear(): Promise { const bytes = [0x00, 0x00, 0x00, 0x80, 0x80, 0xd2, 0x41, 0x40]; @@ -63,31 +65,43 @@ export struct MainPage { if (resArray.length != 0) { this.hasShield = true; } - if(this.hasFingerprintAbility){ + let resFaceArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore('face_credentialID') + if (resFaceArray.length != 0) { + this.faceBind = true; + } + let resFingerArray: Uint8Array = await AssetUtils.QueryDataFromAssetStore('finger_credentialID') + if (resFingerArray.length != 0) { + this.fingerprintBind = true; + } + if (this.hasFingerprintAbility) { try { userAuth.getAvailableStatus(userAuth.UserAuthType.FINGERPRINT, userAuth.AuthTrustLevel.ATL3); hilog.info(DOMAIN, 'testTag', 'current auth trust level supported'); } catch (error) { const err: BusinessError = error as BusinessError; - if(error.code === NOT_ENROLLED_ERROR){ - hilog.error(DOMAIN, 'testTag', `Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`); - }else{ - hilog.error(DOMAIN, 'testTag', `current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`); + if (error.code === NOT_ENROLLED_ERROR) { + hilog.error(DOMAIN, 'testTag', + `Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`); + } else { + hilog.error(DOMAIN, 'testTag', + `current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`); this.hasFingerprintAbility = false; this.bioState--; } } } - if(this.hasFaceAbility){ + if (this.hasFaceAbility) { try { userAuth.getAvailableStatus(userAuth.UserAuthType.FACE, userAuth.AuthTrustLevel.ATL4); hilog.info(DOMAIN, 'testTag', 'current auth trust level supported'); } catch (error) { const err: BusinessError = error as BusinessError; - if(error.code === NOT_ENROLLED_ERROR){ - hilog.error(DOMAIN, 'testTag', `Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`); - }else{ - hilog.error(DOMAIN, 'testTag', `current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`); + if (error.code === NOT_ENROLLED_ERROR) { + hilog.error(DOMAIN, 'testTag', + `Authentication bio is not enrolled. Code is ${err?.code}, message is ${err?.message}`); + } else { + hilog.error(DOMAIN, 'testTag', + `current auth trust level not supported. Code is ${err?.code}, message is ${err?.message}`); this.hasFaceAbility = false; this.bioState--; } @@ -107,7 +121,7 @@ export struct MainPage { .textAlign(TextAlign.Start) .margin({ top: 28, bottom: 8 }) } - .width('calc(100% - 56vp)') + .width('calc(100% - 56vp)') // 100% stand for whole element and vp stand for margin .margin({ left: 28, right: 28 @@ -121,7 +135,7 @@ export struct MainPage { .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(async () => { - this.pageInfos.pushPath({name: 'PasswordSelectionPage'}) + this.pageInfos.pushPath({ name: 'PasswordSelectionPage' }) }); } else { Button($r('app.string.OpenWord')) @@ -132,7 +146,7 @@ export struct MainPage { }) } } - .width('calc(100% - 32vp)') + .width('calc(100% - 32vp)') // 100% stand for whole element and vp stand for margin .height(56) .backgroundColor(Color.White) .borderRadius(16) @@ -150,7 +164,7 @@ export struct MainPage { .textAlign(TextAlign.Start) .margin({ top: 28, bottom: 8 }) } - .width('calc(100% - 56vp)') + .width('calc(100% - 56vp)') // 100% stand for whole element and vp stand for margin .margin({ left: 28, right: 28 @@ -168,19 +182,22 @@ export struct MainPage { try { let session = await TrustedAuth.SignInit(); hilog.info(DOMAIN, 'testTag', 'Finish Signature Initialization'); - let indata: string = 'aaabbb'; + let indata: string = 'placeholder'; await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_PIN_DISABLE, 'pin_label1'); - this.message += $r('app.string.CloseShieldSuccess'); + this.message += this.resourceManager.getStringSync($r('app.string.CloseShieldSuccess')); this.hasShield = false; this.fingerprintBind = false; this.faceBind = false; } catch (error) { hilog.error(DOMAIN, 'testTag', 'Close Shield Fail:', error); - this.message += $r('app.string.CloseShieldFail') + `: ${error}`; + this.message += this.resourceManager.getStringSync($r('app.string.CloseShieldFail')) + + `: ${error}`; } this.promptAction.openToast({ message: this.message, duration: 100, + }).catch(() => { + hilog.error(DOMAIN, 'testTag', 'toast open failed'); }) }); } @@ -202,24 +219,27 @@ export struct MainPage { const challenge: Uint8Array = rand?.generateRandomSync(len)?.data; const authToken = await TrustedAuth.disablePwdWithoutAuth(challenge, 'pin_label1'); hilog.info(DOMAIN, 'testTag', 'Close Shield Success:', authToken); - this.message += $r('app.string.CloseShieldSuccess'); + this.message += this.resourceManager.getStringSync($r('app.string.CloseShieldSuccess')); this.hasShield = false; this.fingerprintBind = false; this.faceBind = false; } catch (error) { hilog.error(DOMAIN, 'testTag', 'Close Shield Fail:', error); - this.message += $r('app.string.CloseShieldFail')+ `: ${error}`; + this.message += this.resourceManager.getStringSync($r('app.string.CloseShieldFail')) + + `: ${error}`; } this.promptAction.openToast({ message: this.message, duration: 100, + }).catch(() => { + hilog.error(DOMAIN, 'testTag', 'toast open failed'); }) }); } .width('100%') .height(56) } - .width('calc(100% - 32vp)') + .width('calc(100% - 32vp)') // 100% stand for whole element and vp stand for margin .height(112) .backgroundColor(Color.White) .borderRadius(16) @@ -228,7 +248,7 @@ export struct MainPage { right: 16 }) - if(this.bioState != 0){ + if (this.bioState != 0) { Column() { Text($r('app.string.BioFeatureVerification')) .width('100%') @@ -237,7 +257,7 @@ export struct MainPage { .textAlign(TextAlign.Start) .margin({ top: 28, bottom: 8 }) } - .width('calc(100% - 56vp)') + .width('calc(100% - 56vp)') // 100% stand for whole element and vp stand for margin .margin({ left: 28, right: 28 @@ -245,7 +265,7 @@ export struct MainPage { } Column() { - if(this.hasFingerprintAbility){ + if (this.hasFingerprintAbility) { if (!this.fingerprintBind) { Row() { Text($r('app.string.Fingerprint')).textAlign(TextAlign.Start).margin({ left: 12 }) @@ -259,28 +279,31 @@ export struct MainPage { let session = await TrustedAuth.SignInit(); hilog.info(DOMAIN, 'testTag', 'Finish Signature Initialization'); const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FINGERPRINT, + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify('placeholder', session, TUI_BIND_FINGERPRINT, 'pin_label1'); let bioAuthToken: Uint8Array = await TrustedAuth.UserAuthBeforeSign(session, TUI_BIND_FINGERPRINT); let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; let resignAuthToken = await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - let inputdata = 'challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2'; - await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) - this.message += $r('app.string.BindFingerprintSuccess'); + let inputdata = 'placeholder'; + await TrustedAuth.bindFingerID(session.handle, resignAuthToken.authToken, inputdata) + this.message += this.resourceManager.getStringSync($r('app.string.BindFingerprintSuccess')); this.fingerprintBind = true; } catch (error) { hilog.error(DOMAIN, 'testTag', 'Bind Fingerprint Fail:', error); - if(error.message === 'Authentication template has not been enrolled.'){ - this.message += $r('app.string.BindFingerprintFailWithNotification') - }else{ - this.message += $r('app.string.BindFingerprintFail')+ `: ${error}`; + if (error.message === 'Authentication template has not been enrolled.') { + this.message += this.resourceManager.getStringSync($r('app.string.BindFingerprintFailWithNotification')); + } else { + this.message += this.resourceManager.getStringSync($r('app.string.BindFingerprintFail')) + + `: ${error}`; } } this.promptAction.openToast({ message: this.message, duration: 100, + }).catch(() => { + hilog.error(DOMAIN, 'testTag', 'toast open failed'); }) }); } @@ -288,7 +311,7 @@ export struct MainPage { .height(56) } else { Row() { - Text( $r('app.string.FingerprintBound')).textAlign(TextAlign.Start).margin({ left: 12 }) + Text($r('app.string.FingerprintBound')).textAlign(TextAlign.Start).margin({ left: 12 }) Blank() Button($r('app.string.UnBound')) .buttonStyle(ButtonStyleMode.NORMAL) @@ -298,26 +321,29 @@ export struct MainPage { try { let authType = trustedAuthentication.AuthType.AUTH_TYPE_FINGERPRINT; await TrustedAuth.disableTrustedBioAuthentication('pin_label1', authType); - this.message += $r('app.string.UnBoundFingerprintSuccess'); + this.message += this.resourceManager.getStringSync($r('app.string.UnBoundFingerprintSuccess')); this.fingerprintBind = false; } catch (error) { // 捕获错误并处理 hilog.error(DOMAIN, 'testTag', 'UnBound Fingerprint Fail:', error); - this.message += $r('app.string.UnBoundFingerprintFail')+`: ${error}`; + this.message += this.resourceManager.getStringSync($r('app.string.UnBoundFingerprintFail')) + + `: ${error}`; } this.promptAction.openToast({ message: this.message, duration: 100, + }).catch(() => { + hilog.error(DOMAIN, 'testTag', 'toast open failed'); }) }); }.width('100%') .height(56) } } - if(this.bioState === 2){ + if (this.bioState === 2) { Divider().width('93%') } - if(this.hasFaceAbility){ + if (this.hasFaceAbility) { if (!this.faceBind) { Row() { Text($r('app.string.Face')).textAlign(TextAlign.Start).margin({ left: 12 }) @@ -331,27 +357,30 @@ export struct MainPage { let session = await TrustedAuth.SignInit(); hilog.info(DOMAIN, 'testTag', 'Finish Signature Initialization'); const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_BIND_FACE, 'pin_label1'); + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify('placeholder', session, TUI_BIND_FACE, 'pin_label1'); let bioAuthToken: Uint8Array = await TrustedAuth.UserAuthBeforeSign(session, TUI_BIND_FACE); let operType = trustedAuthentication.OperateType.OPERATE_TYPE_BIOMETRIC_AUTH; let resignAuthToken = await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - let inputdata = 'challenge:123456|0\n用户:张家龙|1\n账号:123456|1\n交易金额:1000000000|2'; + let inputdata = 'placeholder'; await TrustedAuth.bindFaceID(session.handle, resignAuthToken.authToken, inputdata) - this.message += $r('app.string.BindFaceSuccess'); + this.message += this.resourceManager.getStringSync($r('app.string.BindFaceSuccess')); this.faceBind = true; } catch (error) { hilog.error(DOMAIN, 'testTag', 'Bind Face Fail:', error); - if(error.message === 'Authentication template has not been enrolled.'){ - this.message += $r('app.string.BindFaceFailWithNotification') - }else{ - this.message += $r('app.string.BindFaceFail')+ ` : ${error}`; + if (error.message === 'Authentication template has not been enrolled.') { + this.message += this.resourceManager.getStringSync($r('app.string.BindFaceFailWithNotification')) + } else { + this.message += this.resourceManager.getStringSync($r('app.string.BindFaceFail')) + + ` : ${error}`; } } this.promptAction.openToast({ message: this.message, duration: 100, + }).catch(() => { + hilog.error(DOMAIN, 'testTag', 'toast open failed'); }) }); }.width('100%') @@ -368,16 +397,19 @@ export struct MainPage { try { let authType = trustedAuthentication.AuthType.AUTH_TYPE_FACE; await TrustedAuth.disableTrustedBioAuthentication('pin_label1', authType); - this.message += $r('app.string.UnBoundFaceSuccess'); + this.message += this.resourceManager.getStringSync($r('app.string.UnBoundFaceSuccess')); this.faceBind = false; } catch (error) { // 捕获错误并处理 hilog.error(DOMAIN, 'testTag', 'UnBound Face Fail:', error); - this.message += $r('app.string.UnBoundFaceFail')+`: ${error}`; + this.message += this.resourceManager.getStringSync($r('app.string.UnBoundFaceFail')) + + `: ${error}`; } this.promptAction.openToast({ message: this.message, duration: 100, + }).catch(() => { + hilog.error(DOMAIN, 'testTag', 'toast open failed'); }) }); } @@ -386,7 +418,7 @@ export struct MainPage { } } } - .width('calc(100% - 32vp)') + .width('calc(100% - 32vp)') // 100% stand for whole element and vp stand for margin .height(`calc(56vp * ${this.bioState})`) .backgroundColor(Color.White) .borderRadius(16) @@ -398,9 +430,10 @@ export struct MainPage { } } .justifyContent(FlexAlign.Start) - .constraintSize({minHeight:'100%'}) + .constraintSize({ minHeight: '100%' }) .width('100%') - }.height('calc(100% - 56vp)') + }.height('calc(100% - 56vp)') // 100% stand for whole element and vp stand for margin + Button($r('app.string.Trade')).width('calc(100% - 32vp)').onClick(() => { this.pageInfos.pushPath({ name: 'TradingPage' }) }).margin({ bottom: 16 }) diff --git a/entry/src/main/ets/pages/PasswordSelectionPage.ets b/entry/src/main/ets/pages/PasswordSelectionPage.ets index 5ff9689..3e8ceeb 100644 --- a/entry/src/main/ets/pages/PasswordSelectionPage.ets +++ b/entry/src/main/ets/pages/PasswordSelectionPage.ets @@ -36,6 +36,8 @@ export struct PasswordSelectionPage { @Consume pageInfos: NavPathStack; uiContext: UIContext = this.getUIContext(); promptAction: PromptAction = this.uiContext.getPromptAction(); + context: Context = this.uiContext.getHostContext() as Context; + resourceManager = this.context.resourceManager; build() { NavDestination() { @@ -48,7 +50,7 @@ export struct PasswordSelectionPage { .textAlign(TextAlign.Start) .margin({ top: 28, bottom: 8 }) } - .width('calc(100% - 56vp)') + .width('calc(100% - 56vp)') // 100% stand for whole element and vp stand for margin .margin({ left: 28, right: 28 @@ -58,7 +60,7 @@ export struct PasswordSelectionPage { Checkbox().margin({ left: 18 }).select(this.onlyNum!!) Text($r('app.string.PureNumber')).textAlign(TextAlign.Start).margin({ left: 8 }) } - .width('calc(100% - 32vp)') + .width('calc(100% - 32vp)') // 100% stand for whole element and vp stand for margin .height(56) .backgroundColor(Color.White) .borderRadius(16) @@ -74,7 +76,7 @@ export struct PasswordSelectionPage { }) Text($r('app.string.NumberPlusAlphabet')).textAlign(TextAlign.Start).margin({ left: 8 }) } - .width('calc(100% - 32vp)') + .width('calc(100% - 32vp)') // 100% stand for whole element and vp stand for margin .height(56) .backgroundColor(Color.White) .borderRadius(16) @@ -84,7 +86,7 @@ export struct PasswordSelectionPage { }) Blank() - if(this.hasShield){ + if (this.hasShield) { Button($r('app.string.ModifyWord')).width('calc(100% - 32vp)').onClick(async () => { this.message = ''; if (this.onlyNum) { @@ -97,23 +99,24 @@ export struct PasswordSelectionPage { hilog.info(DOMAIN, 'testTag', 'Generate Key Success'); let session = await TrustedAuth.SignInit(); hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); - let indata: string = 'aaabbb'; + let indata: string = 'placeholder'; await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, this.type, 'pin_label1'); - this.message += $r('app.string.ModifyPwSuccess'); + this.message += this.resourceManager.getStringSync($r('app.string.ModifyPwSuccess')); this.hasShield = true; } catch (error) { // catch error hilog.error(DOMAIN, 'testTag', 'Modify Pw Fail:', error); - this.message += $r('app.string.ModifyPwFail')+`: ${error}`; + this.message += this.resourceManager.getStringSync($r('app.string.ModifyPwFail')) + `: ${error}`; } this.promptAction.openToast({ message: this.message, duration: 100, + }).catch(() => { + hilog.error(DOMAIN, 'testTag', 'toast open failed'); }) this.pageInfos.pop(); }).margin({ bottom: 16 }) - } - else{ + } else { Button($r('app.string.OpenWord')).width('calc(100% - 32vp)').onClick(async () => { this.message = ''; if (this.onlyNum) { @@ -126,18 +129,20 @@ export struct PasswordSelectionPage { hilog.info(DOMAIN, 'testTag', 'GenerateKeySuccess'); let session = await TrustedAuth.SignInit(); hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); - let indata: string = 'aaabbb'; + let indata: string = 'placeholder'; await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, this.type, 'pin_label1'); - this.message += $r('app.string.OpenShieldSuccess'); + this.message += this.resourceManager.getStringSync($r('app.string.OpenShieldSuccess')); this.hasShield = true; } catch (error) { // catch error hilog.error(DOMAIN, 'testTag', 'OpenShield Fail:', error); - this.message += $r('app.string.OpenShieldFail')+`: ${error}`; + this.message += this.resourceManager.getStringSync($r('app.string.OpenShieldFail')) + `: ${error}`; } this.promptAction.openToast({ message: this.message, duration: 100, + }).catch(() => { + hilog.error(DOMAIN, 'testTag', 'toast open failed'); }) this.pageInfos.pop(); }).margin({ bottom: 16 }) diff --git a/entry/src/main/ets/pages/TradingPage.ets b/entry/src/main/ets/pages/TradingPage.ets index 1b0ce10..35094e8 100644 --- a/entry/src/main/ets/pages/TradingPage.ets +++ b/entry/src/main/ets/pages/TradingPage.ets @@ -42,85 +42,113 @@ export struct BindSheetTemp { @Consume fingerprintBind: boolean; uiContext: UIContext = this.getUIContext(); promptAction: PromptAction = this.uiContext.getPromptAction(); + context: Context = this.uiContext.getHostContext() as Context; + resourceManager = this.context.resourceManager; build() { Column({ space: 12 }) { - Button($r('app.string.PINVerification')).width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { - this.message = ''; - try { - let session = await TrustedAuth.SignInit(); - hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); - let indata: string = this.receiver + '/' + this.receiveAccount + '/' + this.tradingAmount; - await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_CONTENT_PWD_VERIFY, 'pin_label1'); - this.message += $r('app.string.PINVerificationSuccess'); - } catch (error) { - hilog.error(DOMAIN, 'testTag', 'PIN Verification Fail:', error); - this.message += $r('app.string.PINVerificationFail')+ `: ${error}`; - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); - if (this.fingerprintBind) { - Button($r('app.string.FingerprintVerification')).width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { + Button($r('app.string.PINVerification')) + .width('calc(100% - 32vp)') + .buttonStyle(ButtonStyleMode.NORMAL) + .onClick(async () => { this.message = ''; try { let session = await TrustedAuth.SignInit(); hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); - const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FINGERPRINT_VERIFY, 'pin_label1'); - let bioAuthToken: Uint8Array = - await TrustedAuth.UserAuthBeforeSign(session, TUI_CONTENT_FINGERPRINT_VERIFY); - let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; - let resignAuthToken = - await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) - this.message += $r('app.string.FingerprintVerificationSuccess'); + let indata: string = + this.resourceManager.getStringSync($r('app.string.Recipient')) + ':' + this.receiver + '/' + + this.resourceManager.getStringSync($r('app.string.AccountNumber')) + ':' + this.receiveAccount + '/' + + this.resourceManager.getStringSync($r('app.string.TradingAmount')) + ':' + this.tradingAmount; + await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_CONTENT_PWD_VERIFY, 'pin_label1'); + this.message += this.resourceManager.getStringSync($r('app.string.PINVerificationSuccess')); } catch (error) { - hilog.error(DOMAIN, 'testTag', 'Fingerprint Verification Fail:', error); - if(error.code === 1019100019){ - this.message += $r('app.string.FingerprintVerificationFailWithNotification'); - } - else{ - this.message += $r('app.string.FingerprintVerificationFail')+ `: ${error}`; - } + hilog.error(DOMAIN, 'testTag', 'PIN Verification Fail:', error); + this.message += this.resourceManager.getStringSync($r('app.string.PINVerificationFail')) + `: ${error}`; } this.promptAction.openToast({ message: this.message, duration: 100, + }).catch(() => { + hilog.error(DOMAIN, 'testTag', 'toast open failed'); }) }); + if (this.fingerprintBind) { + Button($r('app.string.FingerprintVerification')) + .width('calc(100% - 32vp)') + .buttonStyle(ButtonStyleMode.NORMAL) + .onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); + let indata: string = + this.resourceManager.getStringSync($r('app.string.Recipient')) + ':' + this.receiver + '/' + + this.resourceManager.getStringSync($r('app.string.AccountNumber')) + ':' + this.receiveAccount + '/' + + this.resourceManager.getStringSync($r('app.string.TradingAmount')) + ':' + this.tradingAmount; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(indata, session, TUI_CONTENT_FINGERPRINT_VERIFY, 'pin_label1'); + let bioAuthToken: Uint8Array = + await TrustedAuth.UserAuthBeforeSign(session, TUI_CONTENT_FINGERPRINT_VERIFY); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + await TrustedAuth.HuksSignAndVerify(indata, session, resignAuthToken.authToken) + this.message += this.resourceManager.getStringSync($r('app.string.FingerprintVerificationSuccess')); + } catch (error) { + hilog.error(DOMAIN, 'testTag', 'Fingerprint Verification Fail:', error); + if (error.code === 1019100019) { + this.message += this.resourceManager.getStringSync($r('app.string.FingerprintVerificationFailWithNotification')); + } else { + this.message += this.resourceManager.getStringSync($r('app.string.FingerprintVerificationFail')) + + `: ${error}`; + } + } + this.promptAction.openToast({ + message: this.message, + duration: 100, + }).catch(() => { + hilog.error(DOMAIN, 'testTag', 'toast open failed'); + }) + }); } if (this.faceBind) { - Button($r('app.string.FaceVerification')).width('calc(100% - 32vp)').buttonStyle(ButtonStyleMode.NORMAL).onClick(async () => { - this.message = ''; - try { - let session = await TrustedAuth.SignInit(); - hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); - const tuiAuthToken: Uint8Array = - await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(session, TUI_CONTENT_FACE_VERIFY, 'pin_label1'); - let bioAuthToken: Uint8Array = - await TrustedAuth.UserAuthBeforeSign(session, TUI_CONTENT_FACE_VERIFY); - let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; - let resignAuthToken = - await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); - await TrustedAuth.HuksSignAndVerify(session, resignAuthToken.authToken) - this.message += $r('app.string.FaceVerificationSuccess'); - } catch (error) { - hilog.error(DOMAIN, 'testTag', 'Face Verification Fail:', error); - if(error.code === 1019100019){ - this.message += $r('app.string.FaceVerificationFailWithNotification'); - } - else{ - this.message += $r('app.string.FaceVerificationFail')+ `: ${error}`; + Button($r('app.string.FaceVerification')) + .width('calc(100% - 32vp)') + .buttonStyle(ButtonStyleMode.NORMAL) + .onClick(async () => { + this.message = ''; + try { + let session = await TrustedAuth.SignInit(); + hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); + let indata: string = + this.resourceManager.getStringSync($r('app.string.Recipient')) + ':' + this.receiver + '/' + + this.resourceManager.getStringSync($r('app.string.AccountNumber')) + ':' + this.receiveAccount + '/' + + this.resourceManager.getStringSync($r('app.string.TradingAmount')) + ':' + this.tradingAmount; + const tuiAuthToken: Uint8Array = + await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(indata, session, TUI_CONTENT_FACE_VERIFY, 'pin_label1'); + let bioAuthToken: Uint8Array = + await TrustedAuth.UserAuthBeforeSign(session, TUI_CONTENT_FACE_VERIFY); + let operType = trustedAuthentication.OperateType.OPERATE_TYPE_CONTENT_AUTH; + let resignAuthToken = + await trustedAuthentication.getBiometricAuthToken(operType, tuiAuthToken, bioAuthToken); + await TrustedAuth.HuksSignAndVerify(indata, session, resignAuthToken.authToken) + this.message += this.resourceManager.getStringSync($r('app.string.FaceVerificationSuccess')); + } catch (error) { + hilog.error(DOMAIN, 'testTag', 'Face Verification Fail:', error); + if (error.code === 1019100019) { + this.message += this.resourceManager.getStringSync($r('app.string.FaceVerificationFailWithNotification')); + } else { + this.message += this.resourceManager.getStringSync($r('app.string.FaceVerificationFail')) + + `: ${error}`; + } } - } - this.promptAction.openToast({ - message: this.message, - duration: 100, - }) - }); + this.promptAction.openToast({ + message: this.message, + duration: 100, + }).catch(() => { + hilog.error(DOMAIN, 'testTag', 'toast open failed'); + }) + }); } }.margin({ top: 24, bottom: 24 }) } @@ -148,29 +176,46 @@ export struct TradingPage { .width('75%') .fontSize(16) .backgroundColor(Color.White) + .onChange((value) => { + this.receiver = value; + }) }.width('100%').height(48) Divider().width('93%') Row() { - Text($r('app.string.AccountNumber')).width('20%').fontSize(14).textAlign(TextAlign.Start).margin({ left: 12 }) + Text($r('app.string.AccountNumber')) + .width('20%') + .fontSize(14) + .textAlign(TextAlign.Start) + .margin({ left: 12 }) TextArea({ placeholder: '6666 1234 **** **** 888', text: this.receiveAccount }) .width('75%') .fontSize(16) .backgroundColor(Color.White) + .onChange((value) => { + this.receiveAccount = value; + }) }.width('100%').height(48) Divider().width('93%') Row() { - Text($r('app.string.TradingAmount')).width('20%').fontSize(14).textAlign(TextAlign.Start).margin({ left: 12 }) + Text($r('app.string.TradingAmount')) + .width('20%') + .fontSize(14) + .textAlign(TextAlign.Start) + .margin({ left: 12 }) TextArea({ placeholder: '0.0', text: this.tradingAmount }) .width('75%') .fontSize(16) .backgroundColor(Color.White) + .onChange((value) => { + this.tradingAmount = value; + }) }.width('100%').height(48) Blank().height(4) } - .width('calc(100% - 32vp)') + .width('calc(100% - 32vp)') // 100% stand for whole element and vp stand for margin .backgroundColor(Color.White) .borderRadius(16) .margin({ @@ -180,7 +225,8 @@ export struct TradingPage { bottom: 24 }) - Button($r('app.string.NextWord')).width('calc(100% - 32vp)') + Button($r('app.string.NextWord')) + .width('calc(100% - 32vp)')// 100% stand for whole element and vp stand for margin .onClick(() => { this.bindSheetShow = true; }) diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json index cc9f5b7..e0f4462 100644 --- a/entry/src/main/resources/base/element/string.json +++ b/entry/src/main/resources/base/element/string.json @@ -58,7 +58,7 @@ }, { "name": "CloseShieldWithoutVerification", - "value": "Unable shield without Verification" + "value": "Unable shield without verification" }, { "name": "BioFeatureVerification", -- Gitee From a2be70c4e3cf16676074cc87ca5ba92d458c85e4 Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Fri, 15 Aug 2025 17:00:58 +0800 Subject: [PATCH 14/16] code review fix 3 --- entry/src/main/ets/pages/TradingPage.ets | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/entry/src/main/ets/pages/TradingPage.ets b/entry/src/main/ets/pages/TradingPage.ets index 35094e8..88b8fcc 100644 --- a/entry/src/main/ets/pages/TradingPage.ets +++ b/entry/src/main/ets/pages/TradingPage.ets @@ -56,8 +56,8 @@ export struct BindSheetTemp { let session = await TrustedAuth.SignInit(); hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); let indata: string = - this.resourceManager.getStringSync($r('app.string.Recipient')) + ':' + this.receiver + '/' + - this.resourceManager.getStringSync($r('app.string.AccountNumber')) + ':' + this.receiveAccount + '/' + + this.resourceManager.getStringSync($r('app.string.Recipient')) + ':' + this.receiver + '\n' + + this.resourceManager.getStringSync($r('app.string.AccountNumber')) + ':' + this.receiveAccount + '\n' + this.resourceManager.getStringSync($r('app.string.TradingAmount')) + ':' + this.tradingAmount; await TrustedAuth.UserAuthTUIPINBeforeSign(indata, session, TUI_CONTENT_PWD_VERIFY, 'pin_label1'); this.message += this.resourceManager.getStringSync($r('app.string.PINVerificationSuccess')); @@ -82,8 +82,8 @@ export struct BindSheetTemp { let session = await TrustedAuth.SignInit(); hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); let indata: string = - this.resourceManager.getStringSync($r('app.string.Recipient')) + ':' + this.receiver + '/' + - this.resourceManager.getStringSync($r('app.string.AccountNumber')) + ':' + this.receiveAccount + '/' + + this.resourceManager.getStringSync($r('app.string.Recipient')) + ':' + this.receiver + '\n' + + this.resourceManager.getStringSync($r('app.string.AccountNumber')) + ':' + this.receiveAccount + '\n' + this.resourceManager.getStringSync($r('app.string.TradingAmount')) + ':' + this.tradingAmount; const tuiAuthToken: Uint8Array = await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(indata, session, TUI_CONTENT_FINGERPRINT_VERIFY, 'pin_label1'); @@ -121,8 +121,8 @@ export struct BindSheetTemp { let session = await TrustedAuth.SignInit(); hilog.info(DOMAIN, 'testTag', 'Signature Initialization success'); let indata: string = - this.resourceManager.getStringSync($r('app.string.Recipient')) + ':' + this.receiver + '/' + - this.resourceManager.getStringSync($r('app.string.AccountNumber')) + ':' + this.receiveAccount + '/' + + this.resourceManager.getStringSync($r('app.string.Recipient')) + ':' + this.receiver + '\n' + + this.resourceManager.getStringSync($r('app.string.AccountNumber')) + ':' + this.receiveAccount + '\n' + this.resourceManager.getStringSync($r('app.string.TradingAmount')) + ':' + this.tradingAmount; const tuiAuthToken: Uint8Array = await TrustedAuth.GetTUIAuthTokenBeforeBioVerify(indata, session, TUI_CONTENT_FACE_VERIFY, 'pin_label1'); -- Gitee From e43f70ada1316f374a1e075d274620e5e3cc2fed Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Fri, 15 Aug 2025 17:19:17 +0800 Subject: [PATCH 15/16] code review fix 4 --- .../main/ets/model/TrustedAuthentication.ets | 35 +++++++------------ 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/entry/src/main/ets/model/TrustedAuthentication.ets b/entry/src/main/ets/model/TrustedAuthentication.ets index c830ae9..3c316df 100644 --- a/entry/src/main/ets/model/TrustedAuthentication.ets +++ b/entry/src/main/ets/model/TrustedAuthentication.ets @@ -32,7 +32,6 @@ const TUI_PIN_SET_MIX = 9 const TUI_PIN_MODIFY_MIX = 10 const DOMAIN = 0x0000 const KEY_ALIAS = 'test_sign_key_alias'; -let handle: number; class throwObject { isThrow: boolean = false @@ -161,27 +160,19 @@ async function Verify(indata: string, signature: Uint8Array): Promise { properties: verifyProperties, inData: signature } - await huks.initSession(KEY_ALIAS, options).then((data) => { - handle = data.handle; - hilog.info(DOMAIN, 'testTag', 'Verify Init Success! Result: ' + JSON.stringify(data)); - }).catch((err: Error) => { - hilog.error(DOMAIN, 'testTag', 'Init err: ' + JSON.stringify(err)); - }) - hilog.info(DOMAIN, 'testTag', 'Verify Update Begin' + JSON.stringify(options) + 'handle' + JSON.stringify(handle)); - options.inData = newIndata; - await huks.updateSession(handle, options).then(() => { - hilog.info(DOMAIN, 'testTag', 'Verify Update Begin(inFunction)' + JSON.stringify(options.inData)); - }).catch((err: Error) => { - hilog.error(DOMAIN, 'testTag', 'Verify update err: ' + JSON.stringify(err)); - }) - hilog.info(DOMAIN, 'testTag', 'Verify Finish Begin' + JSON.stringify(options)); - hilog.info(DOMAIN, 'testTag', 'Verify Finish SIG' + JSON.stringify(signature)); - options.inData = newSignature; - await huks.finishSession(handle, options).then(() => { - hilog.info(DOMAIN, 'testTag', 'Verify Finish Success! Result:' + JSON.stringify(options.inData)); - }).catch((err: Error) => { - hilog.error(DOMAIN, 'testTag', 'Verify finish err: ' + JSON.stringify(err)); - }); + try{ + let res = await huks.initSession(KEY_ALIAS, options) + let handle = res.handle + hilog.info(DOMAIN, 'testTag', 'Verify Update Begin' + JSON.stringify(options) + 'handle' + JSON.stringify(handle)); + options.inData = newIndata; + await huks.updateSession(handle, options) + hilog.info(DOMAIN, 'testTag', 'Verify Finish Begin' + JSON.stringify(options)); + hilog.info(DOMAIN, 'testTag', 'Verify Finish SIG' + JSON.stringify(signature)); + options.inData = newSignature; + await huks.finishSession(handle, options) + }catch (error) { + hilog.error(DOMAIN, 'testTag', 'Verify error'); + } }; class TrustedAuth { -- Gitee From 0cee7ef4ad6777dfc1ceb108aa811f675f05278e Mon Sep 17 00:00:00 2001 From: hid21342512 Date: Mon, 18 Aug 2025 10:20:07 +0800 Subject: [PATCH 16/16] code review fix 5 --- README.md | 5 +++-- .../main/ets/entryability/EntryAbility.ets | 1 + .../entrybackupability/EntryBackupAbility.ets | 1 + .../main/ets/model/TrustedAuthentication.ets | 3 ++- entry/src/main/ets/pages/Index.ets | 1 + entry/src/main/ets/pages/MainPage.ets | 7 +++---- .../main/ets/pages/PasswordSelectionPage.ets | 5 +++-- entry/src/main/ets/pages/TradingPage.ets | 3 ++- entry/src/main/ets/utils/AssetUtils.ets | 1 + .../main/resources/base/element/string.json | 4 ++-- .../main/resources/en_US/element/string.json | 4 ++-- screenshots/index.png | Bin 163711 -> 141099 bytes 12 files changed, 21 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 85de618..942d337 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ ## 效果预览 | 数字盾预览 | |-----------------------------------------------| -| | +| | ## 使用说明 ### 数字盾服务签名申请 @@ -72,4 +72,5 @@ 3. DevEco Studio版本:DevEco Studio 6.0 Beta3及以上。 4. HarmonyOS SDK版本:HarmonyOS 6.0 Bete3 SDK及以上。 5. 需要在华为开发者联盟网站上注册成为开发者,并完成企业开发者实名认证 (https://developer.huawei.com/consumer/cn/) -6. 需要在AppGallery Connect页面申请数字盾权限 (https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/) \ No newline at end of file +6. 需要在AppGallery Connect页面申请数字盾权限 (https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/) +7. 当前数字盾人脸识别能力仅提供支持3D人脸识别的设备使用(Mate系列60之后的设备) \ No newline at end of file diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index 3456b0e..e115ffb 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { ConfigurationConstant, UIAbility } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { window } from '@kit.ArkUI'; diff --git a/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets index 56fcf22..6271565 100644 --- a/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets +++ b/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { hilog } from '@kit.PerformanceAnalysisKit'; import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; diff --git a/entry/src/main/ets/model/TrustedAuthentication.ets b/entry/src/main/ets/model/TrustedAuthentication.ets index 3c316df..a86dfc6 100644 --- a/entry/src/main/ets/model/TrustedAuthentication.ets +++ b/entry/src/main/ets/model/TrustedAuthentication.ets @@ -12,14 +12,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { resourceManager } from '@kit.LocalizationKit'; import { huks } from '@kit.UniversalKeystoreKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { userAuth } from '@kit.UserAuthenticationKit'; import { trustedAuthentication } from '@kit.DeviceSecurityKit'; import { util } from '@kit.ArkTS'; -import AssetUtils from '../utils/AssetUtils'; import { hilog } from '@kit.PerformanceAnalysisKit'; +import AssetUtils from '../utils/AssetUtils'; const TUI_PIN_SET = 1 const TUI_PIN_MODIFY = 2 diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 0bb639c..37ca072 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + @Entry @Component struct Index { diff --git a/entry/src/main/ets/pages/MainPage.ets b/entry/src/main/ets/pages/MainPage.ets index c94764b..c53e05a 100644 --- a/entry/src/main/ets/pages/MainPage.ets +++ b/entry/src/main/ets/pages/MainPage.ets @@ -14,14 +14,13 @@ */ import { trustedAuthentication } from '@kit.DeviceSecurityKit'; -import TrustedAuth from '../model/TrustedAuthentication'; import { BusinessError } from '@kit.BasicServicesKit'; import { cryptoFramework } from '@kit.CryptoArchitectureKit'; import { userAuth } from '@kit.UserAuthenticationKit'; - +import { hilog } from '@kit.PerformanceAnalysisKit'; import { PromptAction } from '@kit.ArkUI'; import AssetUtils from '../utils/AssetUtils'; -import { hilog } from '@kit.PerformanceAnalysisKit'; +import TrustedAuth from '../model/TrustedAuthentication'; const TUI_PIN_DISABLE = 3 const TUI_BIND_FACE = 7 @@ -131,7 +130,7 @@ export struct MainPage { Text($r('app.string.DigitalShield')).textAlign(TextAlign.Start).margin({ left: 12 }) Blank() if (this.hasShield) { - Button($r('app.string.ModifyPassword')) + Button($r('app.string.ModifyWord')) .buttonStyle(ButtonStyleMode.NORMAL) .margin({ top: 14, bottom: 14, right: 12 }) .onClick(async () => { diff --git a/entry/src/main/ets/pages/PasswordSelectionPage.ets b/entry/src/main/ets/pages/PasswordSelectionPage.ets index 3e8ceeb..21b9fcd 100644 --- a/entry/src/main/ets/pages/PasswordSelectionPage.ets +++ b/entry/src/main/ets/pages/PasswordSelectionPage.ets @@ -12,9 +12,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import TrustedAuth from '../model/TrustedAuthentication'; + import { PromptAction } from '@kit.ArkUI'; import { hilog } from '@kit.PerformanceAnalysisKit'; +import TrustedAuth from '../model/TrustedAuthentication'; const TUI_PIN_SET = 1 const TUI_PIN_MODIFY = 2 @@ -87,7 +88,7 @@ export struct PasswordSelectionPage { Blank() if (this.hasShield) { - Button($r('app.string.ModifyWord')).width('calc(100% - 32vp)').onClick(async () => { + Button($r('app.string.ModifyPassword')).width('calc(100% - 32vp)').onClick(async () => { this.message = ''; if (this.onlyNum) { this.type = TUI_PIN_MODIFY; diff --git a/entry/src/main/ets/pages/TradingPage.ets b/entry/src/main/ets/pages/TradingPage.ets index 88b8fcc..7e1c3b9 100644 --- a/entry/src/main/ets/pages/TradingPage.ets +++ b/entry/src/main/ets/pages/TradingPage.ets @@ -12,10 +12,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import TrustedAuth from '../model/TrustedAuthentication'; + import { PromptAction } from '@kit.ArkUI'; import { trustedAuthentication } from '@kit.DeviceSecurityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; +import TrustedAuth from '../model/TrustedAuthentication'; const TUI_CONTENT_PWD_VERIFY = 4 const TUI_CONTENT_FACE_VERIFY = 5 diff --git a/entry/src/main/ets/utils/AssetUtils.ets b/entry/src/main/ets/utils/AssetUtils.ets index 1e525d5..6f26015 100644 --- a/entry/src/main/ets/utils/AssetUtils.ets +++ b/entry/src/main/ets/utils/AssetUtils.ets @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { util } from '@kit.ArkTS'; import { asset } from '@kit.AssetStoreKit'; import { BusinessError } from '@kit.BasicServicesKit'; diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json index e0f4462..0606932 100644 --- a/entry/src/main/resources/base/element/string.json +++ b/entry/src/main/resources/base/element/string.json @@ -38,7 +38,7 @@ }, { "name": "CloseShieldWithVerification", - "value": "Unable shield with verification" + "value": "Unable shield with check" }, { "name": "CloseWord", @@ -58,7 +58,7 @@ }, { "name": "CloseShieldWithoutVerification", - "value": "Unable shield without verification" + "value": "Unable shield without check" }, { "name": "BioFeatureVerification", diff --git a/entry/src/main/resources/en_US/element/string.json b/entry/src/main/resources/en_US/element/string.json index cc9f5b7..0606932 100644 --- a/entry/src/main/resources/en_US/element/string.json +++ b/entry/src/main/resources/en_US/element/string.json @@ -38,7 +38,7 @@ }, { "name": "CloseShieldWithVerification", - "value": "Unable shield with verification" + "value": "Unable shield with check" }, { "name": "CloseWord", @@ -58,7 +58,7 @@ }, { "name": "CloseShieldWithoutVerification", - "value": "Unable shield without Verification" + "value": "Unable shield without check" }, { "name": "BioFeatureVerification", diff --git a/screenshots/index.png b/screenshots/index.png index af6be326a0025d3c0c0fba9d8221bfd8b558aafb..dce041118751f48d246ceb0e3c696563a2220aed 100644 GIT binary patch literal 141099 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 literal 163711 zcmZ_02UJsC*EOo5U<2&b5ET(cdhbzDBGROHA|ky85_*CSuuzm1dPF3lgY+7d-Vs7? z0YVL(5FmlT&GV1%yLY_L|6Ujw`-E}AIA@===Uj8Hwe#tP4w&^k_xTeiPOxe`d!m2h z1QX%JiPJh~nHhiSc7Hp<7*2ZYgCCzL=;2*vy!l{fs$s9KeL{$FeD=hdlUGhK{c{TA z_ryu=6KDR<@re`9PxAb~$NDGl{m(h4PMipHI&u1c&M{|<|NO)=UW`xw&&c%st`xXpiXAI{&pP6}|IKgq{pVvtTbU))39-h#6^2pHdi};1U z!=A?8uJesA?>tVS?ymQ+Z6NF})Jy{qU0tb4zVg}}i= zNWGK0ySr)uvzeJ0ytrA(XEiH^lB1RRW>07I`Sa(m4|dn=yjonw*W42}+$s5M2Q?2m zqN)Y=llfV>rL$frQ_5XOZ#OqLU!S{?U2}HY+O3h07vUF`*Fv{QMxiPSzJLFIHn`@7 zm{m1QVoJ(F)?=#ngdGK6lB!(ZTlbY#L2`m*U{qD`A(EWzIC0V%Vag&%+ce<7<&AdZEH{| zYGZWhcP7`^$fW|-B1hJXUKMWRLzlK6D<4D@mz40_Qej6TO5=9B2W?J!MhTE=&Jv8@ z1#+5^@6n$~x>%Petnp*u)apfz*5D#D?Q&qVy zdS&)&N`3Gc?UJoXbDT|MsKNu|JkyY%r+&I|(<&AXzAgkDg8Inl6kU<5!#aM0qcB

4KPgkN8&+PlM_CqQ;dDa$t*}Y@x=1A%Zq~M!LE+@Cm29Hls@9R9TPj}3)h^n6E z?Ndu4YtUZmdU~en9u+4Wr^^$5(bAd^+Uh)($tqv= z93>95{f-OX)bnmr_jxGSr;Ny+-OVd*W;H%*LvYf76MS!da`-#jc+fap!V=pi=WgFK z+x%sm_;w>yZ%vd_d+9AZ%KAjP((jEA9D%loE&QVP5D!K!h5fV`{cM)-lCv&(<-NK> zqfIp_dt=2QUWc!H<-k00jEtXcND5oln^$iSvdHd7Op13EOT4=Bd6NB8@I*hnG)5yC zU$(Nc_F3|9o8(-Hfo9!5NF3`ntS{dC5}f?^y~Qo1&IQd6Vlf?+n-vcOVd<7`t(n+{ zn?fo&@p(b{VKj4K!~wDGNE75tp zW%<>5s_=c>LLC-=pyAJ0vYm5Da%TQH2G=2Lxe>4T8itMP?j?@>C|u6jz*3imqVRZF z8Fs6Kbl?-j6YDa;?&42!K@J)z(6fTlk+G3uXW>SCc1no_Bz#nk;5^R2A~qX0gxAHx zv@f_hT0?q@NaPKfqa)*lxEATdN#T_seIE0ImO)I13?C-flHNhW7U%8`Vv(jd@B=!A zN$3Kf$12^0%jt!*?48+diFz+3T%cnZ3TKkYrjtc59RF5+ZKFcLufF@qK3UdnENHMk z_;}P0)#Ef(OYQk^N4WCFY?%)3q~Q(qr%H$;>SCByvaH)uih_5*yPt3;20#Yxba+dT z*YTdnnI=BjoVl68)+{e}6pQQK2m_eV~Ouz}T3_P7L>ncV=Fol&O*qXzA_=82^Fc z9oV6`E+@O2cxq3ffhAvDZejVMd}F!_p&Siv+(Gc*ltp=sbYk6wYO?z?T=nC1aIh6l z6Lq6`J$QJuzyrbO5Id4!ClEvRKlIE(IVpD-#|j(N4CoHCQI>wB`J%qg0qZZaf=3M! zlg@Yc*CrLvaMrO}l;yBx?mf7)R!w`qQ50_IEe$y`tZ^e!NYhSl_s45N%Q=(PbtQzq_GCt&(g>4^@!&x{~F3wfjzgj0}o_ zc}r`6E*+9K?=EX!L_oyw;%=D-f9;)>bm}pkhC$9bRyOoTKg${y&GqANqu1eCD}Jlz zFV1#+YzURCP71JgQp&OH$gqSD3dTrgkbc#){}|&D&>SjwP1AEq4~JG)I%rUcI}NaW zmlTzH;RQRvPo)0gqARdq8bRsqy@I!3VU6`!F0#6B?>5ZXJR!1d%@!-QOE>hrw7Ga z(xOPq+B?LHxt427th)&9jExm3oyBpjXB~Fj*g{z&Ou2OMz2V9Ym()QA^8~{1u%w|b zF^RB84}#i&f>U(t=1O@6+2RgxW9$?n=|+dl`naB%qXGOenuc>XOz}4auZ8(YtHkCa z6Ziz9I)DpCsae%I?y-nC2@vJ5a?H?QQYlB1P?7F0o$4f{iQym}P!FX;2h%zbkj@vW z;%QpLx)&Oq!@SA>B*%$iqeL_qk4PjLwP01o^wF~Y_xT65$Sx{|VC=nI%g(c%gFE*u z7*A_u3537KAu^6~veq`Ripxa{Sy6rjb$3dGR$K26OVjc|V!;bHFntOD*fS}Yb7!g5 z^fpM)UYSxovTJ|4lmuBQgnWZUi+yvo~yd%Xo~1~ zj1m?Z(7rzGBUr+fc~t;kd?*d-+R-99OI-yCtC3sU6APR!9+)<@)0J_m^ROgcM$|mc zJtP<|D;ijwYSowK{E(thu5HMM#gIrJ0riR*~C;2kJGL zQK)Fc*OG|w>b@#yTfLwmmnS=jb<2<1a7hT@#uVC!pfcte(jYz~O4U5{B3HxSeB|C# zU?Jy5M;sUcAHdfI?jg_4_?u4^?E0RgGT$4uZ3%Y@1^$7KY|h8CtM0!9>TtF8%tyYC z0w@{p&pd2cJ05u~el}++i1h$EXp-2nd>}b>2eiJDdDY&!u1}9fU)-OQ5_O=R~!*zZ)o|UCAF04V_lf2pb_I@GfA=j?LFrbdH(8ftP0wwHWXn)H5tuC0G+N#FZ``Fh>CN1`_+ux>Al?aJ zRzAg_UpN#7Jp#N?KnxlIXz6Ka<3!p%H6|pt(+57PVLUwcEO*^!+52IQ%-Sre0REC{ zV@hP)${q$d6g0++fevwC^Vs>6O(Q`^eig3%4Ij?E`?jf_5P5X`-5d0AUtdd?ppReM zT^p9~;GB1-_JM(bcho(TAB!_*^Bxg@39wy?gb|797nRTGAj8IKJ3b(tvsy#sD;LukukjkQm*oVgQXZG40u^}Yk`GHqr&>o z?`EPs??$g~df*X_!ZS5q>SQamK#Ufie52l8QE$c#DmIfl?%%$jfvx>qt`yl zqaXq!ga_$pnF5D27=ir}Y z{dF#!>1+n!9o)$-W8!=kgtfzuf5)DIPb6pg9fT6pX2FI_FVYES9wuKWUg#ku+NJD_ zwkgXm7Uv_qHWysLekm!O7bxwZa1KkmX*#Nr?~r9YQgm`)3*=61FhT5r4oGJm)#~~2 ztw&9DLpv#2hl_zcqN(K%;t+&#AR9Tv$;OhBG1vZDD+5mpg_dbT@Ii^_C>sbEAB12v z(53vt9N@KVOJYv0Pf!gqiIGt6(QA=W8Ih(-m8*s#7 zBnLI(dxvdQ>)DdjA#NYaGhji9p@ZcuYM>ZcJ)61Mm;n#6I<(A+8`~SjT=%S615@?( z-X~ePs{+3;eBg40E0L_=FMn-=S!M4bVmr(BFaLpEfw@nqqfcA5%ORpY1g7&cAdvhR z+CTKNGCWXdivx0QE0CtD;Cz%4$9pf2L8qyzU*{Bs& z!iBmaXp+2x0E8|#cm)BlUt2&)f<1S&_Z4jtkpY%az4Af(1Oh6|DV+fyAgw}YWviO( z9Z3z{OrBwkID|8*lS8mj3#rOe`}jwp1M&{5wthyE7nw%$uHhN8MU|s#d=+F=Y6lw{P|SN z4=!Wu&1~H&r2G<1hD7EM0rHevp}nOiU6psvgq=4MY`ZRFe+obA)rOgbb1gD4iFG z$fWpm*-~BtJ6@V^-bIz*Zi*vi0f)kT21A@;vCoHVbFgr|Dq2#HUsi^bIS##!&Cbu+ zFU8L9`y5K%ANFEQAVQ^Ve#KE0(yP1In3G#9uA88vLUOFqTh7Ul#rLHbkg^fox{#Gj zMIl>DM(l!dRI!!XvX_h_KFi@^<`O%(oEFBmCOVN2v0AD(sqhnAOE|cf;PrkNu4?=cKLYs7+g&Ue67WAw-9wP`C zj0+z_W61<(HNxUTaA=GT4X0_33MkdUy6F+lX&&n(Zn#u049nB+sdT7K%Bzra@Ukw- zJtit5@5>R`WuXg1MntA>j9(%)hPXCnKbjLN=Y@9hy!F!ZO#g6 zzCu8UZvkIPgU-{+jZnA_`nI7CD6#JKvep-Ga}2sbl0xiH=+Put1);XKQ3euXE8V`C zI8Yg2hte;}X;LFZJh;M7=*J-f_l}w_uE7(`c6%gRdCBAHYGJtS0GSz+2UK-paS^g+ zkzqEvA8$6Y>o)b|YHxn~+WgHuO+e%8(zR>H%=g5{o}JP7vj`4b_v_I+iA)e@e}pCf z!A|(vOz3J}-(5*~UQyj|5SJ*VVx|&3Z^vzAwE5iF2ab6F7eT9wcJgNCSv(wjZsJ-TLtrwkIyPGs!J6w{jWmsqe^g~1guZ`r@vJ;ZS>8K* z<56U&R4VYcvVF+LQ_?=ZTdlvlGM>lC1Ek%!Q|6vtsHl1ur!}80-1KY>lM7tX6Yt#!0R1x%!x~o&jBBl$P7tb9&KK zIG&30dep(Wa1d4UXW#l~Z;t~`%71y|DK))?k+mk<;J^}-mb+7d9_yf%p0zWJslHPX zPxXBdXJ-+=A0fhZ+!G9IGO(UT%01>$34m=N>9liE7x}mDzJQ9J4uQUV-l{z+udjm! z0#5g^h?TZ8w5?CJS|X609I~ZFX*|?}*1Ma0|S1p_@ z8WYHC7gn58$}j2>tNi?i307+!=LSm220%b@sf@%sznZro-{(WG{K_MfQHL=Pu%$dn zb-!9~IbGO*E?(b~vHGMv3n<8r4^jc;*@e<@%4P|7P=a1XS4{yMF~Nn0;&4s}z_T9+ z^oDxfJ%CdudHn(^e)&J#gt(8I&1OQ`}F9Hx&A;C7(X`7_)GIp^7w zN=3Am7ELC}#pdSAE3Eu<8;}e-K$_wakY9Q#6a;`(Dnc|zG$*D2otGld6W5+m{$tyD z+$c=d?p7KyfOB_^HuFL(9NVuQ$2T@^v{htn6J#=&A=~*W!2O5k$Nt>sbr~HWi&0u) zX6CW^q-dk^iL4+!$$W=m>A_Fi_-<5zwIP>KE*p>YgE*kk4TsRJEQvHqx34roSM~Cu zw`OZC4lj>SMDx70MN4}10!*yngHqTOuMUB~W*dvyk)F-whW)cU%lMT-vl4sGa%k{L z6N3~m=|-`)M2&1XMkeoOmKIUVK};3o`fP%FYDjt6Fv7b_;4i~M+*7Jql0>p`i&O& zzMl4`UIQmNg>h&^(6}*t1jwrNLgs0cPM_<)K}k`#;6AogF#{{q3tCk9Tb#AlEB{)< zg)k$G4=0wWkbU@a27D1@9zFWf%9E`sX~a&obC8CyaJ1Y0S)AHoZ-kGDLwEQT*V>rh zE&r%Qk%B|1hsAVH%&r<;%hm1&PrQNER`rW8t?}r*p5+OT`r6m!Sty~&iZ~tlQY@4P zOFTksbsAdWghf*#-4zv~yS|yVibZ&uF{T?ytqtZqx9GKq(N3;r^C(**STJB@u_pO+ z(E3DGv18wlSF2x-NXUaVU-};wpz?))PuWAxMdy(V!5Z%yRF4nI>Q@DIlpPqJR()%m z@1w<@RKS*XT>yL(e2ym@copd*n;_KW zK}N2kd{rrNDF;DdCx<~vG)YjN&yUwh#>q&xq1gph^1U8iQ8Zg7cSeW9Vh zi&Uz7zY(}jst!A&vO`3UvMW;qKJsg-N0t@M0WBB>JGcR zEi-P&snPe4r^{DDPGH_qUMUW4T!xc+jL2sp_}-jwACh7I=DV{&IHu6|2**CFg_1KV z-aQ(5=v^t3+m^q|xw!X9xrIr!1t9VuyhiW?H!!qH!WMcgaTOR&m`X z25#AFv;iNgOvuXms|wL+2mt<_RW#%_)i_$4OROcPJwe?oH$V?JrgtR|I^__GK-(PA z2lluS0_{5)qN$;+rJk_yVFuwc$U4?Lf|s77I5tpjG-zzq+3WKQQIo4_eEix;Z;h4G z=x3N#eK&Vq(czWY)yeA6%&RsT@*+rsL9tpLSLYEWPw~wqyAFW_9D&r zc%9MqZ5QhD$S1spJ;=;FrH=G<*tjZjNQLbfwgP0}NWE$j1H+pKAK~#^@DklI=I>l;5a}Jr*~KSNh(JVGTd29Gs5Yr zS&g6pr-YK+s=P#=Qs{F&hI5f0tk#Zw{xYCZJ9=S#Z?&ZFs2L_3>hcFZW?kJZB)&{4u>|RI znkYfNv_YcM@*oN8t#r=>F(JN? z;86|NG^EL@`Ey1I$pKQcf(Au$T~&mV3#(VqU1<<-=wLH_N_ujS;o;YchL#nO z!WfQySh0A4?ChKt!x*j{8@YOzRh}J=j3w5f_@`6qo=W!Y-2|Z3j%Nd-3hX-Lbv%ah z%q-beDHGnkbXlKA=$R`IsJgIjea^s@{0cTs8RvmQRP0LB1vBLGrp}`6s0Ww}DFMyO=Ta9Rr^`U#hQCG*ts-O~E?S2hbWTHQ1+Sg@+#&?*7X=^V^ltdw-SEt--9hJXwm z!#MRYHXQfpf^0uonj`PA9Ep$k|>~RLE3waB8KDl zlZXIx2Vo<4iWXeHR9LZ9n?5wKdz%f84zSw+4;M|a*^|E z!g38ETsnyK zUO#u9U6tT5eN$oj4bx9uG|qib5z^c6U#^(*RG{jq5ricp4-vZB5{0^NfN2|s1dEUt zgV)-M2{ifjV8JlYvs26foy{bFNddsfKxr*e>8q8 z;LX9c%MVTt&ugYoA|i$>18KDk@0up$Io+4Y_b5K&y5_=r&c)jO*)OQt?T!a1+W_B_ zi#Xk6*>0oACl=sp87+$m(};}OJb6Gne8dm!sU&cy){kgrFNobh?$vk=^tHZJFFG zOJV$^BzN5Z6`lVlRxjOtSkQidP9=~M{hm$L)cl=APlD9@quW`8aT0lbRO!-u={9ogZ+hb#@Hpsk4-op+Ma$h?1vL8KLoxKB{%P^s zB5UIns4t?`rfI=PPnRcad`E8^^JG`S$uU{kXSCSPonJ0AZrGWx#i1u<+2ngulxnq)PhXZ0^Jh>uP)zaHpt_w4+9zD#95+j_q zdikX6yDI)92GV3_8-C64gp!LgsQIR*X`LC(ZJSkX%CI}rc{k-u$*EV!MK)o40SSlu z3+R^yWpo7mzhf=uslmt-sORilicgRMo%#L1)5>wg%l0F#6WQN}y^72LL}jn=R(E!w zswJb5XplVVOHkpdm7ABCnl~OW&j#5ve7G>>M~tv$6vAQ2S>0(W;}o{9TDi7=CL&W+ zm^cMYpn3J602U-{t*jrbi#7#l{#Sq!Kb>>+ZC;-1j6UgLy$0ACv$m%7puz~!Nvw8H zn{Iw&4=@~(rhp^3=U2-Zs^Aj;3|KcwI=cqbO#L>;6EfTgeO2LU;%)r321j+NYCkMv zdE>Qykz@W)eN#)iU}Jr}0uqw;J}W3NGCURdLH^2u3N~@*%D<54CiB}XU(*1brBWuS zOE1!HHyku-0u*?~>TFf92C32gPX_g>$R*FG8q<_t9`0{7>KhgD+Ub%R zYx>u^e9^BD7pD*UH6GF_1G!6-z^rR8@(q@)rdPkY^^C|WYzilKki~PLj8?&K}rWA zBR$JDLf134V*))FerIyPD>7CY-2J;nppOF*^y%8QYfU$PJ1z3M4iU=`s$H85zFm{$ zTa@x3+o@hXY5`d$ z6yl4w?W-f7J{t$W)ev4-T}X`T=sA;#hlrnOaAf~&KBfo0^w%RpY|N|_}-?V z|6z{45^OSUvJy&smYQ^<+Cqto`K&s`XWtc^`E1RL=10Z+6>{jxs*t!$WN^QncBP+y8RIMEuv37 zQhs6XwXO4pGj#{A`@~-ZiF_;FQayP?#G(?9s*HhK!OyY92|Rt8oN3c|YV+P#gM#;k zHmzP}Jr3w#X8n{05!^EIL-`i1@z1*yP9JTx0y`Gb!J?Gyhd(Q>UtqEFUYT!ep(Ot- z(wotl5PR@|qqFwQJj(Y-zubNF?r0S!pr-?>ELnfkLlBYwTSR{M3s0c;KqX^pDp4W= zVq&^6zMpi%87bOrFc49yywybfR+DTHmO-!_&#yrnU?Me3{mVQEX?N%^+meZ6S<5)c z+n~m06^uEiJZxEIkZ&7<2~A{4YseFam#1IZSgv&Q%y6voO!?N+=dv;)cb}GBu@`)# z*LOqNulXJtaAtI=ZdBB5tQ5}vWZ-?TvSn}2u7nEDn%j5*>+A7NTMfj|B-vQ1x0lz} zC7It$kRuiwP3WgQOWY|CE;Rb7@}x)MEc@4B(?ex4hp-pBEu$r~6Qkm&u<&nUuTeTR zv6T2eP{g9#iwRL!x0|HQAj{~ORDPG?!uSHK>go;ByHIL>sfN^YUq;wPuG;!JnR_R| z?I){T4KJTsueRzmNN#75ucLl`AQsb$3BC)$E#IXMofE9uHOh0Pw6@_#{3X2RE^wBK z#Ga(HJY%$SPCWB5<%aXzkp5bKT;KY7?gIa>n7u1pimnOQ=Hy^ashSa^k=@A^ZTMq< zb+3m7z9$H?S3L7(h3~hE#%CK~H0pRS`AoFV0tDJj#L|y}QfN!G=c6b;p|@a>DL{XSAC?P+Y(*ll>s8Kq<$ z9x{+?0tvN!UlzYqm*v(fGL6+vzFSy#lp}0j`Qr1VywL}JrK8r{WF_QV0{@%F(vM!K z`5suZxJ_*>Wr0(x#`JFT$sHdpxysFk3-e7eIzFHPRm1EFj5ZGd8GP8N)&Sxowjk~? zT0OrRgrP&rHpANf-eQ@JdiuU8;{C5HR}e32ST7uG9IvUl@6~eQv6_tykF~<~BQ0Wn zC+D!+F zK&6BJygMU#G4=Y>r%&gi9Bu}BZAXO6`16A!SI@mnB5S!{G3LHa9pd?M=8~{va0jCG zdEXj77|8X(wt3$+Tf3E}ovdh-hNKaSy#}9aX=n(?LW=!9@t3b=R_+}g2(YJ~xr2i} zU2@}*T443xnDn(9-OeoV&2oFBMy+q zs{1GE9xrj7a)%&fSg62nAs23R6bp3nCW;BWF5PX$PeluSnNu?LIG#sA6wTyzmioFA zBmkhP+xJgV7o$SiJ++TLZIkR?{fkMyk6khixnFbPMi0uDfY80GO*5SGqr*4DdF3(> zzrSZ|+1tDP`my`N@SykaUp+9%Z+JK}T+GX42eH|K(L*WQGnG*Hj73!ht#ZSC{_dc0 z-*e8{aC2nEO2xr7&#Te}SK|A78_a4HOWV9qqGlv}_PjsS&TRz8ILU3C!|?&cvtD_5 zv;+lP9cjPZ6LK?-K?vWfOxf%9rT{+!_xN;l^tJVSFyVak;@Zf-pgpQ*`mnY~c#OwWKYz-HivP<9@3@rG}I+=3l?`|HLJml8z z;VR>thS*iu9w8hrFsBa+qi@YNevzv8|4{DrD$W4KR1V|4lPcxVbE^&YWhZqAfr!B6hCf&8*9QAFGPCoA^9=RHtkZ4+6|YQHOd&5U z#_C4DWn$4NoT~e4(Kq0BTl`$H!x6cZA>Xxnls1${L$j9#1gQvO#IW6;!!!LQCb|mi z7KCV86(!TRaB6!4n-(2aba22B)Jj#vNTrF!YlD)}j<0rRz`za|?3L$1fT|~fzV16u z8J_xjLF@?EweK35XH{a%)@VketPFbtuGhXz`7G(s<2t;&wP3OFtR9JYy;fc3btV9P zS2uALle4!n+^f>H$|>RSA352}v#SMXJ?F?@%ph$Ea@H~Is+@}-@1r29NBc2eJHI~Z zjR6GA+^5-j)M`9lm&2Lbb~~;=u$yT(BWc%hje6yDkZ^n#@=YR!;hvVlmj3>^ylEA2 zfo1$zeNSuDlkp+iz&kHT6~nEU3p z*N2^A4pncvG-B>5%uWFDLp-v=r%!IISKjROV`$U)>|m7{b&5h~g5@`!udE-n9TfLAc6VpEF!~?hm`ai-Dn-HRpO&%=d}FUKL5c*Hs!Zn17_{Iq;5xOo&T9 zkDQb69>Etq;k}pYC0U-Z$bDHgfgu%`?ptpJ1c}xko?rf36(ikHx}gB+X3lyr*9qo> zwie#sbmagRPfS?)N_{+uMQJ67Ka$_>W;tT)HbP1D$Y0pb_nO#hO*h%FsyeD(u_`)zi^6!9Etn4PpwY1G;qhBTY^TD`n@MX#~ANPO1 zWtvo+iP2HG&hxbXcJNUr`t^EB;atN8>iWFMqWk8WS;47Z=yH;u4`tfcYuzl!Tp&A4pfG*`D)V( zr;5pFFhwq#F$z{WeG$UEwHW3mPb2Gu-PUWB}DXn(0j!dF&>P%}r_}1oO`Gb0vKF~+tyY&6 zi~<+BdhObZZZV|afztP9vDA!8ZWpfdH>+NYO???)lo3a&o+N^H&Flk9q=9jgoLlI( zjewg(6@Y(lix}o+{oBBM37=NR1$7P$`3@;e>vu0R?IvCO&cuY@Pn~@Gp3Re;4Opw~ z_puU}&V;e+N}_}uuJ6^K+|tQ&dnv{xfti}V^?ow)qrgbhn~~x@*V(3X?h3yzgL!S5 zYE~o7{?lQ6>HBoL(l#m{%;#?y|2~{P6BQf}q%WDfwipSctOM@L&M2OH67b=WzVYc# z;T|EF)hXm#EytrtK{re$IDL-#YiPkzK8|-NO?$ z+~>~xmY@n+t;kSplqD5X!7jC8@r}o}Hj{*?X1S zAgg3J&#Xjl=#KO)>fNm&nMvs^b*F?D)1vC{a<9lIO;@_Vk;i;2in{5^BjORddNn?7 zlZ`*&uTrTmx8B~=IOfbCy7F5wns==Zo=t#`_W9-L@03!!^BZlW=l~VTanDN!HhxQ2 zh8!20uGWX-Q#P*g;uq8pM=hHAoMxLN!=-vT*ZJJ-`*hA<37q{n%4}!wkWn!b7EJN` zfv?&fbD3=M_>{=(^7@MG?U7I!eybWd953b5+=y~ar@Q=%Q3fuavM6^)RXidU=?o!k z#ZH*j92R#LO^^wvkhgg+10-K(S%#Tq+*ug5_66*)q3Rw+8{6dUd=aaiKHIx8GLb+a zC#*l{RVH7wpJfv{Xemfc63p8kPn(av`n4eDy!XQhuPeo?{SocXKiKA&YOg4V3J4Cl zmuMBpH~_A&Nsouf@agfi&P;-O_!PQwGa!wa-bF?C3R`geX5I#G*REZn3)I8-om4;c zLu%wUon8KS_X6CFMU)H$EprnSq!fqVyWp0+f2QDg^upZI?(6vOS@|l6Hq)yd4Xl2! za_1@>f8>u8Zq9whB@6){eX6p~8x)MICI>Dmd(x9p`if7Gsoy)(&M5smnT)QlJQc~W^c^$cSt5zC9~ z!!@>{RWQ;Bmw~}TWuHs_^dlBN;o$v7;M{u6M!ZYG(XD<4zz3w~nN_IAi&_d}SwU)| z%`}$+$akV4g(1J&NA?I%pKBLhfxT2br;+YLVf<5mK7ZSZmM%M=@01e=s{vu$--jLX zm~O9DKz*z~85a+=1${LT2jDdDEydZ68Nw;`FKBCcUF4^*Z`Hh)<^C_`=sEkfYttf$ zu#r-I;PzFefVkdY#$*5SXevM5ZKCpie8hs9V4pst_spuXN_{`)LE%HcUnx;#)hP`< z**(f7iM64G`3?)o=6mO~;TT7`nt`M3>klScJm?bUTHu~0r%^^moDtQ~+Y z+&YGie5c12{w}s!aQgD+1zhoKCuQRqYEK>j$fVVJq*FS@pXW4iJPzkl|lZq9ghMf7U z{nb4<@XV3v=J>;?Nuj;4&;-50B0ZdCl*myPGh%Btq`>>-REmGX-QuUa&C*dgHp29< z9><9a#s4hBah~G3{oBL2E-AYwX&>MM+$FZ@(U zDbgMp(PUHHf2goqnIWOCTpnH@XLMWRjkI#wXF=zU%4_>Jm>yQy_*1`&8ZY3s1)E4s%S1s11 z=Z`{n^>Y zTJe=FUK|DetDgAV{qu=>m#R+c)hN&mE?ePyt5l9h4PBNxOHMScv0Uv*KrZH2WS$N$ zuo|zMA9F$8L0Lhw$EQCNIvJSYoe}-vyCN=ziYU-olW{eDWA(ef;bV|oc!7tvgQ52a zX<*=EkrrqR%u;PFs5CohtP1?Z(s|+7^NAmAhwEnOr;LHSwjA5qoSY)}+E{`$wN8SU zukV9@TobXNe=P1y{`_S7+W9N|O92?)b3P%v68C2eU&*ss_us!IP$8twjm@fPa)q>b zdr4e0>i}khTUTSZeuw}rFUG>7Et{3~&`-=nZCQ`i+*<&Xtq}*mbJc#l5FohUEGy+> zY$|O65ZhT88)ZDUD^~L@PG(8%Oep1_DxEn1mYQC}q^P@2{~{lDJ@ zzyg4MvdmXq{RHf3?BZKctoal3m23?@TTl5_<+tw#O;X&K&r>TVFH1DSRcY0s` zy`pLqPOXiVwcc$_g--2VtJ;tLGRfTR&q;S5$K*41@ELh+XJelkq`YoQ%?#f90%=<^ zfwZ=(YftRJkh%_}or6^B<1`|UtO3}{FN{o<1-^lI4_o=ZKj2&3@#^`UZz49_eF>9h z!NJOCkH(B?v^oUt-1exPes|ex-zMx8$97<9imaEn*W}ZNB+qHV%ycg?8^K3eotf7k ziyGW^csCr2^|~vO-hJk+y~;-xiN$Nd)r>0Y1hs2Xb|G|ImA(sQimmz`V!5co%hak^ ztfK6dh!kZ;CWgs=x*i3=9E|2ybleK#H4or6@^?vaFp>B1^5mC4#<`fTbOtQd>7k{X z6kc>|4^KPT-l^3zg~)A3G_SJ$?ziwlx!bqUJh0f%rI>E=jLn~Lu)>nom+0Zpyfd;k zFMAttBmQ*n6qyRgzT0^gj>|cZ|Bkf(&gQNib+af_Bk0VgPZU8@FOK-WVRT|TCA=f> zx-E=3^8tzG6DDyS>Ez+~e#8Q(RD@tGe#UZ#wgAR>@XEHSUM& z&!iDOU#4yE&%um+kPqh^UTObvPTXJi+dILwR9`6FMufq4ul_%Dy>(PnYx_PfC7^_W zbT@*4bhi>xDoA%D-3=lw%^)2rQqmwb3?<#&Fx0>R14DOx_xb(KXRY`3oOiAL2eX*H z_dKzmeLvTA-Pc`pL5*a|K_`?n{q5~T1IwgD`2`@i#hZVS?!gkMD7OWhhh2XAOHhXf z&-O?Fq$7&+TJ8b>@ZX|v45VKgT6m_AlS_@~rD1jyBdyJ3(HkTf;iy6`H9nLaa6BZm zaYgCqeDiU67rm)+z7hbmL<|eTj zb4D*iY1BQS4OqO~1dIqCL=AaBLeG@U`hv-7bW_ObukB>X|_5;wGZ97z$(< zZk=_!Zu>%ZI&Ce7c&{PJV~+w&OPzVZB9XG4h#5`E%@x zMf-8ehzG&KVcv?bbI?yYO==aZKSJZ(IIIJGFuA;zLi5RIMj$tEb{=!bve9She~>|Gm*~ar|`M!n&@8nlBl@`%-#n`J9jpi_85Mu;4F0sBl4Ob zgZg`VJmOkK%`f}rX?l_&jd`ySWmFpX&c+=`+j(L&k)S{~w zOnS06qkZ%Ml!J4bwk#kh`NrX`Aq znrFSafbsB*dLKi*daYL^r|)@8D64#+1oQdH$~T+Xh!>goTv7BW-;SNAI@r&Tw6WF- zSn8B2=*qGc-;P;bPF2t(Q#wJ$_QEgj{PxZ25AMq05fhp;0WgC4$EK_*&l+HBkCzlZ z1c#T_hqsP52R-2P0T-*nS%tAi4C1p{=TaXgmA%{Q8{gU!T0_wtgGXwb0P!#*0JghG znBDN4wKc97Rv|;J-R`ddSSmi~Do_9MCk6|4-(cr*Fn3Oahw^G;B2n~6Nj3?;sA3|j&U`Bzft>V;Bl@GDFWC+-$*w5;~3%vst4DP?Unj|>BD!Iu}d0e17;4}!T~8m9D( zKYG<@O|&u+E*Wd`1TxQsm+F@(fX%XJ*GY`zc!{;sv$oiwAw#$* zrZ?>@_Q5Ryd|+h%BHw*~Y)SRmD(xo^yO~BQbhNXjk-Zz81v351KO#tJRXSc8cp7o+EXfx)5)$dG~8XXZsuhW6OSNHD8FQO}s1N4)rWsJYSHy#2&xMYA5Jx zs!dOKY$lZ{oM&2jtg8Ll4Yl+|V@eiTO)R!TuC|ZeYoZU6CGnolM9rgBMxsZCMm?^a zNltaCh*h2@2K;Q+*aW>qf6}K<-8UnJ3gste9!`8U!rOiK4(aIXLvBg0VmR~V&a!$Q zr!uF9I!JuDk1L7C3Boc_z?||U)nvz$rVRqHHTmkxE#*T<1MxvB;pE0f*rA}gP1FqbmG_IMut%%u6 z?nCocWUO2`UWeX^hULLZd%hHG{^d-+;2)~L4|phn1EA;ws)Izb!L=%Lrtd?Qc=N`s zS+=+~5q>g>AKgOv+5=uMwozF(<$T^iD`t%`U(agVUREm93HQ;ss_=)DXE3JjTLE>Gq$d^ZM}0 z7cX}|hjQucL;JsUENvn-CcW$yFn62qv4kUow9L@GF}oeSEK*GpTryy5&z(zYyt;kj z&d-t@cujIq;u5|ieyi?}^!K6O&ok_|+|r!2Tp7%p@HIc?YG^Afv9`u=`Oe`&V}<%7 zICbDn?7g#_2$y!8tG|(d&(%&BJRFueK>uQ*Q4*<3w8fJ$Wfw*Q$fhz_3Rh9@Yspq;{Lj0}{{D(AJI4MwiQ$!+6UD`wCX}PJS!}A zHw2k{e+>Vb1$r{bA1=1+GVsbLSwjv-2e2I&bL3m=ugiWJmDdduw9fVr^!|M(Yvw!F zmD;~ozl|*!2EZU1Z(Yb;l25(Ml6(7PEXa9 z*Hlai%{S=_Z6ch`@yN3LkU=BnEJ!x5Pf37P$dqvuoLTrZQVhba(=e)f&hoZ#r=J## z+YjWjtrjfjx*zqG^L@;0c47Ad-r}xvmf9bm!v|_-f0feDOY;UU2jB~TQlrrj1d)dw z<2ZVB`f7}kG$N3GqhmbpHce839e)q;6W+!mgucmrdowI?Z7{TXQ~LbP>x6x=AeTb> zu7ZhOoZfCDEtu{lhL0<<5w1Bp(<^bl7@^y7tw@R^?TK9MBG7VW@Yp3Q;_RWG*CmDG z2jJCmL4uNbRQFR068-sT#Vntcr-CNF{ticv^Us?pK*Oyp3>JE+R7asH^<3w1@qnaX zuwrCmiEvP*J=*#%t{J{&GGel^=3os?4t4kpWI<%pC4cO~;iDE$r(3Arv=hl{P3SDq zFCk3$F-~x{onS*p?RQ`b<0aa|T}0sIB-}C1e@kh8i2M(^(K0&v#ojQ=Z)L9L$-U32 z?*`u5CBcCNlomjUJAkzvGFw>eZ=$xy`!;YLMB6y`^FmAN0cDiS2+PhPW%lxZ1dV6f zIvJJaX1yq4z+)UnbrWcP#~3f(&*@~@lAs>CXVOd&qMapW7FweqiITW*5bNWUxR~e+ zimt?q(HLf~Y`tFEr^Z|jcXBVprA3bWkCUbJ2~TX}brwu5wtn{0tZGRnP5r8Y@*{^; zx+?H3(pddgf5-G!16dv{%Xh@@7Y5^^%au4wIi_GSi{ox(kv>;dDcw(GGJ%__xehm! zBgsh;t*snd=a5NpwdV?J3cP*j1JSkThcA`TzyHA_y0aS>_aFi5xWDtT=Qk~0wq(rP z%ieMG~A-OlRX{t(ISH98cW7Sm-=ESbKWI zR!`H@{7Qr?KGxOcYVi<)1RuS1Xdc-)&QTC4sF4d_1f{LtZJ3@k{U-NzGzi+8pHeOE zjEL^`=HcT8H=y3gPK+I%o}X041BMvWNFYOzb->Q{j~91a&gYLuNf{rEEnAv6K&+sv znP0a>;7R%Px2Ht`Yn^j6?fsiR@yODPg@rzKRqee>YJK zLz^F(^)Y}|*7^F;g{TK-mQptHiu*!B)E-;rV1?jh{5W6wKe~xAVY}X2b%h`h6mhu2 zUQ@8ErG48%?%CF5M)7mRY%<{8(a;9L%B;xZ;i6C;Oe{YAi~sebR-7siEL;kTka zQ}GT;3h|c{Q_&n8)Q!gB@inw(9^+NEqW@^($B*}_21|QNa7wY~#_N4YKjWr_VoI`F z=A*{P_>GM_S^{|`rV4Xa)F%KN1ZaP_UB9CxLWAfsl6*n8zr^hYZu4(5PlcAZFVx!l zT_0Z&CubB5mj6meb|jTU%S-*Lt3B(lSnQ(n|9p(L8Qy@z^VyeY`;Njr@YVwtKyykd zn+qxhskXW;hEh(J9eVXUb^3ExOe2M$;XE<+8$p{i$pyvMWPbpy5a+3d`~pO3-_Wy< z2pq%z@sR%A%w-GoHBsDT8zRbFDZWAGrF>rMUC$>h4EZ>Qe6}ck(g5*9p;qAZ=fMA+ z1JQY=%eCzNic98D{3if(t!T#>A(BJ13wtnlpS%Zn)(t<873e&6^21<5RiDu0KSJ ze@hsHB?y95ybsi13nNs7PTg{IIapt7`~JPLk+N;@&cHOV>EcK$(PcrkQ42!{)25^d z{sgDvAK1a)h@(H~$(!HVpE>qlws4>&k!YnuQhNUV+OvjF-Xu|974H~x!ZO1sP}DJM z^Z%6j{eP|AeTEfEB^(p6S4wiEn%95Tf%^P^+>-fQQSN;cLI9$Ju_ z_tobUKv;BYkBFybg8vjF5kEHWvXY2?!B*p5|lzhR&$c(xsw`3KO)k<@lj81^nNeVbDzrP z@P6ktgXNFm>uG)l?HNup*9KU|cq%%QD7K?tWpu6E>l_wBwGCYiv~xkA^`CO~fF9l` z>Zc27i+#PkF`t{2Y_;Dj10Al@&n{hzMI;<>yK5aSHMKf>DCE`W=x7dW`&8KLUAwgG zA-|-JgE{6dJ^FtS{D$kk9zmD2~!@@3q(rAM< z#|RNiWG~P9f^L-q0U;32P6mg*v^&1|f%N5oG3~=X&eF*utFaV@XWhL%EPJYpf-!9& z=x*pbJVPTRsY1(CjICEwXrETCZNb`nm+QIr3}s^?PlQBAAhC}q`(s9|UzenC=2upZ zdc277S;xKX*bjnBv)OC1Ni}b10f|ZVC2(!yfDJ6`3YsO$rSRCehM?P1fMCS0NM@m1 zHUxWsfMAtymI`)K8%Rtr^t@XwKI}1Rzj~lQ-xHdxAY@ll7P4k`10eXL9foCCU-bh7$I0q6s<9gst9Bt?ncz zfs8o%9h>&zN2S~D(_!eRL-orkxl69m_6uOu&o$B1*nVhCr*#XCUm|F(${2s7+f!-3 zd-uH6Z)@ggH|YNH5%k5L)zc82nUYkFpsRt7--%w?dc)VhOgnrpKTM}qqcM&EIcW)N zdqvjUxH0TsztR~S`Q3V4wr`~N9ZaaFUejEBftiK+0J#{vtLyQJ%*q)bJDui#z1_(h zJf#%subnaAj3(tyTE1IVckOM*4EeR$J2)ZqfleuFs+Jon2*X<(+_f zm2V5iP}SSbOegNzY80AM>|m?=*cu$$?fpR%(!r7$Sb9_YrU{HXf&*(H>X@&)53z6XmhAKp2> zQJ81NbF&J1CIr19diGLbNO1VY0f*^7qm~PKI_bbCJyFl%m7`HvQ~WhVh~(aOd)3CY zIcEUuUn{G&u}A*XV4IDP_SMuX9M5go)Wz?Fv1|f>W{wT&GdiDo8+| zLg+&lji8A=)8y%nIgEND&C4^&c9e>G#C2lMYx<2+$iqusmo-+`?fleUtC-ol>*B&6 z9P(uqEl2EqE_OXG9B+-derLTK>N{+0xktHt>ce*5ZkgJ@u70N+PE*eiBwcWH|g>N0$fP-rCa}2x>yLiuTtJHEeHd>_>I)ZY1 zkNzI9He;@ zJKl&Q5WLU-`@r@Hu*fE8sENGFd3ac`w0wVeo^ZNK%`Je&ju5s=5kGH*!*cI$BJBKJ z4n6;Z04;!w@5J|ZGyQ;_kp*V;*IfDeUyh6+5jdU}hBFa%*;_SuU?mD3FrvK4f?dAm zm=e}_J)A`3zQ8(;H6bZ~OKC=eYE64UZVSL`__tRwtNcEj>$hK(XQeT*Kdjozya^T9 z3gFTBn9ZcuGVw}3n&+`;$JMDLEb}~jgs#fm`g4uW2kl(tt4WvbeA|t4%FL0C>JEmU zd?GYY_XDW&&W(w?R%PIyT;N{;-y8H~yBB~dheSWOb&$+Y!W3zU2LIA0&wd?4)E9Z5 zZcyv1NEK@Dui#Pxp8;{pyj3};Qag4%K?~V{O%Mkoym<+x@gIL zi9X$P$e~QZfhHZoN;k>Zg!#Ok&yJ&1N2)mzoC3J!5@k^Ld^1dPJ2PsiTu1MGu~-$| zbB-T7x7L{zp4zr$#_62XjvB|c>7C1m#pYMOm2)rR|70BL&FDVL|K%@-nC+v^*{pwT zZh%Ocj*;E^dAc*y0$c?X3r%5)P`kB|?|=vpz#p(g8PZ_Q_^nGONZlUB9}Vj}^?5$g zjx#9l@cn=+4H#)Y?@zbRdG=SLchS=Eh!i)5BAkB<&^c>5Hk|3D2KHH|Dv`!~a+

O>8cQVcUMQ9JrKWCJo^m1g566!m)?NCo88OrFRu3u(h zG^PmK-lyAdtHGM+sajbGo2k%etv8DmjfXL4Fkkv#Br0qGdR-67kTKB-J$^g(peuwi z46sa3LN59C{-v#i1|l3391U?3>KS{FPG^j{2eh7dWNgSEVMTf)NQUyU7)NPi0*t52 zbTjG7iaJt_2a^!ND6_RQIY;Jof#JI7%a=$W%Vv>I$b-(N2MFjTj`I+I4LeCWUjDta zMW$V;mn&PUF1s+6;`H1znO$t|fzR$nR%#-&zN0d;(#Q|Ci$8b@MrL{_&J2WHhiZ4T zPTwRfOIrm9C=9o2{zVpoHV!)ClXJ~fz3|3~yy_uL8Sq-_^Y}cZ3+2iecxA#r#%osu zi;YpS;uVbhjyRPg#Xl7^@=}W#aN!~^4HW6)-gfwOLlk~Rr*f&2C+-I|xI}aWeSzm* z=a%Z$&c~LzUhxRc?=01G3u;}*0?PYIYWP%vs{Z9v2)iX1rKKD{B(Mm zCO{L~)@{Blc8@Bu?+5QQO3P3qRQq1A!LTB)$Eudb)_OM;LTA+#_xv3VyzV2+qo;fh z(=4whWfsc;P4Gsq(Lc<-y|>A&LCGLhMZsXkMB{}Af~PDaGm0nOmZ~}6C@N@e>(}`Y zNkwKaMIa^Q+u~<}y}8*j1L{Ka<)G!}^7U^t)9w>jhF&)YzGp~A>l}|1|BH6v`tWq& zF%j48`KU}nb4E8%i3Ohja}(i5fr@=6tEMp)MwRYzM9|FsVV^1* z*xF^4PoPdrjTpqQCt>##cQ4}DwSNjbn$%G5Z_V-kolQS9rj{KJ!PbDNi(gta?zdc5 zt$T_I_4h3@jWbnxEqT=A05%7Ufrt?cVoz*V)4WU}uN=zsKq|zKR=>MT*G+Qk*O`Li zXB;j$bsB3@u&7xGhnQF}0d`%I+7$iUb$KJl4(=SUArJQJN!OOlkKMqRfc`R7LtT`|b3#V>4uzx`||MTWqwiU3S5lD_h zDU%ijf0;535Po#?Y?`u_|L7HoRn4gt_a!Ii5FMVZP^-E-T-u$=$AvFsS+*Z z%W}nZ^@nc}cnrR9?m+r=sjJ!8G*Gfj248#{7!Y zb??k5)GZi~{bcK+JlWS9)-Uz!nNkN2$z2;{qH3SZShrJ9$)pUrcy@>mGGQqIH5RJ) z|A9cvHWMh0mhdKhspi>sT~j>D9>3z!TDjUS)?gj*8kU$*9oiIGP<7VgSEy0?q$Fq< zfueXoS<%8?5$8J>JKwEE1G@SbJ28BPGFfw*UBU?8#aVnRQ+c8+^Ja=wgS~H0c26-WeZk)?A5jfMdv)ujB0KjyaWn5WpT~Uq^@Wp+u zAu^?uzg4c}S)?5`t+bzWos44K!*(4IbnY~!)zzvn*vzL7MsJbpQFA>RQ)u+7CZ@)4 zgi%}OyCNl5j0D@+Abt-Sc;5`Gg-xYxx2chA_Vs{IyLF5b23@pIf$ZBR@xGJiL;paj z&X~}@lj-_guX!sp%Dc0r_=CRwaDA<(vHe~k`=x#B?ZZC6>42r8MRY!qzC72lZpMh$ zV(Uq|pykg}z1n_iTLJ4csu)>T&vvWEKrt#QPRrtCkT)nMaS&f>9VcDfr&^`G)^z=0 zs?%&G+Qtu%nrrB&6WU(F&2V&Ns zsY-V*PAcA?D2@m4=OUEojgr0Bn!8zdZD{z(1g6we%w0>>jaYV-UcKA1TYDx62YY0} zt*CscS|9xdKTKlfZFG^H8gl%#FY~2q9=rz96B`MIU~n2j+n^RQ)OLGPGm@gr1sN^VulO2+wZBi|j%DAo zCG0iM-AQ2UGO^zQ`6q}IEJ2Cln%wWas&kZ$XHXpZR#b3&jQ)_ms)?e>HNLyoGr&H% z+hYlMQ3*~vou^KyiOeNBsll~+o-JoN8qQXZ5(s~i8-GQJAmWdMCgHd#>~mCrA2kKX z-`?+LWBR{;b=IQ}RW@R0#%}gXU^hXl;$ZM3B{uX}@+g}%Y_cPLWk@^_q^&&z2A>&K zmT`DKdGa#BC|^!-|1x)ZQN?w6D1e(gK^nDnE}+q2b8zsyc?rMOZ#XOQ+@15_-d(J0 zT}{}i=1cug!jF}~5+(H?A_cocf7sZ$H}U38XGzJcP>%cx&o!6uF1IqQfNIRg4b#vc zA0(mWm`J5NBDVSVDE;h6OW6F+x`GDow^KeSlW_8yD^J@)XGb6gu|?%6S&QPAE4SyC z;o;lBR)sddxjX=%{=Kp}$K9)EuQ>EOevy`#bd%VSE$_T9iAlhW@y4CopCv#vbQq(f zuYGbY4#Xt3B&z{sQ$dj?vZMY|7e+XPJEq#XtC&A;WlNhLZ-zOvS8nK*XqCb4FlkxA=q)qYU*~XhcJgwZiQ*M`0HlcEW@IING@6+qC_K1izsKr&KJs;*#^e zqzQx(Yy);FI8?%w?Cv)PxQX3RsHc>zzXJVGc#Hp~>*Yu^cg9{}rS(bVtwLWU0b@z% z)0bqj(N$VhsCe|*=g#W62 z^m;bV;Kd{VpV6xo-^WP?X><2IXb<}EB`tV!7;h+7_d@s=E>JM3m`22}f1$hk(-W^z z1AhCK$|+lcD+m}pagCBMzF(}llcU$A={hZCE=_jSstTmrJBW_9M7f})#)8Qi$; zX~liTR?jO#c-r}(Z|eo4qm>gvUoPi@RvidOx5c$fb&R@}QtUYc0^Dr*v$$9n#i6|ub)t-}xbUb7z3NzVg4H5Q<>vW^gad9^JfVi` zSn+J=Z2hzX{$%UUsZ6K6fkF=8zR0*k;ty;WfVU+8efWg=MwajuEeOV?dGLC&val!x zE&ar~ZGfkg(d-Yi^RpI3h^L@l#&9-PF4r$a;8c+r{qAwxT+6^0?^q7HZ_YZ0yIFu* zEM8zwO*+OKHN(Cs&?a_0CQ%*(sVlx&kk(NHpG&4+ZIB+F-(NTNy{0KdB~L`nwIy+f zeEm4ub;!B|r&^cAx=+dncae7gG~Lf`@=Q57A=$xJU^zcPrEz4zk_tjLlKy%Zt3)2e ztH)~l@;3{vPb-kcdXnEg{&WA)Ej`6*Bx8IsP+?-p9i7|l7pkE5;i{Sy{OdR=im1_U zc3g8akNj-B=E3zd`Pm@LU_hr0GltES zw;T~KPsQ6wMdyR&%Q}tF7|4J3a*nS|c|v-oP%B?H&t2}cyTAPQh(m&7Y;@h8I75wd z<=5$6V+a`o&atc9ls-FeZej$hy5P6ndEtUjm7cpicbj5Ph-ve>8eIuk_QKVcT-bpbeqYNs?W;7|N6l(=ak~d zzyM6ePin%(J!@7g)Tzzg89uFRzhXh#6F~|30-$U48mrZOF;1b#CY znwKeX5EyQ7ZbGz>@dY9LwsM|kp`Lznxp9?>U}#jA@xht^>TjR9;C+gb-THX#CsWHo zo@ZK@s=8k_^?2boa;Qww|8Z0{5lH`Vu*U%NXsH^MT*OViv6ox8(|gjb1G*iYxF3IM z3sy~e7o6ttm?MiZ`eK?hbL#O=yO{UKW~ztRU_9SA7Hf^5y6GYkvm$&*!q!2G>@Op) zrBe#uY$V~OOHyhoD`KWB^|uwqrlb)nS#WVdDJ#jXR?&;jhLvyKB(`KB>tRzg?v;wY zg4;QMnq=XFqIRK5LC2@syhtzBKA_B*`)-_K4{03!mF*ZL-QX*B2ML!Rn*tS&UisaC zu}bevs4{orVwM4}gp_nR9yN=3HvJkoNyNJLq1aBDPh(b*v*I}hBll*(JmD++ya5_hP5>9Pq$PLN+R;} zyONUTRq({O=o(L|2Q0X8*GIHzu#D?-tm`GD_C0KQrcG1ReLlHC0JN1`g`M)dYR_;s zEDA{U=AtMzVPsnLT!PyGen?IO?^BIeTZY{JnCMGM(!0n8@K#>r+QMffm~4Sy`Ehqh z?P9LK_$v%sGi@o_~WY|e(M&j_bLpRWTZ zCl;HuX+gTwH2NB(zx7^O@DcatXQVkytJhd$vsi>+De&y8pZJ9e8&sME`^bH2?xMe2 zJUu)!Ogt;IGgG+%5hF-!AENvahwLl)(BqA~c&U^bRCzsyn)~RCCz8v`D-70P zg>zC<7cC|12chVSAOGVpsb^Rbw!1CFDYHK@-Y`FJ40;TAe0hkARz(ptEz=>cq4fFw zLlUPqC&)dUPrUIgEO>%-`bG$+9C9SVT3Xx7bT*vWQiwfF0(;tSeOsU_FtW+tC3x(#dH??CrSP!MqPqg04 zysCQSUt~+%3jK88Rq6q_m)oh5xX;SUsFpU@8=HPTx|U<{*lR1!6BH_033{1|6?)Gy zXud3U5qKlM-}1!=^dEf=^uGxy%Y!K!Vuc}Fz3iC0DG>p?DG1S9|Cv&74U*1Qt5!Os zW#?zkLI<9dfu2=?vXW`lV48pi9<@)yp={=XQyC2wITQS0Slw&s@eU}?DDsfS$s_7;@!oO!GS}e^3cvIw5}yz&XGO2%xcr*CyVgn8y= z-%tnLV7ty27iQenRkYsuUT!W_Shf-{!YGzdOLh37&6`S@PIm&O0>CkE@!gXi=`jgk z0}fKIQ(v@yZgoS48KU$sqejaiyROehE0Gf;!g6ur4&9Zhg1;-vRvuIGK^==UyN+w_ zPcVJ9yGSjDM`|`Uw2e}XgVGCER~yIW>vu%gWB5D}CHg<1snRQWl!6A~_{+*+h2=8% zT_vL>2|*H<$r;=ePj)x0nmxh31w4WfSGLgv`6cuSh) zH)t}Smr z6-5ZzCv#LZs6Yeu4V5M=%+8m^`a*>m-RhK}#HpI*ORiCmRv1oswH1pADkcimK@0q7 z!oSN7MfN5&V7clNoa^1U!?Th6LXmIm6Q|^7h~g!8*vhoNDGd+~-Yql)O^zv)(Ak$S z_?s^MdfU?d6kWK5&R>?jr3znoKI8jT!suSA@#bHySXQznPR*x+0Y4DEwKUU-Qa8PM z@4i8=&Y^(|7KRGKLY*gxqT$#?T!NnTOhNk1uft#x)vlMXLFCQG_Yyxedeqd8giq%? zNc}fyhm*XPeR{U_@6GHBvv{GQmDkK{9cdx#TOf}L=Uqz2NvHRA`%%NisHQ8!T4s(i zl;dw)Em*bP9QlpVtfKj!V@m5ZHhrCYw^TlOXoDDd5c{IneoC)icLKAU4UfIwqqI!V zG9zF*d%xX*`GyL5nF2;GCHGe_LLOH9*8&eLHf{6|n%|O+IW!6=9mYBzBqu*LY!ZLn za=od)K84qb@&4no-S2h+QD6mM(AA2#zBTNZkXAXZXD%?BsVQ=-abI3 zB08b16cgjXODWssZy^TG?P25JLVO(sF3EX)0S`>0PpNphHs1vh0eC-!Uy%i7YLSBr znj)~jv;yV%ET%rce=lL=()B(=vn&j@CF=T%V{GfAE!fGsw$cMKzeO9h@PfptS0br@ zuXaT8Xr9t3tB!(oFt{bn9aS$))Mgga+J>RZiW=xcT!%BldsXI+KB(>g<9cxm1r;c}L z;1C${N5CkJdWZhioZ$=0vlbqDtg2)8_$>xvZxAx4$V`~6G2_5~&Cu)T3-y$$4B^2F zy1u#ZVXgfh+Qy7hYMETNwzllA-BdsQ@^ing*aWM4e)9$0qE|1_AB>x=*q7WVse!QyzcV0iAMntYrhT9Q+tpn*G z=B^gpLbWv_3cf#5s_s{95U4hm^1iZjM|^U2uw2UnFEoHUlX-^SgH(y%A3R4cE76= zIU!%dW$+j5()>#ozLATGV#QE$W6+`PVH)W_Js6m9xhb0KTs4i;PQtSH#lI++z^xb?_7`#1sV}~$EiwRF-&{A zv#XMd{s0gQxlBAM8P*uLR$_KRBKoY@f@IUt&(<`T#(IN}E4R|@cujk$v-6LQnl{Ow z5?ih??GCHzAkycj@@amCkBuDZl*L+{PJ-_$bG-m}jE-sedZ3-57vOYAYI_l+Ttn;o ztHs3b4q^xK6XqcgL1OWibcWOjY`~mzJQ7dEeFdc7isNut_sGhgqNj@jy{o zRlN^e=a-~LCXg9L$Qg3MiChc|H^L_So4$RSVN-W#XvL*N?ciwXvUk)2(-zsTV;}fU zA3?t88*iVWcOzbPET1~AEU}DZFyOZyxaT<`5BrP3^0z?A&#_M1eFVkP8#1m*{ruIr zeaLlO)=85KdpStp*&>H4g0sFiMO9yAOL)5Nd}~Sh;R!9>e)Dw>0dfnzib3BWp;f3*3L=c|P5^kF;IYXP5Z{b34vqfDM$_!H=pC5_WC^iVM)sy5_TnUMU( z@T+ydT8ymm2|k!QJd1Hj)FX+|U-#{!?z@8UiI8B~xObrVKUQr|57fx4+OZmeQDGSuaxS-BHjz2!C=RtCrj^W`yVb$#&`>Gg_#CKWBI0ynb4K*C$qX*u2*D zvNWI_gqQOC&jm>cC9fi;|EDpYK&Mb>94FGv\gLy?R)^u^2iOHI7aI1+}(3;uI< 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 GasLm}^;Zf2 -- Gitee