From 9ebd9bfcce8735737550b54bd9e53e1f55ac4014 Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Fri, 1 Aug 2025 10:51:01 +0800 Subject: [PATCH] add EncryptionDecryption Signed-off-by: wangweiyuan --- .../.gitignore | 12 + .../AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../README.md | 83 +++++++ .../build-profile.json5 | 57 +++++ .../code-linter.json5 | 35 +++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 58 +++++ .../entry/hvigorfile.ts | 21 ++ .../entry/oh-package.json5 | 26 ++ .../entry/src/main/cpp/CMakeLists.txt | 15 ++ .../entry/src/main/cpp/napi_init.cpp | 46 ++++ .../src/main/cpp/types/libentry/index.d.ts | 16 ++ .../main/cpp/types/libentry/oh-package.json5 | 21 ++ .../3des_ecb_encryption_decryption.cpp | 79 ++++++ .../entry/src/main/cpp/types/project/file.h | 23 ++ .../main/ets/entryability/EntryAbility.ets | 57 +++++ .../entrybackupability/EntryBackupAbility.ets | 27 +++ .../pages/3des_ecb_encryption_decryption.ets | 36 +++ ...ecb_encryption_decryption_asynchronous.ets | 84 +++++++ ..._ecb_encryption_decryption_synchronous.ets | 84 +++++++ .../entry/src/main/ets/pages/Index.ets | 55 +++++ .../entry/src/main/module.json5 | 66 ++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 40 ++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 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 | 8 + .../main/resources/dark/element/color.json | 8 + .../entry/src/mock/mock-config.json5 | 17 ++ .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++ .../EncryptionDecryptionGuidance3DES.test.ets | 98 ++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 ++ .../entry/src/ohosTest/module.json5 | 27 +++ .../entry/src/test/List.test.ets | 20 ++ .../entry/src/test/LocalUnit.test.ets | 48 ++++ .../hvigor/hvigor-config.json5 | 37 +++ .../hvigorfile.ts | 21 ++ .../oh-package.json5 | 25 ++ .../ohosTest.md | 10 + .../EncryptionDecryptionGuidance3DES1.png | Bin 0 -> 66934 bytes .../EncryptionDecryptionGuidance3DES2.png | Bin 0 -> 21022 bytes .../.gitignore | 12 + .../AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../EncryptionDecryptionGuidanceAes/README.md | 87 +++++++ .../build-profile.json5 | 57 +++++ .../code-linter.json5 | 35 +++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 58 +++++ .../entry/hvigorfile.ts | 21 ++ .../entry/oh-package.json5 | 26 ++ .../entry/src/main/cpp/CMakeLists.txt | 15 ++ .../entry/src/main/cpp/napi_init.cpp | 78 ++++++ .../src/main/cpp/types/libentry/Index.d.ts | 24 ++ .../main/cpp/types/libentry/oh-package.json5 | 21 ++ .../project/aes_cbc_encryption_decryption.cpp | 93 ++++++++ .../project/aes_ccm_encryption_decryption.cpp | 117 +++++++++ .../project/aes_ecb_encryption_decryption.cpp | 87 +++++++ .../project/aes_gcm_encryption_decryption.cpp | 118 +++++++++ .../aes_gcm_segment_encryption_decryption.cpp | 146 ++++++++++++ .../entry/src/main/cpp/types/project/file.h | 26 ++ .../main/ets/entryability/EntryAbility.ets | 57 +++++ .../entrybackupability/EntryBackupAbility.ets | 27 +++ .../entry/src/main/ets/pages/Index.ets | 62 +++++ .../entry/src/main/module.json5 | 66 ++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 36 +++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 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 + .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++ .../EncryptionDecryptionGuidanceAes.test.ets | 114 +++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 ++ .../entry/src/ohosTest/module.json5 | 27 +++ .../entry/src/test/List.test.ets | 20 ++ .../entry/src/test/LocalUnit.test.ets | 48 ++++ .../hvigor/hvigor-config.json5 | 37 +++ .../hvigorfile.ts | 21 ++ .../oh-package.json5 | 25 ++ .../ohosTest.md | 12 + .../EncryptionDecryptionGuidanceAes1.png | Bin 0 -> 68268 bytes .../EncryptionDecryptionGuidanceAes2.png | Bin 0 -> 69603 bytes .../.gitignore | 12 + .../AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../README.md | 88 +++++++ .../build-profile.json5 | 57 +++++ .../code-linter.json5 | 35 +++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 43 ++++ .../entry/hvigorfile.ts | 21 ++ .../entry/oh-package.json5 | 25 ++ .../main/ets/entryability/EntryAbility.ets | 57 +++++ .../entrybackupability/EntryBackupAbility.ets | 27 +++ .../entry/src/main/ets/pages/Index.ets | 90 +++++++ ...cbc_encryption_decryption_asynchronous.ets | 103 ++++++++ ..._cbc_encryption_decryption_synchronous.ets | 103 ++++++++ ...ccm_encryption_decryption_asynchronous.ets | 105 ++++++++ ..._ccm_encryption_decryption_synchronous.ets | 105 ++++++++ ...ecb_encryption_decryption_asynchronous.ets | 86 +++++++ ..._ecb_encryption_decryption_synchronous.ets | 86 +++++++ ...gcm_encryption_decryption_asynchronous.ets | 117 +++++++++ ..._gcm_encryption_decryption_synchronous.ets | 117 +++++++++ ...seg_encryption_decryption_asynchronous.ets | 141 +++++++++++ ..._seg_encryption_decryption_synchronous.ets | 141 +++++++++++ .../entry/src/main/module.json5 | 66 ++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 96 ++++++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 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 | 15 ++ .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++ ...ryptionDecryptionGuidanceAesArkTs.test.ets | 224 ++++++++++++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 21 ++ .../entry/src/ohosTest/module.json5 | 27 +++ .../entry/src/test/List.test.ets | 20 ++ .../entry/src/test/LocalUnit.test.ets | 48 ++++ .../hvigor/hvigor-config.json5 | 37 +++ .../hvigorfile.ts | 21 ++ .../oh-package.json5 | 25 ++ .../ohosTest.md | 17 ++ .../EncryptionDecryptionGuidanceAesArkTs1.png | Bin 0 -> 169642 bytes .../EncryptionDecryptionGuidanceAesArkTs2.png | Bin 0 -> 30057 bytes .../.gitignore | 12 + .../AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../EncryptionDecryptionGuidanceRSA/README.md | 80 +++++++ .../build-profile.json5 | 57 +++++ .../code-linter.json5 | 35 +++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 43 ++++ .../entry/hvigorfile.ts | 21 ++ .../entry/oh-package.json5 | 25 ++ .../main/ets/entryability/EntryAbility.ets | 57 +++++ .../entrybackupability/EntryBackupAbility.ets | 27 +++ .../entry/src/main/ets/pages/Index.ets | 74 ++++++ .../ets/pages/rsa_pkcs1/RSAPKCS1Async.ets | 123 ++++++++++ .../main/ets/pages/rsa_pkcs1/RSAPKCS1Sync.ets | 123 ++++++++++ .../rsa_pkcs1_oaep/RSAPKCS1OAEPAsync.ets | 131 ++++++++++ .../pages/rsa_pkcs1_oaep/RSAPKCS1OAEPSync.ets | 126 ++++++++++ .../rsa_segmentation/RSASegmentationAsync.ets | 105 ++++++++ .../rsa_segmentation/RSASegmentationSync.ets | 105 ++++++++ .../entry/src/main/module.json5 | 66 ++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 64 +++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 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 | 11 + .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++ .../EncryptionDecryptionGuidanceRSA.test.ets | 152 ++++++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 ++ .../entry/src/ohosTest/module.json5 | 27 +++ .../entry/src/test/List.test.ets | 20 ++ .../entry/src/test/LocalUnit.test.ets | 48 ++++ .../hvigor/hvigor-config.json5 | 37 +++ .../hvigorfile.ts | 21 ++ .../oh-package.json5 | 25 ++ .../ohosTest.md | 13 + .../EncryptionDecryptionGuidanceRSA1.png | Bin 0 -> 88500 bytes .../EncryptionDecryptionGuidanceRSA2.png | Bin 0 -> 30018 bytes .../.gitignore | 12 + .../AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../EncryptionDecryptionGuidanceSM2/README.md | 75 ++++++ .../build-profile.json5 | 57 +++++ .../code-linter.json5 | 35 +++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 43 ++++ .../entry/hvigorfile.ts | 21 ++ .../entry/oh-package.json5 | 25 ++ .../main/ets/entryability/EntryAbility.ets | 57 +++++ .../entrybackupability/EntryBackupAbility.ets | 27 +++ .../entry/src/main/ets/pages/Index.ets | 64 +++++ .../ets/pages/sm2/CreateASN.1Ciphertext.ets | 53 +++++ .../main/ets/pages/sm2/ObtainCiphertext.ets | 52 ++++ .../sm2/SM2EncryptionDecryptionAsync.ets | 95 ++++++++ .../pages/sm2/SM2EncryptionDecryptionSync.ets | 95 ++++++++ .../entry/src/main/module.json5 | 66 ++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 48 ++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 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 | 9 + .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++ .../EncryptionDecryptionGuidanceSM2.test.ets | 116 +++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 ++ .../entry/src/ohosTest/module.json5 | 27 +++ .../entry/src/test/List.test.ets | 20 ++ .../entry/src/test/LocalUnit.test.ets | 48 ++++ .../hvigor/hvigor-config.json5 | 37 +++ .../hvigorfile.ts | 21 ++ .../oh-package.json5 | 25 ++ .../ohosTest.md | 11 + .../EncryptionDecryptionGuidanceSM21.png | Bin 0 -> 57613 bytes .../EncryptionDecryptionGuidanceSM22.png | Bin 0 -> 24771 bytes .../.gitignore | 12 + .../AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../EncryptionDecryptionGuidanceSM4/README.md | 85 +++++++ .../build-profile.json5 | 57 +++++ .../code-linter.json5 | 35 +++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 59 +++++ .../entry/hvigorfile.ts | 21 ++ .../entry/oh-package.json5 | 26 ++ .../entry/src/main/cpp/CMakeLists.txt | 15 ++ .../entry/src/main/cpp/napi_init.cpp | 70 ++++++ .../src/main/cpp/types/libentry/Index.d.ts | 22 ++ .../main/cpp/types/libentry/oh-package.json5 | 21 ++ .../entry/src/main/cpp/types/project/file.h | 21 ++ .../project/sm4_cbc_encryption_decryption.cpp | 97 ++++++++ .../project/sm4_ecb_encryption_decryption.cpp | 89 +++++++ .../project/sm4_gcm_encryption_decryption.cpp | 120 ++++++++++ .../sm4_gcm_seg_encryption_decryption.cpp | 144 +++++++++++ .../main/ets/entryability/EntryAbility.ets | 57 +++++ .../entrybackupability/EntryBackupAbility.ets | 27 +++ .../entry/src/main/ets/pages/Index.ets | 56 +++++ .../entry/src/main/module.json5 | 66 ++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 32 +++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 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 + .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++ .../EncryptionDecryptionGuidanceSM4.test.ets | 100 ++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 ++ .../entry/src/ohosTest/module.json5 | 27 +++ .../entry/src/test/List.test.ets | 20 ++ .../entry/src/test/LocalUnit.test.ets | 48 ++++ .../hvigor/hvigor-config.json5 | 37 +++ .../hvigorfile.ts | 21 ++ .../oh-package.json5 | 25 ++ .../ohosTest.md | 11 + .../EncryptionDecryptionGuidanceSM41.png | Bin 0 -> 59290 bytes .../EncryptionDecryptionGuidanceSM42.png | Bin 0 -> 57878 bytes .../.gitignore | 12 + .../AppScope/app.json5 | 25 ++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../README.md | 84 +++++++ .../build-profile.json5 | 57 +++++ .../code-linter.json5 | 35 +++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 43 ++++ .../entry/hvigorfile.ts | 21 ++ .../entry/oh-package.json5 | 25 ++ .../main/ets/entryability/EntryAbility.ets | 57 +++++ .../entrybackupability/EntryBackupAbility.ets | 27 +++ .../entry/src/main/ets/pages/Index.ets | 80 +++++++ ...cbc_encryption_decryption_asynchronous.ets | 103 ++++++++ ..._cbc_encryption_decryption_synchronous.ets | 103 ++++++++ ...ecb_encryption_decryption_asynchronous.ets | 82 +++++++ ..._ecb_encryption_decryption_synchronous.ets | 82 +++++++ ...gcm_encryption_decryption_asynchronous.ets | 117 +++++++++ ..._gcm_encryption_decryption_synchronous.ets | 117 +++++++++ ...seg_encryption_decryption_asynchronous.ets | 141 +++++++++++ ..._seg_encryption_decryption_synchronous.ets | 141 +++++++++++ .../entry/src/main/module.json5 | 66 ++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 80 +++++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 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 | 13 + .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++ ...yptionDecryptionGuidance3DESArkTs.test.ets | 188 +++++++++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 ++ .../entry/src/ohosTest/module.json5 | 27 +++ .../entry/src/test/List.test.ets | 20 ++ .../entry/src/test/LocalUnit.test.ets | 48 ++++ .../hvigor/hvigor-config.json5 | 37 +++ .../hvigorfile.ts | 21 ++ .../oh-package.json5 | 25 ++ .../ohosTest.md | 15 ++ .../EncryptionDecryptionGuidanceSM4ArkTs1.png | Bin 0 -> 138404 bytes .../EncryptionDecryptionGuidanceSM4ArkTs2.png | Bin 0 -> 32372 bytes 309 files changed, 12003 insertions(+) create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/README.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/code-linter.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/CMakeLists.txt create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/napi_init.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/libentry/index.d.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/project/3des_ecb_encryption_decryption.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/project/file.h create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption_asynchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption_synchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/mock/mock-config.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidance3DES.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/ohosTest.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/screenshots/EncryptionDecryptionGuidance3DES1.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/screenshots/EncryptionDecryptionGuidance3DES2.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/README.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/code-linter.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/CMakeLists.txt create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/napi_init.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/libentry/Index.d.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_cbc_encryption_decryption.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_ccm_encryption_decryption.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_ecb_encryption_decryption.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_gcm_encryption_decryption.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_gcm_segment_encryption_decryption.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/file.h create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceAes.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/ohosTest.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/screenshots/EncryptionDecryptionGuidanceAes1.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/screenshots/EncryptionDecryptionGuidanceAes2.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/README.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/code-linter.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_asynchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_synchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_asynchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_synchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_asynchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_synchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_asynchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_synchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_asynchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_synchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceAesArkTs.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/ohosTest.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/screenshots/EncryptionDecryptionGuidanceAesArkTs1.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/screenshots/EncryptionDecryptionGuidanceAesArkTs2.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/README.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/code-linter.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1/RSAPKCS1Async.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1/RSAPKCS1Sync.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1_oaep/RSAPKCS1OAEPAsync.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1_oaep/RSAPKCS1OAEPSync.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_segmentation/RSASegmentationAsync.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_segmentation/RSASegmentationSync.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceRSA.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/ohosTest.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/screenshots/EncryptionDecryptionGuidanceRSA1.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/screenshots/EncryptionDecryptionGuidanceRSA2.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/README.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/code-linter.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/CreateASN.1Ciphertext.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/ObtainCiphertext.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/SM2EncryptionDecryptionAsync.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/SM2EncryptionDecryptionSync.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceSM2.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/ohosTest.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/screenshots/EncryptionDecryptionGuidanceSM21.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/screenshots/EncryptionDecryptionGuidanceSM22.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/README.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/code-linter.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/CMakeLists.txt create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/napi_init.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/libentry/Index.d.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/file.h create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_cbc_encryption_decryption.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_ecb_encryption_decryption.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_gcm_encryption_decryption.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_gcm_seg_encryption_decryption.cpp create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceSM4.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/ohosTest.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/screenshots/EncryptionDecryptionGuidanceSM41.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/screenshots/EncryptionDecryptionGuidanceSM42.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/README.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/code-linter.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/.gitignore create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_asynchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_synchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_asynchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_synchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_asynchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_synchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_asynchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_synchronous.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidance3DESArkTs.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/hvigorfile.ts create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/oh-package.json5 create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/ohosTest.md create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/screenshots/EncryptionDecryptionGuidanceSM4ArkTs1.png create mode 100644 CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/screenshots/EncryptionDecryptionGuidanceSM4ArkTs2.png diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/.gitignore b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/.gitignore new file mode 100644 index 000000000..d2ff20141 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/.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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/AppScope/app.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/AppScope/app.json5 new file mode 100644 index 000000000..d62c80428 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/AppScope/app.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "app": { + "bundleName": "com.samples.encryptiondecryptionguidance3des", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/AppScope/resources/base/element/string.json new file mode 100644 index 000000000..c9880ec1f --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "EncryptionDecryptionGuidance3DES" + } + ] +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 GIT binary patch literal 2777 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/README.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/README.md new file mode 100644 index 000000000..4a626b76f --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/README.md @@ -0,0 +1,83 @@ +# 使用3DES对称密钥(ECB模式)加解密 + +### 介绍 + +本示例主要展示了使用3DES对称密钥(ECB模式)加解密(ArkTS)的同步异步方法和C/C++场景 。该工程中展示的代码详细描述可查如下链接。 + +- [使用3DES对称密钥(ECB模式)加解密(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-3des-sym-encrypt-decrypt-ecb.md) +- [使用3DES对称密钥(ECB模式)加解密(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-3des-sym-encrypt-decrypt-ecb-ndk.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例EncryptionDecryptionGuidance3DES.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── cpp + │ │ ├── types + │ │ | ├── libentry + │ │ | ├── index.d.ts + │ │ | ├── oh-package.json5 + │ │ | ├── project + │ │ | ├── 3des_ecb_encryption_decryption.cpp + │ │ | ├── file.h + │ │ ├── CMakeList.txt + │ │ ├── napi_init.cpp + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 使用3DES对称密钥(ECB模式)加解密示例代码 + │ │ ├── 3des_ecb_encryption_decryption.ets + │ │ ├── 3des_ecb_encryption_decryption_asynchronous.ets + │ │ ├── 3des_ecb_encryption_decryption_synchronous.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── EncryptionDecryptionGuidance3DES.test.ets // 自动化测试代码 + │ │ └── List.test.ets +``` + +### 相关权限 + +不涉及。 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/build-profile.json5 new file mode 100644 index 000000000..fb5a1ab65 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/build-profile.json5 @@ -0,0 +1,57 @@ +/* + * 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/code-linter.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/.gitignore b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/build-profile.json5 new file mode 100644 index 000000000..2d8b081b6 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/build-profile.json5 @@ -0,0 +1,58 @@ +/* + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + "externalNativeOptions": { + "path": "./src/main/cpp/CMakeLists.txt", + "arguments": "", + "cppFlags": "", + "abiFilters": [ + "arm64-v8a", + "x86_64" + ] + } + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + }, + "nativeLib": { + "debugSymbol": { + "strip": true, + "exclude": [] + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/hvigorfile.ts new file mode 100644 index 000000000..e4f43d546 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/oh-package.json5 new file mode 100644 index 000000000..118bdd4fe --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/oh-package.json5 @@ -0,0 +1,26 @@ +/* + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": { + "libentry.so": "file:./src/main/cpp/types/libentry" + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/CMakeLists.txt b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 000000000..05757dad0 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(EncryptionDecryptionGuidance3DESArkTs) + +set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + +if(DEFINED PACKAGE_FIND_FILE) + include(${PACKAGE_FIND_FILE}) +endif() + +include_directories(${NATIVERENDER_ROOT_PATH} + ${NATIVERENDER_ROOT_PATH}/include) + +add_library(entry SHARED napi_init.cpp types/project/3des_ecb_encryption_decryption.cpp) +target_link_libraries(entry PUBLIC libace_napi.z.so libohcrypto.so libhilog_ndk.z.so) \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/napi_init.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/napi_init.cpp new file mode 100644 index 000000000..075d3ed0a --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/napi_init.cpp @@ -0,0 +1,46 @@ +/* + * 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. + */ + +#include "napi/native_api.h" +#include "types/project/file.h" + +static napi_value NAPI_Global_doTest3DesEcb(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTest3DesEcb(), &ret); + return ret; +} + +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = { + {"doTest3DesEcb", nullptr, NAPI_Global_doTest3DesEcb, nullptr, nullptr, nullptr, napi_default, nullptr}}; + napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); + return exports; +} +EXTERN_C_END + +static napi_module demoModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_register_func = Init, + .nm_modname = "entry", + .nm_priv = ((void *)0), + .reserved = {0}, +}; + +extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); } diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/libentry/index.d.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/libentry/index.d.ts new file mode 100644 index 000000000..feacf528f --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/libentry/index.d.ts @@ -0,0 +1,16 @@ +/* + * 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. + */ + +export const doTest3DesEcb: () => number; \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/libentry/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 000000000..2826cc7d6 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/libentry/oh-package.json5 @@ -0,0 +1,21 @@ +/* + * 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. + */ + +{ + "name": "libentry.so", + "types": "./index.d.ts", + "version": "1.0.0", + "description": "Please describe the basic information." +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/project/3des_ecb_encryption_decryption.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/project/3des_ecb_encryption_decryption.cpp new file mode 100644 index 000000000..197ef6b1f --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/project/3des_ecb_encryption_decryption.cpp @@ -0,0 +1,79 @@ +/* + * 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. + */ + +// [Start crypt_decrypt_flow] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_cipher.h" +#include +#include "file.h" + +OH_Crypto_ErrCode doTest3DesEcb() +{ + OH_CryptoSymKeyGenerator *genCtx = nullptr; + OH_CryptoSymCipher *encCtx = nullptr; + OH_CryptoSymCipher *decCtx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + OH_CryptoSymCipherParams *params = nullptr; + char *plainText = const_cast("this is test!"); + Crypto_DataBlob input = {.data = (uint8_t *)(plainText), .len = strlen(plainText)}; + Crypto_DataBlob outUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob decUpdate = {.data = nullptr, .len = 0}; + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("3DES192", &genCtx); // 随机生成对称密钥 + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymKeyGenerator_Generate(genCtx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_Create(¶ms); // 创建参数 + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Create("3DES192|ECB|PKCS7", &encCtx); // 加密操作 + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(encCtx, CRYPTO_ENCRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(encCtx, &input, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Create("3DES192|ECB|PKCS7", &decCtx); // 解密操作 + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(decCtx, CRYPTO_DECRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(decCtx, &outUpdate, &decUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } +end: + OH_CryptoSymCipherParams_Destroy(params); + OH_CryptoSymCipher_Destroy(encCtx); + OH_CryptoSymCipher_Destroy(decCtx); + OH_CryptoSymKeyGenerator_Destroy(genCtx); + OH_CryptoSymKey_Destroy(keyCtx); + OH_Crypto_FreeDataBlob(&outUpdate); + OH_Crypto_FreeDataBlob(&decUpdate); + return ret; +} +// [End crypt_decrypt_flow] \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/project/file.h b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/project/file.h new file mode 100644 index 000000000..7e388d978 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/cpp/types/project/file.h @@ -0,0 +1,23 @@ +#ifndef FILE_H +#define FILE_H +/* + * 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. + */ + +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_cipher.h" + +OH_Crypto_ErrCode doTest3DesEcb(); + +#endif // FILE_H \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..edc2839f2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,57 @@ +/* + * 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 { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +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(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * 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'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption.ets new file mode 100644 index 000000000..9b26168d8 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption.ets @@ -0,0 +1,36 @@ +/* + * 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 testNapi from 'libentry.so'; + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance 3DES'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_3des_ecb')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.doTest3DesEcb(); + this.message = 'Call Success Result:' + ret.toString(); + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption_asynchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption_asynchronous.ets new file mode 100644 index 000000000..574aaf495 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption_asynchronous.ets @@ -0,0 +1,84 @@ +/* + * 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. + */ + +// [Start async_symmetry_encrypt_decrypt] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 加密消息 +async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('3DES192|ECB|PKCS7'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null); + let encryptData = await cipher.doFinal(plainText); + return encryptData; +} + +// 解密消息 +async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('3DES192|ECB|PKCS7'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null); + let decryptData = await decoder.doFinal(cipherText); + return decryptData; +} + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let symGenerator = cryptoFramework.createSymKeyGenerator('3DES192'); + let symKey = await symGenerator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function main() { + let keyData = + new Uint8Array([238, 249, 61, 55, 128, 220, 183, 224, 139, 253, 248, 239, 239, 41, 71, 25, 235, 206, 230, 162, 249, + 27, 234, 114]); + let symKey = await genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessagePromise(symKey, plainText); + let decryptText = await decryptMessagePromise(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End async_symmetry_encrypt_decrypt] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance 3DES ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_3des_ecb_asynchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = '3DES_ECBSuccess'; + } catch { + this.message = '3DES_ECBFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption_synchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption_synchronous.ets new file mode 100644 index 000000000..9e6078b4b --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/3des_ecb_encryption_decryption_synchronous.ets @@ -0,0 +1,84 @@ +/* + * 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. + */ + +// [Start sync_symmetry_encrypt_decrypt] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 加密消息 +function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('3DES192|ECB|PKCS7'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null); + let encryptData = cipher.doFinalSync(plainText); + return encryptData; +} + +// 解密消息 +function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('3DES192|ECB|PKCS7'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null); + let decryptData = decoder.doFinalSync(cipherText); + return decryptData; +} + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let symGenerator = cryptoFramework.createSymKeyGenerator('3DES192'); + let symKey = symGenerator.convertKeySync(symKeyBlob); + console.info('convertKeySync success'); + return symKey; +} + +function main() { + let keyData = + new Uint8Array([238, 249, 61, 55, 128, 220, 183, 224, 139, 253, 248, 239, 239, 41, 71, 25, 235, 206, 230, 162, 249, + 27, 234, 114]); + let symKey = genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessage(symKey, plainText); + let decryptText = decryptMessage(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End sync_symmetry_encrypt_decrypt] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance 3DES ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_3des_ecb_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = '3DES_ECBSuccess'; + } catch { + this.message = '3DES_ECBFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..27e9b60c2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,55 @@ +/* + * 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 { router } from '@kit.ArkUI'; + +@Entry +@Component +struct Index { + goToSample(url: string): void { + router.pushUrl({ + url: url, + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('pushUrl success'); + }) + } + + build() { + Column({ space: 5 }) { + Text('EncryptionDecryptionGuidance3DES').fontSize(20).fontWeight(FontWeight.Bolder) + Button($r('app.string.3des_ecb_encryption_decryption_asynchronous')) + .width('80%') + .onClick(() => { + this.goToSample('pages/3des_ecb_encryption_decryption_asynchronous') + }) + Button($r('app.string.3des_ecb_encryption_decryption_synchronous')) + .width('80%') + .onClick(() => { + this.goToSample('pages/3des_ecb_encryption_decryption_synchronous') + }) + Button($r('app.string.3des_ecb_encryption_decryption')) + .width('80%') + .onClick(() => { + this.goToSample('pages/3des_ecb_encryption_decryption') + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/module.json5 @@ -0,0 +1,66 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "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" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..29398d5c3 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/element/string.json @@ -0,0 +1,40 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "EncryptionDecryptionGuidance3DES" + }, + { + "name": "3des_ecb_encryption_decryption_asynchronous", + "value": "3des_ecb_encryption_decryption_asynchronous" + }, + { + "name": "3des_ecb_encryption_decryption_synchronous", + "value": "3des_ecb_encryption_decryption_synchronous" + }, + { + "name": "3des_ecb_encryption_decryption", + "value": "3des_ecb_encryption_decryption" + }, + { + "name": "call_3des_ecb", + "value": "Call 3DES_ECB" + }, + { + "name": "call_3des_ecb_asynchronous", + "value": "Call 3DES_ECB Asynchronous" + }, + { + "name": "call_3des_ecb_synchronous", + "value": "Call 3DES_ECB Synchronous" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..f8979dc61 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,8 @@ +{ + "src": [ + "pages/Index", + "pages/3des_ecb_encryption_decryption_asynchronous", + "pages/3des_ecb_encryption_decryption_synchronous", + "pages/3des_ecb_encryption_decryption" + ] +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/mock/mock-config.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/mock/mock-config.json5 new file mode 100644 index 000000000..b9a78e201 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/mock/mock-config.json5 @@ -0,0 +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. + */ + +{ +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidance3DES.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidance3DES.test.ets new file mode 100644 index 000000000..df2a2c7b5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidance3DES.test.ets @@ -0,0 +1,98 @@ +/* + * 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 { describe, it, expect, beforeAll } from '@ohos/hypium'; +// 导入测试依赖kit +import { abilityDelegatorRegistry, Driver, ON } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; +let want: Want; + +export default function encryptionDecryptionGuidance3DESTest() { + describe('encryptionDecryptionGuidance3DESTest', () => { + /** + * 打开应用 + */ + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * 点击按钮,使用3DES对称密钥(ECB模式)加解密(ArkTS),异步方法 + */ + it('testEncryptionDecryptionGuidance3DES001', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidance3DES001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('3des_ecb_encryption_decryption_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call 3DES_ECB Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('3DES_ECBSuccess')); + console.info('uitest: testEncryptionDecryptionGuidance3DES001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用3DES对称密钥(ECB模式)加解密(ArkTS),同步方法 + */ + it('testEncryptionDecryptionGuidance3DES002', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidance3DES002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('3des_ecb_encryption_decryption_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call 3DES_ECB Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('3DES_ECBSuccess')); + console.info('uitest: testEncryptionDecryptionGuidance3DES002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用3DES对称密钥(ECB模式)加解密(C/C++) + */ + it('testEncryptionDecryptionGuidance3DES003', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidance3DES003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('3des_ecb_encryption_decryption')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call 3DES_ECB')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Call Success Result:0')); + console.info('uitest: testEncryptionDecryptionGuidance3DES003 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..8cd00ecf4 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,22 @@ +/* + * 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 abilityTest from './Ability.test'; +import encryptionDecryptionGuidance3DESTest from './EncryptionDecryptionGuidance3DES.test'; + +export default function testsuite() { + abilityTest(); + encryptionDecryptionGuidance3DESTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..c3fd9dda3 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/test/List.test.ets new file mode 100644 index 000000000..f1186b1f5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * 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 localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/test/LocalUnit.test.ets new file mode 100644 index 000000000..7fc57c77d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/hvigorfile.ts new file mode 100644 index 000000000..2a5e543f1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/ohosTest.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/ohosTest.md new file mode 100644 index 000000000..c603d0ffe --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/ohosTest.md @@ -0,0 +1,10 @@ +# 使用3DES对称密钥(ECB模式)加解密测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ---------------------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,使用3DES对称密钥(ECB模式)加解密(ArkTS),异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用3DES对称密钥(ECB模式)加解密(ArkTS),同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用3DES对称密钥(ECB模式)加解密(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/screenshots/EncryptionDecryptionGuidance3DES1.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidance3DES/screenshots/EncryptionDecryptionGuidance3DES1.png new file mode 100644 index 0000000000000000000000000000000000000000..96bd7702c444c92c12bfb8061b31b50a00df20b0 GIT binary patch literal 66934 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/README.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/README.md new file mode 100644 index 000000000..12f3d0e21 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/README.md @@ -0,0 +1,87 @@ +# 使用AES对称密钥加解密(C/C++) + +### 介绍 + +本示例主要展示了使用AES对称密钥(C/C++)GCM模式、CCM模式、CBC模式、ECB模式以及GCM模式分段加解密场景 。该工程中展示的代码详细描述可查如下链接。 + +- [使用AES对称密钥(GCM模式)加解密(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-gcm-ndk.md) +- [使用AES对称密钥(CCM模式)加解密(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-ccm-ndk.md) +- [使用AES对称密钥(CBC模式)加解密(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-cbc-ndk.md) +- [使用AES对称密钥(ECB模式)加解密(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-ecb-ndk.md) +- [使用AES对称密钥(GCM模式)分段加解密(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-gcm-by-segment-ndk.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例EncryptionDecryptionGuidanceAes.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── cpp + │ │ ├── types + │ │ | ├── libentry + │ │ | ├── index.d.ts + │ │ | ├── oh-package.json5 + │ │ | ├── project + │ │ | ├── aes_cbc_encryption_decryption.cpp + │ │ | ├── aes_ccm_encryption_decryption.cpp + │ │ | ├── aes_ecb_encryption_decryption.cpp + │ │ | ├── aes_gcm_encryption_decryption.cpp + │ │ | ├── aes_gcm_segment_encryption_decryption.cpp + │ │ | ├── file.h + │ │ ├── CMakeList.txt + │ │ ├── napi_init.cpp + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 使用AES对称密钥加解密(C/C++)示例代码 + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── EncryptionDecryptionGuidanceAes.test.ets // 自动化测试代码 + │ │ └── List.test.ets +``` + +### 相关权限 + +不涉及。 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/build-profile.json5 new file mode 100644 index 000000000..fb5a1ab65 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/build-profile.json5 @@ -0,0 +1,57 @@ +/* + * 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/code-linter.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/.gitignore b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/build-profile.json5 new file mode 100644 index 000000000..2d8b081b6 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/build-profile.json5 @@ -0,0 +1,58 @@ +/* + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + "externalNativeOptions": { + "path": "./src/main/cpp/CMakeLists.txt", + "arguments": "", + "cppFlags": "", + "abiFilters": [ + "arm64-v8a", + "x86_64" + ] + } + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + }, + "nativeLib": { + "debugSymbol": { + "strip": true, + "exclude": [] + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/hvigorfile.ts new file mode 100644 index 000000000..e4f43d546 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/oh-package.json5 new file mode 100644 index 000000000..118bdd4fe --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/oh-package.json5 @@ -0,0 +1,26 @@ +/* + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": { + "libentry.so": "file:./src/main/cpp/types/libentry" + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/CMakeLists.txt b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 000000000..6123b8267 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(EncryptionDecryptionGuidanceAes) + +set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + +if(DEFINED PACKAGE_FIND_FILE) + include(${PACKAGE_FIND_FILE}) +endif() + +include_directories(${NATIVERENDER_ROOT_PATH} + ${NATIVERENDER_ROOT_PATH}/include) + +add_library(entry SHARED napi_init.cpp types/project/aes_gcm_encryption_decryption.cpp types/project/aes_ccm_encryption_decryption.cpp types/project/aes_cbc_encryption_decryption.cpp types/project/aes_ecb_encryption_decryption.cpp types/project/aes_gcm_segment_encryption_decryption.cpp) +target_link_libraries(entry PUBLIC libace_napi.z.so libohcrypto.so) \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/napi_init.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/napi_init.cpp new file mode 100644 index 000000000..835ac9677 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/napi_init.cpp @@ -0,0 +1,78 @@ +/* + * 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. + */ + +#include "napi/native_api.h" +#include "types/project/file.h" + +static napi_value NAPI_Global_doTestAesGcm(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestAesGcm(), &ret); + return ret; +} + +static napi_value NAPI_Global_doTestAesCcm(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestAesCcm(), &ret); + return ret; +} + +static napi_value NAPI_Global_doTestAesCbc(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestAesCbc(), &ret); + return ret; +} + +static napi_value NAPI_Global_doTestAesEcb(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestAesEcb(), &ret); + return ret; +} + +static napi_value NAPI_Global_testAesGcmSeg(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestAesGcmSeg(), &ret); + return ret; +} + +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = { + {"testAesGcm", nullptr, NAPI_Global_doTestAesGcm, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"testAesCcm", nullptr, NAPI_Global_doTestAesCcm, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"testAesCbc", nullptr, NAPI_Global_doTestAesCbc, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"testAesEcb", nullptr, NAPI_Global_doTestAesEcb, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"testAesGcmSeg", nullptr, NAPI_Global_testAesGcmSeg, nullptr, nullptr, nullptr, napi_default, nullptr}}; + napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); + return exports; +} +EXTERN_C_END + +static napi_module demoModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_register_func = Init, + .nm_modname = "entry", + .nm_priv = ((void *)0), + .reserved = {0}, +}; + +extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); } diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/libentry/Index.d.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/libentry/Index.d.ts new file mode 100644 index 000000000..12eaa9255 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/libentry/Index.d.ts @@ -0,0 +1,24 @@ +/* + * 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. + */ + +export const testAesGcm: () => number; + +export const testAesCcm: () => number; + +export const testAesCbc: () => number; + +export const testAesEcb: () => number; + +export const testAesGcmSeg: () => number; diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/libentry/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 000000000..6abf3b7c2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/libentry/oh-package.json5 @@ -0,0 +1,21 @@ +/* + * 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. + */ + +{ + "name": "libentry.so", + "types": "./Index.d.ts", + "version": "1.0.0", + "description": "Please describe the basic information." +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_cbc_encryption_decryption.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_cbc_encryption_decryption.cpp new file mode 100644 index 000000000..5546576ba --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_cbc_encryption_decryption.cpp @@ -0,0 +1,93 @@ +/* + * 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. + */ + +// [Start cbc_encrypt_decrypt_aes_symkey] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_cipher.h" +#include +#include "file.h" + +OH_Crypto_ErrCode doTestAesCbc() +{ + OH_CryptoSymKeyGenerator *genCtx = nullptr; + OH_CryptoSymCipher *encCtx = nullptr; + OH_CryptoSymCipher *decCtx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + OH_CryptoSymCipherParams *params = nullptr; + Crypto_DataBlob outUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob decUpdate = {.data = nullptr, .len = 0}; + char *plainText = const_cast("this is test!"); + Crypto_DataBlob msgBlob = {.data = (uint8_t *)(plainText), .len = strlen(plainText)}; + uint8_t iv[16] = {1, 2, 4, 12, 3, 4, 2, 3, 3, 2, 0, 4, 3, 1, 0, 10}; // iv使用安全随机数生成 + Crypto_DataBlob ivBlob = {.data = iv, .len = sizeof(iv)}; + // 生成对称密钥 + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("AES128", &genCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymKeyGenerator_Generate(genCtx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 设置参数 + ret = OH_CryptoSymCipherParams_Create(¶ms); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_IV_DATABLOB, &ivBlob); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 加密 + ret = OH_CryptoSymCipher_Create("AES128|CBC|PKCS7", &encCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(encCtx, CRYPTO_ENCRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(encCtx, &msgBlob, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 解密 + ret = OH_CryptoSymCipher_Create("AES128|CBC|PKCS7", &decCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(decCtx, CRYPTO_DECRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(decCtx, &outUpdate, &decUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + +end: + OH_CryptoSymCipherParams_Destroy(params); + OH_CryptoSymCipher_Destroy(encCtx); + OH_CryptoSymCipher_Destroy(decCtx); + OH_CryptoSymKeyGenerator_Destroy(genCtx); + OH_CryptoSymKey_Destroy(keyCtx); + OH_Crypto_FreeDataBlob(&outUpdate); + OH_Crypto_FreeDataBlob(&decUpdate); + return ret; +} +// [End cbc_encrypt_decrypt_aes_symkey] \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_ccm_encryption_decryption.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_ccm_encryption_decryption.cpp new file mode 100644 index 000000000..2ccbd5668 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_ccm_encryption_decryption.cpp @@ -0,0 +1,117 @@ +/* + * 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. + */ + +// [Start ccm_encrypt_decrypt_aes_symkey] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_cipher.h" +#include +#include "file.h" + +OH_Crypto_ErrCode doTestAesCcm() +{ + OH_CryptoSymKeyGenerator *genCtx = nullptr; + OH_CryptoSymCipher *encCtx = nullptr; + OH_CryptoSymCipher *decCtx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + OH_CryptoSymCipherParams *params = nullptr; + + Crypto_DataBlob outUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob decUpdate = {.data = nullptr, .len = 0}; + + uint8_t aad[8] = {1, 2, 3, 4, 5, 6, 7, 8}; + uint8_t tag[12] = {0}; + uint8_t iv[7] = {1, 2, 4, 12, 3, 4, 2}; // iv使用安全随机数生成 + Crypto_DataBlob ivData = {.data = iv, .len = sizeof(iv)}; + Crypto_DataBlob aadData = {.data = aad, .len = sizeof(aad)}; + Crypto_DataBlob tagData = {.data = tag, .len = sizeof(tag)}; + Crypto_DataBlob tagOutPut = {.data = nullptr, .len = 0}; + char *plainText = const_cast("this is test!"); + Crypto_DataBlob msgBlob = {.data = (uint8_t *)(plainText), .len = strlen(plainText)}; + // 生成对称密钥 + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("AES128", &genCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymKeyGenerator_Generate(genCtx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 设置参数 + ret = OH_CryptoSymCipherParams_Create(¶ms); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_IV_DATABLOB, &ivData); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_AAD_DATABLOB, &aadData); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_TAG_DATABLOB, &tagData); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 加密 + ret = OH_CryptoSymCipher_Create("AES128|CCM", &encCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(encCtx, CRYPTO_ENCRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Update(encCtx, &msgBlob, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(encCtx, nullptr, &tagOutPut); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 解密 + ret = OH_CryptoSymCipher_Create("AES128|CCM", &decCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_TAG_DATABLOB, &tagOutPut); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(decCtx, CRYPTO_DECRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(decCtx, &outUpdate, &decUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + +end: + OH_CryptoSymCipherParams_Destroy(params); + OH_CryptoSymCipher_Destroy(encCtx); + OH_CryptoSymCipher_Destroy(decCtx); + OH_CryptoSymKeyGenerator_Destroy(genCtx); + OH_CryptoSymKey_Destroy(keyCtx); + OH_Crypto_FreeDataBlob(&outUpdate); + OH_Crypto_FreeDataBlob(&decUpdate); + OH_Crypto_FreeDataBlob(&tagOutPut); + return ret; +} +// [End ccm_encrypt_decrypt_aes_symkey] \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_ecb_encryption_decryption.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_ecb_encryption_decryption.cpp new file mode 100644 index 000000000..fcce356f7 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_ecb_encryption_decryption.cpp @@ -0,0 +1,87 @@ +/* + * 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. + */ + +// [Start ecb_encrypt_decrypt_aes_symkey] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_cipher.h" +#include +#include "file.h" + +OH_Crypto_ErrCode doTestAesEcb() +{ + OH_CryptoSymKeyGenerator *genCtx = nullptr; + OH_CryptoSymCipher *encCtx = nullptr; + OH_CryptoSymCipher *decCtx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + OH_CryptoSymCipherParams *params = nullptr; + char *plainText = const_cast("this is test"); + Crypto_DataBlob input = {.data = (uint8_t *)(plainText), .len = strlen(plainText)}; + Crypto_DataBlob outUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob decUpdate = {.data = nullptr, .len = 0}; + + // 随机生成对称密钥 + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("AES128", &genCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymKeyGenerator_Generate(genCtx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + // 创建参数 + ret = OH_CryptoSymCipherParams_Create(¶ms); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 加密操作 + ret = OH_CryptoSymCipher_Create("AES128|ECB|PKCS7", &encCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(encCtx, CRYPTO_ENCRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(encCtx, &input, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 解密操作 + ret = OH_CryptoSymCipher_Create("AES128|ECB|PKCS7", &decCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(decCtx, CRYPTO_DECRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(decCtx, &outUpdate, &decUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + +end: + OH_CryptoSymCipherParams_Destroy(params); + OH_CryptoSymCipher_Destroy(encCtx); + OH_CryptoSymCipher_Destroy(decCtx); + OH_CryptoSymKeyGenerator_Destroy(genCtx); + OH_CryptoSymKey_Destroy(keyCtx); + OH_Crypto_FreeDataBlob(&outUpdate); + OH_Crypto_FreeDataBlob(&decUpdate); + return ret; +} +// [End ecb_encrypt_decrypt_aes_symkey] \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_gcm_encryption_decryption.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_gcm_encryption_decryption.cpp new file mode 100644 index 000000000..118068d9c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_gcm_encryption_decryption.cpp @@ -0,0 +1,118 @@ +/* + * 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. + */ + +// [Start gcm_encrypt_decrypt_aes_symkey] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_cipher.h" +#include +#include "file.h" + +OH_Crypto_ErrCode doTestAesGcm() +{ + OH_CryptoSymKeyGenerator *genCtx = nullptr; + OH_CryptoSymCipher *encCtx = nullptr; + OH_CryptoSymCipher *decCtx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + OH_CryptoSymCipherParams *params = nullptr; + + Crypto_DataBlob outUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob decUpdate = {.data = nullptr, .len = 0}; + + uint8_t aad[8] = {1, 2, 3, 4, 5, 6, 7, 8}; + uint8_t tag[16] = {0}; + uint8_t iv[12] = {1, 2, 4, 12, 3, 4, 2, 3, 3, 2, 0, 4}; // iv使用安全随机数生成 + Crypto_DataBlob ivData = {.data = iv, .len = sizeof(iv)}; + Crypto_DataBlob aadData = {.data = aad, .len = sizeof(aad)}; + Crypto_DataBlob tagData = {.data = tag, .len = sizeof(tag)}; + Crypto_DataBlob tagOutPut = {.data = nullptr, .len = 0}; + char *plainText = const_cast("this is test!"); + Crypto_DataBlob msgBlob = {.data = (uint8_t *)(plainText), .len = strlen(plainText)}; + + // 生成对称密钥 + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("AES128", &genCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymKeyGenerator_Generate(genCtx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 设置参数 + ret = OH_CryptoSymCipherParams_Create(¶ms); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_IV_DATABLOB, &ivData); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_AAD_DATABLOB, &aadData); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_TAG_DATABLOB, &tagData); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 加密 + ret = OH_CryptoSymCipher_Create("AES128|GCM|PKCS7", &encCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(encCtx, CRYPTO_ENCRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Update(encCtx, &msgBlob, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(encCtx, nullptr, &tagOutPut); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 解密 + ret = OH_CryptoSymCipher_Create("AES128|GCM|PKCS7", &decCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_TAG_DATABLOB, &tagOutPut); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(decCtx, CRYPTO_DECRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(decCtx, &outUpdate, &decUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + +end: + OH_CryptoSymCipherParams_Destroy(params); + OH_CryptoSymCipher_Destroy(encCtx); + OH_CryptoSymCipher_Destroy(decCtx); + OH_CryptoSymKeyGenerator_Destroy(genCtx); + OH_CryptoSymKey_Destroy(keyCtx); + OH_Crypto_FreeDataBlob(&outUpdate); + OH_Crypto_FreeDataBlob(&decUpdate); + OH_Crypto_FreeDataBlob(&tagOutPut); + return ret; +} +// [End gcm_encrypt_decrypt_aes_symkey] \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_gcm_segment_encryption_decryption.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_gcm_segment_encryption_decryption.cpp new file mode 100644 index 000000000..3b43fd23d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/aes_gcm_segment_encryption_decryption.cpp @@ -0,0 +1,146 @@ +/* + * 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. + */ + +// [Start gcm_seg_encrypt_decrypt_aes_symkey] +#include +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_cipher.h" +#include "file.h" + +#define OH_CRYPTO_GCM_TAG_LEN 16 +#define OH_CRYPTO_MAX_TEST_DATA_LEN 128 +OH_Crypto_ErrCode doTestAesGcmSeg() +{ + OH_CryptoSymKeyGenerator *genCtx = nullptr; + OH_CryptoSymCipher *encCtx = nullptr; + OH_CryptoSymCipher *decCtx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + OH_CryptoSymCipherParams *params = nullptr; + + char *plainText = const_cast("aaaaa.....bbbbb.....ccccc.....ddddd.....eee"); + Crypto_DataBlob msgBlob = {.data = (uint8_t *)(plainText), .len = strlen(plainText)}; + + uint8_t aad[8] = {1, 2, 3, 4, 5, 6, 7, 8}; + uint8_t tagArr[16] = {0}; + uint8_t iv[12] = {1, 2, 4, 12, 3, 4, 2, 3, 3, 2, 0, 4}; // iv使用安全随机数生成 + Crypto_DataBlob tag = {.data = nullptr, .len = 0}; + Crypto_DataBlob ivBlob = {.data = iv, .len = sizeof(iv)}; + Crypto_DataBlob aadBlob = {.data = aad, .len = sizeof(aad)}; + Crypto_DataBlob outUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob decUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob tagInit = {.data = tagArr, .len = sizeof(tagArr)}; + int32_t cipherLen = 0; + int blockSize = 20; + int32_t randomLen = strlen(plainText); + int cnt = randomLen / blockSize; + int rem = randomLen % blockSize; + uint8_t cipherText[OH_CRYPTO_MAX_TEST_DATA_LEN] = {0}; + Crypto_DataBlob cipherBlob; + + // 生成密钥 + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("AES128", &genCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymKeyGenerator_Generate(genCtx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 设置参数 + ret = OH_CryptoSymCipherParams_Create(¶ms); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_IV_DATABLOB, &ivBlob); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_AAD_DATABLOB, &aadBlob); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_TAG_DATABLOB, &tagInit); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 加密 + ret = OH_CryptoSymCipher_Create("AES128|GCM|PKCS7", &encCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(encCtx, CRYPTO_ENCRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + for (int i = 0; i < cnt; i++) { + msgBlob.len = blockSize; + ret = OH_CryptoSymCipher_Update(encCtx, &msgBlob, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + msgBlob.data += blockSize; + memcpy(&cipherText[cipherLen], outUpdate.data, outUpdate.len); + cipherLen += outUpdate.len; + } + if (rem > 0) { + msgBlob.len = rem; + ret = OH_CryptoSymCipher_Update(encCtx, (Crypto_DataBlob *)&msgBlob, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + memcpy(&cipherText[cipherLen], outUpdate.data, outUpdate.len); + cipherLen += outUpdate.len; + } + ret = OH_CryptoSymCipher_Final(encCtx, nullptr, &tag); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 解密 + cipherBlob = {.data = reinterpret_cast(cipherText), .len = (size_t)cipherLen}; + msgBlob.data -= strlen(plainText) - rem; + msgBlob.len = strlen(plainText); + ret = OH_CryptoSymCipher_Create("AES128|GCM|PKCS7", &decCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_TAG_DATABLOB, &tag); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(decCtx, CRYPTO_DECRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(decCtx, &cipherBlob, &decUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + +end: + OH_CryptoSymCipherParams_Destroy(params); + OH_CryptoSymCipher_Destroy(encCtx); + OH_CryptoSymCipher_Destroy(decCtx); + OH_CryptoSymKeyGenerator_Destroy(genCtx); + OH_CryptoSymKey_Destroy(keyCtx); + OH_Crypto_FreeDataBlob(&outUpdate); + OH_Crypto_FreeDataBlob(&tag); + OH_Crypto_FreeDataBlob(&decUpdate); + return ret; +} +// [End gcm_seg_encrypt_decrypt_aes_symkey] \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/file.h b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/file.h new file mode 100644 index 000000000..0b8939ca3 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/cpp/types/project/file.h @@ -0,0 +1,26 @@ +#ifndef ENCRYPTIONDECRYPTIONGUIDANCEAES_FILE_H +#define ENCRYPTIONDECRYPTIONGUIDANCEAES_FILE_H +/* + * 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. + */ + +#include "CryptoArchitectureKit/crypto_common.h" + +OH_Crypto_ErrCode doTestAesGcm(); +OH_Crypto_ErrCode doTestAesCcm(); +OH_Crypto_ErrCode doTestAesCbc(); +OH_Crypto_ErrCode doTestAesEcb(); +OH_Crypto_ErrCode doTestAesGcmSeg(); + +#endif //ENCRYPTIONDECRYPTIONGUIDANCEAES_FILE_H \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..965554bb3 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,57 @@ +/* + * 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 { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +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(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +}; \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * 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'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..97b84c02d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,62 @@ +/* + * 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 testNapi from 'libentry.so'; + +@Entry +@Component +struct Index { + @State message: string = 'EncryptionDecryptionGuidanceAes'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(24) + .fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_gcm')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testAesGcm(); + this.message = 'AES_GCMSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_aes_ccm')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testAesCcm(); + this.message = 'AES_CCMSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_aes_cbc')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testAesCbc(); + this.message = 'AES_CBCSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_aes_ecb')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testAesEcb(); + this.message = 'AES_ECBSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_aes_gcm_segment')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testAesEcb(); + this.message = 'AES_GCM_SegmentSuccess Result:' + ret.toString(); + }) + } + .width('100%') + .height('100%') + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/module.json5 @@ -0,0 +1,66 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "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" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..c7153b9d5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/element/string.json @@ -0,0 +1,36 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "EncryptionDecryptionGuidanceAes" + }, + { + "name": "call_aes_gcm", + "value": "Call AES_GCM" + }, + { + "name": "call_aes_ccm", + "value": "Call AES_CCM" + }, + { + "name": "call_aes_cbc", + "value": "Call AES_CBC" + }, + { + "name": "call_aes_ecb", + "value": "Call AES_ECB" + }, + { + "name": "call_aes_gcm_segment", + "value": "Call AES_GCM_Segment" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..1898d94f5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceAes.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceAes.test.ets new file mode 100644 index 000000000..5d9bff15d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceAes.test.ets @@ -0,0 +1,114 @@ +/* + * 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 { describe, it, expect, beforeAll } from '@ohos/hypium'; +// 导入测试依赖kit +import { abilityDelegatorRegistry, Driver, ON } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; +let want: Want; + +export default function encryptionDecryptionGuidanceAesTest() { + describe('EncryptionDecryptionGuidanceAesTest', () => { + /** + * 打开应用 + */ + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * 点击按钮,使用AES对称密钥(GCM模式)加解密(C/C++) + */ + it('testEncryptionDecryptionGuidanceAes001', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAes001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call AES_GCM')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_GCMSuccess Result:0')); + console.info('uitest: testEncryptionDecryptionGuidanceAes001 end'); + }) + + /** + * 点击按钮,使用AES对称密钥(CCM模式)加解密(C/C++) + */ + it('testEncryptionDecryptionGuidanceAes002', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAes002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call AES_CCM')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_CCMSuccess Result:0')); + console.info('uitest: testEncryptionDecryptionGuidanceAes002 end'); + }) + + /** + * 点击按钮,使用AES对称密钥(CBC模式)加解密(C/C++) + */ + it('testEncryptionDecryptionGuidanceAes003', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAes003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call AES_CBC')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_CBCSuccess Result:0')); + console.info('uitest: testEncryptionDecryptionGuidanceAes003 end'); + }) + + /** + * 点击按钮,使用AES对称密钥(ECB模式)加解密(C/C++) + */ + it('testEncryptionDecryptionGuidanceAes004', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAes004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call AES_ECB')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_ECBSuccess Result:0')); + console.info('uitest: testEncryptionDecryptionGuidanceAes004 end'); + }) + + /** + * 点击按钮,使用AES对称密钥(GCM模式)分段加解密(C/C++) + */ + it('testEncryptionDecryptionGuidanceAes005', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAes005 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call AES_GCM_Segment')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_GCM_SegmentSuccess Result:0')); + console.info('uitest: testEncryptionDecryptionGuidanceAes005 end'); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..26cf884d5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,22 @@ +/* + * 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 abilityTest from './Ability.test'; +import encryptionDecryptionGuidanceAesTest from './EncryptionDecryptionGuidanceAes.test'; + +export default function testsuite() { + abilityTest(); + encryptionDecryptionGuidanceAesTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..c3fd9dda3 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/test/List.test.ets new file mode 100644 index 000000000..f1186b1f5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * 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 localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/test/LocalUnit.test.ets new file mode 100644 index 000000000..7fc57c77d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/hvigorfile.ts new file mode 100644 index 000000000..2a5e543f1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/ohosTest.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/ohosTest.md new file mode 100644 index 000000000..8415a3609 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/ohosTest.md @@ -0,0 +1,12 @@ +# 使用AES对称密钥加解密(C/C++)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ----------------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,使用AES对称密钥(GCM模式)加解密(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(CCM模式)加解密(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(CBC模式)加解密(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(ECB模式)加解密(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(GCM模式)分段加解密(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/screenshots/EncryptionDecryptionGuidanceAes1.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/screenshots/EncryptionDecryptionGuidanceAes1.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc9d7d8de20f13cd606f5d06ff035fdc2d3d336 GIT binary patch literal 68268 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/screenshots/EncryptionDecryptionGuidanceAes2.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAes/screenshots/EncryptionDecryptionGuidanceAes2.png new file mode 100644 index 0000000000000000000000000000000000000000..90c853e56b099e675de29feb8828d8123c487cbb GIT binary patch literal 69603 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

dtx zx#ShK6R=B?Fx@lDZ!w+SS;^ljz~t#*(PKpdXgX-Nzs*1hQyh0j4dnNt591zC3-#MwJDo!vvSKD*j-6GW@pd8Z_d^>qZV@PALC{XRp80Onr zR7if?nPzq4ALGpQQ`%}zf8bznQ}wB{9m!1qo#8Cg>_6$ zPC*Lj6&J4@FM;2}b0n1-5DYql8k19hHTD%cJd#jHoL@b}xpK6oMBu{-xR-?2)gRnp zt56MnH7rWig_XulWcNSub# z35oIF_#;N9!>#6)6~tZdz?Gj32gjB})11-o|9n)R7r~4^(mZ6GaBvrX$9G21-7mUz zkI(rx7gM5E z|N4O1Q44HY{jM+h84@^D^i3e-7uI(SBZC(I0HY6bR@TdA>&k|rEk_T*z?%*Uu?Nf7 zY>8_WSr93wNSnD1@szb$Rfebx2lm3s{hD!-@R$J|1Uidl~OjDrXg2&4rUW z4`yXBp87}HVNYk}Q?qy|x~+)DgeAw6u(Mn zvzyJz3IR9_UmOEa2%)}@20mAFc7s~ge1~{am}1Gj_xb@82Ykl`uGIvM@br9h^sI56 z@|fEVjd}O3Hm78eSU&EHk10)Y^Mft@e&)5cTX?dGbefL2-6C}(QnLX{J!tZ#UJT3-AF@$<;dOGom`c-KK0a^R*9hb`jWD~SVhD5 z)oD1cCTZOWQPHhafjcq=oJAZAo)L4in&$|{?JGW^)T&7drAjv6GnK@9#+1(9T$2ue zi@EWNqxmV+z>+i|>8Y7>EW3e$jEebuI@!wdUPs&cq1@|GuBYUTT!g z0oCIuoD7f&b$l#w^T1vJU3Bc8X>oJyX{ee@@@nava1_V~WQqBvoL4)nX?-k#4w2F4 zV4t)Tp~vs2D(LE_Q1`OvM$Cn!{dldGd&O}%xM0z;8tBu@Jts8OTDEAq+Zvl0AU(d# zy|LUC$v#SbMTaw*y>>zj z^-Wp40mQayPTYOpZ2k`DXTzbOD#D=O(wW|(sdG?Fk;TMeQYRI(IoPRn4IWYrw&}>L!YdUVC=-= z+4y=8;2$9B%;N+zrru>=m@PZC#4}|glxWRZ5+mISTBKF2(^yDmY>56%mkn$GG9;Uh z3uk>Tfajl-0m<`sY@8e=5e9|F5cV|o&b_Q(w?r>h`8;3F+`63?*YU|8=Izfn2&8s3 z)|Cy`zd8wg>HvxlFHrxns4r;EjH$J^h9u=TH>zq`?>2{F7$yG!_#P}*`LR^bvvoNb z#_Y467quqJn%VWP;n;`!PXvBI8o|At8^@-tmWwtD^s;J6J5Q4{iZ;N*qxiJQw< z1pXABS5airU8!Z_XJIX1lJO{>kjY)||9wKBWWaROuE4@FBC^2Gps=;x{apUT8E!?q5*ezVJe$O@M^}3&_eo-IJ zsuuCI@&i!%4k}>&ND3Xdbj*k&CjJMABj8<+V3x^}Jh4OsF*2SL6TdoI3`i#FDc-G# zHq4{xt7#Q-oSnd&lOD5g@9bgX-gxtS=nVA*n-K&tvRd>&Q3S-q47iLdRU&fo&9{a= zd2y9E@3_7x`(@6MLF2|mAV0o~L_ZsAsf7BX^%}a}lluEa-7&w;!fP{)4yxcQ4={(2I|B#N+(%0CGwB7MyQS<)76d7 z`i)*MR+lC6wBNNI;O>7LA3n9EfVMp1gtko;{i~`UL)6O+-Nq2WV|E%gc48m=qUm8y zYNtuJ8L`OFOE~@a!NJ#~>QN*eAB2N1RQOiz+MFLr$#*%f@>`&zL%!R)=l(jc;gavD z;28L6<`yzc{J}-=mm%MD``@EKLe!Kqq4lq$j|uyPuFeTJKJH?FpP8CGgf^*kt$Dj= zJ_!8-Fij@DTzIn|@}oiA^Y;>2*`bU6m2~BmK5EWSESbNqzM}AlEO(^}wr)jPlO_6g^B9X# zQxS}UQk@k{y*vtM!Tr21x3~6sY|{sS84cQVPos)l)IVQPhq4YYJ)d3U7MCy;j!V5D z=4O>2g^87i-<(~aZBYQ5X@?&H3K(~w*vx&)&Y^X>vOuDFQtg9O_&V9Hb)mksm+rOf zgRsPgV{JD9%K|%ziIxgK#j^5SX8dptT6}1+BNT+)M1b$SO_dkUhC>e#qQFFN$mvb~ zP9vVy2<=ns-Vzq>Ty3F3V$H%cPP(RzYF|qqM?EZvh4C)18YS&v{}DI{+we?6FC;eK z4cxR}su!s595hN`><;aHK22{+ifo>6p=Bars)2sfskLgVeHi`Ae{xW8i1HB4 zFQ1NboS1YM;Io-uojkGA9;=?7+la5-q6l&9?U~noP*X|H6If3nU2o10!^OrpXr+ey zLb#97R9l1uZj@w-*V}F?l_7Y7dpX3>_tf~zoC|v$P zx#0Gjn1?O!bX?O)Mh5KOywU>V!K{Zzj|LqdNj&FZOZ%iuaru4{l7k#k!B${ z+Uo1BPFSY}c#ETW`7l5+I9-Fd@0tJ*y}t4q8R~s}5H+0V3C18)mMV9>Of<^K4GJ1J zix!3(x*Z|<3lrcf4`REz=#}m(}`H<)XBTuS| zr4QnI4I?&(m8Pl!TiEqIE7Q6b0|RyQz@b70BS9ySDndn+Yi~@`fibQ=zXbVaP1skP zP=_JLew&r#35F+ihsU7BM)h zns4D-z@c?Bl5S4oM4j)-yi+*{m(?eIJ3i6Yh3>u4uc_9RKGs{c7Lr{dRG zy8ms$O(=f9#50<9^${Xne>2hd~1-}S{sD$Cz_8T`pt!$ry!NUAs;SuHbRAsM{l zX`KnCCgP%eLw!jH`}L-cA;p1EztcOdEvU~|Se7U%>)}Bn@49>X{m{+nNec$5+O-9v z74vyKQz5o>5(O(Q^W2JGF*KBpqH0e{T3M%Mri&7913A_M#3<7&s3(X<^Zx6{df=h? z2S5oC!~sD>+TBciY#8F~ z2zbcA$?8Dd)yXL2E@&=3AZGrh@yb;+5&PYHUv==o;qH)1f*O5Vsq064m(kR7VK5fe zl8n1;Qxg>NS7V>4-!r{j$VM;X2x)xaZizFrv2k+FDC-8P@k{mem@ILox6vtx|NYZ| z@iyMEbqLy7&dp=klW39Rs4LDl*l^-Id`C_5wszX#KppM8&Tk9eO5m_RsNUBoa;$01 zH-PN6?&}VgG4#~hXSjayM?+A+n>PZgw!kLynOtfLBM#p}x_RiSEF1$xpx3 z_BS^?k4TSks<+qG)kE-^->0nNkkR{dQy-?S@-~H5g`2IOc$+N0-lY|K4vqz;{3kta zg28Doy~!?IzF^A2uug1N{M-0rNZ%~Wd7q76L!)WdHQX2Ie+8vnn~JJi3%KLu{~^uTswEYrgmlLu-o6so9E2*34eF*GtPIlCd4Hm=zlf~!~m_S?2clV1o_w<_PajEbVg`pchwwG|evuvE@ zfb4ShuF?Uw0Boz`o)muf20!!qAVc1n zh0g>Gv*K@|zFo6vMY}8i1ALx;-^qTPm&xNkFCJHO*l)szcBk>Fof7{tO)#`eyLp1- zrLjU?5bpZv&l8HXa?MSw37XN4IMpu*$LK3K?MFV`Zmx+EDL7~8D7%%Xr@mV*i+FTj z{vTlTA7Dsa=hY)9A}M&km2#)tBcD~Wg#V;B6^GEyt=W?H^VfrO$hI&r#UI<%9{kr^ zt#kf9Z=c9nw`Rtyb21tGH}iyv;K9>HPvQo@+#OxAG!mkuS{fa+Wce^qQ{C7vax^JP;{{CDa$Pei_xE*RM~+h-^d<@=|MmnvQ!_ zB}C3diD+qXzI~_32$ZDYMC(~(I>VgZXqP(H1y#!s?K8%BPr4_4(BIcX?N1n$Sb8H^ zkWL`{+}ou=&wVG;;-8+M!C&T#Mru8oZ+e0KXLVdNDka?K@fi>5C3ad7Qg5RZ>YT6> z-{rS}q}au6yHxF%_(|j8_-%C2#@TF#{Vf{TsaMz88KZ658`6^G7@+r6%V=0wc8_7) znbIQ>_3D-DAC_N&;q>^Tp&(w^tqq3lmo4^`766i+Ee{{hF1$pdNd42=Qz@Ek#hl!u zVD=l2GrA&G_W9lUl0{{e5sSke7#B!y>}2-7mvuy83b7!0yD8-luxe_{&pj z_2>vgckpD)-?44sGT(R0%q_#*Jw=5&m~bkcIc;sDqYY^)|LOc~TJY!7UmG!>J}von zs#%S(&RD%uPGz+f*TNsoen*}q;v@Jn3x2|*@(+;aN6xakXdLNVNRDl4_ztHN=#h*q zyDa1XV0nCwch>Oy?}$Uco3!Z*+Rs!uzg4II0n8`+=Hp>*9u3-^oxPolXJVOaeBIyf zZsl`6j_e@_zGhl1l6LHR&Nf%5&X3etcQhli=64JfY@*ofTD_A!0)cO4g$|}!DrNkt zxGY#u7lL)S2joVCy#sJIudLy34CihRh6c?UI6_nYii-l$t!R{piPz8>3PoWZuV>iZ zYSBxYh;O7OvPZtYu1BU-TSoO#rLt>KL-At1Q9lA0;eMeaN%xK_%jX}UjmHOca&ofL z%y%z`!@+QMZXb3n$c&FJ|TA$gwarj+#iQ5UFm* z@+>)C3drzD&px$ZMi${Jd~)*UdJmWHT9_nJ`kh<};^P&$S%Z%OliuD~)0%9mv1;x{ zS)Szp6Jyj*aY0m{^(K#AsE^Euy?EJlRE-0Q=cAY9+(zU5pyQQ%BTUsYF#nwD+b69& z169G2ch2ml$uHJSn&RY}wLNQv=8b!Ej~E1Or<78^k+DRBx#D=3YBwYBOXR!D(_pZ_ z4e>2!r~Yzs{twTW-{oAYb~`3yvv;y9VnRsN;YvxyB;nCRLx|RIL#TMZSN>h4ytwdJ z&R<=`7^8(p0G9ai@{sKTFtwUDEhr>*gmzoSH59{2e)fwH$ozf0y9jV{qg$0qckFQD z_z$3NF=an;anY^mAyA2;jfu9s(Z)ITPO-s~GJ@c#VTG>&X-yb3%;!s;_>M*%cwc|c z)sU~MC^m<&Z!m{>EhT$D9Pk~$w*=7bE+JLcGYw=PrW@w+mEE^0wU>65YUFDZd6wIX zBd*+U-#8an%u#At^LDWj^4S^J#ZyV($7T_*t5biK3)=b#q`Ph3G+|qmv0dtfG38Jb zyR!xHyl7Pp;t^Vjg1%@z#EdVp+V3*I@4pJ#Mr8;pFbz5%VtvQ-*b40i!tNT zK_E5X$HL)85mTP{&0xgHq#BA_@PI9UvP944P`!XMGv950sjIHdhD%vM18<}M-Msd) zmLvyr(HerMvazq$+PXofK_@|uncbBs9#ciT=J{dcii%^lqR@Wk`eIVIoF575t_#`4 zwp*C3g&@R)$|Cs3f2|9PPY-WM$l|3nvh@136*6(g=omJiIBYaYsO)U7JVL9la&mA+ z-zuJA1{H43uC5;cMXrK5N-6tzM;v~-5IP%WeA%jEEB3N&(eCSdu|)0thyzc{>jc`` zK#lgPX!ajloYY~O?z`z~yVVB5ep~uKl4xS6!`Sq!6KV;{DC#di2%23E+2G}&^}51` ze9MGpV##?)a%R;ZAx8523!lcf71~Q`mG((d=CkSsnmaG2;_Nh7nbSY0r>lcj^{z-0 zzgChhKu*CzOV3R*>s{WS<9d+su-bcOZ%bvfCZt|@9h>c@ruv22Sa0)504Crkj1mui zqBo3~EPpXz^7e~eoA9=Vxp%^&a!1ZbYPd9(c(72x4ng5I3f@*i!J6@`!$Wc9Ny~E& z?`c_+=ge{rB_*8n+S;>npD3fuj0{Lq-kbM<>kGJfDLL`0Clwh#Q8_XHENYuR?0pg5 z_98@1h=NDVb&H%j<3u9Si}`%T10V_j`1!p8Jl6mKi2pBz7`7^B2_G@u$X0O$rv6zP z4TO;YMYM~(gn9?m-UWztuhltrm0|UqI`&V&shnNTDmX_k#d$uatWKpa|#4NiXrgl9Z8GqeAf&x-?XhA7OzCw0OE%J&= z%8I{2lj76tTT>$d($D$utjxIpN18CJZ!A}Z@;+l)w^bdAyK=XLbh z5DBN?d15U|((8~X(oscUXrEta>7FOWoB@v=ZSXKr%gM72BZ%K67}i`%C?KXSGkeX^;(KFo-DdHRJkr_lrgf3y1>CqaPwW1B8P8ZmtzYJz>bm6@WlYO zzxbw{-}Tki^;LFY-jBmStRqU4oYuFllWx-jMr!%!=Y5fQe;c|sRB0@^>W2EWP$q?G zo~>CFtN#aO?;X|T*0c}f5k*BnK}5PpmnOY~9BOEhE?uP=AoN}prAm>|Bs3`@gc77f zXd*Rq5(vHb-h1)O@hRs#&-=b-{l2yCKeDoNPiFR>xn|#c&s?`%>gf77u^n5Icis9c z*Ecp%#@>sJ1tL-YC}aEKr{@o&tMp_NCml0m2h-{4G`WSTo_-O1$_mXXOOHsyKs}UW zm;)mkc`Xqb`UHM#66Yb!bR4IHivKd@#bWh*r?Zl+%+)RQjjMcZ(;rQ&#S*}D$rCm6 z;-3WUGaT1zc)n)6B8g5+7pch1ENP}Sy6!{p)?uaHiB8Pz73sH6QC_a8Tu(ix`wyEIga1Vh%^qrG}hXz9S5Xi z3bxYPH^$N#Jpw%go%B}i_JKGMxuIKS%e7`z~?^F8zm91K1^L`-1`wsIc8in@JsE3l6 z9JKfSd8OzNJ__Na86@AjICv{Kn+2X+IYVPUCcVGakRHJ%zNe_!_KZq;+fuI3PHES5 zVrjPMtpmXMJ2iVK<$WDvsdui2wlj~N5&kI*NI(QwF%vLayRy|T7C#nJ zo(PD}h?(OX`o08)H7wr)30^r84jfWR|0Gyr40LufUGl&1x*OelYk;NWwurl^ShF%avUsp$j4{>O})0fRJ^MOsIbcPO?0lvb|P9! zUXR;8U`sU1)$=0r^TdLy!5vdMt9YHsuc&dhNj^*W_#xd2G7>z#rh1APr;|w{+xr*9 zAE+nMvknGkW<3$u+1?BM`l#tfgG!;Nc*7Ik9MKNiuI?LuB&y@`q^G> z)7RPz9>t3!3gMi4?5p!|!U7ZTUsF4@8}G(fT9-T(Pa$U!v7$@VOlEuvquYUtKV0n66{r>K9#>hUxB8^JOd@h_*AZZq;Sn^z)G-tDUC< zqGO>N?0Bk&701Kmj5z$(mMDWOulNq5(^Z;H$qt7^?iQ`bRNAPecF8UA%x0&&Ma$he zx(bXizck2XX+$jsDh1UBSb>B&tuUrBIp<~*GF9_O)cSF&GJ0t*^h_mVfHj#h_gA!d zMx*YyR$y3E5~y-*xt4##tEh3Q#y-YQHgSq@9o~$u!01jm7!=T>f*>>NrW#LMMT)&6@h9!WsKp*%4EGzllh0gw!h>?^ z`L#ED)stvIiC5RV?Z&|_I#jzn5L zChuLMtosJJ)%PmN9v*74QoBb_sx`F0gRweeCLLRPyxGN3@!I0}eMK3!e*P#sqiGJY ziV68p2ucddnupGDkG-G4miQ@%*U!HlUVC_vQ<+eZd22B+2?@+C8d!ViAjC=ajqM);A0d_~r#o*J@7i=j;&cAj9Og@pr|3YBh z+`bB}_l)GGgxESe+~2Nhs%_t?%1`_|75N4?mpcQzR#}S&DcRcglubl6nFCQ^YmpmS zy#+92QTAZFhmGndrP;77v=piB;RHX`@}#DU-Ch2`EFiaI8Nd=)@LA-{H*p%ZCHQ1d zDexyj!Tgp?;ERn(t^t27+&R9llK%Ui`qi40u10Dr9jiD4iaFwmLV@pf;pYWb%>n`e zmht7*fqg8=-2T!HBgaHBw%~x6iB(?kb?vQ@xTi7XE@{K;)4zu_L(G$7q=I>GEGUh= zKIAoZTh$`ZO;t|Psbdm@tQAoM%z2QFFIMxp5~OL7ln+r|3Hh`z9=cZ&s?hw``pd1V zBYhIq{2`T6HQSRnejIpA8VVD7igEJpy^tyX&QxF}>=coeGm|Lt`?6vkKdOHKGKaJ9 zn{@-;`bn_SH-JBu+QIKYpIn2eoR1r{ZW%4t#>mE<62JF8*~w2cXUfB}K zodzA@a>Sa8I5~|N!61=|w-{Ubk2%x`fS@d*XGeWrqj)%C`J}#q`E%884LzN{BM~27 zg^7HdAJJFUwE^%_c-*rp;|!Wd@Wet+3>l?H3(6v(MuO7CKkR1Hvm)-DoQ{3rjFPlv zi4gG2v1H37IR5sqyyubgjg3BX_PTvNif}t`s3CJimZr;#j+}VOl&Gye2s5!i@h)!g~L?%Ao(};vj;+i(VA>=4vyeVDijY)fet`E&@Ma#y=|D zF#G3Pp!uKc6#nOA*K^Oh%_qwaeH(!wpxc(L_2ABV*{P z{K1Zdd13pn<;gfJUUkOx3fXDd+Qw==HkQ@TELFV3UBR5ePh5Tb^$8MarY4_uCJ_O9JUkpLUJcS8o7JsvS+8uoSZ*X$Y^$Y_d>0Rk}L zdvbXx3Gy=4XOK?IEOieGx*c^rjwb@nKLqU~F_y~9`1%q)U}_(pC5FGiwudNN*grpO z6md`=ajwiQp!5p$LZ@>=Jh;YwNl;p_=~_=79Kt#8YIL$-2fed&uvI*G<}eR*Dltdm zP}MBvS#o}(&24>?`I{2_-i0A|2^;>YL((t5_Od-NFr(YVuR+G~ zbAXSr`h-5P!r!aOJ(Mm*JWTK5?%bk#?1R~|&#wihK-84nBWQEP63rYPo}L3ThGiJ2 zcAZZVv`~)kTe%-;nNZ_?gH271C*@9LP*%fU){m#*&T#!vMO#bGSe(hB;8Vd()Ii2Q zBunO2ogdGl9r{Q*#7)6R3TW z;kv_ul1N<064BnPqmDBwjTo#g$|30nnO>>)%}!DM{9%eNro? z)XIp>Ll{V}jn3S`9(|BAaO;PTjmu?_6c3ywM#mO8llp7ukw;)S>45U3innS!^;8;)Q%nAox(=--G>+ z55+71?V4>~u}hn#i;vbU@@2e8q|!`jYRQNe*ws{^U*pYSJqs+cStq4>$i#+TdDrNP zojI%En+t36it3=I$_inTyqw4VAl3&S$*w2MYdgF1I~H5zSgn2fC%q+6D&HL#vb#!% zMT$W7P*r-iDOFwUZqBz^TJ811C)F2R9Aq$Oxcuh>&;A^~pnj3GTwaNGIonNPTLhTr z$Dwt8R<`d1bJTwQyL}4PYi@3bg`mtlFTzsl^qt#pi5&Z@I!Qzegbuf6fwMxDIEM3_6rYfK?;A4k1w?Zve%9(CB21@x=CWxL(O7TeGXiy@nPm+qQeP z2#JbBI~-T^8Z8xtU7@A^0?NN?u0+0y#$`OuGF!f;z`?!V7sKF!;=Z*z#79>IFc(GZmT6<0fhV<=0C^i1Z!!1o2AkqMmm3_NjR-ldUR!*Y zqq_1rBe(fn$;CvC1v9CdkSQS?Z>JRh#_c8j%{)u{WuReW_-z9gZPTX(pu)vOqx@BF zcMnx+u*Z7H#xpNd|85aB5s+Iq+%x%{Eq;(zy22C|fEXG=p`v=GbHVN*NFUX=YsiVs z){hf!*SRdK^>oB=njp{$&8aJJYk*~$RpiiYQ;BsnQ}-;~QP1O}E!a0-RXx1@mHFEX zJp>E5tncZoK^2kDSqov9bRShd_s+ZHQO#>T>NgpZ1ey&6zdU1Vx1aJp)e)3rGk#qe z{!~a1Ep&cdnChEclVsaQQw+oIwWlKJI6!9ag1O2vObs-S>GbuJ54cs;v1~b^U0F>0o_@<)@YlOk*C%v6U;+QdHs7 zyI{svk;yR2M@nv~A4n6PIIQg;1P}Q{+@T)ZW}VQOWYYz4&1>Fk(DIIm9!utk>~J$| zLDOZO9%v!DhwkboV(rKxvwYw<9?RIqEqkw`8#z(ssIr?&p}Qz;tsKz>BL6&&e6acu z#Icnbofl!QswrGj?>ks%Zp7t2cjExI>^>ICsI76l(0xc5+~qmd*b{8oEMVkfs@N6b z)38P}#b=Vgs1eR&tB!u^%A9wMySS^YBZRkMJU7_p5ku~JaBo9b%bwU+(2$vU@}$A= zcOMy%eD1Y$d!w+{Ye4xJHj}Dk-BEkGU! z^LD%mc1a?$7z%`}EFPtr*>c-^XkJHnnb=p9nw&>Ept_hk2E!i+z6@WW6gZ+`X)Dd( ztav=43#f7r)F^CZtHX+nPpy>FJB@>7{6jkiC#Aa9H=R?ruXQ3P$_kpdTxfi6C$T<3 z^{S74qp(wc)uRy{$4h%q5`i>qU5oVe)_F#+Xy%%0M3E&%PhUwP3*1lR4F)Dy`uOLK zEJiN$#?o>iyZ7o6zr!es+SR@FbiN|W6+y(R{kE$0IJug&NyApXszL*z{>^L<11R=; z=OO7bUEUy<+w^$9LYhoMcZ085?>=aV(u0TMK({=8kLmlD{pg~~d-J^v!%hPj-VFYX?))&np8$^%;uM%x0Or5Ytw8pj^hgL$CjliLmhp2Rr>8*l~_gOTC zIfXTok>5X4h+?hrg_pfI5*DhXTvy||6}|m(vobl}Xu%Mq zMgXFVQpklEHjAMYTy%wF_7ZNU#`5|^Bgv2Rh1 zB=&~#X=$qtoKdvyq~!LjN(nA%Ne?Bv*(4Fp*3sL_Z+$ncv<|(aO2AueGe&BAu|*7} zi(te2)3%=5T}ff0kh1sE$@n19O)%$UP-}k{-WHYupiLg@ZAS=4&1%9V%#Bx>k=V0Dt~3@ZpIUoz-E!mOS8${+v(SmroB222 z#)~8Z^-Y4m8VR#noz1G*RSym~2jbCae07x`=!tO`2Iith7PAm}RXW3(V_rQkm#ah< zNHBk#!M5?Ezd3jmO2Ge(r7;6ev`yG zuL_L4+h2EC9C1jA2Jq5DeX8=Qk-L>;;Y-O;TWV1=q-%1oWBJSv(YgV(v)m-GnoixB$4YiIw!LIUs?E<)@ zdLi0T)qA6sAuYNOR^93%&YAK=D&?toNzxO>&mZSB=~N=iMxIq&LM@Xf-n{?6s&01((6w?V;x}hnw_FMypp`b zi~=<0ifWmKMnRhh>oJnvPi7h}rAmaT^Z};`ECsbuyE#+M3lx$^q)i29JX?;lBnyaf9gBwnW=ksVUwmgKaax#Rbtyxg)4V z)?6tuT)(PN9Hd&My?4miTbyB=cMq^?37=fe4I9(o*z{&2)l2+hp`GK+)}y*Ahcc>SCQ{N%TgT^)ef%IPuKCoK}xx1y|On-tRge<#1ak} z1Z`@?Y5)cE7jkK_8qx85#~J6otr4yK69P+oaXa6^HB;4c?l zShxwRR7!}=7#~ z$*~(Jn;Dx;=9XxrskJvHDPz>{9(^omq}}eC&yspwPOY6ccMCEiXjLm#>LTPtRV2DH zT&W@%&-QvrQn{JS^A;JlsvocHE|7w~AfjoV{t|z{=643oE3xN(k$wxKFBtpe4FtrS zP*?0?@@1d+lGU?T3zH)Djl9_><%Pc4T-Xed5*a-$&E4nf+R%p9(xZ4|_s+gI>b!>E z(ub(y;gFLA+{EmiE7*Cp(%77-BNEr+@-;s^Ex0W`9UyTL)O;{6y^`_U7Ox9N#%@7Y z7c)A1ts1_1=4OD!Or-a#$4gc{;>=`rsYKY2il!p`@v-ZNrt6YD^a}Z}Y{YJSzlTxs zbd8!F`aJVYZp*0WsM^EA(wjj(5M^37ug$&Kqn1ch0(aBv4Cr)Q0(`7bn>*aO=b#$L znuG8b)_uDk$18{KNCE3GpdeRe(d7r8Y1V2$ex`&XxS>BWcquU$K@4t7R45kf87fIGUjG57tsgYrEjekQt4DK-V5(NN4*a5*}!9Mip@gzmfUVHsZ zs`3;)td61mP6QY0*~k&vqiVcew8pUzp4=T$dFzw>>(nlK_4^?$gpt=hGtb=@d>@w7 z4%-%8GY6NLARTv75)$WTfsXn4>;f9f+HKN<$h2MoHH!Da82WkCT)8xzPu%KHg16&8 z3|>X|=G4{P8U(kr$VaR@a8ZXOi*?=J5&#wJgLK>b$7G?2J;(QgcxerOoBqaFR!p{s zs4gazy)4AU?7Z`Q9GFA&icr+Y{|%iHW@Q|<&w87f_272W0}>a`;!L8Z^w(Ph6W zW>53F+3Ve@Fe}|%uSd<<0?(47rJQcAG%-gE0*hoa@~*zG1L143-@xM=L>ueVI?m=5 zP_3(bcYLp%OB@eP7;IX{2Y&pm5pxawlVBZ%9RdaVzStES2acSn;l=|u_9`g;alZt1 z^(K7#+Dy}xN|01l+wbrmMNxJz{K&L!|{tNhT&dPUP^l zQF(zXMC?Bakn2D_*yW~_h6wgZ269+AedS#A|65iu)8%8jjH}urY5kPr@?GIyh8C<< zPUE>M=1=vr{6Pno%11;-{<2z^9~}B#$=aBm)kgf9ln;GB3FORweUtK!Z{Eq~T#x%n zFzgP`$6Otyv!#H}838`yj$7v$flFLkyuU2G{%aPRs%-vZ)<1^n&OgV}Am*S<*vlXPJWV{W`n5+n3UlGim@YMmkR_LaQbp$uRKfuh}*D*X;gF z@~_#w_HUU<|1cRRl$5(BGa=iak&AV}p>pwiv`{E~o!GEeKG_H(S5ifAU-?339 zvPc2-%VX%mK`c9_gjVSLaSBQbS=xG?b^aLroD5GN{qhW#m^4)VyUR4+wJolrGF90h zWTKbef7SdSw%qsR+X8M8P`jrKw$O7izo$>Nt#)^Q#002|I>JoMk#O98L}{)4A;Ve}_}U zuh10zM`#lKHO~JwE=MzpF3b}0GJXZodt3%^F!0rQ*$CO_a07C#(M~A);_?1Z0_?kA z<5Tdj@sXN7T=+AdumSjZs{JFL-2L^(&+t87flvS5uYMA&F#HFUq+Hd7{>9WkfQZpz zmCqP_IazXi_2$2U?SBqb@vn&0Xt}}z8yXL6%e#NdbNm;u{ULAKwcUKxDBK;6J!BlA z{}oLnwf{NY|BtwlE`eWq|BWOW^8>k`1bkutA)HM1QjBbsVBsgh;Us9Se7YVUjvNbU z$Cy=)pEoQw!;9(dv}FEIEc(Y({?pc0@5ZyyUpU;$_-9IJ^p)$tf~l$D81sikRq5X( zvZV{OWK{5R%lNXMfg9nH-5N}zj)0hg!*;Vu=P``#i?B)~t3*f@y?gt^k0Ku*4_0t; z0@*C(9Xck1e8pp!$kMYNXnbe|wP)*-K~Uxnfaj^`r98}u!MP%tTz5F1R&GzpS_vS~ z(^G%szR3knESz55`tm(4Q3+g`ZB6Zp6{v$=W5Joai%=0gVU?I#H&ijDlW3<02Ph6d z{6PbzNyk@)s6=;c9@PX`+e3@BCvt=2Zg3C&)}ykj_M8Nf=Z76^z0KP-c~?NS|Jh9y zE)eD->?ql(T7fS~TGHaHebn+&^vrl+-IS6czC>*#gZVpC(dQ7c9q~KdzATdb+fJV% zcrXqW^s%O&Gvn1UQ8HDbPoysVT}C0n*4|e3r8XVLVn6z!PrcQ7#uAuP;3EzLdRs#q z{_UR9Hx*1L?mN#mvBcDVuMwE?%$8yQ7~;q`=%2|i$B@kckb8= zjq}wXOV1x?D?#FX^2>ZmGY9151ahTG|tch>f+Czq-*xx8sNJO4(6f zIji$ies*m?w_G?g`|Dk@-_IVcto8*u`VbK0KPLF?uNUuA8OSoe(W7U+?~4&DN6n&1 zaz^NlE#HgFDVH5Svg3W%==A-Wu#PKD;N`?sv~ruZA*()9lLj&Qt*MYWGuZ$FN2%H-{WtcR@X&F>86JXkjvT`nA=xh}X^9YQ@g?PQwg z+cJF4MF|+ftI&j?h>52!EiVh@X)Klj!MAft)xbu>5m(0!0K{iX3Z6 zOl{tTnJG%cp-0$}JAOZEVnmjR3Qw!`rERC0+_EC7|HrFz9qzM;-}(`n@PZ+1uF*)H z%I9@}R6m7cpHEKLTcsp`va4=cC>eh9On0AeNmoGzSd#6rit6fD7DVT?+ zYn&WKM{BE0dDZQNxtve8D#}ZVfGm5;y;vP(W`v>UQRsCpwX~()veNRzi*vQxI9C{t zCLqN^Kw;FeI(q?kkjyK#Umz=ySizW)t{glV5O=Eng2*{Iq>TngES$&x;qKcit&nmL z;ksTLF;W83;34>w!=88_WZlJg!etqSLi9RIxtLh7q^6e^pwEDd&lWD(_r823suq!b zUnCos_mjY4LPn9%9ocw$LY5wJnN`fbDjVM%caYJEFPfSexw=_?rI~#h<8(?f>0A86 zldRn~(Dwh9q;PDszLVCxJC-r_bng#k#bp5(xg6KFNMdH}fD3D~BgbU1(m2!wyVHdS z{3xO>Bj-wo6o?7rj3Ds+U~xi&J(Y+#l5SoA{%;z+f(Ua!%$_a>9qgEVneTJX_!5)T z_dVPs2c_N@#OhM+5+|e9DPpal`FMzE)a~LGN=+jzil92_g_h9G3fLCQmv`5SEK-5b zN!Y(~iY$A1lUTJaERz$E6y!Uz_D;SfPyz6ILijOT*JEyU{V@Ws{}?g;DXd3*_1MOP zLy>^cH9zj#&+gmSWogoS^ccH4Fp*YS&VLHg6g8_fkzavUVyU%o$+z7`w8Z?$A*{5P zszBc2%wjk5POb#1>We*QKrBKk$un$j(?;HGJ}wesb&7^~ z)e+cr!geOR?@et~OlCcXc5WIqQF4xMyWyE&P&EeiGW-fc^95M=+Ea&OSyNhO|LB`Mh8j?CKQAZ5%11T)+5IJZX017Zm z;cF2vA!cv16S7x0yTk-W-diws^7~opP_szuiWrRE7wu-pnoh zkd4oq>pG$;R1TEXj*Q1MMtQypnGDtw8Rbdk*w3k4*A%914xW5 z9TX2I)}-r2;HS{rqSLJsoWnBZ^pIS(#-XchP@j%Z_4-n(ylYMl8&{WI(Jf(OJ(m@U zJF2L&VUUCbm)~3>suVsE#+jF2a_zy8P6sWew9-?~lDkOD4B1fh>AawXhixYUl$lEt zl4aXLuLpP_v(m+*C*=qc9n>jFcIz)yfmy&J#iRTjK~6kQ^u~YA($?L1N9ba1<(CQu z|D2jDR@aoySR%6gx;7rBmkZc8;%0++@lL7H+T1zc7K?1@-f%fotENy(vpM9%bPQ_L z*x?|$@*TpGD#FA!veM66bBMfA^^!yR2G>93#fqi?St6?G~K(dngwa(8Tp;nfIlKP^bf>n;uMBNHV(~0 z_A}TqCRE{jNQyJ{PrZ`3Dtp>b)jwoA_4LEm+(T}x5%Fjxv@|29;T}ct2#3)U&guyE z^_1Tq&Mgb5MJD!FkxaA2Y1vFNX4*&Px-YD%soAlEd6<#EV}BomCJBj`A1vi4uqO93 z**hmmMZV&e;DZ*#!L6#N*QeDUCBn+BXSLV7K0yaqevt3e5~udlT?j#*87ThgRFbqB z56OtX;L%ssyLS;loXWwVk|`E z4s&ZIc=*#`-W#S0Ce(@cuYqrlI?z_Q@9&>tOin1-sfH5ojTC&f;8Go0 zFj;L+tg?wetne6Jb8{1=xg%=A^_CUVLvO`;otYd}nVa0ALBjQfCw7ROzeMu7{3}Zb_A>oV5IOPw6ddf_9eT&yPlF=}eY``iVoRbpJF;oVDs< zBil!WgL|Ci*e%>_HH@5mR3uv8&S(hpG1jGm91^7cIg9UW7yn&2VSQSpHNFs=FBa#M zGE5`c!8dI5yLjxQjC-)(As=Oa_E<9{vVhHvQ7%d2(M0E+4W zNu6^=vp;`IAl+1QK?1r+Q$A;y-D5`$n}6J5j2^riF!&R(pOZP+2VOS{WY@ZCul5Vy zsu-S?44to#E!X>%{eF$xi|Z4#jNfq?=)u5}EygFlMeZk>vnQLtO-k=SQWo7GiRl5s z@y+%fVfdc=9~yO}|BXVnc!eg9@fs2SnF0A^P&iDwg^2J&4`KcLiJHo3#uB=>Be^3Z z6T9~k_0T|hl`}^vrXO7gt(SC!uWWp zZf;1c%brmZ^fjTnI0O3r7pF1dZ)YaXWzkx?8Eh)%264=5Gchec36__4dACWgl!^-~ z?YBVX$b4T4~c)vRa=hZ-y4BGcpj;&cZF^f{(HN1h!fvl6OOi?LCn2^I}M`$yQ zO-0-rnYN&NNNiN!Or@!;4&`L~aLmO~wfmF>Aw`p@jwttq?G)A8R2;2qHV#l3H_LB| z)SJS24MeJin+_gSMX=+Z5xveqeb($5zIXex<$H**w7a5#(|}J~#0Nhd4y1M{%n`%1 zgrHa&pCV<^@AUiKTS;Rxm&6z2_SW4w@4jj zjw4L0lSUFsM$73DT#GO1|KqiUe_oWgPK+q~=%q4bqQx%!&74!xQoS@;^CYqTCUznp zXnNmYWQ~oE;9svbP{=l4ohugzym4gE#anvVqvvZwj}fY092|v&zkTvU?%>41JQj2W zj9&5zE{AewQ&oNPmvg>h0w^l~@I-Q#g_RekA@x?Q7q&#l(iY30{MlW}RwzBK*j|(b zn0=_3QGq*8ajIWkhviQ@*)2p3x(}5LyY=hV?+RlCIHn~9~{A#!pHcEaZ-KW~X|5rz<*QZr~7vVPvipQ;Eu@(wQAZh_U} zOgcN}CI&Prk^~>UH)lHiW;3tWg4D#t3RT1oI$b)%ndCl3>mUWRSc_o%iRWr#BG9!4 zW<1$G>VBcemYwhhO3lGy!Nll9zL z?dmz5&U&$d)s~~8Mxn%SX{e2>r6LHIz{1Wpke9<}hZeU_^r_V~1Tt(S?^@$jSsLa` zH8^6Qs-joH)c~e7C-AvK`)WCxKDg?FSi6E9tYv3c9x7AOvHvvC=;;~{V@1JX7X_>& zIC|6+U;MvZr0>Y8AylPm7t11hE!S*q3Whz`$;0#yywymmvPn4DgndOKvBL#7D3@l= zH4+=r$F6-dw+9!OYE9(8@2NQzTd4#Y!jph%Jy6@2+LsPvPhws`Ck={VLkG19l<{td zIHM%Y_pXG_+w0@P8n}p(*a;gLdCf-1)Jf}$2r*u*-<~pWb$sCmrDOIdr8(OzU&?}V zuYD5b0kHL2xOrXam`t>0#yk$0@cSyVpJ$n};%=vA{Sihl7TlP_WIQlY@RpTE?WMp0 zm0V5~hf7lnBo57p0xK`xi%-6vcWTJf8_ag3SUVBN(&`$iuf%R}ht0VrPckW)O*%51 z&%pF|2aJI8isglVy`D*qu_V_J=H6g2J}?&mFpf`!?$?dFw5smA7oUnSne$LHz}g0l z>+aW5MU?7*Clo7^qIg?IIeGQf#bOj8XUUv=tzRn9L>IA)vSmfY!Hh z_T`&sWvpIRQy$oPO=ThBVm5h6_GX=S8}3_@_`w#_`@)X&qQ_&EW%B)((xV6U{Ph_* zMnhHh^D={zzrR6=^>6rqG<5sZ=Th?^C$5 zgMpP-{e`|-!Vc>W>)D+iT{^yLLj#so54|?iWZV%$`T0*T04u|tx}%>>V2}w=F0rqyG00M(T=I_XOCHt*Ruoia(?DO@ ziYJpyAw*4ETsWuHgY*(%X(bt7+2t|(-rB2o#oi6|lR&&F*D6_$N5MWu{W1WW@8kYOpwxA8*JGaHP~G#oeNqike83ZJVS7&dly z4}I%VyNPpU$giH@q4I^b^+|06Y1#($o^U^KJA9yFk!@MKAPF38wVE2x>BSi*!#1HG z)Qr{~DfEE!`svl6(YKp!2g|^L{^4=N<6?m>JvsKgL5>C*U!-y=jETV0uQkQ|0|o@ws+Xhhh&nh0yl z2VT)>+Yp}Q1tYSeQ{HjU@W5&wI-LgwsKuPKPo!&A+Plz4!;zYZE*N$Z>yXv=reOoc zv%RzWEi&ODcd?F9i+~HSMAH--|HtK#0N+ew5SD~KL79vL)|D6Q`(;^IBI%Qrd+b_a zi9LkP=Jl&D?g4PCdEJP(7;)R!sntxvV1J&rjgq^cD9~=c3PMyWl`vvsv#hp5QFeSALz%^R_(j zal~X%^L+|Z8Dnqw3;Xe=jZzOI1^4*SSEsC9k+AXwmDT9ZDru!9+f4(~V(i%ODYp8z z%5zX6cEVFn?dXnD3buugRX>G?8e#_IbsXxnZWRryMo8F>b!1gxD(~2~;oa7!C(#0a z&;ot4iD-L=lGrCXtTLiOuSazbQ`R=Uf_aq;c5!j#aT)SxJm5`##4vUi%RSf^l3Kea z+$i34kn!eR+f^NzJ5N-j#$z=Y^#<)s4eTGaG4$7TY1LIV4tG-vnZ;NnxUk^bzrL&F zqE%0j3ZZ(n#tI+Z;B!VbeQ{_8Y*btqN`v+eOj1nTeyzRdz-@0B)&^Ooij+gu_?M4O zHXrunU2;?;v03UritN&+wMy#05(a5*!{)vqm2-`{U|%$6g|Z)aEiQMzuF*~LGklq7 zWxbt%s{Mi7Ic5U34ZKArbi#@pq-_VI6Yq8Uch+~~`z}KBA6YwxtTd#7j+o#^?&+X( zTDVtAB8gJ4Vcw&|MUtNS24!ioDN9^Y{_1FVz5TAp-nbmkEpNx_qY}fiB9%*iAnpg7RrpYrim2N|Gs2E9DumAqt!z%;Nq! zr5E48^%hhNXfSYBze{zwS%Hrd zZsciny^$={i%3Igo24~u`g~bs;?)S$V3mo_!I+u$(0|vpWjW-4#K-l*ZUYJ9Gk}5N zGlDv-LKx;#5OElGOJ>4=&QM9XTAis~Qvf))u)nDgiS1Og!i{T`TZ1d(lUyCRjEh7` zil`I6nGGnk7nYH?_MCkI*7LG3&P_1^BHZ{nm&V-ZAkep^@l}{4sr)oHmHF(vsx-z@ zQ{|kaq&GuUTou-coUa4W0!@L+MFUz>i*n+`xI7Gw|JLV*RlU0pl0x;St%EB(MMGr1 zDXefpH-TE4H?e*Lq6PE~qjGR~oYpAc6_KK5yTGnlmp?A?-26c_sXrzD#lj(~T)GZI zgZEMTzaP8CaOIpXbXU&@@yf_-$xi&1#-@}lD@$~;#YaZ=Df))8Rq_FkIPVngsE2^) z#aC=38M|aXz1plpn_qeq?xHr^7k+N|lYsXY!EdS@1O#D!UW8?;ktl$I)#RW_5^G;J zc4d2KA?yW&|9!fY%k%H+QofQBgV1*ArlKb26~g!FvyhuFY8FslYs`yMNvwmWs|$6P z3#L>`~?KS$>Dy>VE@*qZrOuG zGq9|{xY)PqHbv?mLyy(yqxRT`!+9}M=BvtR_@2u`V?6O7Yrhn_4ZF##y z|AEN9nJnMFoffwYVcu5l_Y*T)z4K%d=2k?Al<>>aw@k=RHx?FMyiHh6)2LQu!DMTo zm4~*@L9keUOs00S1o4t1)oT_3+Ff-Jq~u382d>ibx02E239*)5#3Py(oB`UJuXC}Z ztzesKJ5h;^nJW4-F6AC2e;sz+##dnI2&ZLd{OFk|x-ZFO>}IoE))CCHxWRDqnMh&} zg2%9^R!ggjBm^=mr^U@z2+y@JzDwRLXdS`EA8r4gsw$J#b-`)U)Dt=6D}wl1WrB=@ z78C_l%FBZjGrv;}z8Dmt_GC?1#Pm?Vj;yQyUM6P5mrU&))9pXG*pwu-XWC}s-GP5u zxHX5!kHBx&9g%hGv4_QmZ=O{>06(kTfotR>@2QBAzQ5TZwI&ps5#yQCcGM_Avb|o= zIP`3K!lG((@f5usayhMC{+V>XyvUADFv!LG^xDREDY0E?Q{zBpp6c@1%9ICRoNx3D zKES{I$vN6Xtn7P6W*?}Xz+LHDMPJ2Pzj>gk=@la6YM#vQ@N2^rs`gTcKdM@j{XOI`3Iqz#LD8mv zp+`4|W&Zkm>0(^a`Ptg`p}OetBd;qL?-L7cpEBdg%SK?8{C_Jz8c4^OfwyD+|5<^u ztC;^*K>QzLq4YO;Fqo&NOBB<@4MBUiH`A~18%=n|z#ZW@92dSHA3hG(b-;I0se144 zm>=?Cmkzu`Dczlac(Hn(dF}2WGs63ocaKSsmw&a)*SzS)@!`<)+84(y{%c*!an+B{ zixIaUtzv~!RhYw>zAwy^ZZf2k?~0D6^KbElIpZsq^73x2?Kzn#t;{#?AK2&$vO+Qb ziWmidGpXcb=XUtO%1Pb#_#{5`56?un+vIsBMr-!hzk7DnXhi%kKYTMT z?!D(`^Ki0)Pr-sn(;#*q!N_&HJ5}={dP-LP8TRwd>#+@!M2gV1iTM?Gk~#)LhN*_f z2Rk#8hl=%L;^)O62hNX6)1^dXd+V#!rbnSq3XT2!82I!<>5w-!Q$5e|&RS_iTBsl4|T zcfDNv0`X0ne;00HCue(Z>$SGZuX|j@dxVWS!+Tcz9AdXzO(y`?SD&MS6lo}{97FrZ z6|iiYpfUbbtC3z&lwanEgmb&DB8*M3A5M%XJgM!A0p7If3vIIq&%u0P8}wIhqAuuH z?sJayk(LSAQW|dfKgS>=rjI>R$hQpPX>=reU47`CNjuTqcS>?j)N`VtKvl0)@Oa2! zddG&vN(D)6v}izB(Crmz_9}eOasCq(w36*MFIn`wteY88({Vu7K?Yrt(}JB*U&3*Q zGo$R@)_h%~a-huLL4{mhy|}oj=cP?v>dUqgq(^d*>$mR&XaQ&GoMmaTjqn9p%Q zVGAk2qd}2flvL{0sfl2;w0OHGy;dVbVEfqL2{)x{IF))I;~~sBr)ip70GM;d*7u9O zACVRE`>$AjMQd{Ym+1V@aA}ZDO%Hf9m|loG4s^tB_Wu=F)2GkYBIzz0h)yoenEwWm zi1>Pe^q&8O=k~z=32T3c?F@gTz#qu|?(cl;FOWVxesJ#g-!S&-Ux+SJ^H-2~y&2&4 zD@o|83ufS{#oqN@hWt~HG;=Rhn&s;IxHSmY(oQ=b&6<-lI5*+15b_y+s061oq@lHsDQXp2 ztyELfr15Bu8M$6nX%0dg4HaS^sfCL^`u$mD6oz>LqnY*I`om0Z0>;nN86CMf9%@b6 ze>7~x_@q_n(%S*_2(7hmstAoluF+t!T#==M8x_i0?8WsuwriOqMWx_Ss~Y;;6s6+) zMhtC90l3s#Xz^k0V3mQwHer^3@{y0SIstz}ZUYiAcZ+6&n)osF_vx=7&l_c{=?b*^ z)h4g;534*OUH0UnKk`RiD2ML1-I}_G5lIU&H2ME%d&{6Wm#$rygal%c010H!z#zec zJA~jmxJwdT1|M7!NRZ$&NEqDR-Gej1T?Y5T-63c8-tY6A?DN)s&ikFJuZk-8!QJ=j z)!ozs>1~QTw60O1?XeBFgka zT|P$Ffiy6rCf42^m7~{PMy6g-bFd;+bi&;eA_*zi6qc_Gl@*2wA1TL0Qq=BIJ9xex zhz8{JQF{v#;L)o}>LrWD%FyfU*%_cU;HlWx8)X({InGRr1R5g_4Xt!F#&pfc)$4jR z)FdsbjdGc*rnPAyIB?``zkg&I{+nTaYUq(IwCs3SoIIlTjnW7k8Z=fpJl?fU#{Tfr)Wv5Q74p zSMQFhpyMQ`&WK?QrjMaRZU0z#P}-_UjeRT0`Yj| zfX9rORwoZhzemuWLcqP)XKb(p%n*;6@r??YrMsJe3YWpv_=ZAV4QJF~@R%DG$fly9 ziotvn=~hjR&@Rc8hN7w;Jy%f+DocA4U6-iuf{Apg^O8w4dMc#~O0D@g>jodyY$-;R zyL^E6#=8&D)EC8LQFkfnTUsXhvwtK>e2_>l&7=M`etWh`y#dD)QF*sjcl(37s@b4L z60dEy0}d?(;m09dRb_(>d5@4F94^}k8QF&uYYa>*X~lV80S)XxWxVVhgz%SSvgnD5-K#uRz;ucSq2wTPD2uJviCkRc``z8fBXS!3mX@++ zKZiGRb7w|?JjT%%G@*zsvYkEhPTivnn{>OKMjF%Qz~Zsq-8`VBrdw4zLr;y8wkXAC z$zZbbJ$4J489~+_MwcY7v0YHI$i>cRGQ~7oXqKcmgXYGjun2{D@x(!L&~4<5>2|j1 zC$4leI3-$qWV{k?(9ZJ~Gvg|OV=Rm=B?+)RHUTEmYk=OEwN20*Tj&q+6J4$& zuXG`;Qtt&nbDjB}Hq{fK<~_1`A9tU<<0;^U@$TNDX01q8pA0%kc8?-Kgeh_Mn&FJ@ zcq&)e_GbC$i4DeC-c)h?4q&q*`0U&JM2b{KF@jc0SzX@wp-TV!KCwlTR|~(bya_HvJ$=;UEloG zVC6QRi*E0wx3+Hmx%w^$RjuNE5Mr}ZOT}@p{-aiS_jXayTaj-adhPCUeNVBc%5=ge zG1?xuIoqEDHu^$x5YmkF&be-Oz3ulYb}>4#zqE#4m%04uTAy1a z7hUr&jL{G1&ZG72j`L^YeqkJxqu&D z)?Av%PPtBH@feENHMZfdtlsU)VR{We=p$+MJ0xm}d_t7c-Wz1@H7r|IIl8fAibM11`dt((O#OF&*u$tZ&Xl zPbVf6k~-Awg^1Y(O5I6a;Gc2WO*qILvWf(q>dI_?UZ~RcS4CAnPfBI{7OVp+^CKQ^ zC}cDpPq?hj$b47st7=r@_)1QeFlXfBg*o)$BW?;iXgb5y>~=ywz4u2ax-YTcJ4AYS zK7snVc{3fK&;}&nTB}M>T9{Kp+13$u3?ke}QM`w3ldWE$MXD@j( zY(YbBs)H7GZ~tNPqL%_&*wB(J)InCz0{;;sZnu~66yz{$#H=eedS%c%J9wh?1&!H? zQY9r;y3TO4UU5-rg&SLb{@SFhwqQo*XTX#LPL}4%=t0S_!V0@A4Ss^IjI5h=aIPW^ zmEu&>PxzF<&C^t^X-~k+4c~k7fN)GU$b+?V-v#5@`zbYUz}J1?3IN$-KpwIVDL(EB7xe<->u(hC+AJIl zo(Nen@$6}^xTP#%k=mEocchNVw8(D?)ul6^;Z>}fQg*YX(Ev7w6XWsCBpSP{pn4AD zt(fX(8F7@giV)U99Qsx6CbqbgQxPClWSz)c8_=t7M8YlE-=|C|yW&EczF_zARj<*m zz10ylXE>^K9wxp3dZ&*wc|KV;wT_Kne!>>wd8)M8($|&1DSgf1)@O6zI88Ax5~H}= z^9w_^5fO_nE&bOb6!>!y*8jo)!(r&U5}Rycv|&)1xJaIs$owR)3G5bp70GlCc6KT% z4vvN3hOVl@E>?7PU8m8is&0R2wJs|wGcB%%j4}n$Y~A*A;%ZQpbe#+m3(<`3u^CU} zf%4F3RY}v_!8)oWw%XN!tO8{oc3!s7i&ad|YC(U0F93`A?4iH)$d*@%dSm2>WurRB zd}H0@-dO;zjiblv4^8~RAE&Xg@42$wx&U-dBL56QPE3y&J>LDoXn{D#m`?ZM3)vLL z3v>f=+pAa66YGM*Fv4?K5sqUZf63p|;EMmD*Y~J2Tily8M$LHJ1*z-sENL02${?$u z2zXs8(ugZ3z4O=lNGaH*Z9at9Rg=a z-r6mame#gqrnY%J3ZEdpr4_$`Xyk{&BxwShuH4=`87~&!8T+v-06~UzlHXxwY3Y}~ z{TELEWjE~K5Z;GY%k};cI&*$)@QOod^VDkXO47aj<4s$x(bdA1{mF;iE~%^AgPY{$ zdZF+UG>QHT{r~8)_wU}g_R;EGc8?!&#Wg|{U5G&pq|0SrgaX<=EZ{X7=sQpG6_Z=@wG-sM} zM8s^v>4J@iVu9tNm9={)xD~pLw?pP!S5MTR*1kzyqz_r8e!%67A1B+8+g6n>qT$As zKJhx(EVmA&dj&(l~@+TJu=r|mgz_Cg*y4i5c zE4}gh&c5S>K?DJuA&2=nVQ_^F@Xl!UV=y!I=pk<6sqCFj(h2NmRSG;+joB#o^ZY{h z>6<1*9CgIRO#ZGKtTcnDMO8{unUkRH)xuhB?Jtb4KNi9Vm%+%W;ld$Qheo!A4p!dVFjdjZjR{{(;81m3q+` zT%MTd^vrAk*H;^%Jhd=hlxANibq^R;2Z*U?B+OC zi;K_SL`qe$E8wfrg%;`T*hqKf5z=GLpGSIzJCB|!$4Ez?+WvA8u?!x)G9MhXlPn(wR=la7?31KLuEz^WKdtcs8uAvtX#7Op#rU99}{Z^R{;n+n{oP72y zXG@C@BV-}u;2yb9$^ixO_M`uvQ^9DH{9t|1*oV&bN7(T8(g5aU)2hRx%)+4jAF9EW zYf)KqCIy#k`48f0%2^Kew6sZzQYBiU7Rr&(AX@G1GcsyPy_454)WJ$E`XJ%?S#GB7 zmcbZgLc!`gPhpuCPxpuI7`Gjn!i&F#E9f91oC!eZsnr1YDZ8Ni>&=6#-5<{T3*(r1 z+x?T=1-AKp!E45ED!G>xD-pSmfZ#Tf=hX4q5C{?WawHxgIXk(y`CtHea_8RQz;lPU zr!oYSU6QBIbk_I^9rcEJ31cEeN#D5I879S1L5Z69;ODEM{YI1fV(lT$Thsfl0h|HY zW?}DgFdqM${y!9zmi{RF1ll+N?(MNkEw?w--|ZxTub&GO<_3M5)BSGb+Ec}_fcz4C zWe#DC*rRKC4pL7&HU9kYa zrk*C71R(9gqlyH?^@!Z;&$Jlwz$Xz(qmTFzC_3My;`ntza&4ep7`SyUz|of3`5~Z7 z`qhg#DNg0l5#cm8PCV%@VJiEkemlNCx_bwJ&CTOn`T>{ z;Z1%ltCP#yeyl&d1Jo&GfEYQz@8|Mi)ro$V?X)n49+h8I0%_ z5DIA*?2K3}YJ22;t0InH^`ZfZ=-Z8Et+VAeg6wLfqztBY=8V;b#$w;~_l+BHjv-ZK z4813+bZ;Z!tB@LPr)V%)r>y&fSCt@~s&9FLDnlcad|7o2{4UC}=Sgd&haJ2aMaVAB zyEfBVr@VT7b6f+s|lzlT>%F3>fZDV>d;u$;C)hHmYg-NtrxB`X1<4&H%!= zFHwwRxHZMpS%+2NOzxPQR12_SL4gb5cyFirCjV3-I7G%V){Ng~NR_E%Q1I=rO$BTn z{=rOu0N%PlM%gw&>?ejp;XN{K+2k+1n8!A~7{<3uo5ZZ`P>36x_!%lmlM+LCq{27M z6^`o$z~~+@8y8W{;O8^U_aFjQruja?^ zyC0|$3T-zR8*UZ8>sE&sF#$AcSwvYBqT(2Ady=Cd>kn3>J(8v}cOJG{a}59{m=#85 zs?I1&r?(56tr&6&^C-2}s>>L?KDa0`&?#D~xpG)r1oU;EY2vgRQ(Y9xDcV_2s zvP>3n)+^ODwU8NmXqC^V7nBd`AypmAMyK;q^M{-&tFBt|MPHj*OlVuzH_bKRi0DHe@NKG@)y#tF^=$IW%5o z2{+I1O_Gtfua95es>Y1pijuCgEc~(CC0#9$Wo;S5W#N_WZjrpKU77b`sA>CxBl|}| zN;Zs`Djz1?kXci`h`-L=(y7}ym1JUhnrmFCOjLQ!^>8rRrO{?nTC_ojLPU{(b(_7KyMA|3*!l=G@O1Y}T9Wq0cO~s}#y?rLj zVWr?Y1a7npqbwXo9Z940fdrIu42K#Bw|Kh>4z{c;UEdsZ#|cHzrs?ZkCdITmywAvB zL{yTsi#gM5odz@t&u0~JhsMop?Vh%{r=+CTZje2-7=dtAP6)^kN#$^^;@tSRaqgsN zC&9E)n}K<`3*SBnLYN^!0tM5RkP0<}4I71-A3$OyXLWEsn6c5UDesFr&q7$nnnAIZ;|WO~+W z(pfO{E|jZnW$Jv#Lt4jFa<|#rwO8@g9DUJzSU5c5Yn|5tidi^49YMVB851|r+Rc7` z48Yeh%q0zsLkmVI=5$b|S?HI{t(|t{AAc85oZ7g}UggivuHdZkOjwrZfLj_{g0Wae z?9Ed)1qG&i2qG?nDdxh0)*_j?`-&{|8D)I3 zM(d;$N40E^2Iq?ov{8jbGCMp1Updu_(!!=(Q~lkjogyV5UTSRLQJIN#e|`k~Zl)-#7?2nu*1_(PS7miPHxJC< zMOF2Dm?-LBOEZbaaZ*pMWiAQA&yZ1S)1z?qfCQ=5krHtXdcwnHtFbMzhVx2s=zAlkd=;T|FyedX|)qk_!KIe7stq~>HW0M$X+3?IdrLd^+fXsw0r*xu3C8}Fis3yYZ-gU zRt|QUP3vbeBrFUnmR&`V_d4X{j)D?Q(HM7RWwEv8&A`3K}MLIkzQ0a zV5mU4?#^cn7fHu)$;cQwcGA3&kn%PHKM6z0Po0ofYCgUZF3WF{Ss3RJHg+!C`r2^B zMHFY2Q3!saHU!Xl5O`)#W4mWqVPxl4mAJ7QDvX)V&lWYapk)(U9;A~0AUbqe7{@il`sh$VT)^KHvJ{9})qhMS@>PUWE>952$iHm_`=VoAnn}R*XDCzUkU; zI86$WT2fON-=w(8{Id$w7BFgA)4W=IQpie6F?gjTFqSY|5bCCK6+}1595|U%P%&CjI0Z2c zY#g+>5-L_Uv`jBA6OwYtG)^ni$}60BRF}VgOEWUTe_;RZp)sT_evac&VA}ca=pOs5 zDdg>h@@Bri*KiZctP*=hKE?|CHZv@YXJowXxkhPk3z-1;_-mh$dD{#o#S^HzFUye# zh+^-`hy1=Wh!3r%I&60MEN5Hpt@#fOTtRF%>RX2@qcLMEKc_D8q*O>$;JUIZDw)ItYebiF zR)wHp5AN#N)~)u~tI_>W#Fj=WCWR&a2ggg;8gf!e{&648Q5L{KgSSpD1bL7#Ye`ex zj+ik8dS+o98o46t#FUx~!7KXoxKK#Vfqi zvHYsTG9i}Is=;_v=XIQtea_D8qN)i$iZ^?Ju)>RVoO(1{Nqz{aE@m8+ZrU(zq3!O2 z7>R`xD_C6Fgd!glc`#KBAq(L@{ps_Pg$RgS6clop4~W#@d9L3lU)2nkx%3g}4zxA* z56~sVJFeK~Uw;JXRqn!O`RPi*omw5`TP zJ3IAt1IiG6vXni^=ajtusu?7B+jLN>m%MOpc{j;rlq9AD_9Vs_Aw9Bnpa095T{N7X z+@qFdHCK-1P$kNH!}WF|Uln~(BO}jrD{|;%t#|F|^HQMs?JfbIl>=CaM9kWT*(d>F z&7Zhpi~H$*&T`3#afsP{$k*#A?!!5z!Lk}#!V4ls)h?(MMUr|o#=1W{NUM{hXkF&k zUAVb|AA~Loc$5B7#A+nB`Jp`P#^wAThKE6-{JHE0A1U<3jO+aYG6O|&`}Zdn0Chc^V8Ed3c_o&!iB>q+y}CjQCv4RY`y_=I z@8H6&kG*`%C&Q+h-2CZ!` z9jGAJr^%!=Pp)`e=I5r4*Y*4VY6R`~^sOt&c5n3K-v4_1w2?o4KdSXMyzq7(JFJ-Q zDes_reV#z`y(?o++ZW7DUa6xHAH#ANubZ7@MaT?FWI$@-G~h3LpT=czur*j z-Yh&t`!4xkzH>##DjkJl=hvmz?}MtOI{%|l2bZ0H8ujl!p^b|BpBsfd^xlZFlG!)F z^6EM`v!64t5dmQtMP^D3FoLkxc3JlLrF;CAmpDYilO)>>{;Bg11Y!bcyH-TZo%-iK zgsdxChU^kRu`jcM)GLvG$9!~7^ym5D>loe*9bYYC0Q`y#2j|r%Vyj^Lq=NS=W`d4I zi|I)Z`bhEcTs#f1=LdYUM>du_hEO`*2Eqm+vt8f+gR^p0vk^6BBoYBZxLv)sd7YBj z7+`TuyGz1Pb0J{~gAVG*y=fXzp{%A}nSOQ|t}g2RB?ouj{bls*J(RS3S0j@Vq>p0p z1o^TrT%$#pnj4gm>&ebZhX?EE{7v9WL%XTO$b$DuZ*a38bI|V-@y_q#hv&kKt6mt%K-amNQ+NBR&+9ctJ4*g!{=^m#nO&~}^8#y{7hjU;A<>BnN25z?2j z#!bO0h*ZzM0c23$%~iFO05%89f@F>(?IgND_HOmHdk5zoj|;-{f6}3k&x>3|AWNRH z$zjqVHSFu{))K#4@%LG@;b0Bu97J`>v128Uy>feEZH@6*1H+1#m>A>bX1}8-Len3wg}obp5JHqztJJx z&GgXXJ+sZA1^h7&S$)>YTNWEk&opK}`yZVLG_yB+`4@~kw_*)94>=NKoDT}i%vktd zQ9S9kppIx+xhsm({aC-rkBVI`NEC4BX^&d(*Pn@{_H=hU4*&w$HB}6dC_LrUW@P)1)1Rg zJFfqqZIN`y*(RGq$P6d8XXkx9%tjJj{vw*xzrdXY@9KAo`C~Y3|Bdm#Q^Zc>!T$r@ z{8JbI(X12;cHo(`NMM7{G&k^X7+kseCzD-PTuu(0_$*@wlIzSQU<@?<;kVD|o0KbK zXZxI$%WgNRFi|F<}A@?%MGz4NgafxHZ7bQnf8*awNX2UQ?N*W59fm*PP z(>V)a6g0$4apvkd_fWbfo`b$joJBE!6f=~H)Vee#cYpdKq%QL^w?Q^{IXGZ#nZccp`2D3Bl?k&8W^%Tra&yEw+uTqlD| zErp+nnO?KKDrt8uP3tsamioxSMDwI8q=#P4y6mUYFbS2Mx$Fa|!L{4ts=jhd{hBSE zQ2iXfJX!Na?kgN<A(&oIYuRh@Ctq$08vr=~?0 zicEp`Bgjyxv7X~0rB@l1Nh~&9#<4Yf+!&2~)XH4;@X@L2Nyb1%2d7&&aez3p;@Wa?I1Uq(My4O-gpMOD$tG z6N8ndcu(Eoq{cj7u>L5R+%xBOeU=<_Fx%zh^4SFtaq0*2q0%SFI$o_--BCe+a!(+g zFD<8x>ud*1O2h<}<;X~KsLj8XE%dEFs?9@kvi;<%GqouJ(ZO_GSB>&*&o*~NQi>{x zJrt1H&?MPQe98v>wd{yilxdN_GK~0{Jq! z-#Adg&@_UFyDa#DgFp_lj99nhik}4Ytt#SrPl=`o=CR`)FFU&8e_;@#Go4jT*j(CzxG%GKi=8XaUb*Cy*jH$ zVgjPKgZBIuMG6cnReVawyOYj^2`)RX)akA;aoopHXnS!h-M!PUFy~+SyP1$ zxxb#C6$)84xp-a8?tBjU`MZ;z{^q^U{*9K$Hxg)_)IZJp?+&ADk{oQBJIOB8?B8ql zXe?oiGx*I%cYb%?o6)HBeUY4|mhN$xqeD-Zv$)u&PiA z(RH0i>>>s5b_sRQD6vh{mUH-KXHdEcayv9VcxDx9Jt!79H+uOAUu&VO;*MtGnjn@) zZm~dyUx=ygKaR@V;74jp&=uYz8V)RxJW~NcEU6`vgKHcghX&F%%K7249J#WA0zGh3 zJ2Em(L+|0Bki05YPtax-`X5(Iwv8emy;HMaEs4cXW@uZ9CMK7v5l(hU7Mp7`ZaB|6 ztDc(pf{zifrmAq%{Epm_;?rK}xJ~Vkif6;acka;(80^qT9`%n;FP1C@Bsph{Dg-}e zvGUAT`{Z!m>qg2qKusQEa`um=^DN4$2GPVh#l_i48e0I_xg5kz#i3Nf@-;x=+vR(( zZ|o?bP7Rk69^ixy26CfoMn@?L``)}uH@Tvt=_BEsIz7TApGRK?KgPY%a_RbXA?R42 zK;+NcNqRTC?{;Xvbrw=cO0M%#H_!Im-cigS#bxCB#HQIr5ZMsBo50llkFzrXD*y`P zs@hbYZw(cq8EDV6lUiIH5Vm>RpqaWti3@+8HL;LMY0?!x%UDZ;IJZj&0+(xg{3`dX z%9zJ_t(VQdH1-=A5zB!bJ0*FsJE=JDzB~WX10RQCyhJef`Zr9=czoyTFYoop+`Y(e zJObm|Tnp8Aw%2;i$~a%vM8MPX`&! z!=m&vVZn>Q+U0mN(|F)hBdoqE&!yAY{b3zPgt@&H>4LeKpJ9FC!h`p->pTzds9DWs z^7(6>G*!pY?gsRbXE!%-^R;71u77JBZ(Pjqhd$`UC95Me`ezFbV!JQ(-XS-&DH-gd z(3t@}e(XoLVO}(|bDNskH-1z&G1gfrydCBGNxX0T8_H!+2uuSp{Th9;$MFrsI!hc8 zk3m{W@#Z8_*-QlJ<=T20P$HlR^o63f-MgKOoFb@zWt6s%YO9grUl{C_~c zi9& zVG*DFNnT`s;c_EwkLT3(RsNo4=pGNx?fg_0p&(iXRSEjNaTmjv@bb3m-)uI$(R3AkC7k8Gas3i?-u9c zh|Hdg;`@b{m>+~ffer=xKf7ru zzC%1utrUOC~*vfb?LnZuVc#Basc&3mRrUDXjo<~O3$Ujnt zur#X-Z?Q1hQsz!QfBEb{@0Q6ymAUX#U8To0y0*hA_C|V55IN`O*YaDdYU{36>7QCGO8%R0f`W`m`X{L#jgpB%gb1I-+YoT@+gwRyS1yA(_7y@?F%SPE&tl%}S3a zEjP1f4D@735TCrYcj1D?0;70{=WX@R9v9i&&4Abx9PBEoZ7E_~| zW1ZFdg*Bf*We$tXibP`QY!Ul&D6yCRIVbD(_8g&Hg^*X5?F%dVM8@8NP5T|SES1Zx zq_jxRWv)odXc}`%Z>E(FZOT)b>}WETbl%NLxAEx4Q5hS=w;<{*#njGt$YZm{Ov+Z# zltE7lYGc#lb&495rw!4FbJ$O#_tEutC-A1V1t-YZa)9~8BRtyYqrz}F7y&+6;pR;= z6sI6CxOD!W^-YVGitguz(McO@ZQ7!$Cu3fpiA~w^v3S&|OWlJv^tBi1xL|#P$1BlM z<@K)LSMAxPDM%i}F~h6wfHR3Uhqvo}MvJ%&d&{cQYrn4VHS%m6H{5{NBW!Dqr?Ww$ zdS`9YoNo+Xn-zxN&t`&#G5Eb+ZmemE;7C-}YtvUw=Q3fg%shM4DB$7y)sJt#7Obu` zg6E6t$so<)i_41%YdhN0#wW~32^oa3v$(GGoFu!TL(l^6cPUlP+E=S&@FRo80(BG^ z#R8Qx%~jOIGjbV#vd}cN9w=JQ+>SYX^tqySWEW76ysI?a$p3+(-r!mdseLyec1iI7 zW83r+;toD%3<4?_+|qW25LDc!KDI}^#UOhAyKoiy?-$bN>&q;U57w@v#@=gn9U%Ez z_uIaIf7Hu99@Ep}s>cRqOfywyopY{#mk;)6;_!^fdSc?o&q3S(z@BKOZ2g)GHWWn*WYo~W5q z!d@Ok-AYHqOwj$%Y31x`j+%sO)sv@6HV(6VHU^5p{E5`a{$OMNNGn{S!izn3AO}B)JsmQKy1@9W>WSo;^OK=x0-hI+uYYH9AVjq)*S{aQpImFks`rbuoQAHtAcC` zBTGk>$lcP*(bvc?&eUYDZkt9l^+{+VcZ*=DQ3QppQW*P*|G`e zNT{mHpUF#9IYK`REz&!NTLDY{(`?TfjhK2y~nu1VaqPI+lOzT{nS=4kQ9RJ2Mt298{ zvM(mNrZk>98776-^@#7|8VWN1aza~&`c_EWOC#|OayJo0Hc?!%D8U!YYs^<#P{4o; z`oO!YAuZm_c)uezDEJVUMmaeDXLpAIV31gzM{ zIR;ERH_tQ%dY`-izwuN)dZ(gGz8?bnT4+m*D@5ao4y#&MV4`y8M#kTRI3Q?9`KuPy z);hSX!LCpNrzjZFlgeIJI=}dk!%0$R_MybrUvqRCLpY$~v!@yLRSa1x+P;qSoW-oNYbD2Z0X8&s`|OIs`LXX>!j-=lx0w8Gbq$dexyaPS>>+;!#x*TYVA= zG2%+!a{`QX@7_z0V}Q}F1~39gYQBnfr%lVtE|)%%k+mBGc;fnv3f)-hOE|}&*2c>d z6^0t=MugZp?6GoSR5+Z-?L0=sNp!`M3R%>IQbKIRiX&aGTw%Yx+?On*6PzngKz|_2 z_DE{Ga*KT8MzOt;Sp5`KSzmZ>!s+Aw0Z*2(cKJ!D5z{6iyC%^PP$twq9AA~D$NU8K zQ67r`OQ-_EyW%CKjKV3IP}vb)SIx>U^t0lQPuDd`uaU86sH`(7&E5> zSs$x$S_i+mU$ZmMeP3cxmbVnl2eZ591@mQgv$7wjHfL-q0VXZCk?iEamU^Lfc z-2fu)A7eztM%J_KAyLlgU3(_y?P8wf9aKFC1WH?Q=v0av!)CV z9uu#E!}DY!_5A?DA@gE%SfnvUoB9Cl1!DKQp7P*6eXlIW1UudQV~M=BOq1Ngn#nwu z-SNOmK%Ir<5f1qYcX>(?^yRA;%A;Mi1RuO<(v=50G<~vaEs+vrWCK6wlFD#2we3c6 zGJV5PAj}OL)(W`p3BgL9@Qe3J(J+M4Pd?xwsfo23fZfL7Yx&Ph&2ha{X6T%~j0}W# z`O6SZxvcw)YL2W9OH%BUkrEpjR{LY5*OVhMK@AS(kdF41X&Nj-)l$+W%~ijnUvf<$ zQe1yq3m&Al+Hg)@Ma9Gk3M>Cqt4u8=E32xaR)a7ruXka$Y;?1ge{C%4K%8AIMBJQi zT}#CeKLN$)y;!Gr3?R{2;YM0V6~#VG|MoQ_UU;>B0vv3)8@)j&P&gW&9|Sj_i+nr0 zo?(#zrn7okVna5TIGx3DZH`d4U)6&dZy9GBy;UxW=}vPn(4SA;QLG!NaN`s^&WP!= zSI8X#9BjGxx!o9Qppl_c_V>@=MtrQZ6Ib z!r~FAA6w(J!;zB3>Q>+6 z9E{k%Z$&tGdHdQlE1v;s5>pr5r!evR*%`e0ED{U!7305-t6Sd9H8UQI9(l86#jmlM zGGi1#C8|wbl&7B*J7vRY!|5M6pn~#WJmz>1UO-F`^}+pfJeXCzOg6;7j^p&@jZMWu z?D>kt!?a#{(@tkohWevV*{QnXbR)Rp*gD@-0J_CoK$In9#1zhx%YQ#&!#j4fGK7qM zT+dAXXh(U}$}$^*H5W?}hyQLr#OQfSdHC0NxpH`3c6QqlW6(lGwoxTUEd3SkqjK5) zbt`GBQxmUdOREO;!;M*WQ8} zf0Lxy$fg4p44SNiWOlZ4IyU4SXF%nz!w+0DMho-m)M`tSmg#i}L&?{97JD|1#>RF% z@;__j;$B8eZd5u7juwu8bf1U^|H3ffG$rRK^y$!lIC2FB4nPq3FS9=;FtE@__=<+Z zKTfgmr-yF&RjH0p(E~0Ey>rce(rHWJN0fstR0yHM6-=QFqOq_u7V4W}LN70bGJeS5 zA^@+dh^DpPS(jpX$EJCfHtIb|3<8qtMy?;Dq`avxp0o^yVAJ$y*NSITlQXl-ok}n{ z@2)U!Wb||{Qt=fR9uv1KYEMbmRFqf8uH2|w8S(dPMuM3+9SUfr6JJe(1!<~+P&S!a zuw7#Fi0KDVC>7F;$HGe@o8d&fGRCq;B5c)cXzBH4fm)pkEBvuOP5->R32ky_{cL;_ zRoE1b*P)aO!Zj}{X5>Mx5%4n-at1QUwYILBp|{~0bpflh@<}-sHTr88RjR!>&Dpex zCGogPQ^V`+S*W9RPb zZI4#1RsXHN+#j{(1zwd!S?Ix5EK+oJlA2G0&evI|=L#f9|HSP$pML!=yV(bQ8l z5joT2?e(RPrei@ikzUq8Z*{Oso!F#TIW8VXomR_ETi?YZ4KYB8y*=Mh={C zMz87xD1Qf|pi;L|DZ^6Pe4gf3wM*S=QH?Ji4WnHIK zH!n0CXKtSmnTyIJRpcqzL>2ZeEb!JmleypI>u}G1@kqJY$|xjQm#NC#G5}|(a~$E| zv>yqT{Dtv(WP)@Vh{Go+iikm9fB4)2Sz$GLq$GQwtzQ`SxJKQP2~XB}0RxI2R}(q! zpJ50}V-U>oD`DJMSNcta_K$sicX+#N8S%RwKkL|^ng}?K4E6DTMhcr2NT>$qXfJ{8B;>Y$Ta7hR_XvZ!P6W>@co8+SN7@auKfJzeK zwh6SnKUyCjV@2#XJmT3jt_mwykO$LNc6Hb=QOm{2Fux9el-a>bqD{+hz8t76Lf^tK zZlECUMJp~TX>2w?LF7WFzdGRJdP8sfI`5FUhhJ`bl8EzkDC0+YUU|sqC2D`QqUMlF zF@U}rC>u%{K#1%W9to`pcs>oyc-_57VXyyH=V30CcHX?m5Rw{quWKd>LY`q@_L-oF zSux%|XI)EUb~KWy59ft}Wc!0{II)6UPFO3+2@n>`vZVl1)TuC?!s+LkLZw&ha(#UQ zDtMvB=Fg4il|nKWIi^xtkR4W)7%iFghC&b=QKxy)R?Q+sq#JtJtYKYQb%82UZE~Mw z)ui)tr4jq#)L$<9AZQ;%?^zt?(!P2P6yq0V@t*=WXB}m*f#~pC+6)l(c6ti!i%`( z+0vO)hxV1Jy4IaM?d3Tm{d(qlrJy^&K)W;2>Q7yRH6iO^Z|ZVcX>J;@d3nr;GL-E;~%uIjI4h| zT!<+B!ob#O&^$d^n>#q4jXzKJL2WZ&Vt|q>&t`0!4T3#;=XVD^481z9PByB0`)+rz z!{}&}1qeZi%Ybu!*W#V6zQ*N)dY%Jebdjh@wg2?er=*Gs!p=;|u#>0zP6vj_iFl8$ zWoO$ZFLc0INzRiy!ro{vG~Ku}A9489i|%-xk?c*R&2#WvRgm*0z&*FMMd&su7Envg z)y3Rr;ho#_?N?}5e^7dP*Yl>hY1!-YSa;3z7lyOn^wloUe6d86sqLA$pgkYw#blW` zXjG(Sq{GM70K7*LI@KI>cAM0i@$$G*?8C%i9w1VsM;fg%1HaoP^t;7hpE9w?uke!PYX#a-{y*>@9}hFxI1pm9FZAHD2q@ zV={`DGmHg`y#mOK4`-^(hyA}W?g|#vXVbj>a25wRkG&@~;D(2#^!qDCyFkIhYz;q99xDZyLh6#K0p@T|b=YfHN z!EL_FKkQK~yL*^A!Gn^E&=_L_Bb~rdQ^S6Cps;*!(DCoH^675_k*eB*4P(1UmNzL4 zyhmb_@+x$8=9%>*&;?!jaA$EaV@}?~%NA>U?RZd{n!Bo>{p}ArBDQwSkdr52Avuq= z2@>^<?4ns5fnZdIMkkpdWWWF18#A-l9_d6Okr8{})7Pq0pnW~`0sQ?Y4vG$(hVI6cRGmK?=s~zB7Mah zQwEaKsgti$piO7zOtz0a^ja~Q@w}*S5cv9}_ga3SVW6S+s<*cn%^z`baTmS4?H7Mr zV!sbeu$$qbv4y?O=r#@ubxqZj&;53&j6I<>RE8QhEF(mnM=mem>7v-rN>?0el5oI_ zSa#f6OqL=Kdj>d-ye(S@M85<*BfM>($IntD0q9D20CbI2BO3crNdqj|h1%o)Fa{!| z!V2V&0iU7^weFDBg$sD0s1(hqEv z)RngC@{#i3mg8~l`g$Ah@b_w1b`lG3|HDG^>mq=G5`*bhZp5z11hu$NeU8zvwi;i* zpIqJkKL#fV=*3N=TXlmskLfMl{H4dEPd^CO|At4u1J!a6BD=o>cIcgYi<`uF<$h%A zdTrBp4Qf6>O$n`Hw#f*KbrLV)#=8Iq*GSP8E1Fg3B)r=>R4v zg=2~3Sy9QYm&S^Q1k6kOBy-zO7S3*Tm4R*>2PH=(Q5nZ)K~rYCVAJa>?t(G?4zXq) z2N<5a9vW(O+k&P>mzp1iI~=JWaca?LjsvSXslngR$c88Qt%}9{LW1YkLPw3|uzjlO ze#cmm60Qm-F7GB=%Fid$AgPZ485jozX{<$`Rq;c?s zjT6?%L;cV+!N%QHq+ujg#WJ4-9vkdoRG$cmC2gYNweE|9uXLMlaS6`WP0ialCI!3L zXzhimf}rMUM92u}c1m%!o$FlQdkJp%%`#4&iKv(tm>eN3KjaSOc zjqZL|vfqm|Wk`H|pgKC8_f9fEzP6zsw=(~oBUtBpRnd99=7%6Y$dn_3;w2A7s%4u% zy_Ih3QTP#Q3Ij$Zc1^cEZTi&i^7#kEkAh`m^w-TkyrY0f=Les~(ihY+Zdy_kXK-aJu{n=al84><} z)qDE)Ar~} znHAbO?6#D#T|K!hB-h_Bd|#zBXNRYoFTqbiQn0g|wJvEn=SI8u3KnKl2i< ze0%Glp04`-(f+5h4|>xv-^VG0_^EJ}hyigJ2Z;1Bt*7$P-w~! z$|-w(nIkcY!uilBp328dib#BI33X_4XZ;puM74q>wo;yVqYcZT55-SdfnG~x%3228 zP9UYt62x8oiSsSk#(u#mmK2Bp8Lmq3<2$J-Su+>Ij|Ro$iaI zzgs>HkGL^Ppo+&ZkFR3*ZV?YfnN(q2QA_-lj}!~suO*;6duKl_!vB|nov($rGj$s= ztUVb_j4Sgg-Y!NIPu7gD15|?dnHUQbn53VUHh;=)RA|H!<_hO(upKF;Ia^o!rUDXR zk6?Yg@Ny2<&psYOJF^Iaj-&wlTxD{FX$}yn3>!=+N5Z9dcNcR6*Wl0jSjSFkjO1}? zVC6)vrmJzxwBG;@#EC!XMpc~SzvxJ$w+>70AEiZjo~4{uVQmcZm^cl}4lQ_N5_@d% zYmLYouNxa1Wjm7^VM))@s3?4*8k7+|4XaV%=a{E4ByJEd&ASbf1St7(^#+I~R7B%4 zk?DL#a+Nfyfm}Qb{u@1+JQD7QasGTC&FA2nmbJiz4zDyLSPAq-6A*c9YC6md_Mh$x z0WXF_R zT|$oS&<4|VK^m~wl&G?;f0F)6Uap1zi0vhC9=`>mI)qttL6SVZ%V+H=)c|W_H2I90O zK-eDD;hfE`y56uMJkLd|eqa7U`Q;yWr2KBjFCeA-`c*cOzg#mhqJ|m1{aRV$Fyzen zE9z;C;yG3ZK8ecn@nzB&dWbpiLRf$_JTCuJjdG&0eO%J{3;uYj$HNuuNmR#JjUd&& zX4yl}>AMVt78z1R%y&C#(J`T z6=l-ps756YBYI7h;FSaxr&W8Yi>7$k?6S67!+K8ZzEMdp3L znxdv=9(VGjl0JKgI-Bv^m`6u*5=4Ln%RoMzF$UW}!3~k<@Z_p;LLyJP(OqF7HzxQJ zT&Hf3Mq|>(t+C-er_qAbE&8!iTYp15iL1d3o|hAPh!*R}SU>rC?aIT2S^0@ob5+MU z{aOG&0(-65kg>nJQh1&K#Ou)drQot=Er4x2DPOKvCn<$PgIYEE3Dc4s<^!yO_mc}$ z$K(wk*WowDHF-JYJMT3GWFxnmpNmnCi_7#g>!VYl8uYFZVXWGmaf*3i{&3~(6-rNn zgGHeiALl}6{2+UUJJxtN++GIcG!Xs}=C2#DF9&!?_pC(4pbVfd}Y~sIhHIb%udfq4gzdTD_An zsDb1m?KA0~rOoXG_zqlt@p1$7W{Pk<9=0(%JB4@N3^97NL-yF zH-wDb{WXllYObfo4u3%YeA6Xov1TxFA7)^qxF;}~RN?DSoYiHHw_1Pf4}7-=5D1LK z*IdM}9mdI?km1=+oOPPNZxHm%PA44?nUlYIN_KD>N*}@!+*Zh}#k$VRTka9)&e`{e zC+49n64S6E*z!rq0egu0MigWRC?r)-Hvv|J^y@c;6tF$}^a4D_n#794YswHc)R@t@ z_%x#}LWdXi+2#^{-7}QzK>rN)Xsydj7&Bn3^zEBTGcO%Lnw z1uZq%RLyCpMvSSF@YtqC2Jhn@V1#qFOsS%I;hb~rsqm;!b)R4ToXMoJDn46Xz{@Z@ z_jzjjtMbe z>8B7b2)~PEu(C?S2dt=6%AI*@IVA1(x?Xzo`j#M2;Z{?lRnv5NmAcdD)C?sPWJ892 zL{4Y2W!DPKcXV?gO5pw7dPh5<`K)7n9Ma2cYAeC?6nmbEN zCpsjPArvx|)?e#6?(Hv4>T9I2unpQvAf?mJ8>Ql+%++lrv-Ir-2ZYGpX+3L9c_`{? z4%WC;Ex^^?M-q?A9jy0N{RtbGRfF$FA!&#=i#TYtnb>(|7*6-e*3=`5223v~YFsbF z)A_Pq^jvN!Iw6P+6%FcL7VSKS2=~_0b8-1qS&6ZD8!Ad=DWU+r)Z>M3s?9GujUQdIyBBs!1N$|@ciY&$0!lNHXEWnu=_iB+Q zno+#eWp=$ye=pmRhfXKxweE09if9HKa^OT>tY3!t{nc%i8xazUDr8C8Z!S;Pw3) z$5+Jpfyc9%I-%Ke^V6B+@a-2(RkdPnE_;ufj7`lZFT&KtUd}uo-cal)vco=}|F-51 z8z(G*wu>>;&6ijtBLQ@Sdm2iP?`Bl^RiRne4_GeOW6Rw{8SnB>OsULr$D_-Sw!^l8 zyU#8^SwYeEkz*J?3K+eBu|%sa*FaIh$H*MGZ^&zg=yV1${i#`rnirD>1k&Vl!6Q%T z)W_vH7skry8=4vul2%oMS^aFkf$f1s*260l6fRFTSd*)}j{DN(sE`&fRJ+GBqegZa zqqC~O2~+b1RU%ZUv5gU{L_@_D#tC)t&hso0se1{1F*`$F-n__9h%@ou%x6Fn%;`JD z&&}RxBCK9~c8W~a*-7x>h~8?I2!1h1cQbeHl1fJnCYm6_1ME2hrYB>BELV;jE#FI5 zrE%zhnvg&XRG7>|fxcZ4vQN1V77BV}S7M(`UR4;gU&>Tx`Pao16J#mH7Cf}gJE1#o zLOaHJPo7dqtP%c`v}X)6f!c% zuNQ=;zndesVv(p8lWks;Kx$~U78Hxj`K29osNWgh^Th#)cLvdHR1!Stk z*MX4;n#rOT!5s202ey;WOI>5E(cQC^t`oDbS9f~_MO6%=2fX{^Mq$@#N#8JmZQ=z~hIw(RNcf>N%n9S&HRwjT~(Bi5P z9|I}mJrT3)nLlZ{J>f8`Zg~o(10tGM^7->)4UN}I8-~oRv@tVs_Bpj%7ZH{pO9YNk zTIBQdyRi_8K9am-;F4SEU}HYp%o^eq_;&qkBXImHlM}i=rC~WjJ}&GjuhF)HdTA3< zzJq4VA{VqbYKV!7-?dnTg(IJ;=oM9>g;CXN{d2wBg&S6p$siqH%I6Y(y?#XJiXRw zyE!OSoK(9pTCS-bkH$F!l2ZtLhS=Cj5=>ks7`lqZ9u@d7MJw{h;*t+|m~;QOKoksZ z>lLB+6WQq-F2Q=>d^i6-oNs%r~tl&fh((pR>q#ZC|AYs7M zb087DWRRe391r3$ZIBS|e>R^Sx&r9J5m5t2G_#k;CJhu? zTPO-+T46h~8#HWndPU_^eb?jVx=*cJtA=3uF3DXIkA_ZzB#S=6b#3REzGCFARq7ta zl(i+2Pw=5JqZ7au$d#o?cvlw`9dm;REbqekAw$n_wEG`E-3RR*PrgS@p-My#zCArDXLMY;PT_=vXdg zt&tGX6Nu54C*?^}{>`}yf|(Bni!Jp-LwBv3+b(GwM8XgTBeD+krnMDv&>C${ z)iLHnieyD;z^2}n5njsKP^Z!vm-FbPnk=cVvV=i_=;Z9(@yw01w5^A?;9#{``1>8f z97kf#ss0Z{FDXK_fuZJV3Wa4B4_&xf^>jwjH1LG#KIq*mr4Q{sjOY?;)ov=yhbyTS z1=Ai|@OW6N$ug%KnQoQsg;ks`TD7LXcIX+h3UxmZv7@?er~-;)|F$I87G%yCvC&-P zdOvNwc#SSXR=G7K$6*3KkhudEaZHX?+HQ)>KywWZEKQXO04`b!1|E3Kg&-7n(zi=6 zSz&0X4;s*x37rG@lWV(^@JtG4DQJ(5>VS;-{EA}=U(I|>M!QTr8}6`1$k~A$NSX@f zOnpb=c*l(I=k>%`^iNbn^%$YT3&_%{oJnQBLQUQlt`UbJI@Sq7(vEfYoD2=!LS3PY zA@k^|-XsmOC)E>oNec|LEXOh}%Pqs&xrBGK?js?sovp>L@W0S&UW8Q>_P3VX)j<8ku%3a*1XoD186)ysAf%> zYOWoj2{n{rCPoL_QG@il7KrHKJ-LK;Ss|6}ZaR&rhHa>nj5heLsD!6V zi9=ZdxEG)Rj(i%eD+GHYG3+nlzfhvkt`FEABP%jwk%o#|A=38Z9mnSdLStd$U(}>; zhr3#hR&O2g*1waEg4qulj>PLo5<3A3C`cFX4FX z4ei;izWTB}*`&Z_Wj$J_S@2aacbk7TziE$iEXo|Km$aQM5wFS;|E1@6-PP6k6aR%4Np39>?Ef9?GoAd7Qp|GWc&Xc6P6&+Zm1G&d=gH7h^TywAZIb3~)5zit?w z*b9vs-=MbZCfDwrE06ay_>#+K*0kEl0@W5Ea(F-uG8*4jZpunRyxNiw;))IJyH#N< z0|V|IYJEKstQP9)YI=t;HdgT;i*YaCdjlV@j;J2il~&MKlfLCI5@uY|3N$bzC%@fX zSZ9a7Cin@uCGisCp6&xWJlm2}A%>DVuLuQ;RZ zTa}fL$vzxiN*n+<`&^ARK!CEb=G@mH{smQZ%Mx{+*@Q>7ReDZQe`S|@Z+5mmkze<6 zL$?05jo$MQR;)77#V;Prh|o;z92;JZucy0evfIFdsUfKF) z9laU@Q68hK@Acw?WgM`jhxfkUJki#1HdgVih|CG6Ng54}KQJn+MQPKuEPFoJy|>P5 zTspa3Ok)f!R7H7}`2)07HAjIua62|7TvKOAa?V$I^UO#CeN&nxD?fX%A?;*e%j{fC zhk&Pe&FB^VAlyPa$1oPfC&b|#_2Fi&Jbu(R3+-f1&76hl6F_=^2VgfEZI+!ItIJoKnvD14N=T2|9zZU)eTr@_EDK6} zE#3U0n6q>fODm!u-O?`F?`ibXSbP7D!f8d==A-OI>XJlE*OlPBnn|6(>XdNTAcuCy z8|~@3L2kYqpLY(C(>2Cf>E*`tZb^VBJA%Y#&NQ;M&0s%=bs?5;G;p#&DA>_PbX>S8 zmpNx*vx%Q8<-VMbfN0m8$oNG`@=$3Q^+399K`JaELZ5?lZ$&OnR(nYDqE<}==7F^G zNUH(*i)fjRkxUKolY2hBU0)2}e#SlUuI|Li1bl&gK+Gv~(N}p=_RW+FPVJ+#0nM8S zu>|Gzv2+*p zWnKh(<#wzwU+PuPFA=*vCu+qWZ;T2EN*^3>4n1%yke$H5&nzc}?Ve_7CcU0-PX9=1dlRPH=jgsqB#n0_^yg`Ll zMhM+&M&)*=QuFxID(~Sr!D@q$br866tf@jvYg$IYt3)&giUwB=Sfyh_meaW5Q#+fI ztch{Ge29oOe-5Q8!21Fp+J7bgDFdeGhc+ImKM5r2+IPL6V=P0|WhC0ndde9x&L7U= z-FiLYW?c@NHfk~`VOyD#Am>OBWPYF+lXL=2#p=fbgO{kF?qvpAIfHiNMbD0XsfO|_ z@5I@3Q4jE2Ii*gJlVMw3(mV@_?Ji4FW@KkznrUXs8Jcvx({uGBw>`gJ8z!ao=wvq5 zD_;2SY#exUD&?{PaKqlU5k9bmsUekl1!>-=sk~2pYE{>#a;YfklAaD6~s zecSDUkwo{wdIe@Rh)yeBmFfLyNq?(IJ8K)*MRb8En{;k^3%7#6BZp5jv+zjJ_oPyF z*~nEbZT%L%4??UmLFz<}Nxc~?CrukgpO68{Vmr@I?}XMj=^1F0&L$O5v62PmBvZE) z>IyuZ@fB#Q2)Cp(F$YDjesAs#f3^Osn@^0!cwPFpUM)`L@{+{<7nN?aDp?XRF-TX< zUir>TGJlu|k#R9qIp(8Xv}IIGNRKWR7lnE-BH~3K7t4eW+k>EhOQ5-y-E1~FK#DR? z8d&2t;GYzPDO5NZaG8-ev~d;C^GM$V7!VgH>~L_IW=9#DASWZeS;KWmW<9ovBq&6Y zyQFK>V44Iv(vO|1bIjyuefKpy=P{qCR^M^5dGiUu2EZvD2g_qPzIA-93Ai2v2Fo#V z6DK2Hi8l4Ap5L_`h#v?}FU_+rkB$kmfL~6)@CNXg5Yjr8I*eg5QaCV=)b znk8pVgY8{Mn}AidoiY{7jzz?;c1%MPMH}O4eACk0y+cFpfly!Rt9Cgxd{D7>v9CMG zf&Z2KmeG2Lni0w-rkp)}v0D|D2bvw0L3hUC5Joul{J{Z2Hy@woio_QG9&Ft3%)Ye{ z@NS=n!r@$O`ho$G5QT`r8B*H%jE&R@DjASb1p-nrUcODLFU5BUfLl`T*vcg6%0}#D zAPj+MUOC2_p2VsHU&_oac)JVi(3GG#x>~%e{8fxHXo{zSMewS)?ZgW9h` z$*&f(x*rNKWu56pMfH`TI&f`nl5YV9)s`De!Zk0{tWoU!$h5#McK454gc(&sLG|%P zAhc2^)j+kO{g=f_H>lMF&+r|RV`5H1Cja(@w=TB?FcTL$j4}=m8TlI#eHP@btt5DC zZ#M{t5~%t<;E5o~lXqd`GgQ~HWAj**0@IaF%zpt037Cf}Bg z6rQCF$>X?((R^T?1Q3s>V#@0aNsD#JJE5RW^Nc_9GqqhAHeN%Woqaz$`nquy2veYR zRa{&=?U~{07GZkaeHv2(aUB^M^&zkCW+n!u(;^j^xy_eZBdtSGG>F@xVqQOdL_IR? zwHRittLH7<$P-M5(Xx$|@Gma6DGi5t`e;P(t22W1o5w8YMYQ+1JWC1NdUtJ8ML0$4 z8TEu7@-zxiG;zI7*b*R#k0&_Np&H(%X3QD$)e(b4z+UV=baNWE1n%^_&!j%9}I2U4cSdb0+a~ zgpLiKJ2DKp1rxloTi~f#y%qb{qf?DxSEf#p!qdI!5!BoIG6tujc(kWteQ3m?^myV~ z@19BxzF$fS9qMpG$t>8nW7nNjq*{gUDXyizJLjmRLN)sVv*n@yRySsH{3g6@I;~AG z%N_32{}2SO$R~ZXEibAnEVrSg`dWlT3U_IG;At?|D+LsJg}GRui9Ig9@lLjDNRRBIIeaj-tS%g#CiU#Ew5SYa@Y&COFW2q_e-|*%;YDIebm?j zll_9dKz+#>@$`RrZQ$Q7o&M*gQ?Uro*h6)%=o;_J$%Tq}sW&-BH*0Utz115^KW$rLv0ly{hIt3!f9pAOvq;b(}t7`K+Q)nblUY zd7I)mB{I;L7>k1GFah@#_k-)xN4&ncM~IItSfyJ3xwbhb?*AO};_pLNVuw8Y`;gNA zIwaz%!D^ob?kGq-H*p!Z`~a_pZ*`B%8aEl=-kcuML7sCVih0RZ#zd6a~FDLoOLa&H|ejd6m-{hiwex6f* zA&I~$!ZB24)ev7jo1FKuS@&7#2p6Fj*;>q{As$yfdpRL6PsZO@S`@&z`MGa?iud`o^p~v0Lp%4trq**YUU1L-C1XrW+C;|OJMnbL*SlDe*K^t@ zIDn4lxcJFpkLQYV&O|OHXK^>fZ;W5Bm_*?a34hZxRDS8?*;uwLuheso<@-v*Py*MA zr0V(ibIGHPQU8sNecIt#Hdt~j$JB5(s}<&TEPIG(lIJ&|0V$Z{c8EJe7ZspJiK>tL zmtPCs2)T|uOo{Xih`rRqn!LZ+$TaqYz2_2f!u>!}O5v(BjGLQ-@GXkU0$%?SN{a)a zj#*fM9{@LAZc+6)4?kZPChw{-_qDd@=IKxTWw{ zXLU`fseGcYWCqpN&eOHX=q|>vn1`~1;`RwDIUo^HZR@IS$k#-0L)6z#cV&u|AB2wf zDR#;5@vRwAH}GyR_Vg#_8Z`Bf=Nd#?TZ8zvbu(3XPFeS{dHNzKB%XqCV-3;cS|Tp^BP zyu$mCwLW7HjryH2AeHN|?~C%tP&R2fa_#gjJ|F|b+b;Ds5|Yln?xkR^8y`h5l%0Qz zQ-ObrhR1&j>-GWv78}Kdn&oGjr$LUo82Ty=uHOv)w5I9f$ccF5Zh81(i0 z|6M$u`mf{h{~!hYPvY@EUGu*W$aw!5i-+Et`*~w)8%)>(f8tF3GliV2U|RltvR#V( z9~#A}qxwpR@}k1S#}m`O7cm0`Qr3&a{WNEhZ%lqby$hfnmBNG#~2F)NaX z?_BfQd&0*p$91(wlbnKi8O68fV$JG{tUn{>PxGeq3&f(OnADFa$nM?j%m<5V>>lB# z^4MoaZbJ%~J1e@E0dnI7yQ(Rp3x%a3Mu&l;lT*4ZDq zl$!WzD%uQnPYS^aXM;F|>2KEEVJ`O1!XJCOeQ6)F?&nEjn(}pAd?Lw%>~+1q;lrmK zEcfJ&Y>dxEqx+KWQb+;jqtVD%iq9>#_C{mvkhK*?J-87fX0M+{BBGO0hYu?h+ zbhpq8e(^^`l2V0;lk50pEQOeH(*pdcEGD-k|KS{YS@p=4FP@h#jNO>SFNs|9Ee*?; zx{d4-H#52B>6P%?vJ=~<9j82Y)9VRmr1xUo96h-lay1r$g>G5N7>v+i=@rT708eT9 zyK$=*3EtlkuccvP{$_=|9UvL29^@7CCPH1w8HFX{3q+pYi+zuSgX2bY!@rjFc@Lp5 z?TsE{PYbzFQT`LqtwsodWT+o zSh;%S7#A+$I`aKI=NpcNffA18TfEOVS8_iR#Z;{3-4;{azBRZs0u@1R?mQXNYK=t> z5Ec5<$EI`RB;PSRy_Q+kUYfaPyRNPo-_Jcbk}3MCu(JN)GbLT{>Px!p<-nb%5-%^L z==nvnjsqlZn{Nb7OSHwElZDxQ&%WsW^Y58?5Ie3)%KmSDZtk2oUf3fr;wMgN>516p z55M7U&)e;?`7?-P_;Bp_{l8!9*YHQQH znh@I(s7WDIN`nJ+5@|<)iZcg=qN74U#DNnD1Se7u4fs(|1ivr?9ayP|B3iYCD$mfQ zCQ{S1n2)}^yxe#1J=_0pt-a1UPwQ^Z*?X_`Uu*sM+8<}X+baE^a`3seUF}?bEaiMO zrD`Qrd5@qw^epHZ>Df|p-qKBUEB%*?!m0{PHC6j|RplEgR~PkM5a^}N)Sfwi>W;Uz zdhwo_4HXBU%kRl^w@&7iKPx$e-n9%#IU!&oMI~iNsw0n19qSX;dS>I`G_G=WdcN9r z;_Rtv9XC<7kbL+HHxJ782T~pg05t)tf^>2vNJqfYt{YmqQDoBxkv+ra*BxxhcuK2v zm5%@Y)biQz)R8O%e=o%n${;ojY;EUP>`Qj6Cq)7GHm)C%2%^+hI;Z4T#a|oKIvshv z5H%!I+|I4PEXaXj04%ybsVolr%vhKnW7AEhC?eP!o1{y;8m2R#;}{6VZPc!+)ou0C zVWz$|1#2(|L5z%EYRxOzP+uLB>qYGuajX-<#^u;Kw&2uh&93)h>nHaFA%{&2PW=Nn zr?*a;gk3xvRhQIRa1de-!r(ss&?tRmZ=L2FMkhxI3lK6Jn<>5c*ID|@KU#^MCIo6> zpFA{|R(4fsBwHIW z9v!7G|7enadv4}~*8q_h%tD^j$7=PCnn0=dR0GKA(fgb9`2IRg6ksBIo+Gdw#|-3eSe=3tmDe zIqVN)tScM`0W#Z>2wc>~2Uv=3L)~D4gXqZtPQ8rifbYJqwkG>bv}95G7+};9Br?hF zWSa3b)X}z#79W9kukM%6-b_54WDJm~Ub=gsrJ0lz-8&lrQ7zfK1qzuZQkZvcE3|~S zZWmk0ETaNIHnMALn>akuvHLf5c4`y%!f+u>ZGp%@q_;T!`76_snc_?K;Wx%YpF;5K zw^F+BCYUPy`fpRif@5O@Im5cf?evD$>KlAgX;D0*HiO0`Yg3j;R4jT(9h(L_TsY6yxk*@ZBe%+dMqY=cB5oGs{D$QwOFbH)G$iVf<3Olcd7^#fr- zM{!ILWt#coT)s9ySkwDCPHv0oww8g8K%Yr{aR}msELVX(}JQr%F4Q8=KKn*OjSO*uSp;JK%GwhRF_K??vGC$ZqmJX z@+}8sQ)9Z}3*DiWl+L_7OXn_^{SW~2&C*b^;%IP!j$lkre7H&bMR1}7aTT*G8P}|G zHM1)hZDe{r_E3{{Y=d}}_PxJO_w4MaE4)$<<3JwzPdwPzfNemK(-X;{UCzmVr0zu5 zEnT}fzx)oVd!*W77`1Ig`DFcZ6TkPaI$hO1+`cGb$({ukz&{p4Ic-Xnwrg-KEkDqW zW3l$7Q`V$!1T(=QL1jgjIachdr75>-8>1A^h+;rTrD^nnwf?bw(Rang!*16Odj$Pn z@)JN5&5w~}ae6d};oa|&G>sT!)ixE#5;QW(u(=bqYHXcOflE%@t4A?n5fTUm0F~8_ zwpoz9rrU`@G=vsNjDRY(CrF(jIjqg8bd|CP02>eFag7T?u;C^ir+Z7YKmBYw;%%XdT2T}a$X4yR7EI;zaof3a)5Z;`OwVi%D?gbkBj!{;z2tOBSFk&E1DeiZXD**uvNqL}+|pO{ ztO$}2NMRit2ddU?)7Prq&*&H3X>&=E{-+j4iUz zrvL;?0$^@lyl=LHz9G^$SJV6ID__@7z->Bh>Vm=6AK&5bP%@heveHja5F@agGgUsY z@L@W2+^*NVoId0!kS~4XkWb%y;f}XBf>S+NIw9aHK;vN+4mJ|em)_QjIVfb2$;bwv zDKmoq6AThgKydS6Hs+UpKPWq|UA}s=UOEBZNM3oNT5qTAabY)X>L6jxfGDuu7&GD_ z=@@m?sJ-o2GS}&hNRW}-zHkr>o4&138@a8IC-FjSBxzjx?(*3@YmdmWGAd%0QvXzS zJ53JpX%Fp!=>v&`Hd7F@+Atw2vx9%^2M-APg0Jd|ePsRn3*B$#9Z5hCou4fo7W#SN z#}-@-N=##yQDh26pNzr9f*Q88krhI5@DHcf{dU-~PLSs}MvI4s1i|<=qxD~9`7>*~ znlw5lr$_6mTG4XbBNF_79BzvZ!TeIP)exdk3)kSHjYdW1P10ZJ_NCJSlrCuIU#gqw f88(SSw!Z%ZUzhC#9QlKF00000NkvXXu0mjfG$}gK literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/README.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/README.md new file mode 100644 index 000000000..f0f183aa8 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/README.md @@ -0,0 +1,88 @@ +# 使用AES对称密钥加解密(ArkTS) + +### 介绍 + +本示例主要展示了使用AES对称密钥不同模式加解密(ArkTS)的同步异步方法和C/C++场景 。该工程中展示的代码详细描述可查如下链接。 + +- [使用AES对称密钥(GCM模式)加解密(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-gcm.md) +- [使用AES对称密钥(CCM模式)加解密(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-ccm.md) +- [使用AES对称密钥(CBC模式)加解密(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-cbc.md) +- [使用AES对称密钥(ECB模式)加解密(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-ecb.md) +- [使用AES对称密钥(GCM模式)分段加解密(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-aes-sym-encrypt-decrypt-gcm-by-segment.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例EncryptionDecryptionGuidanceAesArkTs.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── aes_cbc_encryption_decryption + │ │ | ├── aes_cbc_encryption_decryption_asynchronous.ets + │ │ | ├── aes_cbc_encryption_decryption_synchronous.ets + │ │ ├── aes_ccm_encryption_decryption + │ │ | ├── aes_ccm_encryption_decryption_asynchronous.ets + │ │ | ├── aes_ccm_encryption_decryption_synchronous.ets + │ │ ├── aes_ecb_encryption_decryption + │ │ | ├── aes_ecb_encryption_decryption_asynchronous.ets + │ │ | ├── aes_ecb_encryption_decryption_synchronous.ets + │ │ ├── aes_gcm_encryption_decryption + │ │ | ├── aes_gcm_encryption_decryption_asynchronous.ets + │ │ | ├── aes_gcm_encryption_decryption_synchronous.ets + │ │ ├── aes_gcm_seg_encryption_decryption + │ │ | ├── aes_gcm_seg_encryption_decryption_asynchronous.ets + │ │ | ├── aes_gcm_seg_encryption_decryption_synchronous.ets + │ │ ├── Index.ets // 使用AES对称密钥加解密(ArkTS)示例代码 + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── EncryptionDecryptionGuidanceAesArkTs.test.ets // 自动化测试代码 + │ │ └── List.test.ets +``` + +### 相关权限 + +不涉及。 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/build-profile.json5 new file mode 100644 index 000000000..fb5a1ab65 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/build-profile.json5 @@ -0,0 +1,57 @@ +/* + * 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/code-linter.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/.gitignore b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/build-profile.json5 new file mode 100644 index 000000000..e7569e305 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/hvigorfile.ts new file mode 100644 index 000000000..e4f43d546 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/oh-package.json5 new file mode 100644 index 000000000..c9cb6c817 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..edc2839f2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,57 @@ +/* + * 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 { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +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(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * 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'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..cef25aaed --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,90 @@ +/* + * 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 { router } from '@kit.ArkUI'; + +@Entry +@Component +struct Index { + goToSample(url: string): void { + router.pushUrl({ + url: url, + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('pushUrl success'); + }) + } + + build() { + Column({ space: 5 }) { + Text('EncryptionDecryptionGuidanceAesArkTs').fontSize(23).fontWeight(FontWeight.Bolder) + Button($r('app.string.aes_gcm_encryption_decryption_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_asynchronous') + }) + Button($r('app.string.aes_gcm_encryption_decryption_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_synchronous') + }) + Button($r('app.string.aes_ccm_encryption_decryption_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_asynchronous') + }) + Button($r('app.string.aes_ccm_encryption_decryption_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_synchronous') + }) + Button($r('app.string.aes_cbc_encryption_decryption_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_asynchronous') + }) + Button($r('app.string.aes_cbc_encryption_decryption_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_synchronous') + }) + Button($r('app.string.aes_ecb_encryption_decryption_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_asynchronous') + }) + Button($r('app.string.aes_ecb_encryption_decryption_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_synchronous') + }) + Button($r('app.string.aes_gcm_seg_encryption_decryption_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_asynchronous') + }) + Button($r('app.string.aes_gcm_seg_encryption_decryption_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_synchronous') + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_asynchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_asynchronous.ets new file mode 100644 index 000000000..7db8cf200 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_asynchronous.ets @@ -0,0 +1,103 @@ +/* + * 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. + */ + +// [Start cbc_encrypt_decrypt_aes_symkey_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genIvParamsSpec() { + let ivBlob = generateRandom(16); + let ivParamsSpec: cryptoFramework.IvParamsSpec = { + algName: 'IvParamsSpec', + iv: ivBlob + }; + return ivParamsSpec; +} + +let iv = genIvParamsSpec(); + +// 加密消息 +async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('AES128|CBC|PKCS7'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, iv); + let cipherData = await cipher.doFinal(plainText); + return cipherData; +} + +// 解密消息 +async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('AES128|CBC|PKCS7'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, iv); + let decryptData = await decoder.doFinal(cipherText); + return decryptData; +} + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); + let symKey = await aesGenerator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function aesCBC() { + try { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = await genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessagePromise(symKey, plainText); + let decryptText = await decryptMessagePromise(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } + } catch (error) { + console.error(`AES CBC “${error}“, error code: ${error.code}`); + } +} +// [End cbc_encrypt_decrypt_aes_symkey_async] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance Aes ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_cbc_asynchronous')) + .width('70%') + .onClick(() => { + try { + aesCBC(); + this.message = 'AES_CBCAsynchronousSuccess'; + } catch { + this.message = 'AES_CBCAsynchronousFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_synchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_synchronous.ets new file mode 100644 index 000000000..9417d3be7 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_synchronous.ets @@ -0,0 +1,103 @@ +/* + * 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. + */ + +// [Start cbc_encrypt_decrypt_aes_symkey_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genIvParamsSpec() { + let ivBlob = generateRandom(16); + let ivParamsSpec: cryptoFramework.IvParamsSpec = { + algName: 'IvParamsSpec', + iv: ivBlob + }; + return ivParamsSpec; +} + +let iv = genIvParamsSpec(); + +// 加密消息 +function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('AES128|CBC|PKCS7'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, iv); + let cipherData = cipher.doFinalSync(plainText); + return cipherData; +} + +// 解密消息 +function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('AES128|CBC|PKCS7'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, iv); + let decryptData = decoder.doFinalSync(cipherText); + return decryptData; +} + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); + let symKey = aesGenerator.convertKeySync(symKeyBlob); + console.info('convertKeySync success'); + return symKey; +} + +function main() { + try { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessage(symKey, plainText); + let decryptText = decryptMessage(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } + } catch (error) { + console.error(`AES CBC “${error}“, error code: ${error.code}`); + } +} +// [End cbc_encrypt_decrypt_aes_symkey_sync] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance Aes ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_cbc_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'AES_CBCSynchronousSuccess'; + } catch { + this.message = 'AES_CBCSynchronousFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_asynchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_asynchronous.ets new file mode 100644 index 000000000..8bae8f3c8 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_asynchronous.ets @@ -0,0 +1,105 @@ +/* + * 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. + */ + +// [Start ccm_encrypt_decrypt_aes_symkey_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function genCcmParamsSpec() { + let rand: cryptoFramework.Random = cryptoFramework.createRandom(); + let ivBlob: cryptoFramework.DataBlob = rand.generateRandomSync(7); + let aadBlob: cryptoFramework.DataBlob = rand.generateRandomSync(8); + let arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; // 12 bytes + let dataTag = new Uint8Array(arr); + let tagBlob: cryptoFramework.DataBlob = { + data: dataTag + }; + // CCM的authTag在加密时从doFinal结果中获取,在解密时填入init函数的params参数中 + let ccmParamsSpec: cryptoFramework.CcmParamsSpec = { + iv: ivBlob, + aad: aadBlob, + authTag: tagBlob, + algName: 'CcmParamsSpec' + }; + return ccmParamsSpec; +} + +let ccmParams = genCcmParamsSpec(); + +// 加密消息 +async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('AES128|CCM'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, ccmParams); + let encryptUpdate = await cipher.update(plainText); + // ccm模式加密doFinal时传入空,获得tag数据,并更新至ccmParams对象中。 + ccmParams.authTag = await cipher.doFinal(null); + return encryptUpdate; +} + +// 解密消息 +async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('AES128|CCM'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, ccmParams); + let decryptUpdate = await decoder.doFinal(cipherText); + return decryptUpdate; +} + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); + let symKey = await aesGenerator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function main() { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = await genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessagePromise(symKey, plainText); + let decryptText = await decryptMessagePromise(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End ccm_encrypt_decrypt_aes_symkey_async] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance Aes ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_ccm_asynchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'AES_CCMAsynchronousSuccess'; + } catch { + this.message = 'AES_CCMAsynchronousFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_synchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_synchronous.ets new file mode 100644 index 000000000..262ab0a43 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_synchronous.ets @@ -0,0 +1,105 @@ +/* + * 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. + */ + +// [Start ccm_encrypt_decrypt_aes_symkey_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function genCcmParamsSpec() { + let rand: cryptoFramework.Random = cryptoFramework.createRandom(); + let ivBlob: cryptoFramework.DataBlob = rand.generateRandomSync(7); + let aadBlob: cryptoFramework.DataBlob = rand.generateRandomSync(8); + let arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; // 12 bytes + let dataTag = new Uint8Array(arr); + let tagBlob: cryptoFramework.DataBlob = { + data: dataTag + }; + // CCM的authTag在加密时从doFinal结果中获取,在解密时填入init函数的params参数中 + let ccmParamsSpec: cryptoFramework.CcmParamsSpec = { + iv: ivBlob, + aad: aadBlob, + authTag: tagBlob, + algName: 'CcmParamsSpec' + }; + return ccmParamsSpec; +} + +let ccmParams = genCcmParamsSpec(); + +// 加密消息 +function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('AES128|CCM'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, ccmParams); + let encryptUpdate = cipher.updateSync(plainText); + // ccm模式加密doFinal时传入空,获得tag数据,并更新至ccmParams对象中。 + ccmParams.authTag = cipher.doFinalSync(null); + return encryptUpdate; +} + +// 解密消息 +function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('AES128|CCM'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, ccmParams); + let decryptUpdate = decoder.doFinalSync(cipherText); + return decryptUpdate; +} + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); + let symKey = aesGenerator.convertKeySync(symKeyBlob); + console.info('convertKeySync success'); + return symKey; +} + +function main() { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessage(symKey, plainText); + let decryptText = decryptMessage(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End ccm_encrypt_decrypt_aes_symkey_sync] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance Aes ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_ccm_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'AES_CCMSynchronousSuccess'; + } catch { + this.message = 'AES_CCMSynchronousFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_asynchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_asynchronous.ets new file mode 100644 index 000000000..457bd5d0a --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_asynchronous.ets @@ -0,0 +1,86 @@ +/* + * 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. + */ + +// [Start ecb_encrypt_decrypt_aes_symkey_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 加密消息 +async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null); + let cipherData = await cipher.doFinal(plainText); + return cipherData; +} + +// 解密消息 +async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('AES128|ECB|PKCS7'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null); + let decryptData = await decoder.doFinal(cipherText); + return decryptData; +} + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); + let symKey = await aesGenerator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function aesECB() { + try { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = await genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessagePromise(symKey, plainText); + let decryptText = await decryptMessagePromise(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } + } catch (error) { + console.error(`AES ECB “${error}“, error code: ${error.code}`); + } +} +// [End ecb_encrypt_decrypt_aes_symkey_async] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance Aes ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_ecb_asynchronous')) + .width('70%') + .onClick(() => { + try { + aesECB(); + this.message = 'AES_ECBAsynchronousSuccess'; + } catch { + this.message = 'AES_ECBAsynchronousFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_synchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_synchronous.ets new file mode 100644 index 000000000..920e400cd --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_synchronous.ets @@ -0,0 +1,86 @@ +/* + * 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. + */ + +// [Start ecb_encrypt_decrypt_aes_symkey_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 加密消息 +function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null); + let cipherData = cipher.doFinalSync(plainText); + return cipherData; +} + +// 解密消息 +function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('AES128|ECB|PKCS7'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null); + let decryptData = decoder.doFinalSync(cipherText); + return decryptData; +} + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); + let symKey = aesGenerator.convertKeySync(symKeyBlob); + console.info('convertKeySync success'); + return symKey; +} + +function main() { + try { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessage(symKey, plainText); + let decryptText = decryptMessage(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } + } catch (error) { + console.error(`AES ECB “${error}“, error code: ${error.code}`); + } +} +// [End ecb_encrypt_decrypt_aes_symkey_sync] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance Aes ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_ecb_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'AES_ECBSynchronousSuccess'; + } catch { + this.message = 'AES_ECBSynchronousFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_asynchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_asynchronous.ets new file mode 100644 index 000000000..321c95d61 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_asynchronous.ets @@ -0,0 +1,117 @@ +/* + * 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. + */ + +// [Start gcm_encrypt_decrypt_aes_symkey_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genGcmParamsSpec() { + let ivBlob = generateRandom(12); + let arr = [1, 2, 3, 4, 5, 6, 7, 8]; // 8 bytes + let dataAad = new Uint8Array(arr); + let aadBlob: cryptoFramework.DataBlob = { data: dataAad }; + arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; // 16 bytes + let dataTag = new Uint8Array(arr); + let tagBlob: cryptoFramework.DataBlob = { + data: dataTag + }; + // GCM的authTag在加密时从doFinal结果中获取,在解密时填入init函数的params参数中 + let gcmParamsSpec: cryptoFramework.GcmParamsSpec = { + iv: ivBlob, + aad: aadBlob, + authTag: tagBlob, + algName: 'GcmParamsSpec' + }; + return gcmParamsSpec; +} + +let gcmParams = genGcmParamsSpec(); + +// 加密消息 +async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams); + let encryptUpdate = await cipher.update(plainText); + // gcm模式加密doFinal时传入空,获得tag数据,并更新至gcmParams对象中。 + gcmParams.authTag = await cipher.doFinal(null); + return encryptUpdate; +} + +// 解密消息 +async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('AES128|GCM|PKCS7'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams); + let decryptUpdate = await decoder.update(cipherText); + // gcm模式解密doFinal时传入空,验证init时传入的tag数据,如果验证失败会抛出异常。 + let decryptData = await decoder.doFinal(null); + if (decryptData == null) { + console.info('GCM decrypt success, decryptData is null'); + } + return decryptUpdate; +} + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); + let symKey = await aesGenerator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function main() { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = await genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessagePromise(symKey, plainText); + let decryptText = await decryptMessagePromise(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End gcm_encrypt_decrypt_aes_symkey_async] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance Aes ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_gcm_asynchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'AES_GCMAsynchronousSuccess'; + } catch { + this.message = 'AES_GCMAsynchronousFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_synchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_synchronous.ets new file mode 100644 index 000000000..d8f1bf0e1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_synchronous.ets @@ -0,0 +1,117 @@ +/* + * 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. + */ + +// [Start gcm_encrypt_decrypt_aes_symkey_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genGcmParamsSpec() { + let ivBlob = generateRandom(12); + let arr = [1, 2, 3, 4, 5, 6, 7, 8]; // 8 bytes + let dataAad = new Uint8Array(arr); + let aadBlob: cryptoFramework.DataBlob = { data: dataAad }; + arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; // 16 bytes + let dataTag = new Uint8Array(arr); + let tagBlob: cryptoFramework.DataBlob = { + data: dataTag + }; + // GCM的authTag在加密时从doFinal结果中获取,在解密时填入init函数的params参数中 + let gcmParamsSpec: cryptoFramework.GcmParamsSpec = { + iv: ivBlob, + aad: aadBlob, + authTag: tagBlob, + algName: 'GcmParamsSpec' + }; + return gcmParamsSpec; +} + +let gcmParams = genGcmParamsSpec(); + +// 加密消息 +function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams); + let encryptUpdate = cipher.updateSync(plainText); + // gcm模式加密doFinal时传入空,获得tag数据,并更新至gcmParams对象中。 + gcmParams.authTag = cipher.doFinalSync(null); + return encryptUpdate; +} + +// 解密消息 +function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('AES128|GCM|PKCS7'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams); + let decryptUpdate = decoder.updateSync(cipherText); + // gcm模式解密doFinal时传入空,验证init时传入的tag数据,如果验证失败会抛出异常。 + let decryptData = decoder.doFinalSync(null); + if (decryptData == null) { + console.info('GCM decrypt success, decryptData is null'); + } + return decryptUpdate; +} + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); + let symKey = aesGenerator.convertKeySync(symKeyBlob); + console.info('convertKeySync success'); + return symKey; +} + +function main() { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessage(symKey, plainText); + let decryptText = decryptMessage(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End gcm_encrypt_decrypt_aes_symkey_sync] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance Aes ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_gcm_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'AES_GCMSynchronousSuccess'; + } catch { + this.message = 'AES_GCMSynchronousFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_asynchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_asynchronous.ets new file mode 100644 index 000000000..5e19e08c8 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_asynchronous.ets @@ -0,0 +1,141 @@ +/* + * 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. + */ + +// [Start gcm_seg_encrypt_decrypt_aes_symkey_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genGcmParamsSpec() { + let ivBlob = generateRandom(12); + let arr = [1, 2, 3, 4, 5, 6, 7, 8]; // 8 bytes + let dataAad = new Uint8Array(arr); + let aadBlob: cryptoFramework.DataBlob = { data: dataAad }; + arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; // 16 bytes + let dataTag = new Uint8Array(arr); + let tagBlob: cryptoFramework.DataBlob = { + data: dataTag + }; // The GCM authTag is obtained by doFinal() in encryption and passed in params of init() in decryption. + let gcmParamsSpec: cryptoFramework.GcmParamsSpec = { + iv: ivBlob, + aad: aadBlob, + authTag: tagBlob, + algName: 'GcmParamsSpec' + }; + return gcmParamsSpec; +} + +let gcmParams = genGcmParamsSpec(); + +// 分段加密消息 +async function encryptMessageUpdateBySegment(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + let cipherText = new Uint8Array(); + for (let i = 0; i < plainText.data.length; i += updateLength) { + let updateMessage = plainText.data.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + let updateOutput = await cipher.update(updateMessageBlob); + // 把update的结果拼接起来,得到密文(有些情况下还需拼接doFinal的结果,这取决于分组模式 + // 和填充模式,本例中GCM模式的doFinal结果只包含authTag而不含密文,所以不需要拼接) + let mergeText = new Uint8Array(cipherText.length + updateOutput.data.length); + mergeText.set(cipherText); + mergeText.set(updateOutput.data, cipherText.length); + cipherText = mergeText; + } + gcmParams.authTag = await cipher.doFinal(null); + let cipherBlob: cryptoFramework.DataBlob = { data: cipherText }; + return cipherBlob; +} + +// 分段解密消息 +async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('AES128|GCM|PKCS7'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + let decryptText = new Uint8Array(); + for (let i = 0; i < cipherText.data.length; i += updateLength) { + let updateMessage = cipherText.data.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + let updateOutput = await decoder.update(updateMessageBlob); + // 把update的结果拼接起来,得到明文 + let mergeText = new Uint8Array(decryptText.length + updateOutput.data.length); + mergeText.set(decryptText); + mergeText.set(updateOutput.data, decryptText.length); + decryptText = mergeText; + } + let decryptData = await decoder.doFinal(null); + if (decryptData == null) { + console.info('GCM decrypt success, decryptData is null'); + } + let decryptBlob: cryptoFramework.DataBlob = { data: decryptText }; + return decryptBlob; +} + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); + let symKey = await aesGenerator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function aes() { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = await genSymKeyByData(keyData); + let message = 'aaaaa.....bbbbb.....ccccc.....ddddd.....eee'; // 假设信息总共43字节,根据utf-8解码后,也是43字节 + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessageUpdateBySegment(symKey, plainText); + let decryptText = await decryptMessagePromise(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End gcm_seg_encrypt_decrypt_aes_symkey_async] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance Aes ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_gcm_segmentation_asynchronous')) + .width('70%') + .onClick(() => { + try { + aes(); + this.message = 'AES_GCMAsynchronousSuccess'; + } catch { + this.message = 'AES_GCMAsynchronousFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_synchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_synchronous.ets new file mode 100644 index 000000000..d31b3456f --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/ets/pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_synchronous.ets @@ -0,0 +1,141 @@ +/* + * 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. + */ + +// [Start gcm_seg_encrypt_decrypt_aes_symkey_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genGcmParamsSpec() { + let ivBlob = generateRandom(12); + let arr = [1, 2, 3, 4, 5, 6, 7, 8]; // 8 bytes + let dataAad = new Uint8Array(arr); + let aadBlob: cryptoFramework.DataBlob = { data: dataAad }; + arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; // 16 bytes + let dataTag = new Uint8Array(arr); + let tagBlob: cryptoFramework.DataBlob = { + data: dataTag + }; // The GCM authTag is obtained by doFinal() in encryption and passed in params of init() in decryption. + let gcmParamsSpec: cryptoFramework.GcmParamsSpec = { + iv: ivBlob, + aad: aadBlob, + authTag: tagBlob, + algName: 'GcmParamsSpec' + }; + return gcmParamsSpec; +} + +let gcmParams = genGcmParamsSpec(); + +// 分段加密消息 +function encryptMessageUpdateBySegment(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('AES128|GCM|PKCS7'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + let cipherText = new Uint8Array(); + for (let i = 0; i < plainText.data.length; i += updateLength) { + let updateMessage = plainText.data.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + let updateOutput = cipher.updateSync(updateMessageBlob); + // 把update的结果拼接起来,得到密文(有些情况下还需拼接doFinal的结果,这取决于分组模式 + // 和填充模式,本例中GCM模式的doFinal结果只包含authTag而不含密文,所以不需要拼接) + let mergeText = new Uint8Array(cipherText.length + updateOutput.data.length); + mergeText.set(cipherText); + mergeText.set(updateOutput.data, cipherText.length); + cipherText = mergeText; + } + gcmParams.authTag = cipher.doFinalSync(null); + let cipherBlob: cryptoFramework.DataBlob = { data: cipherText }; + return cipherBlob; +} + +// 分段解密消息 +function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('AES128|GCM|PKCS7'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + let decryptText = new Uint8Array(); + for (let i = 0; i < cipherText.data.length; i += updateLength) { + let updateMessage = cipherText.data.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + let updateOutput = decoder.updateSync(updateMessageBlob); + // 把update的结果拼接起来,得到明文 + let mergeText = new Uint8Array(decryptText.length + updateOutput.data.length); + mergeText.set(decryptText); + mergeText.set(updateOutput.data, decryptText.length); + decryptText = mergeText; + } + let decryptData = decoder.doFinalSync(null); + if (decryptData == null) { + console.info('GCM decrypt success, decryptData is null'); + } + let decryptBlob: cryptoFramework.DataBlob = { data: decryptText }; + return decryptBlob; +} + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let aesGenerator = cryptoFramework.createSymKeyGenerator('AES128'); + let symKey = aesGenerator.convertKeySync(symKeyBlob); + console.info('convertKeySync success'); + return symKey; +} + +function main() { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = genSymKeyByData(keyData); + let message = 'aaaaa.....bbbbb.....ccccc.....ddddd.....eee'; // 假设信息总共43字节,根据utf-8解码后,也是43字节 + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessageUpdateBySegment(symKey, plainText); + let decryptText = decryptMessage(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End gcm_seg_encrypt_decrypt_aes_symkey_sync] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance Aes ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_gcm_segmentation_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'AES_GCMSynchronousSuccess'; + } catch { + this.message = 'AES_GCMSynchronousFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/module.json5 @@ -0,0 +1,66 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "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" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..d6327c87f --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/element/string.json @@ -0,0 +1,96 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "EncryptionDecryptionGuidanceAesArkTs" + }, + { + "name": "aes_gcm_encryption_decryption_asynchronous", + "value": "aes_gcm_encryption_decryption_asynchronous" + }, + { + "name": "aes_gcm_encryption_decryption_synchronous", + "value": "aes_gcm_encryption_decryption_synchronous" + }, + { + "name": "aes_ccm_encryption_decryption_asynchronous", + "value": "aes_ccm_encryption_decryption_asynchronous" + }, + { + "name": "aes_ccm_encryption_decryption_synchronous", + "value": "aes_ccm_encryption_decryption_synchronous" + }, + { + "name": "aes_cbc_encryption_decryption_asynchronous", + "value": "aes_cbc_encryption_decryption_asynchronous" + }, + { + "name": "aes_cbc_encryption_decryption_synchronous", + "value": "aes_cbc_encryption_decryption_synchronous" + }, + { + "name": "aes_ecb_encryption_decryption_asynchronous", + "value": "aes_ecb_encryption_decryption_asynchronous" + }, + { + "name": "aes_ecb_encryption_decryption_synchronous", + "value": "aes_ecb_encryption_decryption_synchronous" + }, + { + "name": "aes_gcm_seg_encryption_decryption_asynchronous", + "value": "aes_gcm_seg_encryption_decryption_asynchronous" + }, + { + "name": "aes_gcm_seg_encryption_decryption_synchronous", + "value": "aes_gcm_seg_encryption_decryption_synchronous" + }, + { + "name": "call_aes_cbc_asynchronous", + "value": "Call AES_CBC Asynchronous" + }, + { + "name": "call_aes_cbc_synchronous", + "value": "Call AES_CBC Synchronous" + }, + { + "name": "call_aes_ccm_asynchronous", + "value": "Call AES_CCM Asynchronous" + }, + { + "name": "call_aes_ccm_synchronous", + "value": "Call AES_CCM Synchronous" + }, + { + "name": "call_aes_ecb_asynchronous", + "value": "Call AES_ECB Asynchronous" + }, + { + "name": "call_aes_ecb_synchronous", + "value": "Call AES_ECB Synchronous" + }, + { + "name": "call_aes_gcm_asynchronous", + "value": "Call AES_GCM Asynchronous" + }, + { + "name": "call_aes_gcm_synchronous", + "value": "Call AES_GCM Synchronous" + }, + { + "name": "call_aes_gcm_segmentation_asynchronous", + "value": "Call AES_GCM segmentation Asynchronous" + }, + { + "name": "call_aes_gcm_segmentation_synchronous", + "value": "Call AES_GCM segmentation Synchronous" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 zcmYIuc|6qL_rIk#Su&MMQlYU)cz{|$Qc0x~A^BEf( z`{n=HaSk>%wsfNM*uUkN^8dI{qxxW z*@b_`#>VlLWSG9 z0>QdPQ-&i_RCVdp2s$-u%S362^SHV0`EO6;@n(xK));G>#qwhPWrDXGk@OBMV}H!J za!48&`xhWJKj{_+f3ir<>Jg6Ax<&Xgn;)U7UJyAw{(u?zlf{oLsJTS-_o1?+lSg-j z8fcZj1*Ad(!X>WuuxM!H5t@V3*8vLL6`QnC!q!BwQjI{yk*;~@|3;B)`p$WYcDmnZ zt`R zr=oS6o-D$WZsYKh1PiOdhhX&YWGOzpc<6ITKzr^zi-#>z){t;yz3tu_a!>)(tTU9d zd}COuy~Tb}UIRNX@aVGJqEKUa)1#E-u}pl!sY)z4cu+Hu9==`6=0Ob#x-%q}t@jBp zmoiZDcfF1WL{PB0ZO**8yZ+%;LF6K*JDUoHrJkl0Wzak+Y%E( znUmuA^p@Jv6{%Y;MsiZ4O?#ID2b2ssEq6_KGL z8T%zdA3YhMnkBu19bNsa_$$_1^16jadx`0ZzPx`M%T>qZpYyNYOeDdmqLTNWpR5T% zOlRrW_xNCD+*3_WSxvt4P-@qQ9g_$aedDk-hcV~t>Oxw;UaAk1V?9m5<2k4%VrM$- z?{KH{)m_U~yJcBbX+vqVfq&4)Vf+FvAHd|s{V34=f#uJM!Tp?b32THmfzNn1unwY& zPNtaE{ZZ=OkZFh*xW2FT&fDF?64Q%l>dwdZ#Bg;^v;dAbU*QLEQG@_|ucNXFyx~H( z#h?kJKeI3jD^U~`e`*^zcm?PlIWj|tL_a8NC?HVl*gX%;5PW5Y%ZZ*G=jPn5#o+Sh zhnE>D@Wb!f*O>cZ0}ZT=HlEdoWVWk}5H1S;$vxe#Rv~;l5rJ=w--wPl621jCW}B|gxECKzT9 z3FKlD{=OfN5$J3?Ag0g4F5t8_D(RvO8W!*~?#q{Dhx(Sj=)^9ZlE|LyI?p1NXMWr| zGGbzFN^3)5?P^vfnD7XZo*8yf&O&>7XULUUvhJT@rHcF>PmjodH~u4RSmX4TH?v`IKg2cy7 z(T@e4&pPRHRczikEvwvO?jbblSVp z2qpyT+LHUFhHwcunP(^h)G#uA95vF`Gd&1k%F@wuCk3DnjNjw;b}*;dY{F5{7tNsg zLf4y|)RTV`PjQ^!NoWB3YA@S@Cw zUAr?mUcn7g)n!3J`D7*H`y{%TuT$wNY;))rP(y@kdFdPH#h|rjcW2#oRybxTchXlQ zwMW{bVcqRRc_2r^tI)Zav_+qLwdd|Bw=*pM!|pflbT%K&Eof^{6+|k{2_;HcrWd3? z#z;>@Y3dp#B^R5c9RhH8lT5MRr*;>xd<%C3sV2Y}>{On@a*oump`g#H<6V&DKeZ-?Zic$S$>ulEiZvJG8kHMeSzVE(R|E-<}cEG^n2E*Cp z-25-DQv_Mf+&WhT3r?23Phid$q`Z3HE($RgC{EJA0Yc1SP6(a(oZ4RU2L1~H6k0Q< zHY1Mj{)b(ll3Wr=HakbiEk13zYKN&f#9*}tMZiQ7h@Us+N(Jk`aWQHf)r!ObZAT>_STJuzjuO{qHMlTjN9^hPZ8sZBMl zl&MX}xk{d5VUEInRK9r^Tnx#HE2;hFoa7?NDufAxZV6Mj9B^NaAt4;oStAtWfVg8< zjQAfLPj#u>Xp*sALAi;M(f1>la|_-k(E*-1Sa_Vdt$KsCNAwAbm8CmvpDbwL$`Cx8 zkBC0&3#@q@7E3LVtGQcrGS=s-uh6FHuC)WTtU_@t5c_T~`Wv+F0Jd$a9s(?ucd&l{ zWThjQ*u4YqU6Wq{+^0sC%S;vXx~qO|+s%Am1m-N}zkd84>GT;5u}a1*p9&!g%3wk2 zl=rj+H9g>!z4_zdU1iItL}Zox?lwK^ykQ+_#Ym~p>s8CgcLQYV4wezL^K-_HzM$r! z1m$U&G13HqDckgHschNcoe73o=)$P$j46Y)SnaZK(U|F7d#{AGb%>@b+jX#5*Rf5x zq}@ejPTyyn&&@n|dDGl-o-=XF%6dndW+}@7JDd?6b}Mt-SX_GV^3{!3Yz5a~X@$Fw zyDIkaWq*rtn{8knumG6=yF(6lzQnq)&M@%8RzdC%{%-0Ey{v&0pp-aIPP$bTrF|=~!MvLftx2pd=0-86i#@A;;(b^r-TzBJn~W4d42|-V*)} zt}h95!TwDQ%xWD9TFS{BwGO@d9P>kia=+LQ@r>0>5VvEV8(&tEuw%+YP*Qm6KzZs9 z#qL6SPwl9DtPZ{0`)Vph`^ryNV|=I7r2Vf@LrX3<=$f6zv1^z*!<6j{f$|6Jw=%s2 zb)|d{?()1m_Xoab$B5r9#&taTI^E@0yTQ$UB1_f0nc<oQhFOi;b@!o=y6w&Tsrw|K5XXEJEA>@Eb?8hi( zlT-*bXZd6g*C+W9V6B5iF$2f(_-ek(ko^JW%$@}`#GJVV0S8A~FwzM(JdY)c1B&ls(qJ=bvy&S10cqD8@1Clbooq|3kmbD_she z@O#tu^ibgYfM#HD%WIF%%uf7+)sc&Dejs@WRQE+Q1jXlN2z>9dB;X9e>Y3a-&-A;T z>||D+o$j^$E>F`4y02DTELRMYH*biv(5+ed(cQq&82Gu z2~UNnOcNc&MwT3lD@S}nPJMsvOT%0L{`dN}DU&^Z#6?2^aE!5ulUV_Zct}2~K6R!_ z4ReuaX$@AP?M!XMpi&ZJwsY2up5F-xe0{ym`9#@pr%63v->d&@UoFthcC1`k$L=ze zYX1{xl49Q=z953h>NzyMc3UuH96t7)-k|lRw-P=T%Q`;dC7@r`uCOq8Eqi7gKC)~7 zb(*Q>H|T2(e>5DVf9nswM~C%V2G2 z#B|VOitZm{FlV>EydvsFF|Ue~ium0%0KOaFiMOLk(X}jHq@dI@*AM2G6XzCU zSpFR?#U4MPz~VZR>RA@a!CZu45#f<)^f#kJ+ULtRLJKzSj=cf+NxQ}Kw)Yme6wJz; zu3W=Jz<}rEm$g7sNy>yr-Z|OiI>qQ4m37~);`_~Xgr~N4wOAssk(HTh5er1XtFm+! zb`5FT&FoKA{ADaUP!Y#o^sGPb?mT2wBY9ZfQ}ujLk`C_dyTvT&)34sj!RXJcZ%lCzF?kE~i-xCSGh{ zy%iUR0+S_JP(#%W9!Npk=RL(8tFB7(up1ms-Q#8 z$-{dva97!EQB<5#@0KgW&2S|ddKN*<(?}37-=O@1bF668sG)3(D61=Ech&sJ;j|An zqu1a;`}bcMj;#tF3l~&Ue9ES7GRw~kIPKK&q&^No_3M#yjp?ygI;To&wcXbe%ju*z zpMI!gbi8@{AJVkgXR+py{dMSfko}H`^q^elZQ-5<2bG-K8tYq8Q@*4t)`Blvz!#v> zE;3kk_e^|Kew4?}eU;3n)q48yWgAm)d+F(;W(>jPB_glQLiH|IE=EDVFI*j_FBebS0vXyh5@x9LS?RNi7vXf?RckfXjvy^Pifki$9G zzwp&k7S+aNOI8%DUON~#xxv+a5rJDE+^6;@RcjnwKZ|%#%Ukq~@&vL#Pts;`f?jwYL)Y zDOROB^T8hlFfA@(=$bFYKWy{F^5$#{h*A1FG5GZZ1?>Y+!}UULap(oEekfHZCJkpC zppRS@+Uvrs>_Df!YT#HWpuaEwRq)V49)TgZ7Jf{A6@tpv&>tG)c9F&eZWo)(tDPDB z4Fkl6@ov*S4!gboeokhZ>My7@q%!Z93-zy>Y(_9axnH2W2Ie&#X2Z->o1A6ZoV(OgY z@PpdL`E%U}QN-vzdLCdkVX)Vp-z|CGg)^e06LvMfbj%1)ZdXNB>r>{Jk&ApwTkkLr z-2C5e31{3c{*xsm?)EItQ%pSW(%723B}AHgke#M{7KJW6TT*>9^+`FIe4;VHRwSF$ z9rBta7_>vwCuV;vFY=|NZ2KlX$A`EUk*phH=Pd~I8Kkr|v!j3sBAD^fPD!FoPpnHf zqP&jc&^s{jm0M&oBNXjUol2${7|G^u7UtOd2kxA0b?japS#xlwo_TaY+jh-`+$sfO zFLgfqb~kaemX{ErUn7}?_tb>g?G@UyT99HoY^;BG(5|gh>F3J!9J* zvrz6TP+;XdE$<41%Vony^Y}i*aCz@+4v^38p)5?Nhw`m%Cbg5Lpz%VOxaBnlA9P;N z9D=#{(>`$N_!?&CKf9eJGzIc>dhWes8XtpX`{gOhP;HMklZ8~@Yu~YT1bZZ{VwrAffDNiZ6Mh5vEzpq z=5A;0ff@>1MG@vbwRU!?7ZFD-SYng>JN(=>uwrkrl@4u6M^n6jl1shsk;DM`t#|F? z(H9W(@&~b(mmUR)30H=vAZdIrX%9iR7rMruZ_I4$Eq7YnBI4Z8T zj5;RTUu8?(ZsW>30%Hk#$^zfAtgZ&y!|p@5%e_4oe7)3{Y6c^x>zv=o_XPiF*wI1y zNe5L3p=L;8_D7-+5I+LfNgDYrOIUD_Iu_VJQD^=4v=Gd z_u%h$8{Lobyu6%VkeZI%T_vssgc#J4yD+&6pVkdLYl@3@NdcQbwl!J%4{RC80oF1z z`ksIXyrZT=Apq3kOR#m795+y}-8NizKBNESZCmBS#jqG`n4kCydp-4DZ^BF-zWD2# z1@F?p*^9m)EPrkd^E&cimk<1mN+iwSCVTHpqz^#`_Dj;-5xURqxK*!kp5asE##*=< zc{bFC-`m;q4VL3=| zKN6@)%XIu=yS*-K-9Bw`jN+-lWBttd77x>|g)~$UgPB_qH0h&bm}j3#sdLfV&xcR^ zQFk=d3;U8~YLqm@^61C zmaLbHw=dJ0oLP?>eyJ&=wgtZm!2mS9V!i~62x+n`%jyesf0bKruxRDH-)c2uF;&qT z4Z0drBbHg-G#ueH1vVaEJFTw$U))8mlUjFz?!PDqNpcIqZ%B6$Ju$CzrK@_na@?na5LpJODS}`)`8j7i#>C z0RNEb>nnQ8v$qXrgh)-(=VVRFwj4 zZKH}5T4rlZ$PiI2z3_*{`av5A0jPJY!Y*RQ?XbKPZmNdwp6ufAH4m~1%r{gYeOJBR zai+gl7I{Z35P0Q7EoGmkkLGHe5rR^{bdxWyMiC1~&kI@I-bYJrdGv{=O7!p&kKxN3 ztOoyzWj_asX!zA>`fa~&>#$n@3{c@VVcl3(1m5=dCI-~1uR+4s;@87ozKCU|Z(EhE z7~Csbr}e|&-zPK~*W}WcKqB+rv-rNRzvqfY299AvP zA5u^Rs->xN6b@MzP_f(M+}|~RxUHs#zO%D772V@B$F;5<%Jx|0#Oh_?#%yrHfV>}I z!Lfe59_VCjJ!pEQOWyUr;CdyL z-RzERMQjU_j%}N!Av?++44uVMc#r_KCTZxxSZL>4`xbm)#)*?4I#nFDOZLv10s^{6 zAyo6zfA)w8n^jk|KBb4J;|Gbx9)grFflY-Nyl_v8_@}gizDNn(Y2l6TqM&aN(+9Qg zTBo#J4N$h%f!;K&2NqBlT~J6aqHGy6HI`Xn*)UV$w2>iLk~P=l)VTdah9Ab`z%}dg zxIvG$xPG=H0NRw|6_-~Bzh+BPv9&C;z)58?`7t~$HupdHcF!F5dirrGrn3d}wAHr! z^@&!aoW@3sENjl#i@LzRYOZ4b#v|Jk_Mo$-VYlgbE3LQVKniS1mH)uO`90X{bc~{1 z*%Wm4$E_2-W__`4`mDu;Ld(wv8e147=mMu!AKSC=mw*4n^8S>~fm9mJgf4~8t(bb> z^_3WSK>aAZ6lK3OZ#_7g@)?z1#pZ zoR2>rm%_enbG!+Y34#Jmal)V9@-s8li+_Le^~z8cxHeF5vR%p~{93TJv%YmeTB|@^ zc=}q4Gofbju_Z#%Iv9|44|pawNvh^mFGBA_KZ5C^rx-l~Ytqf4;%SxezE8%O)aJh& z>2it7b`epB=P&=s^y`mJMjMq&9Jvpdhn}6sFHk)q%d zE_RV6%-}?H)w7yAW9TA)&7XbMyu=N}tRA-JTl2iG6u8;@?;!BW;ykyof{i+alo zJu1v~ITow6y^)5crWdi)&;yNs0d)3*vN+aSszJ%`1`(%9X-Hi}3gH#iRg@{Svm?cP zM}T*)U{A8FTQ7b@oc$7vr_EeTIj6N%Cr}VI5VcfZk+@1UFc>zpJkm3S%cb<~=~`BV ztbyjzOPJuDkTJJ!hL^nLk}*=2EXd?->%+3NWrq&5a$%1G{r2~cLQT2W>8!pd$9G;K ziQIDUErsVk$XQPRm)pDFYVuLFlx&eiFlnoixT|jvAoB)ryM_}euaYFXrdKLqi|4AL zG`rnvWi4Qa>Wvo=;Y+t@ecMjl{#37K;?VkYdoSbT(2m}8!k~RT{yv0l8cPp{jtiXr z$7KAJAvM_g4ak}0Yo*q!sO%PN_CK)Pv>lC7xoB~vG1hs?Wv>^kpOBU0WV@$|oL!cE z1FV3%^4Pjr5Fqc)|Sv+upxx8BCM z9*cYQYi3jY(^pUL8`I|3rHf+5>sq98e!hkPsfNMQ1@y7Tnf4{F2p zx9AO&@zYO;WpCQUf4G@!d<{t43@&RHh2Ukg^D-8_;De`dc{hz?yPS_7BzU!x^P-tj zBWt_uk{g94M1uo_&0l?m1qh!Q>=dKy5cx zRa7mv(}`xYKJOm)h3s8goQ*XK1OT<#&Ozf35uTB^VD8m)Z6Bnlal5r-bkso}J^TcM zo)ZSc#2@`h0Si}lrnCFt67JFa*e&}2avKCL|IIk<$R2*5sILkv4P( zesTX_tP#NqXN#>Q{4oe!N=G{SZ_I#~%^kq5ilGc=Q63_5uRt!D^j$k=&$`Ha&bGlAjZ2&hWa=M};Cw|5onME2e;8le z)-hK+mgNbGw-4puLN6g_q5p6T?0XM^dMo810rSBSw7Rrl(jt2JNVBwhB0o3``lZ1y zBr`Dy8LdVilxv`X5b0N8#{#(y<2vQrLj;qv`XA#RZ+@Q~*aYa^UY~;#F>6BL>75+E zeH2(L#HhLeI=Mz1#%^96zY$Se;@N)biYOvM6H1p6-4LcvA=&GP()#?u=_WXgAoZl* z+bR{6BA52?12Rex)v?(LMRsKvf9{KzP<^4&NISV{2!a;wEhr&E)EloHqSR9%ezb)? zl9X;qQSTg@es%UevGs9-KQk6RqJ;Ui(v@S0=JpkXQVYgXlRKQcfFLT2A%*#c?7(b} zjki==Q^Y#Qf}ZVpFtF6<4SbGKkkU>I6wY*Ps*EAzemS5Z0r!-oD>~r!<<+c~fHK+{ z`u4nWcW&4!()0%2>r>@zr$F6$;5*IAuq5bc>cn-IEZ+B|hkO&NPeBi&47YiU-<$w0 zq-j9aGH~K;Y%0{D&e90RZ(J_@o*`(e0TgqWM zz>V1_2|7MMg_6zbeK`A2oW6>`dUuDIll*?4hKaK{^>2t!B*N9o7_!iC51?A=hss#S zTOD48mGM}}JkMLeB>f0zNw|zPj8Efyx1Qh?QyT7Bp*PsC1%+$kgboSqDR=rTEs%8X z-t2|68n3XC`A-sBYO9tXuQqE7{}pE3mRASQTvScN7(%JH0{M|k4t%rE7xh`qUf4A- zgEE3f#zcuMyMYyiu;w=#PFC-_W0rb;u#{l@E}K0uMy~Ec1MBz-KglT}I_AG%m9nb!XAkpoW-`_85Umy)5g0j(3(>`;o1;w;CKp zLKdGc@@LrE*Y6B#H>jMeTcD6nZx;FZw zZ?8nd;T;sv#~t>9Stu`V2=$pLBHrDq3VNw9{KZU-50LlNLK@?o*hLF?1Kjl3op`;u z=nFLXc(CuUKp%gcxwwBm08`iDki>51cyobB9Eypc5@0Uv%$x+m$P}vtzJ@yXv2Y(6 z%G|Dfw#*GyPhoZ)9Obc;u$h*k0~W zv)EW8ChYvHNP~Ws5(MQk4JSGnG!l*4I-odrw$8E;u9uTN)1sDTSK-9%H|jqRi1XpO z_RLbdR5?V7FZiM9a@_RLzrIa?o8u(&ct}&dJFEmRO#py=1J(LW)$S@B$xLi6T)SOw|;fa7Myzv z?MOZ*b$o!rCg?J9&v6SsP#m&goHWvlC%0`IUKT~X&=s1cU$O`0Ea`_f|aU@(<=bXW{`6+7W#cu@H9t zagx-Usc&&vez&!Mjqpdk+Ol(}Uo_B;A&JhUaOe-iG9|*Z<)SYRZ;!m{$5X=V;9Cl+ zs(#H}WR`823f+9`wmRKF;(;wyt*?b3@Y`H^;&@1GipUF_{Gb_RzIV!3$qMq++{iyr8Th+msVi*eA69cY1K|TmaXNA-rCXT%k z%$21aDiQY_-+BI`52BI$rv}FI)tg7-CaaD7_O`l9ngVYH9#Xu44ly2flHy-xuzEyCWC^6c-^K*QrZW zNG1PL`B#xfh_CD57q**Q+=Ty9EEolHUwT`)Z`SWJPvsxa-f8_iHO;AQOj^^?v$Pd6 zy~3pjahT&?UwB@2zW1)s8+UfK$SFAL~tHHx3whuvPyW4mh3w z`_Q5~nHOsoDT0sx@+N~J<-Y&TvqV4MCkgXgo^ntecjdoSopR%@?wkEfAuHDOIVHQe z|K0}d$IAWT3jC{=QJCD$*L3=%k#f)T)tT7R=nTHqn)i5$Q)sm)53ZV1w&{swK_X#n zpD3;2Eb$r)$CDg__L8tv=0-5U5hB))B~SI2(6`QM95phAkktAVs0hU305vOGT{|^t zH`?>)3!24y5TBnjRfAJG|J9jjj_JYwB?gujfD3QwPf@~K(A2Z4KynC|m! zMt!}`yx4=~u?@-#ab5-T?In;dGAUlGajcN(yFF%ypy(av6(B6-=d(A}}k7wcgUJ%c_TA&p~<@ZA~EU-mvx5S_ykM?O8{R|mH|RE75BR5QQ#CTpy{;f{(N zFpFjUOJ}EEwov(%eX6wm&~H5dD|PO&*VQvG&6Br6eo1I>i7L)sk`T?{8}`lQfCB2R z@nDF(51Rl?^;uv9K%Wz-qpmyIoZjoO+tGhY)P>lU7U1Rpv;b{^)mu_I7=1e%POI7M zneWYe`!E(sG!D4Pm@9XD2!jhItDw15w=Vl)ioN}tjFK(3~fxy=!h!`6@!cQuCP6#aH;{{dyV2@O1#ZX{Zl4pLmD z7*{Ip)`V*gV-QVaE+>|4R`><5Z1*;n%pfkb3AiZ1s39)5f5khONJ{XZ5dEj{AwE^i zj6G1{WVlyMNlC3!_Nyk^Z0DjKo$ha)xbx}7UO*rnNj8he_fyO?v!so#$d4^uhxAXf zZNG(a)^5wM7^{-xB|`JITdre*!q^0$>^GMLKm@oauH?5G^;l>0Hp)xxzomAmYTE02 z+c%CPd*0$Be%v~(u%mMywt>EgIlKPOZH{Q%Y5c6=;F0usNLUPph9Xez1H1>s1YOPG zz|s4D9}W5qUuupaM_2#&;|@Jl=mK~Bc0i~OYb643=Gzqz>i%czm6IJ}e-nj~`8ZFe zGWf#c?5=VP0hlqMCIlRJj0p>6ob8O5e(*AYuP~QI>C$d^Yi`)_a|r1LwH(~NZ9P?Y ze?ts^N2upq=Br??YX8%HZ%xopU$9Z$(sjX zPFNIynnhW{IRi^L#G9#+Ew!gHJ%T1dibisJk2~6dM4r$&WR1@Yh3+PZbrp7G519Z>UKXw(mZMT+M-ozzkggshV_x`b zthj%~?f*E&m2-P{17aTUsk&fyuduoa3w}G`Ii-fByRE*XlORaY&Ax;2q^Y}9DeUiq zyMK?>G}eX;GkTjbS%GZr z5T&~;Y#yW|>Ep#W|B^P_r=X1$4uFNPGyw?zjr2lT?F6>ZQaaY;=%~?w4R^35Z=yWu z?(pW}`Hbg{7^L5u3abb48R>Wz-8&e~ld& zG34mkg*Nsz8LkANRe$e1~y0OAYcFkLVXfFw#0X3 z=EB)RkCjS-zhk?;_Eww$ZWCeYf2AIt@_v0+O&5H%+nUcKQQZ*-D#Mj9~nh zx&c!=`cApy)!}O~mTV6{@dbum`*7{`e8wKXQ$qf(L_&%pEl%&9Hz4Ua`%w=5(|{Fe zG=KtAxRHvVR%isJiC+qS)RMDX`xiqORyFg!x&NkABWs5}rYfi3W6r|&5P*I>{#$0n zSspPdl-FAPCWDVqU+`hp5SJ)}U4;QxQ*A|gM$`7-D_HnBBw1Px+%y8Fr*ZBkK&P(5 zLO)g}sM)3#vqJr|zOLiUYMzC)Ip0^+BMHE(YMU_d9|WolPeKCgmx*JYTE6;S>Wa~2 z4x7~9yMFQiL85QHvJtCUi;sWX->6#j?bP;4-B$$B=t*-7v~dwa7d_l5=?cxUgm6Cd zaZr_|B^X5;{k6{%BEZY5G{tgIXaw~PMvhi$_PDnHbyno3v;_gj5-=Qm12)lz+O@kglm5{q;M_RZxMCq-* znMrLfk)rYkS^lo@-6`Sd+^FUeRw9NYH^+}naYE(H+Zh38KI`SA9vUIYM`w7n(({Fc z<0<5oW06nE*}@UB$5AV7a^dI2srSJRcWrClmn7EQdBmJ6?_NrBl@wo_%pe-;K3ph= zN1j@y%^Bw-|7I#-OsQL<1zRV2i1N8h%Jz zJwR0GxN$z5cL7T2`h@=Nn-d!(GsG9!?+6zh=pQ$E{l5S3TiBHQ1&Bvy(*8{} z3j>EOJw+p*2|#VfcRh@u)N+@NMx-@QrQhRg>Tr5cY}aHl3CA*moGLkK0}rdRVR=E^ z{#;gyR7l*RccCrEo*H}%3X|@5YPQ+FM>u|=k#sp-M{J+EGRGl7LH4Z8UIUZqJ%O1S$-a-TXZC__K^ zV}HQ($I)a#fHDGwtEVN4+}*Rszq5|ewZGZEuA5Iw2OpA6%g^thr!`g2lSe?v{V!Zs zZR|Oezz_e)(WIs7nejBn3Q;m~{el(T15QaA3slu+pDiHa->pWfN1C6rVtf%}cuYmO zgKLKj2iNqdxC5nzUkN5bWkY7QyW{~Jm`(yqq=456x~COUo&to>DhmwrE0T1u8eLBX zmGKaO;crc6pm6&VjM@?bZCAXTbba*pRUvkbglVZYwEkF8YfO`T(Y8Hj5McaI z|C{H>yx3qKlRMuy-lc?Sc1!2)CVr8jr{HCfqbxH-_?m>w0h)fl`U3oh{a{=<4u=GG zzB1dSG{rJNtgG}nPU<2q1UPrW{mUkc8)_`L7OAnol7dZB_a(SX@-|yK8Wwm(0F1NEm_aN1wVsURw>% zPcJ-K`1h9E5@B%#7Tn`q0}2)m8v1N;72R}2#~JeoV=z!u6nMx5Hh%7WcQf@>B}s}j zpX2a$CtQcsC3W?=6QyG8m#bS^7MwKolNJR0blaxwZnvS?S;Zd`$Td4sdlY4B=DpVj z;GB--4WcwwL>bZgwia+-FoH)nTd?9m$)`kWfURntsPevI9OkDUq}At_Fhr2*m>J<7 z|K^#22*1UDq{{(|XIx*ulqtAAdQ3OrRygED^IBKe*@i}bZ9_@AZve0qu;T?J2LZ}j zw%cP}y=TD%H^Z>GUW2*063o&E!US9==;FnvZpXFNHRbelmmD_~T)}7{w z&e;xBEsak%$=pypJ3t9=dtnbS!6w40@X`hEdjEiR%*$gfB`8X5t54B?{Y@k+{O-C( zyWn|kD&H^1e6{Z}+mjH!-{_d1n-62-&sj0eAIe`j`?O4m+Khn*F7;(ko`grc}wJs-Gcu{X=-q9>JtlE}duQ+wL-kpryH@ zy?9QcUQwlU%a{$3@vO{6uEg-;vQ6$i3UQK;nO(8qR*T1<;wvvr-5aev6Kzq@WY?yI z8CkJ-_v2o5#Cy<>1tkp7W+umyd18ce*OX=Fs(i}ooB^lb_(Z+B(#0c+peWSQ7vamb z`z_V8WZ6ITb0VsHVCX3uI!$aMYq+2H_VJv|H+xOae}8%g0Ho5T!|3N(fPIQlqqpY} zehINqo%!U~bwZHmWWWQHbG6yOu;gWGMqLHRHz7_bwPG8clq4AvuJY+yO|fZb!!O?8 zu}-gsTJ7>_YGOwb9ZP{7Y~E_-54t0uZ3t;;kkys%#n||9@a5P2V=teS?-R*n9l4LU zX`b4bjK#bVZd&U8y01tpmu%od$DMxAMMv9l&MoL=#mqz@UrVGR_l0_DR1(?*60e1Gde-2*c+IsqkdsUBQplCu zbAh}kVEU~E+wWc#ljwacB1;-}=6;qO#+T9U6+R*7gTqwax52TW8BT?9baXZbe&3!{KI_6)y4?e%W{LkWI2jCl?{Trz8L**uH#O^Q>E0F; zvZVDQPmj+y3P_#pP5&8F;btP7L{R3-N@^b&z}P6C*IselB-bHG;@9&O))tmx7<0R@ zq~8V%kqZ)eZcoE~O~sQ8B8+i&1Ue*r4H|9dY8S&zqWooS;5LT2)V0emG9SEr9t7AM z08Kh_ER&MkZz||l>!~yU@mi`?QQ4AitwkZp6F1DCU$U*G8x922-bf6%3pYrD#i2*< zwpz(G$kV;(&?c|bI?kVkWtK(xu`&B#;UTMoJn+{-FXYMJH&~sfC%3D^A2%%pYB~Fx zYFb@KR!L)a;xpqnrzd^@O_;-5c!|es9)R%NkQ;Y{;h&+Ck8^jTn&jZ}P=M)n>!7A9 zbI=`ms%#Cn4 zcD|SP<@REH*!8~greM*drUAx|97aK~i?nk84xe+fW zZ{VZUt^WcR{^_IyCA?BgZ6gdxVu5?G1|-aEz1&EUsaWP+cJ~=7?fk17Km5W&X3{&= zr6*juZl+Xa>izM!qk7^<2X1*30KepqIdjyV2i+e+zNXSxbK7Tpa}Fm~tK0+5Cmz|g zd=qVePKdNVx^>DVw^plZ?2M6Lxb`!8Ti#RkyDG;^w5l=4mTJ7GuF?>G>j?|lQi82< zNSi&Ar21!4wJGm%haIm3(&qHRaalgKQ+Zo*VUmdvO3d*r$tQiZdevGg?sUI{@hBMB z#c4dG%$ziRt^bWNf~3wy9fsIN_Xz#^hwnqZ)3n%{%nU9mIShVGJbF@_aV%R@{2`Bd zRRV1z;iLf8vnhQhV!*)}h_XFiU+=HG5zruPk-I(^EEW2+SP43iUg88Ktt+fn{a3`C zxH5^rzt^)}NibifBptLnWW>O$q<;o81Ytp^|JHO2c^)R9nQizz@=pua-L?WcDwzsk zqLYg1NS}l0EoS1SEwfU_n>3wtIkq4r(>>1vzP9Z)u* z7!cFZk(y94Ta9;@KGI}VuVTz%OclFRP84+NBUYBAN9)j18h-Dk(N_YxRc+#$@;E!G zk3>;{dx`$+A4-y+OCDz=U?O~&oq10pF2=@SEP`h*hn*uC*BdqRBV;NUWL%7GQwvf+ zy^@Jg8oV=aF&&>FIZfBUhPx!`mVdKBuW_kcOjuX6o{4h~GUS(Oc#=*IhjnUUK6V>q z3|r^NJ1i%lyLPs-RMaW{5i$=F!>FC4M0Pj0<<@G%muXC?eGi&&ai*KS|^#9Ba>V z1r&49PJmi&clkkAhrws5!q)&@Ng2>63rG~VPQPfM6P3_7JQhw!k2;x7`97!rb;o&f zj*N+5e^fk>D^vzYxcBT!!vc`_!+5f!_>XV3z@oz}r2l;7v?ybOOoLg1yQEm1p==et z8!M{V&DaVz@Xg1^2sOzN<|B~4p!Qqom;IvMJuhY^iq(pcg1vcJBD)9j$F|MVwyRM%Pf=l_jD+NyPHL%YE6 z$(-O5y>IX=Oj2(?JA*YBgFzC#Ok z9`8k0Tqim&9(eUu$uOl3X@wSOFmmcm0q`1mIA64Ve_<%3$nNID@10j(FXICMN0-)z_1h!Y(wFt@%rzn&KWkzAN|(aV{DA=J;-G z#?ZdfVo{uhmv0)tmnXPt7NlYVPN%)+Ps(HATs zB#a;EeCAVi=f9W$o`(OvXpJzf;CLh}-04ibR;6BeF3%HSpb7P|@BS;Ns&;?bSOo4F z4DlH!B~h1(AX80$!u6fC-}OET`Dlw`(|?}OMDd~ z>qFr8tnPYIjcmoZtVUn^-ei%&OQA5Tc=Z`Iz9m6b8v)SNDYgGI z&ufpuaQSeQ_2BtH5K)eKXd4pr>O-P(?zf3-LUZVNwLsusL-~7SqM_*WS%%V#M4_TG z{P&M5x)q1sQS4zgx}C=u@Q?t@YU*P&n!}ih@#Hx{2kRN*I*QhP*keYtJ=k?c?y9!B$5bcgrQql3d(MDOE& z$&4)a62X+@f)63w)4wmU=x5`h3F6ai?c0HhJ~iZLYXK!aa#)hyA>2 z|mZaulq=2%a+*w}~-#`f<0;rmBC$8kUReVyk83I8Vz z9h*!SORnHE+X=(t1767g6#NDfz8iGC>whkQKj)G}l@4r;Kv22N_b&h+TX2u|j7#Oj z(K3uiNL1XY*yk@SMq0V^nF^C4tY7F%Xkl1!XVbIhi9k&fR@zT?lM-aSH@RdqE*fzT z0x=nU5YhN`oe2_Me7X&Slwrh-emZTam}o^KV=~utowP0%qBQVdeF^BBD(JrsnqT=g z0Kw~8J^_6p*PaLgV@w0$mjgf4%j*&bCxW;?u04g`wLQC{3<iiFFlUUNQ@-0`3U0PTr^* zMu`6+{ji*^jscj}HzT-Ix^mFBSE+}Zet434IpXr-z;GbHM|<6Z$ud>QLOHm$q>Yj? zi=X^?XVKh5dmh63E6q?c-(MkM>f(9y>kJ)X*W=($$*zh%V_IowxHcM_Px=q^tBS~D z^CNokYN*qIzqTFLw@*J|W1E6Y93dEjFM7bVH;omm!&C=Z%kF zDZ!5^rmEV)HlD6O6Tr*st_e4;^fb1cMxb2+e*K7{dMXd+lY~LT*&%qoG(^LQ;xu2U zlX&3i8OG86!Vntf_USh9iF4*U|J`}Z=mVM)PeAs{D4WZ*4$7P zB%t)P&$2Kr04o8Xy;J`g@KPzWe`1T}m6IZ9MOy`GPfato?=$ik(>JsouPv<{^B1k$GpotiH# zAFc}^jX-(p!24l8(M&7@pUe|Pfm=;J8d^`&7M`y}lC2ikiklLO3&7s(v`TZM_wLvp z)BGvu*V#(5myOg0-#f?hZM~gOm)pbI4r6l2`c;x+BoKN zlf8pTUa5LIE_z>y*IP(5Wwu|3hR`D}LJe2Z{OO%LwF75itx_bm2;*V*L_d!<^U`113iZ?AUR2fo{~@G!O7S z8ry*a+L@ya1s~1tUwKIw=9Y$~W4(^vWXYd@p8Pzd41rg5Et!ZFn)0i|BZzsFQS{Ma z45FpX$A2OpdxJDya+vhWuRX!EMr)~=G60EB#(9=Cm{yUH#1~9tH^>Jf<0R6m#c}G< zi(K*ezx7%l*|KrLE}7Nbi?ghND_o~9`pZ1q-*}Q*Q`{_{6rWZ;i3So3-$FI8e&&NC zWaY{pZS>)b>-mE2`c_1^jB#|!C|63e+q*hQFKyk1RQ#UTkJI!M6}>*G=VmpY(8bq{tn;^1f`?7^Zc-BLmxn4n zI7ms3JW&2@wCq%Iun#b{=0FF4fUU|6)~D`fAdrMDf-%qb7}(_}O-Q%nk`;V~i0&E` znTDr*@a5IOZ9_&vz`~lLmNpX8``JG1kxEJD;}0!4K|3<0TVqBa%r23*zlrBZWH4U0 z5PQ(DoTHN$fb7YEFYgjdU<)3`W~2TCFZR=#A)q&Z+nJ$iP35--s`>pS@B(Z1_+$t{8(iqnGXFSA(Eez$U z(rAcMIv(%#M&j7W?q4q*k#Rn$E zuip+NtT*wwH#{;4u5GD8u}hZ<6@&20Q`j4GxWAW}!MyTY;KIYKaj~9lLj|ADb-{w> zXQV5^!qH%Z=(nxMKm85L9tLs3cFQNel6fR6KmK|2x@yy>gzqqyx%l2?3(eDsLCocG zdslQ2dcLqbO%Nc`$|v^)KCTKql8YQ&?l90WQGtlNjj$*dWc`kau){M=;cMhq|fFjQ_6$TE)+((=L zN}9jU#9gO~MwryIRsj`Atd^e}?`()lD^;B%s>2xr9u$3Ux0maqBQ-M>|74?_%Xg7K z!Rj9hvpde``3walaYgh+!5Q07qw5!{qQ@py4<7ToKiaHbesEVf#mwc)!Ha{sUwaYR zYil{4w$X?jszTm52%aZddax+>6ZVji-I*L2fukc8YS$2F;Fp7qW|#QMx9#UKh&WC@ z@b|j|WKkGzxI%6W_|)$N(vBy^<2S&=M}T&+nZ~}8nxXRO<)lH7nb=UnCA)@o7GYXG zo3mta!~WY5Dh@By(QrLSG!7x6di% zS9=>}2G(da?F-j0X5}QM<)9<2P^&l*D$0iYCMgnRBFhgP;FHiQ{{xc#7njIn&F46G z?iOCDCSZ+j2-Bt2p^J`aBdnQ2?1U{L4m?WeF)8Z<2czjUtR`T$m;{Z_29g z>0R-hEnP?RcHD}C;UCvlJW`!Q#=eH%5m;&(#~y)~Xxx)!XmTP*e;VXL8x+aO(;`p| z^Y7W=lRA)%A&Qg4Ci82P=5l54I9(e#7KD~f&prgcc-_0=Y$*(6kGR#%a+Hj=nMsHH z{nStbI?Mq~mcO0m3g4GMOW%!sg=~(F zHo*;$bSAPDVg*dJd-V~f&<4;QrUGPQ6G10(WzW(3hbT`A_0#Y>R2$q%MZMcYywII% z>aI2%Lsu?S5d6~Z&+thwjJ}cHCua1T#4KIVsE)J)J~nf3t4Di|CU2=n)FGexBvJ*U zcqjy-l@EC24Xf1KX1_uW^(#D5hrp2oIs)xY*_=Xl}7sic0DaxuVQ;Vj(H8jl6{ ztl@;=7&sO8d1Gy79NJS|g5yuZoY}H4{hxfL0oDiPGb?VB&s?rXwe~sbb+Sdvx96Mi zf7XvCdY<~>#8qEs6=adRIh)T#cly&iVqloGZYgq2DE$sBY(0R;w#HyO5m{Xi|j`ryzeJhFvObXi}zQ$^dkUa z8-=*j7t{_XJ~$Hv+WXY=obm2O&HfejylNDi~KEqaO>WLW#z~4D&S_4?L?|I7O zd9bOA>y97h8sWz}k$zJxC8agx00PU z=&q>}m9ckFl0H+8hHU7@QXQTDL?Q5QW~dH6U!?M-P2yvDhHyR=*S$jlFb&0tEg}In&YcQjdt18>ST2pa1*s+G_eQ z$i_(cvP~<#>q^Bp?-6%4Xz=QHw?E&1dQfBsGqE1{N7)PW@SLg91&af=IdJ<2o23%I z=B3MHDwg?zEY+b7?2pWuog5RCD;Ts$p6L=wk|sWaAE$aA+6Z*uB?%5v$opCbw9)s| zLe|cu36WL79#gea+kAOY86xuP@wbA8`P>mQkI<_463)vU;mhz}ev%wYe9GJV8DG zsI*WsdD7gNyjS4W75N&vocg7{z5xOXo$IkwyV2@+8uJ0z_5FJ|yr3t0HolQ8DNX*! z@UtBrYSwpRoJm))>Ui-&I|GfHtg}9}+AglmSHBzP+5p0(>?gKNG`pAQ!o9wA#@CUV?kk=n|xk;NAC7^On%cCA6GUg(8h74Mx zmW0D{fTc@BUs1k3M=8z#svN%Ei)~)D$!SRh)g|_VkdkQiW;lkt?N}oDiND=P-Idjx zkXC>GUNXXJwB{;*6!`ng08u+T37|1I=G#2R0wvra0A!Sc!<9r=?}l{$d_EW{5PB5< zwUrHoXWjP(om^Xc&*V*LNj~HwO;dHpPQq`eu13BY+nHVMI=pjOlsk;VH~8AK#p3E# z1Ayw~&8+%!P<)FVQz)NqdGfTyNTcPU!_)~5lQhDRYkp zC_%1KG3Srg*YlBCiN@6Rz58(IAeQR&A_FooBDOZM83P*b{nB%0neKaT#g$Y7rGmbH zHMCz_Yq+w?u72_rRDz6F4}2GfvaFfx80_zu;fIdvk1$FYLSXCbPQ#V%gzb)_Nq(}y zU3ZOC)Aq>!)bT44i|W`IwFgrG;@_%k*I%D4G6?l|eYRk%UGdM|8h^+cnFz~LymyV5 z5h^5j|4ieG`CvT0^v)hdx>x$4e6v^czfVQlAfgj#Fy_(pxneG?yXsOU8$@^>PX-We zw`wab$am3g+C&Uz4)|>7a*fvwKsEZ&?Ybqt9)qDXf}-cC5E22Loax}F)rj@7O7$(2 z?!By3nfztcBnGSUa1VZ)041(8iYs;m!`C^1Tiyg?|0l^IwgFc*BSY;i+Ru*Uh}%B( zpGlO&;XTgsH^=xdf>7^jmsz*4(_pfM?Wj~cXnBx z$yXh{O^XBq{@qVmy!3{Fe;!W@={=aK2j2UzP5%pMBJj0CeFX*AMz0*|e5> z0wrQ0n97T;j_W9N+s3LX;fTC8`{qy)IZ0K9riL!D!5uE5b9WPVf&!-Q=RVOjTSwBi z;k8~2s=sRnuy~C3mJ|d`StNjPSpD|gN1T; zzn|xTg~NK#smNy7NR@gBtcTMt3~%0kdbzV9%NPq6P)tbZzz0`C{C#mdv%>;Ao>|XF z9T!uW%f{;V^q70#wi`Y&^GyCG4UkW@$`FG>2r$|+R>cng%Ay@aip@1NWmZ1+gcN$V zGh=iq+^Iy7a|>y}@#KfqSDsgM>yr($WF&@~n1*KGhMF{vmm|Fakd5mo!~zM$Gew zn{T}s^aD5dq_;fJQ%))f`$5s3r1`G7tNu9Cv_YzL=G)n86=SkQN(esj_>Q{^f$Q0l zj$sILcM@Rv$kp*t$s4ktEp{iiV&b;eWR+O7^3?$9y^dc_N(V^%wbpl*ZmZW}s~61t zC)3`KlBcpmunVa)|J8NwWr3e`izfB^AQkzeKpWXQY){k@)2p5_!R@8GcPFT#3p_sS zU2P7<-pWbsgYLk%M&LUO#ycYKV59bKe8nkHyyH-9+I^Gtsekp|x9$Vh6x$K2JW4MH z?B97keW}HJL>CBgaJvcIuqZwH&v0t{zp6rmOjcJdt=5#U0gz%O;r5BPbli`~bn-B~x)jPcuX;Qa4p=fVKCY!AcXB)_9R@svcMQ3a+3Qf#anpAW6c zy`hp8b*Np5O#tA*6rhnIK0?8wYULw21)NewAS@DQyw=aryfmQb0zC~6F(8jHAmH%yD&YeYF3g2R$mBpYO8RPkdMs{f+{XJILUCPEi(lE9^uM}al?6z}`_pj_)mbUDDEc^i26 z^#|94ClCxrF#PNB6U=hBSP%DQzhg!rc^sg`bNY4$x@IgCJ_Sk>1Ce0sp47kZzXIY9 z|7!cT`@e6#M>bl%n(^E0X@sPdj`Wk)&2m9A|eG&Uv*S&;NUT2*W&tD|}H=7Wpy5$Op4C z;lrxxFPj050yU58a@~5snJrO;gF|XTcxBFwrycmk?zoNvu6Cu}Gr@DrqBwXLlharC zl1vBO)RIe=mBUAV+QtI_*stF9v3zwjExdyrp!b|Em z^Qi{xZ+SxKi*%CxJR`=belBN2@N*NRaj@ydsNK{UIK2gkP!gwG=z;sfD^oQzTA#La zO5vBp_e3}q=cE4-Kbqa{n-PV-zF=n@csZ2&dJ< zfPr0T)65}Y8PR7?#2yb`jv;P)6TsvSoOqenNdzgKy#1i7h!>dojt|V;PIc}Z;55sXdP=l9(^p|759HpLCBthH#}Aa`oZ`9GAO=*n{lX#bRAm^gh`ld{8~~gycM6iYEUB7zn&$9I}i%`)4W;V0V(Jht>^f zV!k8yO{{Cv1jw`yBk8d85UqHM5mK#FpJ3fnn2WQtrDy9`CEQO68Kxw??(_}4`m&iQ zn>(Hh5S=F6y#FT24V9j|Trq(4`!-UVkr>`Hu!LD=3vz0ks3PQsHSoStgeYXiK=vGzZpKaR8a6rQN!4etGo|kBLTOdJzt8YADqF*68=L zY+4i#i9+9$xs`EF*s$V5G6!#;J-EZDvfDh2F4xfkUa^ny{IpzpCqRC?vPY5~C+HEo zw2A<6CfR4qiAr<&J`>#S`=sNLi@g%rg=i@z|;p+JN}{J+d~3!bwR|1_p_WZ*zFg8JdY2H&$(=>qm|h~`0d88 zWfyZh%%J_j4Dq6hl=rxTCAnU4frH$_ytGsCU*D1mn`Z+sw9>F*#!002LkOF@J|RgG z&VYXmonzYG{uD{CvS4 z2zvgHZG^kGrEZme_YMX^>Jp5Ekly?SG)UqM2$JF;2kQZuO3HlZJBAWt5XB?QAtk6p z;PZBUYmLv}O4#vA`t8Ta9W!j|LYfuO*R{kX~Gkj&k=x{OR zgyuxc7eyW4QKwM~Y;XaJ4k9|Rj;;=@E%@FF)P+@9Wx#6|HcbPs9Er>v%et4vJrx)Y z3O+mlAgaHtAg>Nf|0Z2za?+B6+hfpony5lDAE$d(o?L1}N0%V|tJR#e1J<;%&1W}W z4sdoDCj#!=VGrjHHMfK~!Aastb2s_g)o|qjTPwpxh%bS!912Ze_R1@tsT?0hUX>l= z0g~f3qq>IyyT|fEsc3UU%%e9f@6tYuSbu!PUgly3^o}%#>ptxjwWfP1pM1AwR0`_Q z%ul*q5UsD$nLPe0@(4Nfp56?GD!KCH8Cq7Ut-*bUr}KB^_liJCg=aP&2w@$IA|4wz z09gyWU?8N!5TMlMU;(rK)zk;6jObF@{cH>4aH;$*7AvDf@#!;Um?R*(8&!b z5TAj!VC4&7_>dCm<;$(+T{TeoPk0>2{Bi?uVfbTXN!yb(S#~8f2){1p713Ty*{jc_ zRf2HseOZT8+!fPXa&@%N3i994vCh!EtP(;}!4)kKE%-$Ir&(6wqjxugE|6~v?;rNi z^h=ZRn^;Nzm0U~}M7eO*=BYA-tWFv8ZnP1qe?Ete!mwVw)ZOGc|2qNyR1{vBFqdt9 zt8xG7xKiWPD||`~g42zB1A?)^}Kb zHZN&k&5<=QopZ~J#!ma`OZ1?J|EfUB-SQyjl4>N4fd(x7L!Tv?k{Xl|Zi zj!2NPdK#Lr$aN7wpAeRyx5Er=tJ$^W!M|(Z|tTlIzdC>lf3BIlUt5Nq<^Tm~-|%FF_W;5qeHfl!yrS z9V6$z>|&Do^kuvZw?FH)k}b0zXk(QJeS<=)fX#LP&{-( zR1mXZ<8?!2fYl{@0Ezi8RS2-g=bTa3d*Q&5p}B_RA`OEM>K{D%u@0Na==gQGyV{eE z-kFU(OR^Kv7pt2ORs?Lq@qv7IXi2vKqKf33 zR~4e`{tcY0mG_o&UQI&*yPiUi5dRcXr0|&)XZQi&;?5gVlgjsGONiCF!slVgk!>pJ ztZJM|yhmK~(d5AOK36q1cB9m~^hW}b?T;y(@{Wy2Pli96zt0DS-1xLeo%g87+w+(p z>nEs|=n}0MPb;Eh_?gkGvf)rv3^I(x!*_Q~yK^$LoJi7p0jnH_?F3AMe?u6qKfACz zxBXJe>2EQe*q$tu`?_BD9)1(HV@WigmKpH)8qa8vN?apP0c^wh78>C_RjVEiq^C_M ziLc~F=qyRnDrNWFk00VNCHidqC;&lO-YJo^ilZH&&-2-nnG7s%+mw0h_s~!K*O8R3 zdXceMp|+2$u<*a4dybOy{rsWgc1HcLhxIs2qQ3&MoFc#~p7=ka}> zSXC^xPkO?8?qUqhJM_C!S!&(m8G3Jwc`Rc0Lv(=16$e0NUMq zg&0AcMq)4ca){?MH15c7r++038WzbRm^di@BInT7Q-|RVTyl#F$ zN#cH-@iNC$)^ouQ!q6}$)J3U?09q+e;jv%7R-)S-Tg~Fv-s)g$Za{wkkBTK+0U;hs zJXGJte6PM&iTX!8$oZr`sB{db{2cefDoJ1AZ*D#m-oYZdmG{q?_rL4IK4v0^_kBK= z-j#xDpZt3e8`$7C&CK}3T!m8lU>~eN6kQ*41SgS%V5hKZw=j)Y0#FP)dY2(Th|uUH z*sKv>v8vZVEx?Sto1+TzzFaFnv5g#17WrL9fQ9+6OXt`vpdPYF5qWs`#godJitEns zqdqueW_c6LUNyQ!6e)bV(zIh${I@c-qB98Qqq!2VR${EvJCyR!=6RF<@y{hl_Qyl2 zRdh>gWyr&rj-TmBVa~l0g-EWuk#WqPgx0ure2V|klh;4=KQV%yBZ<&=`Hd`3vbOwb zM`EK7C~{MW#PqMwf&TJ@9#J1^mA=^L?)=LLp?z4} zz^fRs$dnB19)LxSBwkz09b)2&L~W|Jf5_!{@4+(syl>;jtxMRO)@!;>_C* zf|Li*srkh>E${4jGP6<;xw<_rokHRO<7G2pVd?P#keF5p9sPK4xZ#+U7-rMwnLkG= zQp}}lGrZ!*cZq-z186@_t{%;RgXMksAD(?aQ)6-CqZ=`L_M!Oh1Io|y@hP=8=Z;nE6WMYM!8hA-?f{1$b8cd%+$!rUIY(C?#tyd?@}8%cbPu%fuV zHmJ?qK(RGCn^1^sz0*lppm$UUzNT_2bypgib!{*TbgoE-8kMliGrE|*OR;L`nD~#8B-YU(wWNs_(+5Un**Ep zff5*To$NlVS%x59R8Luue(S12jXGt_L*fDL?dgaseG8>+IdO-~L@F|zkWY>U^Dh1x z0rk7Qi)kd!8?2c~1Fy)kWslqI^)fQSdt)j@1z`Z2M)M41OCzTRx}ZKg!ot(XDZH5;arI>LD3nB^1q++cv|OT~`i z8ZoAX%GydeBvt!>ee56IT-VRx%(otrPQUJ(00XuH?IE}$Y?tClldCSub+=SuqEB+D zkt!~vrgb*u#_nbS1i$a3D{OkQhQ9C*_ovEATl&}ISmP<2KAlQ_-Grxw;okhm`w5qK z$_!LEkAFQ2I`dNsF(z*}iya2}T2Gyy!JHg6a?(VNYQ-;G6|4Wf_7F}vyw!Qmqj_bZ z4>QdG;vN z=^|&NU-I7b*sajdJc@(!q=!6FXSTadlX49Q)nc-2%~l9^p=1bvHRosomH4qXkdb@k zwK%z;z?zgB&4?-P8#|sLzsT z%{Y;tU%0KwHCb3~$ktLakPPO$8i3d~dkjW@-}c&{roA_Xy008E#BLYgH~|6E5d|T5 z1-=~Mav%F2rjId+NmKW#&3}4tNTnvK&2WU!&Nh^Zcj&P(k)yJceJO~@ zoS%KO6uItbmOcCzhD!{lYhWV4@#fZO*oy7o-8*q#kz1lxvw;y#OF@^7UpH9N5Gr9D zYX;BMkr2>|+2vZuzwSUhgC&IIbE^sZG9UEj@$y~S&z<4_c`&!!@pbI=$YmMMAVTzP z!hhUsnCf~c_FROUC;_J{ehp==1oXfm^pPqb?6%TBxJWN{YB}-$xNgnc47!yy?)4~9 zW6^M%8DbP(-}y*_8Fcpo(^}Ga9~-mB)pA8)~?JOV4olI{h0(@B+Q$xC5d~le-8b& zY#`>{j%RNi=Y+3Q8JeK8lqc~AWDpn6ABE0bo)xBW^l5+iByDp*_AG z{a+ch7yxnh2-*Dy0ou!wH}(i)Tdy_C+LlrjNC}H6oR&W~t|{>)!iqZ@y6F z{Z9uEMXfon-58Px??G!D5oo{xn_qE58U8r<{UL@3iFJ7md=6aaM45`lyZE<6eG8P0 zM+Mung>esC$yKLmsfO4+x7~jV3cjMTb@*iwBQd_KiT~bVMD7G_Fp-i#3Ag3VvwvgJ zeDa^SDwA}O33bLZdDOqk{PT2>}^ZuiwC z;D=h{g{AxG60UoTEx_=y8X}RY`67bD=rAHwZ~`vs`Cl9+)W^D#c=^|MK^l0IzPS41 z>RH|V-K#!>g^OjYfWDh6G?-KFP~=n8*#jfad4nU}&x-_VP)ifu|NZ2NXLv%`xe)Rm zaN2*^Is&#*_a^vh`05^UOnY*g&NH5O**!7oW}4H9xfyUZnHgZ~0K+~v_b!(td%2#s zA|rICEg_#ru(Op_*H7m-p+vt=$fN zl0Qxne}1|j#4)x@(su-^ZXsUZ&0`U>#&wsB4sdxCkP>pfg9q8I)PzY^z-%`J?NJ5B#wAUF*E2Sh8%o4VuZNg zhn+rNdZLtMTj=$|uiVd*tJpT=#8*~vliD`09q3=`vI~SPiE2whwhMl##D7H+MK?>c z9qx91xPZQD#cTSpLwZk5pbp&Wau1%yZ&}IM+_TuhJ}t1BDZ>aUr;y5D*_dLM_>Nhu zW{83uG!i$muzqsesr7=fVVV|SlyYf&jCFxqiSH+5-I=A@KglOh93TnIQ06WWwkHLi z`0(;_E#OI;>y-BS` zRm|I);;aH=hTh%rn;-wey*2XFe+YF-UJX&cX5d(H!3o{=vw*t1xcbYe_}x`48RXm( z2qznisI9=Rd#nlMm0S%6sVZoNE5d{J7WmoU2tT+%aICh?!;F{08 zghazF>D0pG24#JQ)Ma6K)cNP>Qr8}e3zM4XO&dkAwC6^+Tqz0GK((Yks9PR52Y)ee zaK?{9Fh z1OzF{6Z6zi=_B4F_4tM&(p6ufcX59*0K|pS-EFRos`0#BxB7L5LxZ5_UPTdAX^u+4 zk$9hZ+`{9j{Wzi@62z>L9lE~Nu3YmmKinE@mFXWlux76q1Ml#$2J zy~IT%@vm!(DmvUe<1z?0uks9UEt46=ExfsnMMi5nUL=8;h@pbhLh_fZRqa!_-VAAd zZ4kcH@p+K$r|y5suWeCLiF|VN$gz@cGdn9NDaOHVBs;=*wIW}drsdk;6KY3lo`2{AI5+U$BDWJUFm)aqj6;(x(Lbi7|Yf6yphgBoS@~ z@&3jP+jYo3-s7Jh6Ll86nw__T=~6!L{6`!G;#on#%J<>gaa>pc!8nirBEEOvD83b2DkFGe}n&vL_Vt7~BYWb7J?oTY5-bIK) zp$Wj)JV^Tv$30cGG-B}zio@Xc`g9iODv@tv5F<*T9f*EXNsILj(&5p#`)vj&LmKE@ zJYK=(vAM@6xoIfSeNoq*%i(xKmjsrk_OgAueO~k`*L~Z7e zG3nQs*XWS(`E4m7!$u$_u$@tYTjlC(IjL@S==w_alVmiyuJ(^(Bk{5D*_u!pd?>(} z^uz1f=n5YEtRF!919q7GvVTZ946bY&zn`pou#&sWCoFn+UqEnf?{`r&uIVIm^~=t0jOnZog6W`^$>?)m1L z2WWq_QHkKRuh>q}4<3bzfY;F?HpDLG%OYwa7>9-nN+Ul$mb z)}d>ObXR{(Il?cG)(n0iFAyZ)9h^xvS4GnJ9BiMuw#9}|PnZ4``H#`sEItn+NY_H$ zMv-g$J)?uqt%56~B=5pwGp^d|uO2)V^?gePPWIHo$*p{ z6+>TaHo3+CrpMqvE_U%n%+Vyhm-mR_ATK2a?1MwQ%*mg=@YteVRT%l&W=yGK4z;hMYLiI-d7jH45`uo~Q7q7}y zfK7gF5dWbfX3pw)gOG;zXTO37mt-de`NkO^)!O{6<{4L)>i%1|53+~T9A(i`akJ^c zVFDALp43U8v>D_o9SpxwQi_`DP?%B&Ku-1){GRrlX=HAikQD)Me2ovR&?D%ca(EBy zc=&6#_LtuIsY!%%sA6fY@p~ziWhoQ=OCt;>AmG}gWuKyRHw+T%Zbbhx{2bgE2x;5! zB)Z951iOh|T-)vNQ3|j7e*I<$-p-u(XT(}{B8#*cX%1cNXeg+HS=?>T`tI0~hTw>N zhzHIt z-wJuuWFu!DV+jd3l5|wjKaQ|98RQ;JOz;H4ncj#z+^U` zrh{^b3RJ;17r6k%*gQr2UScJ8CD{Z1z(^5DtkdW}FR`S0=iBIWdp-)hfq8OYqaLfU z1j)d>Q8r|9uSww}e2xa&1zfFBm|-k`-&=jWhFe5At#mxI%{ zxjnzZQw#Kz8CyxCor{W>(GN?%*p)0Xv_PMTs$O2ZtL9|Ug4sOdsva*IZz%yyz6G$* z;-;YwJo=@9yjDSv?qfC`PdR~rF{7Wd);QPDwHYZ!7!Y7Gm~U! zPTv^s34I*{I?#&xv?sFNk?XNy@n%dg#LZ~za)Xn18G{%qTRd_Op)?D{3rivId@I6w zWO>o~SO{H*=eR5;{Z(3$xo3UK!SZcP9P99=JicQ3&^^Dw^?L%;Fj+G>Xe>|_dx)<~~ZxS{*H1P97@Za9mlfgC*wjU)~yV?`)M#>TrI1Q(tWCw*OwNV6^i5qdA5vX?j-LrqYfo7yX$8s?i zB&WcgzHzMi`pM*atDU{M*6tg4=^GUi0(f9>GJ;sxPN-fqYe^WAM3x@MzT=A*ViVp~YzR!-_9svJmMlBU;YuI& zB7T*I{Ix8mee5wL*+JO8dUtdMBbwX!t(~x2fO~qFx(8f*9Neeg4#bHB=YUKSmdzEziS6~iVSC^u(*farDs5R(tY^Xw6_y%; z^E>>!^z6x7;=2R?S(xHg#>*bjZ>y12AMNW>=vUWb> z{bfD^cEU>vj`kl$t;6MidWc4%E?U$wc+7wgbwC7g>^gFH1o2o@d(9PE>al6T6J;pAt)TKLm zG5w}$NZ@v)%JyIY?_6iiObOg2t$}0#g|R3~p0~x^h4LjU-918XT5Vz;XmRa@&Ycu3 z)(0M;zK)$F*|@oUcs1eSgQp#Fq&9Ykc^C_x)1XTA82F*U+S-Oo?Gl)RDsMpc70trd zg3{VgqdG=0Xlem!%O1q5_Fj|y<8stHbqkYdB(dUj%{tB8qLLJj^v^mPDp^~H?Yw_~ zkM}I-*RTA&g+nbnt+uww4yo;%)&wz0L)F6@1q$e>4xDKg-+Bjx9RRI7H`SOGIGhxG zD$V_3JanT!yi%WTyM-NfD8m|uru{+MME}-aT@wny`_(~~bd+yN1DR4@833DS?Yqm-|<5+gF7u)C>4f?f}&Xc{@vbRpcB?YG2!*^m1M)UieMh zw~N)&APr53HF6MxBukt?E$KQC zB6A}^=jseIY#R|bC#fB9q)U-tfj;U+X^&&GiiY3hT${ym`!k$>pSFA(8+*`kFHK2q zAzFTtdV4^C+7<0JROnyM>u0C_Dqx*`=y-KKDM-PGzwiTFX!XdJu=tEBfkT!=(Tl@2 zz!_e0q8m8?nYo!t_k9D{N*svv7bn9Y-9Y^K|9x=S6m#G$rc(wM0aXw+(%A(J6C`6S z+jY@&Q3v8v$9>(}aL&d)Mz+jc8?^qi8FJ|+3TS_^d-=vx zKFR8FKAp!#ex_PL&W?_3Fw~_S;9jSiqaVR=65uVF2ImC3+dre!&uGe7NGn>-_jI%g zj1)1_#*OVA*!_CK(Ido zaR)cL>XJ5VK%w3MpW!cuVY9{^!l)JzJDwr6Wt#I@(nF-1rw-P0a_b2_`=<8rYuS%R zn@fUwb*pJhgylPNKPBuoI=lT3=wNYD@S8PXU>Ng(7z5dny=~6v-k$-tPIftYNyJ>U z?xgCCsQddaz=^zurlg+=_-(qqp4(*B$J19*IALzYuZaQ`@11i_r(kQ$$XLPN?V5ul ztIh)9K-#Qb2YiJJQQ=e?GR;ixB86K%-GlKjt=0`kRqn(XMeM=VLhc}^&#Nrh!uS!Z z%=x8p;9w~NqLaz$`v-5wrJWwMoZfd%!M#ExN&m;a5sYxy|6BkR&5lBpR{mTh@@O&V_ar;XKeAZ*~?F4PEGzjal z(F_R1QT?90Le7%LUCR^%S*B;lk?&Xf}{r(5{mwO-Y zdtT=}pA~+SSKH!J@e;dPI{T-7&!;Mo) zhWCtZ*wr{k8#RuE|LSgxnf`TL;vhKSL}Fe|-fQT_#Hv^@r}wor1OAm;t{17?V|QkK!+JqCehFni7@_sOh_S3HiwgNHRV6>J%EwIQdXB>rIBo^_yCT zUx(?^>NTtUQtkCi*6#=vlTx4KDH0{p%lDMb9ehT3K$6PS-39q>{<>NR zm;Q?W6vAX|ck2|BQDgYMp<*klK(QoAYGrbq4=m$~a^5f-DqP;d0LZwv)>vdBEqUwF z?B35U0^_!80O1I<#q$a!MkU*&>y`J=Xe70qdF45 zLGzB#Blk3N57~M-L{F*;N60obdO(5`~06DL?qHL$^kx= zZ&>@B(*8Qimsl>B)(;P+#*q84%;u=Ek}`aI!aucI3mFLhzspI#YoT0@i0}~-nO3_E zDiu&ZT^j5Nw_7~R0Uc8X{;+!2{NSTvIC|ETwaxem?A9u;`||VXmc*7E#)F&*ATbHv zj?(kR-LL>|!!}D=?QFPEMFY&xYl<>o-kl9bfhoN-f55_9j3*M>KMa%&U+A6Q==?T8*J;%dbIRf-;pYA&M@X;-D*1i z7wouNogBnKFJa&IvY1vA|Np5K0%Y}@FW<8GM&%{p(haA776W?f?_Mv${1}+&Q zwqiY{_>6{XZd(sSnX*69BnIb?zu+cD?|-WnbeUiUiP=Cb7RpQ7%e7+5?s6eMIPGjU zMc(O&B1N##BW-b~)1~Ec+1X2sfFAAk)10mHJw|})SYZD6SK$eyt{$9OJ5RosaMzLJ z@qN0pgrW5!b4zH;U{o#0Oxkph2JD)ao%=C$+BD)s}q-aJI zRv_?_7i8^a!G8}&9D*%hrhKzbbt~5$gZ}tty!?XPp?@Ohg+sdgud6Z$evIBSgEkXT zFr1qTb2_M+kCX*=cE4qSxQO0Am%3QRI=FZmSq1WSmxnWwXg9UZ0pewPh_EQq!vT$B zr>S6+p;SF961n^rFJk%>Kj-21{K4c)iIG$o^~lR*fyyIkfmj4G*VJ3y?UlA;T)-*a zp=(PXBLDCBos+S9)o-U49|Q;`3cK>Etz7xJ!nSU!y1itzR) zcpaG+%B%9lU;Vz;WQ^FyHr(GW*FsyJg463D9G~_TC+so+tAqkWkS-!KHj40C#{`l* z@5g&wi85gFTWcxhtDn3UdjRJ}c5X`dE&Yc1j-vS8=yex>-1SUo&?YGzuD55o#H zqu;vsdRpMw`G`-_89A+FfdAZcJ#8dhXy?z`q?WOEW2f^zGR>T^p?i$2tA|TIzp;O|ZwINSoEoHpO z^E$(+rz@ycjUiyXPQaOd?C_wNPj;M@oP$EzWCn~|6`|sxu74>Hp}A~W7KefshCT8b zZY3YJ-}z8ieFhH&N5sk1=sqV?ZB@rFo&V9j>vNdAyGs^Q74Y-L^v3&7USa)(Vqo1c z*5zUw$Za=yStsg^)izn$fK4x%YT71W=E>mxKY;sf4vwrkY(SY|Fjp_e{IVOMcoOc4 zBYBhHpj_^?LjFoa*>utBiIsMyQ@V}ACt~Wz&p*Z=u2;$4=%K9uhU=K}T6fqD3qnt6 z_Ex4S8z@F5T&vv?+}y$Pn2+97bMc2P!)8rU9w8Cxm-=O^ca2HiO^SPZ^kHQ^N3RZ3 zn+W1i7W+E(TVr>>r?uQoQ+&+)4>A`&%0+8##oi0TZ_aEC^L|Y{j6LF*@&GQ_?5jab zrX%chQIWK&3O!ckoBz6*12;xW2*!MMe)utN14?lyz_flV^mn2PeyuvTZ{Pz~mkkIT zr1h;iH3P;wql4n|Ul-NJdh5LF(CquRW$szN&1zH7&!q73bRHo4>4p z_O*+feaIKIZv$l?2Gf&nBNkyB^&~l@1^Q3dG@yj|SgBE~sQi*olYapT+1;qP(E>bwc?=sSAhQrrN8%ey; zNyxa1bNH2;zzrQCM0=>y?ZDv?KUsMKm%@$IezQbo_@!-LrzN8t3G=a3T@0a zB$-^g`m+gnEBCoI_3mL7Ge;chmf}$BJqKzRDc}&e3`-1tvp#zpbex7`E>-kQ&?V5D zkWlr)w}l|sG0r8O`?1v#OT6>NiuRwlNoE}v9m?EtsD539S1<-JyAHOvGW(MOqtivR zUB4Q;sFYMLIFAKT=UC1#c(OsEMdN4}N(^Zq&Z8jZFUuikG9>Ico@N`*let@10Tl(Y zbC$~O7v0(M5vm4Z+oCkt{#_J(M)qFM`u(zL!U213*Zz$$hVRCbb0cVg#W#mI6)wKqz$W>3pn>%45liDw^ETFqD7 z546xl)PqV8>K3nyXIzRANr|LDRv#!*t^i_!J?iea6g7O!@%edv&-;)sX=PAuebbj` zqEpWYQty;ciJrz*|Kr#seFjl)C~TS#4Ih^8k$!_A#CeVY@@!>jZ)W&*(%Tsr zj}x5JkSy%X3G|Zv3HdEXj6+p>{_qyd{MmjZ&}@cJp*ncyy`D~b>q7W5c~WvGCw9fM zNaFDRu#5~pGjbzF*2{1>A|n}^zn6s)%u+y$fIS8t{yUziuPEmB=+Wsbg3aB z7EG(0D^^&jBrb;}6|ftWg^pzVYVDc%nzm8BlQE}zQ|mCG>KU!47Otu}X*KH-1R`I= z)4z;tRejDuKHRN1*B1fL1VwgZ1>nmmpSO?Uj~`49|M#bIj)$#W9C*c>`Gehk?07k3 z(78ie-MDA#y(o2*M|;+BX}7$By<(i*_Xa##+seuG+HG=eH~@&fcYSN5-FIlu17Y*E z2_$t8*(BR_X4rhuvp+MTs9+YP{dyvo@iNGa-Mj0JtCoB-U%~-nIqt-xB?*}=> z!Q#P-xyS<}D9beLe4L>Zi=$P4<WAFo; z1Ik5R)Fjxf^$CpT&ueiU_YIUm`pf}vDZx(8A?rVxK4=Z%cKEL`0Jb!>PqtJYjIaDU zKhpWjZNCpjXWg}=86)5t8vLDqA>N$7%Sv93V{7^s47ba;MVFoI!dtYzOY4lLLHraP z{Y=_C2O5OG>}6~fQ);n(y!*!8gOq}HM&!ixtpb$Ui+17W2$zX+P@)YbqD7#Z7Uli@ zrBaXv_3QPT8-_iLxvgY&SSEYQfAa%5S=n{6$~%?4+)tzrzwZw zT9oli5B}_tx8nw}EAYME$%7l6^~*guhP7_*+|&J@9zd?Oovw*1$7qxG=RtGV6y%}b6qBb!V$-MA|P^@|a`8a$7bdCBCyi!vY_bmgYLMRl- zC%-38_HuR~B;;GTrED8rcYHy6*lTVa5=s}rBqW=k4$G%54}G`g`D$(!UGVeLts>`b zX&YhX&u!-8X@r_$1o}hKG^WKrW+{s6UTu_zk{_)}+9&ZZBNJcpnF>HJ+NF+zPVTLe zC`gtFHJvxE2sR`!ej2t$xyiSg@JRH|BE{jX_t8Q(xkFmFyo|;i9QMH#1m1AM)~i*d zTIk_OMO#hM`sjLjqTltyON}R#ZZvArA>`cua+RDPrn%e+5=P(<;Ah-3Vz4Lp4N&LH zxFthC3Pd#R>3@5}O64(uVZdIEBcGWk?Am*;&Z*F>usHRkvBd0*jQpX1?*)E^vjYY= zYkft|Zv{4_FmNj5&HkCEYsu$5J_r{A>k~PO_(1dJ=7$%DC%FOgM1$sU>8Zo<+Fu~p z*Q=UeemyYo&W}*W8z@1xM?C8KxauaW<-h`Pe60YT8g1atirF9wY4CVa97`{%{wv=; z+1u@n&6OWdOYmOgoto`9nd0RuKd&>1RD4LX^hNVT`OKcfM`ZyXMh-4fLu=X}QIxi>8fhws)z>zwT2V&}Dp=ov zjwy#+!j2DK(OvKeb9YW=MOyD` zHn>&8`!8^(u#|n@{FCd6DQuAQf@-&t->L#BaUzQUxV@5`cr*+w1yMhf)*=x zoV}dHfw3C!V@7Bp$F7vZWsJ)HjZfH!C*S(Kb*aS}>Lp!YXOK!kJ0i_y`faDq(0{xD z2nKPgCy!f>tS;~fHvM>m#5OGT3{UYbx{Fk>IQ7+)$Du0qsu}JQUG(tfXy{piOu5-Z zkz?7d-zLm-Kx4tYk?-DXIZ15C5PGD`+vJw90ZrWZxLXgDeIEVWy`@oi_L45W?ta$< zBh=UUHB$jU0?W}v{okg+(3ZlKg*x%X zHC`?fE9u5v?B)a`JCmh5_IysX;t>_gig{wKP81wYO9{SBx$nUv9T}2xaDa9k!ka?4 z&DbUi4gv@;bRiJWVL>8jdxUYU;8Pfn1~cVN`R_?Xi*sJGfqsoCbiK(uHypUK1>z!A zzcac|az+3kG3G|YIh~iHUwuMQs#il7Q@XDR(`(c~9Ou#QwU7A)c>#D{mj$BI^UsQB z7xL;e-g|u2fw^<$3=5!k}S?Xg7AhdpF^JUM^F zOR=@eQ?P3G^fD@hAATp$c>}y|;(kFo=|N_TZQM!K*wUvt|5;ABU))UOa{#8T8=p!D_~U8%ME>V2Irm^m$HnxvYMmNC$e1*MOmbXBYvJt*bW`1 zZl%R~Z_QFf%3Y7re)wrsQgiulGeY6N<00;VjPvB;e+PpC|KLiUb1}b z`5L?bC0VV^IW?ALoblV0#V?F57jW(KJ=;y%-;bb&k6> z!0N^Gqu>83e#7WZ`$k6l-^*%8ft&a@uz!c;G_D;OsdUPuZW_44LXBQ__Q(5^QL|z` zWp=nMwRRArI5a*G1PRzqnKU?jGy=MOA_knp2fEImd2qC8-M1(B+qU9O?5FO@g~`q@ ziUEPRl!rvLu5hd`=J|ojU?xJ=48cAEcC|Hf09TKV^Gf?R((Vw{{i)&#Swe1@dF_ z8bF7y|FPH!Ep$bKrghtD#m02`dBkvBzdsx(W*XooPL!RJ!_^jDZTs&a*I7Gb9M)hs z+C!(PgGdydXSb=V;dd#1YTSeYb~XavtesuF`G()j_UAli_Q-qbh5glUxc|&{6hQ3r ziu39m5)Z6t@7`?stYxs<7WY~pqtLi#@IPZcv(q0}=kfO9b4hyKeyJRERpi3jWuj3Nkcbl$TzOQTl|+a_wH&*%phVtk^V1ad--#iLN77V8e-0e?YT^! zf-HP+q75i=@h@uR7aS)VE_}KBaxahk+X!O%uYwB^P94otejug)@7Z3Smk0BMn*B6v zpMV354hSh?c~e8_r?@Ejo{6}9f-5|!J>mlv-R*u)`J4n;0UmEd++l+HQ;B>mZ~mNFY%`>JuCWKvbnPFLrOAxRE)+Xt}yt4YA&DG`lK z`7y57u`AO?yx_);#vn&)v1!MO&1;9o=l0aOqYy5ZZ z1?$>YqV;%#ds``o!_hVxyXpE4JEWHC@kz#hhZ=;tt3%0+z@_d?|A=NJD&79wGWo%P z(%wYTgS3r(0p#bZS{*x`8XR_0`thirMoGNqs4H`L`5)xT!q;>7s9dL4xF;iAC0TT1 zfP|s#-gv}OAEIj?N;S^BZe_oQ_h$_6gddG{ndaFJ z{3p4o5Z?DIu-fPK8|mU4dE{&pq&$9x}{~okfwzMlJ+Tjnua5nC<(Ge85&_ z`64SI==z}c8cueu@#f|oSyG^N3$Z*1>-~;V3o7|LKNe0MKe6>STsPbFOuZRb!R}zz zcFz@_i*lB(^B|J6rrT@Ya8V-vq)2Z8opKVK%SxV@4qOB$aU7e~1|>Mrq)Wa2dn^4Y zm8tFab)!=tG_x3jYhEmbe+(G`QT}dF#Ib_W=%M`wM5y2}$XWzOR+r=3xSscSDy1VS zDMimsiD~n%qigf;X+yE6@gt_V4=(f55_A4Rmnnmf8;gu<3acYF1ky+6-Zngk4|cA2 zgyChD{@&=f@4)6atG(O8+w0Nk_yQW>Y0+t2cJu`UT%6RxzSLN`UK+No{D8}$MLe%5Z7xd$z7+H zq_va|EGiLjYcUH9xi5511H5|1&kfa(>s0t#1^eMm5GKyaD+bCw4xax^0m9a%1R|Dx zEd1+sv_CkVrIy+^Txtd5L(1wNn=$)c>tu4w8r|#J3dQK0&F{aK#t1+sat2(mH(;1Q z=zOg*e?=Bf-e6@4YPMFKD-$^Q3b89UL9_R&L9YmcuLzdv53gQJm9)qglViHSw&l#z+UO)(6kwwhneyUv$=c z4&H zwY{VMxu?@_;7*V#@Hh=vZCQaooPCl(v||t{?w>40S2k&S{SArw1YqczbymV#lKXp8 zO;TC^Am-wvjQs0`V5sUl1pWa6(N9_h5cXaCl0X|bH7VOGLpBu|aOXcb^mQZ7+-+O+ zWwZi4gZ&cX_w_olH|F?d*Hb|E#Gy?T0);5%b}ajZwBJS>ncnpO_Q~0L=a0qLSy%}6 zKkc>Y?byWMqTL(ATr`x@r>T2un1M1cX%EEnEFjYmBdkmmS(^Cx>j7!31XiitqVsOB znK0ILnxm(VD?VS(^6KJ7L{&UuPOlF8B2Xc6>l@8>FfMw~Uvb2lCe{AqC!Ooh5t5rw z?6#CBZdJhUx)B7p}ImJCvuH2<%YgQ3N zo3;Os4HJxYYtnS|nqq`9$%vK@+m|f!u`nE@_!nRDk6{iE<4Lln_nH_&dUJLNe^ zL;DS3P(xnN@w+W))Rb{=^V2_Wgn*P`Oc{ynf1NPseSdg(lk&Cq$u16Z{C6B}4U>3=a)uaH0tg_D4~#r!ql5;4_VtN_)sb_o6B0(t)Ip)X7Ov6~Dq6e|Fw zpYm&PP(C)k9UHm7pwz`QsMse}gOYyTPDS!=-)-zNft-h!2S@euiZm86!15SCeRqgi zAkLdX*>8Wb!fFq$uU!IE!FYLRwmBJy)UGoQI=ueX`R!K!#1H?To*UY^Ik_oELCR`bWUXv9zn_v)e@D^=;u0Ms9Y|P7MD&>*TsBrGq4f5OL)4i# za<~Qos`b*53M0X?HI$NQ_)#qByNegESw(?*Z%Redvh~ZU7g0#cDI!|kO^U&R=LX*= zTG+}T_B%aW@NOrL+x2`Bh@`rX5OjKM>X*evOD7%q`z6eZQ`95xMZO+mvc%^?7s2=+ z!->Ust<%q(IyNmoj7YCjk~I&ry+cA|ZVL@7r9>(`^UeL`qbxT7^y2LSD}RQfMNO`c z#C=y1FC}eK%I}%m?JBhm3KObP#m0}uF*F}I1WFWN=XPH!e-FF!W+ep-7Dv!#0PjVC zT><#uJsSup`*_0S$2BCogeM{au9gl!9Zx)o1ml%hpa0lQN{4Ix+Vz0K0`Mz6?3avC z>ly^H6DRA1-NqUA$~IB@9Y~D1zN!^nS|QBkxz*K$P5IuM>yqotF(dxh8LY3k$P~GC zJNQa~_+Jv;ALsBCMv{41_o~bJr1kzKu<+UsY#7$3PuDaIX$ljg1TP?&c8dun`b6f+fPmOfc3*voorAuD8!)ALz z9zmE=$M(#ucTl0&f)2S$r7i%;8K-AK7e{pAhX6C}_7JKR!Q>=*E zI>zmtr1{dOf&z64lKZJ(FOABJ;)6a+3FP~I1>%;DVV~|x*b@YHBXHT8xY8#0=_2|4#`FMq=gy>8??~k+8Sri<=(^<)lp~ z(x7CwP&6=LW~EkW(uA;#Ip)W4GFVCdNL+Q3??o6xP~>Ize#cgUbMRg&d~VEgZ>@8D zV(L#8Bhc`&8jhMSpM1rQNcvVm<^fNn(c$ZFC-Z^v6>d@A48ne63-!K&@ezQI0NjcM zIm4fR4GVL52{XdHDj*+Mi0hq&PoJWMUGxj7HFZVAh2mzd*24onvm)(=CwVs;vtHb! z8(Nivy(f5J`3QNSY_l+kQvB7(G}iQ}XWJw{Rh!dbV;UeCP(eyS67`9(AOJmjvm&>$ zlAFXdqog{#Zg&OlxK}*-bZC9|lgrsqFXM(dbfl$&EaITOcg2A1wRA9|>s;nH7B-A;3h7$0;GOCM$ke znTned0rm$g0EK;N zDLIeIf4j~~dU|lsmuP;r(3G|gn)sT}*`Ie{1`H*kkBYZo{Da0SjiJl}@#nQ4HCTB1 z*ev>vS@?e*4;J6$pUL4-F`U>sXSMh%;F!^83$qK*nu*H!Spn#m2K?M`f4VidAc z964PLdw}u+G{J)IihQ#->zC5Cz&0Sm4}6}{*YPi3uh?S!^rTi>QJdLk4=~-7{QmA} z4usypjbj8c)}WgdJTLz({aR44rW)!b=(}?l55%NpA?+XY-4xE%MgFjYyi~y_UIw_H z5f;U*%QgQZ#-w8p;=|WtO{BNd)`}++rUNwaSKbG&Uq?iAq6rm37QfK3Hf8u1>9F_H zlYwaAtw6VV1n%)D_54O9xasz%W13G#^IPnDh4W)$^XK&(Ev6=yoqx86hIr{(YcPjqnS0dIglTK*jWdpr!eLkr;J&p5gns&Hb zc`F#s{4_L?{o>36d(v#65)*xDXY-LoHT7<3=vBza)TTL!wa1d^=By(Cz%w;b;g1@kCc95U9Rn zzI~K%GFGB(eMqj~a2Qcv3U@wx$6heU2BCF-EJyNxnruGA;cvtJbL!tlfVM=#lN{#) z4NK}~@~oVa?IvH+2w=%!tB7+bc0Ee*R-HnwFCL5!!f)jKj##!_aB*J>ygA}LGXF%f zm=XTk={<~2?$JeLLi3HD@^Wr|%hso?!~gVcGA7=`l1|sItgZ>L3yXP8Nc+#4J6iXJ zsWA!cj3s*FHLRd{5VSdvK@CW8t@5YDi$txkKc5|{c6a>2`X01E~3MgRA3_ws31vt+DENJiEr8BW+} zv%`C)s0`sD&%b}}b6{5l48Ko^Zh%fS(lKeqLBrgy2^mt-T+2y*@(<3}+>2{?xG5DM zl;?E3zf_IlZYqD41VTr(;C)6-CQ6#s=#KRpn;D{z{zg3BuOx4NyF|>LU?^S$VXN>- zdX?KJMwNO6QJuj&m!|{tYVcod>XJWAmk%Qd<1UH3e z3yX0ru`B%}3b)_}wFbrGL}5hZ($ThKeV%>Ausf!PTlF-bto&kBN>u&Fn+@jK8Q`Bi zh>v(+Z<>M%m*Z3Mea=a?vKn_$s@RqKUf<~$?;eKRnQ9HnZ0sFa!>-JBuk4G?m90Ps zmS#h0s9c7=;?ab+m&LOS*PfgHK)>ZZrKfM|tgJ*70C&1t$SWOFxaPeaQZiW4^Ka8M zTEJtc2DL{C(F|^j5%Iss5ZM?>WSS1XfMRl7_RwT)BF8rWuaxl8t_;SO<7o*N-Q3X} zfEytr(d6EQpers`Lna?0+fgJ!GyPDmUu?q7{{@3EzvX(I)H{W9kwO+fW++hAtP7$`Y@-OyKm|JCJij8#Te4JE&w3oa+S1`XXN4^!2|7Wsq?~-;?vr=a7N|`_E-FE zEPE&={pK8g?mQ4v2GXJ{W&?+FOUA$Vj_rBh=H_%mg{v8p6!%D*2z3>!G*rJqni7A8z;wiCOhVZt;3!|9xfM-^RWFyi{)#7W_zr{q67dT1+DxI{BvNk%ok zo@Dd!DU`@dQZ}=Lr0kY3d;f{0EX&*+^g&uWFP%PCZJ1PlQ@G**JQmp`#Wh3Tu>ZwN zsXigqr9eOo7g?vBcP8B|Z22-m{hIlvsc-6xW4$@6{Fs z=eX>H3uwH*eUQjtLAm1cgY83?^BG#+@(*~RibD}UXfAp4(F4PvNukrBruIW22l-~v zd>6Bg56qE?YpbrcT%KPP%7Xz%WWjA;2O_ zzy0!a)Wkby1BaVnMdzVNz(TRWN9GO2E%WjB_8W|TxL|G(fjY<^1qm;4#Ci9(1a7}F z$qz(1QUUpOICJ_7R52-pMh6<93VAyj89U9(pc}4&nT?H~c#cy@ECDB_5||$G_#1L` z`{>zqRgXjx2+a!sQehS<8!*+oyt-=ESJU)=Xv_l{H-662Zj_NQfAV`Kmg?J*xPjXB z6ga{9RaE#UMt=Upy$J%3zq4<&r))&V=vd268jsvXDONCeRcq6{4k%0v>&7}vVvY8G zrvWEdqe^V9rEqzoiG%Z|1Rx}OsCtJL^u5-b8f}V4!P8EjDSpd-3-D_i`C4;P4pR7p zt4KrKxV^f#xB5dO!e>_%~x1xshps8f^f6`A1 zTP$J76FV&k@?A=>+lptg7~$S$;Mrzq?RJ+=nzCZ3rZwAtv>S7GQWA2m?tIcvk>WT_{TrDw+JD;PtZ$m!g7EYLiyx-oe z=3)h5oijW@*_^?OEaK!N=h~;WDdL9rviT=0aeU0oy-&fDO_Ol-!vOWFDpK-4KFHR6 z#Z;%K5Gn9ablk@?hF=p6Y7>TYFT~+}PG80Xu(hE6>)zt_H-B~&Q+&dPbeu=0McUr} z$ukJY2TB!Y+&+Ngh*a8R=j(J!rBt=cGIHTVi}xyHn9Iy#=yQj4-)8NxnMl?pP*%%| zCnc?1o9QvN`z4`zQ^r)`jb>JMRUX5=4y=zpl*Uq|TGZ17gu7oSa4_ql=LyWZB&{%i zV0|rDaygdKrEc*zDj6o8^W_nDyQ$uDBgKFd0SXY#{ZTDJ6M9loK!q~=z7T=Hx?dzh zm_#@H2s=}R>?8pu?3l+Ru5X&tVo<_0$cK>>7y$n|x=*F`Dr3SzeP0ZZ z(@N7Pw6(s}73u7Bz4l9;AC5kvUueD~vDG4!vZ5c9r^O)KN zAn0{r2(q$0=p2>DdGg_mOv-IT13Ev9cFsJx*$*fFb%#aw)XnVQbO#S=zy~*MhwY)jvcFvf|jPcZ%$FHf|o0N5lk7(0qZrGNHD?@@na2O-F zV>$x}+&H0tgn%LGbn4O&Iek@S^><|WIsoyx?#{11JnqKlIOm{_w_bl+G$A9IrUsiWgU3vh@d+TIWa}S(L+8$>>$^$Frv*N4q^1ZC^ zTY}4;1P?jawj$Z$KYzu&lub|2mcQ*gAz%sf5FWbJik5d^cI>>!ocPMp->1T>6PXZWh<7+ z%lLTajSwXwY5XvA+tCL28YY&^W7y~kWI-vjbHMYf(i zQ{4-7L=Wk$pbzGoefNMPmn2F+7QS6!lAID!LXO=$+YD6Z#G#1{Aid<-D_a9`xXMx4QI$7Q$r6eMcVaGxt!(Uv8QJcVl(dBX#_m%**6G=*M4z9ptE3%c=4X~fj?BfrFRI7fQ zXC2rX^LVjAySbJh!Ogh|z`L{ky^lH73F*n(7a4ot@Gq$z?+T_d!*d!u0<6YO$dawkN;1(go^0Fo2ffdmob*hx#)5N$(+N_T9 zKm`A&y^7Y+Mr|QqKG?I>KlaGw^6!7jCLx>aKWTfTMZ36kpq6p9jgGvsELP!AB#BF!)?Z6 ziHwYt!-vz0%dgb$6zDmHY>2`K`Y2sLjrfoDlSGkoVWq18JP^@X@DqX4?%`N@)bL*)5)V`W5u-@Ws6>w8h~w@iDAk~=Y&Dj+al}|F=3<~6 zf5izR$#$rhj`sE5YMGAnZt0Qg$#72BOt&JVl(LXYk@G&`kEZussaRJS3pms3_^lua zk}O7D5EdQN=0z1Vsu`En&P$sVZ&Z~ zuik`VN|eO&Db7)6YtB{?Ouh_2NaXCku*)j)jev!p7~a3(Z>g5I~{f4I?|d7 zWt>u6pM}H+J{Mc+8R=B~J%i?J(msew+X@XuD>f-qNv@B;`t{?upw5a#2Q_3xRbIo3 zL&y+sPi#q++PvA&MX2dwTX%6o>s$A%O-J@s&I+TIKDcwY-Si#JpyMnyE+d;ImUVjf z7oV~-0eXpPrfEzl}FPi=k8FEdXH|ARpw5J_+V_9vTtP#b35y z-F`r>nXm_b8S!_)(Z4xgP0`q3MV8oLJ%FFZNS#<$E#k3D%SIzeG&J5gk%ZZ4tbBcc z{S3a+vP(i!LVda6u=R2hX;_g`RLg5w6VX;eBB2!JyhFMNhj+7P^L>PcTAzebQG`=E zIGl~XzW5!1sf_+_>yi_%0bITNZ4#FlEbvKZsM~aq;m+o@z*@iM(bJdOdH0yZ>(|HW z{O{iqMm~`4u4hZ^5zxr>g<)URP_!;*&2~`4QPBNIG!5y~4Y@KHkOxO0^{TyqSZ&ri zh+m`#w!eUO*k2Nl6L4vpAP&X!U^Wf}(}Kz%>@{ge!}^~(-@!m_;;lID43G(S zmMc7-3+4RkO_d4+Gx5f#R-6^Sgg?BWo+#}z_!hmUY6y}~Bb|gE?`~)Ncj*lF zxm~F{8QZkI#ynizt0&GOr3J(}{8!NjeJFxG+nTDl{j&V%&?{!Y}a4 z-k=?%dL%~3X|3!Ujizd0W49PgiW@dx&<&#sMhU;gwznSSmAL~oaagI^4iJ_vZf^ZZ zsR0fNiWz>Db3GTbD&9y4I5pbR11{945~N_e8*j5t?oZva8-QS^LzL=H(f5#6=K}I2 ztzfJQ5;F7qR&6kT+_XISl_s1wWe`W!56|(zm_*%I@9z`)h5E=Nkn#DVYOdSj>~#@xg1do>VbZ3I&YPiX=G zsF3stE0q~1#!aADQwS@(`{X?%sFXa~U?8wU)0t)5N)?%+FT3YI9uz<^C?oak4+>pK zta-`Z!I7VJ6sgs_`A%m877UL*aw2|-BgADd8Ie@6qVTI&um?2X=y#4@YlUDj zNdUPKY@qT<86Qy2H?f){XVWtPDqj4Mk2STiQn>SRX5NzXpVV`uOR2Mv(A9vXiL9gKK&|P}GAM=|0^Aas_|a1xvpUdfwD!d|-FEB;lV|Fpu7>qR}qU$cKyILbUUp>{m5#j-_t zX!@`9!3)7e?1)FmT>xHZZ1KO560#`|moyt<&P5o}n_P8n=y)8xj+z&~H6iw$M+fzA zd(4!_%^U~?;a1v`KQX)tRl2PipwR<5lp}Rh*S7BtkZ4Hwp`uPKg^p9sdqtj zL(-LK9GOj7v+8(m3c*Kv`eXHq{Pw%}K6nY2SLxk3=<2rn;toGa&HB?Xqy0yveNuMd z`0^}zC`rQ*sAA`mNlEUT`BV8wF?3=$Ofh2<1@J--CF9(bjP4w8-39tdO=lK6;Zhtr zc+$o-)Nbzq&C^Or!x( z8A*)EpHX`0UDyRat$#0i{`QqD`Zv;4ix4$&O_J3OxABRpnF~06X=-K{Wc;)(bbR^K zzl}s1h+jIw9~_r}u_}l4+IBC)hNh;9V~$%S)6F;~iUV=&{M4g>9+@bf!G?uf*(^w0 zhGN=>#};(&jw>mE;1q$5z-7^^DCpeZ+tMPPDy!4&pMTmERlA_#U~|M#0S#tZPD$qz z6BrvLt@%(Y1&05;su^M?G7)l&p|KS?6w&Etwkz7{N^7Ti>3scv6`hGc6aF8^UBx#_ zCCa&!tCF))WGh1CsN99g8Oa>EXH#TuIYx+8lB-C`S(|(A$z6`wm}_E(W7Ce`exJYL z^LTtd@AvC?uC}?z!xkmbYed%L7^70p18+^m_q(UM#nKW%-OT>n+Bb+l zSqH8|`QAur+(M-);uX>tGc|kis&JCVLCiFTcIM*wLY%(W#b3b1A(PkVD65)K756nZ zU!1QDD_T(#ojel4xaZ=|lnA2wdcIZqO_-UrL~QZFOjIuJ=a4CWL+<4QMr#Lb=G>r} za}UK&8?CNGz1K^f!ekRokg5?WhAa*EQLe@kU$}BRBle zl~PIZkT17oV7f;I@M%24qOn&T#%ZhjPw0jl$xH3&1x5sALWow&=#7V%$|iVNEQO5p z4LqBiwQ&839J^6njLC@)M&JB)*hQr1dF<4ckKyN~1foa7T)D+A&o$9&94Y+h*=~x@ z%Hks#N{-F*wd0&ON;QE|2u(KiE8yby>4YE5&N$D|BXF_KlYo55o*(+2bx2|I4LB~^ z?5FKhc*p7S1e)v6Uy3V~x&nX&>BuW0ARwK5fJL9vPRPjbRbE|Ra*&*Ts-Ylh8sI^X zr9a8Sjk^6c^+DjZt=6CSeiMAPb}$oR6K{YWK2Q-qOU-;B4YhktnZHXPgXvpBeN^)^5%}xrU_rdc%d33*q;Y20HZM&X0bm zJO(=|)FlC&4kyHGrYO&qQ%GkcSR^c`9UIE@a&8g&rXT?Mm70nBFOpIC4Ila78t!Lrq{E!Q#_v*6R__?`ZP-ZeUz8`VfE{dGtsw#QMg;-0?0H%LxEK6Nt`L@w4?%v%Y=A~fpKd# zF@^&oS2_Jc#&&4l{aSvq-Yq({;}!Vx^8NV;pkgF#kiD8YREuKq*yTFv_#>$uRW=pU zjs6ku^j~5Z2{|^MN+M$%cg{<&9V`Gw60eyyf>9JT0q{M?J44f}8|zzX2BOWQU#jjZ zB|5_0pjSU-kG*~F#e#VC+6^e^FkE`V45_yi3TkvcnDI|#e4*6e*=pr$npT26OV;; zGS?{NSCyn1Zh!e;`expBc6$a~E;o63zh|YEaX{ixwL5FU_#t}BhAE>7bSv29=Dj6t z#O$Y|?9BgL2aqJR{Z~TWnY*W5sv;Rr4=TSMHuwnM;ST5jsN-2%ddJWIu+8{Bk$6S^ z5_Y#~rQQcf)|MCnZ{8HVUtRBU*uDLrdr@Skvl<@YL9;w=DwlVJ#;CqnPrzc2NtsoP zH=GQacFI{CS`dc6i8?w`Z2B3h_r=R=Z7eD8Umwa?I^W0M(72{;AX9NroIOx$J-avr z3D}0M39HmE%>&R&Mc|d$V{B3QMxV$WQPtcb`ZMSJ7MmfF18xNsRAHPfp3b*p7&*Ro zMN}7QMXfURQxwV$TNL>GLRc?+i3~Smjo99t80Ffn=MMKZ?9VnWTd&dYhy66ayIFY) z+=%5P4WG-Q<=}k^1N;BAtI|${GL#rSkb4uTFedDTJp78JN;b}Xy?!$ z_8rsf9Kt?ghHm#EMGY=|eHL8EIYn*925V#!w_+K(KezLZrq>}Svl%M|e_ z+2yZ3ak4Z&d?KjQzauYB0|ef0?|ty<4moc5Tf|7N(zpN9SdDl8@N!qF90VGQ8|yzK zd5hPFE@AOHJZ|{*q-aV$)O3-j2}|31_uf75-w$4bQpzvzCbi4iMtC^7Cn=>Gy!^#G z4^aK8RPL=auT;#@St{gdl%cUWXl^4!VG*@5_VMXn?=@RJ$zl=xNH4wcovlDccc#*8 zb=#*nMKzMh(w=y?!DqN7uR^Wp8S7;63ZEIv+S6(ZO{IQ8DV^D}jwueTTtE$N;LufxV^OO+#+psO~ocX-5I93%G6mctSgcFPGgxBzwLYI5NM1w_~nX{A%- zQ~=hgA4ezp@&>B)N8%dXPMo`!EA+VX8YxrY?LyLm5k|R7Q;J&c%a8+He}}Y*d+7ot z3jm=ZNO5QRf+MK_3&U9h!ZqQu;(&A7wl}{Fe^n91bm|caHnK^A4akvWjmIw- zR>sehuo(GwESIH_SFPuRA`b^K7W5VJZ6cUi4e!X-WiK9hBCHFF|Gk=*bQOK?{Dr{p#W(XqZOk*8qrS>u z=a;5ZQ9DH_5r&de032c*a?-p7T6f`b9elxdonok5a6mu#RJd4)vgSlZ`Td=nHyxP6 z*_#KuQqrJ9kiH}ES)RHw@yeYEJ7g!A+;4LN%5mv9^=Z?Qv+d7V7Q-ABzB_zFrRR$XL;n*&xnB?%ty0QwqX8=6`=H97Add5 zgEhoA+cZXOo_Rr4E#}}EZGF>C2PRo{4Zu~+J1M_6 z+B|+8Jhpp248{tsGq3Y>pI)@V>; zn&kyfS7nZdJPeDd1v%9~SaTIr=2<`o!O@uM!(F0RBCM#=>0R=5Nm;rzvuj5^YidNF zR``BOU+00>{Eb!e!mcB5>#Gp68Od{|L5Z^aqVUT<8SabV_M>tJuJE)WP7dbDL1ONc zVrhMivCHag8PMlW$Tz(z4(CqBszunvuvkSD?%TVrM2XFYhbQI!`?&Yd(^WH7>d)!< z{nN-d#(qJd$V1mT9cFja#ZgNe&LIl$?+Nu#BM8v!;>SfU5iv=uhBI!-aZ>>^(A&U$ zHh&XKymV0>zYo?0R)&CSuY~j#cxv) zI9T@!Jw=tz?c=Szwvt53?o_uPjImq+t2~L48}ewuEXCV%0ZgRBE|^l}vZI2)d7pXt z9%rO;7gnwd%f3oGaOd1+fcc5Zrpv-tC#><20gn{Or+$3Vv9rF|j1_?Aeg#6WO!RUd z>+nUWHMda35L=2@S%G)_nl!mh|FWTrHisA%6RK}J9SMXYVkR`s?l1D*oumUChlgSr z87&u&&8+F6UA5d9`kmOKK4Fxd^77`nwmOcJN2~vKy6J}4bbl4Q!#8;XVdJMp1;!H= zlbbX&P^%=tQ4^8*7-?N+G<}NRJyp>=+Yxm8r}NQ1cdRf-kaajIMtE*W9u%mj1bZCV58=2k zE_ORNGYs`vC#>wgbSV_ZlOPO&UMj~%5e<1LsXu|*=|qfOymXIPRHu7kQn?H?J*Fo6 zmF2{h2I}8NlEo4;4THSQ}dFv3UkI?<)NqdlxK@_#9ti2PrKLi%2 zaO*zEQiWN>(O=fO{uF#=(YIAyJrwNVslH3hQFi<*pKE7?MU1TBV%)U$E=R=V#n_m; z$i7*Vo}QqVOJ&#Mqk0TY7cUxfzg6OyLa*}UQc+A{e2C*w$h}KiFY)>QB#VSZ0wrgG z;>i+3J!SO(9#C%Qsi1E0A@JdR1W^P17T2A|*;3Fq=H1s52*~M|OZ(}ydlZ}ZUZn!` z5F5&xsid-4*m*Dz*lieL8WJg{6>kIlYlr4|@DMluPQzK2;5~`H8=nWtH&5}3OYWSj zXc4BFp+z&`D-p&{s;a*Z=rnB`IFBnk*MjD0FDg4@aQrdWGAYjj9$1Xu#pNiawx%+) z72r+Tv>&Yk$i)z9x(hlQ#QY&iLNk$Yy8Sn(l3m!Q(sqC6`s=g>beQXeXvB+Hbrdoc zyhm8{^D5Oj=PN^d=DrcE*LJDq&uc=fKJI(oYW`r{fJ=>s2MR9uZlp^l4#0C(w0qF<3R$nCK;ldd{ zlP=_V)gQ@d$EF&IRls|+6<}&70V>5YYmGBL32tu#`!&IjD+D-&05g~7bGQ$KOJfDc zz8}HR6%D6Wr-G<6Uwokb@(9NkYE%+;wik0!TSQdQ#MhSg8)WcVvb-kZgMR+EvtTx1 z=rU{5g=y$Us(m=sX>%UkT1^6TY(_HB6u~&HRp5ma;R4gfg9}kWj_h{A;>E+bznO;% z#LOz0{rRc%?ug%?91W~E6kU59#om^aM_;y)&mEXhS=KEZn{TaP?0=ZA`9y2flXk#B zWqmjV&|1>$Z?#XbEEF{V#h&B~BzQm0J!{M5PC!fX(0X_6UZ^IDa#t}F;4Zx5N;GQ` z-sXCBVR*&*N}_rZ$^}e|GWszC51zdRwJF`z9yDVT=^BEni%HT(76@%nv`2lO>kn=a z$tBk=3=Xx|XfnSCEK?Q*b+x^=j#{i?E|>c6NQhvHwRZ`)%&WcK{l0~<6CZL_ zBDeE#$JH3kt2Tpk;HpLYj%ui78J$s@f|>wxB; zV!n?%v@;e4kNmEKwod3BDn)&KN^wls}WE98?}`ogG~W7%*AbR-Xt7jhfh z#SZhfOyVPYs*AqSg?BQvajV2uHQmw_{XMbau*^&<$fJ#GM&Gowk*KWJdT3@}`F$qY zcOShO9^A252-M?~mBO|gXFI1FPtUyP5C={U zr9)lL_vbJvs)8-94qU%-fy3#QN2&nm3n$?cc0y&!gBLDfXy(T+|FG1R`FXi%WAxnH z-aknn@`?cS^&nt4KM}uRBU7;Fgr;uyJwXAIKY9HzOt^lVi;7`_E{&aB;uZgUdwm>}*NAV4eKUxa}N8$*BzCE}DS3MX>>eMm>eeYEy}#QXlt zX#Y-;I-odap3l4-13llvCJ6FP44l!i>s?B~Xxth_72%pV(}+y!p$8nGsyIz>sXE`2 zsbL=P%ssO1GLXRL!nVO7BZ;|V{eENNehua4>#T#1Y}!^B29^U%9z1yvkl#LhMGTZa z&rz0ARdx~F6zstom)bLkc4{6DbXh85}FxVEdkLi z$&Z_E!$W6Nxa})i>;>^%qF}fFbfT6#5720~gTxR{yR|%7m?!hX+T4Sf1Kb1Lvzc>& zfKX6;q)Bgq!#E9#{s2!dhkM7NyedKEh~fb~Y;y2Jx5a?)h*+zb_a6hV*c)x`;Q1#w z3xJ56(Thc9qEygNA%C!{`z+OlzSo;v0G3r3-5A8zt)@26_A}r>sl1)8n1%x_X+x?CwjqDxeM_(>kwQ?t zckV}7=1c^~J^588R}Yp}4M4jApk6l1qYv;FWwW93p6V})%ixtad8WyhYqet~1Gze~ z-tyxnHlIp#r#^oN1g}D_%%=DS%RY)@-3r~NPw+$kWIO+!f&R0I?>bH;3d468s({1B zXr@3jzvZZlCd}va-txmQ#mS?*+%=J;8yQy+ODkHXNTM4f38%IZ)hKKzkGPv^6r~^`$$~7=Cv38mE@XnbOb-2psK<3!<4&L|O{_KdwXGc%4-3eqSPFI>e zbKSrNYy76<*wnj%8JhrK%_RWj$LnccB>%+M*IQ(rY37Dw&lvoZNQ}~|Fkps(^Ouy- zc0*+%G#^z<8yYAdf?f6s@t#^S=KAKrhoZQ5GEN}DC%iOuZX*XDXp}u@u0xsYxW_ouBxwM}`0H_=wyA| zE8)_i>OKbmw$;eho9to8`su9p#>P@i{m>v!HYrMx`by5{s2fgqV%IN2u``G2{;S#} z7(C_JHL#g4!TVKzH-;cqyTWYUbYJYD51;o&OW{neeF^8u{&=>3MOrA~?FdpJV zSYd`@e7yIF=r>t}q62JMgr{OifCEZ+OqL@U0qnPCM~vzAVAWSinbTGsoAj%8aAv*o zuWD3^SdZJGJp`)nD#ZmjSqj)I^?gr($f>AJ$#J))lJ(;mu}!}FFX04CDff;uyZT$@ z44yzaWcc(;REg2B-keS7+|){0hao1Ky6u~P!(lZL$EGcIp3i^I>#mUn%_C6l5a^P! z>!#Rsp#cEt6KG$x)xQV)s9bQ9Udl5Q!j2ysPa78L&HdLqdHuyUL@dr}NJnn_or0#u z)ho3h3FLS-gf8mRizhfvtzM0;@IyPk-^a6h9oP}I+0o=6~N{Rb6BX3y4 z5iV4cW^ZW|en}IQMT+TnetP+OC=>YD9ENf2e>0Cg{8J!oHPOl6dW}=^aM*Unss)1+rbRF+Sba7% zS^dsY{r8^f?G9m8-(u)oUlX_hU>wvBfuHDZcJ$scFzxx_sGe>&>$_MnNuJCsS&yi* z?S#{Ys<=ZKzX4zFL(&!$TFy;eGq<}lHtC1pKHZ{AsJ|Suh|q}G&Hj5`YQ6kg>-TLH z@Kyi8(;^duC=6+%3mPF4l)6`@ir!|39??Zz7I ztV%vhgYW=#7VO2Wemv>Gq}*g@;q;+w3>`V;kYxK;6FPKtq`3YYe^ONz(}&E_>Aq4d zi=*$Z4@FD3K~IDg#yC21E&p50#uK=4t=!6S^zF}6jtF|OY2C#@@z}oC8anXk#M0LC zd+<`)JID$k59QE^GI&PGf^LN=Mk)-?G zAp#plve>m9P|9#iZEcyjfDFB2Y_A!F^9a*j3Pm!I-(LKYNI0 A4*&oF literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..fad7ebe82 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,15 @@ +{ + "src": [ + "pages/Index", + "pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_asynchronous", + "pages/aes_cbc_encryption_decryption/aes_cbc_encryption_decryption_synchronous", + "pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_asynchronous", + "pages/aes_ccm_encryption_decryption/aes_ccm_encryption_decryption_synchronous", + "pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_asynchronous", + "pages/aes_ecb_encryption_decryption/aes_ecb_encryption_decryption_synchronous", + "pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_asynchronous", + "pages/aes_gcm_encryption_decryption/aes_gcm_encryption_decryption_synchronous", + "pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_asynchronous", + "pages/aes_gcm_seg_encryption_decryption/aes_gcm_seg_encryption_decryption_synchronous" + ] +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceAesArkTs.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceAesArkTs.test.ets new file mode 100644 index 000000000..f5217bc5f --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceAesArkTs.test.ets @@ -0,0 +1,224 @@ +/* + * 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 { describe, it, expect, beforeAll } from '@ohos/hypium'; +// 导入测试依赖kit +import { abilityDelegatorRegistry, Driver, ON } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; +let want: Want; + +export default function encryptionDecryptionGuidanceAesArkTsTest() { + describe('encryptionDecryptionGuidanceAesArkTsTest', () => { + /** + * 打开应用 + */ + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * 点击按钮,使用AES对称密钥(GCM模式)加解密(ArkTS),异步方法 + */ + it('testEncryptionDecryptionGuidanceAesArkTs001', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('aes_gcm_encryption_decryption_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES_GCM Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_GCMAsynchronousSuccess')); + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用AES对称密钥(GCM模式)加解密(ArkTS),同步方法 + */ + it('testEncryptionDecryptionGuidanceAesArkTs002', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('aes_gcm_encryption_decryption_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES_GCM Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_GCMSynchronousSuccess')); + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用AES对称密钥(CCM模式)加解密(ArkTS),异步方法 + */ + it('testEncryptionDecryptionGuidanceAesArkTs003', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('aes_ccm_encryption_decryption_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES_CCM Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_CCMAsynchronousSuccess')); + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用AES对称密钥(CCM模式)加解密(ArkTS),同步方法 + */ + it('testEncryptionDecryptionGuidanceAesArkTs004', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('aes_ccm_encryption_decryption_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES_CCM Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_CCMSynchronousSuccess')); + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs004 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用AES对称密钥(CBC模式)加解密(ArkTS),异步方法 + */ + it('testEncryptionDecryptionGuidanceAesArkTs005', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs005 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('aes_cbc_encryption_decryption_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES_CBC Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_CBCAsynchronousSuccess')); + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs005 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用AES对称密钥(CBC模式)加解密(ArkTS),同步方法 + */ + it('testEncryptionDecryptionGuidanceAesArkTs006', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs006 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('aes_cbc_encryption_decryption_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES_CBC Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_CBCSynchronousSuccess')); + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs006 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用AES对称密钥(ECB模式)加解密(ArkTS),异步方法 + */ + it('testEncryptionDecryptionGuidanceAesArkTs007', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs007 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('aes_ecb_encryption_decryption_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES_ECB Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_ECBAsynchronousSuccess')); + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs007 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用AES对称密钥(ECB模式)加解密(ArkTS),同步方法 + */ + it('testEncryptionDecryptionGuidanceAesArkTs008', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs008 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('aes_ecb_encryption_decryption_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES_ECB Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_ECBSynchronousSuccess')); + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs008 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用AES对称密钥(GCM模式)分段加解密(ArkTS),异步方法 + */ + it('testEncryptionDecryptionGuidanceAesArkTs009', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs009 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('aes_gcm_seg_encryption_decryption_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES_GCM segmentation Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_GCMAsynchronousSuccess')); + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs009 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用AES对称密钥(GCM模式)分段加解密(ArkTS),同步方法 + */ + it('testEncryptionDecryptionGuidanceAesArkTs010', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs010 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('aes_gcm_seg_encryption_decryption_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES_GCM segmentation Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES_GCMSynchronousSuccess')); + console.info('uitest: testEncryptionDecryptionGuidanceAesArkTs010 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..a7ceb1875 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,21 @@ +/* + * 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 abilityTest from './Ability.test'; +import encryptionDecryptionGuidanceAesArkTsTest from './EncryptionDecryptionGuidanceAesArkTs.test'; +export default function testsuite() { + abilityTest(); + encryptionDecryptionGuidanceAesArkTsTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..c3fd9dda3 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/test/List.test.ets new file mode 100644 index 000000000..f1186b1f5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * 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 localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/test/LocalUnit.test.ets new file mode 100644 index 000000000..7fc57c77d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/hvigorfile.ts new file mode 100644 index 000000000..2a5e543f1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/ohosTest.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/ohosTest.md new file mode 100644 index 000000000..ad51c77de --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/ohosTest.md @@ -0,0 +1,17 @@ +# 使用AES对称密钥加解密(ArkTS)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------------------------------ | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,使用AES对称密钥(GCM模式)加解密(ArkTS),异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(GCM模式)加解密(ArkTS),同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(CCM模式)加解密(ArkTS),异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(CCM模式)加解密(ArkTS),同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(CBC模式)加解密(ArkTS),异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(CBC模式)加解密(ArkTS),同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(ECB模式)加解密(ArkTS),异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(ECB模式)加解密(ArkTS),同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(GCM模式)分段加解密(ArkTS),异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用AES对称密钥(GCM模式)分段加解密(ArkTS),同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/screenshots/EncryptionDecryptionGuidanceAesArkTs1.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceAesArkTs/screenshots/EncryptionDecryptionGuidanceAesArkTs1.png new file mode 100644 index 0000000000000000000000000000000000000000..7afd55b3bd573b41dfc31a75115d0f3a55768ff0 GIT binary patch literal 169642 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 z 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

m3i7-WY=DIFn|L#&AQ#&Y6;5& zli;)MrSr6@l-?Ag24%jA7WwNWl#&G-T%JK&vc;T@oP=71ves?cr<3XmI>NFvBjU!# z=%j`z%SMfA72wdo`QRg z)k3+W#$@B7X=M@+~K z{jo`9fW}`k@lIK&Gg&)X?{l%qd=sT|2&5>z7;Vigj$%i82^Db>&MS6V&^GC(THj3m zjq{-n>EZUToT*roT#T5%F6L(2&Bv3O^zX?|e+@;mF1Ki2IS5BFJoFIy(3(`?ejmeI zyo<{ltP}K#>{Xz-QdulgRWR9Z(VtPxG%6AwJAT)9voz(OC2an3+7|Zs*5!@x+@159 z{o3)ruicF%h^hK@zGi!#uH7!|=ZA^;USuA;LMm@YcYCf*@7=>E$o{@GZIGGnK*U%A zxGz7q$N#5kFngc+o;v?hR($+yWF8Um5zk1<388f>o+2O{BN|2|vCapnFRm-)D*Wk~ z*ynM0Kc35pi3u%wuNK0Qq9_y;Xo_oooVkbrtYZ7!8hV~K@aW&zGttbo>2W8C?5=kp zKV{O6EJ`FIj9%5++ZJ@`Tf5bfKJh`(nPp6s1N7bR(Oi@!kn?Kk*MIpto&hGCxmo}9 z(wpjLcNW;?^gX$}^YdHxUnv!B5{8{fxID7+K0hR4P{DT4J0dKXfR)kXdy@GlsjcGj zQIT2BCy&WV@|c&fI?MC9J&Y~wA-+1{AJ5LOZ)l>w$TDm;A))(wid$`)jJN_$VbNOlm<#8jojwcLwuA}UB-N#t)7h}u+ z&+jmA{;~YervRS5^H%vaJl1#KpQTTby}mU5pHXEi(#e8M}W1E54C}IaOvou`|jT zkmW4lkiPLk!p;7;pQ>FfhKCxlqbQ0}I2M%JAPYH_GmWx&fA_^e^}U|;Ce$!iENH28bYbPu$zgDj;|F66zFL(UA^MjCq8$*_eA1;B*6~;nTv4zQZ z6VC^Wo)Q}P9wi8s#s|UV6O_I&qOk|>)5Eu4Y#c*;=uD4cnE$|mVae;(+0<0u4_^O& zst;yp9Rbeg5cS2uP!bMN5|OoBbg}l1d=_7-m++O9lZ0!G0B>iJS&{rfu=l9)cfXe( z|G?cbky+r;;_MA-r12_KrU#jb0;!3iaVOTt#pJAkkygb-+h^el< z^#0$xhH$&}b+Y_lyeRg%{kpN4xYTq~J}!pp^WE|y6UKp2R^`7H_0n5?=2v(%oj)ov zw{Y{nhoH~3c!VOZe^?iDW2=`;{OWRRZ6^Hy4$}K?)~OcWYrCS7Kf=m?_1g4RIM7gx zAE(Jot-sNP``etrQ=kl|iwhGXKkc3lJmGHPf{X-}1srwZ6diVU$^nA=-v(~FfX%@& z7X&(|PQoxaPE>f!58HwT{Kf+}HyI?tYl;TgsWoWbYPcyZJ4}q6Zm+?YCxHq}mc9HT z#K5iCmr7Patu&}Mj2UuyRYFhUHipb3SMYJKa+>YGR@(ag{|G|e|ERofoj0%lR?$rV z*GvWTvc${goe>f(?CgX3I3S!@ROdZ!0 z*M2WkeC0;hJIbc^58QTc%Xrr#h}?`6QZp?1p-)>7E)Lkn^?Pf0v%H9N3(w_uO1r{G zG(u^B;0^&$4RqjoElmq1oordG{*k_alxF`dOHrzYdO-+2sX7ob2>IE!{psNk&t}E-6y?r*Gz+QWXc0@yR#KqYZURROn_N!?)d6C6u7k}A%m`m zyrCfnmFEgTMvVys2ZJ;p(SZwsVgE?$smGVb^<4yeN2T(veBOE7Fl>2UY7n``9s{kk zn~Wi?O>)=K!RNoMmib@2pm7H6DwBW(6)gf4aeW?a&FtZvs1#{*%|NFQ?=T^CFIRP5 z4C+`gCGY+PgWp~lZ4+7D%QdfTrU$W%+;N4FRoChj*e>43FBZM3ysB_oT8Ku)n(ma? zIcg|T?UJ<5EPTvJ%T`L}8rAKAyl5dpQuS)2;4LQ@L5Ihq&xbCG-FozTFS%ZJFx~cn z2SBQZ?aMNRb+obW=U@wHFF5BTH6!KzABMvHj!gx}vo&lq>xLC!C&ne4ucJykF-PVhK=a5W9NZf6l!C zSZC)!FsVFxhp}Z%e!LEu?_SDw%^=zky!S|sdc1pQ{QtmJD~U5&Jr^R-+?1RdT*L7~ zE`>hyFZ#loFEv5vN9aK`mU|N`4{7zgJp)R1CE(P0q5#{fSz?9aCrYR9vC<51ZBt$)8O08e!zUKH%!*xfU=A5ZbZZS)^rl^fSx|JZ~3r*Jd+hDuNFCD~|{8 z?D48!_8!!KsV3QYDB6c2maZW0Y1`zIRAi_&^O#f{L2tgpyxdvxXT>o;D*%Ubmsymo zb;-)0SG`erzrcFm#&V^M(=|a-lT;;uL#5p|3{WT? zUOgcZoaeB@Ieu>cv#HUt&m39-ytypdS7)6=F-;Y+{80P_(-O7BLAC)EN+ml{zZawR zGaKamnfGtq5_qeL52sVV>S+vGKNjASdCO;%>lHP;DhsLKSo@k$1}%&ut_UV$u(MWf zmv_(PjI&s#N3AO~(Y>%{BJS22izf*9J` z$?yBG^F{IdRT^;e1PdI*D)+yt8lJN|)NqE!#J^{V)$ zLdz&XEjk;jRw>72zcU{MG>$Q0=~v|^O%kc+i4noai1B7v^^4RUZq!ktJ^08!tU1CL zUal~$y){bLDQ%>zkTS5ZJF%5&Tf|?3F!TcIDKocsNoQv$-CL1iq=*bD|{MAP!}(Q}d4<>#z5#EG8vF z6I}A)#UT6>(wf&D1MZV~`#<@&pG0N{toeH8%@ZO=)cX5wp2_ml2Ksnv6ol4Zp&%`r5BvZhUpUW);j&&z^r_N}c}rzH|gkiTNd zq2I!aoIAH1WkyFwdx*Qa>?_rAm{lK&jQe&1NpSfdYNU1S|b=$e>US>*5X6IG!>$plv zs_0axKHbhT4p(347#D3v)cq+cyNvx8?^+?J^mYQ;QJ=P|)KGr(l<~*9@Z|Glhv5J* z=Jm2uy}Mcj)YZnHd)kk z?v0enL)@!!v5(tpwoz@zER|(KL#!Q3eEnZMI5VdvY*-p`vp&#_PjMnB0aT+-A2@wG z6{Yf~*9Zl7(-arbCAaVpTw*=C*n}hyl14QnUhmxjeNbxX?T8Y&09-Q}31i^YG#+aW_croFXUWvouop-AI?EQO*{f+| zx}!9tb!m11E}+!+h&)%+UPPnQEQE%nQ?8%obLxlCKBT*jwrDjtthC(EumK5>BC6f{ znKKZHXsk2k`(-PMKU!#Ouk(GU!Ln0mvM+C*YX5u`=7n4AGUw^9>XriJLvCU#wf|+* zrn3C#66H_s7+5wrqeTnIYS#IcqU&vLgUe;DUxTYpZTy95TA~xfGv%>*h_KNuEZWeI z)o6Sz82|TVI7VC}vt!U*2#?_6c+9{BA>;%bg_osQ+PZHwA4C;jHow}YNk+K zWT&*z1q3@a;NF8hm~zcKDvkjcz0pjTF2%OP226Zfl>`mcgZ4c)my$9I>d8dRb#(?+ z25!A}=#IT`zrl=ImDkngv=P~$<+V=d(80U3H!5ucuWx3l7!0(5vO8a

1YiFaQr4H+V#c%6|WSG`_Gn4F> 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 )VRuP)3u7cIjYdgVoeDJAk5!m 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 qDaHSK`xgR#A@COhe9*YHQQH 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/README.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/README.md new file mode 100644 index 000000000..fc5a632b7 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/README.md @@ -0,0 +1,80 @@ +# 使用RSA非对称密钥加解密 + +### 介绍 + +本示例主要展示了使用RSA非对称密钥(PKCS1模式)加解密、使用RSA非对称密钥分段加解密、使用RSA非对称密钥(PKCS1_OAEP模式)加解密场景 。该工程中展示的代码详细描述可查如下链接。 + +- [使用RSA非对称密钥(PKCS1模式)加解密](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-rsa-asym-encrypt-decrypt-pkcs1.md) +- [使用RSA非对称密钥分段加解密](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-rsa-asym-encrypt-decrypt-by-segment.md) +- [使用RSA非对称密钥(PKCS1_OAEP模式)加解密](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-rsa-asym-encrypt-decrypt-pkcs1_oaep.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例EncryptionDecryptionGuidanceRSA.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 使用RSA非对称密钥加解密示例代码 + │ │ ├── rsa_pkcs1 + │ │ | ├── RSAPKCS1Async.ets + │ │ | ├── RSAPKCS1Sync.ets + │ │ ├── rsa_pkcs1_oaep + │ │ | ├── RSAPKCS1OAEPAsync.ets + │ │ | ├── RSAPKCS1OAEPSync.ets + │ │ ├── rsa_segmentation + │ │ | ├── RSASegmentationAsync.ets + │ │ | ├── RSASegmentationSync.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── EncryptionDecryptionGuidanceRSA.test.ets // 自动化测试代码 + │ │ └── List.test.ets +``` + +### 相关权限 + +不涉及。 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/build-profile.json5 new file mode 100644 index 000000000..fb5a1ab65 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/build-profile.json5 @@ -0,0 +1,57 @@ +/* + * 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/code-linter.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/.gitignore b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/build-profile.json5 new file mode 100644 index 000000000..e7569e305 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/hvigorfile.ts new file mode 100644 index 000000000..e4f43d546 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/oh-package.json5 new file mode 100644 index 000000000..c9cb6c817 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..edc2839f2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,57 @@ +/* + * 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 { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +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(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * 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'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..47012d3ac --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,74 @@ +/* + * 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 { router } from '@kit.ArkUI'; + +@Entry +@Component +struct Index { + @State message: string = 'EncryptionDecryptionGuidanceRSA'; + + goToSample(url: string): void { + router.pushUrl({ + url: url, + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('pushUrl success'); + }) + } + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.rsa_pkcs1_async')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pkcs1/RSAPKCS1Async') + }) + Button($r('app.string.rsa_pkcs1_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pkcs1/RSAPKCS1Sync') + }) + Button($r('app.string.rsa_segmentation_async')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_segmentation/RSASegmentationAsync') + }) + Button($r('app.string.rsa_segmentation_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_segmentation/RSASegmentationSync') + }) + Button($r('app.string.rsa_pkcs1_oaep_async')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pkcs1_oaep/RSAPKCS1OAEPAsync') + }) + Button($r('app.string.rsa_pkcs1_oaep_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa_pkcs1_oaep/RSAPKCS1OAEPSync') + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1/RSAPKCS1Async.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1/RSAPKCS1Async.ets new file mode 100644 index 000000000..33683cc72 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1/RSAPKCS1Async.ets @@ -0,0 +1,123 @@ +/* + * 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 { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 加密消息 +async function encryptMessagePromise(publicKey: cryptoFramework.PubKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('RSA1024|PKCS1'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, publicKey, null); + let encryptData = await cipher.doFinal(plainText); + return encryptData; +} + +// 解密消息 +async function decryptMessagePromise(privateKey: cryptoFramework.PriKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('RSA1024|PKCS1'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, privateKey, null); + let decryptData = await decoder.doFinal(cipherText); + return decryptData; +} + +// 生成RSA密钥对 +async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) { + let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData }; + let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData }; + let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024'); + let keyPair = await rsaGenerator.convertKey(pubKeyBlob, priKeyBlob); + console.info('convertKey success'); + return keyPair; +} + +async function main() { + let pkData = + new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, + 2, 129, 129, 0, 197, 64, 10, 198, 14, 110, 65, 92, 206, 35, 28, 123, 153, 24, 134, 255, 145, 74, 42, 173, 40, 215, + 146, 58, 143, 46, 10, 195, 154, 160, 69, 196, 220, 152, 179, 44, 111, 200, 84, 78, 215, 73, 210, 181, 12, 29, 70, + 68, 36, 135, 153, 89, 230, 202, 130, 212, 111, 243, 234, 92, 131, 62, 145, 50, 73, 48, 104, 245, 46, 70, 45, 157, + 147, 143, 140, 162, 156, 216, 220, 49, 121, 142, 194, 33, 223, 201, 0, 16, 163, 210, 240, 118, 92, 147, 121, 220, + 17, 114, 24, 52, 125, 135, 176, 88, 21, 83, 86, 17, 156, 88, 250, 48, 79, 86, 128, 248, 105, 208, 133, 140, 13, + 153, 164, 191, 136, 164, 44, 53, 2, 3, 1, 0, 1]); + let skData = + new Uint8Array([48, 130, 2, 119, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 97, 48, + 130, 2, 93, 2, 1, 0, 2, 129, 129, 0, 197, 64, 10, 198, 14, 110, 65, 92, 206, 35, 28, 123, 153, 24, 134, 255, 145, + 74, 42, 173, 40, 215, 146, 58, 143, 46, 10, 195, 154, 160, 69, 196, 220, 152, 179, 44, 111, 200, 84, 78, 215, 73, + 210, 181, 12, 29, 70, 68, 36, 135, 153, 89, 230, 202, 130, 212, 111, 243, 234, 92, 131, 62, 145, 50, 73, 48, 104, + 245, 46, 70, 45, 157, 147, 143, 140, 162, 156, 216, 220, 49, 121, 142, 194, 33, 223, 201, 0, 16, 163, 210, 240, + 118, 92, 147, 121, 220, 17, 114, 24, 52, 125, 135, 176, 88, 21, 83, 86, 17, 156, 88, 250, 48, 79, 86, 128, 248, + 105, 208, 133, 140, 13, 153, 164, 191, 136, 164, 44, 53, 2, 3, 1, 0, 1, 2, 129, 128, 70, 75, 184, 139, 53, 1, 94, + 17, 240, 244, 218, 101, 193, 253, 215, 190, 164, 204, 197, 192, 200, 89, 107, 39, 171, 119, 65, 38, 204, 168, 105, + 180, 234, 217, 16, 161, 185, 132, 175, 103, 25, 154, 153, 153, 36, 36, 26, 178, 150, 66, 45, 8, 185, 19, 90, 228, + 210, 177, 30, 200, 177, 141, 78, 184, 248, 59, 113, 154, 145, 73, 160, 24, 73, 157, 86, 207, 186, 32, 95, 200, + 106, 252, 107, 69, 170, 193, 216, 196, 181, 142, 74, 203, 15, 18, 89, 228, 152, 19, 239, 21, 233, 98, 121, 214, + 57, 187, 111, 239, 223, 248, 199, 70, 223, 108, 108, 113, 234, 144, 155, 95, 246, 144, 244, 122, 39, 55, 127, 81, + 2, 65, 0, 246, 96, 188, 0, 0, 104, 221, 105, 139, 144, 63, 175, 209, 87, 179, 162, 88, 192, 99, 82, 125, 53, 54, + 48, 70, 245, 239, 37, 15, 242, 247, 84, 115, 187, 196, 95, 156, 40, 165, 60, 64, 102, 13, 229, 243, 2, 149, 0, + 232, 226, 221, 192, 95, 11, 12, 208, 5, 181, 98, 62, 210, 190, 141, 235, 2, 65, 0, 204, 244, 34, 10, 105, 80, 76, + 116, 163, 35, 231, 168, 187, 206, 189, 101, 215, 103, 80, 115, 86, 11, 34, 127, 203, 114, 84, 188, 121, 174, 169, + 31, 142, 2, 182, 27, 140, 225, 157, 227, 71, 98, 15, 203, 187, 213, 5, 190, 20, 121, 8, 30, 193, 100, 232, 101, + 141, 8, 124, 20, 29, 78, 6, 95, 2, 65, 0, 204, 43, 225, 224, 6, 118, 224, 117, 100, 200, 199, 94, 70, 23, 109, + 175, 173, 232, 208, 230, 61, 8, 105, 189, 156, 48, 150, 91, 154, 89, 248, 136, 173, 215, 254, 166, 84, 220, 130, + 1, 234, 68, 40, 100, 84, 251, 224, 202, 254, 51, 115, 28, 198, 38, 124, 25, 175, 129, 94, 199, 61, 17, 216, 189, + 2, 64, 72, 230, 129, 129, 48, 138, 134, 87, 106, 123, 231, 247, 165, 173, 216, 194, 115, 198, 228, 223, 209, 120, + 46, 114, 68, 92, 75, 117, 170, 214, 140, 131, 147, 208, 181, 19, 193, 157, 178, 186, 87, 246, 178, 101, 166, 79, + 20, 54, 211, 51, 101, 199, 2, 197, 48, 192, 134, 84, 193, 69, 170, 82, 201, 131, 2, 65, 0, 213, 165, 55, 166, 131, + 210, 195, 56, 250, 147, 195, 61, 205, 208, 189, 185, 40, 52, 50, 119, 137, 23, 246, 46, 220, 108, 52, 23, 152, + 154, 94, 32, 144, 195, 184, 249, 21, 168, 12, 57, 222, 18, 60, 117, 81, 157, 72, 30, 155, 190, 165, 242, 228, 139, + 240, 184, 145, 170, 103, 210, 160, 161, 135, 13]); + let keyPair = await genKeyPairByData(pkData, skData); + let pubKey = keyPair.pubKey; + let priKey = keyPair.priKey; + let message = 'This is a test'; + // 把字符串按utf-8解码为Uint8Array + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessagePromise(pubKey, plainText); + let decryptText = await decryptMessagePromise(priKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + // 把Uint8Array按utf-8编码为字符串 + let messageDecrypted = buffer.from(decryptText.data).toString('utf-8'); + console.info('decrypted result string:' + messageDecrypted); + } else { + console.error('decrypt failed'); + } +} + +@Entry +@Component +struct Index { + @State message: string = 'RSA PKCS1 Async'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.call_rsa_pkcs1_async')) + .onClick(async () => { + try { + await main(); + this.message = 'RSA PKCS1 Async Success'; + } catch (error) { + console.error(error); + this.message = 'RSA PKCS1 Async Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1/RSAPKCS1Sync.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1/RSAPKCS1Sync.ets new file mode 100644 index 000000000..ed3d8769b --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1/RSAPKCS1Sync.ets @@ -0,0 +1,123 @@ +/* + * 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 { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 加密消息 +function encryptMessage(publicKey: cryptoFramework.PubKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('RSA1024|PKCS1'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, publicKey, null); + let encryptData = cipher.doFinalSync(plainText); + return encryptData; +} + +// 解密消息 +function decryptMessage(privateKey: cryptoFramework.PriKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('RSA1024|PKCS1'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, privateKey, null); + let decryptData = decoder.doFinalSync(cipherText); + return decryptData; +} + +// 生成RSA密钥对 +function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) { + let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData }; + let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData }; + let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024'); + let keyPair = rsaGenerator.convertKeySync(pubKeyBlob, priKeyBlob); + console.info('convertKeySync success'); + return keyPair; +} + +function main() { + let pkData = + new Uint8Array([48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, + 2, 129, 129, 0, 197, 64, 10, 198, 14, 110, 65, 92, 206, 35, 28, 123, 153, 24, 134, 255, 145, 74, 42, 173, 40, 215, + 146, 58, 143, 46, 10, 195, 154, 160, 69, 196, 220, 152, 179, 44, 111, 200, 84, 78, 215, 73, 210, 181, 12, 29, 70, + 68, 36, 135, 153, 89, 230, 202, 130, 212, 111, 243, 234, 92, 131, 62, 145, 50, 73, 48, 104, 245, 46, 70, 45, 157, + 147, 143, 140, 162, 156, 216, 220, 49, 121, 142, 194, 33, 223, 201, 0, 16, 163, 210, 240, 118, 92, 147, 121, 220, + 17, 114, 24, 52, 125, 135, 176, 88, 21, 83, 86, 17, 156, 88, 250, 48, 79, 86, 128, 248, 105, 208, 133, 140, 13, + 153, 164, 191, 136, 164, 44, 53, 2, 3, 1, 0, 1]); + let skData = + new Uint8Array([48, 130, 2, 119, 2, 1, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 4, 130, 2, 97, 48, + 130, 2, 93, 2, 1, 0, 2, 129, 129, 0, 197, 64, 10, 198, 14, 110, 65, 92, 206, 35, 28, 123, 153, 24, 134, 255, 145, + 74, 42, 173, 40, 215, 146, 58, 143, 46, 10, 195, 154, 160, 69, 196, 220, 152, 179, 44, 111, 200, 84, 78, 215, 73, + 210, 181, 12, 29, 70, 68, 36, 135, 153, 89, 230, 202, 130, 212, 111, 243, 234, 92, 131, 62, 145, 50, 73, 48, 104, + 245, 46, 70, 45, 157, 147, 143, 140, 162, 156, 216, 220, 49, 121, 142, 194, 33, 223, 201, 0, 16, 163, 210, 240, + 118, 92, 147, 121, 220, 17, 114, 24, 52, 125, 135, 176, 88, 21, 83, 86, 17, 156, 88, 250, 48, 79, 86, 128, 248, + 105, 208, 133, 140, 13, 153, 164, 191, 136, 164, 44, 53, 2, 3, 1, 0, 1, 2, 129, 128, 70, 75, 184, 139, 53, 1, 94, + 17, 240, 244, 218, 101, 193, 253, 215, 190, 164, 204, 197, 192, 200, 89, 107, 39, 171, 119, 65, 38, 204, 168, 105, + 180, 234, 217, 16, 161, 185, 132, 175, 103, 25, 154, 153, 153, 36, 36, 26, 178, 150, 66, 45, 8, 185, 19, 90, 228, + 210, 177, 30, 200, 177, 141, 78, 184, 248, 59, 113, 154, 145, 73, 160, 24, 73, 157, 86, 207, 186, 32, 95, 200, + 106, 252, 107, 69, 170, 193, 216, 196, 181, 142, 74, 203, 15, 18, 89, 228, 152, 19, 239, 21, 233, 98, 121, 214, + 57, 187, 111, 239, 223, 248, 199, 70, 223, 108, 108, 113, 234, 144, 155, 95, 246, 144, 244, 122, 39, 55, 127, 81, + 2, 65, 0, 246, 96, 188, 0, 0, 104, 221, 105, 139, 144, 63, 175, 209, 87, 179, 162, 88, 192, 99, 82, 125, 53, 54, + 48, 70, 245, 239, 37, 15, 242, 247, 84, 115, 187, 196, 95, 156, 40, 165, 60, 64, 102, 13, 229, 243, 2, 149, 0, + 232, 226, 221, 192, 95, 11, 12, 208, 5, 181, 98, 62, 210, 190, 141, 235, 2, 65, 0, 204, 244, 34, 10, 105, 80, 76, + 116, 163, 35, 231, 168, 187, 206, 189, 101, 215, 103, 80, 115, 86, 11, 34, 127, 203, 114, 84, 188, 121, 174, 169, + 31, 142, 2, 182, 27, 140, 225, 157, 227, 71, 98, 15, 203, 187, 213, 5, 190, 20, 121, 8, 30, 193, 100, 232, 101, + 141, 8, 124, 20, 29, 78, 6, 95, 2, 65, 0, 204, 43, 225, 224, 6, 118, 224, 117, 100, 200, 199, 94, 70, 23, 109, + 175, 173, 232, 208, 230, 61, 8, 105, 189, 156, 48, 150, 91, 154, 89, 248, 136, 173, 215, 254, 166, 84, 220, 130, + 1, 234, 68, 40, 100, 84, 251, 224, 202, 254, 51, 115, 28, 198, 38, 124, 25, 175, 129, 94, 199, 61, 17, 216, 189, + 2, 64, 72, 230, 129, 129, 48, 138, 134, 87, 106, 123, 231, 247, 165, 173, 216, 194, 115, 198, 228, 223, 209, 120, + 46, 114, 68, 92, 75, 117, 170, 214, 140, 131, 147, 208, 181, 19, 193, 157, 178, 186, 87, 246, 178, 101, 166, 79, + 20, 54, 211, 51, 101, 199, 2, 197, 48, 192, 134, 84, 193, 69, 170, 82, 201, 131, 2, 65, 0, 213, 165, 55, 166, 131, + 210, 195, 56, 250, 147, 195, 61, 205, 208, 189, 185, 40, 52, 50, 119, 137, 23, 246, 46, 220, 108, 52, 23, 152, + 154, 94, 32, 144, 195, 184, 249, 21, 168, 12, 57, 222, 18, 60, 117, 81, 157, 72, 30, 155, 190, 165, 242, 228, 139, + 240, 184, 145, 170, 103, 210, 160, 161, 135, 13]); + let keyPair = genKeyPairByData(pkData, skData); + let pubKey = keyPair.pubKey; + let priKey = keyPair.priKey; + let message = 'This is a test'; + // 把字符串按utf-8解码为Uint8Array + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessage(pubKey, plainText); + let decryptText = decryptMessage(priKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + // 把Uint8Array按utf-8编码为字符串 + let messageDecrypted = buffer.from(decryptText.data).toString('utf-8'); + console.info('decrypted result string:' + messageDecrypted); + } else { + console.error('decrypt failed'); + } +} + +@Entry +@Component +struct Index { + @State message: string = 'RSA PKCS1 Sync'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.call_rsa_pkcs1_sync')) + .onClick(() => { + try { + main(); + this.message = 'RSA PKCS1 Sync Success'; + } catch (error) { + console.error(error); + this.message = 'RSA PKCS1 Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1_oaep/RSAPKCS1OAEPAsync.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1_oaep/RSAPKCS1OAEPAsync.ets new file mode 100644 index 000000000..2ba5cba18 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1_oaep/RSAPKCS1OAEPAsync.ets @@ -0,0 +1,131 @@ +/* + * 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. + */ + +// [Start pss_verify_rsa_keypair_sign_async] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 根据密钥参数属性构造RSA非对称密钥对密钥参数 +function genRsaKeyPairSpec(nIn: bigint, eIn: bigint, dIn: bigint) { + let rsaCommSpec: cryptoFramework.RSACommonParamsSpec = { + n: nIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC + }; + let rsaKeyPairSpec: cryptoFramework.RSAKeyPairSpec = { + params: rsaCommSpec, + sk: dIn, + pk: eIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC + }; + return rsaKeyPairSpec; +} + +// 生成RSA2048密钥对参数 +function genRsa2048KeyPairSpec(): cryptoFramework.RSAKeyPairSpec { + let nIn = + BigInt('0x9260d0750ae117eee55c3f3deaba74917521a262ee76007cdf8a56755ad73a1598a1408410a01434c3f5bc54a88b57fa19fc4328daea0750a4c44e88cff3b2382621b80f670464433e4336e6d003e8cd65bff211da144b88291c2259a00a72b711c116ef7686e8fee34e4d933c868187bdc26f7be071493c86f7a5941c3510806ad67b0f94d88f5cf5c02a092821d8626e8932b65c5bd8c92049c210932b7afa7ac59c0e886ae5c1edb00d8ce2c57633db26bd6639bff73cee82be9275c402b4cf2a4388da8cf8c64eefe1c5a0f5ab8057c39fa5c0589c3e253f0960332300f94bea44877b588e1edbde97cf2360727a09b775262d7ee552b3319b9266f05a25'); + let eIn = BigInt('0x010001'); + let dIn = + BigInt('0x6a7df2ca63ead4dda191d614b6b385e0d9056a3d6d5cfe07db1daabee022db08212d97613d3328e0267c9dd23d787abde2afcb306aeb7dfce69246cc73f5c87fdf06030179a2114b767db1f083ff841c025d7dc00cd82435b9a90f695369e94df23d2ce458bc3b3283ad8bba2b8fa1ba62e2dce9accff3799aae7c840016f3ba8e0048c0b6cc4339af7161003a5beb864a0164b2c1c9237b64bc87556994351b27506c33d4bcdfce0f9c491a7d6b0628c7c852be4f0a9c3132b2ed3a2c8881e9aab07e20e17deb074691be677776a78b5c502e05d9bdde72126b3738695e2dd1a0a98a14247c65d8a7ee79432a092cb0721a12df798e44f7cfce0c498147a9b1'); + return genRsaKeyPairSpec(nIn, eIn, dIn); +} + +async function rsaUseSpecDecryptOAEPPromise() { + let plan = 'This is a test'; + // 获得RSA密钥对密钥参数对象 + let rsaKeyPairSpec = genRsa2048KeyPairSpec(); + // 根据RSA密钥对参数生成RSA密钥对 + let rsaGeneratorSpec = cryptoFramework.createAsyKeyGeneratorBySpec(rsaKeyPairSpec); + let cipher = cryptoFramework.createCipher('RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1'); + let decoder = cryptoFramework.createCipher('RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1'); + // RSA加解密PKCS1-OAEP模式填充字节流P + let pSource = new Uint8Array([1, 2, 3, 4]); + let input: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(plan, 'utf-8').buffer) }; + // 生成密钥对 + let keyPair = await rsaGeneratorSpec.generateKeyPair(); + // 进行加密操作初始化 + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.pubKey, null); + // get和set操作可以放在Cipher对象init之后,此处对cipher进行set和get操作 + cipher.setCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR, pSource); + let retP = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR); + // 比较get出来的P字节流与set进去的P字节流是否一致 + if (retP.toString() != pSource.toString()) { + console.error('error init pSource' + retP); + } else { + console.info('pSource changed ==' + retP); + } + // 进行OAEP其他参数的get操作 + let md = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MD_NAME_STR); + console.info('md == ' + md); + let mgf = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF_NAME_STR); + console.info('mgf == ' + mgf); + let mgf1Md = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_MD_STR); + console.info('mgf1Md == ' + mgf1Md); + let cipherDataBlob = await cipher.doFinal(input); + // get和set操作可以放在Cipher对象init之前,且与init之后等价,此处对decoder进行set和get操作 + decoder.setCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR, pSource); + retP = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR); + // 比较get出来的P字节流与set进去的P字节流是否一致 + if (retP.toString() != pSource.toString()) { + console.error('error init pSource' + retP); + } else { + console.info('pSource changed ==' + retP); + } + // 进行OAEP其他参数的get操作 + md = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MD_NAME_STR); + console.info('md == ' + md); + mgf = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF_NAME_STR); + console.info('mgf == ' + mgf); + mgf1Md = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_MD_STR); + console.info('mgf1Md == ' + mgf1Md); + // 初始化解密操作 + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, keyPair.priKey, null); + let decodeData = await decoder.doFinal(cipherDataBlob); + // 解密成功 + if (decodeData.data.toString() === input.data.toString()) { + console.info('oaep decrypt success'); + } else { + console.error('oaep decrypt fail'); + } +} +// [End pss_verify_rsa_keypair_sign_async] + +@Entry +@Component +struct Index { + @State message: string = 'RSA PKCS1 OAEP Async'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.call_rsa_pkcs1_oaep_async')) + .onClick(async () => { + try { + await rsaUseSpecDecryptOAEPPromise(); + this.message = 'RSA PKCS1 OAEP Async Success'; + } catch (error) { + console.error(error); + this.message = 'RSA PKCS1 OAEP Async Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1_oaep/RSAPKCS1OAEPSync.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1_oaep/RSAPKCS1OAEPSync.ets new file mode 100644 index 000000000..b03ec271b --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_pkcs1_oaep/RSAPKCS1OAEPSync.ets @@ -0,0 +1,126 @@ +/* + * 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. + */ + +// [Start pss_verify_rsa_keypair_sign_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; +// 根据密钥参数属性构造RSA非对称密钥对密钥参数 +function genRsaKeyPairSpec(nIn: bigint, eIn: bigint, dIn: bigint) { + let rsaCommSpec: cryptoFramework.RSACommonParamsSpec = { + n: nIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC + }; + let rsaKeyPairSpec: cryptoFramework.RSAKeyPairSpec = { + params: rsaCommSpec, + sk: dIn, + pk: eIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC + }; + return rsaKeyPairSpec; +} +// 生成RSA2048密钥对参数 +function genRsa2048KeyPairSpec(): cryptoFramework.RSAKeyPairSpec { + let nIn = BigInt('0x9260d0750ae117eee55c3f3deaba74917521a262ee76007cdf8a56755ad73a1598a1408410a01434c3f5bc54a88b57fa19fc4328daea0750a4c44e88cff3b2382621b80f670464433e4336e6d003e8cd65bff211da144b88291c2259a00a72b711c116ef7686e8fee34e4d933c868187bdc26f7be071493c86f7a5941c3510806ad67b0f94d88f5cf5c02a092821d8626e8932b65c5bd8c92049c210932b7afa7ac59c0e886ae5c1edb00d8ce2c57633db26bd6639bff73cee82be9275c402b4cf2a4388da8cf8c64eefe1c5a0f5ab8057c39fa5c0589c3e253f0960332300f94bea44877b588e1edbde97cf2360727a09b775262d7ee552b3319b9266f05a25'); + let eIn = BigInt('0x010001'); + let dIn = BigInt('0x6a7df2ca63ead4dda191d614b6b385e0d9056a3d6d5cfe07db1daabee022db08212d97613d3328e0267c9dd23d787abde2afcb306aeb7dfce69246cc73f5c87fdf06030179a2114b767db1f083ff841c025d7dc00cd82435b9a90f695369e94df23d2ce458bc3b3283ad8bba2b8fa1ba62e2dce9accff3799aae7c840016f3ba8e0048c0b6cc4339af7161003a5beb864a0164b2c1c9237b64bc87556994351b27506c33d4bcdfce0f9c491a7d6b0628c7c852be4f0a9c3132b2ed3a2c8881e9aab07e20e17deb074691be677776a78b5c502e05d9bdde72126b3738695e2dd1a0a98a14247c65d8a7ee79432a092cb0721a12df798e44f7cfce0c498147a9b1'); + return genRsaKeyPairSpec(nIn, eIn, dIn); +} +function main() { + let plan = 'This is a test'; + // 获得RSA密钥对密钥参数对象 + let rsaKeyPairSpec = genRsa2048KeyPairSpec(); + // 根据RSA密钥对参数生成RSA密钥对 + let rsaGeneratorSpec = cryptoFramework.createAsyKeyGeneratorBySpec(rsaKeyPairSpec); + let cipher = cryptoFramework.createCipher('RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1'); + let decoder = cryptoFramework.createCipher('RSA2048|PKCS1_OAEP|SHA256|MGF1_SHA1'); + // RSA加解密PKCS1-OAEP模式填充字节流P + let pSource = new Uint8Array([1, 2, 3, 4]); + let input: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(plan, 'utf-8').buffer) }; + // 生成密钥对 + let keyPair = rsaGeneratorSpec.generateKeyPairSync(); + // 进行加密操作初始化 + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, keyPair.pubKey, null); + // get和set操作可以放在Cipher对象init之后,此处对cipher进行set和get操作 + cipher.setCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR, pSource); + let retP = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR); + // 比较get出来的P字节流与set进去的P字节流是否一致 + if (retP.toString() != pSource.toString()) { + console.error('error init pSource' + retP); + } else { + console.info('pSource changed ==' + retP); + } + // 进行OAEP其他参数的get操作 + let md = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MD_NAME_STR); + console.info('md == ' + md); + let mgf = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF_NAME_STR); + console.info('mgf == ' + mgf); + let mgf1Md = cipher.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_MD_STR); + console.info('mgf1Md == ' + mgf1Md); + let cipherDataBlob = cipher.doFinalSync(input); + // get和set操作可以放在Cipher对象init之前,且与init之后等价,此处对decoder进行set和get操作 + decoder.setCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR, pSource); + retP = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_PSRC_UINT8ARR); + // 比较get出来的P字节流与set进去的P字节流是否一致 + if (retP.toString() != pSource.toString()) { + console.error('error init pSource' + retP); + } else { + console.info('pSource changed ==' + retP); + } + // 进行OAEP其他参数的get操作 + md = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MD_NAME_STR); + console.info('md == ' + md); + mgf = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF_NAME_STR); + console.info('mgf == ' + mgf); + mgf1Md = decoder.getCipherSpec(cryptoFramework.CipherSpecItem.OAEP_MGF1_MD_STR); + console.info('mgf1Md == ' + mgf1Md); + // 初始化解密操作 + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, keyPair.priKey, null); + let decodeData = decoder.doFinalSync(cipherDataBlob); + // 解密成功 + if (decodeData.data.toString() === input.data.toString()) { + console.info('oaep decrypt success'); + } else { + console.error('oaep decrypt fail'); + } +} +// [End pss_verify_rsa_keypair_sign_sync] + +@Entry +@Component +struct Index { + @State message: string = 'RSA PKCS1 OAEP Sync'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.call_rsa_pkcs1_oaep_sync')) + .onClick(() => { + try { + main(); + this.message = 'RSA PKCS1 OAEP Sync Success'; + } catch (error) { + console.error(error); + this.message = 'RSA PKCS1 OAEP Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_segmentation/RSASegmentationAsync.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_segmentation/RSASegmentationAsync.ets new file mode 100644 index 000000000..ddec066c4 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_segmentation/RSASegmentationAsync.ets @@ -0,0 +1,105 @@ +/* + * 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 { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 分段加密消息 +async function rsaEncryptBySegment(pubKey: cryptoFramework.PubKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('RSA1024|PKCS1'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, pubKey, null); + let plainTextSplitLen = 64; + let cipherText = new Uint8Array(); + for (let i = 0; i < plainText.data.length; i += plainTextSplitLen) { + let updateMessage = plainText.data.subarray(i, i + plainTextSplitLen); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 将原文按64字符进行拆分,循环调用doFinal进行加密,使用1024bit密钥时,每次加密生成128字节长度的密文 + let updateOutput = await cipher.doFinal(updateMessageBlob); + let mergeText = new Uint8Array(cipherText.length + updateOutput.data.length); + mergeText.set(cipherText); + mergeText.set(updateOutput.data, cipherText.length); + cipherText = mergeText; + } + let cipherBlob: cryptoFramework.DataBlob = { data: cipherText }; + return cipherBlob; +} + +// 分段解密消息 +async function rsaDecryptBySegment(priKey: cryptoFramework.PriKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('RSA1024|PKCS1'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, priKey, null); + let cipherTextSplitLen = 128; // RSA密钥每次加密生成的密文字节长度计算方式:密钥位数/8 + let decryptText = new Uint8Array(); + for (let i = 0; i < cipherText.data.length; i += cipherTextSplitLen) { + let updateMessage = cipherText.data.subarray(i, i + cipherTextSplitLen); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 将密文按128字节进行拆分解密,得到原文后进行拼接 + let updateOutput = await decoder.doFinal(updateMessageBlob); + let mergeText = new Uint8Array(decryptText.length + updateOutput.data.length); + mergeText.set(decryptText); + mergeText.set(updateOutput.data, decryptText.length); + decryptText = mergeText; + } + let decryptBlob: cryptoFramework.DataBlob = { data: decryptText }; + return decryptBlob; +} + +async function rsaEncryptLongMessage() { + let message = 'This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!'; + let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024'); // 创建非对称密钥生成器对象 + let keyPair = await asyKeyGenerator.generateKeyPair(); // 随机生成RSA密钥 + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await rsaEncryptBySegment(keyPair.pubKey, plainText); + let decryptText = await rsaDecryptBySegment(keyPair.priKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} + +@Entry +@Component +struct Index { + @State message: string = 'RSA Segmentation Async'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.call_rsa_segmentation_async')) + .onClick(async () => { + try { + await rsaEncryptLongMessage(); + this.message = 'RSA Segmentation Async Success'; + } catch (error) { + console.error(error); + this.message = 'RSA Segmentation Async Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_segmentation/RSASegmentationSync.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_segmentation/RSASegmentationSync.ets new file mode 100644 index 000000000..e38c88681 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/ets/pages/rsa_segmentation/RSASegmentationSync.ets @@ -0,0 +1,105 @@ +/* + * 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 { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 分段加密消息 +function rsaEncryptBySegment(pubKey: cryptoFramework.PubKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('RSA1024|PKCS1'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, pubKey, null); + let plainTextSplitLen = 64; + let cipherText = new Uint8Array(); + for (let i = 0; i < plainText.data.length; i += plainTextSplitLen) { + let updateMessage = plainText.data.subarray(i, i + plainTextSplitLen); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 将原文按64字符进行拆分,循环调用doFinal进行加密,使用1024bit密钥时,每次加密生成128字节长度的密文 + let updateOutput = cipher.doFinalSync(updateMessageBlob); + let mergeText = new Uint8Array(cipherText.length + updateOutput.data.length); + mergeText.set(cipherText); + mergeText.set(updateOutput.data, cipherText.length); + cipherText = mergeText; + } + let cipherBlob: cryptoFramework.DataBlob = { data: cipherText }; + return cipherBlob; +} + +// 分段解密消息 +function rsaDecryptBySegment(priKey: cryptoFramework.PriKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('RSA1024|PKCS1'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, priKey, null); + let cipherTextSplitLen = 128; // RSA密钥每次加密生成的密文字节长度计算方式:密钥位数/8 + let decryptText = new Uint8Array(); + for (let i = 0; i < cipherText.data.length; i += cipherTextSplitLen) { + let updateMessage = cipherText.data.subarray(i, i + cipherTextSplitLen); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 将密文按128字节进行拆分解密,得到原文后进行拼接 + let updateOutput = decoder.doFinalSync(updateMessageBlob); + let mergeText = new Uint8Array(decryptText.length + updateOutput.data.length); + mergeText.set(decryptText); + mergeText.set(updateOutput.data, decryptText.length); + decryptText = mergeText; + } + let decryptBlob: cryptoFramework.DataBlob = { data: decryptText }; + return decryptBlob; +} + +function main() { + let message = 'This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!' + + 'This is a long plainTest! This is a long plainTest! This is a long plainTest! This is a long plainTest!'; + let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024'); // 创建非对称密钥生成器对象 + let keyPair = asyKeyGenerator.generateKeyPairSync(); // 随机生成RSA密钥 + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = rsaEncryptBySegment(keyPair.pubKey, plainText); + let decryptText = rsaDecryptBySegment(keyPair.priKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} + +@Entry +@Component +struct Index { + @State message: string = 'RSA Segmentation Sync'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.call_rsa_segmentation_sync')) + .onClick(() => { + try { + main(); + this.message = 'RSA Segmentation Sync Success'; + } catch (error) { + console.error(error); + this.message = 'RSA Segmentation Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/module.json5 @@ -0,0 +1,66 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "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" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..817d73142 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/element/string.json @@ -0,0 +1,64 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "EncryptionDecryptionGuidanceRSA" + }, + { + "name": "rsa_pkcs1_async", + "value": "RSA PKCS1 Async" + }, + { + "name": "rsa_pkcs1_sync", + "value": "RSA PKCS1 Sync" + }, + { + "name": "rsa_segmentation_async", + "value": "RSA Segmentation Async" + }, + { + "name": "rsa_segmentation_sync", + "value": "RSA Segmentation Sync" + }, + { + "name": "rsa_pkcs1_oaep_async", + "value": "RSA PKCS1 OAEP Async" + }, + { + "name": "rsa_pkcs1_oaep_sync", + "value": "RSA PKCS1 OAEP Sync" + }, + { + "name": "call_rsa_pkcs1_async", + "value": "Call RSA PKCS1 Async" + }, + { + "name": "call_rsa_pkcs1_sync", + "value": "Call RSA PKCS1 Sync" + }, + { + "name": "call_rsa_pkcs1_oaep_async", + "value": "Call RSA PKCS1 OAEP Async" + }, + { + "name": "call_rsa_pkcs1_oaep_sync", + "value": "Call RSA PKCS1 OAEP Sync" + }, + { + "name": "call_rsa_segmentation_async", + "value": "Call RSA Segmentation Async" + }, + { + "name": "call_rsa_segmentation_sync", + "value": "Call RSA Segmentation Sync" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..690f4947d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,11 @@ +{ + "src": [ + "pages/Index", + "pages/rsa_pkcs1_oaep/RSAPKCS1OAEPAsync", + "pages/rsa_pkcs1_oaep/RSAPKCS1OAEPSync", + "pages/rsa_pkcs1/RSAPKCS1Async", + "pages/rsa_pkcs1/RSAPKCS1Sync", + "pages/rsa_segmentation/RSASegmentationAsync", + "pages/rsa_segmentation/RSASegmentationSync" + ] +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceRSA.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceRSA.test.ets new file mode 100644 index 000000000..01251e870 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceRSA.test.ets @@ -0,0 +1,152 @@ +/* + * 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 { describe, it, expect, beforeAll } from '@ohos/hypium'; +// 导入测试依赖kit +import { abilityDelegatorRegistry, Driver, ON } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; +let want: Want; + +export default function encryptionDecryptionGuidanceRSATest() { + describe('encryptionDecryptionGuidanceRSATest', () => { + /** + * 打开应用 + */ + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * 点击按钮,使用RSA非对称密钥(PKCS1模式)加解密,异步方法 + */ + it('testEncryptionDecryptionGuidanceRSA001', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceRSA001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('RSA PKCS1 Async')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call RSA PKCS1 Async')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('RSA PKCS1 Async Success')); + console.info('uitest: testEncryptionDecryptionGuidanceRSA001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA非对称密钥(PKCS1模式)加解密,同步方法 + */ + it('testEncryptionDecryptionGuidanceRSA002', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceRSA002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('RSA PKCS1 Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call RSA PKCS1 Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('RSA PKCS1 Sync Success')); + console.info('uitest: testEncryptionDecryptionGuidanceRSA002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA非对称密钥分段加解密,异步方法 + */ + it('testEncryptionDecryptionGuidanceRSA003', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceRSA003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('RSA Segmentation Async')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call RSA Segmentation Async')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('RSA Segmentation Async Success')); + console.info('uitest: testEncryptionDecryptionGuidanceRSA003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA非对称密钥分段加解密,同步方法 + */ + it('testEncryptionDecryptionGuidanceRSA004', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceRSA004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('RSA Segmentation Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call RSA Segmentation Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('RSA Segmentation Sync Success')); + console.info('uitest: testEncryptionDecryptionGuidanceRSA004 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA非对称密钥(PKCS1_OAEP模式)加解密,异步方法 + */ + it('testEncryptionDecryptionGuidanceRSA005', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceRSA005 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('RSA PKCS1 OAEP Async')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call RSA PKCS1 OAEP Async')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('RSA PKCS1 OAEP Async Success')); + console.info('uitest: testEncryptionDecryptionGuidanceRSA005 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用RSA非对称密钥(PKCS1_OAEP模式)加解密,同步方法 + */ + it('testEncryptionDecryptionGuidanceRSA006', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceRSA006 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('RSA PKCS1 OAEP Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call RSA PKCS1 OAEP Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('RSA PKCS1 OAEP Sync Success')); + console.info('uitest: testEncryptionDecryptionGuidanceRSA006 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..933baa6d8 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,22 @@ +/* + * 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 abilityTest from './Ability.test'; +import encryptionDecryptionGuidanceRSATest from './EncryptionDecryptionGuidanceRSA.test'; + +export default function testsuite() { + abilityTest(); + encryptionDecryptionGuidanceRSATest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..c3fd9dda3 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/test/List.test.ets new file mode 100644 index 000000000..f1186b1f5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * 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 localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/test/LocalUnit.test.ets new file mode 100644 index 000000000..7fc57c77d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/hvigorfile.ts new file mode 100644 index 000000000..2a5e543f1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/ohosTest.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/ohosTest.md new file mode 100644 index 000000000..3316dd685 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/ohosTest.md @@ -0,0 +1,13 @@ +# 使用RSA非对称密钥加解密测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------------------------------ | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,使用RSA非对称密钥(PKCS1模式)加解密,异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA非对称密钥(PKCS1模式)加解密,同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA非对称密钥分段加解密,异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA非对称密钥分段加解密,同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA非对称密钥(PKCS1_OAEP模式)加解密,异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用RSA非对称密钥(PKCS1_OAEP模式)加解密,同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/screenshots/EncryptionDecryptionGuidanceRSA1.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceRSA/screenshots/EncryptionDecryptionGuidanceRSA1.png new file mode 100644 index 0000000000000000000000000000000000000000..811bc9aca0468eae08b80cb05980ed4b22b875ae GIT binary patch literal 88500 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

(P2CFG_D+@ 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/README.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/README.md new file mode 100644 index 000000000..f434398ad --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/README.md @@ -0,0 +1,75 @@ +# 使用SM2非对称密钥加解密及密文格式转换 + +### 介绍 + +本示例主要展示了使用SM2非对称密钥加解密及密文格式转换场景 。该工程中展示的代码详细描述可查如下链接。 + +- [使用SM2非对称密钥加解密](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm2-asym-encrypt-decrypt.md) +- [使用SM2密文格式转换](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm2-ciphertext-conversion.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例EncryptionDecryptionGuidanceSM2.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 使用SM2非对称密钥加解密及密文格式转换示例代码 + │ │ ├── sm2 + │ │ | ├── CreateASN.1Ciphertext.ets + │ │ | ├── ObtainCiphertext.ets + │ │ | ├── SM2EncryptionDecryptionAsync.ets + │ │ | ├── SM2EncryptionDecryptionSync.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── EncryptionDecryptionGuidanceSM2.test.ets // 自动化测试代码 + │ │ └── List.test.ets +``` + +### 相关权限 + +不涉及。 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2 > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/build-profile.json5 new file mode 100644 index 000000000..fb5a1ab65 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/build-profile.json5 @@ -0,0 +1,57 @@ +/* + * 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/code-linter.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/.gitignore b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/build-profile.json5 new file mode 100644 index 000000000..e7569e305 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/hvigorfile.ts new file mode 100644 index 000000000..e4f43d546 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/oh-package.json5 new file mode 100644 index 000000000..c9cb6c817 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..edc2839f2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,57 @@ +/* + * 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 { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +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(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * 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'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..e3d992fa1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,64 @@ +/* + * 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 { router } from '@kit.ArkUI'; + +@Entry +@Component +struct Index { + @State message: string = 'EncryptionDecryptionGuidanceSM2'; + + goToSample(url: string): void { + router.pushUrl({ + url: url, + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('pushUrl success'); + }) + } + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.sm2_async')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm2/SM2EncryptionDecryptionAsync') + }) + Button($r('app.string.sm2_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm2/SM2EncryptionDecryptionSync') + }) + Button($r('app.string.create_asn1')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm2/CreateASN.1Ciphertext') + }) + Button($r('app.string.obtain_ciphertext')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm2/ObtainCiphertext') + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/CreateASN.1Ciphertext.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/CreateASN.1Ciphertext.ets new file mode 100644 index 000000000..fee1793d9 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/CreateASN.1Ciphertext.ets @@ -0,0 +1,53 @@ +/* + * 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 { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function testGenCipherTextBySpec() { + let spec: cryptoFramework.SM2CipherTextSpec = { + xCoordinate: BigInt('20625015362595980457695435345498579729138244358573902431560627260141789922999'), + yCoordinate: BigInt('48563164792857017065725892921053777369510340820930241057309844352421738767712'), + cipherTextData: new Uint8Array([100, 227, 78, 195, 249, 179, 43, 70, 242, 69, 169, 10, 65, 123]), + hashData: new Uint8Array([87, 167, 167, 247, 88, 146, 203, 234, 83, 126, 117, 129, 52, 142, 82, 54, 152, 226, 201, + 111, 143, 115, 169, 125, 128, 42, 157, 31, 114, 198, 109, 244]), + } + // 此处的data可直接使用cryptoFramework进行SM2解密 + let data = cryptoFramework.SM2CryptoUtil.genCipherTextBySpec(spec, 'C1C3C2'); + console.info('genCipherTextBySpec success'); +} + +@Entry +@Component +struct Index { + @State message: string = 'Create ASN.1'; + + build() { + Column({ space: 5 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_create_asn1')) + .width('70%') + .onClick(() => { + try { + testGenCipherTextBySpec(); + this.message = 'Create ASN.1 Success'; + } catch { + this.message = 'Create ASN.1 Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/ObtainCiphertext.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/ObtainCiphertext.ets new file mode 100644 index 000000000..b8a3c2031 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/ObtainCiphertext.ets @@ -0,0 +1,52 @@ +/* + * 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 { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function testGetCipherTextSpec() { + let cipherTextArray = + new Uint8Array([48, 118, 2, 32, 45, 153, 88, 82, 104, 221, 226, 43, 174, 21, 122, 248, 5, 232, 105, 41, 92, 95, 102, + 224, 216, 149, 85, 236, 110, 6, 64, 188, 149, 70, 70, 183, 2, 32, 107, 93, 198, 247, 119, 18, 40, 110, 90, 156, + 193, 158, 205, 113, 170, 128, 146, 109, 75, 17, 181, 109, 110, 91, 149, 5, 110, 233, 209, 78, 229, 96, 4, 32, 87, + 167, 167, 247, 88, 146, 203, 234, 83, 126, 117, 129, 52, 142, 82, 54, 152, 226, 201, 111, 143, 115, 169, 125, 128, + 42, 157, 31, 114, 198, 109, 244, 4, 14, 100, 227, 78, 195, 249, 179, 43, 70, 242, 69, 169, 10, 65, 123]); + let cipherText: cryptoFramework.DataBlob = { data: cipherTextArray }; + let spec: cryptoFramework.SM2CipherTextSpec = cryptoFramework.SM2CryptoUtil.getCipherTextSpec(cipherText, 'C1C3C2'); + console.info('getCipherTextSpec success'); +} + +@Entry +@Component +struct Index { + @State message: string = 'Obtain Ciphertext'; + + build() { + Column({ space: 5 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_obtain_ciphertext')) + .width('70%') + .onClick(() => { + try { + testGetCipherTextSpec(); + this.message = 'Obtain Ciphertext Success'; + } catch { + this.message = 'Obtain Ciphertext Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/SM2EncryptionDecryptionAsync.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/SM2EncryptionDecryptionAsync.ets new file mode 100644 index 000000000..9f27af389 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/SM2EncryptionDecryptionAsync.ets @@ -0,0 +1,95 @@ +/* + * 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 { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 加密消息 +async function encryptMessagePromise(publicKey: cryptoFramework.PubKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('SM2_256|SM3'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, publicKey, null); + let encryptData = await cipher.doFinal(plainText); + return encryptData; +} + +// 解密消息 +async function decryptMessagePromise(privateKey: cryptoFramework.PriKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('SM2_256|SM3'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, privateKey, null); + let decryptData = await decoder.doFinal(cipherText); + return decryptData; +} + +// 生成SM2密钥对 +async function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) { + let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData }; + let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData }; + let sm2Generator = cryptoFramework.createAsyKeyGenerator('SM2_256'); + let keyPair = await sm2Generator.convertKey(pubKeyBlob, priKeyBlob); + console.info('convertKey success'); + return keyPair; +} + +async function main() { + let pkData = + new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 129, 28, 207, 85, 1, 130, 45, 3, 66, 0, + 4, 90, 3, 58, 157, 190, 248, 76, 7, 132, 200, 151, 208, 112, 230, 96, 140, 90, 238, 211, 155, 128, 109, 248, 40, + 83, 214, 78, 42, 104, 106, 55, 148, 249, 35, 61, 32, 221, 135, 143, 100, 45, 97, 194, 176, 52, 73, 136, 174, 40, + 70, 70, 34, 103, 103, 161, 99, 27, 187, 13, 187, 109, 244, 13, 7]); + let skData = + new Uint8Array([48, 49, 2, 1, 1, 4, 32, 54, 41, 239, 240, 63, 188, 134, 113, 31, 102, 149, 203, 245, 89, 15, 15, 47, + 202, 170, 60, 38, 154, 28, 169, 189, 100, 251, 76, 112, 223, 156, 159, 160, 10, 6, 8, 42, 129, 28, 207, 85, 1, + 130, 45]); + let keyPair = await genKeyPairByData(pkData, skData); + let pubKey = keyPair.pubKey; + let priKey = keyPair.priKey; + let message = 'This is a test'; + // 把字符串按utf-8解码为Uint8Array + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessagePromise(pubKey, plainText); + let decryptText = await decryptMessagePromise(priKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + // 把Uint8Array按utf-8编码为字符串 + let messageDecrypted = buffer.from(decryptText.data).toString('utf-8'); + console.info('decrypted result string:' + messageDecrypted); + } else { + console.error('decrypt failed'); + } +} + +@Entry +@Component +struct Index { + @State message: string = 'SM2 Async'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm2_async')) + .width('70%') + .onClick(async () => { + try { + await main(); + this.message = 'SM2 Async Success'; + } catch { + this.message = 'SM2 Async Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/SM2EncryptionDecryptionSync.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/SM2EncryptionDecryptionSync.ets new file mode 100644 index 000000000..48d167314 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/ets/pages/sm2/SM2EncryptionDecryptionSync.ets @@ -0,0 +1,95 @@ +/* + * 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 { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 加密消息 +function encryptMessage(publicKey: cryptoFramework.PubKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('SM2_256|SM3'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, publicKey, null); + let encryptData = cipher.doFinalSync(plainText); + return encryptData; +} + +// 解密消息 +function decryptMessage(privateKey: cryptoFramework.PriKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('SM2_256|SM3'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, privateKey, null); + let decryptData = decoder.doFinalSync(cipherText); + return decryptData; +} + +// 生成SM2密钥对 +function genKeyPairByData(pubKeyData: Uint8Array, priKeyData: Uint8Array) { + let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyData }; + let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyData }; + let sm2Generator = cryptoFramework.createAsyKeyGenerator('SM2_256'); + let keyPair = sm2Generator.convertKeySync(pubKeyBlob, priKeyBlob); + console.info('convertKeySync success'); + return keyPair; +} + +function main() { + let pkData = + new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 129, 28, 207, 85, 1, 130, 45, 3, 66, 0, + 4, 90, 3, 58, 157, 190, 248, 76, 7, 132, 200, 151, 208, 112, 230, 96, 140, 90, 238, 211, 155, 128, 109, 248, 40, + 83, 214, 78, 42, 104, 106, 55, 148, 249, 35, 61, 32, 221, 135, 143, 100, 45, 97, 194, 176, 52, 73, 136, 174, 40, + 70, 70, 34, 103, 103, 161, 99, 27, 187, 13, 187, 109, 244, 13, 7]); + let skData = + new Uint8Array([48, 49, 2, 1, 1, 4, 32, 54, 41, 239, 240, 63, 188, 134, 113, 31, 102, 149, 203, 245, 89, 15, 15, 47, + 202, 170, 60, 38, 154, 28, 169, 189, 100, 251, 76, 112, 223, 156, 159, 160, 10, 6, 8, 42, 129, 28, 207, 85, 1, + 130, 45]); + let keyPair = genKeyPairByData(pkData, skData); + let pubKey = keyPair.pubKey; + let priKey = keyPair.priKey; + let message = 'This is a test'; + // 把字符串按utf-8解码为Uint8Array + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessage(pubKey, plainText); + let decryptText = decryptMessage(priKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + // 把Uint8Array按utf-8编码为字符串 + let messageDecrypted = buffer.from(decryptText.data).toString('utf-8'); + console.info('decrypted result string:' + messageDecrypted); + } else { + console.error('decrypt failed'); + } +} + +@Entry +@Component +struct Index { + @State message: string = 'SM2 Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm2_sync')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'SM2 Sync Success'; + } catch { + this.message = 'SM2 Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/module.json5 @@ -0,0 +1,66 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "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" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..5a6054af4 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/element/string.json @@ -0,0 +1,48 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "EncryptionDecryptionGuidanceSM2" + }, + { + "name": "sm2_async", + "value": "SM2 Async" + }, + { + "name": "sm2_sync", + "value": "SM2 Sync" + }, + { + "name": "create_asn1", + "value": "Create ASN.1" + }, + { + "name": "obtain_ciphertext", + "value": "Obtain Ciphertext" + }, + { + "name": "call_create_asn1", + "value": "Call Create ASN.1" + }, + { + "name": "call_obtain_ciphertext", + "value": "Call Obtain Ciphertext" + }, + { + "name": "call_sm2_async", + "value": "Call SM2 Async" + }, + { + "name": "call_sm2_sync", + "value": "Call SM2 Sync" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..dc7a892b7 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,9 @@ +{ + "src": [ + "pages/Index", + "pages/sm2/CreateASN.1Ciphertext", + "pages/sm2/ObtainCiphertext", + "pages/sm2/SM2EncryptionDecryptionAsync", + "pages/sm2/SM2EncryptionDecryptionSync" + ] +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceSM2.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceSM2.test.ets new file mode 100644 index 000000000..beab5f33d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceSM2.test.ets @@ -0,0 +1,116 @@ +/* + * 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 { describe, it, expect, beforeAll } from '@ohos/hypium'; +// 导入测试依赖kit +import { abilityDelegatorRegistry, Driver, ON } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; +let want: Want; + +export default function encryptionDecryptionGuidanceSM2Test() { + describe('encryptionDecryptionGuidanceSM2Test', () => { + /** + * 打开应用 + */ + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * 点击按钮,使用SM2非对称密钥加解密,异步方法 + */ + it('testEncryptionDecryptionGuidanceSM2001', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceSM2001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SM2 Async')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM2 Async')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM2 Async Success')); + console.info('uitest: testEncryptionDecryptionGuidanceSM2001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM2非对称密钥加解密,同步方法 + */ + it('testEncryptionDecryptionGuidanceSM2002', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceSM2002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SM2 Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM2 Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM2 Sync Success')); + console.info('uitest: testEncryptionDecryptionGuidanceSM2002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM2密文格式转换,指定密文参数,生成标准ASN.1密文 + */ + it('testEncryptionDecryptionGuidanceSM2003', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceSM2003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Create ASN.1')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call Create ASN.1')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Create ASN.1 Success')); + console.info('uitest: testEncryptionDecryptionGuidanceSM2003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM2密文格式转换,从标准ASN.1密文中,获取密文参数 + */ + it('testEncryptionDecryptionGuidanceSM2004', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceSM2004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Obtain Ciphertext')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call Obtain Ciphertext')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Obtain Ciphertext Success')); + console.info('uitest: testEncryptionDecryptionGuidanceSM2004 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..83c4d6686 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,22 @@ +/* + * 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 abilityTest from './Ability.test'; +import encryptionDecryptionGuidanceSM2Test from './EncryptionDecryptionGuidanceSM2.test'; + +export default function testsuite() { + abilityTest(); + encryptionDecryptionGuidanceSM2Test(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..c3fd9dda3 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/test/List.test.ets new file mode 100644 index 000000000..f1186b1f5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * 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 localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/test/LocalUnit.test.ets new file mode 100644 index 000000000..7fc57c77d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/hvigorfile.ts new file mode 100644 index 000000000..2a5e543f1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/ohosTest.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/ohosTest.md new file mode 100644 index 000000000..517166af8 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/ohosTest.md @@ -0,0 +1,11 @@ +# 使用SM2非对称密钥加解密及密文格式转换测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------------------------------ | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,使用SM2非对称密钥加解密,异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM2非对称密钥加解密,同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM2密文格式转换,指定密文参数,生成标准ASN.1密文 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM2密文格式转换,从标准ASN.1密文中,获取密文参数 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/screenshots/EncryptionDecryptionGuidanceSM21.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/screenshots/EncryptionDecryptionGuidanceSM21.png new file mode 100644 index 0000000000000000000000000000000000000000..b308e5b3f846007d12c8dfff31f2e077e64a47b7 GIT binary patch literal 57613 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 K2nYfF|2F}*9RT+L literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/screenshots/EncryptionDecryptionGuidanceSM22.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM2/screenshots/EncryptionDecryptionGuidanceSM22.png new file mode 100644 index 0000000000000000000000000000000000000000..224b531d5a5d9127bc49ef9d2010bf7103e23945 GIT binary patch literal 24771 zcmd43XIPWlwm*ux)TJmcP(Z3%6fi+Rlp_5|l^{V%XrU}XY6zIn`?i5}>C%^A2qYxb zB#=-Pq&Fc2NC*f>@4X3J_SyT~|2enp`{6$KdG4EhcxUE2$C&ds#~5?WF~^&e;gcU6 ze}ME1^f=C(;ovxP`r$ZXacG~G{@-2yAoBl?!fET1FC5&zpHn+CdhU!E$64+(=eWIL@3s_uGYwm(Krw`LrIw&2je3xija_o##CL>HMYBr~XmTeah^V z(-RZN->-|AI^E#E`Op&aD*0388t-%7`Xx4e30y8G14i1`)Pt)N1}O8#w5tq$b?;-R%#RaeaL2T zQfx4mDGu4qzyLs4__rb#WKU(>T?(Xe_k)#Jb$Jq%ulK@g&>OFufMipGmOfD@|7YL| z4^JI;iG|qn%^Jqh4ND^hj43{%tY~t*f8~Tj?qg#?NaW9?lJgntt#tETF>wH>un@C3 z2Dbd_f%2H(E4W-+3bC9l6qAPFTG9CcP_4P~x)>0H27tu&0@Kw@cugLkaFi-@kk3?S zDbyM&kI5>yy{Gn04br+zSro0lZukHSaiAov>$6X*~T8U%w0`Z50Z%fPkV@`}>v^pH1K zQ30?X9S^%t*|2oLdm0^@8|VQEAugckkd@E=Xe!-QTAoOF8G9hKX6NvF{g!h2Dw=h| zp-H2~bs_Vq+!D)|h24s~aV3>^YRWZ%+FNoW*#ML+5}g|i-BZ6$U?UcOns&nnOo8++ z^Oz4Yx3dt=U5QiRN^#6B#~BgSjHnCKl$h_h5OJr6qHA7Dt?|`Ppd0xCsiwfDLzi2} z<;?e5s*vIIMc{gEp!)vf_+1x%KNu}O;GR{5a`vGkOw zA=T+Tz)`geY3$D)3X_j8nO4WT8Bq6~56@3d8FsY519a>+?p>t4j_E1{qA!=^qSe+K zX|t^ME_05vdt&7s)>|F1B_;0*;Pz4zT|tP6uDvi9-TkmI4%u@?ywV0;g_4=kYWs!2 z!t&p93pe7LY5AfN-)I~h)zD5Oh~)1LG+lcb>ai|3*nHg_#s4*UeWwtJ=-~gmVwH;$ zU;ZIhR~p4T1WhNi{7j5)?52C#EPw$MycUGXSZ+SdLU9^|gMChjYhEzatLajkOM5V{ zM>3zbskQxLeu9aV6I!*is}S`x?;F^pE2mTyoAN(2<^Qfgf`IZ)I21tc5FN1c8aPa? zJ^~E6CMSYp%|>iX4&4GDrHE)Qsm`DX@Hk$9#NEEi&c2p<(6?EwPTACTrhU|sK?1XE z_yTY83n1OsNvBg*38n@hm~kg zc9>tccjU*e)~_wOjsT|vDy*HXs}9doZzt=x=0~VqiMDqQl!B0#cdA$}l|co+Ee{szQEYGKe3;ms z+bs*2aK+7EX?yju3Odu(9+0-38tWxUxk4W9of=AT8oKh1U7i1hSP5J<%E0Qj*gorl z?_`J~T*1ZClT<_k+yGqE-;U92w$;ZX=-vJ!tn�neMP?9g#C0SBLVK!jEg0v5(SI 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 M{69e8lbwNo0`rVPEdT%j literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/.gitignore b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/.gitignore new file mode 100644 index 000000000..d2ff20141 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/.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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/AppScope/app.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/AppScope/app.json5 new file mode 100644 index 000000000..63f431a68 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/AppScope/app.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "app": { + "bundleName": "com.samples.encryptiondecryptionguidancesm4", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/AppScope/resources/base/element/string.json new file mode 100644 index 000000000..14ef92ce2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "EncryptionDecryptionGuidanceSM4" + } + ] +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 GIT binary patch literal 2777 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/README.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/README.md new file mode 100644 index 000000000..ef0628e18 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/README.md @@ -0,0 +1,85 @@ +# 使用SM4对称密钥加解密(C/C++) + +### 介绍 + +本示例主要展示了使用SM4对称密钥(ECB模式)加解密(C/C++)、使用SM4对称密钥(CBC模式)加解密(C/C++)、使用SM4对称密钥(GCM模式)加解密(C/C++)、使用SM4对称密钥(GCM模式)分段加解密(C/C++)场景 。该工程中展示的代码详细描述可查如下链接。 + +- [使用SM4对称密钥(ECB模式)加解密(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm4-sym-encrypt-decrypt-ecb-ndk.md) +- [使用SM4对称密钥(CBC模式)加解密(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm4-sym-encrypt-decrypt-cbc-ndk.md) +- [使用SM4对称密钥(GCM模式)加解密(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm4-sym-encrypt-decrypt-gcm-ndk.md) +- [使用SM4对称密钥(GCM模式)分段加解密(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm4-sym-encrypt-decrypt-gcm-by-segment-ndk.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例EncryptionDecryptionGuidanceSM4.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── cpp + │ │ ├── types + │ │ | ├── libentry + │ │ | ├── index.d.ts + │ │ | ├── oh-package.json5 + │ │ | ├── project + │ │ | ├── sm4_cbc_encryption_decryption.cpp + │ │ | ├── sm4_ecb_encryption_decryption.cpp + │ │ | ├── sm4_gcm_encryption_decryption.cpp + │ │ | ├── sm4_gcm_seg_encryption_decryption.cpp + │ │ | ├── file.h + │ │ ├── CMakeList.txt + │ │ ├── napi_init.cpp + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 使用SM4对称密钥加解密(C/C++)示例代码 + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── EncryptionDecryptionGuidanceSM4.test.ets // 自动化测试代码 + │ │ └── List.test.ets +``` + +### 相关权限 + +不涉及。 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4 > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/build-profile.json5 new file mode 100644 index 000000000..fb5a1ab65 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/build-profile.json5 @@ -0,0 +1,57 @@ +/* + * 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/code-linter.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/.gitignore b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/build-profile.json5 new file mode 100644 index 000000000..318622574 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/build-profile.json5 @@ -0,0 +1,59 @@ +/* + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + "externalNativeOptions": { + "path": "./src/main/cpp/CMakeLists.txt", + "arguments": "", + "cppFlags": "", + "abiFilters": [ + "arm64-v8a", + "x86_64", + "armeabi-v7a" + ] + } + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + }, + "nativeLib": { + "debugSymbol": { + "strip": true, + "exclude": [] + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/hvigorfile.ts new file mode 100644 index 000000000..e4f43d546 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/oh-package.json5 new file mode 100644 index 000000000..118bdd4fe --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/oh-package.json5 @@ -0,0 +1,26 @@ +/* + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": { + "libentry.so": "file:./src/main/cpp/types/libentry" + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/CMakeLists.txt b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 000000000..908bd1478 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(EncryptionDecryptionGuidanceSM4) + +set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + +if(DEFINED PACKAGE_FIND_FILE) + include(${PACKAGE_FIND_FILE}) +endif() + +include_directories(${NATIVERENDER_ROOT_PATH} + ${NATIVERENDER_ROOT_PATH}/include) + +add_library(entry SHARED napi_init.cpp types/project/sm4_ecb_encryption_decryption.cpp types/project/sm4_cbc_encryption_decryption.cpp types/project/sm4_gcm_encryption_decryption.cpp types/project/sm4_gcm_seg_encryption_decryption.cpp) +target_link_libraries(entry PUBLIC libace_napi.z.so libohcrypto.so) \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/napi_init.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/napi_init.cpp new file mode 100644 index 000000000..0baaf5237 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/napi_init.cpp @@ -0,0 +1,70 @@ +/* + * 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. + */ + +#include "napi/native_api.h" +#include "types/project/file.h" + +static napi_value NAPI_Global_testSm4Ecb(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestSm4Ecb(), &ret); + return ret; +} + +static napi_value NAPI_Global_testSm4Cbc(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestSm4Cbc(), &ret); + return ret; +} + +static napi_value NAPI_Global_testSm4Gcm(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestSm4Gcm(), &ret); + return ret; +} + +static napi_value NAPI_Global_testSm4GcmSeg(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestSm4GcmSeg(), &ret); + return ret; +} + +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = { + {"testSm4Ecb", nullptr, NAPI_Global_testSm4Ecb, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"testSm4Cbc", nullptr, NAPI_Global_testSm4Cbc, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"testSm4Gcm", nullptr, NAPI_Global_testSm4Gcm, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"testSm4GcmSeg", nullptr, NAPI_Global_testSm4GcmSeg, nullptr, nullptr, nullptr, napi_default, nullptr}}; + napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); + return exports; +} +EXTERN_C_END + +static napi_module demoModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_register_func = Init, + .nm_modname = "entry", + .nm_priv = ((void *)0), + .reserved = {0}, +}; + +extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); } diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/libentry/Index.d.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/libentry/Index.d.ts new file mode 100644 index 000000000..128691764 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/libentry/Index.d.ts @@ -0,0 +1,22 @@ +/* + * 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. + */ + +export const testSm4Ecb: () => number; + +export const testSm4Cbc: () => number; + +export const testSm4Gcm: () => number; + +export const testSm4GcmSeg: () => number; diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/libentry/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 000000000..6abf3b7c2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/libentry/oh-package.json5 @@ -0,0 +1,21 @@ +/* + * 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. + */ + +{ + "name": "libentry.so", + "types": "./Index.d.ts", + "version": "1.0.0", + "description": "Please describe the basic information." +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/file.h b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/file.h new file mode 100644 index 000000000..2e8def918 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/file.h @@ -0,0 +1,21 @@ +/* + * 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. + */ + +#include "CryptoArchitectureKit/crypto_common.h" + +OH_Crypto_ErrCode doTestSm4Ecb(); +OH_Crypto_ErrCode doTestSm4Cbc(); +OH_Crypto_ErrCode doTestSm4Gcm(); +OH_Crypto_ErrCode doTestSm4GcmSeg(); \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_cbc_encryption_decryption.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_cbc_encryption_decryption.cpp new file mode 100644 index 000000000..dcd27349a --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_cbc_encryption_decryption.cpp @@ -0,0 +1,97 @@ +/* + * 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. + */ + +// [Start crypt_decrypt_sm4_cbc] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_cipher.h" +#include +// [StartExclude crypt_decrypt_sm4_cbc] +#include "file.h" +// [EndExclude crypt_decrypt_sm4_cbc] + +OH_Crypto_ErrCode doTestSm4Cbc() +{ + OH_CryptoSymKeyGenerator *genCtx = nullptr; + OH_CryptoSymCipher *encCtx = nullptr; + OH_CryptoSymCipher *decCtx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + OH_CryptoSymCipherParams *params = nullptr; + Crypto_DataBlob outUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob decUpdate = {.data = nullptr, .len = 0}; + + char *plainText = const_cast("this is test!"); + Crypto_DataBlob msgBlob = {.data = (uint8_t *)(plainText), .len = strlen(plainText)}; + uint8_t iv[16] = {1, 2, 4, 12, 3, 4, 2, 3, 3, 2, 0, 4, 3, 1, 0, 10}; // iv使用安全随机数生成 + Crypto_DataBlob ivBlob = {.data = iv, .len = sizeof(iv)}; + // 生成对称密钥 + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("SM4_128", &genCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymKeyGenerator_Generate(genCtx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 设置参数 + ret = OH_CryptoSymCipherParams_Create(¶ms); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_IV_DATABLOB, &ivBlob); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 加密 + ret = OH_CryptoSymCipher_Create("SM4_128|CBC|PKCS7", &encCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(encCtx, CRYPTO_ENCRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(encCtx, &msgBlob, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 解密 + ret = OH_CryptoSymCipher_Create("SM4_128|CBC|PKCS7", &decCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(decCtx, CRYPTO_DECRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(decCtx, &outUpdate, &decUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 资源释放 +end: + OH_CryptoSymCipherParams_Destroy(params); + OH_CryptoSymCipher_Destroy(encCtx); + OH_CryptoSymCipher_Destroy(decCtx); + OH_CryptoSymKeyGenerator_Destroy(genCtx); + OH_CryptoSymKey_Destroy(keyCtx); + OH_Crypto_FreeDataBlob(&outUpdate); + OH_Crypto_FreeDataBlob(&decUpdate); + return ret; +} +// [End crypt_decrypt_sm4_cbc] diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_ecb_encryption_decryption.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_ecb_encryption_decryption.cpp new file mode 100644 index 000000000..4aec3a320 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_ecb_encryption_decryption.cpp @@ -0,0 +1,89 @@ +/* + * 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. + */ + +// [Start crypt_decrypt_sm4_ecb] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_cipher.h" +#include +// [StartExclude crypt_decrypt_sm4_ecb] +#include "file.h" +// [EndExclude crypt_decrypt_sm4_ecb] + +OH_Crypto_ErrCode doTestSm4Ecb() +{ + OH_CryptoSymKeyGenerator *genCtx = nullptr; + OH_CryptoSymCipher *encCtx = nullptr; + OH_CryptoSymCipher *decCtx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + OH_CryptoSymCipherParams *params = nullptr; + char *plainText = const_cast("this is test!"); + Crypto_DataBlob input = {.data = (uint8_t *)(plainText), .len = strlen(plainText)}; + Crypto_DataBlob outUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob decUpdate = {.data = nullptr, .len = 0}; + + // 随机生成对称密钥 + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("SM4_128", &genCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymKeyGenerator_Generate(genCtx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + // 创建参数 + ret = OH_CryptoSymCipherParams_Create(¶ms); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 加密操作 + ret = OH_CryptoSymCipher_Create("SM4_128|ECB|PKCS7", &encCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(encCtx, CRYPTO_ENCRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(encCtx, &input, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 解密操作 + ret = OH_CryptoSymCipher_Create("SM4_128|ECB|PKCS7", &decCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(decCtx, CRYPTO_DECRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(decCtx, &outUpdate, &decUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + // 释放资源 +end: + OH_CryptoSymCipherParams_Destroy(params); + OH_CryptoSymCipher_Destroy(encCtx); + OH_CryptoSymCipher_Destroy(decCtx); + OH_CryptoSymKeyGenerator_Destroy(genCtx); + OH_CryptoSymKey_Destroy(keyCtx); + OH_Crypto_FreeDataBlob(&outUpdate); + OH_Crypto_FreeDataBlob(&decUpdate); + return ret; +} +// [End crypt_decrypt_sm4_ecb] diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_gcm_encryption_decryption.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_gcm_encryption_decryption.cpp new file mode 100644 index 000000000..875841d78 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_gcm_encryption_decryption.cpp @@ -0,0 +1,120 @@ +/* + * 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. + */ + +// [Start crypt_decrypt_sm4_gcm] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_cipher.h" +#include +// [StartExclude crypt_decrypt_sm4_gcm] +#include "file.h" +// [EndExclude crypt_decrypt_sm4_gcm] + +OH_Crypto_ErrCode doTestSm4Gcm() +{ + OH_CryptoSymKeyGenerator *genCtx = nullptr; + OH_CryptoSymCipher *encCtx = nullptr; + OH_CryptoSymCipher *decCtx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + OH_CryptoSymCipherParams *params = nullptr; + + Crypto_DataBlob outUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob decUpdate = {.data = nullptr, .len = 0}; + + uint8_t aad[8] = {1, 2, 3, 4, 5, 6, 7, 8}; + uint8_t tag[16] = {0}; + uint8_t iv[12] = {1, 2, 4, 12, 3, 4, 2, 3, 3, 2, 0, 4}; // iv使用安全随机数生成 + Crypto_DataBlob ivData = {.data = iv, .len = sizeof(iv)}; + Crypto_DataBlob aadData = {.data = aad, .len = sizeof(aad)}; + Crypto_DataBlob tagData = {.data = tag, .len = sizeof(tag)}; + Crypto_DataBlob tagOutPut = {.data = nullptr, .len = 0}; + char *plainText = const_cast("this is test!"); + Crypto_DataBlob msgBlob = {.data = (uint8_t *)(plainText), .len = strlen(plainText)}; + // 生成对称密钥 + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("SM4_128", &genCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymKeyGenerator_Generate(genCtx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 设置参数 + ret = OH_CryptoSymCipherParams_Create(¶ms); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_IV_DATABLOB, &ivData); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_AAD_DATABLOB, &aadData); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_TAG_DATABLOB, &tagData); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 加密 + ret = OH_CryptoSymCipher_Create("SM4_128|GCM|PKCS7", &encCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(encCtx, CRYPTO_ENCRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Update(encCtx, &msgBlob, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(encCtx, nullptr, &tagOutPut); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 解密 + ret = OH_CryptoSymCipher_Create("SM4_128|GCM|PKCS7", &decCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_TAG_DATABLOB, &tagOutPut); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(decCtx, CRYPTO_DECRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(decCtx, &outUpdate, &decUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 释放资源 +end: + OH_CryptoSymCipherParams_Destroy(params); + OH_CryptoSymCipher_Destroy(encCtx); + OH_CryptoSymCipher_Destroy(decCtx); + OH_CryptoSymKeyGenerator_Destroy(genCtx); + OH_CryptoSymKey_Destroy(keyCtx); + OH_Crypto_FreeDataBlob(&outUpdate); + OH_Crypto_FreeDataBlob(&decUpdate); + OH_Crypto_FreeDataBlob(&tagOutPut); + return ret; +} +// [End crypt_decrypt_sm4_gcm] diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_gcm_seg_encryption_decryption.cpp b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_gcm_seg_encryption_decryption.cpp new file mode 100644 index 000000000..4f4952621 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/cpp/types/project/sm4_gcm_seg_encryption_decryption.cpp @@ -0,0 +1,144 @@ +/* + * 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. + */ + +// [Start crypt_decrypt_sm4_gcm_seg] +#include +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_cipher.h" + +#define OH_CRYPTO_GCM_TAG_LEN 16 +#define OH_CRYPTO_MAX_TEST_DATA_LEN 128 + +OH_Crypto_ErrCode doTestSm4GcmSeg() +{ + OH_CryptoSymKeyGenerator *genCtx = nullptr; + OH_CryptoSymCipher *encCtx = nullptr; + OH_CryptoSymCipher *decCtx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + OH_CryptoSymCipherParams *params = nullptr; + + char *plainText = const_cast("aaaaa.....bbbbb.....ccccc.....ddddd.....eee"); + Crypto_DataBlob msgBlob = {.data = (uint8_t *)(plainText), .len = strlen(plainText)}; + uint8_t aad[8] = {1, 2, 3, 4, 5, 6, 7, 8}; + uint8_t tagArr[16] = {0}; + uint8_t iv[12] = {1, 2, 4, 12, 3, 4, 2, 3, 3, 2, 0, 4}; // iv使用安全随机数生成 + Crypto_DataBlob tag = {.data = nullptr, .len = 0}; + Crypto_DataBlob ivBlob = {.data = iv, .len = sizeof(iv)}; + Crypto_DataBlob aadBlob = {.data = aad, .len = sizeof(aad)}; + Crypto_DataBlob outUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob decUpdate = {.data = nullptr, .len = 0}; + Crypto_DataBlob tagInit = {.data = tagArr, .len = sizeof(tagArr)}; + int32_t cipherLen = 0; + int blockSize = 20; + int32_t randomLen = strlen(plainText); + int cnt = randomLen / blockSize; + int rem = randomLen % blockSize; + uint8_t cipherText[OH_CRYPTO_MAX_TEST_DATA_LEN] = {0}; + Crypto_DataBlob cipherBlob; + + // 生成密钥 + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("SM4_128", &genCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymKeyGenerator_Generate(genCtx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 设置参数 + ret = OH_CryptoSymCipherParams_Create(¶ms); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_IV_DATABLOB, &ivBlob); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_AAD_DATABLOB, &aadBlob); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_TAG_DATABLOB, &tagInit); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 加密 + ret = OH_CryptoSymCipher_Create("SM4_128|GCM|PKCS7", &encCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(encCtx, CRYPTO_ENCRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + for (int i = 0; i < cnt; i++) { + msgBlob.len = blockSize; + ret = OH_CryptoSymCipher_Update(encCtx, &msgBlob, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + msgBlob.data += blockSize; + memcpy(&cipherText[cipherLen], outUpdate.data, outUpdate.len); + cipherLen += outUpdate.len; + } + if (rem > 0) { + msgBlob.len = rem; + ret = OH_CryptoSymCipher_Update(encCtx, (Crypto_DataBlob *)&msgBlob, &outUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + memcpy(&cipherText[cipherLen], outUpdate.data, outUpdate.len); + cipherLen += outUpdate.len; + } + ret = OH_CryptoSymCipher_Final(encCtx, nullptr, &tag); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + + // 解密 + cipherBlob = {.data = reinterpret_cast(cipherText), .len = (size_t)cipherLen}; + msgBlob.data -= strlen(plainText) - rem; + msgBlob.len = strlen(plainText); + ret = OH_CryptoSymCipher_Create("SM4_128|GCM|PKCS7", &decCtx); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipherParams_SetParam(params, CRYPTO_TAG_DATABLOB, &tag); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Init(decCtx, CRYPTO_DECRYPT_MODE, keyCtx, params); + if (ret != CRYPTO_SUCCESS) { + goto end; + } + ret = OH_CryptoSymCipher_Final(decCtx, &cipherBlob, &decUpdate); + if (ret != CRYPTO_SUCCESS) { + goto end; + } +end: + OH_CryptoSymCipherParams_Destroy(params); + OH_CryptoSymCipher_Destroy(encCtx); + OH_CryptoSymCipher_Destroy(decCtx); + OH_CryptoSymKeyGenerator_Destroy(genCtx); + OH_CryptoSymKey_Destroy(keyCtx); + OH_Crypto_FreeDataBlob(&outUpdate); + OH_Crypto_FreeDataBlob(&tag); + OH_Crypto_FreeDataBlob(&decUpdate); + return ret; +} +// [End crypt_decrypt_sm4_gcm_seg] diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..e138da64e --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,57 @@ +/* + * 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 { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +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(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', err.message ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +}; \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * 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'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..25fe92595 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,56 @@ +/* + * 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 testNapi from 'libentry.so'; + +@Entry +@Component +struct Index { + @State message: string = 'EncryptionDecryptionGuidanceSM4'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(24) + .fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm4_ecb')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testSm4Ecb(); + this.message = 'SM4_ECBSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_sm4_cbc')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testSm4Cbc(); + this.message = 'SM4_CBCSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_sm4_gcm')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testSm4Gcm(); + this.message = 'SM4_GCMSuccess Result:' + ret.toString(); + }) + Button($r('app.string.call_sm4_gcm_seg')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testSm4GcmSeg(); + this.message = 'SM4_GCM_SEGSuccess Result:' + ret.toString(); + }) + } + .width('100%') + .height('100%') + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/module.json5 @@ -0,0 +1,66 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "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" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..1a09b9b38 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/element/string.json @@ -0,0 +1,32 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "EncryptionDecryptionGuidanceSM4" + }, + { + "name": "call_sm4_ecb", + "value": "Call SM4_ECB" + }, + { + "name": "call_sm4_cbc", + "value": "Call SM4_CBC" + }, + { + "name": "call_sm4_gcm", + "value": "Call SM4_GCM" + }, + { + "name": "call_sm4_gcm_seg", + "value": "Call SM4_GCM_SEG" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 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 A4*&oF literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..1898d94f5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceSM4.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceSM4.test.ets new file mode 100644 index 000000000..9edb09d83 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidanceSM4.test.ets @@ -0,0 +1,100 @@ +/* + * 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 { describe, it, expect, beforeAll } from '@ohos/hypium'; +// 导入测试依赖kit +import { abilityDelegatorRegistry, Driver, ON } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; +let want: Want; + +export default function encryptionDecryptionGuidanceSM4Test() { + describe('encryptionDecryptionGuidanceSM4Test', () => { + /** + * 打开应用 + */ + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * 点击按钮,使用SM4对称密钥(ECB模式)加解密(C/C++) + */ + it('testEncryptionDecryptionGuidanceSM4001', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceSM4001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call SM4_ECB')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_ECBSuccess Result:0')); + console.info('uitest: testEncryptionDecryptionGuidanceSM4001 end'); + }) + + /** + * 点击按钮,使用SM4对称密钥(CBC模式)加解密(C/C++) + */ + it('testEncryptionDecryptionGuidanceSM4002', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceSM4002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call SM4_CBC')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_CBCSuccess Result:0')); + console.info('uitest: testEncryptionDecryptionGuidanceSM4002 end'); + }) + + /** + * 点击按钮,使用SM4对称密钥(GCM模式)加解密(C/C++) + */ + it('testEncryptionDecryptionGuidanceSM4003', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceSM4003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call SM4_GCM')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_GCMSuccess Result:0')); + console.info('uitest: testEncryptionDecryptionGuidanceSM4003 end'); + }) + + /** + * 点击按钮,使用SM4对称密钥(GCM模式)分段加解密(C/C++) + */ + it('testEncryptionDecryptionGuidanceSM4004', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceSM4004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call SM4_GCM_SEG')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_GCM_SEGSuccess Result:0')); + console.info('uitest: testEncryptionDecryptionGuidanceSM4004 end'); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..47f0cfd40 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,22 @@ +/* + * 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 abilityTest from './Ability.test'; +import encryptionDecryptionGuidanceSM4Test from './EncryptionDecryptionGuidanceSM4.test'; + +export default function testsuite() { + abilityTest(); + encryptionDecryptionGuidanceSM4Test(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..c3fd9dda3 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/test/List.test.ets new file mode 100644 index 000000000..f1186b1f5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * 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 localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/test/LocalUnit.test.ets new file mode 100644 index 000000000..7fc57c77d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/hvigorfile.ts new file mode 100644 index 000000000..2a5e543f1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/ohosTest.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/ohosTest.md new file mode 100644 index 000000000..8bb265dab --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/ohosTest.md @@ -0,0 +1,11 @@ +# 使用SM4对称密钥加解密(C/C++)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ----------------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(ECB模式)加解密(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(CBC模式)加解密(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(GCM模式)加解密(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(GCM模式)分段加解密(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/screenshots/EncryptionDecryptionGuidanceSM41.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/screenshots/EncryptionDecryptionGuidanceSM41.png new file mode 100644 index 0000000000000000000000000000000000000000..ca830d94eecd54ff91fc2c74c4987ffbb07fc84c GIT binary patch literal 59290 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 Q;FQ2Af&V#y_V2_$0I=H2VgLXD literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/screenshots/EncryptionDecryptionGuidanceSM42.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4/screenshots/EncryptionDecryptionGuidanceSM42.png new file mode 100644 index 0000000000000000000000000000000000000000..3f60efaee8a1541131aea0fef2533efed9c940e2 GIT binary patch literal 57878 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%0DSkOd! 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/README.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/README.md new file mode 100644 index 000000000..94280c803 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/README.md @@ -0,0 +1,84 @@ +# 使用SM4对称密钥加解密(ArkTS) + +### 介绍 + +本示例主要展示了使用SM4对称密钥(ECB模式)加解密(ArkTS)、使用SM4对称密钥(CBC模式)加解密(ArkTS)、使用SM4对称密钥(GCM模式)加解密(ArkTS)、使用SM4对称密钥(GCM模式)分段加解密(ArkTS)场景 。该工程中展示的代码详细描述可查如下链接。 + +- [使用SM4对称密钥(ECB模式)加解密(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm4-sym-encrypt-decrypt-ecb.md) +- [使用SM4对称密钥(CBC模式)加解密(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm4-sym-encrypt-decrypt-cbc.md) +- [使用SM4对称密钥(GCM模式)加解密(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm4-sym-encrypt-decrypt-gcm.md) +- [使用SM4对称密钥(GCM模式)分段加解密(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-sm4-sym-encrypt-decrypt-gcm-by-segment.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例EncryptionDecryptionGuidanceSM4ArkTs.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 使用SM4对称密钥加解密(ArkTS)示例代码 + │ │ ├── sm4_cbc_encryption_decryption + │ │ | ├── sm4_cbc_encryption_decryption_asynchronous.ets + │ │ | ├── sm4_cbc_encryption_decryption_synchronous.ets + │ │ ├── sm4_ecb_encryption_decryption + │ │ | ├── sm4_ecb_encryption_decryption_asynchronous.ets + │ │ | ├── sm4_ecb_encryption_decryption_synchronous.ets + │ │ ├── sm4_gcm_encryption_decryption + │ │ | ├── sm4_gcm_encryption_decryption_asynchronous.ets + │ │ | ├── sm4_gcm_encryption_decryption_synchronous.ets + │ │ ├── sm4_gcm_seg_encryption_decryption + │ │ | ├── sm4_gcm_seg_encryption_decryption_asynchronous.ets + │ │ | ├── sm4_gcm_seg_encryption_decryption_synchronous.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── EncryptionDecryptionGuidanceSM4ArkTs.test.ets // 自动化测试代码 + │ │ └── List.test.ets +``` + +### 相关权限 + +不涉及。 + +### 依赖 + +不涉及。 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:华为手机。 + +2. HarmonyOS系统:HarmonyOS 5.0.2 Release及以上。 + +3. DevEco Studio版本:DevEco Studio 5.0.2 Release及以上。 + +4. HarmonyOS SDK版本:HarmonyOS 5.0.2 Release及以上。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +```` +git init +git config core.sparsecheckout true +echo CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs > .git/info/sparse-checkout +git remote add origin https://gitee.com/harmonyos_samples/guide-snippets.git +git pull origin master +```` \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/build-profile.json5 new file mode 100644 index 000000000..fb5a1ab65 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/build-profile.json5 @@ -0,0 +1,57 @@ +/* + * 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. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "targetSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/code-linter.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/code-linter.json5 new file mode 100644 index 000000000..28586467e --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/code-linter.json5 @@ -0,0 +1,35 @@ +/* + * 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. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/.gitignore b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/.gitignore new file mode 100644 index 000000000..e2713a277 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/build-profile.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/build-profile.json5 new file mode 100644 index 000000000..e7569e305 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/build-profile.json5 @@ -0,0 +1,43 @@ +/* + * 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. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/hvigorfile.ts new file mode 100644 index 000000000..e4f43d546 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/oh-package.json5 new file mode 100644 index 000000000..c9cb6c817 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 000000000..edc2839f2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,57 @@ +/* + * 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 { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +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(0x0000, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); + return; + } + hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground'); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 000000000..b1e212947 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,27 @@ +/* + * 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'; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(0x0000, 'testTag', 'onBackup ok'); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(0x0000, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/Index.ets new file mode 100644 index 000000000..a49d552f7 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,80 @@ +/* + * 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 { router } from '@kit.ArkUI'; + +@Entry +@Component +struct Index { + goToSample(url: string): void { + router.pushUrl({ + url: url, + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('pushUrl success'); + }) + } + + build() { + Column({ space: 5 }) { + Text('EncryptionDecryptionGuidanceSM4ArkTs').fontSize(23).fontWeight(FontWeight.Bolder) + Button($r('app.string.sm4_cbc_encryption_decryption_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_asynchronous') + }) + Button($r('app.string.sm4_cbc_encryption_decryption_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_synchronous') + }) + Button($r('app.string.sm4_ecb_encryption_decryption_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_asynchronous') + }) + Button($r('app.string.sm4_ecb_encryption_decryption_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_synchronous') + }) + Button($r('app.string.sm4_gcm_encryption_decryption_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_asynchronous') + }) + Button($r('app.string.sm4_gcm_encryption_decryption_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_synchronous') + }) + Button($r('app.string.sm4_gcm_seg_encryption_decryption_asynchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_asynchronous') + }) + Button($r('app.string.sm4_gcm_seg_encryption_decryption_synchronous')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_synchronous') + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_asynchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_asynchronous.ets new file mode 100644 index 000000000..20d8296d9 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_asynchronous.ets @@ -0,0 +1,103 @@ +/* + * 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. + */ + +// [Start async_symmetry_encrypt_decrypt_sm4_cbc] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genIvParamsSpec() { + let ivBlob = generateRandom(16); // 16 bytes + let ivParamsSpec: cryptoFramework.IvParamsSpec = { + algName: 'IvParamsSpec', + iv: ivBlob + }; + return ivParamsSpec; +} + +let iv = genIvParamsSpec(); + +// 加密消息 +async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('SM4_128|CBC|PKCS7'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, iv); + let encryptData = await cipher.doFinal(plainText); + return encryptData; +} + +// 解密消息 +async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('SM4_128|CBC|PKCS7'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, iv); + let decryptData = await decoder.doFinal(cipherText); + return decryptData; +} + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let symGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); + let symKey = await symGenerator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function main() { + try { + let keyData = new Uint8Array([7, 154, 52, 176, 4, 236, 150, 43, 237, 9, 145, 166, 141, 174, 224, 131]); + let symKey = await genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessagePromise(symKey, plainText); + let decryptText = await decryptMessagePromise(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } + } catch (error) { + console.error(`SM4 “${error}“, error code: ${error.code}`); + } +} +// [End async_symmetry_encrypt_decrypt_sm4_cbc] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance SM4 ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm4_cbc_asynchronous')) + .width('70%') + .onClick(async () => { + try { + await main(); + this.message = 'SM4_CBCSuccess'; + } catch { + this.message = 'SM4_CBCFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_synchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_synchronous.ets new file mode 100644 index 000000000..a59d5e8de --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_synchronous.ets @@ -0,0 +1,103 @@ +/* + * 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. + */ + +// [Start sync_symmetry_encrypt_decrypt_sm4_cbc] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genIvParamsSpec() { + let ivBlob = generateRandom(16); // 16 bytes + let ivParamsSpec: cryptoFramework.IvParamsSpec = { + algName: 'IvParamsSpec', + iv: ivBlob + }; + return ivParamsSpec; +} + +let iv = genIvParamsSpec(); + +// 加密消息 +function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('SM4_128|CBC|PKCS7'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, iv); + let encryptData = cipher.doFinalSync(plainText); + return encryptData; +} + +// 解密消息 +function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('SM4_128|CBC|PKCS7'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, iv); + let decryptData = decoder.doFinalSync(cipherText); + return decryptData; +} + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let symGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); + let symKey = symGenerator.convertKeySync(symKeyBlob); + console.info('convertKeySync success'); + return symKey; +} + +function main() { + try { + let keyData = new Uint8Array([7, 154, 52, 176, 4, 236, 150, 43, 237, 9, 145, 166, 141, 174, 224, 131]); + let symKey = genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessage(symKey, plainText); + let decryptText = decryptMessage(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } + } catch (error) { + console.error(`SM4 “${error}“, error code: ${error.code}`); + } +} +// [End sync_symmetry_encrypt_decrypt_sm4_cbc] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance SM4 ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm4_cbc_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'SM4_CBCSuccess'; + } catch { + this.message = 'SM4_CBCFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_asynchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_asynchronous.ets new file mode 100644 index 000000000..e250e992a --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_asynchronous.ets @@ -0,0 +1,82 @@ +/* + * 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. + */ + +// [Start async_symmetry_encrypt_decrypt_sm4] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 加密消息 +async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('SM4_128|ECB|PKCS7'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null); + let encryptData = await cipher.doFinal(plainText); + return encryptData; +} + +// 解密消息 +async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('SM4_128|ECB|PKCS7'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null); + let decryptData = await decoder.doFinal(cipherText); + return decryptData; +} + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let symGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); + let symKey = await symGenerator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function main() { + let keyData = new Uint8Array([7, 154, 52, 176, 4, 236, 150, 43, 237, 9, 145, 166, 141, 174, 224, 131]); + let symKey = await genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessagePromise(symKey, plainText); + let decryptText = await decryptMessagePromise(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End async_symmetry_encrypt_decrypt_sm4] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance SM4 ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm4_ecb_asynchronous')) + .width('70%') + .onClick(async () => { + try { + await main(); + this.message = 'SM4_ECBSuccess'; + } catch { + this.message = 'SM4_ECBFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_synchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_synchronous.ets new file mode 100644 index 000000000..615d9d654 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_synchronous.ets @@ -0,0 +1,82 @@ +/* + * 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. + */ + +// [Start sync_symmetry_encrypt_decrypt_sm4] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +// 加密消息 +function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('SM4_128|ECB|PKCS7'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, null); + let encryptData = cipher.doFinalSync(plainText); + return encryptData; +} + +// 解密消息 +function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('SM4_128|ECB|PKCS7'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, null); + let decryptData = decoder.doFinalSync(cipherText); + return decryptData; +} + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let symGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); + let symKey = symGenerator.convertKeySync(symKeyBlob); + console.info('convertKeySync success'); + return symKey; +} + +function main() { + let keyData = new Uint8Array([7, 154, 52, 176, 4, 236, 150, 43, 237, 9, 145, 166, 141, 174, 224, 131]); + let symKey = genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessage(symKey, plainText); + let decryptText = decryptMessage(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End sync_symmetry_encrypt_decrypt_sm4] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance SM4 ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm4_ecb_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'SM4_ECBSuccess'; + } catch { + this.message = 'SM4_ECBFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_asynchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_asynchronous.ets new file mode 100644 index 000000000..e5a4de1e0 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_asynchronous.ets @@ -0,0 +1,117 @@ +/* + * 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. + */ + +// [Start async_symmetry_encrypt_decrypt_sm4_gcm] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genGcmParamsSpec() { + let ivBlob = generateRandom(12); // 12 bytes + let arr = [1, 2, 3, 4, 5, 6, 7, 8]; // 8 bytes + let dataAad = new Uint8Array(arr); + let aadBlob: cryptoFramework.DataBlob = { data: dataAad }; + arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; // 16 bytes + let dataTag = new Uint8Array(arr); + let tagBlob: cryptoFramework.DataBlob = { + data: dataTag + }; + // GCM的authTag在加密时从doFinal结果中获取,在解密时填入init函数的params参数中 + let gcmParamsSpec: cryptoFramework.GcmParamsSpec = { + iv: ivBlob, + aad: aadBlob, + authTag: tagBlob, + algName: 'GcmParamsSpec' + }; + return gcmParamsSpec; +} + +let gcmParams = genGcmParamsSpec(); + +// 加密消息 +async function encryptMessagePromise(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('SM4_128|GCM|PKCS7'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams); + let encryptUpdate = await cipher.update(plainText); + // gcm模式加密doFinal时传入空,获得tag数据,并更新至gcmParams对象中。 + gcmParams.authTag = await cipher.doFinal(null); + return encryptUpdate; +} + +// 解密消息 +async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('SM4_128|GCM|PKCS7'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams); + let decryptUpdate = await decoder.update(cipherText); + // gcm模式解密doFinal时传入空,验证init时传入的tag数据,如果验证失败会抛出异常。 + let decryptData = await decoder.doFinal(null); + if (decryptData == null) { + console.info('GCM decrypt success, decryptData is null'); + } + return decryptUpdate; +} + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let sm4Generator = cryptoFramework.createSymKeyGenerator('SM4_128'); + let symKey = await sm4Generator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function main() { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = await genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessagePromise(symKey, plainText); + let decryptText = await decryptMessagePromise(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End async_symmetry_encrypt_decrypt_sm4_gcm] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance SM4 ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm4_gcm_asynchronous')) + .width('70%') + .onClick(async() => { + try { + await main(); + this.message = 'SM4_GCMSuccess'; + } catch { + this.message = 'SM4_GCMFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_synchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_synchronous.ets new file mode 100644 index 000000000..1ccef7bec --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_synchronous.ets @@ -0,0 +1,117 @@ +/* + * 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. + */ + +// [Start sync_symmetry_encrypt_decrypt_sm4_gcm] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genGcmParamsSpec() { + let ivBlob = generateRandom(12); // 12 bytes + let arr = [1, 2, 3, 4, 5, 6, 7, 8]; // 8 bytes + let dataAad = new Uint8Array(arr); + let aadBlob: cryptoFramework.DataBlob = { data: dataAad }; + arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; // 16 bytes + let dataTag = new Uint8Array(arr); + let tagBlob: cryptoFramework.DataBlob = { + data: dataTag + }; + // GCM的authTag在加密时从doFinal结果中获取,在解密时填入init函数的params参数中 + let gcmParamsSpec: cryptoFramework.GcmParamsSpec = { + iv: ivBlob, + aad: aadBlob, + authTag: tagBlob, + algName: 'GcmParamsSpec' + }; + return gcmParamsSpec; +} + +let gcmParams = genGcmParamsSpec(); + +// 加密消息 +function encryptMessage(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('SM4_128|GCM|PKCS7'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams); + let encryptUpdate = cipher.updateSync(plainText); + // gcm模式加密doFinal时传入空,获得tag数据,并更新至gcmParams对象中。 + gcmParams.authTag = cipher.doFinalSync(null); + return encryptUpdate; +} + +// 解密消息 +function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('SM4_128|GCM|PKCS7'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams); + let decryptUpdate = decoder.updateSync(cipherText); + // gcm模式解密doFinal时传入空,验证init时传入的tag数据,如果验证失败会抛出异常。 + let decryptData = decoder.doFinalSync(null); + if (decryptData == null) { + console.info('GCM decrypt success, decryptData is null'); + } + return decryptUpdate; +} + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let sm4Generator = cryptoFramework.createSymKeyGenerator('SM4_128'); + let symKey = sm4Generator.convertKeySync(symKeyBlob); + console.info('convertKeySync success'); + return symKey; +} + +function main() { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = genSymKeyByData(keyData); + let message = 'This is a test'; + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessage(symKey, plainText); + let decryptText = decryptMessage(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End sync_symmetry_encrypt_decrypt_sm4_gcm] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance SM4 ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm4_gcm_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'SM4_GCMSuccess'; + } catch { + this.message = 'SM4_GCMFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_asynchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_asynchronous.ets new file mode 100644 index 000000000..119757d2a --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_asynchronous.ets @@ -0,0 +1,141 @@ +/* + * 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. + */ + +// [Start async_symmetry_encrypt_decrypt_sm4_gcm_seg] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genGcmParamsSpec() { + let ivBlob = generateRandom(12); + let arr = [1, 2, 3, 4, 5, 6, 7, 8]; // 8 bytes + let dataAad = new Uint8Array(arr); + let aadBlob: cryptoFramework.DataBlob = { data: dataAad }; + arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; // 16 bytes + let dataTag = new Uint8Array(arr); + let tagBlob: cryptoFramework.DataBlob = { + data: dataTag + }; // The GCM authTag is obtained by doFinal() in encryption and passed in params of init() in decryption. + let gcmParamsSpec: cryptoFramework.GcmParamsSpec = { + iv: ivBlob, + aad: aadBlob, + authTag: tagBlob, + algName: 'GcmParamsSpec' + }; + return gcmParamsSpec; +} + +let gcmParams = genGcmParamsSpec(); + +// 分段加密消息 +async function encryptMessageUpdateBySegment(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('SM4_128|GCM|PKCS7'); + await cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + let cipherText = new Uint8Array(); + for (let i = 0; i < plainText.data.length; i += updateLength) { + let updateMessage = plainText.data.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + let updateOutput = await cipher.update(updateMessageBlob); + // 把update的结果拼接起来,得到密文(有些情况下还需拼接doFinal的结果,这取决于分组模式 + // 和填充模式,本例中GCM模式的doFinal结果只包含authTag而不含密文,所以不需要拼接) + let mergeText = new Uint8Array(cipherText.length + updateOutput.data.length); + mergeText.set(cipherText); + mergeText.set(updateOutput.data, cipherText.length); + cipherText = mergeText; + } + gcmParams.authTag = await cipher.doFinal(null); + let cipherBlob: cryptoFramework.DataBlob = { data: cipherText }; + return cipherBlob; +} + +// 分段解密消息 +async function decryptMessagePromise(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('SM4_128|GCM|PKCS7'); + await decoder.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + let decryptText = new Uint8Array(); + for (let i = 0; i < cipherText.data.length; i += updateLength) { + let updateMessage = cipherText.data.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + let updateOutput = await decoder.update(updateMessageBlob); + // 把update的结果拼接起来,得到明文 + let mergeText = new Uint8Array(decryptText.length + updateOutput.data.length); + mergeText.set(decryptText); + mergeText.set(updateOutput.data, decryptText.length); + decryptText = mergeText; + } + let decryptData = await decoder.doFinal(null); + if (decryptData == null) { + console.info('GCM decrypt success, decryptData is null'); + } + let decryptBlob: cryptoFramework.DataBlob = { data: decryptText }; + return decryptBlob; +} + +async function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let sm4Generator = cryptoFramework.createSymKeyGenerator('SM4_128'); + let symKey = await sm4Generator.convertKey(symKeyBlob); + console.info('convertKey success'); + return symKey; +} + +async function sm4() { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = await genSymKeyByData(keyData); + let message = 'aaaaa.....bbbbb.....ccccc.....ddddd.....eee'; // 假设信息总共43字节,根据utf-8解码后,也是43字节 + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = await encryptMessageUpdateBySegment(symKey, plainText); + let decryptText = await decryptMessagePromise(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End async_symmetry_encrypt_decrypt_sm4_gcm_seg] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance SM4 ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm4_gcm_segmentation_asynchronous')) + .width('70%') + .onClick(async () => { + try { + await sm4(); + this.message = 'SM4_GCMSegmentationSuccess'; + } catch { + this.message = 'SM4_GCMSegmentationFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_synchronous.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_synchronous.ets new file mode 100644 index 000000000..1b74d8557 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/ets/pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_synchronous.ets @@ -0,0 +1,141 @@ +/* + * 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. + */ + +// [Start sync_symmetry_encrypt_decrypt_sm4_gcm_seg] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function generateRandom(len: number) { + let rand = cryptoFramework.createRandom(); + let generateRandSync = rand.generateRandomSync(len); + return generateRandSync; +} + +function genGcmParamsSpec() { + let ivBlob = generateRandom(12); // 12 bytes + let arr = [1, 2, 3, 4, 5, 6, 7, 8]; // 8 bytes + let dataAad = new Uint8Array(arr); + let aadBlob: cryptoFramework.DataBlob = { data: dataAad }; + arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; // 16 bytes + let dataTag = new Uint8Array(arr); + let tagBlob: cryptoFramework.DataBlob = { + data: dataTag + }; // The GCM authTag is obtained by doFinal() in encryption and passed in params of init() in decryption. + let gcmParamsSpec: cryptoFramework.GcmParamsSpec = { + iv: ivBlob, + aad: aadBlob, + authTag: tagBlob, + algName: 'GcmParamsSpec' + }; + return gcmParamsSpec; +} + +let gcmParams = genGcmParamsSpec(); + +// 分段加密消息 +function encryptMessageUpdateBySegment(symKey: cryptoFramework.SymKey, plainText: cryptoFramework.DataBlob) { + let cipher = cryptoFramework.createCipher('SM4_128|GCM|PKCS7'); + cipher.initSync(cryptoFramework.CryptoMode.ENCRYPT_MODE, symKey, gcmParams); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + let cipherText = new Uint8Array(); + for (let i = 0; i < plainText.data.length; i += updateLength) { + let updateMessage = plainText.data.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + let updateOutput = cipher.updateSync(updateMessageBlob); + // 把update的结果拼接起来,得到密文(有些情况下还需拼接doFinal的结果,这取决于分组模式 + // 和填充模式,本例中GCM模式的doFinal结果只包含authTag而不含密文,所以不需要拼接) + let mergeText = new Uint8Array(cipherText.length + updateOutput.data.length); + mergeText.set(cipherText); + mergeText.set(updateOutput.data, cipherText.length); + cipherText = mergeText; + } + gcmParams.authTag = cipher.doFinalSync(null); + let cipherBlob: cryptoFramework.DataBlob = { data: cipherText }; + return cipherBlob; +} + +// 分段解密消息 +function decryptMessage(symKey: cryptoFramework.SymKey, cipherText: cryptoFramework.DataBlob) { + let decoder = cryptoFramework.createCipher('SM4_128|GCM|PKCS7'); + decoder.initSync(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, gcmParams); + let updateLength = 20; // 假设以20字节为单位进行分段update,实际并无要求 + let decryptText = new Uint8Array(); + for (let i = 0; i < cipherText.data.length; i += updateLength) { + let updateMessage = cipherText.data.subarray(i, i + updateLength); + let updateMessageBlob: cryptoFramework.DataBlob = { data: updateMessage }; + // 分段update + let updateOutput = decoder.updateSync(updateMessageBlob); + // 把update的结果拼接起来,得到明文 + let mergeText = new Uint8Array(decryptText.length + updateOutput.data.length); + mergeText.set(decryptText); + mergeText.set(updateOutput.data, decryptText.length); + decryptText = mergeText; + } + let decryptData = decoder.doFinalSync(null); + if (decryptData == null) { + console.info('GCM decrypt success, decryptData is null'); + } + let decryptBlob: cryptoFramework.DataBlob = { data: decryptText }; + return decryptBlob; +} + +function genSymKeyByData(symKeyData: Uint8Array) { + let symKeyBlob: cryptoFramework.DataBlob = { data: symKeyData }; + let sm4Generator = cryptoFramework.createSymKeyGenerator('SM4_128'); + let symKey = sm4Generator.convertKeySync(symKeyBlob); + console.info('convertKeySync success'); + return symKey; +} + +function main() { + let keyData = new Uint8Array([83, 217, 231, 76, 28, 113, 23, 219, 250, 71, 209, 210, 205, 97, 32, 159]); + let symKey = genSymKeyByData(keyData); + let message = 'aaaaa.....bbbbb.....ccccc.....ddddd.....eee'; // 假设信息总共43字节,根据utf-8解码后,也是43字节 + let plainText: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from(message, 'utf-8').buffer) }; + let encryptText = encryptMessageUpdateBySegment(symKey, plainText); + let decryptText = decryptMessage(symKey, encryptText); + if (plainText.data.toString() === decryptText.data.toString()) { + console.info('decrypt ok'); + console.info('decrypt plainText: ' + buffer.from(decryptText.data).toString('utf-8')); + } else { + console.error('decrypt failed'); + } +} +// [End sync_symmetry_encrypt_decrypt_sm4_gcm_seg] + +@Entry +@Component +struct Index { + @State message: string = 'Encryption Decryption Guidance SM4 ArkTs'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm4_gcm_segmentation_synchronous')) + .width('70%') + .onClick(() => { + try { + main(); + this.message = 'SM4_GCMSegmentationSuccess'; + } catch { + this.message = 'SM4_GCMSegmentationFail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/module.json5 new file mode 100644 index 000000000..4144486d1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/module.json5 @@ -0,0 +1,66 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "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" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/element/color.json new file mode 100644 index 000000000..3c712962d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/element/string.json new file mode 100644 index 000000000..4d2a73525 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/element/string.json @@ -0,0 +1,80 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "EncryptionDecryptionGuidanceSM4ArkTs" + }, + { + "name": "sm4_cbc_encryption_decryption_asynchronous", + "value": "sm4_cbc_encryption_decryption_asynchronous" + }, + { + "name": "sm4_cbc_encryption_decryption_synchronous", + "value": "sm4_cbc_encryption_decryption_synchronous" + }, + { + "name": "sm4_ecb_encryption_decryption_asynchronous", + "value": "sm4_ecb_encryption_decryption_asynchronous" + }, + { + "name": "sm4_ecb_encryption_decryption_synchronous", + "value": "sm4_ecb_encryption_decryption_synchronous" + }, + { + "name": "sm4_gcm_encryption_decryption_asynchronous", + "value": "sm4_gcm_encryption_decryption_asynchronous" + }, + { + "name": "sm4_gcm_encryption_decryption_synchronous", + "value": "sm4_gcm_encryption_decryption_synchronous" + }, + { + "name": "sm4_gcm_seg_encryption_decryption_asynchronous", + "value": "sm4_gcm_seg_encryption_decryption_asynchronous" + }, + { + "name": "call_sm4_cbc_asynchronous", + "value": "Call SM4_CBC Asynchronous" + }, + { + "name": "call_sm4_cbc_synchronous", + "value": "Call SM4_CBC Synchronous" + }, + { + "name": "call_sm4_ecb_asynchronous", + "value": "Call SM4_ECB Asynchronous" + }, + { + "name": "call_sm4_ecb_synchronous", + "value": "Call SM4_ECB Synchronous" + }, + { + "name": "call_sm4_gcm_synchronous", + "value": "Call SM4_GCM Synchronous" + }, + { + "name": "call_sm4_gcm_asynchronous", + "value": "Call SM4_GCM Asynchronous" + }, + { + "name": "call_sm4_gcm_segmentation_asynchronous", + "value": "Call SM4_GCM Segmentation Asynchronous" + }, + { + "name": "call_sm4_gcm_segmentation_synchronous", + "value": "Call SM4_GCM Segmentation Synchronous" + }, + { + "name": "sm4_gcm_seg_encryption_decryption_synchronous", + "value": "sm4_gcm_seg_encryption_decryption_synchronous" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..f939c9fa8cc8914832e602198745f592a0dfa34d GIT binary patch literal 57364 zcmYIuc|6qL_rIk#Su&MMQlYU)cz{|$Qc0x~A^BEf( z`{n=HaSk>%wsfNM*uUkN^8dI{qxxW z*@b_`#>VlLWSG9 z0>QdPQ-&i_RCVdp2s$-u%S362^SHV0`EO6;@n(xK));G>#qwhPWrDXGk@OBMV}H!J za!48&`xhWJKj{_+f3ir<>Jg6Ax<&Xgn;)U7UJyAw{(u?zlf{oLsJTS-_o1?+lSg-j z8fcZj1*Ad(!X>WuuxM!H5t@V3*8vLL6`QnC!q!BwQjI{yk*;~@|3;B)`p$WYcDmnZ zt`R zr=oS6o-D$WZsYKh1PiOdhhX&YWGOzpc<6ITKzr^zi-#>z){t;yz3tu_a!>)(tTU9d zd}COuy~Tb}UIRNX@aVGJqEKUa)1#E-u}pl!sY)z4cu+Hu9==`6=0Ob#x-%q}t@jBp zmoiZDcfF1WL{PB0ZO**8yZ+%;LF6K*JDUoHrJkl0Wzak+Y%E( znUmuA^p@Jv6{%Y;MsiZ4O?#ID2b2ssEq6_KGL z8T%zdA3YhMnkBu19bNsa_$$_1^16jadx`0ZzPx`M%T>qZpYyNYOeDdmqLTNWpR5T% zOlRrW_xNCD+*3_WSxvt4P-@qQ9g_$aedDk-hcV~t>Oxw;UaAk1V?9m5<2k4%VrM$- z?{KH{)m_U~yJcBbX+vqVfq&4)Vf+FvAHd|s{V34=f#uJM!Tp?b32THmfzNn1unwY& zPNtaE{ZZ=OkZFh*xW2FT&fDF?64Q%l>dwdZ#Bg;^v;dAbU*QLEQG@_|ucNXFyx~H( z#h?kJKeI3jD^U~`e`*^zcm?PlIWj|tL_a8NC?HVl*gX%;5PW5Y%ZZ*G=jPn5#o+Sh zhnE>D@Wb!f*O>cZ0}ZT=HlEdoWVWk}5H1S;$vxe#Rv~;l5rJ=w--wPl621jCW}B|gxECKzT9 z3FKlD{=OfN5$J3?Ag0g4F5t8_D(RvO8W!*~?#q{Dhx(Sj=)^9ZlE|LyI?p1NXMWr| zGGbzFN^3)5?P^vfnD7XZo*8yf&O&>7XULUUvhJT@rHcF>PmjodH~u4RSmX4TH?v`IKg2cy7 z(T@e4&pPRHRczikEvwvO?jbblSVp z2qpyT+LHUFhHwcunP(^h)G#uA95vF`Gd&1k%F@wuCk3DnjNjw;b}*;dY{F5{7tNsg zLf4y|)RTV`PjQ^!NoWB3YA@S@Cw zUAr?mUcn7g)n!3J`D7*H`y{%TuT$wNY;))rP(y@kdFdPH#h|rjcW2#oRybxTchXlQ zwMW{bVcqRRc_2r^tI)Zav_+qLwdd|Bw=*pM!|pflbT%K&Eof^{6+|k{2_;HcrWd3? z#z;>@Y3dp#B^R5c9RhH8lT5MRr*;>xd<%C3sV2Y}>{On@a*oump`g#H<6V&DKeZ-?Zic$S$>ulEiZvJG8kHMeSzVE(R|E-<}cEG^n2E*Cp z-25-DQv_Mf+&WhT3r?23Phid$q`Z3HE($RgC{EJA0Yc1SP6(a(oZ4RU2L1~H6k0Q< zHY1Mj{)b(ll3Wr=HakbiEk13zYKN&f#9*}tMZiQ7h@Us+N(Jk`aWQHf)r!ObZAT>_STJuzjuO{qHMlTjN9^hPZ8sZBMl zl&MX}xk{d5VUEInRK9r^Tnx#HE2;hFoa7?NDufAxZV6Mj9B^NaAt4;oStAtWfVg8< zjQAfLPj#u>Xp*sALAi;M(f1>la|_-k(E*-1Sa_Vdt$KsCNAwAbm8CmvpDbwL$`Cx8 zkBC0&3#@q@7E3LVtGQcrGS=s-uh6FHuC)WTtU_@t5c_T~`Wv+F0Jd$a9s(?ucd&l{ zWThjQ*u4YqU6Wq{+^0sC%S;vXx~qO|+s%Am1m-N}zkd84>GT;5u}a1*p9&!g%3wk2 zl=rj+H9g>!z4_zdU1iItL}Zox?lwK^ykQ+_#Ym~p>s8CgcLQYV4wezL^K-_HzM$r! z1m$U&G13HqDckgHschNcoe73o=)$P$j46Y)SnaZK(U|F7d#{AGb%>@b+jX#5*Rf5x zq}@ejPTyyn&&@n|dDGl-o-=XF%6dndW+}@7JDd?6b}Mt-SX_GV^3{!3Yz5a~X@$Fw zyDIkaWq*rtn{8knumG6=yF(6lzQnq)&M@%8RzdC%{%-0Ey{v&0pp-aIPP$bTrF|=~!MvLftx2pd=0-86i#@A;;(b^r-TzBJn~W4d42|-V*)} zt}h95!TwDQ%xWD9TFS{BwGO@d9P>kia=+LQ@r>0>5VvEV8(&tEuw%+YP*Qm6KzZs9 z#qL6SPwl9DtPZ{0`)Vph`^ryNV|=I7r2Vf@LrX3<=$f6zv1^z*!<6j{f$|6Jw=%s2 zb)|d{?()1m_Xoab$B5r9#&taTI^E@0yTQ$UB1_f0nc<oQhFOi;b@!o=y6w&Tsrw|K5XXEJEA>@Eb?8hi( zlT-*bXZd6g*C+W9V6B5iF$2f(_-ek(ko^JW%$@}`#GJVV0S8A~FwzM(JdY)c1B&ls(qJ=bvy&S10cqD8@1Clbooq|3kmbD_she z@O#tu^ibgYfM#HD%WIF%%uf7+)sc&Dejs@WRQE+Q1jXlN2z>9dB;X9e>Y3a-&-A;T z>||D+o$j^$E>F`4y02DTELRMYH*biv(5+ed(cQq&82Gu z2~UNnOcNc&MwT3lD@S}nPJMsvOT%0L{`dN}DU&^Z#6?2^aE!5ulUV_Zct}2~K6R!_ z4ReuaX$@AP?M!XMpi&ZJwsY2up5F-xe0{ym`9#@pr%63v->d&@UoFthcC1`k$L=ze zYX1{xl49Q=z953h>NzyMc3UuH96t7)-k|lRw-P=T%Q`;dC7@r`uCOq8Eqi7gKC)~7 zb(*Q>H|T2(e>5DVf9nswM~C%V2G2 z#B|VOitZm{FlV>EydvsFF|Ue~ium0%0KOaFiMOLk(X}jHq@dI@*AM2G6XzCU zSpFR?#U4MPz~VZR>RA@a!CZu45#f<)^f#kJ+ULtRLJKzSj=cf+NxQ}Kw)Yme6wJz; zu3W=Jz<}rEm$g7sNy>yr-Z|OiI>qQ4m37~);`_~Xgr~N4wOAssk(HTh5er1XtFm+! zb`5FT&FoKA{ADaUP!Y#o^sGPb?mT2wBY9ZfQ}ujLk`C_dyTvT&)34sj!RXJcZ%lCzF?kE~i-xCSGh{ zy%iUR0+S_JP(#%W9!Npk=RL(8tFB7(up1ms-Q#8 z$-{dva97!EQB<5#@0KgW&2S|ddKN*<(?}37-=O@1bF668sG)3(D61=Ech&sJ;j|An zqu1a;`}bcMj;#tF3l~&Ue9ES7GRw~kIPKK&q&^No_3M#yjp?ygI;To&wcXbe%ju*z zpMI!gbi8@{AJVkgXR+py{dMSfko}H`^q^elZQ-5<2bG-K8tYq8Q@*4t)`Blvz!#v> zE;3kk_e^|Kew4?}eU;3n)q48yWgAm)d+F(;W(>jPB_glQLiH|IE=EDVFI*j_FBebS0vXyh5@x9LS?RNi7vXf?RckfXjvy^Pifki$9G zzwp&k7S+aNOI8%DUON~#xxv+a5rJDE+^6;@RcjnwKZ|%#%Ukq~@&vL#Pts;`f?jwYL)Y zDOROB^T8hlFfA@(=$bFYKWy{F^5$#{h*A1FG5GZZ1?>Y+!}UULap(oEekfHZCJkpC zppRS@+Uvrs>_Df!YT#HWpuaEwRq)V49)TgZ7Jf{A6@tpv&>tG)c9F&eZWo)(tDPDB z4Fkl6@ov*S4!gboeokhZ>My7@q%!Z93-zy>Y(_9axnH2W2Ie&#X2Z->o1A6ZoV(OgY z@PpdL`E%U}QN-vzdLCdkVX)Vp-z|CGg)^e06LvMfbj%1)ZdXNB>r>{Jk&ApwTkkLr z-2C5e31{3c{*xsm?)EItQ%pSW(%723B}AHgke#M{7KJW6TT*>9^+`FIe4;VHRwSF$ z9rBta7_>vwCuV;vFY=|NZ2KlX$A`EUk*phH=Pd~I8Kkr|v!j3sBAD^fPD!FoPpnHf zqP&jc&^s{jm0M&oBNXjUol2${7|G^u7UtOd2kxA0b?japS#xlwo_TaY+jh-`+$sfO zFLgfqb~kaemX{ErUn7}?_tb>g?G@UyT99HoY^;BG(5|gh>F3J!9J* zvrz6TP+;XdE$<41%Vony^Y}i*aCz@+4v^38p)5?Nhw`m%Cbg5Lpz%VOxaBnlA9P;N z9D=#{(>`$N_!?&CKf9eJGzIc>dhWes8XtpX`{gOhP;HMklZ8~@Yu~YT1bZZ{VwrAffDNiZ6Mh5vEzpq z=5A;0ff@>1MG@vbwRU!?7ZFD-SYng>JN(=>uwrkrl@4u6M^n6jl1shsk;DM`t#|F? z(H9W(@&~b(mmUR)30H=vAZdIrX%9iR7rMruZ_I4$Eq7YnBI4Z8T zj5;RTUu8?(ZsW>30%Hk#$^zfAtgZ&y!|p@5%e_4oe7)3{Y6c^x>zv=o_XPiF*wI1y zNe5L3p=L;8_D7-+5I+LfNgDYrOIUD_Iu_VJQD^=4v=Gd z_u%h$8{Lobyu6%VkeZI%T_vssgc#J4yD+&6pVkdLYl@3@NdcQbwl!J%4{RC80oF1z z`ksIXyrZT=Apq3kOR#m795+y}-8NizKBNESZCmBS#jqG`n4kCydp-4DZ^BF-zWD2# z1@F?p*^9m)EPrkd^E&cimk<1mN+iwSCVTHpqz^#`_Dj;-5xURqxK*!kp5asE##*=< zc{bFC-`m;q4VL3=| zKN6@)%XIu=yS*-K-9Bw`jN+-lWBttd77x>|g)~$UgPB_qH0h&bm}j3#sdLfV&xcR^ zQFk=d3;U8~YLqm@^61C zmaLbHw=dJ0oLP?>eyJ&=wgtZm!2mS9V!i~62x+n`%jyesf0bKruxRDH-)c2uF;&qT z4Z0drBbHg-G#ueH1vVaEJFTw$U))8mlUjFz?!PDqNpcIqZ%B6$Ju$CzrK@_na@?na5LpJODS}`)`8j7i#>C z0RNEb>nnQ8v$qXrgh)-(=VVRFwj4 zZKH}5T4rlZ$PiI2z3_*{`av5A0jPJY!Y*RQ?XbKPZmNdwp6ufAH4m~1%r{gYeOJBR zai+gl7I{Z35P0Q7EoGmkkLGHe5rR^{bdxWyMiC1~&kI@I-bYJrdGv{=O7!p&kKxN3 ztOoyzWj_asX!zA>`fa~&>#$n@3{c@VVcl3(1m5=dCI-~1uR+4s;@87ozKCU|Z(EhE z7~Csbr}e|&-zPK~*W}WcKqB+rv-rNRzvqfY299AvP zA5u^Rs->xN6b@MzP_f(M+}|~RxUHs#zO%D772V@B$F;5<%Jx|0#Oh_?#%yrHfV>}I z!Lfe59_VCjJ!pEQOWyUr;CdyL z-RzERMQjU_j%}N!Av?++44uVMc#r_KCTZxxSZL>4`xbm)#)*?4I#nFDOZLv10s^{6 zAyo6zfA)w8n^jk|KBb4J;|Gbx9)grFflY-Nyl_v8_@}gizDNn(Y2l6TqM&aN(+9Qg zTBo#J4N$h%f!;K&2NqBlT~J6aqHGy6HI`Xn*)UV$w2>iLk~P=l)VTdah9Ab`z%}dg zxIvG$xPG=H0NRw|6_-~Bzh+BPv9&C;z)58?`7t~$HupdHcF!F5dirrGrn3d}wAHr! z^@&!aoW@3sENjl#i@LzRYOZ4b#v|Jk_Mo$-VYlgbE3LQVKniS1mH)uO`90X{bc~{1 z*%Wm4$E_2-W__`4`mDu;Ld(wv8e147=mMu!AKSC=mw*4n^8S>~fm9mJgf4~8t(bb> z^_3WSK>aAZ6lK3OZ#_7g@)?z1#pZ zoR2>rm%_enbG!+Y34#Jmal)V9@-s8li+_Le^~z8cxHeF5vR%p~{93TJv%YmeTB|@^ zc=}q4Gofbju_Z#%Iv9|44|pawNvh^mFGBA_KZ5C^rx-l~Ytqf4;%SxezE8%O)aJh& z>2it7b`epB=P&=s^y`mJMjMq&9Jvpdhn}6sFHk)q%d zE_RV6%-}?H)w7yAW9TA)&7XbMyu=N}tRA-JTl2iG6u8;@?;!BW;ykyof{i+alo zJu1v~ITow6y^)5crWdi)&;yNs0d)3*vN+aSszJ%`1`(%9X-Hi}3gH#iRg@{Svm?cP zM}T*)U{A8FTQ7b@oc$7vr_EeTIj6N%Cr}VI5VcfZk+@1UFc>zpJkm3S%cb<~=~`BV ztbyjzOPJuDkTJJ!hL^nLk}*=2EXd?->%+3NWrq&5a$%1G{r2~cLQT2W>8!pd$9G;K ziQIDUErsVk$XQPRm)pDFYVuLFlx&eiFlnoixT|jvAoB)ryM_}euaYFXrdKLqi|4AL zG`rnvWi4Qa>Wvo=;Y+t@ecMjl{#37K;?VkYdoSbT(2m}8!k~RT{yv0l8cPp{jtiXr z$7KAJAvM_g4ak}0Yo*q!sO%PN_CK)Pv>lC7xoB~vG1hs?Wv>^kpOBU0WV@$|oL!cE z1FV3%^4Pjr5Fqc)|Sv+upxx8BCM z9*cYQYi3jY(^pUL8`I|3rHf+5>sq98e!hkPsfNMQ1@y7Tnf4{F2p zx9AO&@zYO;WpCQUf4G@!d<{t43@&RHh2Ukg^D-8_;De`dc{hz?yPS_7BzU!x^P-tj zBWt_uk{g94M1uo_&0l?m1qh!Q>=dKy5cx zRa7mv(}`xYKJOm)h3s8goQ*XK1OT<#&Ozf35uTB^VD8m)Z6Bnlal5r-bkso}J^TcM zo)ZSc#2@`h0Si}lrnCFt67JFa*e&}2avKCL|IIk<$R2*5sILkv4P( zesTX_tP#NqXN#>Q{4oe!N=G{SZ_I#~%^kq5ilGc=Q63_5uRt!D^j$k=&$`Ha&bGlAjZ2&hWa=M};Cw|5onME2e;8le z)-hK+mgNbGw-4puLN6g_q5p6T?0XM^dMo810rSBSw7Rrl(jt2JNVBwhB0o3``lZ1y zBr`Dy8LdVilxv`X5b0N8#{#(y<2vQrLj;qv`XA#RZ+@Q~*aYa^UY~;#F>6BL>75+E zeH2(L#HhLeI=Mz1#%^96zY$Se;@N)biYOvM6H1p6-4LcvA=&GP()#?u=_WXgAoZl* z+bR{6BA52?12Rex)v?(LMRsKvf9{KzP<^4&NISV{2!a;wEhr&E)EloHqSR9%ezb)? zl9X;qQSTg@es%UevGs9-KQk6RqJ;Ui(v@S0=JpkXQVYgXlRKQcfFLT2A%*#c?7(b} zjki==Q^Y#Qf}ZVpFtF6<4SbGKkkU>I6wY*Ps*EAzemS5Z0r!-oD>~r!<<+c~fHK+{ z`u4nWcW&4!()0%2>r>@zr$F6$;5*IAuq5bc>cn-IEZ+B|hkO&NPeBi&47YiU-<$w0 zq-j9aGH~K;Y%0{D&e90RZ(J_@o*`(e0TgqWM zz>V1_2|7MMg_6zbeK`A2oW6>`dUuDIll*?4hKaK{^>2t!B*N9o7_!iC51?A=hss#S zTOD48mGM}}JkMLeB>f0zNw|zPj8Efyx1Qh?QyT7Bp*PsC1%+$kgboSqDR=rTEs%8X z-t2|68n3XC`A-sBYO9tXuQqE7{}pE3mRASQTvScN7(%JH0{M|k4t%rE7xh`qUf4A- zgEE3f#zcuMyMYyiu;w=#PFC-_W0rb;u#{l@E}K0uMy~Ec1MBz-KglT}I_AG%m9nb!XAkpoW-`_85Umy)5g0j(3(>`;o1;w;CKp zLKdGc@@LrE*Y6B#H>jMeTcD6nZx;FZw zZ?8nd;T;sv#~t>9Stu`V2=$pLBHrDq3VNw9{KZU-50LlNLK@?o*hLF?1Kjl3op`;u z=nFLXc(CuUKp%gcxwwBm08`iDki>51cyobB9Eypc5@0Uv%$x+m$P}vtzJ@yXv2Y(6 z%G|Dfw#*GyPhoZ)9Obc;u$h*k0~W zv)EW8ChYvHNP~Ws5(MQk4JSGnG!l*4I-odrw$8E;u9uTN)1sDTSK-9%H|jqRi1XpO z_RLbdR5?V7FZiM9a@_RLzrIa?o8u(&ct}&dJFEmRO#py=1J(LW)$S@B$xLi6T)SOw|;fa7Myzv z?MOZ*b$o!rCg?J9&v6SsP#m&goHWvlC%0`IUKT~X&=s1cU$O`0Ea`_f|aU@(<=bXW{`6+7W#cu@H9t zagx-Usc&&vez&!Mjqpdk+Ol(}Uo_B;A&JhUaOe-iG9|*Z<)SYRZ;!m{$5X=V;9Cl+ zs(#H}WR`823f+9`wmRKF;(;wyt*?b3@Y`H^;&@1GipUF_{Gb_RzIV!3$qMq++{iyr8Th+msVi*eA69cY1K|TmaXNA-rCXT%k z%$21aDiQY_-+BI`52BI$rv}FI)tg7-CaaD7_O`l9ngVYH9#Xu44ly2flHy-xuzEyCWC^6c-^K*QrZW zNG1PL`B#xfh_CD57q**Q+=Ty9EEolHUwT`)Z`SWJPvsxa-f8_iHO;AQOj^^?v$Pd6 zy~3pjahT&?UwB@2zW1)s8+UfK$SFAL~tHHx3whuvPyW4mh3w z`_Q5~nHOsoDT0sx@+N~J<-Y&TvqV4MCkgXgo^ntecjdoSopR%@?wkEfAuHDOIVHQe z|K0}d$IAWT3jC{=QJCD$*L3=%k#f)T)tT7R=nTHqn)i5$Q)sm)53ZV1w&{swK_X#n zpD3;2Eb$r)$CDg__L8tv=0-5U5hB))B~SI2(6`QM95phAkktAVs0hU305vOGT{|^t zH`?>)3!24y5TBnjRfAJG|J9jjj_JYwB?gujfD3QwPf@~K(A2Z4KynC|m! zMt!}`yx4=~u?@-#ab5-T?In;dGAUlGajcN(yFF%ypy(av6(B6-=d(A}}k7wcgUJ%c_TA&p~<@ZA~EU-mvx5S_ykM?O8{R|mH|RE75BR5QQ#CTpy{;f{(N zFpFjUOJ}EEwov(%eX6wm&~H5dD|PO&*VQvG&6Br6eo1I>i7L)sk`T?{8}`lQfCB2R z@nDF(51Rl?^;uv9K%Wz-qpmyIoZjoO+tGhY)P>lU7U1Rpv;b{^)mu_I7=1e%POI7M zneWYe`!E(sG!D4Pm@9XD2!jhItDw15w=Vl)ioN}tjFK(3~fxy=!h!`6@!cQuCP6#aH;{{dyV2@O1#ZX{Zl4pLmD z7*{Ip)`V*gV-QVaE+>|4R`><5Z1*;n%pfkb3AiZ1s39)5f5khONJ{XZ5dEj{AwE^i zj6G1{WVlyMNlC3!_Nyk^Z0DjKo$ha)xbx}7UO*rnNj8he_fyO?v!so#$d4^uhxAXf zZNG(a)^5wM7^{-xB|`JITdre*!q^0$>^GMLKm@oauH?5G^;l>0Hp)xxzomAmYTE02 z+c%CPd*0$Be%v~(u%mMywt>EgIlKPOZH{Q%Y5c6=;F0usNLUPph9Xez1H1>s1YOPG zz|s4D9}W5qUuupaM_2#&;|@Jl=mK~Bc0i~OYb643=Gzqz>i%czm6IJ}e-nj~`8ZFe zGWf#c?5=VP0hlqMCIlRJj0p>6ob8O5e(*AYuP~QI>C$d^Yi`)_a|r1LwH(~NZ9P?Y ze?ts^N2upq=Br??YX8%HZ%xopU$9Z$(sjX zPFNIynnhW{IRi^L#G9#+Ew!gHJ%T1dibisJk2~6dM4r$&WR1@Yh3+PZbrp7G519Z>UKXw(mZMT+M-ozzkggshV_x`b zthj%~?f*E&m2-P{17aTUsk&fyuduoa3w}G`Ii-fByRE*XlORaY&Ax;2q^Y}9DeUiq zyMK?>G}eX;GkTjbS%GZr z5T&~;Y#yW|>Ep#W|B^P_r=X1$4uFNPGyw?zjr2lT?F6>ZQaaY;=%~?w4R^35Z=yWu z?(pW}`Hbg{7^L5u3abb48R>Wz-8&e~ld& zG34mkg*Nsz8LkANRe$e1~y0OAYcFkLVXfFw#0X3 z=EB)RkCjS-zhk?;_Eww$ZWCeYf2AIt@_v0+O&5H%+nUcKQQZ*-D#Mj9~nh zx&c!=`cApy)!}O~mTV6{@dbum`*7{`e8wKXQ$qf(L_&%pEl%&9Hz4Ua`%w=5(|{Fe zG=KtAxRHvVR%isJiC+qS)RMDX`xiqORyFg!x&NkABWs5}rYfi3W6r|&5P*I>{#$0n zSspPdl-FAPCWDVqU+`hp5SJ)}U4;QxQ*A|gM$`7-D_HnBBw1Px+%y8Fr*ZBkK&P(5 zLO)g}sM)3#vqJr|zOLiUYMzC)Ip0^+BMHE(YMU_d9|WolPeKCgmx*JYTE6;S>Wa~2 z4x7~9yMFQiL85QHvJtCUi;sWX->6#j?bP;4-B$$B=t*-7v~dwa7d_l5=?cxUgm6Cd zaZr_|B^X5;{k6{%BEZY5G{tgIXaw~PMvhi$_PDnHbyno3v;_gj5-=Qm12)lz+O@kglm5{q;M_RZxMCq-* znMrLfk)rYkS^lo@-6`Sd+^FUeRw9NYH^+}naYE(H+Zh38KI`SA9vUIYM`w7n(({Fc z<0<5oW06nE*}@UB$5AV7a^dI2srSJRcWrClmn7EQdBmJ6?_NrBl@wo_%pe-;K3ph= zN1j@y%^Bw-|7I#-OsQL<1zRV2i1N8h%Jz zJwR0GxN$z5cL7T2`h@=Nn-d!(GsG9!?+6zh=pQ$E{l5S3TiBHQ1&Bvy(*8{} z3j>EOJw+p*2|#VfcRh@u)N+@NMx-@QrQhRg>Tr5cY}aHl3CA*moGLkK0}rdRVR=E^ z{#;gyR7l*RccCrEo*H}%3X|@5YPQ+FM>u|=k#sp-M{J+EGRGl7LH4Z8UIUZqJ%O1S$-a-TXZC__K^ zV}HQ($I)a#fHDGwtEVN4+}*Rszq5|ewZGZEuA5Iw2OpA6%g^thr!`g2lSe?v{V!Zs zZR|Oezz_e)(WIs7nejBn3Q;m~{el(T15QaA3slu+pDiHa->pWfN1C6rVtf%}cuYmO zgKLKj2iNqdxC5nzUkN5bWkY7QyW{~Jm`(yqq=456x~COUo&to>DhmwrE0T1u8eLBX zmGKaO;crc6pm6&VjM@?bZCAXTbba*pRUvkbglVZYwEkF8YfO`T(Y8Hj5McaI z|C{H>yx3qKlRMuy-lc?Sc1!2)CVr8jr{HCfqbxH-_?m>w0h)fl`U3oh{a{=<4u=GG zzB1dSG{rJNtgG}nPU<2q1UPrW{mUkc8)_`L7OAnol7dZB_a(SX@-|yK8Wwm(0F1NEm_aN1wVsURw>% zPcJ-K`1h9E5@B%#7Tn`q0}2)m8v1N;72R}2#~JeoV=z!u6nMx5Hh%7WcQf@>B}s}j zpX2a$CtQcsC3W?=6QyG8m#bS^7MwKolNJR0blaxwZnvS?S;Zd`$Td4sdlY4B=DpVj z;GB--4WcwwL>bZgwia+-FoH)nTd?9m$)`kWfURntsPevI9OkDUq}At_Fhr2*m>J<7 z|K^#22*1UDq{{(|XIx*ulqtAAdQ3OrRygED^IBKe*@i}bZ9_@AZve0qu;T?J2LZ}j zw%cP}y=TD%H^Z>GUW2*063o&E!US9==;FnvZpXFNHRbelmmD_~T)}7{w z&e;xBEsak%$=pypJ3t9=dtnbS!6w40@X`hEdjEiR%*$gfB`8X5t54B?{Y@k+{O-C( zyWn|kD&H^1e6{Z}+mjH!-{_d1n-62-&sj0eAIe`j`?O4m+Khn*F7;(ko`grc}wJs-Gcu{X=-q9>JtlE}duQ+wL-kpryH@ zy?9QcUQwlU%a{$3@vO{6uEg-;vQ6$i3UQK;nO(8qR*T1<;wvvr-5aev6Kzq@WY?yI z8CkJ-_v2o5#Cy<>1tkp7W+umyd18ce*OX=Fs(i}ooB^lb_(Z+B(#0c+peWSQ7vamb z`z_V8WZ6ITb0VsHVCX3uI!$aMYq+2H_VJv|H+xOae}8%g0Ho5T!|3N(fPIQlqqpY} zehINqo%!U~bwZHmWWWQHbG6yOu;gWGMqLHRHz7_bwPG8clq4AvuJY+yO|fZb!!O?8 zu}-gsTJ7>_YGOwb9ZP{7Y~E_-54t0uZ3t;;kkys%#n||9@a5P2V=teS?-R*n9l4LU zX`b4bjK#bVZd&U8y01tpmu%od$DMxAMMv9l&MoL=#mqz@UrVGR_l0_DR1(?*60e1Gde-2*c+IsqkdsUBQplCu zbAh}kVEU~E+wWc#ljwacB1;-}=6;qO#+T9U6+R*7gTqwax52TW8BT?9baXZbe&3!{KI_6)y4?e%W{LkWI2jCl?{Trz8L**uH#O^Q>E0F; zvZVDQPmj+y3P_#pP5&8F;btP7L{R3-N@^b&z}P6C*IselB-bHG;@9&O))tmx7<0R@ zq~8V%kqZ)eZcoE~O~sQ8B8+i&1Ue*r4H|9dY8S&zqWooS;5LT2)V0emG9SEr9t7AM z08Kh_ER&MkZz||l>!~yU@mi`?QQ4AitwkZp6F1DCU$U*G8x922-bf6%3pYrD#i2*< zwpz(G$kV;(&?c|bI?kVkWtK(xu`&B#;UTMoJn+{-FXYMJH&~sfC%3D^A2%%pYB~Fx zYFb@KR!L)a;xpqnrzd^@O_;-5c!|es9)R%NkQ;Y{;h&+Ck8^jTn&jZ}P=M)n>!7A9 zbI=`ms%#Cn4 zcD|SP<@REH*!8~greM*drUAx|97aK~i?nk84xe+fW zZ{VZUt^WcR{^_IyCA?BgZ6gdxVu5?G1|-aEz1&EUsaWP+cJ~=7?fk17Km5W&X3{&= zr6*juZl+Xa>izM!qk7^<2X1*30KepqIdjyV2i+e+zNXSxbK7Tpa}Fm~tK0+5Cmz|g zd=qVePKdNVx^>DVw^plZ?2M6Lxb`!8Ti#RkyDG;^w5l=4mTJ7GuF?>G>j?|lQi82< zNSi&Ar21!4wJGm%haIm3(&qHRaalgKQ+Zo*VUmdvO3d*r$tQiZdevGg?sUI{@hBMB z#c4dG%$ziRt^bWNf~3wy9fsIN_Xz#^hwnqZ)3n%{%nU9mIShVGJbF@_aV%R@{2`Bd zRRV1z;iLf8vnhQhV!*)}h_XFiU+=HG5zruPk-I(^EEW2+SP43iUg88Ktt+fn{a3`C zxH5^rzt^)}NibifBptLnWW>O$q<;o81Ytp^|JHO2c^)R9nQizz@=pua-L?WcDwzsk zqLYg1NS}l0EoS1SEwfU_n>3wtIkq4r(>>1vzP9Z)u* z7!cFZk(y94Ta9;@KGI}VuVTz%OclFRP84+NBUYBAN9)j18h-Dk(N_YxRc+#$@;E!G zk3>;{dx`$+A4-y+OCDz=U?O~&oq10pF2=@SEP`h*hn*uC*BdqRBV;NUWL%7GQwvf+ zy^@Jg8oV=aF&&>FIZfBUhPx!`mVdKBuW_kcOjuX6o{4h~GUS(Oc#=*IhjnUUK6V>q z3|r^NJ1i%lyLPs-RMaW{5i$=F!>FC4M0Pj0<<@G%muXC?eGi&&ai*KS|^#9Ba>V z1r&49PJmi&clkkAhrws5!q)&@Ng2>63rG~VPQPfM6P3_7JQhw!k2;x7`97!rb;o&f zj*N+5e^fk>D^vzYxcBT!!vc`_!+5f!_>XV3z@oz}r2l;7v?ybOOoLg1yQEm1p==et z8!M{V&DaVz@Xg1^2sOzN<|B~4p!Qqom;IvMJuhY^iq(pcg1vcJBD)9j$F|MVwyRM%Pf=l_jD+NyPHL%YE6 z$(-O5y>IX=Oj2(?JA*YBgFzC#Ok z9`8k0Tqim&9(eUu$uOl3X@wSOFmmcm0q`1mIA64Ve_<%3$nNID@10j(FXICMN0-)z_1h!Y(wFt@%rzn&KWkzAN|(aV{DA=J;-G z#?ZdfVo{uhmv0)tmnXPt7NlYVPN%)+Ps(HATs zB#a;EeCAVi=f9W$o`(OvXpJzf;CLh}-04ibR;6BeF3%HSpb7P|@BS;Ns&;?bSOo4F z4DlH!B~h1(AX80$!u6fC-}OET`Dlw`(|?}OMDd~ z>qFr8tnPYIjcmoZtVUn^-ei%&OQA5Tc=Z`Iz9m6b8v)SNDYgGI z&ufpuaQSeQ_2BtH5K)eKXd4pr>O-P(?zf3-LUZVNwLsusL-~7SqM_*WS%%V#M4_TG z{P&M5x)q1sQS4zgx}C=u@Q?t@YU*P&n!}ih@#Hx{2kRN*I*QhP*keYtJ=k?c?y9!B$5bcgrQql3d(MDOE& z$&4)a62X+@f)63w)4wmU=x5`h3F6ai?c0HhJ~iZLYXK!aa#)hyA>2 z|mZaulq=2%a+*w}~-#`f<0;rmBC$8kUReVyk83I8Vz z9h*!SORnHE+X=(t1767g6#NDfz8iGC>whkQKj)G}l@4r;Kv22N_b&h+TX2u|j7#Oj z(K3uiNL1XY*yk@SMq0V^nF^C4tY7F%Xkl1!XVbIhi9k&fR@zT?lM-aSH@RdqE*fzT z0x=nU5YhN`oe2_Me7X&Slwrh-emZTam}o^KV=~utowP0%qBQVdeF^BBD(JrsnqT=g z0Kw~8J^_6p*PaLgV@w0$mjgf4%j*&bCxW;?u04g`wLQC{3<iiFFlUUNQ@-0`3U0PTr^* zMu`6+{ji*^jscj}HzT-Ix^mFBSE+}Zet434IpXr-z;GbHM|<6Z$ud>QLOHm$q>Yj? zi=X^?XVKh5dmh63E6q?c-(MkM>f(9y>kJ)X*W=($$*zh%V_IowxHcM_Px=q^tBS~D z^CNokYN*qIzqTFLw@*J|W1E6Y93dEjFM7bVH;omm!&C=Z%kF zDZ!5^rmEV)HlD6O6Tr*st_e4;^fb1cMxb2+e*K7{dMXd+lY~LT*&%qoG(^LQ;xu2U zlX&3i8OG86!Vntf_USh9iF4*U|J`}Z=mVM)PeAs{D4WZ*4$7P zB%t)P&$2Kr04o8Xy;J`g@KPzWe`1T}m6IZ9MOy`GPfato?=$ik(>JsouPv<{^B1k$GpotiH# zAFc}^jX-(p!24l8(M&7@pUe|Pfm=;J8d^`&7M`y}lC2ikiklLO3&7s(v`TZM_wLvp z)BGvu*V#(5myOg0-#f?hZM~gOm)pbI4r6l2`c;x+BoKN zlf8pTUa5LIE_z>y*IP(5Wwu|3hR`D}LJe2Z{OO%LwF75itx_bm2;*V*L_d!<^U`113iZ?AUR2fo{~@G!O7S z8ry*a+L@ya1s~1tUwKIw=9Y$~W4(^vWXYd@p8Pzd41rg5Et!ZFn)0i|BZzsFQS{Ma z45FpX$A2OpdxJDya+vhWuRX!EMr)~=G60EB#(9=Cm{yUH#1~9tH^>Jf<0R6m#c}G< zi(K*ezx7%l*|KrLE}7Nbi?ghND_o~9`pZ1q-*}Q*Q`{_{6rWZ;i3So3-$FI8e&&NC zWaY{pZS>)b>-mE2`c_1^jB#|!C|63e+q*hQFKyk1RQ#UTkJI!M6}>*G=VmpY(8bq{tn;^1f`?7^Zc-BLmxn4n zI7ms3JW&2@wCq%Iun#b{=0FF4fUU|6)~D`fAdrMDf-%qb7}(_}O-Q%nk`;V~i0&E` znTDr*@a5IOZ9_&vz`~lLmNpX8``JG1kxEJD;}0!4K|3<0TVqBa%r23*zlrBZWH4U0 z5PQ(DoTHN$fb7YEFYgjdU<)3`W~2TCFZR=#A)q&Z+nJ$iP35--s`>pS@B(Z1_+$t{8(iqnGXFSA(Eez$U z(rAcMIv(%#M&j7W?q4q*k#Rn$E zuip+NtT*wwH#{;4u5GD8u}hZ<6@&20Q`j4GxWAW}!MyTY;KIYKaj~9lLj|ADb-{w> zXQV5^!qH%Z=(nxMKm85L9tLs3cFQNel6fR6KmK|2x@yy>gzqqyx%l2?3(eDsLCocG zdslQ2dcLqbO%Nc`$|v^)KCTKql8YQ&?l90WQGtlNjj$*dWc`kau){M=;cMhq|fFjQ_6$TE)+((=L zN}9jU#9gO~MwryIRsj`Atd^e}?`()lD^;B%s>2xr9u$3Ux0maqBQ-M>|74?_%Xg7K z!Rj9hvpde``3walaYgh+!5Q07qw5!{qQ@py4<7ToKiaHbesEVf#mwc)!Ha{sUwaYR zYil{4w$X?jszTm52%aZddax+>6ZVji-I*L2fukc8YS$2F;Fp7qW|#QMx9#UKh&WC@ z@b|j|WKkGzxI%6W_|)$N(vBy^<2S&=M}T&+nZ~}8nxXRO<)lH7nb=UnCA)@o7GYXG zo3mta!~WY5Dh@By(QrLSG!7x6di% zS9=>}2G(da?F-j0X5}QM<)9<2P^&l*D$0iYCMgnRBFhgP;FHiQ{{xc#7njIn&F46G z?iOCDCSZ+j2-Bt2p^J`aBdnQ2?1U{L4m?WeF)8Z<2czjUtR`T$m;{Z_29g z>0R-hEnP?RcHD}C;UCvlJW`!Q#=eH%5m;&(#~y)~Xxx)!XmTP*e;VXL8x+aO(;`p| z^Y7W=lRA)%A&Qg4Ci82P=5l54I9(e#7KD~f&prgcc-_0=Y$*(6kGR#%a+Hj=nMsHH z{nStbI?Mq~mcO0m3g4GMOW%!sg=~(F zHo*;$bSAPDVg*dJd-V~f&<4;QrUGPQ6G10(WzW(3hbT`A_0#Y>R2$q%MZMcYywII% z>aI2%Lsu?S5d6~Z&+thwjJ}cHCua1T#4KIVsE)J)J~nf3t4Di|CU2=n)FGexBvJ*U zcqjy-l@EC24Xf1KX1_uW^(#D5hrp2oIs)xY*_=Xl}7sic0DaxuVQ;Vj(H8jl6{ ztl@;=7&sO8d1Gy79NJS|g5yuZoY}H4{hxfL0oDiPGb?VB&s?rXwe~sbb+Sdvx96Mi zf7XvCdY<~>#8qEs6=adRIh)T#cly&iVqloGZYgq2DE$sBY(0R;w#HyO5m{Xi|j`ryzeJhFvObXi}zQ$^dkUa z8-=*j7t{_XJ~$Hv+WXY=obm2O&HfejylNDi~KEqaO>WLW#z~4D&S_4?L?|I7O zd9bOA>y97h8sWz}k$zJxC8agx00PU z=&q>}m9ckFl0H+8hHU7@QXQTDL?Q5QW~dH6U!?M-P2yvDhHyR=*S$jlFb&0tEg}In&YcQjdt18>ST2pa1*s+G_eQ z$i_(cvP~<#>q^Bp?-6%4Xz=QHw?E&1dQfBsGqE1{N7)PW@SLg91&af=IdJ<2o23%I z=B3MHDwg?zEY+b7?2pWuog5RCD;Ts$p6L=wk|sWaAE$aA+6Z*uB?%5v$opCbw9)s| zLe|cu36WL79#gea+kAOY86xuP@wbA8`P>mQkI<_463)vU;mhz}ev%wYe9GJV8DG zsI*WsdD7gNyjS4W75N&vocg7{z5xOXo$IkwyV2@+8uJ0z_5FJ|yr3t0HolQ8DNX*! z@UtBrYSwpRoJm))>Ui-&I|GfHtg}9}+AglmSHBzP+5p0(>?gKNG`pAQ!o9wA#@CUV?kk=n|xk;NAC7^On%cCA6GUg(8h74Mx zmW0D{fTc@BUs1k3M=8z#svN%Ei)~)D$!SRh)g|_VkdkQiW;lkt?N}oDiND=P-Idjx zkXC>GUNXXJwB{;*6!`ng08u+T37|1I=G#2R0wvra0A!Sc!<9r=?}l{$d_EW{5PB5< zwUrHoXWjP(om^Xc&*V*LNj~HwO;dHpPQq`eu13BY+nHVMI=pjOlsk;VH~8AK#p3E# z1Ayw~&8+%!P<)FVQz)NqdGfTyNTcPU!_)~5lQhDRYkp zC_%1KG3Srg*YlBCiN@6Rz58(IAeQR&A_FooBDOZM83P*b{nB%0neKaT#g$Y7rGmbH zHMCz_Yq+w?u72_rRDz6F4}2GfvaFfx80_zu;fIdvk1$FYLSXCbPQ#V%gzb)_Nq(}y zU3ZOC)Aq>!)bT44i|W`IwFgrG;@_%k*I%D4G6?l|eYRk%UGdM|8h^+cnFz~LymyV5 z5h^5j|4ieG`CvT0^v)hdx>x$4e6v^czfVQlAfgj#Fy_(pxneG?yXsOU8$@^>PX-We zw`wab$am3g+C&Uz4)|>7a*fvwKsEZ&?Ybqt9)qDXf}-cC5E22Loax}F)rj@7O7$(2 z?!By3nfztcBnGSUa1VZ)041(8iYs;m!`C^1Tiyg?|0l^IwgFc*BSY;i+Ru*Uh}%B( zpGlO&;XTgsH^=xdf>7^jmsz*4(_pfM?Wj~cXnBx z$yXh{O^XBq{@qVmy!3{Fe;!W@={=aK2j2UzP5%pMBJj0CeFX*AMz0*|e5> z0wrQ0n97T;j_W9N+s3LX;fTC8`{qy)IZ0K9riL!D!5uE5b9WPVf&!-Q=RVOjTSwBi z;k8~2s=sRnuy~C3mJ|d`StNjPSpD|gN1T; zzn|xTg~NK#smNy7NR@gBtcTMt3~%0kdbzV9%NPq6P)tbZzz0`C{C#mdv%>;Ao>|XF z9T!uW%f{;V^q70#wi`Y&^GyCG4UkW@$`FG>2r$|+R>cng%Ay@aip@1NWmZ1+gcN$V zGh=iq+^Iy7a|>y}@#KfqSDsgM>yr($WF&@~n1*KGhMF{vmm|Fakd5mo!~zM$Gew zn{T}s^aD5dq_;fJQ%))f`$5s3r1`G7tNu9Cv_YzL=G)n86=SkQN(esj_>Q{^f$Q0l zj$sILcM@Rv$kp*t$s4ktEp{iiV&b;eWR+O7^3?$9y^dc_N(V^%wbpl*ZmZW}s~61t zC)3`KlBcpmunVa)|J8NwWr3e`izfB^AQkzeKpWXQY){k@)2p5_!R@8GcPFT#3p_sS zU2P7<-pWbsgYLk%M&LUO#ycYKV59bKe8nkHyyH-9+I^Gtsekp|x9$Vh6x$K2JW4MH z?B97keW}HJL>CBgaJvcIuqZwH&v0t{zp6rmOjcJdt=5#U0gz%O;r5BPbli`~bn-B~x)jPcuX;Qa4p=fVKCY!AcXB)_9R@svcMQ3a+3Qf#anpAW6c zy`hp8b*Np5O#tA*6rhnIK0?8wYULw21)NewAS@DQyw=aryfmQb0zC~6F(8jHAmH%yD&YeYF3g2R$mBpYO8RPkdMs{f+{XJILUCPEi(lE9^uM}al?6z}`_pj_)mbUDDEc^i26 z^#|94ClCxrF#PNB6U=hBSP%DQzhg!rc^sg`bNY4$x@IgCJ_Sk>1Ce0sp47kZzXIY9 z|7!cT`@e6#M>bl%n(^E0X@sPdj`Wk)&2m9A|eG&Uv*S&;NUT2*W&tD|}H=7Wpy5$Op4C z;lrxxFPj050yU58a@~5snJrO;gF|XTcxBFwrycmk?zoNvu6Cu}Gr@DrqBwXLlharC zl1vBO)RIe=mBUAV+QtI_*stF9v3zwjExdyrp!b|Em z^Qi{xZ+SxKi*%CxJR`=belBN2@N*NRaj@ydsNK{UIK2gkP!gwG=z;sfD^oQzTA#La zO5vBp_e3}q=cE4-Kbqa{n-PV-zF=n@csZ2&dJ< zfPr0T)65}Y8PR7?#2yb`jv;P)6TsvSoOqenNdzgKy#1i7h!>dojt|V;PIc}Z;55sXdP=l9(^p|759HpLCBthH#}Aa`oZ`9GAO=*n{lX#bRAm^gh`ld{8~~gycM6iYEUB7zn&$9I}i%`)4W;V0V(Jht>^f zV!k8yO{{Cv1jw`yBk8d85UqHM5mK#FpJ3fnn2WQtrDy9`CEQO68Kxw??(_}4`m&iQ zn>(Hh5S=F6y#FT24V9j|Trq(4`!-UVkr>`Hu!LD=3vz0ks3PQsHSoStgeYXiK=vGzZpKaR8a6rQN!4etGo|kBLTOdJzt8YADqF*68=L zY+4i#i9+9$xs`EF*s$V5G6!#;J-EZDvfDh2F4xfkUa^ny{IpzpCqRC?vPY5~C+HEo zw2A<6CfR4qiAr<&J`>#S`=sNLi@g%rg=i@z|;p+JN}{J+d~3!bwR|1_p_WZ*zFg8JdY2H&$(=>qm|h~`0d88 zWfyZh%%J_j4Dq6hl=rxTCAnU4frH$_ytGsCU*D1mn`Z+sw9>F*#!002LkOF@J|RgG z&VYXmonzYG{uD{CvS4 z2zvgHZG^kGrEZme_YMX^>Jp5Ekly?SG)UqM2$JF;2kQZuO3HlZJBAWt5XB?QAtk6p z;PZBUYmLv}O4#vA`t8Ta9W!j|LYfuO*R{kX~Gkj&k=x{OR zgyuxc7eyW4QKwM~Y;XaJ4k9|Rj;;=@E%@FF)P+@9Wx#6|HcbPs9Er>v%et4vJrx)Y z3O+mlAgaHtAg>Nf|0Z2za?+B6+hfpony5lDAE$d(o?L1}N0%V|tJR#e1J<;%&1W}W z4sdoDCj#!=VGrjHHMfK~!Aastb2s_g)o|qjTPwpxh%bS!912Ze_R1@tsT?0hUX>l= z0g~f3qq>IyyT|fEsc3UU%%e9f@6tYuSbu!PUgly3^o}%#>ptxjwWfP1pM1AwR0`_Q z%ul*q5UsD$nLPe0@(4Nfp56?GD!KCH8Cq7Ut-*bUr}KB^_liJCg=aP&2w@$IA|4wz z09gyWU?8N!5TMlMU;(rK)zk;6jObF@{cH>4aH;$*7AvDf@#!;Um?R*(8&!b z5TAj!VC4&7_>dCm<;$(+T{TeoPk0>2{Bi?uVfbTXN!yb(S#~8f2){1p713Ty*{jc_ zRf2HseOZT8+!fPXa&@%N3i994vCh!EtP(;}!4)kKE%-$Ir&(6wqjxugE|6~v?;rNi z^h=ZRn^;Nzm0U~}M7eO*=BYA-tWFv8ZnP1qe?Ete!mwVw)ZOGc|2qNyR1{vBFqdt9 zt8xG7xKiWPD||`~g42zB1A?)^}Kb zHZN&k&5<=QopZ~J#!ma`OZ1?J|EfUB-SQyjl4>N4fd(x7L!Tv?k{Xl|Zi zj!2NPdK#Lr$aN7wpAeRyx5Er=tJ$^W!M|(Z|tTlIzdC>lf3BIlUt5Nq<^Tm~-|%FF_W;5qeHfl!yrS z9V6$z>|&Do^kuvZw?FH)k}b0zXk(QJeS<=)fX#LP&{-( zR1mXZ<8?!2fYl{@0Ezi8RS2-g=bTa3d*Q&5p}B_RA`OEM>K{D%u@0Na==gQGyV{eE z-kFU(OR^Kv7pt2ORs?Lq@qv7IXi2vKqKf33 zR~4e`{tcY0mG_o&UQI&*yPiUi5dRcXr0|&)XZQi&;?5gVlgjsGONiCF!slVgk!>pJ ztZJM|yhmK~(d5AOK36q1cB9m~^hW}b?T;y(@{Wy2Pli96zt0DS-1xLeo%g87+w+(p z>nEs|=n}0MPb;Eh_?gkGvf)rv3^I(x!*_Q~yK^$LoJi7p0jnH_?F3AMe?u6qKfACz zxBXJe>2EQe*q$tu`?_BD9)1(HV@WigmKpH)8qa8vN?apP0c^wh78>C_RjVEiq^C_M ziLc~F=qyRnDrNWFk00VNCHidqC;&lO-YJo^ilZH&&-2-nnG7s%+mw0h_s~!K*O8R3 zdXceMp|+2$u<*a4dybOy{rsWgc1HcLhxIs2qQ3&MoFc#~p7=ka}> zSXC^xPkO?8?qUqhJM_C!S!&(m8G3Jwc`Rc0Lv(=16$e0NUMq zg&0AcMq)4ca){?MH15c7r++038WzbRm^di@BInT7Q-|RVTyl#F$ zN#cH-@iNC$)^ouQ!q6}$)J3U?09q+e;jv%7R-)S-Tg~Fv-s)g$Za{wkkBTK+0U;hs zJXGJte6PM&iTX!8$oZr`sB{db{2cefDoJ1AZ*D#m-oYZdmG{q?_rL4IK4v0^_kBK= z-j#xDpZt3e8`$7C&CK}3T!m8lU>~eN6kQ*41SgS%V5hKZw=j)Y0#FP)dY2(Th|uUH z*sKv>v8vZVEx?Sto1+TzzFaFnv5g#17WrL9fQ9+6OXt`vpdPYF5qWs`#godJitEns zqdqueW_c6LUNyQ!6e)bV(zIh${I@c-qB98Qqq!2VR${EvJCyR!=6RF<@y{hl_Qyl2 zRdh>gWyr&rj-TmBVa~l0g-EWuk#WqPgx0ure2V|klh;4=KQV%yBZ<&=`Hd`3vbOwb zM`EK7C~{MW#PqMwf&TJ@9#J1^mA=^L?)=LLp?z4} zz^fRs$dnB19)LxSBwkz09b)2&L~W|Jf5_!{@4+(syl>;jtxMRO)@!;>_C* zf|Li*srkh>E${4jGP6<;xw<_rokHRO<7G2pVd?P#keF5p9sPK4xZ#+U7-rMwnLkG= zQp}}lGrZ!*cZq-z186@_t{%;RgXMksAD(?aQ)6-CqZ=`L_M!Oh1Io|y@hP=8=Z;nE6WMYM!8hA-?f{1$b8cd%+$!rUIY(C?#tyd?@}8%cbPu%fuV zHmJ?qK(RGCn^1^sz0*lppm$UUzNT_2bypgib!{*TbgoE-8kMliGrE|*OR;L`nD~#8B-YU(wWNs_(+5Un**Ep zff5*To$NlVS%x59R8Luue(S12jXGt_L*fDL?dgaseG8>+IdO-~L@F|zkWY>U^Dh1x z0rk7Qi)kd!8?2c~1Fy)kWslqI^)fQSdt)j@1z`Z2M)M41OCzTRx}ZKg!ot(XDZH5;arI>LD3nB^1q++cv|OT~`i z8ZoAX%GydeBvt!>ee56IT-VRx%(otrPQUJ(00XuH?IE}$Y?tClldCSub+=SuqEB+D zkt!~vrgb*u#_nbS1i$a3D{OkQhQ9C*_ovEATl&}ISmP<2KAlQ_-Grxw;okhm`w5qK z$_!LEkAFQ2I`dNsF(z*}iya2}T2Gyy!JHg6a?(VNYQ-;G6|4Wf_7F}vyw!Qmqj_bZ z4>QdG;vN z=^|&NU-I7b*sajdJc@(!q=!6FXSTadlX49Q)nc-2%~l9^p=1bvHRosomH4qXkdb@k zwK%z;z?zgB&4?-P8#|sLzsT z%{Y;tU%0KwHCb3~$ktLakPPO$8i3d~dkjW@-}c&{roA_Xy008E#BLYgH~|6E5d|T5 z1-=~Mav%F2rjId+NmKW#&3}4tNTnvK&2WU!&Nh^Zcj&P(k)yJceJO~@ zoS%KO6uItbmOcCzhD!{lYhWV4@#fZO*oy7o-8*q#kz1lxvw;y#OF@^7UpH9N5Gr9D zYX;BMkr2>|+2vZuzwSUhgC&IIbE^sZG9UEj@$y~S&z<4_c`&!!@pbI=$YmMMAVTzP z!hhUsnCf~c_FROUC;_J{ehp==1oXfm^pPqb?6%TBxJWN{YB}-$xNgnc47!yy?)4~9 zW6^M%8DbP(-}y*_8Fcpo(^}Ga9~-mB)pA8)~?JOV4olI{h0(@B+Q$xC5d~le-8b& zY#`>{j%RNi=Y+3Q8JeK8lqc~AWDpn6ABE0bo)xBW^l5+iByDp*_AG z{a+ch7yxnh2-*Dy0ou!wH}(i)Tdy_C+LlrjNC}H6oR&W~t|{>)!iqZ@y6F z{Z9uEMXfon-58Px??G!D5oo{xn_qE58U8r<{UL@3iFJ7md=6aaM45`lyZE<6eG8P0 zM+Mung>esC$yKLmsfO4+x7~jV3cjMTb@*iwBQd_KiT~bVMD7G_Fp-i#3Ag3VvwvgJ zeDa^SDwA}O33bLZdDOqk{PT2>}^ZuiwC z;D=h{g{AxG60UoTEx_=y8X}RY`67bD=rAHwZ~`vs`Cl9+)W^D#c=^|MK^l0IzPS41 z>RH|V-K#!>g^OjYfWDh6G?-KFP~=n8*#jfad4nU}&x-_VP)ifu|NZ2NXLv%`xe)Rm zaN2*^Is&#*_a^vh`05^UOnY*g&NH5O**!7oW}4H9xfyUZnHgZ~0K+~v_b!(td%2#s zA|rICEg_#ru(Op_*H7m-p+vt=$fN zl0Qxne}1|j#4)x@(su-^ZXsUZ&0`U>#&wsB4sdxCkP>pfg9q8I)PzY^z-%`J?NJ5B#wAUF*E2Sh8%o4VuZNg zhn+rNdZLtMTj=$|uiVd*tJpT=#8*~vliD`09q3=`vI~SPiE2whwhMl##D7H+MK?>c z9qx91xPZQD#cTSpLwZk5pbp&Wau1%yZ&}IM+_TuhJ}t1BDZ>aUr;y5D*_dLM_>Nhu zW{83uG!i$muzqsesr7=fVVV|SlyYf&jCFxqiSH+5-I=A@KglOh93TnIQ06WWwkHLi z`0(;_E#OI;>y-BS` zRm|I);;aH=hTh%rn;-wey*2XFe+YF-UJX&cX5d(H!3o{=vw*t1xcbYe_}x`48RXm( z2qznisI9=Rd#nlMm0S%6sVZoNE5d{J7WmoU2tT+%aICh?!;F{08 zghazF>D0pG24#JQ)Ma6K)cNP>Qr8}e3zM4XO&dkAwC6^+Tqz0GK((Yks9PR52Y)ee zaK?{9Fh z1OzF{6Z6zi=_B4F_4tM&(p6ufcX59*0K|pS-EFRos`0#BxB7L5LxZ5_UPTdAX^u+4 zk$9hZ+`{9j{Wzi@62z>L9lE~Nu3YmmKinE@mFXWlux76q1Ml#$2J zy~IT%@vm!(DmvUe<1z?0uks9UEt46=ExfsnMMi5nUL=8;h@pbhLh_fZRqa!_-VAAd zZ4kcH@p+K$r|y5suWeCLiF|VN$gz@cGdn9NDaOHVBs;=*wIW}drsdk;6KY3lo`2{AI5+U$BDWJUFm)aqj6;(x(Lbi7|Yf6yphgBoS@~ z@&3jP+jYo3-s7Jh6Ll86nw__T=~6!L{6`!G;#on#%J<>gaa>pc!8nirBEEOvD83b2DkFGe}n&vL_Vt7~BYWb7J?oTY5-bIK) zp$Wj)JV^Tv$30cGG-B}zio@Xc`g9iODv@tv5F<*T9f*EXNsILj(&5p#`)vj&LmKE@ zJYK=(vAM@6xoIfSeNoq*%i(xKmjsrk_OgAueO~k`*L~Z7e zG3nQs*XWS(`E4m7!$u$_u$@tYTjlC(IjL@S==w_alVmiyuJ(^(Bk{5D*_u!pd?>(} z^uz1f=n5YEtRF!919q7GvVTZ946bY&zn`pou#&sWCoFn+UqEnf?{`r&uIVIm^~=t0jOnZog6W`^$>?)m1L z2WWq_QHkKRuh>q}4<3bzfY;F?HpDLG%OYwa7>9-nN+Ul$mb z)}d>ObXR{(Il?cG)(n0iFAyZ)9h^xvS4GnJ9BiMuw#9}|PnZ4``H#`sEItn+NY_H$ zMv-g$J)?uqt%56~B=5pwGp^d|uO2)V^?gePPWIHo$*p{ z6+>TaHo3+CrpMqvE_U%n%+Vyhm-mR_ATK2a?1MwQ%*mg=@YteVRT%l&W=yGK4z;hMYLiI-d7jH45`uo~Q7q7}y zfK7gF5dWbfX3pw)gOG;zXTO37mt-de`NkO^)!O{6<{4L)>i%1|53+~T9A(i`akJ^c zVFDALp43U8v>D_o9SpxwQi_`DP?%B&Ku-1){GRrlX=HAikQD)Me2ovR&?D%ca(EBy zc=&6#_LtuIsY!%%sA6fY@p~ziWhoQ=OCt;>AmG}gWuKyRHw+T%Zbbhx{2bgE2x;5! zB)Z951iOh|T-)vNQ3|j7e*I<$-p-u(XT(}{B8#*cX%1cNXeg+HS=?>T`tI0~hTw>N zhzHIt z-wJuuWFu!DV+jd3l5|wjKaQ|98RQ;JOz;H4ncj#z+^U` zrh{^b3RJ;17r6k%*gQr2UScJ8CD{Z1z(^5DtkdW}FR`S0=iBIWdp-)hfq8OYqaLfU z1j)d>Q8r|9uSww}e2xa&1zfFBm|-k`-&=jWhFe5At#mxI%{ zxjnzZQw#Kz8CyxCor{W>(GN?%*p)0Xv_PMTs$O2ZtL9|Ug4sOdsva*IZz%yyz6G$* z;-;YwJo=@9yjDSv?qfC`PdR~rF{7Wd);QPDwHYZ!7!Y7Gm~U! zPTv^s34I*{I?#&xv?sFNk?XNy@n%dg#LZ~za)Xn18G{%qTRd_Op)?D{3rivId@I6w zWO>o~SO{H*=eR5;{Z(3$xo3UK!SZcP9P99=JicQ3&^^Dw^?L%;Fj+G>Xe>|_dx)<~~ZxS{*H1P97@Za9mlfgC*wjU)~yV?`)M#>TrI1Q(tWCw*OwNV6^i5qdA5vX?j-LrqYfo7yX$8s?i zB&WcgzHzMi`pM*atDU{M*6tg4=^GUi0(f9>GJ;sxPN-fqYe^WAM3x@MzT=A*ViVp~YzR!-_9svJmMlBU;YuI& zB7T*I{Ix8mee5wL*+JO8dUtdMBbwX!t(~x2fO~qFx(8f*9Neeg4#bHB=YUKSmdzEziS6~iVSC^u(*farDs5R(tY^Xw6_y%; z^E>>!^z6x7;=2R?S(xHg#>*bjZ>y12AMNW>=vUWb> z{bfD^cEU>vj`kl$t;6MidWc4%E?U$wc+7wgbwC7g>^gFH1o2o@d(9PE>al6T6J;pAt)TKLm zG5w}$NZ@v)%JyIY?_6iiObOg2t$}0#g|R3~p0~x^h4LjU-918XT5Vz;XmRa@&Ycu3 z)(0M;zK)$F*|@oUcs1eSgQp#Fq&9Ykc^C_x)1XTA82F*U+S-Oo?Gl)RDsMpc70trd zg3{VgqdG=0Xlem!%O1q5_Fj|y<8stHbqkYdB(dUj%{tB8qLLJj^v^mPDp^~H?Yw_~ zkM}I-*RTA&g+nbnt+uww4yo;%)&wz0L)F6@1q$e>4xDKg-+Bjx9RRI7H`SOGIGhxG zD$V_3JanT!yi%WTyM-NfD8m|uru{+MME}-aT@wny`_(~~bd+yN1DR4@833DS?Yqm-|<5+gF7u)C>4f?f}&Xc{@vbRpcB?YG2!*^m1M)UieMh zw~N)&APr53HF6MxBukt?E$KQC zB6A}^=jseIY#R|bC#fB9q)U-tfj;U+X^&&GiiY3hT${ym`!k$>pSFA(8+*`kFHK2q zAzFTtdV4^C+7<0JROnyM>u0C_Dqx*`=y-KKDM-PGzwiTFX!XdJu=tEBfkT!=(Tl@2 zz!_e0q8m8?nYo!t_k9D{N*svv7bn9Y-9Y^K|9x=S6m#G$rc(wM0aXw+(%A(J6C`6S z+jY@&Q3v8v$9>(}aL&d)Mz+jc8?^qi8FJ|+3TS_^d-=vx zKFR8FKAp!#ex_PL&W?_3Fw~_S;9jSiqaVR=65uVF2ImC3+dre!&uGe7NGn>-_jI%g zj1)1_#*OVA*!_CK(Ido zaR)cL>XJ5VK%w3MpW!cuVY9{^!l)JzJDwr6Wt#I@(nF-1rw-P0a_b2_`=<8rYuS%R zn@fUwb*pJhgylPNKPBuoI=lT3=wNYD@S8PXU>Ng(7z5dny=~6v-k$-tPIftYNyJ>U z?xgCCsQddaz=^zurlg+=_-(qqp4(*B$J19*IALzYuZaQ`@11i_r(kQ$$XLPN?V5ul ztIh)9K-#Qb2YiJJQQ=e?GR;ixB86K%-GlKjt=0`kRqn(XMeM=VLhc}^&#Nrh!uS!Z z%=x8p;9w~NqLaz$`v-5wrJWwMoZfd%!M#ExN&m;a5sYxy|6BkR&5lBpR{mTh@@O&V_ar;XKeAZ*~?F4PEGzjal z(F_R1QT?90Le7%LUCR^%S*B;lk?&Xf}{r(5{mwO-Y zdtT=}pA~+SSKH!J@e;dPI{T-7&!;Mo) zhWCtZ*wr{k8#RuE|LSgxnf`TL;vhKSL}Fe|-fQT_#Hv^@r}wor1OAm;t{17?V|QkK!+JqCehFni7@_sOh_S3HiwgNHRV6>J%EwIQdXB>rIBo^_yCT zUx(?^>NTtUQtkCi*6#=vlTx4KDH0{p%lDMb9ehT3K$6PS-39q>{<>NR zm;Q?W6vAX|ck2|BQDgYMp<*klK(QoAYGrbq4=m$~a^5f-DqP;d0LZwv)>vdBEqUwF z?B35U0^_!80O1I<#q$a!MkU*&>y`J=Xe70qdF45 zLGzB#Blk3N57~M-L{F*;N60obdO(5`~06DL?qHL$^kx= zZ&>@B(*8Qimsl>B)(;P+#*q84%;u=Ek}`aI!aucI3mFLhzspI#YoT0@i0}~-nO3_E zDiu&ZT^j5Nw_7~R0Uc8X{;+!2{NSTvIC|ETwaxem?A9u;`||VXmc*7E#)F&*ATbHv zj?(kR-LL>|!!}D=?QFPEMFY&xYl<>o-kl9bfhoN-f55_9j3*M>KMa%&U+A6Q==?T8*J;%dbIRf-;pYA&M@X;-D*1i z7wouNogBnKFJa&IvY1vA|Np5K0%Y}@FW<8GM&%{p(haA776W?f?_Mv${1}+&Q zwqiY{_>6{XZd(sSnX*69BnIb?zu+cD?|-WnbeUiUiP=Cb7RpQ7%e7+5?s6eMIPGjU zMc(O&B1N##BW-b~)1~Ec+1X2sfFAAk)10mHJw|})SYZD6SK$eyt{$9OJ5RosaMzLJ z@qN0pgrW5!b4zH;U{o#0Oxkph2JD)ao%=C$+BD)s}q-aJI zRv_?_7i8^a!G8}&9D*%hrhKzbbt~5$gZ}tty!?XPp?@Ohg+sdgud6Z$evIBSgEkXT zFr1qTb2_M+kCX*=cE4qSxQO0Am%3QRI=FZmSq1WSmxnWwXg9UZ0pewPh_EQq!vT$B zr>S6+p;SF961n^rFJk%>Kj-21{K4c)iIG$o^~lR*fyyIkfmj4G*VJ3y?UlA;T)-*a zp=(PXBLDCBos+S9)o-U49|Q;`3cK>Etz7xJ!nSU!y1itzR) zcpaG+%B%9lU;Vz;WQ^FyHr(GW*FsyJg463D9G~_TC+so+tAqkWkS-!KHj40C#{`l* z@5g&wi85gFTWcxhtDn3UdjRJ}c5X`dE&Yc1j-vS8=yex>-1SUo&?YGzuD55o#H zqu;vsdRpMw`G`-_89A+FfdAZcJ#8dhXy?z`q?WOEW2f^zGR>T^p?i$2tA|TIzp;O|ZwINSoEoHpO z^E$(+rz@ycjUiyXPQaOd?C_wNPj;M@oP$EzWCn~|6`|sxu74>Hp}A~W7KefshCT8b zZY3YJ-}z8ieFhH&N5sk1=sqV?ZB@rFo&V9j>vNdAyGs^Q74Y-L^v3&7USa)(Vqo1c z*5zUw$Za=yStsg^)izn$fK4x%YT71W=E>mxKY;sf4vwrkY(SY|Fjp_e{IVOMcoOc4 zBYBhHpj_^?LjFoa*>utBiIsMyQ@V}ACt~Wz&p*Z=u2;$4=%K9uhU=K}T6fqD3qnt6 z_Ex4S8z@F5T&vv?+}y$Pn2+97bMc2P!)8rU9w8Cxm-=O^ca2HiO^SPZ^kHQ^N3RZ3 zn+W1i7W+E(TVr>>r?uQoQ+&+)4>A`&%0+8##oi0TZ_aEC^L|Y{j6LF*@&GQ_?5jab zrX%chQIWK&3O!ckoBz6*12;xW2*!MMe)utN14?lyz_flV^mn2PeyuvTZ{Pz~mkkIT zr1h;iH3P;wql4n|Ul-NJdh5LF(CquRW$szN&1zH7&!q73bRHo4>4p z_O*+feaIKIZv$l?2Gf&nBNkyB^&~l@1^Q3dG@yj|SgBE~sQi*olYapT+1;qP(E>bwc?=sSAhQrrN8%ey; zNyxa1bNH2;zzrQCM0=>y?ZDv?KUsMKm%@$IezQbo_@!-LrzN8t3G=a3T@0a zB$-^g`m+gnEBCoI_3mL7Ge;chmf}$BJqKzRDc}&e3`-1tvp#zpbex7`E>-kQ&?V5D zkWlr)w}l|sG0r8O`?1v#OT6>NiuRwlNoE}v9m?EtsD539S1<-JyAHOvGW(MOqtivR zUB4Q;sFYMLIFAKT=UC1#c(OsEMdN4}N(^Zq&Z8jZFUuikG9>Ico@N`*let@10Tl(Y zbC$~O7v0(M5vm4Z+oCkt{#_J(M)qFM`u(zL!U213*Zz$$hVRCbb0cVg#W#mI6)wKqz$W>3pn>%45liDw^ETFqD7 z546xl)PqV8>K3nyXIzRANr|LDRv#!*t^i_!J?iea6g7O!@%edv&-;)sX=PAuebbj` zqEpWYQty;ciJrz*|Kr#seFjl)C~TS#4Ih^8k$!_A#CeVY@@!>jZ)W&*(%Tsr zj}x5JkSy%X3G|Zv3HdEXj6+p>{_qyd{MmjZ&}@cJp*ncyy`D~b>q7W5c~WvGCw9fM zNaFDRu#5~pGjbzF*2{1>A|n}^zn6s)%u+y$fIS8t{yUziuPEmB=+Wsbg3aB z7EG(0D^^&jBrb;}6|ftWg^pzVYVDc%nzm8BlQE}zQ|mCG>KU!47Otu}X*KH-1R`I= z)4z;tRejDuKHRN1*B1fL1VwgZ1>nmmpSO?Uj~`49|M#bIj)$#W9C*c>`Gehk?07k3 z(78ie-MDA#y(o2*M|;+BX}7$By<(i*_Xa##+seuG+HG=eH~@&fcYSN5-FIlu17Y*E z2_$t8*(BR_X4rhuvp+MTs9+YP{dyvo@iNGa-Mj0JtCoB-U%~-nIqt-xB?*}=> z!Q#P-xyS<}D9beLe4L>Zi=$P4<WAFo; z1Ik5R)Fjxf^$CpT&ueiU_YIUm`pf}vDZx(8A?rVxK4=Z%cKEL`0Jb!>PqtJYjIaDU zKhpWjZNCpjXWg}=86)5t8vLDqA>N$7%Sv93V{7^s47ba;MVFoI!dtYzOY4lLLHraP z{Y=_C2O5OG>}6~fQ);n(y!*!8gOq}HM&!ixtpb$Ui+17W2$zX+P@)YbqD7#Z7Uli@ zrBaXv_3QPT8-_iLxvgY&SSEYQfAa%5S=n{6$~%?4+)tzrzwZw zT9oli5B}_tx8nw}EAYME$%7l6^~*guhP7_*+|&J@9zd?Oovw*1$7qxG=RtGV6y%}b6qBb!V$-MA|P^@|a`8a$7bdCBCyi!vY_bmgYLMRl- zC%-38_HuR~B;;GTrED8rcYHy6*lTVa5=s}rBqW=k4$G%54}G`g`D$(!UGVeLts>`b zX&YhX&u!-8X@r_$1o}hKG^WKrW+{s6UTu_zk{_)}+9&ZZBNJcpnF>HJ+NF+zPVTLe zC`gtFHJvxE2sR`!ej2t$xyiSg@JRH|BE{jX_t8Q(xkFmFyo|;i9QMH#1m1AM)~i*d zTIk_OMO#hM`sjLjqTltyON}R#ZZvArA>`cua+RDPrn%e+5=P(<;Ah-3Vz4Lp4N&LH zxFthC3Pd#R>3@5}O64(uVZdIEBcGWk?Am*;&Z*F>usHRkvBd0*jQpX1?*)E^vjYY= zYkft|Zv{4_FmNj5&HkCEYsu$5J_r{A>k~PO_(1dJ=7$%DC%FOgM1$sU>8Zo<+Fu~p z*Q=UeemyYo&W}*W8z@1xM?C8KxauaW<-h`Pe60YT8g1atirF9wY4CVa97`{%{wv=; z+1u@n&6OWdOYmOgoto`9nd0RuKd&>1RD4LX^hNVT`OKcfM`ZyXMh-4fLu=X}QIxi>8fhws)z>zwT2V&}Dp=ov zjwy#+!j2DK(OvKeb9YW=MOyD` zHn>&8`!8^(u#|n@{FCd6DQuAQf@-&t->L#BaUzQUxV@5`cr*+w1yMhf)*=x zoV}dHfw3C!V@7Bp$F7vZWsJ)HjZfH!C*S(Kb*aS}>Lp!YXOK!kJ0i_y`faDq(0{xD z2nKPgCy!f>tS;~fHvM>m#5OGT3{UYbx{Fk>IQ7+)$Du0qsu}JQUG(tfXy{piOu5-Z zkz?7d-zLm-Kx4tYk?-DXIZ15C5PGD`+vJw90ZrWZxLXgDeIEVWy`@oi_L45W?ta$< zBh=UUHB$jU0?W}v{okg+(3ZlKg*x%X zHC`?fE9u5v?B)a`JCmh5_IysX;t>_gig{wKP81wYO9{SBx$nUv9T}2xaDa9k!ka?4 z&DbUi4gv@;bRiJWVL>8jdxUYU;8Pfn1~cVN`R_?Xi*sJGfqsoCbiK(uHypUK1>z!A zzcac|az+3kG3G|YIh~iHUwuMQs#il7Q@XDR(`(c~9Ou#QwU7A)c>#D{mj$BI^UsQB z7xL;e-g|u2fw^<$3=5!k}S?Xg7AhdpF^JUM^F zOR=@eQ?P3G^fD@hAATp$c>}y|;(kFo=|N_TZQM!K*wUvt|5;ABU))UOa{#8T8=p!D_~U8%ME>V2Irm^m$HnxvYMmNC$e1*MOmbXBYvJt*bW`1 zZl%R~Z_QFf%3Y7re)wrsQgiulGeY6N<00;VjPvB;e+PpC|KLiUb1}b z`5L?bC0VV^IW?ALoblV0#V?F57jW(KJ=;y%-;bb&k6> z!0N^Gqu>83e#7WZ`$k6l-^*%8ft&a@uz!c;G_D;OsdUPuZW_44LXBQ__Q(5^QL|z` zWp=nMwRRArI5a*G1PRzqnKU?jGy=MOA_knp2fEImd2qC8-M1(B+qU9O?5FO@g~`q@ ziUEPRl!rvLu5hd`=J|ojU?xJ=48cAEcC|Hf09TKV^Gf?R((Vw{{i)&#Swe1@dF_ z8bF7y|FPH!Ep$bKrghtD#m02`dBkvBzdsx(W*XooPL!RJ!_^jDZTs&a*I7Gb9M)hs z+C!(PgGdydXSb=V;dd#1YTSeYb~XavtesuF`G()j_UAli_Q-qbh5glUxc|&{6hQ3r ziu39m5)Z6t@7`?stYxs<7WY~pqtLi#@IPZcv(q0}=kfO9b4hyKeyJRERpi3jWuj3Nkcbl$TzOQTl|+a_wH&*%phVtk^V1ad--#iLN77V8e-0e?YT^! zf-HP+q75i=@h@uR7aS)VE_}KBaxahk+X!O%uYwB^P94otejug)@7Z3Smk0BMn*B6v zpMV354hSh?c~e8_r?@Ejo{6}9f-5|!J>mlv-R*u)`J4n;0UmEd++l+HQ;B>mZ~mNFY%`>JuCWKvbnPFLrOAxRE)+Xt}yt4YA&DG`lK z`7y57u`AO?yx_);#vn&)v1!MO&1;9o=l0aOqYy5ZZ z1?$>YqV;%#ds``o!_hVxyXpE4JEWHC@kz#hhZ=;tt3%0+z@_d?|A=NJD&79wGWo%P z(%wYTgS3r(0p#bZS{*x`8XR_0`thirMoGNqs4H`L`5)xT!q;>7s9dL4xF;iAC0TT1 zfP|s#-gv}OAEIj?N;S^BZe_oQ_h$_6gddG{ndaFJ z{3p4o5Z?DIu-fPK8|mU4dE{&pq&$9x}{~okfwzMlJ+Tjnua5nC<(Ge85&_ z`64SI==z}c8cueu@#f|oSyG^N3$Z*1>-~;V3o7|LKNe0MKe6>STsPbFOuZRb!R}zz zcFz@_i*lB(^B|J6rrT@Ya8V-vq)2Z8opKVK%SxV@4qOB$aU7e~1|>Mrq)Wa2dn^4Y zm8tFab)!=tG_x3jYhEmbe+(G`QT}dF#Ib_W=%M`wM5y2}$XWzOR+r=3xSscSDy1VS zDMimsiD~n%qigf;X+yE6@gt_V4=(f55_A4Rmnnmf8;gu<3acYF1ky+6-Zngk4|cA2 zgyChD{@&=f@4)6atG(O8+w0Nk_yQW>Y0+t2cJu`UT%6RxzSLN`UK+No{D8}$MLe%5Z7xd$z7+H zq_va|EGiLjYcUH9xi5511H5|1&kfa(>s0t#1^eMm5GKyaD+bCw4xax^0m9a%1R|Dx zEd1+sv_CkVrIy+^Txtd5L(1wNn=$)c>tu4w8r|#J3dQK0&F{aK#t1+sat2(mH(;1Q z=zOg*e?=Bf-e6@4YPMFKD-$^Q3b89UL9_R&L9YmcuLzdv53gQJm9)qglViHSw&l#z+UO)(6kwwhneyUv$=c z4&H zwY{VMxu?@_;7*V#@Hh=vZCQaooPCl(v||t{?w>40S2k&S{SArw1YqczbymV#lKXp8 zO;TC^Am-wvjQs0`V5sUl1pWa6(N9_h5cXaCl0X|bH7VOGLpBu|aOXcb^mQZ7+-+O+ zWwZi4gZ&cX_w_olH|F?d*Hb|E#Gy?T0);5%b}ajZwBJS>ncnpO_Q~0L=a0qLSy%}6 zKkc>Y?byWMqTL(ATr`x@r>T2un1M1cX%EEnEFjYmBdkmmS(^Cx>j7!31XiitqVsOB znK0ILnxm(VD?VS(^6KJ7L{&UuPOlF8B2Xc6>l@8>FfMw~Uvb2lCe{AqC!Ooh5t5rw z?6#CBZdJhUx)B7p}ImJCvuH2<%YgQ3N zo3;Os4HJxYYtnS|nqq`9$%vK@+m|f!u`nE@_!nRDk6{iE<4Lln_nH_&dUJLNe^ zL;DS3P(xnN@w+W))Rb{=^V2_Wgn*P`Oc{ynf1NPseSdg(lk&Cq$u16Z{C6B}4U>3=a)uaH0tg_D4~#r!ql5;4_VtN_)sb_o6B0(t)Ip)X7Ov6~Dq6e|Fw zpYm&PP(C)k9UHm7pwz`QsMse}gOYyTPDS!=-)-zNft-h!2S@euiZm86!15SCeRqgi zAkLdX*>8Wb!fFq$uU!IE!FYLRwmBJy)UGoQI=ueX`R!K!#1H?To*UY^Ik_oELCR`bWUXv9zn_v)e@D^=;u0Ms9Y|P7MD&>*TsBrGq4f5OL)4i# za<~Qos`b*53M0X?HI$NQ_)#qByNegESw(?*Z%Redvh~ZU7g0#cDI!|kO^U&R=LX*= zTG+}T_B%aW@NOrL+x2`Bh@`rX5OjKM>X*evOD7%q`z6eZQ`95xMZO+mvc%^?7s2=+ z!->Ust<%q(IyNmoj7YCjk~I&ry+cA|ZVL@7r9>(`^UeL`qbxT7^y2LSD}RQfMNO`c z#C=y1FC}eK%I}%m?JBhm3KObP#m0}uF*F}I1WFWN=XPH!e-FF!W+ep-7Dv!#0PjVC zT><#uJsSup`*_0S$2BCogeM{au9gl!9Zx)o1ml%hpa0lQN{4Ix+Vz0K0`Mz6?3avC z>ly^H6DRA1-NqUA$~IB@9Y~D1zN!^nS|QBkxz*K$P5IuM>yqotF(dxh8LY3k$P~GC zJNQa~_+Jv;ALsBCMv{41_o~bJr1kzKu<+UsY#7$3PuDaIX$ljg1TP?&c8dun`b6f+fPmOfc3*voorAuD8!)ALz z9zmE=$M(#ucTl0&f)2S$r7i%;8K-AK7e{pAhX6C}_7JKR!Q>=*E zI>zmtr1{dOf&z64lKZJ(FOABJ;)6a+3FP~I1>%;DVV~|x*b@YHBXHT8xY8#0=_2|4#`FMq=gy>8??~k+8Sri<=(^<)lp~ z(x7CwP&6=LW~EkW(uA;#Ip)W4GFVCdNL+Q3??o6xP~>Ize#cgUbMRg&d~VEgZ>@8D zV(L#8Bhc`&8jhMSpM1rQNcvVm<^fNn(c$ZFC-Z^v6>d@A48ne63-!K&@ezQI0NjcM zIm4fR4GVL52{XdHDj*+Mi0hq&PoJWMUGxj7HFZVAh2mzd*24onvm)(=CwVs;vtHb! z8(Nivy(f5J`3QNSY_l+kQvB7(G}iQ}XWJw{Rh!dbV;UeCP(eyS67`9(AOJmjvm&>$ zlAFXdqog{#Zg&OlxK}*-bZC9|lgrsqFXM(dbfl$&EaITOcg2A1wRA9|>s;nH7B-A;3h7$0;GOCM$ke znTned0rm$g0EK;N zDLIeIf4j~~dU|lsmuP;r(3G|gn)sT}*`Ie{1`H*kkBYZo{Da0SjiJl}@#nQ4HCTB1 z*ev>vS@?e*4;J6$pUL4-F`U>sXSMh%;F!^83$qK*nu*H!Spn#m2K?M`f4VidAc z964PLdw}u+G{J)IihQ#->zC5Cz&0Sm4}6}{*YPi3uh?S!^rTi>QJdLk4=~-7{QmA} z4usypjbj8c)}WgdJTLz({aR44rW)!b=(}?l55%NpA?+XY-4xE%MgFjYyi~y_UIw_H z5f;U*%QgQZ#-w8p;=|WtO{BNd)`}++rUNwaSKbG&Uq?iAq6rm37QfK3Hf8u1>9F_H zlYwaAtw6VV1n%)D_54O9xasz%W13G#^IPnDh4W)$^XK&(Ev6=yoqx86hIr{(YcPjqnS0dIglTK*jWdpr!eLkr;J&p5gns&Hb zc`F#s{4_L?{o>36d(v#65)*xDXY-LoHT7<3=vBza)TTL!wa1d^=By(Cz%w;b;g1@kCc95U9Rn zzI~K%GFGB(eMqj~a2Qcv3U@wx$6heU2BCF-EJyNxnruGA;cvtJbL!tlfVM=#lN{#) z4NK}~@~oVa?IvH+2w=%!tB7+bc0Ee*R-HnwFCL5!!f)jKj##!_aB*J>ygA}LGXF%f zm=XTk={<~2?$JeLLi3HD@^Wr|%hso?!~gVcGA7=`l1|sItgZ>L3yXP8Nc+#4J6iXJ zsWA!cj3s*FHLRd{5VSdvK@CW8t@5YDi$txkKc5|{c6a>2`X01E~3MgRA3_ws31vt+DENJiEr8BW+} zv%`C)s0`sD&%b}}b6{5l48Ko^Zh%fS(lKeqLBrgy2^mt-T+2y*@(<3}+>2{?xG5DM zl;?E3zf_IlZYqD41VTr(;C)6-CQ6#s=#KRpn;D{z{zg3BuOx4NyF|>LU?^S$VXN>- zdX?KJMwNO6QJuj&m!|{tYVcod>XJWAmk%Qd<1UH3e z3yX0ru`B%}3b)_}wFbrGL}5hZ($ThKeV%>Ausf!PTlF-bto&kBN>u&Fn+@jK8Q`Bi zh>v(+Z<>M%m*Z3Mea=a?vKn_$s@RqKUf<~$?;eKRnQ9HnZ0sFa!>-JBuk4G?m90Ps zmS#h0s9c7=;?ab+m&LOS*PfgHK)>ZZrKfM|tgJ*70C&1t$SWOFxaPeaQZiW4^Ka8M zTEJtc2DL{C(F|^j5%Iss5ZM?>WSS1XfMRl7_RwT)BF8rWuaxl8t_;SO<7o*N-Q3X} zfEytr(d6EQpers`Lna?0+fgJ!GyPDmUu?q7{{@3EzvX(I)H{W9kwO+fW++hAtP7$`Y@-OyKm|JCJij8#Te4JE&w3oa+S1`XXN4^!2|7Wsq?~-;?vr=a7N|`_E-FE zEPE&={pK8g?mQ4v2GXJ{W&?+FOUA$Vj_rBh=H_%mg{v8p6!%D*2z3>!G*rJqni7A8z;wiCOhVZt;3!|9xfM-^RWFyi{)#7W_zr{q67dT1+DxI{BvNk%ok zo@Dd!DU`@dQZ}=Lr0kY3d;f{0EX&*+^g&uWFP%PCZJ1PlQ@G**JQmp`#Wh3Tu>ZwN zsXigqr9eOo7g?vBcP8B|Z22-m{hIlvsc-6xW4$@6{Fs z=eX>H3uwH*eUQjtLAm1cgY83?^BG#+@(*~RibD}UXfAp4(F4PvNukrBruIW22l-~v zd>6Bg56qE?YpbrcT%KPP%7Xz%WWjA;2O_ zzy0!a)Wkby1BaVnMdzVNz(TRWN9GO2E%WjB_8W|TxL|G(fjY<^1qm;4#Ci9(1a7}F z$qz(1QUUpOICJ_7R52-pMh6<93VAyj89U9(pc}4&nT?H~c#cy@ECDB_5||$G_#1L` z`{>zqRgXjx2+a!sQehS<8!*+oyt-=ESJU)=Xv_l{H-662Zj_NQfAV`Kmg?J*xPjXB z6ga{9RaE#UMt=Upy$J%3zq4<&r))&V=vd268jsvXDONCeRcq6{4k%0v>&7}vVvY8G zrvWEdqe^V9rEqzoiG%Z|1Rx}OsCtJL^u5-b8f}V4!P8EjDSpd-3-D_i`C4;P4pR7p zt4KrKxV^f#xB5dO!e>_%~x1xshps8f^f6`A1 zTP$J76FV&k@?A=>+lptg7~$S$;Mrzq?RJ+=nzCZ3rZwAtv>S7GQWA2m?tIcvk>WT_{TrDw+JD;PtZ$m!g7EYLiyx-oe z=3)h5oijW@*_^?OEaK!N=h~;WDdL9rviT=0aeU0oy-&fDO_Ol-!vOWFDpK-4KFHR6 z#Z;%K5Gn9ablk@?hF=p6Y7>TYFT~+}PG80Xu(hE6>)zt_H-B~&Q+&dPbeu=0McUr} z$ukJY2TB!Y+&+Ngh*a8R=j(J!rBt=cGIHTVi}xyHn9Iy#=yQj4-)8NxnMl?pP*%%| zCnc?1o9QvN`z4`zQ^r)`jb>JMRUX5=4y=zpl*Uq|TGZ17gu7oSa4_ql=LyWZB&{%i zV0|rDaygdKrEc*zDj6o8^W_nDyQ$uDBgKFd0SXY#{ZTDJ6M9loK!q~=z7T=Hx?dzh zm_#@H2s=}R>?8pu?3l+Ru5X&tVo<_0$cK>>7y$n|x=*F`Dr3SzeP0ZZ z(@N7Pw6(s}73u7Bz4l9;AC5kvUueD~vDG4!vZ5c9r^O)KN zAn0{r2(q$0=p2>DdGg_mOv-IT13Ev9cFsJx*$*fFb%#aw)XnVQbO#S=zy~*MhwY)jvcFvf|jPcZ%$FHf|o0N5lk7(0qZrGNHD?@@na2O-F zV>$x}+&H0tgn%LGbn4O&Iek@S^><|WIsoyx?#{11JnqKlIOm{_w_bl+G$A9IrUsiWgU3vh@d+TIWa}S(L+8$>>$^$Frv*N4q^1ZC^ zTY}4;1P?jawj$Z$KYzu&lub|2mcQ*gAz%sf5FWbJik5d^cI>>!ocPMp->1T>6PXZWh<7+ z%lLTajSwXwY5XvA+tCL28YY&^W7y~kWI-vjbHMYf(i zQ{4-7L=Wk$pbzGoefNMPmn2F+7QS6!lAID!LXO=$+YD6Z#G#1{Aid<-D_a9`xXMx4QI$7Q$r6eMcVaGxt!(Uv8QJcVl(dBX#_m%**6G=*M4z9ptE3%c=4X~fj?BfrFRI7fQ zXC2rX^LVjAySbJh!Ogh|z`L{ky^lH73F*n(7a4ot@Gq$z?+T_d!*d!u0<6YO$dawkN;1(go^0Fo2ffdmob*hx#)5N$(+N_T9 zKm`A&y^7Y+Mr|QqKG?I>KlaGw^6!7jCLx>aKWTfTMZ36kpq6p9jgGvsELP!AB#BF!)?Z6 ziHwYt!-vz0%dgb$6zDmHY>2`K`Y2sLjrfoDlSGkoVWq18JP^@X@DqX4?%`N@)bL*)5)V`W5u-@Ws6>w8h~w@iDAk~=Y&Dj+al}|F=3<~6 zf5izR$#$rhj`sE5YMGAnZt0Qg$#72BOt&JVl(LXYk@G&`kEZussaRJS3pms3_^lua zk}O7D5EdQN=0z1Vsu`En&P$sVZ&Z~ zuik`VN|eO&Db7)6YtB{?Ouh_2NaXCku*)j)jev!p7~a3(Z>g5I~{f4I?|d7 zWt>u6pM}H+J{Mc+8R=B~J%i?J(msew+X@XuD>f-qNv@B;`t{?upw5a#2Q_3xRbIo3 zL&y+sPi#q++PvA&MX2dwTX%6o>s$A%O-J@s&I+TIKDcwY-Si#JpyMnyE+d;ImUVjf z7oV~-0eXpPrfEzl}FPi=k8FEdXH|ARpw5J_+V_9vTtP#b35y z-F`r>nXm_b8S!_)(Z4xgP0`q3MV8oLJ%FFZNS#<$E#k3D%SIzeG&J5gk%ZZ4tbBcc z{S3a+vP(i!LVda6u=R2hX;_g`RLg5w6VX;eBB2!JyhFMNhj+7P^L>PcTAzebQG`=E zIGl~XzW5!1sf_+_>yi_%0bITNZ4#FlEbvKZsM~aq;m+o@z*@iM(bJdOdH0yZ>(|HW z{O{iqMm~`4u4hZ^5zxr>g<)URP_!;*&2~`4QPBNIG!5y~4Y@KHkOxO0^{TyqSZ&ri zh+m`#w!eUO*k2Nl6L4vpAP&X!U^Wf}(}Kz%>@{ge!}^~(-@!m_;;lID43G(S zmMc7-3+4RkO_d4+Gx5f#R-6^Sgg?BWo+#}z_!hmUY6y}~Bb|gE?`~)Ncj*lF zxm~F{8QZkI#ynizt0&GOr3J(}{8!NjeJFxG+nTDl{j&V%&?{!Y}a4 z-k=?%dL%~3X|3!Ujizd0W49PgiW@dx&<&#sMhU;gwznSSmAL~oaagI^4iJ_vZf^ZZ zsR0fNiWz>Db3GTbD&9y4I5pbR11{945~N_e8*j5t?oZva8-QS^LzL=H(f5#6=K}I2 ztzfJQ5;F7qR&6kT+_XISl_s1wWe`W!56|(zm_*%I@9z`)h5E=Nkn#DVYOdSj>~#@xg1do>VbZ3I&YPiX=G zsF3stE0q~1#!aADQwS@(`{X?%sFXa~U?8wU)0t)5N)?%+FT3YI9uz<^C?oak4+>pK zta-`Z!I7VJ6sgs_`A%m877UL*aw2|-BgADd8Ie@6qVTI&um?2X=y#4@YlUDj zNdUPKY@qT<86Qy2H?f){XVWtPDqj4Mk2STiQn>SRX5NzXpVV`uOR2Mv(A9vXiL9gKK&|P}GAM=|0^Aas_|a1xvpUdfwD!d|-FEB;lV|Fpu7>qR}qU$cKyILbUUp>{m5#j-_t zX!@`9!3)7e?1)FmT>xHZZ1KO560#`|moyt<&P5o}n_P8n=y)8xj+z&~H6iw$M+fzA zd(4!_%^U~?;a1v`KQX)tRl2PipwR<5lp}Rh*S7BtkZ4Hwp`uPKg^p9sdqtj zL(-LK9GOj7v+8(m3c*Kv`eXHq{Pw%}K6nY2SLxk3=<2rn;toGa&HB?Xqy0yveNuMd z`0^}zC`rQ*sAA`mNlEUT`BV8wF?3=$Ofh2<1@J--CF9(bjP4w8-39tdO=lK6;Zhtr zc+$o-)Nbzq&C^Or!x( z8A*)EpHX`0UDyRat$#0i{`QqD`Zv;4ix4$&O_J3OxABRpnF~06X=-K{Wc;)(bbR^K zzl}s1h+jIw9~_r}u_}l4+IBC)hNh;9V~$%S)6F;~iUV=&{M4g>9+@bf!G?uf*(^w0 zhGN=>#};(&jw>mE;1q$5z-7^^DCpeZ+tMPPDy!4&pMTmERlA_#U~|M#0S#tZPD$qz z6BrvLt@%(Y1&05;su^M?G7)l&p|KS?6w&Etwkz7{N^7Ti>3scv6`hGc6aF8^UBx#_ zCCa&!tCF))WGh1CsN99g8Oa>EXH#TuIYx+8lB-C`S(|(A$z6`wm}_E(W7Ce`exJYL z^LTtd@AvC?uC}?z!xkmbYed%L7^70p18+^m_q(UM#nKW%-OT>n+Bb+l zSqH8|`QAur+(M-);uX>tGc|kis&JCVLCiFTcIM*wLY%(W#b3b1A(PkVD65)K756nZ zU!1QDD_T(#ojel4xaZ=|lnA2wdcIZqO_-UrL~QZFOjIuJ=a4CWL+<4QMr#Lb=G>r} za}UK&8?CNGz1K^f!ekRokg5?WhAa*EQLe@kU$}BRBle zl~PIZkT17oV7f;I@M%24qOn&T#%ZhjPw0jl$xH3&1x5sALWow&=#7V%$|iVNEQO5p z4LqBiwQ&839J^6njLC@)M&JB)*hQr1dF<4ckKyN~1foa7T)D+A&o$9&94Y+h*=~x@ z%Hks#N{-F*wd0&ON;QE|2u(KiE8yby>4YE5&N$D|BXF_KlYo55o*(+2bx2|I4LB~^ z?5FKhc*p7S1e)v6Uy3V~x&nX&>BuW0ARwK5fJL9vPRPjbRbE|Ra*&*Ts-Ylh8sI^X zr9a8Sjk^6c^+DjZt=6CSeiMAPb}$oR6K{YWK2Q-qOU-;B4YhktnZHXPgXvpBeN^)^5%}xrU_rdc%d33*q;Y20HZM&X0bm zJO(=|)FlC&4kyHGrYO&qQ%GkcSR^c`9UIE@a&8g&rXT?Mm70nBFOpIC4Ila78t!Lrq{E!Q#_v*6R__?`ZP-ZeUz8`VfE{dGtsw#QMg;-0?0H%LxEK6Nt`L@w4?%v%Y=A~fpKd# zF@^&oS2_Jc#&&4l{aSvq-Yq({;}!Vx^8NV;pkgF#kiD8YREuKq*yTFv_#>$uRW=pU zjs6ku^j~5Z2{|^MN+M$%cg{<&9V`Gw60eyyf>9JT0q{M?J44f}8|zzX2BOWQU#jjZ zB|5_0pjSU-kG*~F#e#VC+6^e^FkE`V45_yi3TkvcnDI|#e4*6e*=pr$npT26OV;; zGS?{NSCyn1Zh!e;`expBc6$a~E;o63zh|YEaX{ixwL5FU_#t}BhAE>7bSv29=Dj6t z#O$Y|?9BgL2aqJR{Z~TWnY*W5sv;Rr4=TSMHuwnM;ST5jsN-2%ddJWIu+8{Bk$6S^ z5_Y#~rQQcf)|MCnZ{8HVUtRBU*uDLrdr@Skvl<@YL9;w=DwlVJ#;CqnPrzc2NtsoP zH=GQacFI{CS`dc6i8?w`Z2B3h_r=R=Z7eD8Umwa?I^W0M(72{;AX9NroIOx$J-avr z3D}0M39HmE%>&R&Mc|d$V{B3QMxV$WQPtcb`ZMSJ7MmfF18xNsRAHPfp3b*p7&*Ro zMN}7QMXfURQxwV$TNL>GLRc?+i3~Smjo99t80Ffn=MMKZ?9VnWTd&dYhy66ayIFY) z+=%5P4WG-Q<=}k^1N;BAtI|${GL#rSkb4uTFedDTJp78JN;b}Xy?!$ z_8rsf9Kt?ghHm#EMGY=|eHL8EIYn*925V#!w_+K(KezLZrq>}Svl%M|e_ z+2yZ3ak4Z&d?KjQzauYB0|ef0?|ty<4moc5Tf|7N(zpN9SdDl8@N!qF90VGQ8|yzK zd5hPFE@AOHJZ|{*q-aV$)O3-j2}|31_uf75-w$4bQpzvzCbi4iMtC^7Cn=>Gy!^#G z4^aK8RPL=auT;#@St{gdl%cUWXl^4!VG*@5_VMXn?=@RJ$zl=xNH4wcovlDccc#*8 zb=#*nMKzMh(w=y?!DqN7uR^Wp8S7;63ZEIv+S6(ZO{IQ8DV^D}jwueTTtE$N;LufxV^OO+#+psO~ocX-5I93%G6mctSgcFPGgxBzwLYI5NM1w_~nX{A%- zQ~=hgA4ezp@&>B)N8%dXPMo`!EA+VX8YxrY?LyLm5k|R7Q;J&c%a8+He}}Y*d+7ot z3jm=ZNO5QRf+MK_3&U9h!ZqQu;(&A7wl}{Fe^n91bm|caHnK^A4akvWjmIw- zR>sehuo(GwESIH_SFPuRA`b^K7W5VJZ6cUi4e!X-WiK9hBCHFF|Gk=*bQOK?{Dr{p#W(XqZOk*8qrS>u z=a;5ZQ9DH_5r&de032c*a?-p7T6f`b9elxdonok5a6mu#RJd4)vgSlZ`Td=nHyxP6 z*_#KuQqrJ9kiH}ES)RHw@yeYEJ7g!A+;4LN%5mv9^=Z?Qv+d7V7Q-ABzB_zFrRR$XL;n*&xnB?%ty0QwqX8=6`=H97Add5 zgEhoA+cZXOo_Rr4E#}}EZGF>C2PRo{4Zu~+J1M_6 z+B|+8Jhpp248{tsGq3Y>pI)@V>; zn&kyfS7nZdJPeDd1v%9~SaTIr=2<`o!O@uM!(F0RBCM#=>0R=5Nm;rzvuj5^YidNF zR``BOU+00>{Eb!e!mcB5>#Gp68Od{|L5Z^aqVUT<8SabV_M>tJuJE)WP7dbDL1ONc zVrhMivCHag8PMlW$Tz(z4(CqBszunvuvkSD?%TVrM2XFYhbQI!`?&Yd(^WH7>d)!< z{nN-d#(qJd$V1mT9cFja#ZgNe&LIl$?+Nu#BM8v!;>SfU5iv=uhBI!-aZ>>^(A&U$ zHh&XKymV0>zYo?0R)&CSuY~j#cxv) zI9T@!Jw=tz?c=Szwvt53?o_uPjImq+t2~L48}ewuEXCV%0ZgRBE|^l}vZI2)d7pXt z9%rO;7gnwd%f3oGaOd1+fcc5Zrpv-tC#><20gn{Or+$3Vv9rF|j1_?Aeg#6WO!RUd z>+nUWHMda35L=2@S%G)_nl!mh|FWTrHisA%6RK}J9SMXYVkR`s?l1D*oumUChlgSr z87&u&&8+F6UA5d9`kmOKK4Fxd^77`nwmOcJN2~vKy6J}4bbl4Q!#8;XVdJMp1;!H= zlbbX&P^%=tQ4^8*7-?N+G<}NRJyp>=+Yxm8r}NQ1cdRf-kaajIMtE*W9u%mj1bZCV58=2k zE_ORNGYs`vC#>wgbSV_ZlOPO&UMj~%5e<1LsXu|*=|qfOymXIPRHu7kQn?H?J*Fo6 zmF2{h2I}8NlEo4;4THSQ}dFv3UkI?<)NqdlxK@_#9ti2PrKLi%2 zaO*zEQiWN>(O=fO{uF#=(YIAyJrwNVslH3hQFi<*pKE7?MU1TBV%)U$E=R=V#n_m; z$i7*Vo}QqVOJ&#Mqk0TY7cUxfzg6OyLa*}UQc+A{e2C*w$h}KiFY)>QB#VSZ0wrgG z;>i+3J!SO(9#C%Qsi1E0A@JdR1W^P17T2A|*;3Fq=H1s52*~M|OZ(}ydlZ}ZUZn!` z5F5&xsid-4*m*Dz*lieL8WJg{6>kIlYlr4|@DMluPQzK2;5~`H8=nWtH&5}3OYWSj zXc4BFp+z&`D-p&{s;a*Z=rnB`IFBnk*MjD0FDg4@aQrdWGAYjj9$1Xu#pNiawx%+) z72r+Tv>&Yk$i)z9x(hlQ#QY&iLNk$Yy8Sn(l3m!Q(sqC6`s=g>beQXeXvB+Hbrdoc zyhm8{^D5Oj=PN^d=DrcE*LJDq&uc=fKJI(oYW`r{fJ=>s2MR9uZlp^l4#0C(w0qF<3R$nCK;ldd{ zlP=_V)gQ@d$EF&IRls|+6<}&70V>5YYmGBL32tu#`!&IjD+D-&05g~7bGQ$KOJfDc zz8}HR6%D6Wr-G<6Uwokb@(9NkYE%+;wik0!TSQdQ#MhSg8)WcVvb-kZgMR+EvtTx1 z=rU{5g=y$Us(m=sX>%UkT1^6TY(_HB6u~&HRp5ma;R4gfg9}kWj_h{A;>E+bznO;% z#LOz0{rRc%?ug%?91W~E6kU59#om^aM_;y)&mEXhS=KEZn{TaP?0=ZA`9y2flXk#B zWqmjV&|1>$Z?#XbEEF{V#h&B~BzQm0J!{M5PC!fX(0X_6UZ^IDa#t}F;4Zx5N;GQ` z-sXCBVR*&*N}_rZ$^}e|GWszC51zdRwJF`z9yDVT=^BEni%HT(76@%nv`2lO>kn=a z$tBk=3=Xx|XfnSCEK?Q*b+x^=j#{i?E|>c6NQhvHwRZ`)%&WcK{l0~<6CZL_ zBDeE#$JH3kt2Tpk;HpLYj%ui78J$s@f|>wxB; zV!n?%v@;e4kNmEKwod3BDn)&KN^wls}WE98?}`ogG~W7%*AbR-Xt7jhfh z#SZhfOyVPYs*AqSg?BQvajV2uHQmw_{XMbau*^&<$fJ#GM&Gowk*KWJdT3@}`F$qY zcOShO9^A252-M?~mBO|gXFI1FPtUyP5C={U zr9)lL_vbJvs)8-94qU%-fy3#QN2&nm3n$?cc0y&!gBLDfXy(T+|FG1R`FXi%WAxnH z-aknn@`?cS^&nt4KM}uRBU7;Fgr;uyJwXAIKY9HzOt^lVi;7`_E{&aB;uZgUdwm>}*NAV4eKUxa}N8$*BzCE}DS3MX>>eMm>eeYEy}#QXlt zX#Y-;I-odap3l4-13llvCJ6FP44l!i>s?B~Xxth_72%pV(}+y!p$8nGsyIz>sXE`2 zsbL=P%ssO1GLXRL!nVO7BZ;|V{eENNehua4>#T#1Y}!^B29^U%9z1yvkl#LhMGTZa z&rz0ARdx~F6zstom)bLkc4{6DbXh85}FxVEdkLi z$&Z_E!$W6Nxa})i>;>^%qF}fFbfT6#5720~gTxR{yR|%7m?!hX+T4Sf1Kb1Lvzc>& zfKX6;q)Bgq!#E9#{s2!dhkM7NyedKEh~fb~Y;y2Jx5a?)h*+zb_a6hV*c)x`;Q1#w z3xJ56(Thc9qEygNA%C!{`z+OlzSo;v0G3r3-5A8zt)@26_A}r>sl1)8n1%x_X+x?CwjqDxeM_(>kwQ?t zckV}7=1c^~J^588R}Yp}4M4jApk6l1qYv;FWwW93p6V})%ixtad8WyhYqet~1Gze~ z-tyxnHlIp#r#^oN1g}D_%%=DS%RY)@-3r~NPw+$kWIO+!f&R0I?>bH;3d468s({1B zXr@3jzvZZlCd}va-txmQ#mS?*+%=J;8yQy+ODkHXNTM4f38%IZ)hKKzkGPv^6r~^`$$~7=Cv38mE@XnbOb-2psK<3!<4&L|O{_KdwXGc%4-3eqSPFI>e zbKSrNYy76<*wnj%8JhrK%_RWj$LnccB>%+M*IQ(rY37Dw&lvoZNQ}~|Fkps(^Ouy- zc0*+%G#^z<8yYAdf?f6s@t#^S=KAKrhoZQ5GEN}DC%iOuZX*XDXp}u@u0xsYxW_ouBxwM}`0H_=wyA| zE8)_i>OKbmw$;eho9to8`su9p#>P@i{m>v!HYrMx`by5{s2fgqV%IN2u``G2{;S#} z7(C_JHL#g4!TVKzH-;cqyTWYUbYJYD51;o&OW{neeF^8u{&=>3MOrA~?FdpJV zSYd`@e7yIF=r>t}q62JMgr{OifCEZ+OqL@U0qnPCM~vzAVAWSinbTGsoAj%8aAv*o zuWD3^SdZJGJp`)nD#ZmjSqj)I^?gr($f>AJ$#J))lJ(;mu}!}FFX04CDff;uyZT$@ z44yzaWcc(;REg2B-keS7+|){0hao1Ky6u~P!(lZL$EGcIp3i^I>#mUn%_C6l5a^P! z>!#Rsp#cEt6KG$x)xQV)s9bQ9Udl5Q!j2ysPa78L&HdLqdHuyUL@dr}NJnn_or0#u z)ho3h3FLS-gf8mRizhfvtzM0;@IyPk-^a6h9oP}I+0o=6~N{Rb6BX3y4 z5iV4cW^ZW|en}IQMT+TnetP+OC=>YD9ENf2e>0Cg{8J!oHPOl6dW}=^aM*Unss)1+rbRF+Sba7% zS^dsY{r8^f?G9m8-(u)oUlX_hU>wvBfuHDZcJ$scFzxx_sGe>&>$_MnNuJCsS&yi* z?S#{Ys<=ZKzX4zFL(&!$TFy;eGq<}lHtC1pKHZ{AsJ|Suh|q}G&Hj5`YQ6kg>-TLH z@Kyi8(;^duC=6+%3mPF4l)6`@ir!|39??Zz7I ztV%vhgYW=#7VO2Wemv>Gq}*g@;q;+w3>`V;kYxK;6FPKtq`3YYe^ONz(}&E_>Aq4d zi=*$Z4@FD3K~IDg#yC21E&p50#uK=4t=!6S^zF}6jtF|OY2C#@@z}oC8anXk#M0LC zd+<`)JID$k59QE^GI&PGf^LN=Mk)-?G zAp#plve>m9P|9#iZEcyjfDFB2Y_A!F^9a*j3Pm!I-(LKYNI0 A4*&oF literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 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 cSLciz6AsI{U0tD9;7S&f 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 000000000..78f40ae7c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 000000000..9d77b2079 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,13 @@ +{ + "src": [ + "pages/Index", + "pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_asynchronous", + "pages/sm4_cbc_encryption_decryption/sm4_cbc_encryption_decryption_synchronous", + "pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_asynchronous", + "pages/sm4_ecb_encryption_decryption/sm4_ecb_encryption_decryption_synchronous", + "pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_asynchronous", + "pages/sm4_gcm_encryption_decryption/sm4_gcm_encryption_decryption_synchronous", + "pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_asynchronous", + "pages/sm4_gcm_seg_encryption_decryption/sm4_gcm_seg_encryption_decryption_synchronous" + ] +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/main/resources/dark/element/color.json new file mode 100644 index 000000000..79b11c274 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 000000000..0f8ce9a2c --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,50 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidance3DESArkTs.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidance3DESArkTs.test.ets new file mode 100644 index 000000000..822fd08aa --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/EncryptionDecryptionGuidance3DESArkTs.test.ets @@ -0,0 +1,188 @@ +/* + * 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 { describe, it, expect, beforeAll } from '@ohos/hypium'; +// 导入测试依赖kit +import { abilityDelegatorRegistry, Driver, ON } from '@kit.TestKit'; +import { UIAbility, Want } from '@kit.AbilityKit'; + +const delegator: abilityDelegatorRegistry.AbilityDelegator = abilityDelegatorRegistry.getAbilityDelegator(); +const bundleName = abilityDelegatorRegistry.getArguments().bundleName; +let want: Want; + +export default function encryptionDecryptionGuidance3DESArkTsTest() { + describe('encryptionDecryptionGuidance3DESArkTsTest', () => { + /** + * 打开应用 + */ + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * 点击按钮,使用SM4对称密钥(ECB模式)加解密(ArkTS),异步方法 + */ + it('testEncryptionDecryptionGuidance3DESArkTs001', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('sm4_cbc_encryption_decryption_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM4_CBC Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_CBCSuccess')); + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM4对称密钥(ECB模式)加解密(ArkTS),同步方法 + */ + it('testEncryptionDecryptionGuidance3DESArkTs002', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('sm4_cbc_encryption_decryption_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM4_CBC Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_CBCSuccess')); + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM4对称密钥(CBC模式)加解密(ArkTS),异步方法 + */ + it('testEncryptionDecryptionGuidance3DESArkTs003', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('sm4_ecb_encryption_decryption_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM4_ECB Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_ECBSuccess')); + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM4对称密钥(CBC模式)加解密(ArkTS),同步方法 + */ + it('testEncryptionDecryptionGuidance3DESArkTs004', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('sm4_ecb_encryption_decryption_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM4_ECB Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_ECBSuccess')); + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs004 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM4对称密钥(GCM模式)加解密(ArkTS),异步方法 + */ + it('testEncryptionDecryptionGuidance3DESArkTs005', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs005 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('sm4_gcm_encryption_decryption_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM4_GCM Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_GCMSuccess')); + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs005 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM4对称密钥(GCM模式)加解密(ArkTS),同步方法 + */ + it('testEncryptionDecryptionGuidance3DESArkTs006', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs006 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('sm4_gcm_encryption_decryption_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM4_GCM Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_GCMSuccess')); + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs006 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM4对称密钥(GCM模式)分段加解密(ArkTS),异步方法 + */ + it('testEncryptionDecryptionGuidance3DESArkTs007', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs007 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('sm4_gcm_seg_encryption_decryption_asynchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM4_GCM Segmentation Asynchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_GCMSegmentationSuccess')); + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs007 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用SM4对称密钥(GCM模式)分段加解密(ArkTS),同步方法 + */ + it('testEncryptionDecryptionGuidance3DESArkTs008', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs008 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('sm4_gcm_seg_encryption_decryption_synchronous')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM4_GCM Segmentation Synchronous')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4_GCMSegmentationSuccess')); + console.info('uitest: testEncryptionDecryptionGuidance3DESArkTs008 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 000000000..8f8a843a7 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,22 @@ +/* + * 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 abilityTest from './Ability.test'; +import encryptionDecryptionGuidance3DESArkTsTest from './EncryptionDecryptionGuidance3DESArkTs.test'; + +export default function testsuite() { + abilityTest(); + encryptionDecryptionGuidance3DESArkTsTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/module.json5 new file mode 100644 index 000000000..c3fd9dda3 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/ohosTest/module.json5 @@ -0,0 +1,27 @@ +/* + * 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. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/test/List.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/test/List.test.ets new file mode 100644 index 000000000..f1186b1f5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/test/List.test.ets @@ -0,0 +1,20 @@ +/* + * 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 localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/test/LocalUnit.test.ets new file mode 100644 index 000000000..7fc57c77d --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,48 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/hvigor/hvigor-config.json5 new file mode 100644 index 000000000..d584c19c2 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/hvigor/hvigor-config.json5 @@ -0,0 +1,37 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/hvigorfile.ts b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/hvigorfile.ts new file mode 100644 index 000000000..2a5e543f1 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/hvigorfile.ts @@ -0,0 +1,21 @@ +/* + * 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 { 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/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/oh-package.json5 b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/oh-package.json5 new file mode 100644 index 000000000..e41bae026 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/oh-package.json5 @@ -0,0 +1,25 @@ +/* + * 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. + */ + +{ + "modelVersion": "5.0.1", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.19", + "@ohos/hamock": "1.0.0" + } +} diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/ohosTest.md b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/ohosTest.md new file mode 100644 index 000000000..04e17dac5 --- /dev/null +++ b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/ohosTest.md @@ -0,0 +1,15 @@ +# 使用SM4对称密钥加解密(ArkTS)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------------------------------ | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(ECB模式)加解密(ArkTS),异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(ECB模式)加解密(ArkTS),同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(CBC模式)加解密(ArkTS),异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(CBC模式)加解密(ArkTS),同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(GCM模式)加解密(ArkTS),异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(GCM模式)加解密(ArkTS),同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(GCM模式)分段加解密(ArkTS),异步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用SM4对称密钥(GCM模式)分段加解密(ArkTS),同步方法 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/screenshots/EncryptionDecryptionGuidanceSM4ArkTs1.png b/CryptoArchitectureKit/EncryptionDecryption/EncryptionDecryptionGuidanceSM4ArkTs/screenshots/EncryptionDecryptionGuidanceSM4ArkTs1.png new file mode 100644 index 0000000000000000000000000000000000000000..5a04fcc91e9acedf046ca98eb56aae24fa8da6b8 GIT binary patch literal 138404 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%0AX*~Bt4qI-V{ka6nTM%`4HFf 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

14dG;OmWTn*sbR-Ds=4 z%IGmiQ7gVo{25gTDbq~)Ev4qBt1XG~2CJ30Pm)9*(ZVy&0@{g&dBoPJnI)YU$qx-2 zCd=mPB^(AQC9~&y3#1R4akf6wnkt>|Dq?9%<0Il$vIbYl{{p^{O6-AM+y}h<1&AL@ zW@vZ$>AYW zHZp_bWk~EH%x8@2oxvB24y4U4~*zSn1HGHUboqp`gVg&K;0OT7c}IDr$}^` z{(D%&XI$&Yx|V#HhD)0p3mvOPsz92ALfQ!JsV0y9*_**q?zStVvs}{Tg}FJ(t4h`; z7WLHqSVP4_fDXlep#ifjVi$#Y*k^S}4jfOt{gj&hTsP>hnoYGX*C}(0G9Z!{KHt=> zK7xHh=L}{5@|_TwyiP$CleSl`K~1R)x9k+v*tEKY>i+YQeO!d)M9++#(pOQ=C`yzy zVh#?Yi66L$Yc;h-EgH>1MX7EVBvohWiJ!-Azub*97jzm*Rer2fDL%_rk6Tgw9=4Q| zv8$YG!_#VEEgc>8NIkNcRwlt2LNb&VlUHNju+2h#IeDyVB;xlpl$E&EqYWkQ_PVy{ z_Bfn4BL*8UL@}|pWPl;8RnrHM^E`U>4Ii7{9+5RVJKpI@^c+9GwHi-)tBkFNhewWj zMKAN@cT+%!f>hJx&kbG84P|n{R*xLk-XrY*%PrRVo~+I+n*+YU{0c`iFtB}%x!JUX zBD+c*t%qX_T6XHTDaYh_n4E!6linUrTd%%ldFMef;AybfApDqkyN)pC8y&JP^}}6m zBW3A$&tS1|C3EIA!>YqVXiLbw2#1|pG!Z}w?=g~&=9-8GgQh2&Nn$l?k?VN{ zoH{|>^l6vl8GD6rhk8`^2cEu_P zD^4gvG8y>+%!bps5bod&HpbY;u=X2qYMXu8q}|fsG+v2)O);pbu#50CatB3STMl`E zw*vlwPz-K1; zF<@IbUhkuvWsw0QnKMLVhq>tKP@IL%L&OD_FGDM2uV?(087`` z49I~Tq6MPP*q{G;Y0=HZ2C=u(rLVp1!M8OmJ%ns&b#RZ^CBMJr@~SZhNkRWSO?^vT zpZVFL3HxxfCED<^(h}Q6)^Sz}?tbwKQ4=X`C%DCxia$KrDA?B-|fncDfJ&0m0G^F~wB|7RJKkoK0}EQ{Y( zI@DfkHbp1?hecQ+4}p^k*KS~>+Ux6dA@3r<%y1y3Ya(trb7>(a+==j`Pw>-}Z2Pi3 zIf-$VtQz$WC4=(dP zAo?Go890mb1VDj_Sq>n({1T3G@qGdyi^5H-`;*iI4sp}p(vpAZD-M0aK}knc2Do6x zQUczgv*dr9MP*QIl}%7EfNS(POvbN4C5JmfJlKVh$c2IvE%WVaXKp&Q4gy(o zx8{tgM5$ve;$L^>a#R0@j=;?t4IrQn2iOge0?&La z`1vf%x#1sJL=Zd{NLr}z7I0casOus$d>d^rsfenW^jV&CJ!SdJ9M$i-#R?LEk^9rL z%J|Sig~44HxvVIBH`9Mxh0XtY6`)b$C&5{=P$IF(rxwd!-~&?=GWTjal}nc?M)45z`|x_h;FaLa^n9aY=`X8q=l+=gE#ev1KKF_{SUGjUkLccM*wkDkVTh0&~DllRph5)|nU%>x!d^i3d zpUR8lmuHa}Ja=%`jrI6p(pccmH-QFl;6Kpx8w^cN|D113{WmnVF1|}!n#By($yfA# zK>iCL;SKeFjZ;qqT5~dP0JwX-V7ryf% z(QV8!*BKt43^sW>AYN9PKjtD7l8VJg=j75gu|voxaex*Z53Nz{xU+`4g2(y{=|qDY zc;n#5bh}%}$AVnv*AgEarz!Ew(e#pt#GV) zcXD4@f5{KFl1j}(qol#Y#$x|4d!J8W0sgZWo8+0E_}yJxvb1%+~rwTNOfG z=kDXESAd!nJ06$)B*llIfYJvwiq!<}sCC5w#yAExS@%Je@JNi24cPf@iv__m$)&?S zE`M5xno*_rfmLOGM$a-jIrU3PhrxHy3HmMNZgh3RvN&)2CL(%xjn5RaP<(m(lU04Brxa26DNFH{VwH<`D9n zxQw)%d2T<5ut?A`aA#G~nhA{U^#z`PX4_l1OtGH3+LkK~g_vo$aI%u4gnS(PZs9%< z68%AZaFc2bB`O-z$9)?hvbMW?>D2aM+jjRNxg+H)W}ikpls98&&;_ImTqeGs?@f=C z(-c~aWS~zbv8keIMsE3N*6GzZJ;&>0W~aCT+MgWD!QMpvv`OhfsV(F2Sjw+$K(V-Sd&gc~xMXStKP? zF)pvp827BEFI@!l&E=(QrAkT`Ozc!Dag6E%Br;T$ES7G`YXYc>Ekxp2@G;^-;7;@- zxEo)8w``2R0N76y`U-`8QU4*99GE>bOQ{}_R|*#&PZx0$=9V(*Lkyv!TX)}&(M)u6 z)0Utys?2jeC$2>EMF`(_Hx8>Xc6DymW2_?u%XT-b4vV)ZXBl0Z=df{5t_#q)sYZVR zgGQ=0GltqGVvBP<7WqE;9I#Dq%?dd9H-9bB+NkPiQJdN>q9rlni9E|C!?KqFsroE; zMycg?n}NPgF@5L_@VKSA>Au98{>*+tf(iV@t|>32BBLx29oNVgmu&yXmasL;kkpBH z67MKBO`#{#fqwAOZEa7>Yfa6qvax&*A5fhN(+Kl~=9(>Iw>n9V*61!Rt0Xwagr)QY z>#B=kl9=bGERMCtUWT)0c3YAqxP;UOnLM`I84~YLGdR5Hknk{)wrHTced}+wx=-4w zXDYvRwMW>^&co&tNOe9-rLvy6=>z%jIY(CS)|t<0 zL)_YO{l3=+TEDfHm6=Ljr1n-+EM`^utd!^p)?!d33RI<`KPu`*UGXYD)6KKF zk{Q1<27SEOhS|?sLdH;@CMMKQ$-Z}cYa_&>)yGv6v57*iTA13u-|-hF5P@epd|}kb z387lRI0#%`&ccWdja%>bYtnC z)~``3hN7POIm|OH2IY1RDUTXm;N0^2eq_oNtoqRf)LCzDE-;%W@4&ZR08<_$j;k)v+prD(9tvJ#kWf9jCwl*Xc79ecSxX#onzqS~$) z@m#RUJ1Vy4FmphX6pp01A3~bMli?B+_*fhpWgsJigI7*jP3Xd(wUj-=4#-oxR;J^x zesjFy(%|U!%503ML-7%cLeM9@c<9w1TBKjU0W>aAZRLU4vRlUEereFXoDoq*50iYO zD)Av_khAHvY^GKxRxJ&5fPE9$_UFy-L6t)Ha|Gj#)l6wjhr)g{g*^wzVzWMbQ2fWc*r zO7%`ly|=eI`LhPP7HzflqT^T!HS_x@&J+$nYYVr<*A3=4@HvK@t2dcGACnRomJxO< z(Y?0KlA#4RM6*DnEddfVAu63ULgW1}vDfjY^7@aGavL|({?G34H zryUb!t+Wty@Rf=H)vi}gpD3hGruj#**`{R=(ez5mmWguEnQ}yH^H0h57Fh+E_J->s z32w)I4oyN+K8!30&@vjy`8)cfj@j@)k~e)z&9vb!j5bD%98F_#A0m=ua`Zq7I!1H@ z&zFToe_T~qmvl##A~_JbN!E$Jc1=&3n2<4<=x(1GXHd7bAIQgU&`|G4SAKV`(QJ#a z?^4vzu`XnfGCq4%^E+#9Yc9!F+T<2tH1(xIkgn_7vT89l6i7{2`HD3`q++N+9b-t- zWIv3kqj6BY-S>5awr4SiwtAG+W1~S!bA{8Bf6cJf0_)7edZpc{xoTX{s7-E`>wfaB z#x?Z=CsHb?x&47Yf1%NKHDy_W5?tg}ppP>dD^b2MTb zERSszl^g6n|RY?H~FksZ~ zuj){>^~J^@wH_D0q345T zC)vH?%_AnWE~R?)j0H;T1P!G-iKdrXhFoaG%B9fWqc^n*cQ#*L8n!Mz9zly~i@_d& z&{GxGw|XRORqX8s_ebbE8b;2Q_9pq+)NJz7NiGte@+t0$xlTt;E2t~c(`}A#jW8qj zxiiXGDa|l%@uBW^&Wpt2 znC-?)r|AcS?$x%~3+VeIx*c2tGOu;-Z#U()vcm~EGVz4YkS<*|vb9_5&uo5pR$g@Ae z8Nn3s$5y@_u%xi&H3eQu0J;qu+}#)E*9a`9ZNHjaUQ*OxJ9^eSDHd78tsEz$7P>(> z1r+!^txav`K*CEtS9C<}m5SmDib+ ztLK2hJ@H;k@3Lxi=JcCA2G=ZU4~g43F@MA$8}^*BT(^D?TAaFk$zOgG9#wU<0Bkc{ zq1~z4c2nlPZN=E%+^RY{{#XmFwTVeTS2?YKbnmZysnE%7U%PKVDu*(*qp(+;bzI!9 zCaPs)ImUDp+k@uaDYS6fMKRsDDpBOL<0jIR&u|+lxQ=Et?ni z3*JBMy@>*vdnl7ktXQEjf|FZyrRPPZ+C56bRxu1R=G4iyKHdq7Zp|`k6Q7 z;(QPML!2P-y`UK<5RYghs$zt*$-Lk^nfCCYC#J#~W#f-_h4W?&F1!h}DH_F=5l2*n zr&T4ai5doKIaV1@91UCU9bWtDMBGMZ;Qj9#H`kZVESsU`E~g})jB@NZh%dSoi<(65 zv)emzQ43xRv#e7XCKcafC^1jMwDNpuMY?F~jqY=@$D=bTn}_vi+C(NTyep_D?463o zPv3?e9BsYQF3q`9Nn_rQDQ0ez84r3Y9FTdqo93zzqAT>)Y{((-Cjgpaluo3(DJ9O@onBbd}FOp2Db#7^yp3x|7aQ>^lFxSoEcfNL~t2@ z*lh_ay3fxaIGVI~56W@lnZFV|CYo~WGAI*)_b_IoycC^uWiPboJWtHk>x)_u*D@~(eV+u6w}XBso(r4EL6Yz z!Q0V0{Swq)X$KENx%U)r+@Lcws_7{f#V+gToa3OP&5tD1qYdYrs-P;ML?e|iK8<%L zk4OaZ_j!2x>)Xc#UWrql#TnOW))RT}@y{}6mMYlDo;mn`zOwC??Km^QedShZt)`SW z&Y5(Z|Fxl2$6tEm(agI)Xyf&!89T4@+XK^F$oUQH|6=bgquP$%bWx;OafhPCo#O5; zf#MFuHKACrLR;M3-Q7uo7h2qlL$Kl+DBeQp|72{<%(*k?+;!Kw-{wPp-}3J4{Yv(4 z@Ar8gV5P~Ebd-^2=r&VG#mKKOOG_m0@iKI9fUH(7SgA#~-WF@qdbGovN!#XY?ouS{ zwq4uMyGbj+*)c#nj^F~+0HMy()a5av?oBpt60km14Rm(!;2JG%V>|VeO}zu`L``%W zKNdGjEW_I(t-ioLbnce=5*A*tH91z*T3dIwb_!n=Qj6GOj{u%HS*=^$4i-%d{Ze*Q z&TtaluB=<#`_zbSYS{I==RmjhbWiWL$kxcEPD86gUwxI6dSjyZ<y6c9nW?+PZt|c-d}kC@=_@C!*rCiIAU_ zv7JQeDVD|dm6}p&nG5QQ*|*63^)&?XhQ*F0`_`+F8z+uz&-fC!wz#g_5oV2Xshd^@ z-nQLIwtbfiMcP5%_w^_xCR4BOc8Sd*t!t}riVfH+u?i`=2S3I64w}~6HF`*61*BQY z2tmMgm>YNbe)okR)ibvVhfY#PTC1ywdk-I7aqE|qp5}SHDA_8V!|6oPHyS(v zYpM6~-3wG~X>JwHE~&fv=XvdV&hd4_NyUTaa_Qu@l@Sj?Hl^!XFzY4d*7b+T zKJr?xyLD-+vV{hbz9cR|HTQZRmj|7&g1%*)My;k=!w`55+4sUc!;txX0@-Hg(`{pS z$!rzx@8&%=z|GnkN&kjs)WDQ3Gn&3-B)I}j+utiVx6#VXxe?R6rUd2Lhe^79BOaH3PYb<=x(G4f5j4iYIoOUE@J z<)`s?HKt8`>qON~zIa0xn9FY_9Ifn?Bbq;ZJOutcnC|S}>{@T=eB-eG{q?wE_2QH< zpO`v&DX3zDvEvO<1Z$|S`^hZ8@K#J$)O(9m*J~BVyPWG(GrQ0*|7HOuiI~X7;C`De z=>vSXyQ;4!f4*-sQunp7m7PyNS;(2wTPnC%GZXWHuF?gLjG}V4IzOz?1&Hb60m+*9 z1ZdbWCCPZ=@MY8R&2NsE7tYbo;RjC(4--5 zv-MzyZoGtx#=Bjvv#|$OhG%7RT-KhfI+8<`?DDP7e)q0T#DkV$$eYcj1B&ps< z-~02x^=irUlsNUZjB96^4RwIf4{55(lo)xP?|0BMNSWSA6&3Vc42PXjAUe}4CKhf= zEzQy~CvEM1F4FX9pLjXHp;`FJvb998f19XZU68v~n);H&($MbAHQ2b%;ud2IJ!_K& zTdilrg0ReJ#C@(XlsL$>vr6+Kz0^WEh8Ne)LQ973DpbR>51UJEMe|ncb+2Ds_Dkr& z6;R8>Qe3U=FkM}SYTNAAaznl?M@pR{++kIz+lT%uN``|{&0KsfS#cj|<1Y1h z`DIswNY-HIh11>cd5$?3;Ja|2jegA(@YQs%xjE8X_?3y&r+ALcFIG&* zYEK-F?<^9k`=$%EEEav8TC4TeZ)sAMa?wuGs=>+NJ^z&Kt?=rk3OlQ=MX`zk14+lV z4)CGu{t8hw9J=1f3kPX9o@r&TZ2PTy=R1b%?|bO&dDMFW^%miWn?|nqmid?byeymR z@y;nlC(c!G3~Q4%e)wT&D`Tdd+Sp(le_c_5)o^DmS6lMx-Hl3~`JOdWFZOo}nL>EWCTF z?`0Gvp;D$iGGW`!AGJPPv)Kh0DEhU5M-tB#6qma2>6q>W)aeCP{2eYfweKYFWo9*Q zRntZAKMO4s042{_5q=WhT8bVrLj&)2}}a<7*cUxfyS{^%&f0=6{)M&s-ny-a-LWqyGS%^1+|k{KKu8&(Xr#}JDv} z*Gm+zZLh*V*d*%Ab}ystmkJE=LVVRL{|akz5Nk*lt!Z<(YuOwa*V2JVFdadLWA4qo zY$cq$uFxR-XF0@!c zgKyDzR0`cJ`?+lmcOXw$Pa7=|I58Z1L4oCSZl7b~P(^P>$4@e4*QZoLQ>SOLbd7T> zsO~IPrDh8Xf~tmB??QQ@xRYGx&zZ1+vJ2yM!c&7Kabs3RQ+h7A0NdHnc-i+cjfSiG zXm!!#2lr;~x>eVf zYWvhJc^2yc-%N{_d{;#in}^#b!;*oQv@P}h_bF^WIGzn2o-~(9=iGRInxFa#8vAo< z5w^=l7cjz>^BGNhIUjeVtr3lN@33aH9G{ir_pS#KB3ZZRHtDdLIJiU6!-YE&t-s<- zYB~RXTuhqV){RjM!VOkwjqI<+pcyxEe&-={nU-tM7yGsCyCD8orC2;~Fv(rr^lFM?c6-Ft0=h@dY~!{Ui&#p}^d2W8VSf%8Cb`VyK@!mBsInr14WEL7$+{jTEuhQ^> z9%r?;-m%U5`7+44k8#Z!x`ykf0|a1ZJ#gsA2z3Xik>-B^7|$PlTK z?fFZNw9r>m%gatY_ZLnaQ3tKYrD8dYKPVv75bF~W5$e9$=bt2h`Q#`JxCgFL2d3;$G8Qt90VG7m8rUSkT1?-P<*sp6oc!wKZ6$9{f& zR2m(iWsvMoR$0nKm^AAY(hKM*(ra#u4kNgXzlpk21j#4fN@gkZ_XZ5r^wqVCu#)yc!X$1z6 z(6)Xe2E!%AQEpO8kdYKqu2pwIxO8PM@2dyim zB#EOUtR(rsOF}~0E9PIyhwy{TkR%rRbL|e7NkgetkMIY_sa_r14)s~Z1>#?I*sr;? z+<>Mhrl)s3ExqpLQbzuvwtjC8-5$0({F12-dB3nkGS)b%TV`3ansJW3eL-wlgp_Y( z`?B`mG(Y}pYh-ioCpG9m;HSUxv>g`}-JunJ0#z5?p??=AzL}RRP|Us+dzQrnmZtlm zI>bvvzR@&BGsA4-NraO$f&U&^)-iV16z%xz)~QH3zmC{U$HM%f)Qem!BBCGiA70?0 zVG_s>FfyS}!!|A`EHY@O>l|Vzxh->UN+#lVTz_5f^hWRXE_`}Sf}FXUQ^>~66Lz;g zNLkV>eQ_*1AmN@D5T55(TgkUq4YIv9~HT5l1c7+|CJ zD123}`XNtXK!#_4#fZi#pp2*Y6Zt@6WMqEi0r3?>kcfrao{Ec?!n_x#vkj7fLn72b ziXH1qf5izAitCii1yl~Uzao3ikuN4>ds4-VairMqO9IQDuPe7Cb+pw85h>#mO6Ds{T`P;!;ZN#i&*ei-JA**^{AYf zSK=)>#iUp_Do`9_T5%VCXdqSSqF%US>t`4)lv26UTY$3d5`kzZY~YPL-uuzl55;aP zq7J5%?rz53)ZWUKLKHsoDOtt~jhxt=N{O}dolMY#G`)`oUwN3fmm1z;9E$>>nuXA5`VV$7TzCugSw0{85~t7sadvHFDF7N=8E+}a*ZEC|AWzk(BQ({eyYi5 z{pJ4a%ia*EZXQy$Jrs>$nV0wC&%@<&^qOAVh=$m`)OB$r#Cb74`OJo)bvxq^Z@Fy6 z#z*sCzc0W}f9(11w9Nm3GWq4|e&H~;fBRGPUA$IszswWzhWg&nqcsiiob;!92S|O# zw)eO)dhUN9hwCz1E5@+=MfN|B5BXi?`S9cQv)%mGV067j&c&J zvW|Rwe;LjjUcfOeFhij(62d+DJkMkwwjXUn1_IzE@WG zg2zYNblhk$8W;Gn7dV@#9PugMOJUMr>~9D{#ox}VinM|&xfv(f_qTMG9uYs1j`Iw zX?=aEnC*)?nv=Xo?=vc6RqvU1X0_eL5>&X1-8STCk%jxLW`u{)`-TXMtK&FmrVi* zE8GtM=S@)~n}pV`EUnLt&rvaJ2B*QB`yQDCg5bdJUj9Y! zr{JzDju>zBgU!9oKfQa&^T4H>qO?a~VT*Aj%Ib;biFmBpghp9UEH_G-eu2>w zU6jYELbqG?M!iOYk4Z??SxsK|z&`h11P$8iBu zm)fI6-MV?Q@_|Nwqf-l~pZT;Oew5VGTu*uoHYa$qyz}M^s&q-G-_~xA|!G^=_V5yFVlc^?ZpCgXA zSGz!G5F*^x><{MWWxO}Hv)aq0=H$fEl1&Z$y*v8;>gHj_P%65)uv5=OXS2y(-224Q z=T<$m3Btu8kobuowvTtTfxkMa-QM z{;WHtIZJ*QTJRY7D1I~PJmTLmF1w0n@9ArbK7cRej1ur3%?>q5CaT-_f~}7wy-`Fz zR)RGs?6kc|eByuvQw@cdkgF@XL#sjVTXT))=;PHn;r_$T$zE|a2c4^5lq{Xm9iH^Z zyMG_TjV(SV|*goD}7l$bDxD|lZqg*WR!w1@rSsS4g3#pjYXpBICTU|KXlzDmnZxK zh3aM$;`69tIl5lH%&=p$D7J!>g-1dyvG#B7qhvSfTmFIavZ?e-=RMX*|Hbd?wX5t< zjr-B7kaFq%d~h*OsMf{bS?4#ul~($rg32eKgMF??4`g>t1n!UTqJJ6r;opt6$ms-z zex$#|3+a}z{Y!486ykMGxKQ*lf3$y)x0vcT`#Qt$eZsQ^B-wfY%jNmK_rDr@yg$15 zQ@z1;_`m&%%ipd4V*Ku3jsNv5{{LX-%jIlxhZ@os^);SNGM^a!O3}hTIR4Az%8sjLV=GN=zKN^$!D@{0lgup`@l>L|0 zk~2ogUXF)smnYBvpQrZ)siu=b0O=m24>)bE0qyMF@2xUaOC!U_riug(PGoofsmXIH+C0QICME=GrQ{!wd^XzhLXPs+%~QXq$$tv^ z>py>Gwy1%$C}icE<8he8s8^^cNK6GfWl}JcK}I#_gf~to2lfJsXtf6!Dot>?z~{ZH zM(I7;Ow*fo9zG7FgJg;Wd2esoM|<@ zxkAn#>6y=uo;}I*AB%a*QA*{vnp^Ct7=9UxxtXN|=Y~HHa9*$>IR+kBS7+ zhr)kg{cFs|{!`3u{{v+i84|D+ z^rWl(0eU+|6bUTRdJh_1bJ#ynR9HDj^^Ef&dzbP^wnX&FSy>w^4Vv)gtdb0OI{ix8 z7Zo;q4(Z60KkX|1_klk@`b^&ZdI($(vg%M8;0lxCrFE9vhDQ<9_m3x0oC^Z4@<3EE?L z6P>*9Px*)!G(da~#vi*`6DQi$(Rxr3EG#z0LP5t)A+Wz!VaAcK%TQc{_qA%ES_GD* zr70?ARyUlC?;VFzO8h{Po#;&b*oph1+|;e|MN%c%HlK3^K|y+~IEq)n)6G$Q?vroO z;2*B;s7GW`sY332MgO(7e)*RQKg&OR5%jPf7ExtKT!PtV=?_V_ajX)usqrS`Z8B!GhMHnCC7?{mbGV3(D(kgA&dO#>`lPK zFGru;q}BxSR<2)*Slzv+)J#SJ-ZL zR^?EnJIvxD2vF+$QIde&g16hlTh(PE+eYtyW^`#_;ZrFCC3h%+Z@mw^?vzIjxt9$? zP1j&^;o5>8}<#$7`+S7Q{G@l)BU-b@%*ZYJjC2$5Cf})e-BwUT)Kcd zpLqWRg~wH+(2rniu+h5D+kQ-=j8p4Sfjs{S+?ExM|h>1wr52?*dSmKc7@;;1gb6=N;{`XrcnI z@QF(dcnhY{>*~kRYc=j?O$Wb*Nqu(R=%aC7T282p&v)b>W#{`=1kc!rVnNf;-6Vp- zq_s3XiYsuo_Nb;YdoXiGknalrEr1(#N>*m?&EPjcID&{!~n@mzho6#ZC-*zqD*w%qI34#x(98bl!~#Rr`fA~i$&$Iy}S_F5VXbxW2ZTO_CS zt9)MxX?A#_JUUtUEQ%c&o`QfmPc)zRr3Ub5vHb~I1PExc zlN}C@KGUPc7B3axab{X0rRm8edQe#D1Ktn~Nu<+@OJJ9&5s{)AF($jq{L1Q}q+3)n zF?e3soY0rYuw}vHHC5C!2}4_k8#b`IqvTzI1vKdtLSAdb_7oO*$ZetGnLIE28#xXn z^l;v?I8C@b^uZepz0 zIlS?NI5K_^`Bk@{is%Q*IR+lDmAJo4*M>PNv&gm zhqER%xD%c26CqH~y4veGcD5ED33js0-iW+5e@YcP%aKjMfY~DfmrdjSoyhGg6^r$0&0FxHJ8eZd? z+7d_KYZI=&6;X*{S&)kVo>T`=(#TISn@}S3`nely{Fi@4V41P{ZZD z;RM^qkF*s(NRtrsaLJ0Q^)m~z^XD)0XgG)SF;VMYEq=-}lQy55ZJ24M1{8!n3O-n< z#w!ig%!S|5Ksi1^w&*M~IU6!T`^HAi}p zQ;Ht5yn}}^b~n>@v$%wZL5az}!u#6mWLDfkT52{h4hgzg81%5fy`e_$EhA49Qy!~joDFO2R)CIhzRpe+8Sad>y4-Z7SEvgLt}*lD zO%FgcR(xq*@$%0pw145EsrZDpjp2NxVctCvNK($i124P9lLo4K-% zTJN%jg6>dqTn@uS-QXJ6AU{OxQ_h gVtBhDzYbF2Q#_ESC8Tsn6Y%h~Y1*zCbt< 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 literal 0 HcmV?d00001 -- Gitee