From 16a3a29966ac8f90c6a86e524201e1523ff2aaee Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Fri, 1 Aug 2025 14:22:41 +0800 Subject: [PATCH 1/2] add KeyGenerationConversion1 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 | 63 +++++++ .../src/main/cpp/types/libentry/Index.d.ts | 20 +++ .../main/cpp/types/libentry/oh-package.json5 | 21 +++ .../entry/src/main/cpp/types/project/ecc.cpp | 55 ++++++ .../entry/src/main/cpp/types/project/file.h | 24 +++ .../entry/src/main/cpp/types/project/rsa.cpp | 53 ++++++ .../entry/src/main/cpp/types/project/sm2.cpp | 54 ++++++ .../main/ets/entryability/EntryAbility.ets | 57 ++++++ .../entrybackupability/EntryBackupAbility.ets | 27 +++ .../entry/src/main/ets/pages/Index.ets | 50 ++++++ .../entry/src/main/module.json5 | 66 +++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 28 +++ .../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 ++++++ ...inaryDataConvertAsymmetricKeyPair.test.ets | 86 +++++++++ .../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 ++ .../BinaryDataConvertAsymmetricKeyPair1.png | Bin 0 -> 39982 bytes .../BinaryDataConvertAsymmetricKeyPair2.png | Bin 0 -> 40431 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 | 82 +++++++++ .../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 | 79 ++++++++ .../entry/src/main/ets/pages/ecc/Callback.ets | 63 +++++++ .../entry/src/main/ets/pages/ecc/Sync.ets | 64 +++++++ .../src/main/ets/pages/pkcs8ecc/PKCS8ECC.ets | 64 +++++++ .../entry/src/main/ets/pages/rsa/Callback.ets | 62 +++++++ .../entry/src/main/ets/pages/rsa/Sync.ets | 63 +++++++ .../entry/src/main/ets/pages/sm2/Callback.ets | 64 +++++++ .../entry/src/main/ets/pages/sm2/Sync.ets | 65 +++++++ .../entry/src/main/module.json5 | 66 +++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 72 ++++++++ .../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 | 12 ++ .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++++ ...DataConvertAsymmetricKeyPairArkTS.test.ets | 170 ++++++++++++++++++ .../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 | 14 ++ ...naryDataConvertAsymmetricKeyPairArkTS1.png | Bin 0 -> 77410 bytes ...naryDataConvertAsymmetricKeyPairArkTS2.png | Bin 0 -> 20790 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 | 86 +++++++++ .../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 | 45 +++++ .../src/main/cpp/types/libentry/Index.d.ts | 16 ++ .../main/cpp/types/libentry/oh-package.json5 | 21 +++ .../entry/src/main/cpp/types/project/file.h | 22 +++ .../entry/src/main/cpp/types/project/rsa.cpp | 62 +++++++ .../main/ets/entryability/EntryAbility.ets | 57 ++++++ .../entrybackupability/EntryBackupAbility.ets | 27 +++ .../entry/src/main/ets/pages/Index.ets | 61 +++++++ .../entry/src/main/ets/pages/Promise.ets | 76 ++++++++ .../entry/src/main/ets/pages/Sync.ets | 85 +++++++++ .../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 | 7 + .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++++ ...vertSpecifiedPEMAsymmetricKeyPair.test.ets | 94 ++++++++++ .../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 | 24 +++ .../ohosTest.md | 10 ++ .../ConvertSpecifiedPEMAsymmetricKeyPair1.png | Bin 0 -> 42653 bytes .../ConvertSpecifiedPEMAsymmetricKeyPair2.png | Bin 0 -> 17509 bytes .../.gitignore | 12 ++ .../AppScope/app.json5 | 25 +++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../ConvertSymmetricKeyBinaryFormat/README.md | 82 +++++++++ .../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 | 55 ++++++ .../src/main/cpp/types/libentry/Index.d.ts | 18 ++ .../main/cpp/types/libentry/oh-package.json5 | 21 +++ .../entry/src/main/cpp/types/project/3des.cpp | 50 ++++++ .../entry/src/main/cpp/types/project/file.h | 23 +++ .../entry/src/main/cpp/types/project/hmac.cpp | 51 ++++++ .../main/ets/entryability/EntryAbility.ets | 57 ++++++ .../entrybackupability/EntryBackupAbility.ets | 27 +++ .../entry/src/main/ets/pages/Index.ets | 44 +++++ .../entry/src/main/module.json5 | 66 +++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 24 +++ .../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 ++++++ .../ConvertSymmetricKeyBinaryFormat.test.ets | 72 ++++++++ .../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 | 9 + .../ConvertSymmetricKeyBinaryFormat1.png | Bin 0 -> 35846 bytes .../ConvertSymmetricKeyBinaryFormat2.png | Bin 0 -> 29299 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 | 77 ++++++++ .../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 +++ .../src/main/ets/pages/3des/Callback.ets | 75 ++++++++ .../entry/src/main/ets/pages/3des/Sync.ets | 75 ++++++++ .../entry/src/main/ets/pages/Index.ets | 64 +++++++ .../entry/src/main/ets/pages/hmac/Await.ets | 55 ++++++ .../entry/src/main/ets/pages/hmac/Sync.ets | 55 ++++++ .../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 ++++++ ...vertSymmetricKeyBinaryFormatArkTS.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 ++ .../ConvertSymmetricKeyBinaryFormatArkTS1.png | Bin 0 -> 49763 bytes .../ConvertSymmetricKeyBinaryFormatArkTS2.png | Bin 0 -> 21783 bytes 214 files changed, 6469 insertions(+) create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/README.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/napi_init.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/libentry/Index.d.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/ecc.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/file.h create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/sm2.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/ets/test/BinaryDataConvertAsymmetricKeyPair.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/screenshots/BinaryDataConvertAsymmetricKeyPair1.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/screenshots/BinaryDataConvertAsymmetricKeyPair2.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/README.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/ecc/Callback.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/ecc/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/pkcs8ecc/PKCS8ECC.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Callback.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Callback.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/BinaryDataConvertAsymmetricKeyPairArkTS.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/screenshots/BinaryDataConvertAsymmetricKeyPairArkTS1.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/screenshots/BinaryDataConvertAsymmetricKeyPairArkTS2.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/README.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/napi_init.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/libentry/Index.d.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/project/file.h create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Promise.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/ets/test/ConvertSpecifiedPEMAsymmetricKeyPair.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/screenshots/ConvertSpecifiedPEMAsymmetricKeyPair1.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/screenshots/ConvertSpecifiedPEMAsymmetricKeyPair2.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/README.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/CMakeLists.txt create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/napi_init.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/libentry/Index.d.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/project/3des.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/project/file.h create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/project/hmac.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/ets/test/ConvertSymmetricKeyBinaryFormat.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/screenshots/ConvertSymmetricKeyBinaryFormat1.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/screenshots/ConvertSymmetricKeyBinaryFormat2.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/README.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/3des/Callback.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/3des/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/hmac/Await.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/hmac/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/ets/test/ConvertSymmetricKeyBinaryFormatArkTS.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/screenshots/ConvertSymmetricKeyBinaryFormatArkTS1.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/screenshots/ConvertSymmetricKeyBinaryFormatArkTS2.png diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/.gitignore new file mode 100644 index 00000000..d2ff2014 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/.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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/AppScope/app.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/AppScope/app.json5 new file mode 100644 index 00000000..b086c9bb --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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.binarydataconvertasymmetrickeypair", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..5c28c864 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "BinaryDataConvertAsymmetricKeyPair" + } + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/README.md b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/README.md new file mode 100644 index 00000000..aeb0dbe8 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/README.md @@ -0,0 +1,83 @@ +# 指定二进制数据转换非对称密钥对(C/C++) + +### 介绍 + +以RSA、ECC、SM2为例,根据指定的对称密钥二进制数据,生成非对称密钥对(OH_CryptoKeyPair),即将外部或存储的二进制数据转换为算法库的密钥对象,该对象可用于后续的加解密等操作。 + +本示例主要展示了指定二进制数据转换RSA密钥对、 指定二进制数据转换ECC密钥对、 指定二进制数据转换SM2密钥对的场景。该工程中展示的代码详细描述可查如下链接。 + +- [指定二进制数据转换非对称密钥对(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-convert-binary-data-to-asym-key-pair-ndk.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例BinaryDataConvertAsymmetricKeyPair.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── cpp + │ │ ├── types + │ │ | ├── libentry + │ │ | ├── index.d.ts + │ │ | ├── oh-package.json5 + │ │ | ├── project + │ │ | ├── ecc.cpp + │ │ | ├── file.h + │ │ | ├── rsa.cpp + │ │ | ├── sm2.cpp + │ │ ├── CMakeList.txt + │ │ ├── napi_init.cpp + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 指定二进制数据转换非对称密钥对(C/C++)示例代码 + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── BinaryDataConvertAsymmetricKeyPair.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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair > .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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/build-profile.json5 new file mode 100644 index 00000000..fb5a1ab6 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/code-linter.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/build-profile.json5 new file mode 100644 index 00000000..2d8b081b --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/hvigorfile.ts new file mode 100644 index 00000000..e4f43d54 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/oh-package.json5 new file mode 100644 index 00000000..118bdd4f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 00000000..2f818a9f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(BinaryDataConvertAsymmetricKeyPair) + +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/ecc.cpp types/project/rsa.cpp types/project/sm2.cpp) +target_link_libraries(entry PUBLIC libace_napi.z.so libohcrypto.so) \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/napi_init.cpp b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/napi_init.cpp new file mode 100644 index 00000000..83bb0807 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/napi_init.cpp @@ -0,0 +1,63 @@ +/* + * 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_doTestDataCovertAsymKey(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestDataCovertAsymKey(), &ret); + return ret; +} + +static napi_value NAPI_Global_doAsymEccCovert(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doAsymEccCovert(), &ret); + return ret; +} + +static napi_value NAPI_Global_doAsymSm2Covert(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doAsymSm2Covert(), &ret); + return ret; +} + +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = { + {"doTestDataCovertAsymKey", nullptr, NAPI_Global_doTestDataCovertAsymKey, nullptr, nullptr, nullptr, + napi_default, nullptr}, + {"doAsymEccCovert", nullptr, NAPI_Global_doAsymEccCovert, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"doAsymSm2Covert", nullptr, NAPI_Global_doAsymSm2Covert, 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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/libentry/Index.d.ts b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/libentry/Index.d.ts new file mode 100644 index 00000000..195f2920 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/libentry/Index.d.ts @@ -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. + */ + +export const doTestDataCovertAsymKey: () => number; + +export const doAsymEccCovert: () => number; + +export const doAsymSm2Covert: () => number; \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/libentry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 00000000..6abf3b7c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/ecc.cpp b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/ecc.cpp new file mode 100644 index 00000000..6015a441 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/ecc.cpp @@ -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. + */ + +// [Start convert_ecc_keypair] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_asym_key.h" +#include "file.h" + +OH_Crypto_ErrCode doAsymEccCovert() +{ + OH_CryptoAsymKeyGenerator *ctx = nullptr; + OH_Crypto_ErrCode ret; + + ret = OH_CryptoAsymKeyGenerator_Create("ECC256", &ctx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + + uint8_t ecc224PubKeyBlobData[] = {48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, + 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 157, 58, 248, 205, 95, + 171, 229, 33, 116, 44, 192, 12, 115, 119, 84, 156, 128, 56, 180, 246, 84, + 43, 33, 244, 224, 221, 181, 154, 155, 222, 157, 124, 131, 217, 214, 134, 199, + 155, 61, 196, 203, 107, 13, 227, 121, 57, 199, 109, 220, 103, 55, 78, 148, + 185, 226, 212, 162, 31, 66, 201, 50, 129, 1, 156}; + + uint8_t ecc224PriKeyBlobData[] = {48, 49, 2, 1, 1, 4, 32, 255, 121, 33, 196, 188, 159, 112, 149, 146, 107, + 243, 78, 152, 214, 12, 119, 87, 199, 207, 57, 116, 64, 150, 240, 121, 22, 88, + 138, 196, 71, 70, 222, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7}; + Crypto_DataBlob pubBlob = {.data = ecc224PubKeyBlobData, .len = sizeof(ecc224PubKeyBlobData)}; + Crypto_DataBlob priBlob = {.data = ecc224PriKeyBlobData, .len = sizeof(ecc224PriKeyBlobData)}; + + OH_CryptoKeyPair *dupKeyPair = nullptr; + ret = OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &pubBlob, &priBlob, &dupKeyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(ctx); + return ret; + } + + OH_CryptoAsymKeyGenerator_Destroy(ctx); + OH_CryptoKeyPair_Destroy(dupKeyPair); + return ret; +} +// [End convert_ecc_keypair] diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/file.h b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/file.h new file mode 100644 index 00000000..0ad709e2 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/file.h @@ -0,0 +1,24 @@ +#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" + +OH_Crypto_ErrCode doTestDataCovertAsymKey(); +OH_Crypto_ErrCode doAsymEccCovert(); +OH_Crypto_ErrCode doAsymSm2Covert(); + +#endif // FILE_H \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.cpp b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.cpp new file mode 100644 index 00000000..eec6dd08 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.cpp @@ -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. + */ + +// [Start convert_rsa_keypair] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_asym_key.h" +#include "file.h" + +OH_Crypto_ErrCode doTestDataCovertAsymKey() +{ + OH_CryptoAsymKeyGenerator *ctx = nullptr; + OH_Crypto_ErrCode ret; + + ret = OH_CryptoAsymKeyGenerator_Create("RSA1024|PRIMES_2", &ctx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + + uint8_t rsaDatablob[] = {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, 235, 184, 151, 247, 130, 216, 140, + 187, 64, 124, 219, 137, 140, 184, 53, 137, 216, 105, 156, 141, 137, 165, 30, 80, 232, + 55, 96, 46, 23, 237, 197, 123, 121, 27, 240, 190, 14, 111, 237, 172, 67, 42, 47, + 164, 226, 248, 211, 157, 213, 194, 131, 109, 181, 41, 173, 217, 127, 252, 121, 126, 26, + 130, 55, 4, 134, 104, 73, 5, 132, 91, 214, 146, 232, 64, 99, 87, 33, 222, 155, + 159, 9, 59, 212, 144, 46, 183, 83, 89, 220, 189, 148, 13, 176, 5, 139, 156, 230, + 143, 16, 152, 79, 36, 8, 112, 40, 174, 35, 83, 82, 57, 137, 87, 123, 215, 99, + 199, 66, 131, 150, 31, 143, 56, 252, 2, 73, 41, 70, 159, 2, 3, 1, 0, 1}; + Crypto_DataBlob retBlob = {.data = rsaDatablob, .len = sizeof(rsaDatablob)}; + + OH_CryptoKeyPair *dupKeyPair = nullptr; + ret = OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &retBlob, nullptr, &dupKeyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(ctx); + return ret; + } + + OH_CryptoAsymKeyGenerator_Destroy(ctx); + OH_CryptoKeyPair_Destroy(dupKeyPair); + return ret; +} +// [End convert_rsa_keypair] diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/sm2.cpp b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/sm2.cpp new file mode 100644 index 00000000..01652efd --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/cpp/types/project/sm2.cpp @@ -0,0 +1,54 @@ +/* + * 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 convert_sm2_keypair] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_asym_key.h" +#include "file.h" + +OH_Crypto_ErrCode doAsymSm2Covert() +{ + OH_CryptoAsymKeyGenerator *ctx = nullptr; + OH_CryptoKeyPair *dupKeyPair = nullptr; + OH_Crypto_ErrCode ret; + + ret = OH_CryptoAsymKeyGenerator_Create("SM2_256", &ctx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + + uint8_t sm2PubKeyBlobData[] = {48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, + 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 157, 58, 248, 205, 95, + 171, 229, 33, 116, 44, 192, 12, 115, 119, 84, 156, 128, 56, 180, 246, 84, + 43, 33, 244, 224, 221, 181, 154, 155, 222, 157, 124, 131, 217, 214, 134, 199, + 155, 61, 196, 203, 107, 13, 227, 121, 57, 199, 109, 220, 103, 55, 78, 148, + 185, 226, 212, 162, 31, 66, 201, 50, 129, 1, 156}; + + uint8_t sm2PriKeyBlobData[] = {48, 49, 2, 1, 1, 4, 32, 255, 121, 33, 196, 188, 159, 112, 149, 146, 107, + 243, 78, 152, 214, 12, 119, 87, 199, 207, 57, 116, 64, 150, 240, 121, 22, 88, + 138, 196, 71, 70, 222, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7}; + Crypto_DataBlob pubBlob = {.data = sm2PubKeyBlobData, .len = sizeof(sm2PubKeyBlobData)}; + Crypto_DataBlob priBlob = {.data = sm2PriKeyBlobData, .len = sizeof(sm2PriKeyBlobData)}; + ret = OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &pubBlob, &priBlob, &dupKeyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(ctx); + return ret; + } + + OH_CryptoAsymKeyGenerator_Destroy(ctx); + OH_CryptoKeyPair_Destroy(dupKeyPair); + return ret; +} +// [End convert_sm2_keypair] diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..965554bb --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..212c56b0 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/ets/pages/Index.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 testNapi from 'libentry.so'; + +@Entry +@Component +struct Index { + @State message: string = 'BinaryDataConvertAsymmetricKeyPair'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.call_rsa')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.doTestDataCovertAsymKey(); + this.message = 'Call RSA Success Result:' + ret.toString(); + }) + Button($r('app.string.call_ecc')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.doAsymEccCovert(); + this.message = 'Call ECC Success Result:' + ret.toString(); + }) + Button($r('app.string.call_sm2')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.doAsymSm2Covert(); + this.message = 'Call SM2 Success Result:' + ret.toString(); + }) + } + .width('100%') + .height('100%') + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/module.json5 new file mode 100644 index 00000000..4144486d --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..a0613b43 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/element/string.json @@ -0,0 +1,28 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "BinaryDataConvertAsymmetricKeyPair" + }, + { + "name": "call_rsa", + "value": "Call RSA" + }, + { + "name": "call_ecc", + "value": "Call ECC" + }, + { + "name": "call_sm2", + "value": "Call SM2" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 zcmeHuS6EX)+pUO#NL3(IK|}&d7YKwF5CM@UBE5tjTBw4Q5KwvxB2pw25vBJIB27p@ zOaSQt5eZd#CxmkF|4+F-=Q)?(#XNgvmzlk1)~tDFz3+~Fs;5bRo%8yoOPA=i9zS|^ z=@P~5f9V?4rAwDs!Yjfq4p(5Rx~i8hRVUG&*j~LT%Q>2AIqB+Nx_^yhg70E+c&i!%2~zqE0}mxIX= zz1$7|sWj&3yL#7D|4uLjQqV+x(Rz4WC{A9|^m@1A6`BNi38Cf3B^aJyqxF{TjS&2q=3$BC zB1Fu04C;%o9V_Yg;Ed;xpmge>%b<|5q52W_pTd9o;Qty2mQ+-Peu)^(K)RH^d5byH z>AGB-I7$|~9l)J0H_LPDsUUL#brIHpjO1>dJ9@_5&W zLV)s!AVn7*Hy{o<1zLA_Ky-TWzJ_^1=W=Gfyc#1ssqeY_2ww>;ANX%JT)(9uNHOtU zeqU2_{Wu6pLvCMBLgy+dx=13ZG-+cMrBf;#8KezD^}_F2x>_Nob0^iXEv>aML;8RQ@@sN(#bq~VsOa>) zW9RDe#_!zLkj)PyQ<05AjbPk5yJ^|B6q=sMX2L0JE|(P%=v2$6+4QL)cu$c*yt`EC z?)p#@xE12zK?QF2u^(xb0>KieYWS%DH`?=eOiFd!6)WRmCo6Joq6}7e=Nl_;oNJ{1 zu&szm^c0s*wAxfHSlk^+hb)aB<&B?9+_YvxC1LEy$(dDJ8J)d!>rwz?q zGTpJ5&uVwR#t4%B`T{*~RAd_Unnf&`*9c^zbZfsVc;v*@=BHOCX7VbyhnS5G*Pik} z@`U!W&dq$A-&GCYAWg@rG3W6ANL_2a)|;&HJSig{zyfyO87W{;ej&@-)yx~eu|G6S zO)U5U?QD)!ey@XcxEKX?m{R4VZN!*V9gT}6_lv@YD^}}y4OM(*#%kMMBij<9x4*by zCkGRQ3vqoZ)HvQ4oY~=kh{c09u`@Lzqk8)3R+$+hcYuhqajQqgq8qWy8X_QMy@1+T z0&yU)D$XzuW+GZpAB%%|^3*{x!r`8nOWhu6>t(2mvERH# zwD(@F(UyHL)A@d0q#?|SOaIrK7`~^_KhtD69y6E{G70hSpvkOuvhEmR1(|2efAmi@Xw9*}m%vZb>kVqe?t6*aL%179k2-;CD<(T2&{-rQ;%g&4b= zStwf@&UH8&T6lBt>jybuLy}~>HTF7(kmQuR6(8*l&xSQq79o~y=t@1Z0aSiA&-LWp z0NQ{@*q$n1m#1Z}?sFj0=6jxX!@eHh_D<=qD}vOG`kCQ^44In=iDu`srXYt8{4c&) z7G9;S9(*ydG({X#u#N%3l}&Yaq*lzrY-E%htNRQTrjCrX1NMi~a!soU$|=0*dXokbDxSFnm6OHLV@%5(K&ZQB%e+ZFne-TrP|veCOrVj;0pG zdbMMl{Z%MBfVA6b>SKLi zXyRQXFc}Krl(owbvDh?Um&9l0#P)rbdiZxK)8=RY8XvSG1@0=@vGxtW|3E{`T&9Zk zC0==A6=d?8`t>?}z3d12SZ$YU4KZHQPf~|w zJD7n^6bjSS+&0Kq6nxhj*9}9qDZC~A`nzEz{<+9lxx)v#qaCsGWko<{ahFVncU-R|715> z33|Jp;8Iq?Z)NXe;h$K{z8#lRB#JC*XUod!9+#hCfkg#-^FD5Jq@>Dt!SzYr@q0(& z;I!1>qg(PU*HMX7>G-#T5V;IOw~4L@XQ&5le>B4Va!sx0P1pm1PMa!%L##WB{CukUKwQLR#mw_r{d1DneIIJT(j#O#-det^FD zbdwZ-8R%84+Bo+g5iyd(a6x;*5F0xuclibP*ff{7PNPESiBNJu^Q2?h!4}38?XKcb z1cb%?RlBpM10D9~`7(D`#uzQxY}K)shcU_}%#WJZ`~FU)C1j&^b5i=Wc7uJW8^-NB z(rs3^Wms@#S~)+us~_(~uocjV^vU^euJHB^upc~CY%6gqBXHR3{FJ}D^V0uB8xrdo z%j>^}CvVUV6jaGJf5i$e;gXng&>{)uK?nWhEUaVrv+x8njtfCz>cqP8uUTn1`McQ;CD+jm zGle#Cefq~0!!v@W2XnNsA~8j@Gaaj+fT)QzP<&gR$L=bGEJ8^z*tHxS)sZ=vZPV!4 zw*)4rK3To_7<;de8PvEPu4Q5d;D=g00$bPnaG|sEP6(kDsxwc2+y=l@=8Gy3^DW?X z$=3@Y|B6^8mUadWxX-6z(Oh@9|3%Nv*Hz=bA3)}AiK3MrA@eOvp)YSd(Nf|v;6dz-v zI5xYnKImXz)PTM}jxK=GJh_OrE2HXqKgh*KB!U~;4W!DpXN6A98^kNt%~i7+I+`g5 zW}~Qod0A;Lw*Q@m73+!Rfuir!WXqcTd5mXE^DWV3AUSVk>5EA&b6Svd&!yh*!z+6( zh^>CvoV~2?y`UJ#Jho<+PlUEw=Y?Hyd8C#Oj$c!5d!Du*w4OQ9G&OxhDmQ=)tzD()srM-?#=f>aw-$x}3Z?qLOIJ{gnZu zd`Y3Pu@-6CD7)$*a6189&`vfy%c7^DmCj90Mw>5FgU_yh15-*dsMPOLpn%G&Gbq@c z)NN;i4jF!g3-}@w-}i(YUbp4WY;xYi8`sa3ep2V_UXf_!7A{;Fhp25CGF=6{xLd&d z!Mvrklt74KI=0hsCRMYBXM0Z?v1sDfN=Y&W2dW!hUyqiiU@A}R-XCxbIudes32?<&DQ!Hr>qn`aYQ?jSq?4X|x(CCDAB;b=wcWVCH1CfwqU1di z!|LlwpE@R5*{9XlM;`OM$(VZBN$c{`%$ZT3S3aYJwVO}kw)@4_EyP4SXgXkd)Q z7PtWeexnE98(N{TMKt-aG+YpQs`a~e_Y;}upm;CRXlTWI->sMI?cj%D`$7K@mQ<-e z6c3=23v>}kQ!+Z{G2&KQ99s+el!e053~lQJc`8%`$;xt_RQ&16M-jjl$HK)VZG-0esPL)%m(*xgTxhvj>YKkE?dOv3G%g-W9;dgR&pG1FoW|wrm7v|b_Y-VU zKV&S7NcSkHSjm4nrPIy#Wvwp8(lbN>^x7o60ICQ5m?QwOuUY9q(q~<6`0+a7 z_`Zhdli4>YUiT%XT1&z74m|S7pZ;||I*2@$Zd5=|9{V~xFLGS|sAE`ZQ=toXwPUzSz%(Ar!@#M}4%I2r*Ca<9 ze?7@cjo0^QC6zocYls~PXjm{I-w|^|?Hpmvl_!6;&?vERiS^(A2e-)2qxQ#IfuJ_M zgEhyUo8K;fE}w8OE$6nq26w$M-YgMyeYnhwguXF-@5ca=0xYn%I)Rl=_lZaUn5tgl zq{GPw`_E=ilA8s)Jy=%ks{*^ijmr0SqHYg5D%zYfzlqy~#fp6GHI7wm_SN!mo*B=(4jED535Cy$0WQgpMk_!VjQ zhjwgVnse1csNUVP_rkF)3q*bk`=D| zRm=kyT3qxBA7a}d4b433h)JR1r_zBVy6)DMRyM?5%=@^}YMnjurETi?w8)8Y2lox+B2Mc9(WcW709kmg&QO^PydT;QZ_K7tmYO8aA8M?Y);N zSn^>S4^jpy!tF}ZAn_;hcCNY$eyakky`&>*Nh{Yf8H17GR#{9&%f^ps6IAlo`0a7| z-5WT~hwWze!uONxb4D$Was0UyM#f|Al`@rMWg(+oyWOL{(2>P6$`ht&d;q3uD6W+D zQQKN!nzWpx$Ya8CUKa3dgn={(ad!Lm7qDcu`SB#dKHvAM#GW}Z>EZmS6yG22dWcVi zef}3H%>*xQE6XidovM|h{PD;~31ijm0ia9g=-tnlFk!0PDn12luSSt7gWP{nbUK-G z_;*xp66cFpR2OkYg+1wGZF$3SCHuNOh~T{QxmE}&DI?a%s+Q&BqRkJ^37TgbKmAKA z-lXW9)FAv@J#Z=C2lSk4@W5q7S0~BpAs>m(p{^)b2MCFka=_0~yTtPvSKJEH%6&GW zKv;f{iTBYXA0^wmTAmssRXI(3556s-FYRfgXSs2F7D?)Muw3X(n96>Fe~#_y!;5dQ zdOQ?Kp<{m8r8ee4PPIETr3Sr=L{BgNp=Hl~>nSiYS!vY-rs7>zJE&K9>k00!&bs>P zD`CMT*(GNFuh#^fdZE?R`V};&3K^rq3z5UT^^KE~V+Yq@nxU<{+Ug^t(FEIk@f~5* zgnEN(6_Zcdmg55!i|T1Xn2NBcinnnFghvgYxT5oG<#r&$ky|k5SaFs(+Vr@W6W!wc zhr8=;xACvw0kVQ6m+uK@w0M_|3*`l1D1SbQ1B%k-HMIa!=~kGkCfuQ8^C^ZQ&7xn%?zUs@ zJv~f?$}gE-(aEgrt|vKx z;}Q@0S-w8jTszP4_+Em>MvCg@+IT%eNk_MIr)gA`;*lhuP%vm}{=>pIah-$r^3{Da zp;l8BZIY#N3v`sN%POMh>Q=e-o^BM2OK_7-ztamrbZ{m49XWXIgg1Gqa+C!XfX?gxVvl@Yc z?lm`jKKariU3($HdVP4LPtp4+4mV=+tw*rjI~_q%R6DfIW|6`<`}My)W_VK!6c^i* zIvi5RI=c%+#{fOc1^%pnKBkmGk{n2 zC<)woa7^dmGd|$2v77jNVg{v9cP;?R<5Hz&w)i1YTrbpNc6%p0{Khx8hi!J94klTx zC9LuDS+2u)()U%ug}~voR<>Cq}#OQfXF2)TCm)4nk4dkJK<{Ji<% zcP30SBMi`eN&Lves%5zi8b`z0j<83Tc~cBqc7F%;N9zZcNAe!JR3!n;@j1h z1lCS;R&Xw6EFbwYNCw_`r4_DiPb}ogRDYy^watxfz7Xy(zQ=RKaRMV#RY}`WgLrrF zVY?S>T2T_0_gmfEc1P>euBpQk$h-TAw(GijhS$+YK=Tg$zQ6?>D}F1vFkHMoukc{a zEy_ED8Uf0r#&yr0HH7|2|B-{vV9-6x6%+AEp3Hd}4fvb`f5|t#1a^r!L``xWv0pYp zK_sWYo?M7Ka~?Ti?_2#VSWzD;+NOTq_0`+=>-+<27aH>r;wtxc2mAJdsVzr(62hGT z)&mW2D1I;#ot)2O9iIWid6J}Na=-qm<@K(sk9ppYVwcO*IkP(P8P9ER7!PsMfNBn& za^K3zdtRPHN^c^l9lmBs5m>rjxgOV7Io|5p!v}X)j;Ax&u7K?;q%XjX_~o%@lPr_8 z*9Uqq$6~D2?gL>l^=mP&+~8z3yT!99Io|+z9QCQwYR2S? z(t}t86UG(B`86l3E&Y`O1p($K!sj_~Szh|(peg0h(+?ymZ?)sk6C*iUD89q@SVAIS z4_&>H|FtF3pZ<_*-;w|rv%!y93`xISUXVWp-T~!8n*#@16?Q}v>{P^~9I69_ z%n*6qXY%Yy!%fWkW5OADjlkEKjP5d$8>`wRrhp=ra6@iEL)prjHQ=o3@+N$WN7maZarII1Zz-rqUrBVRY znukG8!4Q$))$$`IcgoPA;izr~)m2%Wl&%&EHeRmOXUJsiSwge{CQ5;l6K*f{(Y$dK zr+Ms$jZr918R?`Rysv0Z+#6wT~L%t0b;+Q^{rT$Y_J%=|3^Wd zt6$*epNax{<>cRLLyEm2t&MjM8j1U)pYxwc-MDWDwN~$V|G#;ney}e?-YB~f0-n-M zw?G0{JBvufZPvKoY*5O85X8y3)1IFwLkMFr+5G1knQdDje8Y{BGoelP12*9EUN%KY zxk|^L1xHs)rNCp_@p0*`=#9{%r)_7IsX3T&x{b&X;mgnjUOMtgKs#ylC}%kSdtkjl z8!FE;zg-elNMzzYzDjZ0)^Ieq?HW_G)|Sg=4mBA1EloCGZTG(+tr)OPwRZ{J7OY5O z-u^rg$|QACu3Cq*Al+><3gPrW!35XM#YAriTfXw+!m_NkpMN$HY+wKfNr4L9PYUX6 zzlS_jplR*TFaNt8ide7lbsipOGdSE!+zhi$@D8y%FCwjQ$r9L{z>FOk9`c^?Kjmj` zMuYzJ3lU=4n6Q;tr@a$L?%8~af{fraE2*s=hn>Cp;YCQ#>re~C6xoCO7}(mj#Xh*k zba*^&l5yo%qnHQd!W*<-IXZ+8vnMb>c^cM={07F5{v1ulw!aVecf>C42Ir44Vz);s zT-%=b<-{YEZ*nD{U;m4uIi#wyf4G^ggB0@5%#DRIbN7hz&!Bb!hl?A6#(~|dZ%%iN z%o^Sc0oq?wn5_;1HQ*s%km5+`HK!Bq9^dL$ZL7!o2j@&piKs-)bi>dGD9BCC4PSIk zrGJIk0P-Fv?{`4G0`eU>*i`V_XN2xXw%*xTUlVENh%_|iZDkl5p@Y866#=@Xg{cbE zjZtS75AB(^xEogv2B)1x^m!0XZdCqOZ~=~2%7kuI!6E74!u_j2iau*{do^aD^2Vk^O2eW~KSv(BzRD>xw` z&*Gb6ksujl^_Fg<9{Nxn%B8jSv6jcmU+Kw5-Q&psk7EU|G|_)%rogKwNzemwy6QX^ z@ujX`ZkT$alQ%3oWJ2VOJGz{G(ukN|LF&Ga)nKml$M>IY@1F)}2mL&m6~?A)CN|YS zLi^lZj;aN$DQnmlc~AgqcDB7)?<<0=D*JMD zM3%;`BX_AsO%3+;YjwAbOnkT+m^;*q5X>@S2hO@Aa1J zJCCx~6B|ewT}HQECVls)>JqY95!(x8tJTl^D9t}c_G8p6;&167Z{2*+*qbjZdPBKR zwYTwFdQwnL?Q_fZ1S5+O2`Bi&@(s_P_cQY7?>NOU&FL}U5YmlM6yw@TASK}~;pon& z&{?aE)kw+rf)rVR1R!KIA&R@6^&5tt+oJ8h+P)7GWpbZ0xhG1hCCSz8pFjdYT5mJUum4y`e6ST z&@%+@8U+Bx-^#X6vpu~G2`=~;;97zryltTvX_;q&`r%A)oV7(xhxX1-Obw!r%_aBq zXumue@LLi`iFY=9t~-zHYJC&!zW;W6TKK3YgAe-4E5@wu_HwjtlH4Ep5vqLS-2C5$ zSxHdkc#a7g$_vSgCJ_dxxPL&~SeaPflc=j>z18KsBxhHfhSRvim6wzyuJBI@*m2g@ zc2$Hh#1|Nide`x;s zFEY{lfS)AO1(&M2`md$eil6mNBxu2_M(#la)vUt>ub2uO+!3=jb#6Ic2xq$*jBF`n z%L9sP{NK&^17myQl!*yca`I%e*{%{^D5ld#5&5Dbmw2He%xl{Z?Bv@+UmIbjXEHB5 zH5Sh@UPidw19)2ZMmXkn`O@)IsF`Fbj+RLtb$qTJ#B-vXrZ?7??}cA6N56t|TzFj4 z=rAukcL+Zk?vE$J3_QP=HeaZiJ>sPUrar&8Ao}%X-FpDz+o?UsRbtr6!(ES)@vCo94^P>R%u%q(-9wy%Duenrn)jXuW z+2hV;WWLbrH-awRI4^BBwkb{USY=a|U+=L6IJbHc+!%aSb|KB}H$ z?;wmaMfCf`2o^LLsVRHayM++C2aVlLWRbMjawRSh!|`u4I8tjLx>H>?ZR&ba(LJXj z?DRP5gyUNUnznwc)C%qsQ!aTlw6i(@viQ+~|0fLN?FR=&Mz z!m?8%ms9Zm`@?A{S+a>p-JQ}TICnZa{gktp_;s>#3Wv_=7#GC;f$M! z&TRADKS2F7Grq42P=N2(^g3PHSv9Sr5khe~OZap~yE3UUWM-{Fh{H-BGK9MOV3L#y zw*TZQX^enrYRj7iXkEaCLTZF5z%T)MU*{_RxA-*;G{sl{7ry_e1h+X~HM>NyBnnV6 zzcFEEZvv5PId&nY^VG0nqu!l%4Ln9L8OVmkfQi1}=-j_u=t%I1_~|`SZ_zv+SV@2>e1;w+Y$vY75F((`NKQU2vax&tTw!~HE>c2M3z3d>g zk@W;ee$-qtx3IgJ&cQ;-5AmGPIIdtV0YQvcV7G)N!(PWkx#qq=;AiOzb$C@x+Z zu##CR=Q`hVF-LGTr?w9-umq+&6PrkTr)T1CJ!@XV9i+em9sS#E=UO}BNMwuBrCayH zAub{V#`%5ecrycz1$eSV8<2Ikv6CQ5E=h^K%3m6h74APzqFYP{oejD^Y7o_E2b3p| zeA*LbkS?zNs8`f>wX`CuZF=Vcnc?D9l|P;QF8KedIQiHkm!f>Y3}# zl9AL|w=FC#e&CG1Vj1SX@K&6z&wEdwI}i+9}=0 zD)hP8t2qSqGq-zz1>nRbHpsOX+Ou&rc&B>1K5Z`l|60?OVRG!%y@dyXhC`Y)1x&pBnbuTa%|7f^nM;OIHu%(W6&Ci`84e(2e5z z*ThM)rgG_sjP#cQ+Xs8;_5jS%p3?)1Cd0epUI+qH6)RAoaWyIr#O{wWN#wI+_de=e zPHAv`+(8DcYwZezvF?o<#{{xGw05-!dGx*J-i6B-YsG?>W6ke;g4Hg#P+$=@?s0UEI-*Bw6RE<{1I7> zjBlz61z%K{w(Fbs@*+5i`|zyRlh@qP_iu#(*1Wcpz$is&$q|YHc+dRFT7N)#@B@znBGn$2wXOi+ggc5BJ<+2( zlI3ksg*I$2(gaUp4h9pJY${1?hgh6#mU-3e=N{4cTb2V_4R`HbSASd)X&1AJD{hd8 z^}36_R=S?hhh>k{b|Q{V4g^$!<)__{4ZCIAOzE}*nn%8FpA_Bmaub%88)q94qdSj& zU&K}EwoAH(N;V`V{ZfKgP}7P8xX{2STb>)D)y3#SF&&=+6Jz=_o8pqGbBI1lUdL(1 zD2L567hm`YXfrYLV3fz4yv?7yE!3uaicqZ7ufRny<0U&B6qh8bcqsL`r9)-JOxkXy z+l@a1(ptpJ`{M2l$g!g@DX;KZcoPP93JT=vi}|dQ!tn5*k@U)brT5a*!NEAJ2Apj0 z3jNsKvYjiiy-sUG06+A3T)f+N_X|`ZAX$1+M8W1ZaK3Nm6Dd}Xw#CnL+A?Xi*n>}B z+g^J-yeBCQ;(6yjA1~5bLwIzXXp>6syw2d^&DXBrf$G@}~y*QOne;u_UdZD^Cl zXxza$QKpgXzp22W4GZI|8N{0M2?78Z`$wi+S>waN@uSr9`u5+ghvrjfhcjQNuoDp; zk9szfi0j_VBAd2M+55}LBoF!BASF5?QV6q5zf94lQ$2goh8#I@&N4tiMK&5WOgt0H zRiGPL-7G)N zj%2#teK$kweDwBL1+DK?B#>r?tjR02JIr zUq=)|zME?3CA9?-DRGfqM+;h7w&xgGmLjhTAOdy`b%#?iM;>=l7v)^GADOA64 zy}x#1eDIpJ^iQ-mHzp5#R2_{6(~wo;npi>z4tuCy@Z6Ovw1EGFOaCWi{Qog*{?+*F 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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/ets/test/BinaryDataConvertAsymmetricKeyPair.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/ets/test/BinaryDataConvertAsymmetricKeyPair.test.ets new file mode 100644 index 00000000..34b6b3ab --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/ets/test/BinaryDataConvertAsymmetricKeyPair.test.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. + */ + +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 binaryDataConvertAsymmetricKeyPairTest() { + describe('binaryDataConvertAsymmetricKeyPairTest', () => { + /** + * 打开应用 + */ + 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密钥对 + */ + it('testBinaryDataConvertAsymmetricKeyPair001', 0, async () => { + console.info('uitest: testBinaryDataConvertAsymmetricKeyPair001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call RSA')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Call RSA Success Result:0')); + console.info('uitest: testBinaryDataConvertAsymmetricKeyPair001 end'); + }) + + /** + * 点击按钮,指定二进制数据转换ECC密钥对 + */ + it('testBinaryDataConvertAsymmetricKeyPair002', 0, async () => { + console.info('uitest: testBinaryDataConvertAsymmetricKeyPair002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call ECC')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Call ECC Success Result:0')); + console.info('uitest: testBinaryDataConvertAsymmetricKeyPair002 end'); + }) + + /** + * 点击按钮,指定二进制数据转换SM2密钥对 + */ + it('testBinaryDataConvertAsymmetricKeyPair003', 0, async () => { + console.info('uitest: testBinaryDataConvertAsymmetricKeyPair003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call SM2')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Call SM2 Success Result:0')); + console.info('uitest: testBinaryDataConvertAsymmetricKeyPair003 end'); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..19480d07 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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 binaryDataConvertAsymmetricKeyPairTest from './BinaryDataConvertAsymmetricKeyPair.test'; + +export default function testsuite() { + abilityTest(); + binaryDataConvertAsymmetricKeyPairTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..d584c19c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/hvigorfile.ts new file mode 100644 index 00000000..2a5e543f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/oh-package.json5 new file mode 100644 index 00000000..e41bae02 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/ohosTest.md b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/ohosTest.md new file mode 100644 index 00000000..aea3fe60 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/ohosTest.md @@ -0,0 +1,10 @@ +# 指定二进制数据转换非对称密钥对(C/C++)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,指定二进制数据转换RSA密钥对 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定二进制数据转换ECC密钥对 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定二进制数据转换SM2密钥对 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/screenshots/BinaryDataConvertAsymmetricKeyPair1.png b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/screenshots/BinaryDataConvertAsymmetricKeyPair1.png new file mode 100644 index 0000000000000000000000000000000000000000..0216bdbbd1bd93acb22b4c06e45215bd432f76d1 GIT binary patch literal 39982 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/screenshots/BinaryDataConvertAsymmetricKeyPair2.png b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPair/screenshots/BinaryDataConvertAsymmetricKeyPair2.png new file mode 100644 index 0000000000000000000000000000000000000000..0c06588e2fc5a82886e2f3f4e9ccf2c7eeebddc6 GIT binary patch literal 40431 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 Ip^Lon4^BGY7XSbN literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/.gitignore new file mode 100644 index 00000000..d2ff2014 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/.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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/AppScope/app.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/AppScope/app.json5 new file mode 100644 index 00000000..fd806431 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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.binarydataconvertasymmetrickeypairarkts", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..2062a7c5 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "BinaryDataConvertAsymmetricKeyPairArkTS" + } + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/README.md b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/README.md new file mode 100644 index 00000000..76339d27 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/README.md @@ -0,0 +1,82 @@ +# 指定二进制数据转换非对称密钥对(ArkTS) + +### 介绍 + +以RSA、ECC、SM2为例,根据指定的对称密钥二进制数据,生成非对称密钥对(KeyPair),即将外部或存储的二进制数据转换为算法库的密钥对象,该对象可用于后续的加解密等操作。 + +本示例主要展示了指定二进制数据转换RSA密钥对、指定二进制数据转换ECC密钥对、 指定PKCS8二进制数据转换ECC私钥和指定二进制数据转换SM2密钥对场景。该工程中展示的代码详细描述可查如下链接。 + +- [ 指定二进制数据转换非对称密钥对(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-convert-binary-data-to-asym-key-pair.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例BinaryDataConvertAsymmetricKeyPairArkTS.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── ecc + │ │ | ├── Callback.ets + │ │ | ├── Sync.ets + │ │ ├── pkcs8ecc + │ │ | ├── PKCS8ECC.ets + │ │ ├── rsa + │ │ | ├── Callback.ets + │ │ | ├── Sync.ets + │ │ ├── sm2 + │ │ | ├── Callback.ets + │ │ | ├── Sync.ets + │ │ ├── Index.ets // 指定二进制数据转换非对称密钥对(ArkTS)示例代码 + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── BinaryDataConvertAsymmetricKeyPairArkTS.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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS > .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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/build-profile.json5 new file mode 100644 index 00000000..fb5a1ab6 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/code-linter.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/build-profile.json5 new file mode 100644 index 00000000..e7569e30 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/hvigorfile.ts new file mode 100644 index 00000000..e4f43d54 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/oh-package.json5 new file mode 100644 index 00000000..c9cb6c81 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..edc2839f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..6cbc6715 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/Index.ets @@ -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. + */ + +import { router } from '@kit.ArkUI'; + +@Entry +@Component +struct Index { + @State message: string = 'BinaryDataConvertAsymmetricKeyPair'; + + 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(20) + .fontWeight(FontWeight.Bold) + Button($r('app.string.ecc_callback')) + .width('70%') + .onClick(() => { + this.goToSample('pages/ecc/Callback') + }) + Button($r('app.string.ecc_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/ecc/Sync') + }) + Button($r('app.string.pkcs8_ecc')) + .width('70%') + .onClick(() => { + this.goToSample('pages/pkcs8ecc/PKCS8ECC') + }) + Button($r('app.string.rsa_callback')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa/Callback') + }) + Button($r('app.string.rsa_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa/Sync') + }) + Button($r('app.string.sm2_callback')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm2/Callback') + }) + Button($r('app.string.sm2_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm2/Sync') + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/ecc/Callback.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/ecc/Callback.ets new file mode 100644 index 00000000..dc9cf6ed --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/ecc/Callback.ets @@ -0,0 +1,63 @@ +/* + * 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 bin_convert_ecc_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function convertEccAsyKey() { + let pubKeyArray = + new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, + 83, 96, 142, 9, 86, 214, 126, 106, 247, 233, 92, 125, 4, 128, 138, 105, 246, 162, 215, 71, 81, 58, 202, 121, 26, + 105, 211, 55, 130, 45, 236, 143, 55, 16, 248, 75, 167, 160, 167, 106, 2, 152, 243, 44, 68, 66, 0, 167, 99, 92, + 235, 215, 159, 239, 28, 106, 124, 171, 34, 145, 124, 174, 57, 92]); + let priKeyArray = + new Uint8Array([48, 49, 2, 1, 1, 4, 32, 115, 56, 137, 35, 207, 0, 60, 191, 90, 61, 136, 105, 210, 16, 27, 4, 171, + 57, 10, 61, 123, 40, 189, 28, 34, 207, 236, 22, 45, 223, 10, 189, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7]); + let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyArray }; + let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyArray }; + let generator = cryptoFramework.createAsyKeyGenerator('ECC256'); + generator.convertKey(pubKeyBlob, priKeyBlob, (error, data) => { + if (error) { + console.error(`convertKey failed, ${error.code}, ${error.message}`); + return; + } + console.info('convertKey success'); + }); +} +// [End bin_convert_ecc_keypair] + +@Entry +@Component +struct Index { + @State message: string = 'ECC Callback'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_ecc_callback')) + .width('70%') + .onClick(() => { + try { + convertEccAsyKey(); + this.message = 'ECC Callback Success'; + } catch { + this.message = 'ECC Callback Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/ecc/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/ecc/Sync.ets new file mode 100644 index 00000000..bf5c93cd --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/ecc/Sync.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. + */ + +// [Start bin_convert_ecc_keypair_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function convertECCAsyKeySync() { + let pubKeyArray = + new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, + 83, 96, 142, 9, 86, 214, 126, 106, 247, 233, 92, 125, 4, 128, 138, 105, 246, 162, 215, 71, 81, 58, 202, 121, 26, + 105, 211, 55, 130, 45, 236, 143, 55, 16, 248, 75, 167, 160, 167, 106, 2, 152, 243, 44, 68, 66, 0, 167, 99, 92, + 235, 215, 159, 239, 28, 106, 124, 171, 34, 145, 124, 174, 57, 92]); + let priKeyArray = + new Uint8Array([48, 49, 2, 1, 1, 4, 32, 115, 56, 137, 35, 207, 0, 60, 191, 90, 61, 136, 105, 210, 16, 27, 4, 171, + 57, 10, 61, 123, 40, 189, 28, 34, 207, 236, 22, 45, 223, 10, 189, 160, 10, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7]); + let pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyArray }; + let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyArray }; + let generator = cryptoFramework.createAsyKeyGenerator('ECC256'); + try { + let keyPair = generator.convertKeySync(pubKeyBlob, priKeyBlob); + if (keyPair != null) { + console.info('convertKeySync success'); + } + } catch (e) { + console.error(`get key pair failed, ${e.code}, ${e.message}`); + } +} +// [End bin_convertbin_convert_ecc_keypair_sync] + +@Entry +@Component +struct Index { + @State message: string = 'ECC Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_ecc_sync')) + .width('70%') + .onClick(() => { + try { + convertECCAsyKeySync(); + this.message = 'ECC Sync Success'; + } catch { + this.message = 'ECC Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/pkcs8ecc/PKCS8ECC.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/pkcs8ecc/PKCS8ECC.ets new file mode 100644 index 00000000..a9c12d2c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/pkcs8ecc/PKCS8ECC.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. + */ + +// [Start pkcs8_convert_ecc_pri_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +async function main() { + // 创建一个AsyKeyGenerator实例 + let eccGenerator = cryptoFramework.createAsyKeyGenerator('ECC256'); + // 使用密钥生成器随机生成非对称密钥对 + let keyGenPromise = eccGenerator.generateKeyPair(); + keyGenPromise.then(keyPair => { + let pubKey = keyPair.pubKey; + let priKey = keyPair.priKey; + // 获取非对称密钥对ECC的二进制数据 + let pubBlob = pubKey.getEncoded(); + let skBlob = priKey.getEncodedDer('PKCS8'); + let generator = cryptoFramework.createAsyKeyGenerator('ECC256'); + generator.convertKey(pubBlob, skBlob, (error, data) => { + if (error) { + console.error(`convertKey failed, ${error.code}, ${error.message}`); + return; + } + console.info('convertKey success'); + }); + }); +} +// [End pkcs8_convert_ecc_pri_keypair] + +@Entry +@Component +struct Index { + @State message: string = 'PKCS8 ECC Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_pkcs8_ecc_sync')) + .width('70%') + .onClick(async () => { + try { + await main(); + this.message = 'PKCS8 ECC Sync Success'; + } catch { + this.message = 'PKCS8 ECC Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Callback.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Callback.ets new file mode 100644 index 00000000..ecc1a4fa --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Callback.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. + */ + +// [Start bin_convert_rsa_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function convertAsyKey() { + let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024'); + let pkVal = + 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, 174, 203, 113, 83, 113, 3, 143, 213, 194, 79, 91, 9, 51, 142, 87, 45, 97, 65, 136, 24, 166, 35, 5, + 179, 42, 47, 212, 79, 111, 74, 134, 120, 73, 67, 21, 19, 235, 80, 46, 152, 209, 133, 232, 87, 192, 140, 18, 206, + 27, 106, 106, 169, 106, 46, 135, 111, 118, 32, 129, 27, 89, 255, 183, 116, 247, 38, 12, 7, 238, 77, 151, 167, 6, + 102, 153, 126, 66, 28, 253, 253, 216, 64, 20, 138, 117, 72, 15, 216, 178, 37, 208, 179, 63, 204, 39, 94, 244, 170, + 48, 190, 21, 11, 73, 169, 156, 104, 193, 3, 17, 100, 28, 60, 50, 92, 235, 218, 57, 73, 119, 19, 101, 164, 192, + 161, 197, 106, 105, 73, 2, 3, 1, 0, 1]); + let pkBlob: cryptoFramework.DataBlob = { data: pkVal }; + rsaGenerator.convertKey(pkBlob, null, (err, keyPair) => { + if (err) { + console.error(`convertKey failed, ${err.code}, ${err.message}`); + return; + } + console.info('convertKey success'); + }); +} +// [End bin_convert_rsa_keypair] + +@Entry +@Component +struct Index { + @State message: string = 'RSA Callback'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_rsa_callback')) + .width('70%') + .onClick(() => { + try { + convertAsyKey(); + this.message = 'RSA Callback Success'; + } catch { + this.message = 'RSA Callback Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Sync.ets new file mode 100644 index 00000000..cdf63892 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Sync.ets @@ -0,0 +1,63 @@ +/* + * 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 bin_convert_rsa_keypair_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function convertAsyKeySync() { + let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024'); + let pkVal = + 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, 174, 203, 113, 83, 113, 3, 143, 213, 194, 79, 91, 9, 51, 142, 87, 45, 97, 65, 136, 24, 166, 35, 5, + 179, 42, 47, 212, 79, 111, 74, 134, 120, 73, 67, 21, 19, 235, 80, 46, 152, 209, 133, 232, 87, 192, 140, 18, 206, + 27, 106, 106, 169, 106, 46, 135, 111, 118, 32, 129, 27, 89, 255, 183, 116, 247, 38, 12, 7, 238, 77, 151, 167, 6, + 102, 153, 126, 66, 28, 253, 253, 216, 64, 20, 138, 117, 72, 15, 216, 178, 37, 208, 179, 63, 204, 39, 94, 244, 170, + 48, 190, 21, 11, 73, 169, 156, 104, 193, 3, 17, 100, 28, 60, 50, 92, 235, 218, 57, 73, 119, 19, 101, 164, 192, + 161, 197, 106, 105, 73, 2, 3, 1, 0, 1]); + let pkBlob: cryptoFramework.DataBlob = { data: pkVal }; + try { + let keyPair = rsaGenerator.convertKeySync(pkBlob, null); + if (keyPair != null) { + console.info('convertKeySync success'); + } + } catch (e) { + console.error(`get key pair failed, ${e.code}, ${e.message}`); + } +} +// [End bin_convert_rsa_keypair_sync] + +@Entry +@Component +struct Index { + @State message: string = 'RSA Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_rsa_sync')) + .width('70%') + .onClick(() => { + try { + convertAsyKeySync(); + this.message = 'RSA Sync Success'; + } catch { + this.message = 'RSA Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Callback.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Callback.ets new file mode 100644 index 00000000..dc2e5e46 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Callback.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. + */ + +// [Start bin_convert_sm2_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function convertSM2AsyKey() { + let pubKeyArray = + 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 priKeyArray = + 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 pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyArray }; + let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyArray }; + let generator = cryptoFramework.createAsyKeyGenerator('SM2_256'); + generator.convertKey(pubKeyBlob, priKeyBlob, (error, data) => { + if (error) { + console.error(`convertKey failed, ${error.code}, ${error.message}`); + return; + } + console.info('convertKey success'); + }); +} +// [End bin_convert_sm2_keypair] + +@Entry +@Component +struct Index { + @State message: string = 'SM2 Callback'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm2_callback')) + .width('70%') + .onClick(() => { + try { + convertSM2AsyKey(); + this.message = 'SM2 Callback Success'; + } catch { + this.message = 'SM2 Callback Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Sync.ets new file mode 100644 index 00000000..49b062d7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Sync.ets @@ -0,0 +1,65 @@ +/* + * 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 bin_convert_sm2_keypair_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function convertSM2AsyKeySync() { + let pubKeyArray = + 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 priKeyArray = + 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 pubKeyBlob: cryptoFramework.DataBlob = { data: pubKeyArray }; + let priKeyBlob: cryptoFramework.DataBlob = { data: priKeyArray }; + let generator = cryptoFramework.createAsyKeyGenerator('SM2_256'); + try { + let keyPair = generator.convertKeySync(pubKeyBlob, priKeyBlob); + if (keyPair != null) { + console.info('convertKeySync success'); + } + } catch (e) { + console.error(`get key pair failed, ${e.code}, ${e.message}`); + } +} +// [End bin_convert_sm2_keypair_sync] + +@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 { + convertSM2AsyKeySync(); + 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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/module.json5 new file mode 100644 index 00000000..4144486d --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..7e2611ec --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/string.json @@ -0,0 +1,72 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "BinaryDataConvertAsymmetricKeyPairArkTS" + }, + { + "name": "ecc_callback", + "value": "ECC Callback" + }, + { + "name": "ecc_sync", + "value": "ECC Sync" + }, + { + "name": "pkcs8_ecc", + "value": "PKCS8 ECC" + }, + { + "name": "rsa_callback", + "value": "RSA Callback" + }, + { + "name": "rsa_sync", + "value": "RSA Sync" + }, + { + "name": "sm2_callback", + "value": "SM2 Callback" + }, + { + "name": "sm2_sync", + "value": "SM2 Sync" + }, + { + "name": "call_ecc_callback", + "value": "Call ECC Callback" + }, + { + "name": "call_ecc_sync", + "value": "Call ECC Sync" + }, + { + "name": "call_pkcs8_ecc_sync", + "value": "Call PKCS8 ECC Sync" + }, + { + "name": "call_rsa_callback", + "value": "Call RSA Callback" + }, + { + "name": "call_rsa_sync", + "value": "Call RSA Sync" + }, + { + "name": "call_sm2_callback", + "value": "Call SM2 Callback" + }, + { + "name": "call_sm2_sync", + "value": "Call SM2 Sync" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..4483ddad1f079e1089d685bd204ee1cfe1d01902 GIT binary patch literal 12430 zcmeHuS6EX)+pUO#NL3(IK|}&d7YKwF5CM@UBE5tjTBw4Q5KwvxB2pw25vBJIB27p@ zOaSQt5eZd#CxmkF|4+F-=Q)?(#XNgvmzlk1)~tDFz3+~Fs;5bRo%8yoOPA=i9zS|^ z=@P~5f9V?4rAwDs!Yjfq4p(5Rx~i8hRVUG&*j~LT%Q>2AIqB+Nx_^yhg70E+c&i!%2~zqE0}mxIX= zz1$7|sWj&3yL#7D|4uLjQqV+x(Rz4WC{A9|^m@1A6`BNi38Cf3B^aJyqxF{TjS&2q=3$BC zB1Fu04C;%o9V_Yg;Ed;xpmge>%b<|5q52W_pTd9o;Qty2mQ+-Peu)^(K)RH^d5byH z>AGB-I7$|~9l)J0H_LPDsUUL#brIHpjO1>dJ9@_5&W zLV)s!AVn7*Hy{o<1zLA_Ky-TWzJ_^1=W=Gfyc#1ssqeY_2ww>;ANX%JT)(9uNHOtU zeqU2_{Wu6pLvCMBLgy+dx=13ZG-+cMrBf;#8KezD^}_F2x>_Nob0^iXEv>aML;8RQ@@sN(#bq~VsOa>) zW9RDe#_!zLkj)PyQ<05AjbPk5yJ^|B6q=sMX2L0JE|(P%=v2$6+4QL)cu$c*yt`EC z?)p#@xE12zK?QF2u^(xb0>KieYWS%DH`?=eOiFd!6)WRmCo6Joq6}7e=Nl_;oNJ{1 zu&szm^c0s*wAxfHSlk^+hb)aB<&B?9+_YvxC1LEy$(dDJ8J)d!>rwz?q zGTpJ5&uVwR#t4%B`T{*~RAd_Unnf&`*9c^zbZfsVc;v*@=BHOCX7VbyhnS5G*Pik} z@`U!W&dq$A-&GCYAWg@rG3W6ANL_2a)|;&HJSig{zyfyO87W{;ej&@-)yx~eu|G6S zO)U5U?QD)!ey@XcxEKX?m{R4VZN!*V9gT}6_lv@YD^}}y4OM(*#%kMMBij<9x4*by zCkGRQ3vqoZ)HvQ4oY~=kh{c09u`@Lzqk8)3R+$+hcYuhqajQqgq8qWy8X_QMy@1+T z0&yU)D$XzuW+GZpAB%%|^3*{x!r`8nOWhu6>t(2mvERH# zwD(@F(UyHL)A@d0q#?|SOaIrK7`~^_KhtD69y6E{G70hSpvkOuvhEmR1(|2efAmi@Xw9*}m%vZb>kVqe?t6*aL%179k2-;CD<(T2&{-rQ;%g&4b= zStwf@&UH8&T6lBt>jybuLy}~>HTF7(kmQuR6(8*l&xSQq79o~y=t@1Z0aSiA&-LWp z0NQ{@*q$n1m#1Z}?sFj0=6jxX!@eHh_D<=qD}vOG`kCQ^44In=iDu`srXYt8{4c&) z7G9;S9(*ydG({X#u#N%3l}&Yaq*lzrY-E%htNRQTrjCrX1NMi~a!soU$|=0*dXokbDxSFnm6OHLV@%5(K&ZQB%e+ZFne-TrP|veCOrVj;0pG zdbMMl{Z%MBfVA6b>SKLi zXyRQXFc}Krl(owbvDh?Um&9l0#P)rbdiZxK)8=RY8XvSG1@0=@vGxtW|3E{`T&9Zk zC0==A6=d?8`t>?}z3d12SZ$YU4KZHQPf~|w zJD7n^6bjSS+&0Kq6nxhj*9}9qDZC~A`nzEz{<+9lxx)v#qaCsGWko<{ahFVncU-R|715> z33|Jp;8Iq?Z)NXe;h$K{z8#lRB#JC*XUod!9+#hCfkg#-^FD5Jq@>Dt!SzYr@q0(& z;I!1>qg(PU*HMX7>G-#T5V;IOw~4L@XQ&5le>B4Va!sx0P1pm1PMa!%L##WB{CukUKwQLR#mw_r{d1DneIIJT(j#O#-det^FD zbdwZ-8R%84+Bo+g5iyd(a6x;*5F0xuclibP*ff{7PNPESiBNJu^Q2?h!4}38?XKcb z1cb%?RlBpM10D9~`7(D`#uzQxY}K)shcU_}%#WJZ`~FU)C1j&^b5i=Wc7uJW8^-NB z(rs3^Wms@#S~)+us~_(~uocjV^vU^euJHB^upc~CY%6gqBXHR3{FJ}D^V0uB8xrdo z%j>^}CvVUV6jaGJf5i$e;gXng&>{)uK?nWhEUaVrv+x8njtfCz>cqP8uUTn1`McQ;CD+jm zGle#Cefq~0!!v@W2XnNsA~8j@Gaaj+fT)QzP<&gR$L=bGEJ8^z*tHxS)sZ=vZPV!4 zw*)4rK3To_7<;de8PvEPu4Q5d;D=g00$bPnaG|sEP6(kDsxwc2+y=l@=8Gy3^DW?X z$=3@Y|B6^8mUadWxX-6z(Oh@9|3%Nv*Hz=bA3)}AiK3MrA@eOvp)YSd(Nf|v;6dz-v zI5xYnKImXz)PTM}jxK=GJh_OrE2HXqKgh*KB!U~;4W!DpXN6A98^kNt%~i7+I+`g5 zW}~Qod0A;Lw*Q@m73+!Rfuir!WXqcTd5mXE^DWV3AUSVk>5EA&b6Svd&!yh*!z+6( zh^>CvoV~2?y`UJ#Jho<+PlUEw=Y?Hyd8C#Oj$c!5d!Du*w4OQ9G&OxhDmQ=)tzD()srM-?#=f>aw-$x}3Z?qLOIJ{gnZu zd`Y3Pu@-6CD7)$*a6189&`vfy%c7^DmCj90Mw>5FgU_yh15-*dsMPOLpn%G&Gbq@c z)NN;i4jF!g3-}@w-}i(YUbp4WY;xYi8`sa3ep2V_UXf_!7A{;Fhp25CGF=6{xLd&d z!Mvrklt74KI=0hsCRMYBXM0Z?v1sDfN=Y&W2dW!hUyqiiU@A}R-XCxbIudes32?<&DQ!Hr>qn`aYQ?jSq?4X|x(CCDAB;b=wcWVCH1CfwqU1di z!|LlwpE@R5*{9XlM;`OM$(VZBN$c{`%$ZT3S3aYJwVO}kw)@4_EyP4SXgXkd)Q z7PtWeexnE98(N{TMKt-aG+YpQs`a~e_Y;}upm;CRXlTWI->sMI?cj%D`$7K@mQ<-e z6c3=23v>}kQ!+Z{G2&KQ99s+el!e053~lQJc`8%`$;xt_RQ&16M-jjl$HK)VZG-0esPL)%m(*xgTxhvj>YKkE?dOv3G%g-W9;dgR&pG1FoW|wrm7v|b_Y-VU zKV&S7NcSkHSjm4nrPIy#Wvwp8(lbN>^x7o60ICQ5m?QwOuUY9q(q~<6`0+a7 z_`Zhdli4>YUiT%XT1&z74m|S7pZ;||I*2@$Zd5=|9{V~xFLGS|sAE`ZQ=toXwPUzSz%(Ar!@#M}4%I2r*Ca<9 ze?7@cjo0^QC6zocYls~PXjm{I-w|^|?Hpmvl_!6;&?vERiS^(A2e-)2qxQ#IfuJ_M zgEhyUo8K;fE}w8OE$6nq26w$M-YgMyeYnhwguXF-@5ca=0xYn%I)Rl=_lZaUn5tgl zq{GPw`_E=ilA8s)Jy=%ks{*^ijmr0SqHYg5D%zYfzlqy~#fp6GHI7wm_SN!mo*B=(4jED535Cy$0WQgpMk_!VjQ zhjwgVnse1csNUVP_rkF)3q*bk`=D| zRm=kyT3qxBA7a}d4b433h)JR1r_zBVy6)DMRyM?5%=@^}YMnjurETi?w8)8Y2lox+B2Mc9(WcW709kmg&QO^PydT;QZ_K7tmYO8aA8M?Y);N zSn^>S4^jpy!tF}ZAn_;hcCNY$eyakky`&>*Nh{Yf8H17GR#{9&%f^ps6IAlo`0a7| z-5WT~hwWze!uONxb4D$Was0UyM#f|Al`@rMWg(+oyWOL{(2>P6$`ht&d;q3uD6W+D zQQKN!nzWpx$Ya8CUKa3dgn={(ad!Lm7qDcu`SB#dKHvAM#GW}Z>EZmS6yG22dWcVi zef}3H%>*xQE6XidovM|h{PD;~31ijm0ia9g=-tnlFk!0PDn12luSSt7gWP{nbUK-G z_;*xp66cFpR2OkYg+1wGZF$3SCHuNOh~T{QxmE}&DI?a%s+Q&BqRkJ^37TgbKmAKA z-lXW9)FAv@J#Z=C2lSk4@W5q7S0~BpAs>m(p{^)b2MCFka=_0~yTtPvSKJEH%6&GW zKv;f{iTBYXA0^wmTAmssRXI(3556s-FYRfgXSs2F7D?)Muw3X(n96>Fe~#_y!;5dQ zdOQ?Kp<{m8r8ee4PPIETr3Sr=L{BgNp=Hl~>nSiYS!vY-rs7>zJE&K9>k00!&bs>P zD`CMT*(GNFuh#^fdZE?R`V};&3K^rq3z5UT^^KE~V+Yq@nxU<{+Ug^t(FEIk@f~5* zgnEN(6_Zcdmg55!i|T1Xn2NBcinnnFghvgYxT5oG<#r&$ky|k5SaFs(+Vr@W6W!wc zhr8=;xACvw0kVQ6m+uK@w0M_|3*`l1D1SbQ1B%k-HMIa!=~kGkCfuQ8^C^ZQ&7xn%?zUs@ zJv~f?$}gE-(aEgrt|vKx z;}Q@0S-w8jTszP4_+Em>MvCg@+IT%eNk_MIr)gA`;*lhuP%vm}{=>pIah-$r^3{Da zp;l8BZIY#N3v`sN%POMh>Q=e-o^BM2OK_7-ztamrbZ{m49XWXIgg1Gqa+C!XfX?gxVvl@Yc z?lm`jKKariU3($HdVP4LPtp4+4mV=+tw*rjI~_q%R6DfIW|6`<`}My)W_VK!6c^i* zIvi5RI=c%+#{fOc1^%pnKBkmGk{n2 zC<)woa7^dmGd|$2v77jNVg{v9cP;?R<5Hz&w)i1YTrbpNc6%p0{Khx8hi!J94klTx zC9LuDS+2u)()U%ug}~voR<>Cq}#OQfXF2)TCm)4nk4dkJK<{Ji<% zcP30SBMi`eN&Lves%5zi8b`z0j<83Tc~cBqc7F%;N9zZcNAe!JR3!n;@j1h z1lCS;R&Xw6EFbwYNCw_`r4_DiPb}ogRDYy^watxfz7Xy(zQ=RKaRMV#RY}`WgLrrF zVY?S>T2T_0_gmfEc1P>euBpQk$h-TAw(GijhS$+YK=Tg$zQ6?>D}F1vFkHMoukc{a zEy_ED8Uf0r#&yr0HH7|2|B-{vV9-6x6%+AEp3Hd}4fvb`f5|t#1a^r!L``xWv0pYp zK_sWYo?M7Ka~?Ti?_2#VSWzD;+NOTq_0`+=>-+<27aH>r;wtxc2mAJdsVzr(62hGT z)&mW2D1I;#ot)2O9iIWid6J}Na=-qm<@K(sk9ppYVwcO*IkP(P8P9ER7!PsMfNBn& za^K3zdtRPHN^c^l9lmBs5m>rjxgOV7Io|5p!v}X)j;Ax&u7K?;q%XjX_~o%@lPr_8 z*9Uqq$6~D2?gL>l^=mP&+~8z3yT!99Io|+z9QCQwYR2S? z(t}t86UG(B`86l3E&Y`O1p($K!sj_~Szh|(peg0h(+?ymZ?)sk6C*iUD89q@SVAIS z4_&>H|FtF3pZ<_*-;w|rv%!y93`xISUXVWp-T~!8n*#@16?Q}v>{P^~9I69_ z%n*6qXY%Yy!%fWkW5OADjlkEKjP5d$8>`wRrhp=ra6@iEL)prjHQ=o3@+N$WN7maZarII1Zz-rqUrBVRY znukG8!4Q$))$$`IcgoPA;izr~)m2%Wl&%&EHeRmOXUJsiSwge{CQ5;l6K*f{(Y$dK zr+Ms$jZr918R?`Rysv0Z+#6wT~L%t0b;+Q^{rT$Y_J%=|3^Wd zt6$*epNax{<>cRLLyEm2t&MjM8j1U)pYxwc-MDWDwN~$V|G#;ney}e?-YB~f0-n-M zw?G0{JBvufZPvKoY*5O85X8y3)1IFwLkMFr+5G1knQdDje8Y{BGoelP12*9EUN%KY zxk|^L1xHs)rNCp_@p0*`=#9{%r)_7IsX3T&x{b&X;mgnjUOMtgKs#ylC}%kSdtkjl z8!FE;zg-elNMzzYzDjZ0)^Ieq?HW_G)|Sg=4mBA1EloCGZTG(+tr)OPwRZ{J7OY5O z-u^rg$|QACu3Cq*Al+><3gPrW!35XM#YAriTfXw+!m_NkpMN$HY+wKfNr4L9PYUX6 zzlS_jplR*TFaNt8ide7lbsipOGdSE!+zhi$@D8y%FCwjQ$r9L{z>FOk9`c^?Kjmj` zMuYzJ3lU=4n6Q;tr@a$L?%8~af{fraE2*s=hn>Cp;YCQ#>re~C6xoCO7}(mj#Xh*k zba*^&l5yo%qnHQd!W*<-IXZ+8vnMb>c^cM={07F5{v1ulw!aVecf>C42Ir44Vz);s zT-%=b<-{YEZ*nD{U;m4uIi#wyf4G^ggB0@5%#DRIbN7hz&!Bb!hl?A6#(~|dZ%%iN z%o^Sc0oq?wn5_;1HQ*s%km5+`HK!Bq9^dL$ZL7!o2j@&piKs-)bi>dGD9BCC4PSIk zrGJIk0P-Fv?{`4G0`eU>*i`V_XN2xXw%*xTUlVENh%_|iZDkl5p@Y866#=@Xg{cbE zjZtS75AB(^xEogv2B)1x^m!0XZdCqOZ~=~2%7kuI!6E74!u_j2iau*{do^aD^2Vk^O2eW~KSv(BzRD>xw` z&*Gb6ksujl^_Fg<9{Nxn%B8jSv6jcmU+Kw5-Q&psk7EU|G|_)%rogKwNzemwy6QX^ z@ujX`ZkT$alQ%3oWJ2VOJGz{G(ukN|LF&Ga)nKml$M>IY@1F)}2mL&m6~?A)CN|YS zLi^lZj;aN$DQnmlc~AgqcDB7)?<<0=D*JMD zM3%;`BX_AsO%3+;YjwAbOnkT+m^;*q5X>@S2hO@Aa1J zJCCx~6B|ewT}HQECVls)>JqY95!(x8tJTl^D9t}c_G8p6;&167Z{2*+*qbjZdPBKR zwYTwFdQwnL?Q_fZ1S5+O2`Bi&@(s_P_cQY7?>NOU&FL}U5YmlM6yw@TASK}~;pon& z&{?aE)kw+rf)rVR1R!KIA&R@6^&5tt+oJ8h+P)7GWpbZ0xhG1hCCSz8pFjdYT5mJUum4y`e6ST z&@%+@8U+Bx-^#X6vpu~G2`=~;;97zryltTvX_;q&`r%A)oV7(xhxX1-Obw!r%_aBq zXumue@LLi`iFY=9t~-zHYJC&!zW;W6TKK3YgAe-4E5@wu_HwjtlH4Ep5vqLS-2C5$ zSxHdkc#a7g$_vSgCJ_dxxPL&~SeaPflc=j>z18KsBxhHfhSRvim6wzyuJBI@*m2g@ zc2$Hh#1|Nide`x;s zFEY{lfS)AO1(&M2`md$eil6mNBxu2_M(#la)vUt>ub2uO+!3=jb#6Ic2xq$*jBF`n z%L9sP{NK&^17myQl!*yca`I%e*{%{^D5ld#5&5Dbmw2He%xl{Z?Bv@+UmIbjXEHB5 zH5Sh@UPidw19)2ZMmXkn`O@)IsF`Fbj+RLtb$qTJ#B-vXrZ?7??}cA6N56t|TzFj4 z=rAukcL+Zk?vE$J3_QP=HeaZiJ>sPUrar&8Ao}%X-FpDz+o?UsRbtr6!(ES)@vCo94^P>R%u%q(-9wy%Duenrn)jXuW z+2hV;WWLbrH-awRI4^BBwkb{USY=a|U+=L6IJbHc+!%aSb|KB}H$ z?;wmaMfCf`2o^LLsVRHayM++C2aVlLWRbMjawRSh!|`u4I8tjLx>H>?ZR&ba(LJXj z?DRP5gyUNUnznwc)C%qsQ!aTlw6i(@viQ+~|0fLN?FR=&Mz z!m?8%ms9Zm`@?A{S+a>p-JQ}TICnZa{gktp_;s>#3Wv_=7#GC;f$M! z&TRADKS2F7Grq42P=N2(^g3PHSv9Sr5khe~OZap~yE3UUWM-{Fh{H-BGK9MOV3L#y zw*TZQX^enrYRj7iXkEaCLTZF5z%T)MU*{_RxA-*;G{sl{7ry_e1h+X~HM>NyBnnV6 zzcFEEZvv5PId&nY^VG0nqu!l%4Ln9L8OVmkfQi1}=-j_u=t%I1_~|`SZ_zv+SV@2>e1;w+Y$vY75F((`NKQU2vax&tTw!~HE>c2M3z3d>g zk@W;ee$-qtx3IgJ&cQ;-5AmGPIIdtV0YQvcV7G)N!(PWkx#qq=;AiOzb$C@x+Z zu##CR=Q`hVF-LGTr?w9-umq+&6PrkTr)T1CJ!@XV9i+em9sS#E=UO}BNMwuBrCayH zAub{V#`%5ecrycz1$eSV8<2Ikv6CQ5E=h^K%3m6h74APzqFYP{oejD^Y7o_E2b3p| zeA*LbkS?zNs8`f>wX`CuZF=Vcnc?D9l|P;QF8KedIQiHkm!f>Y3}# zl9AL|w=FC#e&CG1Vj1SX@K&6z&wEdwI}i+9}=0 zD)hP8t2qSqGq-zz1>nRbHpsOX+Ou&rc&B>1K5Z`l|60?OVRG!%y@dyXhC`Y)1x&pBnbuTa%|7f^nM;OIHu%(W6&Ci`84e(2e5z z*ThM)rgG_sjP#cQ+Xs8;_5jS%p3?)1Cd0epUI+qH6)RAoaWyIr#O{wWN#wI+_de=e zPHAv`+(8DcYwZezvF?o<#{{xGw05-!dGx*J-i6B-YsG?>W6ke;g4Hg#P+$=@?s0UEI-*Bw6RE<{1I7> zjBlz61z%K{w(Fbs@*+5i`|zyRlh@qP_iu#(*1Wcpz$is&$q|YHc+dRFT7N)#@B@znBGn$2wXOi+ggc5BJ<+2( zlI3ksg*I$2(gaUp4h9pJY${1?hgh6#mU-3e=N{4cTb2V_4R`HbSASd)X&1AJD{hd8 z^}36_R=S?hhh>k{b|Q{V4g^$!<)__{4ZCIAOzE}*nn%8FpA_Bmaub%88)q94qdSj& zU&K}EwoAH(N;V`V{ZfKgP}7P8xX{2STb>)D)y3#SF&&=+6Jz=_o8pqGbBI1lUdL(1 zD2L567hm`YXfrYLV3fz4yv?7yE!3uaicqZ7ufRny<0U&B6qh8bcqsL`r9)-JOxkXy z+l@a1(ptpJ`{M2l$g!g@DX;KZcoPP93JT=vi}|dQ!tn5*k@U)brT5a*!NEAJ2Apj0 z3jNsKvYjiiy-sUG06+A3T)f+N_X|`ZAX$1+M8W1ZaK3Nm6Dd}Xw#CnL+A?Xi*n>}B z+g^J-yeBCQ;(6yjA1~5bLwIzXXp>6syw2d^&DXBrf$G@}~y*QOne;u_UdZD^Cl zXxza$QKpgXzp22W4GZI|8N{0M2?78Z`$wi+S>waN@uSr9`u5+ghvrjfhcjQNuoDp; zk9szfi0j_VBAd2M+55}LBoF!BASF5?QV6q5zf94lQ$2goh8#I@&N4tiMK&5WOgt0H zRiGPL-7G)N zj%2#teK$kweDwBL1+DK?B#>r?tjR02JIr zUq=)|zME?3CA9?-DRGfqM+;h7w&xgGmLjhTAOdy`b%#?iM;>=l7v)^GADOA64 zy}x#1eDIpJ^iQ-mHzp5#R2_{6(~wo;npi>z4tuCy@Z6Ovw1EGFOaCWi{Qog*{?+*F 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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..88273420 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,12 @@ +{ + "src": [ + "pages/Index", + "pages/rsa/Sync", + "pages/sm2/Sync", + "pages/ecc/Callback", + "pages/ecc/Sync", + "pages/pkcs8ecc/PKCS8ECC", + "pages/rsa/Callback", + "pages/sm2/Callback" + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/BinaryDataConvertAsymmetricKeyPairArkTS.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/BinaryDataConvertAsymmetricKeyPairArkTS.test.ets new file mode 100644 index 00000000..2dfb95cd --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/BinaryDataConvertAsymmetricKeyPairArkTS.test.ets @@ -0,0 +1,170 @@ +/* + * 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 binaryDataConvertAsymmetricKeyPairArkTSTest() { + describe('binaryDataConvertAsymmetricKeyPairArkTSTest', () => { + /** + * 打开应用 + */ + 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'); + }) + + /** + * 点击按钮,指定二进制数据转换ECC密钥对 + */ + it('testBinaryDataConvertAsymmetricKeyPairArkTS001', 0, async () => { + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('ECC Callback')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call ECC Callback')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('ECC Callback Success')); + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定二进制数据转换ECC密钥对 + */ + it('testBinaryDataConvertAsymmetricKeyPairArkTS002', 0, async () => { + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('ECC Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call ECC Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('ECC Sync Success')); + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定PKCS8二进制数据转换ECC私钥 + */ + it('testBinaryDataConvertAsymmetricKeyPairArkTS003', 0, async () => { + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('PKCS8 ECC')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call PKCS8 ECC Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('PKCS8 ECC Sync Success')); + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定二进制数据转换RSA密钥对 + */ + it('testBinaryDataConvertAsymmetricKeyPairArkTS004', 0, async () => { + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('RSA Callback')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call RSA Callback')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('RSA Callback Success')); + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS004 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定二进制数据转换RSA密钥对 + */ + it('testBinaryDataConvertAsymmetricKeyPairArkTS005', 0, async () => { + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS005 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('RSA Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call RSA Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('RSA Sync Success')); + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS005 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定二进制数据转换SM2密钥对 + */ + it('testBinaryDataConvertAsymmetricKeyPairArkTS006', 0, async () => { + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS006 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SM2 Callback')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM2 Callback')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM2 Callback Success')); + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS006 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定二进制数据转换SM2密钥对 + */ + it('testBinaryDataConvertAsymmetricKeyPairArkTS007', 0, async () => { + console.info('uitest: testBinaryDataConvertAsymmetricKeyPairArkTS007 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: testBinaryDataConvertAsymmetricKeyPairArkTS007 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..d0307377 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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 binaryDataConvertAsymmetricKeyPairArkTSTest from './BinaryDataConvertAsymmetricKeyPairArkTS.test'; + +export default function testsuite() { + abilityTest(); + binaryDataConvertAsymmetricKeyPairArkTSTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..d584c19c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/hvigorfile.ts new file mode 100644 index 00000000..2a5e543f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/oh-package.json5 new file mode 100644 index 00000000..e41bae02 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/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/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/ohosTest.md b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/ohosTest.md new file mode 100644 index 00000000..aca67a6f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/ohosTest.md @@ -0,0 +1,14 @@ +# 指定二进制数据转换非对称密钥对(ArkTS)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ---------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,指定二进制数据转换ECC密钥对 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定二进制数据转换ECC密钥对 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定PKCS8二进制数据转换ECC私钥 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定二进制数据转换RSA密钥对 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定二进制数据转换RSA密钥对 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定二进制数据转换SM2密钥对 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定二进制数据转换SM2密钥对 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/screenshots/BinaryDataConvertAsymmetricKeyPairArkTS1.png b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/screenshots/BinaryDataConvertAsymmetricKeyPairArkTS1.png new file mode 100644 index 0000000000000000000000000000000000000000..569a92a90a4d2314e896998cb40362c315928fe7 GIT binary patch literal 77410 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

P?~45eKB)JFv$)rSSh0hKkoWVWQ<_&?>Wx$I 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%0DyX{9wx76 zX2;X9)EmRKYoUgBDI2lV^X#~*=nq-s=^L)frAbvT?e$7}tY!vph_o*GZln`4ZGb-h zTA~(xd7@;4AVC{~(bwTUcU$Ton6clBb+{X?E=Z?Qxr&vS&{(O;y)$VSdK4#3~ z3Mo?z`_dW>f74m)tv07UC9@0cVck1g_0gQtcRa&-b}ekPO?3ikm$ZKkZ@&-8ufdZjq#_e*;_|*q1!EcFi24bCdCvpLT~Tx zT}U(y=#e!@X#uXhPAI$ >9SBP$mh4ImFfKyWJWq$Eb{TP$CkFjdA)w4%f+3CGN z-PyYe!~^{TW^VnGzZC)1*2V-zpcvyNym>luQBH0o=A4-o7by?G+|_^TH9r91|LMX2 z7>}E>wH-r=%~ZVhTz5{@gke8r$BzXiQ*|@#fnK)c@<=Yl7Z(nd9Y^&IpZwJa(aLR! z%3{j-$qQE;&DLpy*12cGjd(@|`azd$#kB+B&Kz;Ow0pE%Jh$1@p`d36d>ub|6AtHU z>%g@(UKf2Y!xe~vH`?nJ;>hi!zA2Y6d(<-Jea`!6`Y}L{BD$fgX?KvSj`mu-07J_ROWOTQ+$krHyC(1$-PEG=knz?JJRo5m)OfqDVP zjfHx0+`6X7)KOE8Iwx+oj9P?3@$HVTSKe15k(}i5SOwJAhsK^XWAgMkgFQ=clXpRz zL3XYg=F>OmF}pt*PXPC zT9&c0n4WD4qxLV$wxTwYkI4*;Y^RC;C8v9>(^DBK9#^an>?BIw>n70f(fe*`+f4%R zJRLB;JsPBddgS0Cn&bcK+u;Xr;(=JO)I=BP*w*SN+$hM)$8g?F^f|nRPp^8a(3`7v zTEK7Llz?pJUU#H8NafGmmrTFqtz_Cm!jU(;19P4AX&=X#k{h|OGBwS85}SjCOhz({ z!t?p&nk@q?p!#0X#?xzYrv`;sB_Lv)fT#wFCQ^P}nW}1^ybtyC32b^WTH?yE2z*gJ zOA>1XJz6VKIxLvO`9U^z4#gSd4IEZTYQ7MD$JyE z|GhVk24*TLZ41dqVL% z|1nmt!C9SkqVAWXlosJf@3I_*cbO;Afq27%7NhB=sZp!)v57JjE23++G)@&fA(8PnqEFd|z8p`Po zPR~V^jjLdlWL<4&Sj(>HM|U#UUzsrWL3e%DP(d{<49U)O4!An+v{43UZHtN-Zwr#g zF6TiU*aw{M1fg8M%##S2nA15sr%UsZVHgtlv=V?#FXAV?#JR2QOdLGUWjCz+6t()UoN4Z z)Xf~QHMmsH=J-UbMDO?%NB-Q=MCG~2IWo^^HwEeLm5PM4_czjR>>qU53RC48i;Wjf z)bCSu(<-G9>@Q-3*XpO zd?wK!y-dM=j1n72rf{N)SS2YYY{_rDL=$9C!5Dm(OY0Z;Jx`}$=LNfZcDm_=0;QPpq{SM zsOs*Yt|i>Gx>%K!hBdEl3|8{-WZ84@?Mi1Zvk&Z+EI_^&E1eQfaJObVt_Xj1{xs2U z;!;<>Us$1BN6Sc^c%e_Y1YkCHtaNJ@$s;uF|2BS1#aDO2Sek5x3z)u}O@9956`@*r z9ATB1rMP3%@N`3vz|5((k0Tu6OFkOqJY)hc{HS-fKh(%=nKdW1JMP1lCXjUpZ^%e-0UR8I;TG9g8)al^;K% zuQU6^A{Fqu6yC|!s-NB?!4zJWS8b?dRy|)rSdt@?Q!|q(;|Epv$s`Gd$EX`M4jlPY zROD}6=CsiZFU#Taq6~}ad<$n=A&;ENfjKfUTv};fB_40QDj%Dr zcdk`wH*R3YYZ81L!$fRS=J9q4cOO%!!OQ$nY!|_&y4mRk)ZiXlhm#c^0{6w#q>er~8Z! z7CK<_CY{O7T^5}x0EgNV?b~{KboPk-xGck-_QogxFnL2(8`KX3u=7szO zZ4!`&WdDvKIEeSLO}o;H$h~CCMaA0d;lSfc8EApcj24*l#lk#8RWB?%yFWWR6P0Ux z!%?lU_!00@DpTDR81pmCz29M+STuSH-1RTJ{5jkQU%8ohR3X* zpFlhHqXnY#$4!6r8fn&tEYQ+D&udyC6xlDi3i}e)hk>DK`RB#}y~Hgg?75^zm-s`L zc6WZEOS!q^cLgGR2FFZoG8U2{<8n1aZw1wyxp4w;v%KJ;B|HN?7n(m!(nGgjLSab? zd8#H^$qsBHT{C>hM800jqaJz8a#PCQ%YIo0CRKwl;QvNnI+dTfpLE;~p4W zq#(APrY`XGDSU!`5+xh-!CIVL+e2of7#lPT4$a47-9j(8;XhFp-=*qx+3i;i@5mxu z$GFxi=Qkz0e34k1E(@0i>Tlsl2kQ0*2U##=c(%m-6K+)O?cqV%y9U z(Ew?qu)Yr(@4=wW$Ci0MV!#YTn!T=ldW@ooJSU@RV~|-h2fs9xZSFGkaE?qMBgkC_ z_IH?#6n;GKxmutuE%M*n{M@5D_xj8O`S7iPPqay;t4T=}2hS(!SM=}9r|F0Iuc)c0 z^r%GbAG&ZDgoiHeo;>Z`9Xa-OJ9GIRqi^$qd64?B-|p5KgX!b>)>Uhn`CBP6zZFV^``$4IUW@gI!GGpl5vN9G-nTZ%C@BI`! zSrqIuOB9R(*}!G{*;s)~J!a@$NHaXMiekmEJBI~H2l;mRs#~|t?J~g~F8>O>p_9Xt zQ0-{zi%hEt>7+10v0UPQpiO%Jr+e8%&mq*VSpus#pO>u_E@-~eG1jvq&wlbx!=V;% z|Fn0DZpTQv6TQo|OYB){5_C%NOg;tzZHGc14OeC}=cWYCF?`=G&aV!pbbhY8F^a`Z zQRU^RwUe96@93fWo~o8-G#>h~r2KL8+a*<4v{(W&tUCF*;~NP?gn^ozd~5OgOEvBu zvcxLt8s7d77X7K~1r;ubMUk;3BWEw|hTPY3nm*hP^B8tc8O3i4Oz|Q)2jm%Qph(z* zVxfWHaqG$4&H7-??j~+B83nPnC&p=ltWo6TX;OTf%q%?DMa#lKCGx~mkgDmIj(^Sg zUs^Rka1b(4U@@#;Y9LP0c`o^ow*XcpMYvx!8WGWf+40*NAI9USCi%}ENMSsntIfRj zATVnqm0w}l)I951S)~PnoIwj32p_XY01!jWX{YCM>-%G}(xxyoH$Gwye5Ur&gEHIT zV)$gqC3$6vyv_TQkckFtxZ{9Am^Ckl1L!&gkk3I2N&HzNIbQO*s$F*ie5E;2{M&G( za<*K79aA50f4VT*H#>^4nKD8CBMbw`1cnkXlz#&f$ zo1q%oEgS}AL^ z;Nq+l>lWEW2*>H!3g;^6^qnR*Z;PSI$pR)Qi`C)q#UIuOZZmdGDwpjvIMB=6XjC|f z45cxFk{m|>-SRVY4Wo3=x6qHH!~mZC8ma&y`oI@SjdXR66Op z(`8smh#4It+rE-gSi@72tv{8a$^?#9B`fM{D}rJ4Z)+Wadz8VR+jy_8rWxyY@e&pn z*KXkXGtCr{YjcNEahh(xN?{y7*66eGoDHxB;d;`bV#J+qZ?gIv6BVpYKYBI!fa%}p zKtWm}8*tKMH{F33Fv6lV!a7Fo*6P7D6Xw$WV9b%4Fdve$WZ;WbmgFL-(UU4a0mH;Q zKCh^ksgW0I(*NM}YNYuXOlBO*F3*H-bmPPK9rv9a+>Ofv~=!pP;O^c<*idtfKbCj||zw zyo|yuk{mo$$PU7)n3o04LJvPT8!F%Vn{l{r1H@-Ie@1i!M3|l0^_X?=oY27Wgea}P zYpbTT*B4Y2jV2NId{6XjV90AfxwKj6=hP(`UHQ2Noyf1!7KZ4z_xg#>ohE|& zI{Z;?F-S;;SrvZKu!HFE_iA8IVExNc)0DuvhP-i$A#OVEm;cH)|8l#Q_8>c-I%TP_ zc08rXWet-42S^a&mH8X^2}*wRJ;CbtVWFnY=eE@`Zw@9RFSC0T-ngyT&Y3q-b3;Wa z6+bO^3ca#`PZ04?!a98))f26R3H+J2RzJBnW|Xw*1_-Og}R##UTHb!nBc)|J$dL ziGZ~D6LCcsa)l6B8{x~uUZ<{*@!7sj@{ydPio=)4qUwHC6sS!Tqd&Y9fb-VJVRa}U z3r!d2&YI*#EnuBea;IzJR(aD)_#KGD=Zts$YsHL2Mv02!7k+`Ev#Fe9xKZ^tKVP`b#Cs~=D)z9eDk!7AAW;Gyjn6k(c7N|{~J#%jh=S8q!b+NwOI4PuPCzmK1a$3Yfo}4iZ?dNwI1pVh^e(vNB9zI4AE}_WlVi$7|pHO zt(ZzHgQbD=ualEAgwqK#bGcqbMBgHbBP1j~MUAL3V939IjI;qrGs`J_ASKc)bs+ql zu8H)B4rBVvn;~!6e*)GK=oy~aud@Yli&>@4KaCQ-mygUIPVe`MImR#b#9r}ZsR+Dl z7e|V|7)RA^m=EzMnm$I*^JXNAzp%5Lmr##l686&%D(8|XNZ5PJ*(cvOldz%3u8?uZ zxi)sJh@Gf;Ls_W7%)rhko}?U{86d<6git~1)IzFv9kN)uSRyT)4ngF^UV59MsK67dEL3chlwXJ-j9qxnIpDhX_=PDFiQBg&GgD_~b^B!0 zC2^$Q{b{i~`4r)%V>4gX%;UUG7%csJe{lm3UzT4l2OtbH9)tiD%(1T2M8ugzt|SW< z^$a_cV!EmKg6Ox!V3s~XQgB8Y8PgI!Qr#mj-Z|gqj!%yFcn+ntho}liVmjW0*bXV_ zk&!Yd$dU8!81`dzSB-w>coVr1(BRgE+2&aXJg!hBTM74<7tD?-La^ji?5A+ z>p=ze)pq5+_zS+avBl)qz0 zCKnzESKQYSzn;5$FLCqL@!0M8&dX2!mf>yHv%jKeg`3$f;gV|sVT=WLlzXLHWA}^C z+3@pZ!7b%QTs?J` zGctc{(Xc~9-~Cd{3(rO8%<9*nuL$}U0UYdoT(SnZpl?sxa*Tm@W3C$hORej7?i~G7-Ft6LxxeP)u}3N@ z_ZPGr*d*`xt-k&OO`z9-|9T!TGO7w*^(ErnMb6l$J?7kS)_|B?n67@Y>>~>bHm1iB zJY$=mG4g)LSfIjqLL>Wsx9)w@vO4Z17u}2uTq-*9z{9RaN6#6uyfdewB7iWJu8Sl~ zU`hnvtfJB-JKjn7MDCYW7v&MY8%+{_jAIeLYe6X_5ZUoy)Sgj?4OjnbeN&Qc74|&# zymkVdWuBIS6}$G451u;A=NUa+anse51K};f^6;5pU-RnM6K3 zRDq1b8_?vwaf$EWXXK`W_rPSoW1Pjs6&7C5KInNT5krJqw4YsM@rJx)NRuCi(72iD zc@#j%IdUR(@?+x1Ll>L!ai0fI^gsUgnDWDMssOdXweZf|yMF|)z`MWA{hX`CEtKUq z*_O{uXK|MVzvihtf)=~dLViUO^zcirip}0yccXXg5GvgrAq&yeFDD>3W9#qsF0k^( zP0V|8&kIxh(}1*^g8##=e-9<>2*;+wU?bH(KLgh>&j}+FbK0Wn~3)rWxQPs0G{$ zk6`7^XkD#-?cIMrz1RA`#`piy;phH26$gu#)Bmdg`j7DrQ8gz2>+rVw8{Gcy!uvm^ zn>um|j(~b`(89(4l_xL*%>(aPA*I_&Sq&@0uH#~|{}Xio9SrgRo*Jlbe&I!`|A{<* z0`4)+2#p`4>YlmM)l=`_CZOlIW5VcbO3dZ&7+ETpp0t}c1?Wo8KYh|#mblS32QCnY z=eLCVnp_CKGr9@8yu7c;yZBdDpj>4~&~YE3593E}Uw!i5`iw<^#>)qHTUFE<<0*W8 zG?DTmPoM1sq7z#AJDboL>UFCcG>InD3_*Ktk+bW>08e``R7Re3FH3oFKpB|2;x4v%j9N}zxFxtyMF%dMAJ9FQt3lN3Qn@#WD`~!L~b0Ve6KxWo2z9Bigi=AcAgjk_U86bkSO6uqBJBI;uNVlwMGXS$P)N+? zg?uT`{rd3a7y@(=nuWcbb3ZKN=v^1|QI~R5P2Q_EVznsE`rvP;&!RZ%_&zlqzD*M+ zAf#}SmM&yD)dEI^mglRf+JdYKUqvO_HDI}61AAh|Wk;pQtu{&S#qgi5_9fj1?;<%| zmH6{$-`OcM%$W&w{mM#SKM` zinN8N_`|;vQGTDjHOmm8UW?>Jk?wL88`Xp&D@W7o*F4^6O}!|xyP~h=t5=}QK z*MJvXnO}b%~L4}nB7Bl0| zQ9g!BA4Ml;f&=N1wXJvAf2fjRH&u2XNFxiZ1nWG+wkPCz2zn9eOZxx|Bq3|`AQ`VU z94q>J`X{2}1q?!Q^|EGU3}L3+qj1;c2n_5A<$v5{`RhTjB>+O)xWb`RCQ8kqo}m@L7yAMt3v1zN97*yAXWM^1Tm;Pd(;fF_ zKaYB#O@JL@K%Mf0kTTeXQ?31=AaOZ=!v&Vzy!%F6BxM}c3mL!3`Ds?_QtVM@)s(y& za-U+>P#h<>1FmZNNn2FKHE*84E}T5DC+iK{ND}D}2I+izv-)~NSgZ*j8W5xm*|ft{gqcX^=YN# zWEo_s=~F+dTF=Hb9Ndn|8$kU|NTOJNtCFHLQqpkfZ81v|-%yTXb#&~{b~^zCFh5T} zsJ*j6Aacc%O5d`9Nbdk>7i(I6&LlDvU)7cYaxVO)*N1~B2P#-sOCABPkpYXY4N|8~ zR3n7*i&59omAmSvcsv!~62mE5hM0NV`ob<{OY;ghP}&x{Rn^>*PlKOw3b87La`yS_ zn#hg-%rsD_7SBEWcZD6ts9s>9y(#){HRr|V134`@aLM#E3d?r8!FR%?fe~W zJA}lSFD85;5sKp)-F4p_CcJGT4lEQqdEC^-XP7mzfAbt6_I~tUz_@J0(*%Ebi=iMj}V7tNDs$v64Ux9gVWF=c9(L`8Df; zd&n{vvf^c5R_zF(L8|HSj?b0 zGWt_TPfx+?F)7%~F=x!S(pPK+w`{lE!E)6 zf4pYrwKR{9{cb7{k62A}l33~W6JoQVS7bNgP&N%cp51>ju6U_@WgYZf=gPKV<)yDd zp*q{1O$>YAY#0h}oJD_F7`UOfUYlG~bS&>sXu;FZW;E77zKj*07(i~tw@F`lH59nT zm}28al^wAJ9^KY?gNYL;Lm#|T&uVJnE}mZ#R0HJTFNsGJ=vM0ioLGvCH?rCjfZxJI zY@B;dQx=J9_bs%yA;#WudF*uixwGDCbr$7TTh&;xda)2rvivET&I`Z~>jr4)cd%Za zO1)mG%cQZAgTU7ZX9BCjQ&&mCW3wTOGc)Bs6ouPY`Z~K-y}Z@X2M#XH0=3oWw`6qK zke7S>3c)7r)dN-iZju}f!! zj!8I^zhmh0o;O&_X|OR24p^0Be9#3Jtalm)5i`Ld=u9}o-R?2p9{G6{ zDy#_m5Aj$!ilF=REuB6_;f&+Hw7_ZQY_!&nD@Lhqp1$ZTi)$w z#Tpy;9ZX}Agm%cS%_|^d|+*uzu{K69tDz_;HMDDMO5;VO_!}b zBP4oJ#VuL`c8dmJt9Bf-MZ=$QF`SVleLE<1s{-N!-aiK9hQj@&JVIr_PBi0iQBejs zgBKweJ$n`%XMz}`qvG!v;uS2v$gVs`=N_^CY%nD0+-E7ww!$^HF)oZaJhHsFW-lJ< z)h{-@51ofcC!D-W(X*f?5vea(8<2V_(UIBw5+j4z%tkRAvka4< zU}OwWP+>$zj_y?bBB*QBQ3GOant;d>r6cZzf~WB4%)4-6Zm9t3ri|+Z1_$6+-|sO@ zF!4s9Km-N_`*-*Myd3&RN}VW6?Fx$mena2y+(Tc+3NPxp1cu~U5z3e~cbT<_?|DGq zKO&lw*Tr}tu<3Ex``QPQ8X4j4_#+JS3$Kt?LsYlG4@!Qycc#QsKEiK3I!%)h;el?6 z&%5|iIcYBmf~@Cy5;bCF#PbrJPRMX8f^~c6yMB5(ns#G@vgHnT!kAEvruA(?r#(qX`kHc{Z?Md4J3 ziHNBvkx|(K(Qm`a(P#OTYkQ_y^!KllHj&Iaf-)dINQ-cG;EgN2=mqy;B6xq03zY?F zG`m;F<+iPY&`4W9v$QqfWF&PgLbZw&v=gK3V&Q!pcR!qB)!0* zcA4@Fz`!*7$NdlYgRJCo?e!hG8hZBfP4o`<(JPT610fXbWgE32I8;lnZm@FF(@>?O za5tWRZy#VXV!JXo{@aIY%>)onCCVOmey5CDitudr7q)?Se~} z%xvK0CXF~j>RJ?l$s5kJG~E;EuaL#7)i1fTFI)r^xR6vfST>|L&8AhBK+Jtc)jcMe z2a)tAU;+ioz9c7`=x)c84=Wlu759pB+C@-*-ezWDRw&A^6o^2?*i}~9WjTw3dzJBQ zPNjLsT><2B{gD2NNE(5O8lK5noB@O!OpZ$-P;w6up-d54lYOx#`s)!#dMBbz_L}x^ zzuX|i@RLTCu=hK2w3cVkIz>()(QnmJENz#MB|{WtN5sG-gB4v=h`#s~fWx+-3r~58 zb=?du@g#?{N!VKSr0#*Z0>Jr_$n`B?Qh!p}0=iA!_V~hNAcO&tEs(P&W9$KB0pV6a zI`0Yg?4abV5OR0GuHt-VLK`b4QL>5pxQHl>-KqE>f}$ftj1eFfI(j{zTLC3-{`j1)Z<(fhiuRop8<3Aoy%2MZ9s@h zM9f262jhX5hYBx^YZ-W{>0X2^39; zNT42#Q#lTmH%e?1M4E-q4*IM+jrxg(2v|k?vrfYyohc+d{_^=aMajm^j{ed4?4O)2 zL#bJua&dqnWAm_~vSj8gkAe6z1zypowb??uLpj+SLgYwpe!@cHfLT3Xoyn$0tZ;11%_5;X${+{F z<%+%f^kk4+7*yjF>M4^_9y0!Bg_5J6ZCX6_n2x z@LW{{lb12wWsz=t|6pgm+8~Nc^T`~bfHJ{aO@I9znF@&^yfdPPN*_D6GQ%1mCr^2p zWuUx!iC<8u9BQ2d&OL@EGZnL1=JGl75rVDQxcLmFE*K|8Kg6o~Pw}cLtyf3CHMgyt z)#xKP$(we`-&rd*T-i0`r7g65kM81ST@%krNi-DXD zkelEwjJ886Qo8VOcgs6FUwEv7k^yfT$_ZEMqlVdG1ZR6_76GQ}+XJ&YG7=Qoi|;$Q zDOO3P<>eWzA;v8WtL()68Z$ucv?+#Kj#Efq@Y%MiX&r445WrS%gcpm#+NdFkX66TL zS2Rml;|Mx3zGs{4PKv^A7h4x~sU6jI#xK8pF-8ll20K^g8-GuQ3HQ7|(MLqaTEuHpXDp~E4xNaZdY)!7|beO@@jyh)09D5I#b3hxjTNx)ijKG%Ea zb^CK_c!G&DSqd(-teKHgp7Th7qxFU6RKkh=wDw3Tom2$~rB*xcp{r(59($YSi0~7r zaAQ=89aR&ob5*(tNi;V%x7yoA)1XvZk=mFCk6!GWRimhTZ3*^c`;{`^a_YKCEE+rG z&#VfZhURyJt9v1Y85x~#q+*}%`3mvx%nNH8L0?)ZyKl0l)GF1^(cp?z@|YPSst@oo zuxQ^H~3c%#H%u|&T^Q1?mJu~utIB@mDOz$Qf5e*34r5kDQ(M*e%* zNF(2|Dryi#6<=;X=H`A8QPh@Dutw}js%3oQzD9{7suSIfGUiS<%%p0av|itC?u)2% zEFpZ+rv6Y~($8ug!vP;N$7M)HbA_sl3l|o?Qisv&s0hr5edS z>3-?Rm&+*rHfBkefFpo4o-wHoqG7LfK-a#}e^m{i??Olr)JigaQKsVgcK zM>JCz#LY!SG|WYw3?AXU&1QaMh0}bF(zmj)OGYx(zwjL8=w-LlG2f6fm9Z#Gh}|qZ z!z()SXe&vw56M2C)yo~M`7bTX$aw!repL-f<@xh*CC)lB@edW zOd5pR4-2a;^D%?-iMx7{uBzhhWlqnrLjt4r;ua{I|5#yWiWkAhwOBqP4?v$#NjZV5Uh?1H3_iy#~=&*EPmD zUNzVa*^929lbMA?*H2Q|2T)Ry*z~3Ksx%r+GdxcZY{U>c1fMzKoSpwfzvtk;Ct0F} z;eM5z1WB-mU@yM$6y6`38bK{@Q4=?2f}%~)g`aRFm{i$X^Ey_8>v-{a)e z=Q1|BLJ11W}fSL ziBL&kt>-DP^S{vJuQOQv z8ChJ&8pOFKTN=^A)oIK}Fy~e= zTm&m6x`>z0M9Iq&s`@fiQ=L!0qoc~&?IF3ha+_eCsj7CgjDc9Q>9OxvMJBf;#P8xN z)D$cdO1x~L>LpYt{Y*l~Oi`#K&o|t+Drv<$>eQK~)HyY}B2s%g7Y|nQ;fb}6i?>ql zj$jm;ZR(4mVwMp7$zkDVkY4s)dcm7lz3v^luaP4qajQ=;rbR7s(NXSlTeLA?X8nw* zr{emOX|W$py0`mFY>z05J@kSbc;il#Np~3-{_!#-z2TV<+@YDPxeR68qrT(SA8kJV zWw{k!9`qEW2Lw;)sOXdqcRUe|H;oxZWIc-^eUIwi|OCa~_~lqSK`_Nx#D6bP_t7 zJH&A5DIk0=7I?LUYIz{cv-1l;v2gct{@fi}x1|zkaeAQAf`7Cqebe~vcv;N1j-*9w z?RFP+WtVyHg@1LaizNMXJSwp|BQhi1@W7PeK5pw4fvEYT#k7jt!u-{*(7VTbV;gEs zhpnQzH%C)jkv0vb=7F1ib;h)1e-K=|>!9P;dxvIRGFYsJZacxia zR?*SuemZ}JHIqA#<+14FUiLr9xb(Nt_ji7Y?Gt5fpZ8t$-L&UUv97Z2;u8qxMnfmW zU`!3mE$=R!MeHGqpHmW@y$M4Py|51cL%u&|?B$k1q|F~@h`r%JP29m}|4&OgqAgiE z#BdSrf6IMxe1K0$;kv|Ro?_JThnybGrT?57q2DpW8y@{kqZ{6wOY@>xZVoyBib~y1fh?-jAm(9n4KOmMVn733w=G2-x zGy*X-ybAPUK64X;n|2c|?`kT#r@oULfP$VD$9mWroKydzMnVpq&hF^2);Jt#nYuWv zmy*q%Y}1-#eaaUbG85SCS&l@tJ&M`GU$kX4w-kKjY`==sT}C{pybpGTkK7*!92J)Q z!}qEG^4n{>OmxRSwpt{!MTO@tpBc|}^!;%ZyvazO?C|iJdJqFR$#0Mwkh(KH3=c`# z3Gbd{qV$7GOVgu0CipWMG(PbMeHRa2aMgKO!ZYMungjfyfoeQ>9`rryp|iS)QVymtmm`&%NSa3ZHcv zMrbL{ypNkh&g||*XX*d)Ja6Ec zQAO$1?RWLS>kf3CBT=E~QncTz1exH*e|hsYWtiuZmyBc$#LEmOps|w(FRaP3!-#eu ztEC!n2%9Yf1yL@!=-Co9q^#fa5hf#GQQfcc7*tQ1K6Cydj(zX%7@5)xCX_@^3Ym5A zutZcId`smw{I?AP{s55oG*?Gy5(a2W7*Tz~)IsRWcfaX5{ zO7btv(>Z>#aJiIvSUC0%&l+l3{eOczg5#HU*D?^D!mEzdz552LUrqmC0P68SBIrLb z@3kP-ywJ7GzQ!h@N5#eI@a|8_@Bf9P^G7Q7XYSC3zv1S^QTTtW?Oo&d=H_1s@B3fS z+@ZX^PEnv4OKfO7_Wcx216vw!u zj%7#6NbIsOCq3*&+$~mih>-tIBW-^;gNW2YiUE4;U%ymT@coZbqwnf5V{vQ0c}VRI z2X?>W92ctpt@?Fp*yqZqZ+3W5ZV-X7Ay88PhVizR$`d^jkd4GjYX_TC7E>iZSZpiG zy#6tY84vhWUR^OkKKnvn8wBj9LvsQx{TA>rQ^eBw*rbA-NY^$~L_13sQk?*01tOWH z%=JMpMk&}gP^Ji(UOJk@GO}E#RRS51o#4RZbksDvFr|(y6q`=nMU7BvCnOgZK~3Z) ze}!1qKB%kTYwi~t^UvmTnRQIm?X4+rAQSMb*L-OP?7bRT%c{@!(-s?apX2LuBD1ZT z^G}_v+40`Z-5;7eTbRhT(HkLGA2FZA?Xhy?_x=)O@3Jl?1gMvj1d0qe2~|B#kRN(F zFf$AUG7k0z>dYt3Rwnb0M+-ZT2L48%&e^yY2a@w+9Sl}) zqwEg0c2R{j@a|~m8h>`i%GKZ|_Phzhw`He>QfDjxq(QR{fBcXnu>nfN{RCUHJXGl6 z_zdCb?zes`NdGtMz&nf7JtL?0_tHOQTU3;93F2g<>xE_G<7}MUIvo?t8{48F^(dt1 zLr*fr;vfQmwESkGTP}u%*{f~>A32PaZ=dHdUmS&!eci}{26y_LX_+~@VKU~6Y>|P!Z!S+Jiuh;rDa~yy4>CG{ zk28De{Y?$2z-}rFCvGnL#7*}~(JXxQVla{iyantOkfK3{*gbZIisX8Q-2rBt}f6F0$<9l`td&>zW_a zi{ML;*kcKh+eDKfld`LYOYJ5{s}Bf@IZfW4TE78HtUCtT!aA76wpk(hP=T07DQ7u_ z&vpx(rx<$G*F*uzLOXMM%kcVXI7K)ncfzdf(77RIGwOoo z^NkSv{`NP_ky}MT^5e&}SQ6wA-0Ij-|D;!tvW9k8Su55LtkqGaPZBkn8#mFK$l8@; zn2q+e9>WXeqaM{u@a_VOeId&s21co7-hcI%{Y9bhOsw?c*RL=1>I#l@?`SSw#dP}r ztV%YM3DaP4^2PyL>(= z@SIz(Bre|Ajs0DU+L&DO?-(%ur0v?qT~Zch$*wt>v@)~6;Mg6LE{}#{W*ue+Lw>4X z{FSjH*J8&0`y@3P+wh)6MHj8~*~B;_jmMdSqP&(1Ff^?G_t>s%wIr`O2v6ZFAa<+~ZO4$u4L zql#tqV;6OJ7e@KMLS}tKfyfNm`nIpOBczXKWa8=!W>Qn+otmT@6jSmu2F$5~3IWX% zdqrjg#*^mk+{fx9tD#7WRRv2pjj&{Q^A58N_IlrhV!`%al41#0(TjAsYN-%gXKbxj zSNSmtpBwr-bWgL$YvUZlh3x}0-)7+|d6`CrW0|1ixx{{>>MkspG`=y;ym7Li<#oCM zN87w##tvA2o67}O;VT!v7WYDqm--}q8QmLWVzC#}IBh?5Tr=!{XYp~oogfUUT7LRXclq*Odwr$1a6PaSCi)qx!rHu7&P z!iDN83O}ZXDO|D<*?t9!%tV0%KtX zf*{n>v0M1WY~~c9l$;Bgw{N8w%UF`%!=P(1DUbJC^(#j(|I4;jw(aK*vuQRJd;t@C z=PS$~27_m;@YgRP5xTZ07iH~tY9}A4*twHc1NW8< zJSFy$bo5t7B`0|JT_S}SIX~JqWJm1QwH$9`_~ygEPH)6j-5Bhat0nB&06@non3y=EzA*) zexE2_uVQUQ`0}mArAiK-uM#Xh3bI{&R5ZK=17-RlMil#DIPCrGT`bNtT%Eg!Qv??! z7_+=8#M?}JS1Er>ox*oaW5t!?8A}wQfgYg{47=F?^-7Da(!yBGQ~zq9VbF4dU8npDfj(7odExjbMuxr)vN3k;zt8CPsc@ED4vbf zlU=7WyBQ%vO{Xhn9vGV1sdm=9iMu4mSJeT_g8;I{_q(+dOIVt*(+4$z;fr#9bURU6 zI%<}8q%Y1$f!h^K8MAe`X8_C%S0-0!31?qYXEQ4>I0N@k!xa2sVzzV8GDVsMMG)_9 zmZF55hc49O%GcZi^7favSPiZVnx>~o@~o{7c3#UnU(RpRR`-uw0%paAoHmk_lU)Ys zOnvU>QGg4f4Hnb*%cmdo84GwOp1tsW-msg*9Mdk2813L?uF)7Q;;7QYWQ==RTc^Yp zRLqj&osEq}A^ zROj1_z4~M~Z;t8ciBSlx{7ARc*Vl-u4tPazOfkDz1$f-gFdgBaJ=?|blUv`BWG_Bq zuKZM3%#>HC$Xj+_!CEM|H{G|F@78(KN}aCjt5cKZCh(%c^l4?szLIFalhG8&Kg-LA ztAo`c#juRoOd-DVoi7)3_Umt33ZkpJpSaAGzGSWl)c{=#r4lsQ3H{T9OvB7UTD3Vp z=`jss92msZv#ZCQX{8G4D`M<(ORxMZMlE?`lV@AO1qd_j5lkPF^ZzQb2X<(O8ppaVD1@xKOb_Dte>AK3u85)> zN^WQ9b;hCn)+~zC3tingl??5MO@R%aTn!*GGkm$^02h-lRySW+F;_NPw-Zc56|$F5 zv@*WzD_Z@N6Sd;+8xJHxd6_|)dEfh*B@e!Tb4rvf;gb)O-y{zwKjY?}J{L53)p%D| z&x)P5nUAa50HMy9)xC&Zf15nLT$B#-Pm1X>=QN61ut}|o!b;9=!5z4n$iIkkogfuv zbq|mP$N%KmF7(Qbu)W08pTJwtSKQ{9opV2mG7VS?v0fy6bD`mWO=5$cxI+)f<@Cr& z8*$ksV)faZEm641XxM8IdeV!eAhhj{$2B1T$fY#6_-p~LVQ{3j=P@#`XrJ2_Qy$p= zkxuOE@%hD-`;Al}`tZ>8BfGWAN3P#7lDfdo&S%#`F58jQc?ZNuaO)cwD>E#+KJKfm zGYbeC5ls}smo1>0jg(((ebs42e3mN;VAgg-xQ-I>hg&{=G}RtXj$YTO|M3#r|1R#L z9|#eW9;XP4YnQR#EKR8#7iPsgi2~AW08(9Q@$0Vs7PA zk-O2aa|UE>IY@e$W)0x^LVzkTpbCyOm&J2PZ9B0DgVJEEMdFb};!*L|XBo=~-7s4x zR^y#S=Jl1iG+t%$^G_H}zm6F_AT>#F`}&28$DzuncBr>P2pchALr1pX8w#x3OC^zT zU=BiLcxbNx3s{NaSOrx#V|6!h4wo9%XS@VlU67H#^&J8G5mOP=ptxHa-T^IJ{)CI>cKM4!Kk#j30TlXV+z zsjGLqnMdprFmjmNtOWTi(_ZQ(U@6b!9ntx6ip zW6^~8nKHrj0@hs-ZAF4@Sur)oiqzj~Qe>l0jb36%)up28WK&m+rKDrtf{kpZ&T2>a zk(0xAPAQGj4OR1p5GqrUm~orhd;AYJ1`|dsXpkhP&jNKta(bJ*)7vuUU?7)_75Hp6 z@7-1uk#>Y{hJ?gN?xaK%2=0-YaQ;tet?)hnOXTvrsY4w?YCoZb5fbj#qhS72t% z(2jKRi{?z7Ma~$~YARkAR^6cP7@Qu@9wF@1Os^;+=eH?QS$D3A!FmdAy(2_fCa75& zo$AG@o^)L00c(>6`8ILu#sMk|{OB^@6~&(<`GaO@kFn9;awe)Pf~q64C5*S!->MSU z6ZNeF`V!qq5*+a2WUe@;G{#OmCpcGx)UrxKdc#3}@_laE+=VeYuCfR5#EdlNPNb7s zAea>mBO;l<2WrA3{1pDwj5N)(wkOd`btX&FlQS-wNYlG6z&;*RM!qhp_nvCPJM0yj z>b&v}CJYTpG|>dS9S`^2nyz}P_kCq;c88a^TVxVX>_6h*;M#uX6}q6lsV=R3)i#?- zNB3b#K-y8}(QK2a_?7psH}P_C4NgcSP`6_@{-@}x%STkB1YdT9y;bk>Jg17d{q*bA zkMTnO-^^c1{rWXoTzI#avf9J4E9`%wg!$%-N;Ln@pTD+xEkg6-(q6URHcG`U7m&d?Xjyk@E6hWWKTN>ZGo%#ja=Zs@n+W2%!;Zl&MaA zI$B|aJ4^~A?=YRyPhn@`VGNOmkeRR=ym~Dd{kv4eayN8ShtgAL#o_uFO4xl}DUS=rtQIZHKNN}aj^3>cq8X(I-#~ZTW*|bMr5+m^*#wNmU`eJdt9^vN;OZm?rxoQ zR*ns)dCHOc9gGI@5bX^$%ual(ErHW0WVi=G{7y<>7BD69VtBEPwyG>DYA%G$(;Qv1 zpuduw7s`&AHi#$%e>rTXZGT&JOj6KGWuQXU4H#1v3&o%B>1K8+nlSFKQF%qHXU|ee zq?8Ro6^5s3)>#%9%lk8BmxNl-g8gkF zX54){1#%X)zC{U|_N?Ldt%;@7_DzuI@4~NZiK;BUO=VtHi;Hh2PZMOL>LmtL>?t5A zI|&-j?3+A5lJ*uodi|aCGu=G<8wIQ}%`vQxWD@0z`-`I-cu$~;8_JI!`9u;5 zPRc$uDJ{RR>0WN7@)~d`?@U$@`ut8^Pg$~oiz!xtD}9o|`Bl09vapFRKL#SfOCEK2U1QKaIVZ??k`3#xCUfA=N&nY=VIHX zreT3{9!i|C+5ncQ=|^>OQoNtXv7dHY+CZ#DU2{^Vrt3ZTQntbf#nTKTtPwukg>L5V z-Ks_-{T{JNhGNWv9JrhanojwsXeEu`{DW^wXr$#JSBYelaNx**j!7fN`gbgMNXYBj zhfnW}&%74LX_FhI7YHF5pVr9A`tY9BVw$_j$wHIZQF7Bh5nnaIlc4NUzKhgJ%l7l# zRD5!iTnd~R-{LBeHf^ZLSBgC4kgv;y<3?Zl9<% zt*80aw*3y@dGwf?bMFPY<$XrffaJ#wGUuoaKtrK`EAGwb#BU;h^Pl2^5d8OI`1qKJ z475)54E1bEWQHu@kiHzBz&66=F%E@zM%Mjbo>ugi|HCMF_8<9aQF+R?4K8ZB-&_sI zd(s2_Z{mYLBSHGzm-nO4$YmMOaF9xp5;PF%`*~3|X!oO(Uf#{J07Ux^O7#GuT-&qp z64DgcfBZ;taOsSqQ?U;S=^pE+n<<7`4?M@%9VxeRcL+22Hb`0R956eN{xFMIujG|2 zw-MfIZ@?6nl2qRy4eR8BZi{S5{`)p_wLt;Ul3F0VbD0ZtME}ZUl(SoKk+FgtO`u6f9G3g*q^(WzP=UvAjp z1TAT3wR`dmhQktLj8>M+X;bl%q-4xa7j2^(CvrRVy`7r+rMfMD#_ij)c6F z_|r`beU-@SIrx!@s+g@WRbh#fdzO@CB*oSg$zXc`u|5|-4};@*?^;?uDu?p< zqm6JhavVcJ{7s$1Jf={uyeUBizU|* z?Db_8)7UKbOWBOwkNM@pb2BqXPaRLJGDUK2zdvNAsOgw-8kuX*7T-c9dNLL1m{`-u z>efurN)$E*sEWlC^L$fAPA5?fu0k3A z>jR{(b@}dhQX+TCc2g;1&qE?qk*sy_B4uG|HaIU7xsI>&X*5bDArg<6v%glTKM>&I z9_bVjQFPb-3+S_I*AoKUJsWmNnP?~OT_$oxo0J`#io3F%VvxYkLsCjoFyJG{RHHyh zbZvoX?3xKuPw#%lCir}VeckCK?&ayi2Tyb^CXW(Wk&brm$=SFSxUXrTkzjLYhCvSo zZdk1zV3~H%E{11CE!RE-tt(GI$v!4i;-Q$$A}7y<{PVs>4QBNG3*lWIH%}%gn_xHT2a^E!0laXkM!n@~vs+Y5H04 zj`P7sw`1C1BV3@w8q=0zE;bB^jvD?w+ezsHPU@%(iXSV--3ykaIV|9}%_cTe;F@KU z{F)v%@?=Ns!F$=vpK$z0>vZ2Sbimim&*iGjKq#RdFatIQ)*4 zbnR!l%+F~-X?e~Rx>4L!GQ!+5T7qcHw1*!;Y#?5G#y~-Sj#EksHBAsWDLRcPC84l+ zjk=+-ovMO};Eh?~oYQ*1-T9RLFll{LUXe{9j+-5d-xo~8!{3!Ult!uUdNR4YT?l*I$JG$Nzei}Tc-}=Cl(T?(%*W!5Wvw{$pnSU9oDg-b$_bjh*PxEA5wa(|C%Oygw#ogM!*8|tcG zb~A1L%|ERSlv~14EP8&rczUQdH8wR#`7eAbkx(SNa_rO=USv@gy~Eg-p7{6Z{lzbV zN3pBUE_9tZbwBiVD=0T4Y)~-aOmFN)_1}=$&oj+TOilmyjB=7^Ia!Gu3{~tWif(m% zPML3F`!^84`IFs4>FJ4>lCc(Bm%WRz?W05&6q-G0CbJ?JGC~V?opE&y{{sMye*wUG z7&+A%E!@}88uasA@mr^h!EVkid=wt>sLS)LlcD3Xe_rM3qZB!Huw?M_zX~nvm(V_~ z(p7%=1I-Vm9mro&`+rLig~GrM3Weieykgeox-UmgOoicIDWR$~1Rnm=3e)$*1qH+D z!=GoIZyEgd-%0NOOFQ@nuY&U#6?{qW6egC| zS+{OM4-2X8I=dZoGz%<{hqd(Ecp=@)E+=K}-q{IIX&8O{1MRvlCEjG^#0q*lcQ;+{ zPhf|?KYt(44ML&MulIQhgsIEz0M2tOSUnNpebZN@44>3_u8!(6Vdm&S0wee?c>E*-%5Ycp-B+nP6 zV?+YyNvvRR=1k7{tFw1l1)=0vf;DN*Okh=w8Gu%*IM*c+fznr>n1aWz-DAMnU}?AK zZ1mp98KV`^8o7>a`{HZ!=3RbW<9(htW5_*aeZ!u&3t9T6nLNA5sMROIZv z20r&~AD{M4#f+mN`HyHFP8L@zc(vZitPB2h7(tdVcq4RXcfXS26XvWNe-;?j!}8r4 ztM^m?*le$v}Lv>LBxTc2Tl%)|P4 zGMrYzRpqsq#;9Mi=p4uvz)X&*D2nDCZhW6u#l2%<;vkTmfBm1n%xacgM#4wR6D;*H z(#F1TY#f9*9wi-ujM}I$wFeDCmH208K)QM&Uw}0=!}LUQQS4W*;3TZsZ|(Fb08op( z9yM!D>z8oFswzPD5&gN?H?y&C`hTF6|AA(97PNS~q1xHg#N+2CrLj4p*jvqt`~onx zq@PdC#SfIX$`&AYK5n==Wg!i=3prkaCf2t(*x3$$bDW<&v(90KiO2TTt`5{m+W-}M z!(joZbDiXn518i2n#7XRFwd zP1bqcnW^qg{{uei;gRxSq&1(l)V=l-ng=xpVeDO1<4iM}%m4TeU3rswQh(#f0R&SCq!yNd=n!xawiHIn+V8d_#LkoBvOO|G6NGd)#&; zB-&?NMEs;!uTw24*lt3_6qtt2@%NYp4FK~*(!MwewFNME2N;Qc3;;Jx_ja`(|#EY3Khev9I@ z87q(RpnIW}>_%*}P?Mp_uSkCkS^auUv_e0N*-x?E(k#tiQOXY4d9-Ah@)kGB~^ zRJ}Cc@ak$tQ7I$b<40RFmOasqmywAErCcv!8sr#|L)lqPgoj+klTCsnN)9cSJ3529 zL09gDh5beZ{_X|@^X3xd9@>&)Vx_BGT)q?F0^>o>Nv{hdb`{1xCYADLipAUD@BuGm zu}*KDe-FLHD4b%Tsv+%O1t~>_q6!6jm8$w!5QLCQ|V}ZO-D7w9cRl?8A$q9 z$Ia6@5${4$hWsl~TZ`YJO1K4ju-r(p-S&ZKQJs*wT*&KnoW3J>Ed0jq7tCjjS+f&u zX^=WL_I_dHoKkWAF7RUlzERm#C49zjq*Oyzahhg^70W-5rHpm~tKIutpQ73{kx|dtk z<8u?hb5SERBvMp-)tkKE!q0!Oo4i$BFrVwzb71 z^Y%$2=FR&!q+a*b*o0mVv1^T1xdq3qX;sNI;F2EG_OVzbX7I$<1jE3=WQr#47sDEz zu2sFE)OG#{208XdIO$?nz|Pm9r``7L%Uv1#=e9nk@i`uMw4DIW!>wCR1$3zcHs42WntE^<-wQ@2i*C=b%3B9^& z)R7vGq@8LG4U3&Ow|JBqcwVSWhzDc^YRHvzq~Pl>kT90<${^NPzG8h0Tq0Vp3Ne60i$~6eV^XAX$I+-PQgQ*O)3?Xk?O~6 zbkXLK+!jN{@ny`*!10@5Bepf_s@!KVRe_?s(AMs&zOR~367Riw6=5EmqL9_Omm>hx zi+(j@borWlH|dc_7c)h32iU5Rb_$4RlJ{LMsy&0TLd5OI>Yz33!ov-Y%ivFXDMe8K zqEcGR6XSt8NVP# zWgyWf#t>~Z+%@urdUsiFuBhsw= zC(jr8F!@O#Nqpp&2(sXDO6n_h3Eg1!Z?d$sldbm-Yqjen=MWj|shzp%r~;fQx^ttYC) zZ#D@DrNl@C;tS_)&MD>_G6i!b^u`6~PR*)IB!Kbiw@RY|N4XVb0s#@*vhZ9FH6_$g zob-e!q&K8~n~sw@08woTElfltBxH+3Wyfwn&fyTbKvg+To!a~>svJ~JwKoYWpLaBI z#yRSs@S}KrO@9U11>uPcKgaB8-Pj~2zb4&NzTg@T>+H$->Av`tXQ?){4FbS*@50Mt z7tJ;Y+yF`jI?u-^3n~t!in}&j$(qbda%%K%u1wzd4KNE4il;Z2e!zZhPHFQ4kdwD< zZqP^(|H8u9Si@GwN)|*yk&9qonx=GC-@H8Bd%z#{DrKCqoR&K$*kt1ICWCejXCqSA zpPsH(4szFO`{QbRf!Oy-;L4+|^4S{B={;~ppKDm&%gKcL90~Wv@F~iMO=&JVYls?A z7hm@gskberu7iv@T_6mnDHcIl#LE~cI1uaWEWVZ-Z(6EZzqgQ2x6UsiQqsHki>5Gf;7Ptd8gw$6KM%XX&4ZyxlZ9s$aLawm*xXgXI@}XJzHCi!GHAWR% zwz)Wx`a4kveM+MVE|s!2sCjEgy0%6r{PLUQbz zvHNu=)Cpdzig{b5J~EE-x>@I}-WA{=M5vAxsKP@<+54 zhuu@{D?bRAK4!|piz$unOgt5Qtu759eIqd#=u1iVHkKd*j&C*uTn6m{!d&&*#k(W& zROTdybX4rs>Q5uHp?JFuA>Bi{xgOp9*N?jU#&8Gi#d8!(##89Zi@9QaJ#)U>zc~kA z=PLvw#zZg_NF1W`;%9I;-D3ySA65j^=U%<2K|IBddWGs+t2Pd~2}Nei)@*6=#?&W7 z1)NWI1&b80WfYGK<-&xNti>%Gi&*ey8q+}}(M-KL840We@71r125M?*31b-9Vi@y{ z(=;zJw-V0v9^@BAA+jrTt?@=MB%%;pPWV9Kc?|0NbswQ(ck$mB(Floe5zP?IL5b$i zzDglZfWRB%?Uy{)1KvApg!8CQ5WjtCF1T<<8CK5XJ0#?JP#X?^l=X)vodzT>;56i63o^sEl_krk#tJAysE9< zUg6FC`0QB{rX>u|R2DCd4H#*;w0b}8Op&tf z!B$)x$P}IX+=lhtvfDSbO*}P3b(OOcGn1nGJMm! zpT%qkL7F3>RGMu|!VB(aYzbDXigHEU{<_h0W1$3HVDH(0H^FgvwDII$mNRY`_^%k`V{pvY7tjKa6`=M}CR>3JU}m!ST3z(p za}|6&xzM6-%W|R~WIL_qZafyGItv9SG1DxQcJVM(IudMFj{>7SOs54QM6sNyxZZud zhVNv%Ab37~6Ya#c;20TSi$a+>)S@g~%43C#kz3{NGGX;zE$h>uuX?clyN?7ur;Gs@ z@m@Y1&^ITLTx1uS>8n-Jxc2M%EfP;g>F`|XTf8k*E;h{h72x@qN$eqi_ z+&>@E9zv}uKM2Vwhh9@E3Py z{Eo-MnWh}nq%Mc07<8_Bc1T2&B~@iF2RoZLxlqpP@ynfoS~&V&#uRr(;U~AuRblJB zg=5b=AIYS%({{wLzq8KTD?aiuO0^1HwxwL$5jyY(+SHS~71Ab-%)xNOv3Ewwwt~IA zsk(5r(L@EvKrzi2Ys>V!6DaK8{k9L$Zl&rMcxKU6PoMUG=- zeqAmZzNe!JT#wzFeScxYJFNBr@acGu@NUW~sDs%hN@fjCFi|YExX+Lj`JISxu-0C8 zmGV`{isSJ9iyP#JF~-@f-VGr2lFkGOVr%Rzr&Og_7fWHCnkj5IaB(=!5*osfPAHk} zMi#cHouZNXvg1S({e%DLj2Ys2HB%gQH!{vtrq1c!0O)bM>*!bB{o-70odAR$5WswE z$Z;Of_f@*Kwe>R>>7%|Q&B56kVcQctCwR>d;Y&OtY%qHg9An+*JMTNCRx>uaW}rH5O39`)2T(i!WUu3R~rJJ-sepp ztcuzrS0z(bt+rL>R04%>zF9qOsJF`w*CwAod z<^*+4cV_nm^}J5+tk5h>pZE0au<=`vRqF z+TA080JByVc)d&QWJB}b7fas?isY9ehT_BHvCDOFs!QZ@=@Psh+0{TR`yt*fjbLyI ze{HO5O}Y=y9tNZY-zl!xw2m@5p8@>iqQpKMo0`Uwf5#^u!-Sdvzl8YVgwOkms|pN_ zhwiq*%0fC_ws5|7@CyapQA}(=$F}VpyOHwAcq?s^-(Z28MEvC|h2(^Jm)eMa+iqXG zY#Dx8R<*HiUr9_IQ%F)Zn-%A&VUTBD@8Fv^{HxkU+T@lCJe}3;+0U!Yn5Nx-$6Gg`^a$7uPRg&WK z)TBHr%51otO2v9RBp@K<=DydwVU!a`<%^^MQnB%HlVtJAxPHc7+zUfii%24^C~}|8 z)cYNcxbZrB;2iA*Rb`2QY2m87#8+~BjPLQ|ckXiyfH8yOb!WZ9sXU(v$(3`_kcK+56ef0z@>X+s1}MWE8V#XVw)@W zTeBaqpU_>7;iS_ebHt8So9oG)wiG-wU?rK0Iu_~ta5_2teiOrs`FpvcOOrFPt{vn> z&NQ|4{7D+t4Dzqs=Xx<*w{mDn2iB&<{VUvL2f%%!R6KA*%23vooAXR&u2tAT!{Y|$ zZ}2@RYUC2fWcLs}yb|8LmvY6uJA3Xfzw<4F88STXP>bKc>c=Za358Fm9W0$l>pbU< zL#heukh;#>uD#V zhOS&e`3oTRCiC+Y9t|Of_>ziL>5-BdYM%WugMquO0M;m zJBB5WAk5JUq!lx`Z`Z_17e`{Ppv%a%JFFX_s%uW5o5SLfZuz21n+Z?&HtOl5*daAmVsDy8DX4 z;r#)qsnG5MT*t458#JJK0ey+4?-ni*5-FqazHYL!)6U$&uO5On1_QTBTGt76ys}(O z#*L!2`TYh0@W>en@j?}%cJ_-#qy6Pn+vFG~3=EgCi@o8U_?yCC_+U-*yF>yGjn(tZ z=rdNe6~^)@{NgI{ffRzeu2xN1>C}KH7<7Q|#^1@ZQ%CHY6-*akwIYs5V3?_(Oi?|} zI)w_^heyVsm+N7#e9$md(C`Hedi+1xpDu^!flBtU?4Nxuo*HB6l?9A`HGdH|SylS6 zI+FBp@sSemR;nyX{);tPM}|Q$$z3{o_aOOznst`33RfSCy&xU}3D5dLyZ$R@4vx)d zhbxEQrHQ_`%BAE&zwK9>v6%w>vQ1GVeUlR`(_#MMqv^*y@t-oqhiZxKEO$)nnWoh+ zqN$O|K|JK&QemZbJG9_{farl4_|@5_2xfyD&&I*Sn4IY)c%?ZzD>pHvvn;F|JZXv3 zRF&6{Eyp@kmrXavnGkNGknOqCY0krY?|r&3^2l(CvpITa6VGa~b%HW8@i~v*j4Bb$ z8orMI0~4SOtCVz|1C1ojD&J?#GCj$uZ(=Wl4QUUEKJ)kKh5pP|;l12IyQA{klwn9K z5SrRiekr1_JSwO}#T7?bp4zRlBUzu?(b6sXR-LO6iO5vI{x$DxwnJRS^(&zY}${a&cM zvtq1m6*i`_awL%6-OYJBICL)oq?oz~DGL@mfyl|0kN_sw$19Ap?VmPwN<@Bsm;SC` zQW~Q$B}WIQ|0*wWqYmE4dOwg}tLBj!{$dAe4issSaj>Q~{kmiqT|GV|y^&NmA(B=$ zM2(rGXx8P>v7{z!aPYKG(7bspUt!rLrm0_m*d&f$AlPBDzad~-3@g2QnrRIZ@CTY_ z#9j~JTr;|r9=mz#VrLutJU@Gt+-uuata2d{&;UnX5%+H9JWc*v&xP+bn_!&<%e{PmtEbA_k5TV^nUos>L=XA} z*;syl=a-C=*PuHVd+n_FNm7OQb;nj7_v9aF$;JJR@||Iax%bji%_q!`j&Q9t4;GSr)j6@YwwQJ4X@emjJ(*rRiD2Rx%RpaTX88m ziqUX()!O3niAXDJEdne8vYt;l+o5}2m-13PEC^o3C^LzWW+1z>h|G8TN<`zZq4_PRVqW-BjpE<+a1Jx9@ZF2ihyyhq`$1Gv%&U6t}}s|x!U2Zx%g;8kee@gHcz zts1C(ypXXbt~?))nFT1#h17yZ!Ni&hG7NQB)rX8bX{C*QD!z zp`ee#{Nu+8_VU!G8PY4>$1YUleyx6nBM!FMR$6pcMsx zKk8QSNs!-_;Gj^VDHW5oSC@Zg|MFCh!BNinjf+d+QS4FiPwC7}U7O9Ka*05Hoqz1c z4%f-+1Bx-{S55B!g6Q9CQ+<^DO7fzm2mxo7cs12s5>f4kYja`g? z>C!~kM8>?(UqlyHS11Qtm+<~x|Jr28`bXO`jq<{83iLbpcY5>@wJ}zil&02m3mBKT zCA}_REXjIMTX>Os&qe=%ruI`^!~as(+Dq4ms0JK9N`I{@QEOBtl#e>kKLqrD*uqch zTes*x<_^-*$p3-$@h?^Vg>>VeNb5hRKJ$7R@RxNvd7+l4UQdGj-TqfK@<3s=(Ae_y zzjT!9)|e8dq(h}xe`DNmhBB$`8Lw;H_tJkIywD3}ccnM}?MxK^8}!vFRfOQpS< zBG(h4R3AxnRLWyM$HAckg-Nnv; z;G18@)zBIyx;Jzn?6tS`4~_X-L;lv7qP`2)heardH!Do{f2e-z?=J4=;ZMEpdG1{( z4TVQncq53uG$nJM4^f|cG7N1GTT}i^97_Fb?Ty;tOY0B+&rD?h3$)PE-_(){h~fbE zzube`*LgjZO>r*_Bv#j;3Kmdt#%tx@b`ifsBxmzu>@No-eK~|;pz^18_-~9?x*PU+ z(Q7xcdejURZASIH+G*8LKU({N?+9yqe(6Ek2EJ-Gxl`B;b#Z$j{#%@Br*uz_gV@Wr zdHsQ=K7ZsK-Ua25wNK&`?1U``j^^w6-W0=a zTt#vjwMSCwNYp3Z>k&gYTI?Gqx;o^ur!(g=f>mH?5l~&I?Ql3^2q;{w#H7qL+93^pzy<%IuUpqsw2Ax<7igvgZ3hmOjmq+6&)it3#UitN~#}Z_q}R?&Q3oir$O*H(bnSh)+_9w1E&Hurv_S0kFx7XBzFVG^T8ZZ zQTGFt4a=E0jKBM1LEb)b{pxdFZe2qnMxh!xFeUrEXLoWaD>$!~V@?W68g8$W5N=}| z7QGdQRTQrwke3LL)Leb$q@p#JBH3)-Bj13^P_Ao_J(DZjp%u33C@+rkGZ`NWXL>yT zEP><E zveB>j@fhD=09LP()ul?*???3#YE9GGn`FZqMcDFDwP@vO@;9^xq$}TkFWA%!HCJ&U z=E({#^*G~WoOZIdMgx#97VwH?3P2rcTBR@G7 zAiv#H9tdMd*WmXSHb2BYTq+Rqf)3xC{UZOQo2$Q^m#*h74iiIcZ%3iZF; zu9P9Cli`a#MmcyTDZleGgDSxN^qj~&<@ab9i^H$6T3O|DQzL2CDLu}UBaZu2)WU?1 zYExW0encfZzTUK8VAdqWcNw);o2bfbQn$>g_+8DAWX(m_Vg`^I%W~aD{93ixV>rF!sZc6c6 zyNu)_WF5^YS(3EaGJ7Kjq=oR}U6ptd{8?^3iP2}a@Ou+13nUsa|Bc)1RbFqY<5J`J zGh#1WnORewy={deUPv$y4>hgBPD0$ZI071;m0s$$|;H<4M{wvlPW_DPxmO+|-q;ZF1_DTFdfxH(`OtdCb# zr=LGe$-+)a#FZ)IaE(0z0n_yVc#7OaH;Yjb+_&p_dn9PNj+9P`tJ`)MSLPs9Z+-hk z5*9y_Q5U;&wG-O34T|L>b~lOYV4u6EqPt6stvgDg{ak?ueaa-zS=S%Tea+F3I7`fL zF>U8KJPw5J9Dz#*qbRJw3{KCD-ChOvQuj5?ecMT55eV@RXw5a4_etQ%-N_H?udg-T zjeCgbquuG(NHf{&vBe{^^|!OY;;j3zCl~p(gKe5QxG8L~yTHPBs~fkkF2%I^n5@{4 z>@6QtVvK{}aHnjAM0SHhdM&|gp9>BPGsU7ZZ>E~g2HgPr!rYp?vnN?yw(>$m#?q=Y z!z*1Ls5HsG0I_LD9L|inOx21XZRjDkR1Y;T+L!QOlfV(%Yd&9kH$jYSMOH$UNZ#Pl zo-?gg#~ac_x3xl`%90IbW6uhk9*!W7QT@v+sChG-o7W7{CAE71Ht*#6=tKeYW^2!R zAX!MPm0kU=p#Ir-W_QU4{d@-;351UTsf7FOviXg(*E800k zdUsZB%fp=<>g>j}G~lz$a!nc>G9!R1yul26I@|Cvl4P>SRd?F8`T-;JyAyAvlW_HF zZF{W|A>Khp^j9#T23}eJ>t$MX?pY4{FtzGP02iS-Emt(_-q8%L4irGbc-A5wYWysv zYU^=M&@x$bkwYRX>$W6G39hqAEXPq;lqr!wF}7o2(eNU6e15j0P6{FzcCcR3U|`*L z_rkDcLVm_qzK67!M|s;(>|@E56IoKZa0xc2uD)QBAH;$s@Az>hY^#qQ-ph#ou{^c+ zwNKw_?{q@j>wNQDctN~k^Sa}7WC^0_h2eB#8+yKB>~QwdReg@j-GvlK{Pw9*$r7~) zpCC2HaIW;$8iNe%O3+CRG&*aXMd?4JI$ePd5p=pMP z4d#9j>h?zE>;gH+liUNXQ-l4IYB}>OW)NcWN^H$>P^(0{5grBIHNBF`cI!tG{$PvB zt`v}eic<$YDW$^Mn2m|NJ@=&=i5ua#+6O;f<7{9*Z-S+S`34X#(QW8c?e=8DGDTl6jkyxO{Fcu9TR|I!qV9r^3tGVl(nN0?gIkKzHEj)# z9TA8xdHJIWhF(I8=9@QffS*xGdo+;ET-g$k}457UM4;!-`? z6A`g$cn}XFml?n)GCfC?ssgxLIVe>tV2eGN#8xcwR86i*`b~wp)sr2&sc4$oSmfQ& zEFco~FTOZ=iU3G&pba8dYUPtAYGqbV)b5cc8?do4<5`k&w!OP`7!tKz6La9*R@I;B zUo@BowF6sq+S2P*pf2=ix-u7w%{^kDlim`EVBM(+Y43T)B5i3TnqbDhOG4KjPOk=n zol`&S+)kd~SfruN~6c{WEMLjs~V_OY)~A;GWDuE%pc4LKIw4&Xl`ixV&@IL8@X zB1wQJxz*NU7j{&*@l6tA879UsBnNG&Za#{NM}C_!QIxi1u{In@c;yf z^62?4O@2W4fx^gN(u^UJI9RTkeL`%pkFJRec3Xy;u*iYmVVZ}yiqqGsKN!R+um!zO z&ZsC+u*}=#nO&bMSA{{0Q}>~BICUAP5)#JH1Q#A!6{6LaYrNF;a=ZlVa=a5y`zDe3 zp-#sUDLc&Sx;bCrLfC3DSB*K4An~Rq#{$G5n=KJX5$5yU2#m~>Ma>Pn4H^K;3Y&?h z)5`);joXe<*A$Yis;>r7Bkk8>+o42l?X6=t-)frKsx4S^s><4xCYl4)So@{n;C(&t zNF=)C=X7d@l=%KSbJu?NTDoHMb4hdIYCE#=IIw7C;b3xo!%1{@X{dCy@D`$ZlK7D@ z!B{gBog<5c9YIR_Js*12CoeD`cql(f%{ULfz8~g|^I>9PMsJ4Vo{*5kKeff!7S5mp zUj+*84i(yI%(y=8?-u&U9pw4N_>3PP?$}P3gtZA%y%-Q=k2z$BShV{f~f@*;{s7?ld5y0lbov5 zQySV*PN=+#qbt1`ga90<=!jBl5LW3?4mN+gN|F(-2seY<)3Wc`Xh&qF+YFvzU|-0=)O_xW zx!rAGJ~q_GV?;uLahxIjA>r_IC9c;Gq9Q6dW3Ta5-FK??$t>BqP%|zWI=#NsxEmPV zCAbL}d!ADuMVwkrvaXdQF`+zLF_h59wX<69!s<64L;5_g#QjK-WU0A)8!CBUe zZBfgHCA-rWiwA>l6kkbOjbcc}$W%4IJTMA4Fw)!@5YKpiPQjH2--qsLOd$FO8ZdQi z816jp@(=|J_kHr^t{GLt!BiC`%)7tS+^l9Ab=uV`eeQw!=xTj@8-5Zpkt}m9$nEwK z5hb(OZUqu2ceiiLDA$|kWm0qx)KujEM!?^7*Zw8WuebeqF8@H2zLIbqZyl!_`7vK7 zG-VauLKU^{+_X=CwuY(?-uMGe#@;LK#4C&M{}1nwFSPkp_be`J+rr=YznoVRATA!* zHXLa-b!2JK&Ut`%GuXq|Q(EpC^Cc7^8}By>&xokO??q*zW|Gqk+YC0Pa@G}9yd&=kj6hnlU$zFEl%#osUMIk6iZ%un{6t5=;IRVZ zq>J`KGgxYy{q#D1k+rHVluBTCn3yKhqCvv(xn@&R9W0#EJs(#2_8K?bwly1v&)cLS z_bdIKyy=nL2)1s5t2kV6cUj&P)u*-Zz3ugDC$7rE(Lm(NG`Xo{ zuSN7a>x@UM_89Q;$;jO|^HsA3=-O$7;7WUgtnA=Sm1TN+s}fE#l74uj>=;pv0eeRW zPR2bsD}KPt?$Kvk=LdQT5!nj0J*p}GLSuY{=1jJstIztvn?(0miw@KC`7=LUksR|a zp1Y!#nKn%2*9-I5b3eUYbBwO0Y^31)Vkm&Se4<6kK5{}ZhCQuKYiG>b`DJxzU9dUD zvE4UJtTY+F0#8RQAjU=tMq9h2BOE)$WwO z)XCIYnz1D6hHIDhjB2cM*2_i{ZD63QsVN_s`uM5m!9K3|gXg>cALiaVs_m_77p1!` zl(s;j1&SBfKyil_PjGiyya9r{R?tFlDFk3>K5PAcYp(g^6;eO?4$TTYT!TE)GNMem?K*di-yK@qQCf9a77GWj zCw;e3sB6dVtk`!JBk{5z zx$;Y0j&s)LrlV zaAK;Wi{dw9D*5q7PXS(f9#koOmwc=)GZE+}lcdm#JWd#Ng>t^=MeYtdLOBs}jIrU? z#sIjJ?~bk7jv{baB|F*N9#DQ>NWYMiOe$DGiUPEFC*VR0t$!VloX6a?G2$E{rsF-L z6QuD|-S1IKlpbAd(LXEj3)!(#Ohv~*NTyy0f3F-RSrqVbx6GG~d{$CTTW%WziSuBn zrqSF|S%0Fj1nH{AO>`=BYS^n;E}-gU-{ba`THl};A9#{WEoszsNBJ`f-AZeODwV0S zZ-LuTN7-#Z_yoweVgtRs{IVdJFu6l&WbxhGumc-b6;;JezHeA?x@SxryVTo3{K1An z>4(^t(Q)k823`oI=atYrg)${sS{FUXR09L~`*t$%3{Zx|G2m-L$RLoANTEelLm`Zn zGdDLh6i!E*I}*3eBYt&0cYb~);&FIG@#wb6;)?oy>-}aF%CE$)LUz^=BQyWNUEl+P z^Rl3^>tmnbETZ`&jCmec){;lKEA&+zXjY&A=A7i@ya}I6_HHvlYV>GA`;m_KvzOr$ z4Y9m-tftWqrQb5Xh;Yyi;7#XtglKl}*w@JibI=GZ6RqGnJWeY;(>GC=_xl7@XQl{C z(L>K^+QjPE;-`fIZRRx%HwGfYWKaqqJ4}5DAaKl_hvN7xPC61RD zczmUiZsWd~B?^Jh&BIa7Te}jY1u3$~Y%ZUGePH-{QHF1amS{PT+3%fAd!;$RJh6!zC%kR3YP+j1$+cI3hEf2EZ+{ zyW%rK)Uh}LvcI^zf0izUeyFe#8Jqhahp;31{@s$ZAKw-ob{1=2r^H<9(svF%eNr9dzu(||I;Fn-qJ-s`J&#R-7^EmXdXRF7R^?Gj zWD?nKs9F%gqAU?EI>eqic>mAy^bl#eML~z&39Fj5*7cWY3-N_PFdUrun zb}jQgHrPJ)UIGxIYE926<*l;fMBTl!^D@LkBjLSx#%fV@cz!?JHFq)Ri+6~olJ>GM ze<7gX1@xJ$Ufu=kUaz!}R^nJ5<3lIlBYkDB-zDa#UWsHGr(yQh@mN@ef4?k#oo68z zL=*~Tl5eB|l6ew15U3&fL}VbC)SJeF){QDV*~UFT3X*y2M#$2Om5K3*ZjUHk#Mk-b z?<)n^f#08Yhfv>TUL_+F|3uGR4!73~UlE27r;8?NXs_~-a!);+%sy%bq!|Y?N9PKY z7zu~E^X{-R`Q&w6B@nV=C*eNiklv=DBfu3&a=hK6;Sv}P+ZS00FZ#BVsoKdXRQm#I z;K$wmc65<-$&Y8{@e%CAt|MT@j zZ@!&AS8Flk_`X2l5$(!hY}hfa2=bCGj7Ui{Mla2DjeLdPU@u>P)nGAUC865b&&kOS z+owT75I3j@2u@s4qx2#BVGXoH!or1*CM|5-It#u8p2x-M{3@*YW|_Z)kE94zeJkjw z=0pl~PKA)3ja5dU*pd@v2?w8RQDm^f)i!%0^R7!>+Z zCPQ9s3vl)LiXivhNs9<%FLJ0UAjVZZW9+u&V?%cbKH@l{?eSG*UUE{&4a53pUP;`2 zXW7P+40YEXAIO;IMZi>)J=EZ`YoK+8YK{VT%|7DCmPN$(4_6cKR_oD^!SYa;uq<2MCwitf{#tm*GgkXor*Agh)JX-(Eu%A2JqVh*_OTOm zJwj6Cl34nz-r;(OJ?g^$ua24|^V=3{B?)E^cSlQ1Xl~>NT4%3B0{yZt4G(US=&kDn z>xJu~y&oS?DRC&DIC+A(^^I|yrZ&>{t5#_pp+9HYDm!vp{;w{JY3e$i+Wu%VKxifd zB^5w$^|SpqLNiGy+FjB3BPnlZ9{?u<;eEy;hQ$)yOB2t`7 z1?H1eQxT&jX&aJ<9(QnccRS(?*>y4sXg_QAakZKH^cxmo4HvvMz4AtKySrYl%y-4= zja^9X8}b>p*|2EnZN^g@ifpdB5H*}l+Q%}*}uBdsM zH1`0yO`m|gCQ;eH2L5xb4kuIB?l_pF0~2uszwHJE&$R{iw@X7W&4Q9W?F^rN(blX* z)&Je#UH`km4+&VJZux)AfA~*N{Ly}{t6yKuzTbuiQuOF-VRdwMeP4I})BIvM<}~z7 zS#RZchl>90(1w3bhq(Jj()KS~KmzLD`qR{{pmKCtooYCT(G};rcPd+TerWya*7liG z{KG%T@AuNv-Jfe}mESx{aXf!vb7yC~<4=?BlzI0tQK5@=A+;X0_2y0D8&83K?&Tm~;`ZOH|EdA*HhX)G%rwIP) zPMctM8FRJ~a_f1vIZ=^n*S{P6=VUx34>6{6@yN>@N2aF%sp?@IV za0_#yPgo-fN8I?C{U7S&-h0&P* zBfv1VhB`1IT~Sc_li~h-Y5AQ)DJ5NgC+V9v1Y4JQ|4wnSx5FkdhVvWqnwo>%U^PsJ zxya3#r02uJ!%Cv;I<-JY^&yGLAH;Hv$nk~v{9?ynHcw)uNjWX_09Uwm8R)hJ6f z%7tYLs#*6w#K1`%z3pVf%EidOIIt$tMJ-DlynxX?YM7%-8Za3Y8*3~fQ(o%-7)j}= z7a53VO4CBlH}_=^^zU4^tXsbucH3wO)4v}VYgyf1!s9euw-sVytI?FILpD>L(@FEp zNMS`I#{6|fN}DDi55D41Rd{Ls8S+j;2gI~C4UAl3!IY?QCi6-nL}*O`lh>L8?F|Qw z#;+gxs)iLpx6<(&W6VKAw%Jm}Lz}c>5CKgqxe9wK2~83TtCbSz=xn1N2KFYUI99)r zT8TMf0cQk4FSn7|W=tUGUBp*soiCwF)#3oa$831njEwE)Su(YVG;n`OP# z;!Q`^aFbUg|jDyyJz*6G{k z+cQobC+L`0a9w1~zEQs$Izt)3fytIgw z12G$`23P2}xz7-b=go_IF_v9LN6`~Ud=|Y;MByklzFS5MbSwBkyFU3qgOVca)hYx2 zGfY9gMy-E;cdfvy(gji{jKS0brt-5M@e_3oz`U$SMJ_O?24MsY=ylBj1xGCWn>pX! zg4R87XA-VImuD*$X%-3Qv_~J=<=1{R%|< zS8i8bXAYEq6G%ST2+o>%n87e~oSN=~N0vn}ZT5Uk+tOf_9LP{BZ~L-VO7D&ML)V#T zlX4Ly_`Kfrj?|?=o{&*+YeTi@&asG5)ZQHL+~e zF6|$PqpwYNa&s}I?bXEOr5O)J`-Ce*Sa& zA1&Ay>}zgPw@8nI(uTkJYvTRU=C#&ZHr8hVieEZ;k$@C8qnoQ=w6EaWz0GN8erRid zHLjymY_n(5ei|9pDadUhiUFmBmiRr%fWI_EH16Dn;v*sYZymK%rN*tA$>-F0Y)+WW@?&5l^dL0pQb zx-T4%qIRmE?OeitP-F}o`lOaG7==?nWygJzm@)U~)4I6Q^G&q#E8a|l*urI3CZi_w z>hZLf+adv_ya!^sPS3Yp!-Yj7uRNu_Mp5FYS#Ofe6P)eQ*m4;*^EOS{ zo+ zCpV>~PCjlP0Z3SsX8AkHv7G8#75x!hAS!$Fh_rKQRsw$AjaC z9G=lRl7x=N&dqrBTP102%5PAklkcJ(QpR-R-A6eOoz1oTV<&SxR4bPShRj|dLG8}(CAKGKT-dTL|T}{xsCI+aIgD3Usuk-#R$wrxg%mXjr2aRgipD^ z*7JtB$$>{~*?Afa`AT4l5_XPBie9lb?^vf=LhAXEK}B9VUOH7NWx29=Fwmj##XvnB zcaNZfX7R<4=p&9^*M2qbIgL>OX9-KowK6SBb%}*AM5Scq?1W5?5yn!zLw42tKK3}Qu-!pd z2MyNm(>eI zMgf&P;eo%_4?!HhesG9mL~E+PG+NJsPrE7lVQRChx!$@}rb zV`oMD@^9E=R+atP%jIEgiY%&p9|O3i|hc?y-yf*apV`J>}c z>P?dI(!bj)n6meA;rU{tRS-)EKc)4j9XpQ;)GE=F{gam`dV7L-o(npiN+<>XiHkHu zdJnJItNBnh?NsR`YT}5-7%J0XJhXc8Id;fYqkgW~m*_lN93~uArA;Crwhf~wso+@R zywo$x>RvV}Oc~_R%T83oxBccUjxf>(vj)85oN&>8I4ai`#%6aR1`#ZG;9iq+O2)sR ztvw~vX6r?e$XHJ{mF_HR+EZS_T)ktpzMM1A2H=Jy32`$@#ocFfsugo1i45Z5?J;sk zhLF|U$XOEem{|I*KiTS|ROqOSOtsc(Sc|kY4Y6?IMnrV!WEd_g=BG>;yE|aB^K6)D z77&qnx#wVa5;hyn zxk+_u4i~@4%X#fSPtX_<(x1ZFm-rUk)8Mr%Pt#Y;Ve>hh=tJUmp78?K(xl~=M+w9| zY{~dlwwy)r>yKEq4s8LJi$h9Zsx<6%#|?epgQP;UvBQpaJwc8wazQ-e2*bqis!H_q z6%^&m8gx^B0&}(=FqEy8H6$dNWnfd#)K)pK>Wz7NZ-&#+UNHuLcISc(_Qa%Y*$utT z>b7kQ5ju9CKEKxvQKk1+KZvd#jVyN(nxtpE3WOgiK@F1~5RLghi5dljnd8VQi;%sG%4np`nQTVxhxRZSwEeXBQ+P>*YQ32*#coV@l5etgE$U<0G9OxyPI*vs`Y92h3=o`H z&=_A>MAYHf_darOC*;Yz`3g%Hk1x#&M2GW^|2TQirX6KzOHNbp357v8wuXu@xt2at zBjFrF5k=h#m_A{i(L!3(_nq7m>Qz5RO!~agCZhX%&Hed)(|MV!WuqbaIhi}KV_H)TJ~mci2%>*(9$73K z#$=2cjPJ?$*x8_5(7e-8x#zr#wYP_b1pdPXXPf6&eoJ`BPtjQDA*{aU+ctnoLgC|I zRYL-6$NI07{;mIL_j@kGwnX3{yhtg z8$}pVToks02p;*A;Eu!&M*#h*wHv}zhz#d#B%F$vtPI&RL+ep4H#zeb#@NQVd@)IU zZ6YSr73<50!|Y3dPkD{0Z1I(wHQw|d0H5|EIY=~=cb$v^ni9qu-Mcdv+I7uInAHx% zBpQi;IIU2HP&qlwm1pPBNh=>h?>v9~6EdO%_(m1kMfg?bwPYaoK&+GhC`iiu!#7gS#K@uH3+)`FK`<$keT2{XRYNu?J%e>KQ3>i_l@Ju8;rUsIQ26&LMJEEJA>=B6uv|PZz@gk+^!O~Sm z)vrc9-{WJFDdq0q;LOTJ+P--QQOz~hpb+fm>)}py@qt;{LKE8ketp0QP_k$5cuY93 z!H`Y^Q+WLGaQ|18Y)9+DxXV)=!CA=wYsNt_B#EB4mg~3ZC6OV)c!_pq>NeJprU-UK z8Q!9Ng!@QSNvl^K0gbIRv~VP6gJl?_d(XDXvzU8^$_daO+*DN+I;W?*k{cD-SH{$O zGIUdkPoJ0^bq(!Ed=t5%sHx~C?9LE8w&X0<@cA}U%VP{x+PDW&_T()-aXXe>EGKtS zmo={5u#et;WMe>Sp`Zw2IVk+h%IZ&F@X++6#H}Mb6WdAcE=Cf&DoOWs`fb5P>pYbN zJ$IoM)H z&9fgm1!Aglyw;%yOYJwil!X&$q4BE%uLPTf{5+GzSDhT=9*Pm_jo`?YiH2sONrv0- zGr5pG=Egzr1zIDnjm(L=!)>z7_DB9U)K57vNxV==%B-EZxSvt4VZxjHs*km<#$oB# zoZ~I3l#*oO$C5gsk+p$Y)3Fp_?A984A3}!_4BG_y6LDs5(X#QXr^H+3QKM3#T*MLe zyy(rHgU1rx)yjkg1=q|DwPo9%vDJ zA$5$spS{-Omwzc~aJ^Ao!3SsHiD1$$esPIVeC0+UHsp|1AmSY>ktaL2Yd+T)Axu|8 zUF-hw5x$%>(MET&*ZTSt9ecD{))<(wzGH)o9H%3`G>*A$=?zQQDZZ7!kZ7QVx==!f zUl_XIO^y6Rlw8huXo{k;HhFN7QhbK=Dxxqp&Do_KvAkQV%S=fHbN3V#5o!L=c9{nE0V?Llw|i8x7qI<;r{tZ_~fVa>#Wu{cY=P|r6z(k8Ak>7LzGw_S;A?} zf1QTJBW=O6StUkIg2Ip(2N=;jzO?Qms@T;nR1FGNYoL?tQnud*?)R(17V`(M!h_13 z@A_W#Z70@B>$~{fMGhEho&1o|OIBg#pUUa1ipbMJ>8M6DBq9Y4> z72=bg>r2d%7^n1HWG&V4&2;R({60n5?k1^LXkUf03uhVz@XpcTtH^vy>DhV7LDElA zR#DO%o3toqV+n1puR_~1&Tj5!cz~`*{KT2Z{GXzKEP6J-$7Gmh10oO+h{r7}oax_= z9<^LsA~e;FgU*&nG&ny)$sc#`P8oKll?*(uU{ZXte^^HP;PJw84SSkf==j))``Gm$ zN&I*@yp;;}X6q4g3(5j#C6qn(W-_~{-q2bQ+bEZ|k;^bif}y~a^+X_0NZ&v!H`h{s zMc=4XSk4h7)(@;pda*QQrCv@h8>9(dwH5O22EQ&i+AIREk1&lf-J7Jcn=k<~#f}-t zs}7U7J*aeoslIf<+`lksHET9+gRb}rspY7kyeP#FMY+Q6_4{zLY$S*aGIv(vJ~yK< z;aeK>KZJTE3douG#ILECzRQGG5xT!6SHV) zGJVsL)Z2cLQcju@A zM^b(qExwH7(VKwCGwP)3X0c`)gj2LMot-+Ms`lgzue&S{G6LHxa~ z+*c8IRZiMp*ZTV>%a0j*e5mm3QjWEexs`5&#nosHvX@$#Sf z-=yl#tphaX1%Q3lu}c%b@E>bIh`gzdaT;A|bk;_E99mJ=w-T8BndfzY$!}Pw@%=~{ z@sM{yoboXwRFiyglP}j}UnUIdh&UfM0PT&=%B#gwx#nq=68oJO>jw=-AD25J1>Rq8 z8k33YO&k+#J6rzhRB(?j-oL(fOr5HSP?JbBdPX^w7q@G65yIIit#S-{pn-g)*0b)_ z_cWmBlHh4UkV=w6SIe&_=VK3v0ek73s>NP{?X@G}rxP8U$ z%iYELcGMb~N%YKm{0IbO4lD-C|T`?ZH_H*vk@A3J3#2-!MnkpS~iT_lLPUksHVu6qxewoQM~OC{OFL>g@U@ACn9 zT(D=|UlV4=`q#pFfTZe#NpkZPX9V|zts$`!aJ-VZ{5;&0H}c=e{pY!v{b2F=t8Gkc zj-gc_zE^;Z+*caXz8^cr9_grUN%_H6)2d4%2hQwC{UXg4Ph}2$lZe4A-js}8rZ8Vt zNC_hm?5%>~V5*B^Vt%BeMTvoT_yX4s5tc}tan9d$U*2Oq%N$uE%aW0=I#xC3nF~GJ zoD1z4UZ4lu(Ce%kTge_oJsJ{7oZA2}7>(1TC9!|QI=U)5L(_4_?a&hy0q@8ZGP_#D zW~MDr;!3vc_8yOyx}|4gABumKY!#pPBd$I+dh`ToXFrZNd;Cuxo-^mzV5UK@Wo zzl*Maf|v8&syNj${q5mHLo4_kh*B!-9Vi?h(c7c^4erM#8=1U1GZZl`vJzQutj{U% zCakvLSsquiYBZs7m%J;lOM{N3c9n7`z(L-1(&y|NDxs!K{JovVa-iDa2r2_Nt>^X= z%<{tV5XOI6sGOJ6$5LF!4^qUPF(cZ7w<)1mP=z`tW0h=h7*fwOmAGmL2rqE_d( z8(&6;m(R|#S2^O;ibOA6*rO(Km+&+_8rJZZn5lLp=l10JX#~SPyj3%!qz(8n+d>e} zL~Tq4loe=ijLVr-GPcXV2lrX$mh>@yveDaNGM%w2V!q-%{`6zb||1;nMxlQRo0&inub)Z{qWPn?bEHeW1m zoSYx_SLDsw&fA?2nE9Wz|HG1m#(y=2$vx^{33z)e{`w!2x!uPYZVLI=_;2V)TYf~{ zN^-r+oF%1~psCHT*}4X^FZenfU-?|DP5s@lDcU{d+)(`Zc}7cBXgTHr1&u#?4pZr* zRSt>Y)t}JxYaCj zhh3ux6l$8Zt4Kfw=e?0hB!To^g z0Q=U={fxuYy);ZEj}nYmFxk8HfuAtb*ien2{?L6l!;IF|C!P5ZBz<}(7IEP}mNFbE zF$-Eblccyfy-NA-9e#o@QBTLo>~hSzMHdC#^QYqy^1gOIa1G?A9(H}N&(}NLX zkAj}q`;cHPDTNHjUM!Z-S=$iq^WoRRcXKsSI57pl>HOMX zS?^u5vVUNFarZ~kN$fKma1W)j<@kRCitIJXmCZ9$*xbeW=4KT1_S5J=h%crvQJd>t zz^x(0^*!+tFTcoiHSc?_uCug0a{*TYQ>TaB3O|u2`D=d7Qp9gqX^f6tdoDkcE^n1B z|6A}~;n0};jy<^G%nADbn-oGhUW6@6t8MR-ytP+p^JxxhGc87HRDF_p(9#H`zS@j0yMi zKf>KS;BDC7zhQzu1k-ja4T9j+sb68x{4EV8NT~m7k}vohlm9iz|6DN$#s8vwjJbB6 zPyl|1zjrHAYVSwXb(`dWO9CGG`OO<1R!lXs$N=67HNqp3A*-s9{%^JF>`>j zt%DEZ(IQ-^S{b|gq^ZY8A4fo{kE2Y#r$$mypd?s_@ms0Hv(u-I zpz_alH1!>@xM8KW5!aEiX(kV-gkOB>{;;B--YMxa{Gq)Hyt5G&Q9_>&K>{|Px2BFQ z^QK9uy4aQ4JKOD%<60O^u(}SjvQEzk7|}UedIS$)d73S0`+I|R?ms`;pnoRpwXV)M zm%-!D9qW_BVKhUYpiV8%UE3Q18nhEcS@9}D=d!z`wP~`}^j3~(62qW}1b!I7nxMU#)kJ27)r~wcCDo#Ho}ncub+{@dLtBW(`^7RxUj~lO6^%! z)yuEEJ6CdMIU*}86#blfIR@Pw#8SaQa#h85|mX6`UEpB`8FtmqBLQ1-Ou_p%Pcyr zl;X46qn@ueCuSH@^%|$R-Wn(_NMgiWf5URcflX__TMq=ESm*LS;zt@~FjO|Yk?#|$&2G7_bK?uR8gzQ)U`!n;cfh8c}`b7B-_Oezisd$MF1Q4lyE zEPnlStcFHCZI>6|N$D{xP^TKjR2`G)ZeCiarGz^Pd;5~K9RNx>R{Mgv5Mb!8Xxk-n zN8HGkw}d<|#a1rUVis1Y%fofFQ$2Vs3OpjohSUiu*o*u5`a7q5(0)T$cwn0;&rn0c zV5MetyydMp=W8Vo?}Yc#@f=?KhUHNDnvm4GrS%p|A`YO_;I8)sAkYw#IlEg$_6eKP zy&cjSMpj$f4!9Q`J^LgY^Mj28?5()ZDTphm@4WYPwI|sTMmyu2CsAG36GQ8}GSr|Q z*P2HJ9Hx2s%X=(NH-~?JZo<0%Q|tAC#;iOj{?jHJ6d!MwM}7vhx3DTVx7CkvJ!dFt z=QPu@q-Qd^WBCPN{If0c`BhLJLcXJA!u`cCfj6v_uy~jr zA2(y6j=P$HS2EYRn}U|knfaYro$|P>+R_#vQ7_%ij_?!xm(yOGyL@vq5mL^+8!KI@ z*CZ(KH@uugoy>r2g45}`GY z@*E+U@0G`#ZsVk^bARnJrsp0$joqt*_ne5h-?3g-)){vz3O&|$cu@!UXFJ&uS=gz}qr3g24p0cdMZM4h>%|sYyjP zJA*CyrKt(X(A6;a#qXsmbC!m{!OzAPhIxaP{c)_Dy6dIK01qFRN$_D=`hADSCa*Li zovoZ2TjSoKp>t=7$i8t}9_qKmlawPtg>BxBiD~iqlX0l@+#=TX9KYBc=BR-!I`NS$ ztpZ#;yUimaMR8LQ@UXU7}(t}a#6B{~gDSd7d?xdOT zosn-K8YFBC`MQ3GU5UFnr6`Q=0uTNwBK~lo$km$o>bmI$L>K*Kba%Ola3;NIq8Tl+ zlIqgs|2od%hUs82+KHCD#aGX=k;yzBIm`4pHiF3H;69{5c^ zhQjj%&@4-ptO8UNn-_&Qm2IgE=CjN3Luz)3Pun9_>MwXIUhb94Hz=pX>+6M5`!lAI zz%iOCT0LOM%;95CuE(q>zYQz*YeSK(m&naH_fbWBpe9LD5JHBR?U_^o^S(Xfc5RsN zDMDfyN%&CFl9l#bgeH;p@Saryz{-YBipZ*t&>qCc3>m}~AInQb)6>t(7?MF5Fn@9d zFvJ>YrGv94>92{}fg0$A`mq(Sy#zE3F{yJUa`P;6 z>&BqYytg~WTQfO9{QjA&u2Ip22 zLz;9PU=fp-k{5&Ssx+^CzFL^7q(81Jn7E=>I~V={ZjK$VR%|XYs10QxBT;_knN|Zq zb5*MzmHW7dn@$O~NP5?B+g47i9mhIo?gzmVx+qAx%44~7AQG#9?fFC^ox)=V6cfmw z0@}LsrA#)8_N?K+U2S(9gyM2X1r{YK!uGnJm>G72Tj+n2|HKW+aJD?HbI9N}m3V;c zngyQ%as`f34b=5~XDml*=B_0jFmGcP?!qq!9;sR&6qSqh85`?c31n1RbfA+r~lx zIfKXSH^iy<%LSN=6bC-fcp(p)I1^Z%-t>K+R4R*s7?X>IYM({5Xs&n1w%5S=ts(u^ z0yC}Mz0E3qCw*~*8%yBpogTuehZYZb(_}u} z7G<9tGb{F}s$78^f>8Fdv!f)^d&Oc!${l9p>tPSS?C9~V)>8^RgXhAbPnYGqrgry)IueZ_MWL3R zxg~B4S*8*VSdYI|&Hkr)&d*nK0HAtqV=kspdA3B3Iw7RdJ?0cLYnXic9490*DuBSc zW%cm#Uid>s(WYj6pc*q36&7K~*{RkhE0EFfvI`4T@9hl~62scs7WW*~>yE*JQZ#rO zMG_u2Sx&1PPR%ZYA14o!uOkg~>gX2fI+A0LChNEDUR&iKfeV$sHt)sH)*sOXn z%NWF{oY=d*lLI8h96j-!Jcwl$2r zMXHMnkLkElz#BCZ^!s0>g#3*rLu zGf*wGuW>abkE5X(D$y^F6Ld}7^nzW@nNjy`2sl~x7(^rtaAQv?jD;cB$3TrWq|yF4CNI`h6sP3&%rAz3%t?LoM&7mj6% zBO)TAGOv8xQMq!r{+v~_{+t&er2i9s6O^jU7ia1cZ=+;SYO8T}HlryjW(}kw%RY0u z`VIwx@)(iqiMw@nvT8!JiR3+-5SS5WC;t@^|Mxpbxj?vzWfBA zJAsIq{;=oEwKtwb>cms@@_U^O+12PntjFvsb}n-0Wc>cm9k7TZme8VVhe&=`e@GWe zX7g5X1sC8bu{t@D1Dw z3PNA!v~RRTZ>9gT8aitI2063wvV@~jAh|Bd@vERE(YHQ7i|0wtR65*N*#kY{6Vw#^ z#ZxbkJA%B+No*501+-C2og(c}bdVg4Av7apY|U8YU~Y2Dl~1#i$OCt&Gy@^6!PnWA>?zcgFJhVp4lsj_pq%_T080RSpoRh(p_FoR@Ea1z<_j87F>&f`I zXz2NUVddl$d2(EiXq|c|=h99uq@tdmDhuAz$>-cJ;V}x(tF0JH7K!={EdRhn@#O>| z2A$SQx`|>UsaMpuDX91*=y7uGHsU;D#u0KP91ds4%^yOmT#AHu`QfF1Aakv zRw3Ev>e+hH>vTA2LO%8U4RD4cJDFT1tpS02ac+$r!g*z7;fS0q@#ec;OXP8dsGl>V5* zsKs!D$+Ml_$$qM&3TK6u^C58kaDRF9IQmX)GJg;YODEFZl(_)-CDsgh2A!r zl)*rAF+=nZf}qJ3?R-ixt1>InhINrb7s?yv4gC`D{9vyDx6+iW%|gkwv?# zkvDI#yP^$voKic&$*sUORsHZo*;tW_;GsR8qp?rtAqZ~!PSZ=1T^q8jr`{C%G9oCH za3-*yi>X)pTwvRDN+1Fm3#p6n9*94gAy7(SlIe||_tu(mp>|ek)L0d%UsZ@>TmzuF znzuhY%@CAzFBrtH3<)jA*Li0Lr%jtA)W5ryOKvFlosb=4Ry118HjKDturx8US8Jb*o>4a!d^sDxHBM=ck&5Dl9pTffaFeMv7w(GF4>|~Z zOVvo09_!<{2lN7v6P*Naf9E?6tfvSfe#oT0awm23_P)(1ldZdL(5d?+yPJCHc)2~O z*5Jv_j4nhS>j~gpGNmzC)Ny7DI+vpe&3tDr)Ro z2Y>aVfH+fG1~PV*P2}azL?(z_S2PapDOU#)L8lTyz&HzwWi5+H`&Fq=d%+%B1?1pn zE><*Jo!P1vfu}eR9@oyt~`kWPY_>?ZUyqK z`MUK(mtDxD>|PECScD!gCR-vBow%IsSBM?HI^p#fmxIg()|F!D_>_*|!!Dd)8lkwx zJs*-S^^=S!Oz!C>Mx6%Q{pqIOz0G#ke?q?=-CMP%Lq+HiV{Py1tV<4=Kdo(oRp$Pp zb|ce56}p3XPqguJyNDgqh4h22eyU;5A9i=)@!O-XEJqCa8Wz(@MtU<=<;Ty_Gg1@* zB;ZDxF%n8D-_mx>=#t|9@2(Ruub_Fx%PEbm-@Wq)aZ=IzqM z*W^kF?|hzbJk<<&ORc1~yijz9V5;rV^P zpXYhs^ZUKe`K=CVKC|L*x5h3W#c7)4Vg-wmDzfQdjMbC-7Q6QDk2ineQ2OU!^&4%AFVhTSlOLKn11#A{ot(5GkoAwT0XUrg9#8LA zGH>hBlb$XX9OLIc2kVO~2k}=*U5&$xl0NzE+so{wS#eY&n68)LhI40I5XGN@xrhEP z{=qMMm0CJ!gwSh|e7f6q7OlPGb2uV5B20?8htg440GnIu=&74)?q?Pg6gcLP=%bnu zDaoB1wRj?%`}sk4(E8)9G#RiAJ|~YHL`LJGWs?% z{Q&&-+F&_j8p3M9BTcR^Q#vw;CixTL6UvzCyTM>U3X}l^bgRWRjx7~xghUP{mt|KI z(NhoCid$n)@WB=oJNX0g{8aRY|{uj*0wA z6{Mnr5beO%2KxkA=fi)@FC4G#Z0)aoj6|H(#@fhtQQ>F;8M@Qz>BbtnzP_5|&xF$u@JBpCW)X#+c zHSu>zf}-pBIvsM(&Bk)N&)40p!e<>@!mO+AL&7A>qkkO#-hS4o8QT{xkcmzKB?i@w zn~mC6biH6CrjXG84)Scmrdvfbke>#62LfwN#nc4x9iGu$}MkPEh=F{49BxCMQM!$*y4_+@|TODZmLD2FzWeRYJpYRqe z0tu*c5vhR%k1MzA0V^E1Nfsz}9>3aFTHz~$`wh#n*@m)+lmK(7p>!;T*UsfifXaN^ zgj8KkRhg)^$`34cpof*srin~?LnxS1-fsPV`J5IuD19hHUP8>*^xyNF2kY4U(wy*o z+cdZUxA%J=_siZ}=X(^L}X_9M`p&B4HJG6QHL>TKDd zXz1nZ**pziQN8)1)Fz|I$WgMU8QbPl$4}N|2wF_zG^b#W!8I+a+NWIhWAL)qr|{BG z^zj<22CQ9|<0eqi_SKL43!6R0!eLq4^tWYn{pr_w?u>PvLY!Zcce8Xu{y>uRMw+1U z4eMIh#Un?~q|~k2VKRyDyu&Hjl6%hfz|-|l1Ao^>-*8CmUgqIslhDnZd=i>)3^>AqfNCahoJN+OA$0*i5slPg@;pxlGTwo^oR4uMYNKy!LnQ-58(lz^Jye4t$o< z>*q%ZA_Tu`Ac+l?CAUnOjvj$cB=^`$N%S_~-c*0dSZDx2S#F(Js8PHK(!K*@Fap(L zaSfA0)A<{l6c8xyr{p8%#(EtZP90k)b-za4V?!3cUVzBo>@=sG<13LSa7L`WGUFXwd)w literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/screenshots/BinaryDataConvertAsymmetricKeyPairArkTS2.png b/CryptoArchitectureKit/KeyGenerationConversion/BinaryDataConvertAsymmetricKeyPairArkTS/screenshots/BinaryDataConvertAsymmetricKeyPairArkTS2.png new file mode 100644 index 0000000000000000000000000000000000000000..9e62649cf98a4a3df2d7dc1cb575d39db4a9f7b6 GIT binary patch literal 20790 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/README.md b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/README.md new file mode 100644 index 00000000..ba461cd4 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/README.md @@ -0,0 +1,86 @@ +# 指定PEM格式字符串数据转换非对称密钥对 + +### 介绍 + +以RSA为例,根据指定的非对称密钥字符串数据,生成非对称密钥对(KeyPair)。 + +以RSA为例,根据指定的非对称密钥字符串数据,生成非对称密钥对(OH_CryptoKeyPair)。 + +本示例主要展示了指定PEM格式字符串数据转换非对称密钥对(ArkTS、C/C++)场景。该工程中展示的代码详细描述可查如下链接。 + +- [指定PEM格式字符串数据转换非对称密钥对(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-convert-string-data-to-asym-key-pair.md) +- [指定PEM格式字符串数据转换非对称密钥对(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-convert-string-data-to-asym-key-pair-ndk.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例ConvertSpecifiedPEMAsymmetricKeyPair.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── cpp + │ │ ├── types + │ │ | ├── libentry + │ │ | ├── index.d.ts + │ │ | ├── oh-package.json5 + │ │ | ├── project + │ │ | ├── rsa.cpp + │ │ | ├── file.h + │ │ ├── CMakeList.txt + │ │ ├── napi_init.cpp + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 指定PEM格式字符串数据转换非对称密钥对示例代码 + │ │ ├── Promise.ets + │ │ ├── Sync.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── ConvertSpecifiedPEMAsymmetricKeyPair.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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair > .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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/build-profile.json5 new file mode 100644 index 00000000..fb5a1ab6 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/code-linter.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/build-profile.json5 new file mode 100644 index 00000000..31862257 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/hvigorfile.ts new file mode 100644 index 00000000..e4f43d54 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/oh-package.json5 new file mode 100644 index 00000000..118bdd4f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 00000000..c368231d --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(ConvertSpecifiedPEMAsymmetricKeyPair) + +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/rsa.cpp) +target_link_libraries(entry PUBLIC libace_napi.z.so libohcrypto.so) \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/napi_init.cpp b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/napi_init.cpp new file mode 100644 index 00000000..0289597a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/napi_init.cpp @@ -0,0 +1,45 @@ +/* + * 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_doTestPemDataCovertAsymKey(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestPemDataCovertAsymKey(), &ret); + return ret; +} +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = {{"doTestPemDataCovertAsymKey", nullptr, NAPI_Global_doTestPemDataCovertAsymKey, + 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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/libentry/Index.d.ts b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/libentry/Index.d.ts new file mode 100644 index 00000000..458a767f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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 doTestPemDataCovertAsymKey: () => number; \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/libentry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 00000000..6abf3b7c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/project/file.h b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/project/file.h new file mode 100644 index 00000000..8b7f51e5 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/project/file.h @@ -0,0 +1,22 @@ +#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" + +OH_Crypto_ErrCode doTestPemDataCovertAsymKey(); + +#endif // FILE_H \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.cpp b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.cpp new file mode 100644 index 00000000..5b95b55a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.cpp @@ -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. + */ + +// [Start specify_pem_string_convert_rsa_keypair] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_asym_key.h" +#include "file.h" + +OH_Crypto_ErrCode doTestPemDataCovertAsymKey() +{ + OH_CryptoAsymKeyGenerator *ctx = nullptr; + OH_Crypto_ErrCode ret; + + ret = OH_CryptoAsymKeyGenerator_Create("RSA1024", &ctx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + + uint8_t sm2PubKeyBlobData[] = { + 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, 235, 184, 151, 247, 130, 216, 140, 187, 64, 124, 219, 137, 140, + 184, 53, 137, 216, 105, 156, 141, 137, 165, 30, 80, 232, 55, 96, 46, 23, 237, 197, 123, 121, 27, + 240, 190, 14, 111, 237, 172, 67, 42, 47, 164, 226, 248, 211, 157, 213, 194, 131, 109, 181, 41, 173, + 217, 127, 252, 121, 126, 26, 130, 55, 4, 134, 104, 73, 5, 132, 91, 214, 146, 232, 64, 99, 87, + 33, 222, 155, 159, 9, 59, 212, 144, 46, 183, 83, 89, 220, 189, 148, 13, 176, 5, 139, 156, 230, + 143, 16, 152, 79, 36, 8, 112, 40, 174, 35, 83, 82, 57, 137, 87, 123, 215, 99, 199, 66, 131, + 150, 31, 143, 56, 252, 2, 73, 41, 70, 159, 2, 3, 1, 0, 1}; + + OH_CryptoKeyPair *dupKeyPair = nullptr; + Crypto_DataBlob pubBlob = {.data = sm2PubKeyBlobData, .len = sizeof(sm2PubKeyBlobData)}; + ret = OH_CryptoAsymKeyGenerator_Convert(ctx, CRYPTO_DER, &pubBlob, nullptr, &dupKeyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(ctx); + return ret; + } + + OH_CryptoPubKey *pubKey1 = OH_CryptoKeyPair_GetPubKey(dupKeyPair); + Crypto_DataBlob retBlob = {.data = nullptr, .len = 0}; + ret = OH_CryptoPubKey_Encode(pubKey1, CRYPTO_PEM, "PKCS1", &retBlob); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(ctx); + OH_CryptoKeyPair_Destroy(dupKeyPair); + return ret; + } + OH_Crypto_FreeDataBlob(&retBlob); + OH_CryptoAsymKeyGenerator_Destroy(ctx); + OH_CryptoKeyPair_Destroy(dupKeyPair); + return ret; +} +// [End specify_pem_string_convert_rsa_keypair] diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..965554bb --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..8f2a8e7e --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,61 @@ +/* + * 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'; +import testNapi from 'libentry.so'; + +@Entry +@Component +struct Index { + @State message: string = 'ConvertSpecifiedPEMAsymmetricKeyPair'; + + 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(20) + .fontWeight(FontWeight.Bold) + Button($r('app.string.pem_to_rsa')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.doTestPemDataCovertAsymKey(); + this.message = 'doTestPemDataCovertAsymKey Success Result:' + ret.toString(); + }) + Button($r('app.string.promise')) + .width('70%') + .onClick(() => { + this.goToSample('pages/Promise') + }) + Button($r('app.string.sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/Sync') + }) + } + .width('100%') + .height('100%') + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Promise.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Promise.ets new file mode 100644 index 00000000..cc450eca --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Promise.ets @@ -0,0 +1,76 @@ +/* + * 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 specify_pem_string_convert_rsa_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +let priKeyPkcs1Str1024: string = + '-----BEGIN RSA PRIVATE KEY-----\n' + + 'MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n' + + 'Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n' + + 'YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n' + + 'AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n' + + 'LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n' + + '7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n' + + 'D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n' + + 'e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n' + + 'a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n' + + 'MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n' + + 'DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n' + + 'qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n' + + 'akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n' + + '-----END RSA PRIVATE KEY-----\n'; +let publicPkcs1Str1024: string = + '-----BEGIN RSA PUBLIC KEY-----\n' + + 'MIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\n' + + 'h7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\n' + + 'SHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n' + + '-----END RSA PUBLIC KEY-----\n'; + +async function testPkcs1ToPkcs8ByPromise() { + let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024'); + let keyPair = await asyKeyGenerator.convertPemKey(publicPkcs1Str1024, priKeyPkcs1Str1024); + let priPemKey = keyPair.priKey; + let pubPemKey = keyPair.pubKey; + let priString = priPemKey.getEncodedPem('PKCS8'); + let pubString = pubPemKey.getEncodedPem('X509'); + console.info('[promise]TestPkcs1ToPkcs8ByPromise priString output is ' + priString); + console.info('[promise]TestPkcs1ToPkcs8ByPromise pubString output is ' + pubString); +} +// [End specify_pem_string_convert_rsa_keypair] + +@Entry +@Component +struct Index { + @State message: string = 'Promise'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_promise')) + .width('70%') + .onClick(async () => { + try { + await testPkcs1ToPkcs8ByPromise(); + this.message = 'Promise Success'; + } catch { + this.message = 'Promise Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Sync.ets new file mode 100644 index 00000000..372fa532 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/ets/pages/Sync.ets @@ -0,0 +1,85 @@ +/* + * 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 specify_pem_string_convert_rsa_keypair_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +let priKeyPkcs1Str1024: string = + '-----BEGIN RSA PRIVATE KEY-----\n' + + 'MIICXQIBAAKBgQCwIN3mr21+N96ToxnVnaS+xyK9cNRAHiHGgrbjHw6RAj3V+l+W\n' + + 'Y68IhIe3DudVlzE9oMjeOQwkMkq//HCxNlIlFR6O6pa0mrXSwPRE7YKG97CeKk2g\n' + + 'YOS8YEh8toAvm7xKbiLkXuuMlxrjP2j/mb5iI/UASFSPZiQ/IyxDr0AQaQIDAQAB\n' + + 'AoGAEvBFzBNa+7J4PXnRQlYEK/tvsd0bBZX33ceacMubHl6WVZbphltLq+fMTBPP\n' + + 'LjXmtpC+aJ7Lvmyl+wTi/TsxE9vxW5JnbuRT48rnZ/Xwq0eozDeEeIBRrpsr7Rvr\n' + + '7ctrgzr4m4yMHq9aDgpxj8IR7oHkfwnmWr0wM3FuiVlj650CQQDineeNZ1hUTkj4\n' + + 'D3O+iCi3mxEVEeJrpqrmSFolRMb+iozrIRKuJlgcOs+Gqi2fHfOTTL7LkpYe8SVg\n' + + 'e3JxUdVLAkEAxvcZXk+byMFoetrnlcMR13VHUpoVeoV9qkv6CAWLlbMdgf7uKmgp\n' + + 'a1Yp3QPDNQQqkPvrqtfR19JWZ4uy1qREmwJALTU3BjyBoH/liqb6fh4HkWk75Som\n' + + 'MzeSjFIOubSYxhq5tgZpBZjcpvUMhV7Zrw54kwASZ+YcUJvmyvKViAm9NQJBAKF7\n' + + 'DyXSKrem8Ws0m1ybM7HQx5As6l3EVhePDmDQT1eyRbKp+xaD74nkJpnwYdB3jyyY\n' + + 'qc7A1tj5J5NmeEFolR0CQQCn76Xp8HCjGgLHw9vg7YyIL28y/XyfFyaZAzzK+Yia\n' + + 'akNwQ6NeGtXSsuGCcyyfpacHp9xy8qXQNKSkw03/5vDO\n' + + '-----END RSA PRIVATE KEY-----\n'; +let publicPkcs1Str1024: string = + '-----BEGIN RSA PUBLIC KEY-----\n' + + 'MIGJAoGBALAg3eavbX433pOjGdWdpL7HIr1w1EAeIcaCtuMfDpECPdX6X5ZjrwiE\n' + + 'h7cO51WXMT2gyN45DCQySr/8cLE2UiUVHo7qlrSatdLA9ETtgob3sJ4qTaBg5Lxg\n' + + 'SHy2gC+bvEpuIuRe64yXGuM/aP+ZvmIj9QBIVI9mJD8jLEOvQBBpAgMBAAE=\n' + + '-----END RSA PUBLIC KEY-----\n'; + +function testPkcs1ToPkcs8BySync() { + let asyKeyGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024'); + try { + let keyPairData = asyKeyGenerator.convertPemKeySync(publicPkcs1Str1024, priKeyPkcs1Str1024); + if (keyPairData != null) { + console.info('[Sync]: convert pem key pair success'); + } else { + console.error('[Sync]: convert pem key pair result fail!'); + } + let priPemKey = keyPairData.priKey; + let pubPemKey = keyPairData.pubKey; + let priString = priPemKey.getEncodedPem('PKCS8'); + let pubString = pubPemKey.getEncodedPem('X509'); + console.info('[Sync]TestPkcs1ToPkcs8BySync priString output is ' + priString); + console.info('[Sync]TestPkcs1ToPkcs8BySync pubString output is ' + pubString); + } catch (e) { + console.error(`Sync error, ${e.code}, ${e.message}`); + } +} +// [End specify_pem_string_convert_rsa_keypair_sync] + +@Entry +@Component +struct Index { + @State message: string = 'Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sync')) + .width('70%') + .onClick(() => { + try { + testPkcs1ToPkcs8BySync(); + this.message = 'Sync Success'; + } catch { + this.message = 'Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/module.json5 new file mode 100644 index 00000000..4144486d --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..a74bebd1 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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": "ConvertSpecifiedPEMAsymmetricKeyPair" + }, + { + "name": "pem_to_rsa", + "value": "PEM TO RSA" + }, + { + "name": "promise", + "value": "Promise" + }, + { + "name": "sync", + "value": "Sync" + }, + { + "name": "call_promise", + "value": "Call Promise" + }, + { + "name": "call_sync", + "value": "Call Sync" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..06648986 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,7 @@ +{ + "src": [ + "pages/Index", + "pages/Sync", + "pages/Promise" + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/ets/test/ConvertSpecifiedPEMAsymmetricKeyPair.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/ets/test/ConvertSpecifiedPEMAsymmetricKeyPair.test.ets new file mode 100644 index 00000000..f95d1d3a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/ets/test/ConvertSpecifiedPEMAsymmetricKeyPair.test.ets @@ -0,0 +1,94 @@ +/* + * 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 convertSpecifiedPEMAsymmetricKeyPairTest() { + describe('convertSpecifiedPEMAsymmetricKeyPairTest', () => { + /** + * 打开应用 + */ + 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'); + }) + + /** + * 点击按钮,指定PEM格式字符串数据转换非对称密钥对(C/C++) + */ + it('testConvertSpecifiedPEMAsymmetricKeyPair001', 0, async () => { + console.info('uitest: testConvertSpecifiedPEMAsymmetricKeyPair001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('PEM TO RSA')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('doTestPemDataCovertAsymKey Success Result:0')); + console.info('uitest: testConvertSpecifiedPEMAsymmetricKeyPair001 end'); + }) + + /** + * 点击按钮,指定PEM格式字符串数据转换非对称密钥对(ArkTS),Promise方式 + */ + it('testConvertSpecifiedPEMAsymmetricKeyPair002', 0, async () => { + console.info('uitest: testConvertSpecifiedPEMAsymmetricKeyPair002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Promise')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call Promise')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Promise Success')); + console.info('uitest: testConvertSpecifiedPEMAsymmetricKeyPair002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定PEM格式字符串数据转换非对称密钥对(ArkTS),同步方式 + */ + it('testConvertSpecifiedPEMAsymmetricKeyPair003', 0, async () => { + console.info('uitest: testConvertSpecifiedPEMAsymmetricKeyPair003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Sync Success')); + console.info('uitest: testConvertSpecifiedPEMAsymmetricKeyPair003 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..4576dec7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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 convertSpecifiedPEMAsymmetricKeyPairTest from './ConvertSpecifiedPEMAsymmetricKeyPair.test'; + +export default function testsuite() { + abilityTest(); + convertSpecifiedPEMAsymmetricKeyPairTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..d584c19c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/hvigorfile.ts new file mode 100644 index 00000000..2a5e543f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/oh-package.json5 new file mode 100644 index 00000000..9b142d65 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/oh-package.json5 @@ -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. + */ +{ + "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/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/ohosTest.md b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/ohosTest.md new file mode 100644 index 00000000..c634e4b8 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/ohosTest.md @@ -0,0 +1,10 @@ +# 指定PEM格式字符串数据转换非对称密钥对测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------------------------------ | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,指定PEM格式字符串数据转换非对称密钥对(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定PEM格式字符串数据转换非对称密钥对(ArkTS),Promise方式 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定PEM格式字符串数据转换非对称密钥对(ArkTS),同步方式 | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/screenshots/ConvertSpecifiedPEMAsymmetricKeyPair1.png b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/screenshots/ConvertSpecifiedPEMAsymmetricKeyPair1.png new file mode 100644 index 0000000000000000000000000000000000000000..b81250bbcd2894b9defce45a90a1b89d8ac09fc8 GIT binary patch literal 42653 zcmbrlcT^MI*EWnIDk2~#AiaZ>fRxaSNbk}i2_U_OUZmfO^d5Rwdap_7s7UVw0wke# zLXnPw;Op<{@3X$|ulLNXS!>pr*=JwZ>~rnCX3qSX|Fc5yL_!^)|8MPIM*iO{{Js0nR|1NMgi?352=A~F+@-ifNO9*+F9Gwv+`M;}@UN@?*&f|_ z@R0cKeZqT0B!4deKOrEve~0kS-TTB(?mr~D``|CIyMO!cKX^z%NzD3GNI}mu^BMJX zIyS3}&vR6?!ukfrCZ6w8VAC_`+2cp-;;&baXham1R2#odadL@84unT>TiZMMf9&~d zoarx5cmEFlFS`Dt{WVT}@BYIFM34UVn@|wkA-qd?_rarw#KaHo5&nzRzk^c{-Djl~ zdhqb+GX*^>D(dHKhQ@ZD>7Rw)r=(^~%^cCts^}ZorlF>Z*}0Uh8^6sSbBc()j)+|4 z5LGm?_v-zFC3yT7@LdW*3Ich8!mk8(S=O4_)UylkS;kE)m~SaBg)D9>OQnL?gWo3qEJ3-Hn)M|?VD(m* zYX%}D_Kk~v;OGR5O;=V$b$ZCdVMB3eyQJ;VL{~3I0!Uj(yk3JwPh4uXcMSeqQChy? zagRgV_(}aCD3=adnAL`pW*+1M{7EyjcR{u54pK2ebmQ1EnKlDQw_|!~>%o#qvv~y3 z@47FvMg0^;0Q?@9gjn6%I=@hg5bJ_S@SDl!Td?Rha`SfNf5U~-0lLez<#mA_*i+aj z&8n;)qb+bM5u}e0ao(CRJ27Cq__^4?V}u})jm`is$bfp%C*B3yFVnxKIAU?fZ4gjW5^2WN3FL50exym0ErW?b@R(zBou+(K^)fO zp%$`;a_5Wzt>oh*MG$gKQt~^nDvt3L61uVyAFE-V8bbk6IqIU2HE6_*3 zf#&(LmCMialKG&Sla$oA7pe0rp??VWW{j-~=IUs${>`J88t2UrCxjayG7Cyv zXC~Fe4fyjW;lW+A(NBHlIHTA8A_$GbD$SQd(U+7PRAV%aMeUn29MaPl-?7Jy`HOfn z$J-?5UNl~GkaGWc!CmaTFoaCS{Lv%EKv1LjiG&c_@=y|`O!oNPYhPpM`UEy_4=QTu z@v?>ZFInrKr0%}DM_5S@=NT3$9i!P}@eT9syUG}kig7D#6484R-OaY1gxoH87&mTj z!G5^m9A|v(|l`K*T%f>lyf|I6mIudgi5P*c?DX; z*~z}YKE=~UzhBiTQkBO@Z{u4)CSZ&lK+H{HZ=iE>#O|@NwwVXv7ZY?z>%+#+aJGDK_mSMcrMwqFt(Bd3*B~^BpS4q1NkI ztyF)+b@%+Oazuwa$xAc?Y|0yZB}9>>v?#icH(U+K_qIJvg}7{3=0tc$tEkLv?ux za+&$ym)iBl+@&49jR&s{*31BqD75a?Spyp2s;i5# z;=C~P9P~Y54tEf3wdYsm%&{r7UyO1g8xb?h{ytsngSLKOF!r8lzG1^4pf&b57-Qj%EW&u4&B4qE-m`$=*vaH4<{)?lrP

L-pv>sF;lHs! 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 S1Xu)E1Xu+Ae*_{wk$(r`oJRNn literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/screenshots/ConvertSpecifiedPEMAsymmetricKeyPair2.png b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/screenshots/ConvertSpecifiedPEMAsymmetricKeyPair2.png new file mode 100644 index 0000000000000000000000000000000000000000..8624938eb689b861ad8bfcd8a1d571206f524d0b GIT binary patch literal 17509 zcmeIZ2{ha5{ywU^dv7|bs;VlEDr&B|HJ(iyHKt}_+N9AE#^WT5Re1Z8j<}AKH_su!B?^(~YvR-6mPVAfW z-+uQ!D;vl43pWI1jja;XIB(tlp?{R?uA}e!fnm8x$x1))?noJkmUw!Rh-;O)4q^5HQJP5l z0-q|PPGep}EQ7U2*#dX*{P8EJXDnuS58!m1EPOibW5OPie+TBmm$yRW-=u5tzk&X3 zcr<0M+#Az%Fd%K3S;GhAsH8Per)_4Zq{&VwP#rdAOsUDGD>3QEUNYHkY|7qxwp0;2 zk-DeEsC$9!9I7r1QTNncHT57`_QH|{+7dT4RiQkM6r2d+T$>SK}>m;zo!uICKzkJCYIi?Ws&l44%7G80>MsgiDw7Q@%AUGbz@NXa}z7zGi|(HdBl5C5(`Nh~(t ziG!$tL60{PVn4{ww>5_Fd1A~d-y0smiP4y98Gbi+NzUHbD0+)$N*mM_VE*Z52x*7+ zHE}hN>wx>5{6q<V?k&#_Os_2EsYO`(0a+vQMwC> z^7sddoH{iwa6!t0RQ`GbW{O>3U|+kWJf|_4uuv6trAIBKdnEl*rl$eD(S_)k-t@`V zUdz37WwBIh)i5L$v1jdq=<9QPmbiKyxHvch7h>~RA_^_AEomgp4Pwr}><53CZ9tY} zch4D)Hps)GE+S9@Hf^HiUkW;bKw&^LR`?|BHOW(9oUdqFD6-ueWIJj5GX%EzTTQN~2;!-xN>T=h0cs1eXW?>@+@gTC+8Sa9RYjrRX zfe#QR2esR71!IYl+jxi$vg7JWPGoTXH#B0x;HX)aIw2gee#d(x8hBhwZ&|`0<$Vbt z0V3EjAIktdm#1vA%h4TMg`i{~QCv-{z0+Q!s>R)b+VbMd0H4-HT?UkJe9+cZnKP{z zAvcc`g^umF$X^M1{}F`$c61M#8-#m7udnRCc?Lq*-=Z6Hk>P2cqTMr&?PD~?mSkDqiQ zfcLCd9<60NKpKXWc<&7Jc{25#=uk1pwUPPqLCYk?wiUt@{8Wu z8B6{tVE%2`56A%3Rwz(p6k8ErJ@{bqmkP?FACJCuQR)&8yb!P#YVCQ*ktjD*gEw!g zkUV24{;~zIdUC^3-TMQ2(P%hqd_kV~jHOB(`$QFDLGJDE4(a>SBN#K;F)E;YqT!_k zN>kcB-`?b2GhaN=P&KlbO=gYn9j>fzXsE?BqhpJqyjWhnw3}(E+qUz?P_W3d6i%6AgP|blkEdZMSU~X^3zsH5IC#HJ7B9Br zU^693pUY@p3!@Hkb8gua5qZMHud($$51Z`$%2KQh>D)WB9-}8ho?u@dkvQH=G{~$d z)q0L+hHj43J7aOT!B=)7C<1;1{`-d2#$%-`&v#GKY`d*pUSyOyw+r$@k9~lApw;fZ zk)}#GeeGF2g0E$9DOIn^ED_{_$d7LtG&5D-;pCVaU!%s8j*Lf8!KmPjTuaTped^T7 z3oZ3C7P#ZF(3sY*|F(Sn+mmxUnnl;BS5I?0=y$`(`**=Gyy#~31a7-*JLvHQ&?ps= zU~lEs42gc^A2_Puc_~aoKs7udZel|^PcfbZlzG)qSy85Aia|So%aV2uEmJD%CktOI z3sl)`j$cM9c39n&kAy|fI2?32qz z)gjtf?tGi<3(NQCx!vf(EgX;SwwV`Om?!C)Alz(8t#@pOZpI?!q@VZK<~;eVbU~~u zb$G8dKrLQrF;s3is&+wo3+3;eScNDU9DD91Emh%#$_cI8T^Zg4ieMk6b;itpp5Z&~ zORk}0Ri@b(u?y=+l^Hf}WbQG39;Pi%nl#omc6dSq`%*?rY{%^e5*K@SWa7H)$>xb! zL(=X5T~)iW7MECG7te|^E`vdX$A$u`-i$LA_LqJ!6g9AO?V6=XeZ%9&c(P@S*qfLI z1?ru}pzK+w(!#WqNkCft(Dus^LlviO#9{z63&--Q)`=%YNW3>-M_y~{?G^& zDE0`N+Vl#PYo&Un!#;_@pZrkSm$Hqu2h9@ACPG|}E;u{aO#5VHlnfM_6i)a1mTOA9 zYw0vWf;}6jZFNnO51yVVpto^s^iP>9Mrn^TH00uz3|{(LN%Bd{$1io>{8$(>s(dHn zD7rSyuWCZ7;Tw5t?_i>24MyHOBFI<0rVhg`KVeZ{Xxi4L0X$7?_~oblqata88E=U9 zOuYE$gWIS(o*7;_L=EuMHcyokDe$E$kbuGzBob2~2fz-#QRMx;qM5B8Z z!Z_RTjZs(^_dr+Km#wtXA;||pR_nX3XQDC%!(Vl-hc2iYHf1zLKyQ$9;F-`i%0z)Wfnk z+vxahXvR?5Q$Cdd-y-ABp)s>%o=LlFdMOgKt1g8tHGMxyuMQyf%Jyn&9BH!To0xFW z&5{24`queUr2j>^)>+U;8ryh(#N_kcBI?94LMb-Mz|?}gM{T0Xj+1!_VFul+X#blo z>9socN)rf|VoC^LrzvpzSo2%U+7n`OSVlIKZuuMT;qGqYn&wZT3Db%sA@`Z}UUKBT zei^ITcwHEvLPr?1b|Ix_Y*yULdSN5*_KP?grJ8fashkR)rc`vDc+?6Xs=+U~c+yS>DDy7?CN{r2}O`khk? zKT;n4BAk@RmxdPiw{wXv>4JKUEl7D^E-5zLCnV}lGa?8$hP;=LYe|YXH!QLx)$Zr zalOh_hNz`H2acb6ZDwVy*6j*CZt?Okcw4hC(JKdwklkvqwlK}|)kbB-rERG4{S`)r zU7F`eU}+s#0P?z1-}1YLg*~+hc@775z{7)p9xh3v28gF*veed%g{Vi%U{T%!uBJ>| zePZC9QRK_6lu6lTmW_4YF93S}WiCA;-TLoa}vZ?)Jvu_Isbj zEe_scO{EYZ=&le3>tmNmljr2jXBR$WxkU#Lxk`lSGJyAonqc(-tZx_X>d4L=J9q*B zPXo>wd>2;RY^jJg?R)O!+M)ZZrz@%Txy)wJjiP?v;4%lUxAg?@8W`;B-c&ReA>SS# zGmoFqNTWU!{c%|@K3ZS471Sr_r!;O_NJ1w`GjK#cL|!u_crq0t3I#bR4@y=)Be{55 z*5wKbzji8&yNv%NbwMUTcs^#C6Rq*X8B2Fs~H)Qj7%1 z%6yIh5MEV}ON2Bz*PVza))gZX69#lejI1SqcUQIrlF&$LlP_g9MP+?IDO}p%8W2XP zxMaj3lSc(V*qUttm`fO_&okqWMgN;l%22UIx!&pEBfTXtlS19?TA9V1h#e#EH&||$ z#-+t}Lq5IGN?C))Jw{t(Vx#7cf4ql8TRGZ6ln>+@l2c=8*5_qj(~c+WxE}f>u?DL@XS^Be zB|G7GzqsK&AU$vp5H%v;)YSONW)@QJLkHDM80vB4iChxQs&B+0O{{-<**4$4j6$wS zl}!I!4?O>>6Jiw`2lX2Zyi?wW^HROp62fMR`_2A2My&`!+6+o|E;QP?0?$k6a3Db- zrb5mk>Ka>>htu!KUGG0^M^#AusN&XYv$S>K!P8{_4b5-5N(~l6e3qkI(ERc9wkqFZ zHCI4WKcgtw0Y)j>PMMo15d@}P3Da;1gG0P^ENqb*JN9)y$3x@f+= zV9&*E;o;BR9F7E7nV{-T*LzWLL1b79u!N?sWUN%TOTS%nyeP$rpjum zmr4}QSo&90I}hehRcfGpL8sa{9S5XIybPDC zVo15mCSVpCOU%s7d|SIggH-rzKq?^8KGF~$AGBGNuD73@6s7t}iAXUbgaEpmv0fB7 zAwB_Bb-D|#3i2N#Wcn)_wEHjI=;=MqSI(XbPGF-_Q$9x@&7HAO#NSaF5&iDGJ%Ftm zM(g^yzx~_I01FFyOo_fsxh4!^W-QOa+tdCyu&1|wzpF{dYrV7|t{S+vcPzkxa06)E zZ@qRhJx7s^4u)z{3PCk1#MvA-{i~ZNZVajn3>ZwnxM^LZ<7MH3lB#&O)@yL9ts!o+ zI|747)mJLg8S6%cV31WCpQFu+O!YwteE~kL9XaY%Y`ahua1ZWCua%Nq%=281Tj;o; z3UJ6PatGC6J~*y`q_fjXJRULf@gg^`N*(t!Wmfk}&4Izje!FW)n00b~F*$_ny{O@W zM!SbfUj-DSm*(6jBDiGzC1hmojwq>@hwgC~2Vkc%?1OH9#h|Wsqz$ z0mevl>hm~9yO*y^c@o+71@C=?f3|rDOV;sc(Bt%E&ser*Q4lN!a+pgy;{7ga{?&qD zZmg#q;mINHChf7gAx~)htEdRE>>`mSFOnYKyaa_Q4kU2_b~t&nH?dq zy*C@-{cgwm=mWLzeAV2SAWaSNQ($=*DXg%$wEB!Ce6uB*LOElJC&E-tUuk5KH|Q?4 z>n91*$KmdZ`$c=eP2w@(E#&zb%jK3HIBG(uf$;>nGg~o#@GoSI5X6CgxV7u)(F}|o z$LuijCH(Kh+WP-6uK!gmoelw8(S7GrXOS(#djqguElzzNC{gkw;u>7&>NcTc8LoOL z#CXC3snPM@h}Bu@aOm2ha!elO_aAIoZigF$@Pz0+?jZnp`sM3(4n3n73z*+?L&%Q) zdsa(@(h-iQ461s@LXY5Vsc_#d=->tUM!PSdHS@D@iwUS&ne{_QHFaN_!W1@m?pCYM zHldmkDKv3yvycCCq$=JjC;>91ARNumy0)jqM*NE&1l;16rfw$my=_TaJ!VQ{@6D-K z^G4Ni9C7qSC$(K~0V-Fv}HnxB_md58WUfv=VBYS42*G>b}HJS%c zr-!3=kW&9j!Cys(>>2I0StV*RrZ4S>Q)&C_OqKk!go*cNgvx{VA_%loje6Z8{`-M+ z;PM&ELUaY0++KmAr3RnwYajHd96b)wSgwf(Ge6GN=;!NeloH70f{Au+D{QB}VTSAf zd$?^h$b~bOqT}}qcAxJA`gYW>PoMIX1&4pt^NS>)+aXk6P4$Fwi`hy&VkB&xOeFxT zU^?hsN9Kr(zXq=H7j}x&;=&4<-f2*M#OzAp_Z={yu4gR7&^g#?h}v4?H#wAtn5ktF zq-{Ooj3p+nV3-0qMQuj!6i;Zb_ieTv^r!wS_ME@O-Y4%M7I6x%UaH2}%!I73o=|7D zTJ9%^Z~TO;j+fGLMJiUf4oB0D9|d`f@=@#2?v7z!&fuv{?nBH4fZek?b=b?PCcyZJ7Kh*3P7Q!s-nFuzXDNz)Q%>Y zIZXkOVZ{H9PyRLYIWEm6(-zieEX+z^N()8+|L+9*Ycc(gBl~{=*1S(*pO$Rd$Yc~> zm}3xz8G+IJd%HoWbZ4PcW4<2PJ^;yn#$qo{V6J#)EE~J0l&Mjjcv$zjnd60B-U#3f z-&*{Nd5*Pcx2Nh=iFdwxRr}aJ&|+N2>)dy6ToJ+zKgb&d3UQ9C*1gqgeY1h`)ZX|o zPhIu=vXD64qolFD&Er$JADY}AM8Zmb#L$k>AvU;r78n{)0JND=+v(YVr< z*VYDCNja6nUxL#dU(03C{@5HQbbBh(SAECs&`ONHl8K^cd zz`@fkQ~c8j#RP&4L(=(%KDY2?an7Ngh{qa0l(v1h?_)wqW7A8TthkvdtVyrf`m2H0xCZ=OWAi>5-%B2FnE znnyTfWjUGGxU6dXQIUXta8B3cA3HvFg`Ge+bdNU6?ELml{+eFn!-MmORJx z@CP+*Kdw8Y70X4roB@!$BtGwZiMk3O4~-ZRzV^+N$Jpbx@S0s=)C+3uFz~aQUHZ!!1SV2bRU(ANj}Ee=jqrn=j`IaU4B%_?nMA{-x{#io9DlNg z{M_0Wi{3x>{NKn@*$AWL0cM5tY`=+H3^)E3uu~J*cmI2%mz9GgjbB69<)eGNOg+?s z2#v2Hi6NGLaRm_ZFA9eCS>p5JPG#8E>^+DSC{)R6f=lpHh(@aC+sahXi%6e%hH}!9 zcfT^i*4n){%)C>jSz}s|z<_S(aN`^gOv-rIJVEt$%H_{_yW0SJo_nK;gS?>@+o{(_ z+d$c&wQD4AEk5VcmxTrHVfx2ug#O@MdlDXHRAJjSb8;7_&-!|KxJpxb&~wCxj5S!WR%fgJR4Ylntw=nKk3r5lWTg+@9|^eqKu$5{6Cn#e zK3FztXzZ62k{LW`x4KTorUYg|6>YJG-EN-*-y5$;6kphHZjsl1qqI`L`dTEFa2T3W z*5pC3MQ{S|98b_|7svA|3<1}Qr3o6h^ zeA)37suEY`H`O!+0rp_p4nhNwLBO8R!TwgWVMLxG(@dR3hUXyNfEXw>nOFqx70d4L~$ccfsY;3|1cs> z^v!OWjrCyJnrU?2%8;ww;7k3C)Ca}G{%*&M!^CvvF+_yu{L4f6YNugt>ESrTMi-?1 z@|@MM!il9B{Dc?yX<%2NpYwf*%W#yZyy-EeskpTb>(@grSqCBAGKZ}&=H11$T)Rsp z!^;f^y?pajSHGeCGZszcVyO~!gKXdFUhnX0V%Y`>Tx(hAT`}n-T-VT0*MK2T*^$ZM z@`6T06sT%ARUXJA0+-f6_m7$!;db$w=CfBY@}NGaiJGG|th;aW<~}u3zn(DeRUh`+ zV@^n$9ULCt*bTnlrMGdIERCj+0FgWRfklNXuX2qqO_DZ`#XKH zlaotO={8sUZ1I3qi-y{qNVREhVVsAu-*dEig~~^lQze9?RCe75$`&nmSINUUPl1w-l&jD? zo~;=w@i*Tmw5zC7O-&l+8HuUf#QwwiSkBi}(hYeEQ#Be25ORHNP-g^3q%(rQ-jJ>JK|&FK z`bEGsxT?;uz{VNNdd#%@YM(_J3N6puZZug04xV;js@rOD*-T%Mm6zw>m-BHeN+ar^$)^ zab>z-_4|7j5Cu#!b*(>J0FZ6&k!`aX(a=57acj(BlomtYU1i7(HH=^`i7OO!&kCst znRx8=$AK*Oi49A%khi$XhGGQ?bF{Dqj9)B|O^XArra2B5x&?4BbL0WD8wjzra-_Ne zI8q-(I^F_Yiw(E`!3a$JF=X(4y%w&0XU%3WMPtU%Q&AUbMD!Sxrb@XVlnJaGCyBo5 zSrEk`vOY%ke;V7*n@u%3ys$9%`E^1Ej%SG;8}&58{Fgccc_sYe^CpTOj zJF*NBi@M&jDWB~d(AvT7LLQhJZq*}yfi7hYBv@UoP*I3 zn}}-(XiUC5Gf&~h(a2-)$_AqeP-`}7U_0R+TQkvM*jPuIwjbs)>HPE<4lWa=aJ+8|(eA$~fO)@*veC380=g;RblHd#H++jjpJ1 zq;SwyPjaR`yFh%$FA_@R`lkD*G1N%G6?nwP=iS3!;}3(@5z8^VR7IWpj9&8LTrh2l zlS3YGGTguM29YnqyjvV`og%9tpNogpg35vCM(vk!ItPjYWY|FPntOX|Fy7-uZPkb* zo!F@0p~Zh8Pg}H@LNsB1Fh^5Y!8O4RC>m}MNDrd1&#j!Cu{21Zu}JCYjGubW-r-hu zOK;5Z9*kUZAZWfNkb%C*B;Qkgl53BSfZo$^;o%MJyF3v;n}^o_=6*Ew0c}Dy5=`OGaNY`qwso*OK)BrivWX6`<2aS41Hn7Lmb16Fcj4oJ zztAUrZVZ2PYv4?Yu}JcPOKIMv#vJqm?76Vq%_hqE3$(P=9z#VNRC|TE{r5w``b8QN zEomOR55o*U%x`_4mS$e^p{=Vr)6P=Hx;DZUZBFJ69kMj=N0sS-G=e}L=e>~CxsPZ$ zq=|`tmMMR3qikfva@#1|k>k;i9Q4))d->qt^xbxX*aVE977DIYXBOQijS*Dc_AABo zbL|yu+Cywo-9=DD-Vo%H&mAcxYJmQV?}U%1x-f18n@-g3xJTc*Za+?Rh1%;DBH*=d zX0(}9H?^Z_t)rluD`Br%{4f%mBj}j6F?~~QR5@f{;|HQ2-lC9tu`W=hSJ{LJ%;*?E zd+L?VkK3MV@?KPQu0@&{TSXEVn#g9)+tXQ8YUwAz#`7yw!)GtLYbsy_F30q+V4^}cLPdzgDP_{K`CO!UT zd_^7yVc|`U^9*dS{pJm_!6osju38m| z{c_lY%-thH1@~6@wk9w|zDw^0DiYeI&QoFn&($$0sE+U>w5hqm6I%=1wJ4!EJdP$F z58#ziVkLWrz;8vUYBh5T?z*?MZpmt3mK0EltH*g-{078$7#|HsT+E#6J9yo4h7A>7Ru8fy$ z=&SWI+!N4gxz-&N=OUz1sJ=~T^4g>+W(Q$92(RuknqCp^3@kPo&=vO?wEeh1f|$*h zd6sE_XN&@t=L876@J7ls4Cj_f5M0<9_~JS6xjYzwD>qt$5xie?9@GqwUCPSWefQE7 zC09n8%h)CX8oNRltMMU42u^@3b%jo($ig=xU1+zog7KWdl@s^ER0vgzxmK1o%M>L< zcU-I$MkI?OLf_}e4bl6IIEl&w!6KQv$Ja@cx%vVH(XZXKT%GAr{YpSyo0%io_WHw! z?~|gySG}iZn$)KBFUbJ09x#K=I;`Qbx^{FeVg+NK-i;PgzKXaz3`-xj;}+TDYPAyr zZ}zOFj3S>eKKHQB$Vl?QIf!!W<2T3Ez{%%m?G#Jvr-bMSFyiewhZcbZqr7V%Rd=DGUiWNbLZFQ(>7x}<|wID=O zea~ZQckSNwISX5(sRJEBhpw3p#0g*b;-ht%`Egmj*M6q$(8xG;_1#cyXnhX_Fwje* zM@d-wr9Bc`UmZ!Epx}noW|IZ|^|&0JLqv-uq|mQlG)du)ZHixyj zg-4vh9gb^`lKwoCMIP?b_rbmvqujNX6T8XpKi1)z8!Ieodnz$V$lEQnDGo>lcvL2> z+>6f7h9IL?f$CyVUA2K$4g@GkS7DQR6ajgx>KMlJxoi@COoiGJ8c?R-0{4-9|Gy8R z^hU%6_gxK7jYmD7G(1$6aRLJ%9KNpCJzoy{EF8W#wY=EVVeVwSZLM?tCGrW}z)na9 zYZPGlP)6qOqXBTe9R+g3;o{5XAv_8e9P_ zE7RExX#G~d2xRGY+QXNeZ7P76u18ni_7b?RtoCu2KUa!V6{^$qzZCYprEi;4MePwh z3Oepn8Q|!BaT8HGL@im_$=?4Z>7mK=)8PYs-w`4`7+9QhgLE|MA|#M5M|^%Tfcl=C3RT9C~&u^`NDiRrmr_Y#4( zh!^gqT4~n^u`Tckyp(<4zlTOmf10(mJ(0#|{1TfPo!Mp~J}m9*-e|U5Z|;7(BShZ* zeU!xw5L(Cx<8o{nF>F2kcnmwGiP zXPmY~USoOs=L&dk_3Gz@d|4`cvqm5Jgi;kW5txngF(ua=?g@Dx>;+NDRn^*US5Foa z)|tDzHfDQs?${=F`;O=MofZ&%$HL6R3^P<;9YTE0T#`U9P~n$dzUhtwRi-M;$8~Ig zo|;DP5a$rNZ=V`o3<$gJpJ)wb&?wglHG&g9I{=88riC?SJGbfMn#}0ov*i}_kHd?f#>)$9FZah4hY+}^z?PRxAfmGB}rYXPV>qg{P1JdjOEQ)2chuSikL~u* zID+n;u~>)|xrP?!kb^%KPl8Y>i`YPUCW4eID3Cnu4d?tBDuE7y1*9lV*I zp3Y+S;cJ$@6Ot5S{P2wb(wc{&o1u}1*aZR;nCn z;%TdF~CM!leoJFqNa<&dj57DwbzK6{=V#)(RMLaSQgY?z0 zZp22v)~!sd8&x@G$PJ){!|ZNjObzcI-ei9Ko`Lu2r>)T@9wcCx z$0?3<=YfhlbnSM9ErIi%mh>iO`za(n<;f!z3zQS0aSLqxTZM;=O;Ir#Z7y#(A<~Gh zwQF1|d&vGY{Pqi&-fcyY%*~bLMG&&$VaUj$Sl^&$i5O+$yRIT9#435|3AEp$pUcz? z&>O*;jaZG+@eW=}GF)BE{$SG6F z1&2&M@epkensDsxTO|yoVW%G*7fiSODqx{efTJArE$|d$-Ya&n2U^1OY=STW*h%w zHMZ^ZGr6ckMo=F8jKvj3I~JX_T|X@i*M;JCa=XiU=n^m)N~5zr zp8j`OO=}%~zf)4Zg{rzl2~=aWWph*Qw|&=@Q{2>YxaRm7i)w3x@V^rwwhLa>pQ2@} zJM8H+GY?egtQE(a;C#qm*^yc0q^Qkt=+>8WS7IPo&z=6Xd&UyI{+}s3zx%sGT?z`dG}{ZWfX#dfd9~R$cml`D21Oq0 zXXpMy=DIDgzyFE))v6B9|CRpxC(d_5cD-AtaRESAGI?s1+-l4$NloDHDebZQY3~^e zQ^`F`u7Aup>y#<&wv%&A9;ttYWSu%=;otb9GB0bM|Fi7V|KTKmaV8*h`rD^1Yg3fy z!IRvbrmsHQ{O6Rv2FE(h^y+Bmh<{n@;a70(|16cSW(tG=CZ(oU>`ce^aLhNo`d_h< zO{Pb|rjP76e^1oEc^{LF{_%gHMuxumPwW4SM}HO7KNl;Jlaq6QTHc@8zmU*vOvq}f z_Tl=&p6n)>Utu`k!~Qx1=CHd#(_ZjsQ8=|cv*O8z*9Rz8eKUzxeHK|c z=_gX5X2+()&-_YN1WZ1#<;03Ptd1Kj64tOIRp5+}jU2#pz@e=gGG-CWTKu=PG=qZo zvD%pO2Q*%TzHZ$C#YxYaFZA%%TN&o2wP;MORN%?YwfNE}{x0xXv(X!Uy$2dKrj`%W z$DzN>U->jrG0~7gxTEvlB_pQ6hr*xc7 za@n*K-k^B(2ffVAEDxG9UopR<;tk=DH|v=!cP~PxjQXjNe*1DYZeIr}#h=X`snD&k z9-5y)Y~i&`DYh$0FUmY%tj6Pl++#|_ielc1#gyF5Df!5}cgkZ6Jb7n!>%8jzv5?!b kP+I*z`)>bz@LvZ0%fNpb_%8$hW#GRI{QsGOb7$lK2jRe{Gynhq literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/.gitignore new file mode 100644 index 00000000..d2ff2014 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/.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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/AppScope/app.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/AppScope/app.json5 new file mode 100644 index 00000000..f8882387 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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.convertsymmetrickeybinaryformat", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/AppScope/resources/base/element/string.json new file mode 100644 index 00000000..7ee6e686 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "ConvertSymmetricKeyBinaryFormat" + } + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/README.md b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/README.md new file mode 100644 index 00000000..1f0395b7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/README.md @@ -0,0 +1,82 @@ +# 指定二进制数据转换对称密钥(C/C++) + +### 介绍 + +以3DES和HMAC为例,根据指定的对称密钥二进制数据,生成密钥(OH_CryptoSymKey),即将外部或存储的二进制数据转换为算法库的密钥对象,该对象可用于后续的加解密等操作。 + +本示例主要展示了指定二进制数据转换对称密钥(C/C++),指定二进制数据转换3DES密钥和指定二进制数据转换HMAC密钥场景。该工程中展示的代码详细描述可查如下链接中业务扩展场景介绍部分。 + +- [指定二进制数据转换对称密钥(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-convert-binary-data-to-sym-key-ndk.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例ConvertSymmetricKeyBinaryFormat.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── cpp + │ │ ├── types + │ │ | ├── libentry + │ │ | ├── index.d.ts + │ │ | ├── oh-package.json5 + │ │ | ├── project + │ │ | ├── 3des.cpp + │ │ | ├── file.h + │ │ | ├── hmac.cpp + │ │ ├── CMakeList.txt + │ │ ├── napi_init.cpp + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 指定二进制数据转换对称密钥(C/C++)示例代码 + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── ConvertSymmetricKeyBinaryFormat.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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat > .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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/build-profile.json5 new file mode 100644 index 00000000..fb5a1ab6 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/code-linter.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/build-profile.json5 new file mode 100644 index 00000000..2d8b081b --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/hvigorfile.ts new file mode 100644 index 00000000..e4f43d54 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/oh-package.json5 new file mode 100644 index 00000000..118bdd4f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/CMakeLists.txt b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 00000000..01f0d79a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(ConvertSymmetricKeyBinaryFormat) + +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.cpp types/project/hmac.cpp) +target_link_libraries(entry PUBLIC libace_napi.z.so libohcrypto.so) \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/napi_init.cpp b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/napi_init.cpp new file mode 100644 index 00000000..b919b890 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/napi_init.cpp @@ -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. + */ + +#include "napi/native_api.h" +#include "types/project/file.h" + +static napi_value NAPI_Global_doTestDataCovertSymKey(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestDataCovertSymKey(), &ret); + return ret; +} + +static napi_value NAPI_Global_testConvertHmacKey(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, testConvertHmacKey(), &ret); + return ret; +} + +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = {{"doTestDataCovertSymKey", nullptr, NAPI_Global_doTestDataCovertSymKey, nullptr, + nullptr, nullptr, napi_default, nullptr}, + {"testConvertHmacKey", nullptr, NAPI_Global_testConvertHmacKey, 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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/libentry/Index.d.ts b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/libentry/Index.d.ts new file mode 100644 index 00000000..b8451708 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/libentry/Index.d.ts @@ -0,0 +1,18 @@ +/* + * 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 doTestDataCovertSymKey: () => number; + +export const testConvertHmacKey: () => number; \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/libentry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 00000000..6abf3b7c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/project/3des.cpp b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/project/3des.cpp new file mode 100644 index 00000000..41834b83 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/project/3des.cpp @@ -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. + */ + +// [Start generate_3des_key] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_key.h" +#include "file.h" + +OH_Crypto_ErrCode doTestDataCovertSymKey() +{ + const char *algName = "3DES192"; + OH_CryptoSymKeyGenerator *ctx = nullptr; + OH_CryptoSymKey *convertKeyCtx = nullptr; + Crypto_DataBlob out = {.data = nullptr, .len = 0}; + OH_Crypto_ErrCode ret; + uint8_t arr[] = {0xba, 0x3d, 0xc2, 0x71, 0x21, 0x1e, 0x30, 0x56, 0xad, 0x47, 0xfc, 0x5a, + 0x46, 0x39, 0xee, 0x7c, 0xba, 0x3b, 0xc2, 0x71, 0xab, 0xa0, 0x30, 0x72}; + Crypto_DataBlob convertBlob = {.data = arr, .len = sizeof(arr)}; + ret = OH_CryptoSymKeyGenerator_Create(algName, &ctx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + ret = OH_CryptoSymKeyGenerator_Convert(ctx, &convertBlob, &convertKeyCtx); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoSymKeyGenerator_Destroy(ctx); + return ret; + } + ret = OH_CryptoSymKey_GetKeyData(convertKeyCtx, &out); + OH_CryptoSymKeyGenerator_Destroy(ctx); + OH_CryptoSymKey_Destroy(convertKeyCtx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + OH_Crypto_FreeDataBlob(&out); + return ret; +} +// [End generate_3des_key] + diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/project/file.h b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/project/file.h new file mode 100644 index 00000000..2169066f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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" + +OH_Crypto_ErrCode doTestDataCovertSymKey(); +OH_Crypto_ErrCode testConvertHmacKey(); + +#endif // FILE_H \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/project/hmac.cpp b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/project/hmac.cpp new file mode 100644 index 00000000..fb71685b --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/cpp/types/project/hmac.cpp @@ -0,0 +1,51 @@ +/* + * 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 generate_hmac_key] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_key.h" +#include +#include "file.h" + +OH_Crypto_ErrCode testConvertHmacKey() +{ + const char *algName = "HMAC"; + OH_CryptoSymKeyGenerator *ctx = nullptr; + OH_CryptoSymKey *convertKeyCtx = nullptr; + Crypto_DataBlob out = {.data = nullptr, .len = 0}; + OH_Crypto_ErrCode ret; + + char *arr = const_cast("12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh"); + Crypto_DataBlob convertBlob = {.data = (uint8_t *)(arr), .len = strlen(arr)}; + ret = OH_CryptoSymKeyGenerator_Create(algName, &ctx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + ret = OH_CryptoSymKeyGenerator_Convert(ctx, &convertBlob, &convertKeyCtx); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoSymKeyGenerator_Destroy(ctx); + return ret; + } + ret = OH_CryptoSymKey_GetKeyData(convertKeyCtx, &out); + OH_CryptoSymKeyGenerator_Destroy(ctx); + OH_CryptoSymKey_Destroy(convertKeyCtx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + OH_Crypto_FreeDataBlob(&out); + return ret; +} +// [End generate_hmac_key] + diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..965554bb --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..bf0e19be --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,44 @@ +/* + * 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 = 'ConvertSymmetricKeyBinaryFormat'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.3des')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.doTestDataCovertSymKey(); + this.message = '3DES Success Result:' + ret.toString(); + }) + Button($r('app.string.hmac')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testConvertHmacKey(); + this.message = 'HMAC Success Result:' + ret.toString(); + }) + } + .width('100%') + .height('100%') + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/module.json5 new file mode 100644 index 00000000..4144486d --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..149e0bc6 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/element/string.json @@ -0,0 +1,24 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "ConvertSymmetricKeyBinaryFormat" + }, + { + "name": "3des", + "value": "3DES" + }, + { + "name": "hmac", + "value": "HMAC" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..1898d94f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/ets/test/ConvertSymmetricKeyBinaryFormat.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/ets/test/ConvertSymmetricKeyBinaryFormat.test.ets new file mode 100644 index 00000000..fa05a8de --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/ets/test/ConvertSymmetricKeyBinaryFormat.test.ets @@ -0,0 +1,72 @@ +/* + * 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 convertSymmetricKeyBinaryFormatTest() { + describe('convertSymmetricKeyBinaryFormatTest', () => { + /** + * 打开应用 + */ + 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) + */ + it('testConvertSymmetricKeyBinaryFormat001', 0, async () => { + console.info('uitest: testConvertSymmetricKeyBinaryFormat001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('3DES')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('3DES Success Result:0')); + console.info('uitest: testConvertSymmetricKeyBinaryFormat001 end'); + }) + + /** + * 点击按钮,指定二进制数据转换对称密钥(HMAC) + */ + it('testConvertSymmetricKeyBinaryFormat002', 0, async () => { + console.info('uitest: testConvertSymmetricKeyBinaryFormat002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('HMAC')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('HMAC Success Result:0')); + console.info('uitest: testConvertSymmetricKeyBinaryFormat002 end'); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..84990289 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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 convertSymmetricKeyBinaryFormatTest from './ConvertSymmetricKeyBinaryFormat.test'; + +export default function testsuite() { + abilityTest(); + convertSymmetricKeyBinaryFormatTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..d584c19c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/hvigorfile.ts new file mode 100644 index 00000000..2a5e543f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/oh-package.json5 new file mode 100644 index 00000000..e41bae02 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/ohosTest.md b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/ohosTest.md new file mode 100644 index 00000000..3d0857ee --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/ohosTest.md @@ -0,0 +1,9 @@ +# 指定二进制数据转换对称密钥(C/C++)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------------ | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,指定二进制数据转换对称密钥(3DES) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定二进制数据转换对称密钥(HMAC) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/screenshots/ConvertSymmetricKeyBinaryFormat1.png b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormat/screenshots/ConvertSymmetricKeyBinaryFormat1.png new file mode 100644 index 0000000000000000000000000000000000000000..02dc5cab36a03aa54bd97857fc815740721ce2d6 GIT binary patch literal 35846 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/README.md b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/README.md new file mode 100644 index 00000000..c860d216 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/README.md @@ -0,0 +1,77 @@ +# 指定二进制数据转换对称密钥(ArkTS) + +### 介绍 + +以3DES和HMAC为例,根据指定的对称密钥二进制数据,生成密钥(SymKey),即将外部或存储的二进制数据转换为算法库的密钥对象,该对象可用于后续的加解密等操作。 + +本示例主要展示了指定二进制数据转换对称密钥(ArkTS),指定二进制数据转换3DES密钥和指定二进制数据转换HMAC密钥场景。该工程中展示的代码详细描述可查如下链接中业务扩展场景介绍部分。 + +- [指定二进制数据转换对称密钥(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-convert-binary-data-to-sym-key.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例ConvertSymmetricKeyBinaryFormatArkTS.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 指定二进制数据转换对称密钥(ArkTS)示例代码 + │ │ ├── 3des + │ │ | ├── Callback.ets + │ │ | ├── Sync.ets + │ │ ├── hmac + │ │ | ├── Await.ets + │ │ | ├── Sync.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── ConvertSymmetricKeyBinaryFormatArkTS.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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS > .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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/build-profile.json5 new file mode 100644 index 00000000..fb5a1ab6 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/code-linter.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/code-linter.json5 new file mode 100644 index 00000000..28586467 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/.gitignore new file mode 100644 index 00000000..e2713a27 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/build-profile.json5 new file mode 100644 index 00000000..e7569e30 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/hvigorfile.ts new file mode 100644 index 00000000..e4f43d54 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/oh-package.json5 new file mode 100644 index 00000000..c9cb6c81 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 00000000..edc2839f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 00000000..b1e21294 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/3des/Callback.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/3des/Callback.ets new file mode 100644 index 00000000..28755c54 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/3des/Callback.ets @@ -0,0 +1,75 @@ +/* + * 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 generate_3des_key] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { BusinessError } from '@kit.BasicServicesKit'; + +function genKeyMaterialBlob(): cryptoFramework.DataBlob { + let arr = [ + 0xba, 0x3d, 0xc2, 0x71, 0x21, 0x1e, 0x30, 0x56, + 0xad, 0x47, 0xfc, 0x5a, 0x46, 0x39, 0xee, 0x7c, + 0xba, 0x3b, 0xc2, 0x71, 0xab, 0xa0, 0x30, 0x72]; // 密钥长度为192位,即24字节。 + let keyMaterial = new Uint8Array(arr); + return { data: keyMaterial }; +} + +function testConvertSymKey() { + // 创建SymKeyGenerator实例 + let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192'); + // 根据指定的数据生成对称密钥 + let keyMaterialBlob = genKeyMaterialBlob(); + try { + symKeyGenerator.convertKey(keyMaterialBlob, (error, key) => { + if (error) { // 如果业务逻辑执行失败,则callback的第一个参数返回错误信息,即异步抛出异常 + let e: BusinessError = error as BusinessError; + console.error(`convertKey error, ${e.code}, ${e.message}`); + return; + } + console.info('key algName:' + key.algName); + console.info('key format:' + key.format); + let encodedKey = key.getEncoded(); // 获取对称密钥的二进制数据,并以字节数组形式输出。长度为24字节 + console.info('key getEncoded hex: ' + encodedKey.data); + }) + } catch (error) { // 参数检查发现错误立即抛出异常 + let e: BusinessError = error as BusinessError; + console.error(`convertKey failed, ${e.code}, ${e.message}`); + } +} +// [End generate_3des_key] + +@Entry +@Component +struct Index { + @State message: string = 'Callback'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_3des_callback')) + .width('70%') + .onClick(() => { + try { + testConvertSymKey(); + this.message = '3DES Callback Success'; + } catch { + this.message = '3DES Callback Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/3des/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/3des/Sync.ets new file mode 100644 index 00000000..69484cf5 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/3des/Sync.ets @@ -0,0 +1,75 @@ +/* + * 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 generate_3des_key_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { BusinessError } from '@kit.BasicServicesKit'; + +function genKeyMaterialBlob(): cryptoFramework.DataBlob { + let arr = [ + 0xba, 0x3d, 0xc2, 0x71, 0x21, 0x1e, 0x30, 0x56, + 0xad, 0x47, 0xfc, 0x5a, 0x46, 0x39, 0xee, 0x7c, + 0xba, 0x3b, 0xc2, 0x71, 0xab, 0xa0, 0x30, 0x72]; // 密钥长度为192位,即24字节。 + let keyMaterial = new Uint8Array(arr); + return { data: keyMaterial }; +} + +function testConvertSymKey() { + // 创建SymKeyGenerator实例 + let symKeyGenerator = cryptoFramework.createSymKeyGenerator('3DES192'); + // 根据指定的数据生成对称密钥 + let keyMaterialBlob = genKeyMaterialBlob(); + try { + symKeyGenerator.convertKey(keyMaterialBlob, (error, key) => { + if (error) { // 如果业务逻辑执行失败,则callback的第一个参数返回错误信息,即异步抛出异常 + let e: BusinessError = error as BusinessError; + console.error(`convertKey error, ${e.code}, ${e.message}`); + return; + } + console.info('key algName:' + key.algName); + console.info('key format:' + key.format); + let encodedKey = key.getEncoded(); // 获取对称密钥的二进制数据,并以字节数组形式输出。长度为24字节 + console.info('key getEncoded hex: ' + encodedKey.data); + }) + } catch (error) { // 参数检查发现错误立即抛出异常 + let e: BusinessError = error as BusinessError; + console.error(`convertKey failed, ${e.code}, ${e.message}`); + } +} +// [End generate_3des_key_sync] + +@Entry +@Component +struct Index { + @State message: string = 'Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_3des_sync')) + .width('70%') + .onClick(() => { + try { + testConvertSymKey(); + this.message = '3DES Sync Success'; + } catch { + this.message = '3DES Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/Index.ets new file mode 100644 index 00000000..0eedc6bf --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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 = 'ConvertSymmetricKeyBinaryFormat'; + + 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(15) + .fontWeight(FontWeight.Bold) + Button($r('app.string.3des_callback')) + .width('80%') + .onClick(() => { + this.goToSample('pages/3des/Callback') + }) + Button($r('app.string.3des_sync')) + .width('80%') + .onClick(() => { + this.goToSample('pages/3des/Sync') + }) + Button($r('app.string.hmac_await')) + .width('80%') + .onClick(() => { + this.goToSample('pages/hmac/Await') + }) + Button($r('app.string.hmac_sync')) + .width('80%') + .onClick(() => { + this.goToSample('pages/hmac/Sync') + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/hmac/Await.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/hmac/Await.ets new file mode 100644 index 00000000..f211f4d2 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/hmac/Await.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. + */ + +// [Start generate_hmac_key] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +async function testConvertHmacKey() { + // 对称密钥长度为64字节,512比特 + let keyMessage = '12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh'; + let keyBlob: cryptoFramework.DataBlob = { + data: new Uint8Array(buffer.from(keyMessage, 'utf-8').buffer) + } + let symKeyGenerator = cryptoFramework.createSymKeyGenerator('HMAC'); + let key = await symKeyGenerator.convertKey(keyBlob); + let encodedKey = key.getEncoded(); + console.info('key encoded data:' + encodedKey.data); +} +// [End generate_hmac_key] + +@Entry +@Component +struct Index { + @State message: string = 'Await'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_hmac_await')) + .width('70%') + .onClick(async () => { + try { + await testConvertHmacKey(); + this.message = 'HMAC Await Success'; + } catch { + this.message = 'HMAC Await Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/hmac/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/hmac/Sync.ets new file mode 100644 index 00000000..de133607 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/ets/pages/hmac/Sync.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. + */ + +// [Start generate_hmac_key_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { buffer } from '@kit.ArkTS'; + +function testConvertKeySync() { + // 对称密钥长度为64字节,512比特 + let keyMessage = '12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh'; + let keyBlob: cryptoFramework.DataBlob = { + data : new Uint8Array(buffer.from(keyMessage, 'utf-8').buffer) + } + let symKeyGenerator = cryptoFramework.createSymKeyGenerator('HMAC'); + let key = symKeyGenerator.convertKeySync(keyBlob); + let encodedKey = key.getEncoded(); + console.info('key encoded data:' + encodedKey.data); +} +// [End generate_hmac_key_sync] + +@Entry +@Component +struct Index { + @State message: string = 'Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_hmac_sync')) + .width('70%') + .onClick(() => { + try { + testConvertKeySync(); + this.message = 'HMAC Sync Success'; + } catch { + this.message = 'HMAC Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/module.json5 new file mode 100644 index 00000000..4144486d --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/element/color.json new file mode 100644 index 00000000..3c712962 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/element/string.json new file mode 100644 index 00000000..2844b1cf --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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": "ConvertSymmetricKeyBinaryFormatArkTS" + }, + { + "name": "3des_callback", + "value": "3DES Callback" + }, + { + "name": "3des_sync", + "value": "3DES Sync" + }, + { + "name": "hmac_await", + "value": "HMAC Await" + }, + { + "name": "hmac_sync", + "value": "HMAC Sync" + }, + { + "name": "call_3des_callback", + "value": "Call 3DES Callback" + }, + { + "name": "call_3des_sync", + "value": "Call 3DES Sync" + }, + { + "name": "call_hmac_await", + "value": "Call HMAC Await" + }, + { + "name": "call_hmac_sync", + "value": "Call HMAC Sync" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 00000000..78f40ae7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 00000000..e0e44c50 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,9 @@ +{ + "src": [ + "pages/Index", + "pages/3des/Callback", + "pages/3des/Sync", + "pages/hmac/Await", + "pages/hmac/Sync" + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/main/resources/dark/element/color.json new file mode 100644 index 00000000..79b11c27 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 00000000..0f8ce9a2 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/ets/test/ConvertSymmetricKeyBinaryFormatArkTS.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/ets/test/ConvertSymmetricKeyBinaryFormatArkTS.test.ets new file mode 100644 index 00000000..acd0bdd3 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/ets/test/ConvertSymmetricKeyBinaryFormatArkTS.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 convertSymmetricKeyBinaryFormatArkTSTest() { + describe('convertSymmetricKeyBinaryFormatArkTSTest', () => { + /** + * 打开应用 + */ + 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 callback方式) + */ + it('testConvertSymmetricKeyBinaryFormatArkTS001', 0, async () => { + console.info('uitest: testConvertSymmetricKeyBinaryFormatArkTS001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('3DES Callback')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call 3DES Callback')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('3DES Callback Success')); + console.info('uitest: testConvertSymmetricKeyBinaryFormatArkTS001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定二进制数据转换对称密钥(3DES 同步方式) + */ + it('testConvertSymmetricKeyBinaryFormatArkTS002', 0, async () => { + console.info('uitest: testConvertSymmetricKeyBinaryFormatArkTS002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('3DES Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call 3DES Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('3DES Sync Success')); + console.info('uitest: testConvertSymmetricKeyBinaryFormatArkTS002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定二进制数据转换对称密钥(HMAC await方式) + */ + it('testConvertSymmetricKeyBinaryFormatArkTS003', 0, async () => { + console.info('uitest: testConvertSymmetricKeyBinaryFormatArkTS003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('HMAC Await')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call HMAC Await')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('HMAC Await Success')); + console.info('uitest: testConvertSymmetricKeyBinaryFormatArkTS003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定二进制数据转换对称密钥(HMAC 同步方式) + */ + it('testConvertSymmetricKeyBinaryFormatArkTS004', 0, async () => { + console.info('uitest: testConvertSymmetricKeyBinaryFormatArkTS004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('HMAC Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call HMAC Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('HMAC Sync Success')); + console.info('uitest: testConvertSymmetricKeyBinaryFormatArkTS004 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 00000000..27952191 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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 convertSymmetricKeyBinaryFormatArkTSTest from './ConvertSymmetricKeyBinaryFormatArkTS.test'; + +export default function testsuite() { + abilityTest(); + convertSymmetricKeyBinaryFormatArkTSTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/ohosTest/module.json5 new file mode 100644 index 00000000..c3fd9dda --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/test/List.test.ets new file mode 100644 index 00000000..f1186b1f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/entry/src/test/LocalUnit.test.ets new file mode 100644 index 00000000..7fc57c77 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/hvigor/hvigor-config.json5 new file mode 100644 index 00000000..d584c19c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/hvigorfile.ts new file mode 100644 index 00000000..2a5e543f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/oh-package.json5 new file mode 100644 index 00000000..e41bae02 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/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/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/ohosTest.md b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/ohosTest.md new file mode 100644 index 00000000..2d260206 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/ohosTest.md @@ -0,0 +1,11 @@ +# 指定二进制数据转换对称密钥(ArkTS)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,指定二进制数据转换对称密钥(3DES callback方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定二进制数据转换对称密钥(3DES 同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定二进制数据转换对称密钥(HMAC await方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定二进制数据转换对称密钥(HMAC 同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/screenshots/ConvertSymmetricKeyBinaryFormatArkTS1.png b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSymmetricKeyBinaryFormatArkTS/screenshots/ConvertSymmetricKeyBinaryFormatArkTS1.png new file mode 100644 index 0000000000000000000000000000000000000000..8255be3491ae46e0ed774c38f9c9fbedc7cfd4c4 GIT binary patch literal 49763 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%0DE9ZzvZPw?GEW^#cVa*xk}AFRQ|KgP07qPl9j)d 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 r#E=#v9{}@h4;K?47mux8|H{t-0o! z`&%c&Cx7x?1p>?gd}q$^@tryS@}02w9-LnN-+lf9`M*Orefs1NzH8^t{(NTg?3p`! z-(5R%_S%_~FMLveiFx*izvTU|&-pX_7rs0D{g3B|ctVmj3YLx%1bq-{x1#7!tf8BKotnjiZzMJE1!PYd6)O{+d_ud1~D>rT>DkwA@|U z_JLCz$^!W2mZhA`;YR|TGY<{>@IlI z`uq(c(K`=q96SPkeV3A+*S{uW5961XF$FyJtYFBhKd@aFzN?|B^>@4HpQlbn`7WKx z`rWm&*Z55MdjI^FYEMs%tiE4H6)79wb1u#L{~qxj4fb{E7Noql(r*Zt9*?zpO2Wi* zu*UEJZBeDB?^>3*La3!)WrM7?0z-8x&9_9&+kf6=jVQBbQECjoq$EYv>`#<(qaN)>b9snoxw|s| zQusnjsdv7m{4?)@gMZY;bjklpW)IGMb@q?Y zohOdl&PY7RXK9Ou=nlpAC;&gL36qdf3ykf;>2_SbR09JY72 z(NK4!V?nKMLbTx4=g-*@&t|h2pGPju)*Tsg%^=?pEKH$+P%T2V)FZ9f%Dv*L+K0p~ zd^)H^zgk^e$j4JvdDXA%ZaJV~J>J=4u@MmYP(O4jIcHa(@MuG>dcGD?)R-yyf*#T> z+aZX{Jp<3Av3{vQ-(1z&{`|V+1yfxV%plHiOMN_fI>GCEPET3~3GfS5R^RX9uZRYG z4zRqX`dSS-hL@ne2IX+>n%&Yf)?JzCTvtK$)o#Q{m>)`a*f#!s(dgb<*qspmu8atv zVRZX@xcbPlt~dh0d2!ol$fj4o{Ws>yYG8N?sG-MAE~T<#MwwgAfp>=m0JE4kc{?Sl z-Als7TzR(HufaWeHIYreVh&5%;P@sJ@9Iw-E4z<#1XaW0JEyiUg=#2fR($G&xPmP- z??L8JMEmM;c!=pV`6A9<7LzL=+52M3Z#RZ%^(E&Xp=CC$=?XixgeYUsyJfbCz-pK^ z$8vcqWF4q+#_>D-OT+6?5uMIQ<>}OSufngzZC!AIYL<7-6c24vEwaSRg}ny%Ne|bUHh?7gV;)P;2ZCONm~1C^W{y#I)DZoBA-;cg zBj|)rIvfcg--}!ZT{+5UA6Ro#kNOjDt1?Bl6T*pWn^9A1DSM!qP5Prl*7mxmK043h?#Ic-!9>F1jI0w48xG8>W8TLU*$*waj_Yq; z{@p21>WR23NED>y+KA01`0jpP(7~)KBQ6AuJta3hW{^s~cE#+8R_N3oH~0G@Bfd}K zk3+i}8R_E0L{Hg#ky`W3L|f!xr~lXSNXMa9pOhN=R|&%TO=Wv;#6OFaxPqs8o(#*Z z64(vnB{N#ZXnX|Rj&#fGoJ>ORih~<@8BDuKi;A()Egw}k_0>f*;Kvo;Ci{NOZ8(!tGMu>uk(R5;vAU+$lG9*PAFn1p?U!LRTCSy#^$yi?oEtPu zQI`g1Mhi{_%oCMeRq9L5sxpPc7L@wp{A+`t`$5oSlvSU3lXjD2a=(q!Ubku*x<%0Z z$Omwr7w5U}E;*h*C#B^{0{Q^ddzIW(Q8(PBmUpm%ErQYScfGLw{T!)FeaXf5AL;x! zrf8E0J8z{LZdUESb!rRN?oOQh3EzE(Y;cI@x-Cxd0j)>s?=YpR&{I|KC%=TlL;w;~ z6B390b*$*2iJaB)-?jen_TML`f4#bq$&i|o;(<^2=o%ul#n0?J>bv=xy2Zw#9z2{+ zhbQx(#i_O0T_>S!Y9nD4aPjw!o@)t1FD2jl=Z0Ap>+3Hx<%Dm@luqp!+Ycxp>b9+d z8fh>x+A!`zA^?~TZR1|#ukb8_>?(O<1)cxoX|!v^Y&8s+`n1gbm>y}~NXddkYePXX zu{uZAkEiGOABMp3%@&7`pB+gW`9^}n7d}qpRwtd`^m`id=9Siw_B8X+EG_3jbqj-~ zMyA|ijJI(fd$xZ@xDIKL7-X&ld*)1J`L^^<&F-4}wiFx*_p#GQDUvFi2P@)3^|E<& z^IK!{kY^0}p&YIY%;PIt0z5YV?7EAE5m-lkT3tstRNck8#K!l8?~G`Pl_XC+cr$X7 zQ@e@pPvF~J{~Dp}rcoE*nip2SP#NjTb(Ai3nXn(;_y7!16RynyG^duELZFyNy@iIB zVLR+JZ~$bgIhRtfJ+j!_AKQCm@MN?6$+$LGs?)4&^uU67?E$pcKf?x*;sp;Hq^!@r zQrG|Sx`=P3MOWSCh*)IvW?8zt--ZTw2&ajZAL=CrS?q5cUVT9XXT}k^yA1uzTF@KM zhFThyof|kJqA-Ezl+mO9Aar;8&+&(H8-(8a!d{pp%FIfRNB!9RD%^2^U&X|zb6hUu zf%Zn*(NBvtx&!%XbiIo|4Tma31ynd$gsq7bwQpxr|8Pg4*zI@)t({9QZBfDG`@+>t z#|TU<3(ofL|G-?Z(W$+Jx*Nh^lpe&?cL*(7z+oM?6bq10b2-7M0VzX?BNwhUwIa33 zkR*TaRpUmGaICA_s2;Q$;R#xtTD-nmIPqeWn^KqEx-OtRF|C0HJn;I|K0JoH74jkf z?HG4^?2dAIMk=-?UET(E@Zpn=gVzY0h(7jwch_R>7~n*K_vB;J{t{13q_>mn>}hITo5g#P?HJkZxmv0 zVRWr*Fq3Yk_(*!1JHNgCZT<4pY#pnYSu#t$X#auv44tu}t+rEY$(;j@q=NiIu}+H%)I2blXY=$UWM;6O?>?E!RcDZ&R=xnoL5D2~#+= zN&ZVOr2o+i@gmde?C#Adtbo1hV*&HkwYPdS9@aBWdr0&tlV-mIWVtg)c51EAE|p?zfgh z<+A#qPmm{#oqi4jvjx>9)16yQAC0cutV_0)kPcB?WHWT7|50@)T<6%y^Dp_(#Hv1& zyR*#9a2io`?hGnjI#{85sgRdKOD`i5e^nl7F=|LP@e#UQ;2&?Y&`at6IW5=tz!mdj(X$ zooh{<<1@uJjP1h^^9?;c0%gO@naAfuJwiIO_Dy;fG+oT5_P z_Kl#M2H87b{Ab)<(+$Td>X6A_+du))fZh*D4I0oO1f5{jghK&hbX@wXE%F`zScLW_ zwN6tdWxn{~j`gA1CLZ|bRpq&VL^-f7D={OYBuSKcdAs)huf3orxE`hu1|Q{SF846% z%@FD`8@zgXceLOCkB`}aM;{ufITY;4A@0J#F;V*l?`2{{I173dfn|NEb5=tlqA zTQcI`LYho{gLP+~RK#;0OFmFeitl-#oJjtZWJ5mkyW+o{l?uAK^*7RC*7DEKI;j?v zVxs{F-8^VhdlZ3VdDoW}=cWViXQd4+2-QLSC>dIly(u1vGnSZ5@Oh}q zQ`L8w$4*zd+wGxVQ#Ybq<$*^cfY6X^eG|xO91O_*a{testZhsE$+clu;;upZ)`Ze@ zHrje*eM?Vl<66~}(&8jL#IICkc|oc8sb?PEZ#zuyf(B zQWwLUH)8@qwn@LuVoKuWr+Eh|tg!TUgng~8Pv=9w#8+Fb+rD#TdKv7# z%4W^@RfIC+0Z#1^h?G3B(5>*>UluF{ZDtR%JZcs?L(;%jjYdaGRp*>7NxHnK>nW*= zwaOVPDQ>yOo@upmM7PKOq&^*iNNW}S3TD8*g;*5YGo(eAbIv7W|L2miIpu1I%TCDG zareT!)J~o@4Vm2O6(F*wBo8A|K#}jk+cwrYuR}xLED0|o-tS5GAM`Ig6!kL^*f<9s zlj+DdU8ptFNbFd-zRvx%fvrbMDKvmko2xoUX>JlP2DJ~%!236=%L}XW5;~rim6ity zx{W;ILN|Rk%8nL&8AlSkn37kV2*MA<0RJD^@UPxsVup@J+z(wfNS3lunb#zsj%BRu zc+EQk`3hI~?r#5AJ8}w{d=VvN9>pv|{hgrahfDtH7K5Il7;wTT8dBeP!uMT($z|}0 zsCiJvp;ZGc{J=U@DCi9_^(Y=<0Dn&D^3-`W#Z}qL#OXmL8PV=pUmz{>Ky2l5U&@X( z)i!bV_k9^jprN^0&SB1K;XxB#MQG=B99y>_{}WoKbU_hx-g{ z73%}fiS9wmyXU&<*yn#Isq6`q_(_WN`2ytKG6K3eEFd=B|7vqdSy~r#exX=l(WaeJ47KOmDZR(PRn3y73k@NA7|YmT`imjWTu!u5OoK}L(`aB%hqJP=GJXZ zg+ryFnR0+hfmzW+iS9XKv$>Vwvmx)x1Khw?@9AT$DJ9|0P|vCw8e54Wp2he!nv;rY zrJ-}bxUW{G&o>VH`q0fo(mwb>hq{^}8rDPB9u{}@tW?}$JPdr9`g8rxvfY^Z^ugH86l_DjZ_DgxqCTl|uu z?`!K2xB}5EA*%uB3-1hgR;wC_ry(=ZH)j-ot68(jI6K~{Nu94N51|}vo$&4V3NG~y z^bb0`SX^Yc7AHB3EN)2sZC%HvR#JAV-hv?fx_xRrBxrkB$-m@*vXxa8Q_;=+897i` z51OsVZdFCYEzx@F*uHp^7wOS5YYT-j`#Xdf{NBYfNrmyvq=)&>C-qW))iE|sp$V1; zly$y5YIYPZ@*v-mP+){+J`UN!WaAOyrLu}rI1(x%%+}ylRekI1ey@dbTy(SLqCtuO z>&RbcIUrRXJ>KkLdPh{k?_=IUdrC6xKTe*twHl_BI`kL&3U=pa=#=+0^th|pR}PUm zm5$pK)}@gEHj@A)WIWSmtkr9(B&7l zO9C%;P2TYgZNK0=M&q%xcax!yB@{DpA=J`_-Iet23!>uiPZ=K|G^a5b^4|PyZ|`4o z%Ff9|L^m&8*?bieOOJsS7{8(#$4qhg7c5qPt{&IVV+&p+%m#sDs(zz1ji?PTgT1QW zws`Q==c{hkK#KPu#bWrzqz6XtK6S8%z+TddK{5$=*1pD(ti&yzn=xpSu`K-j)8Vzj zP-e#H>Q;{5Cz|c>ZU($(+|A0-pqSCIEbbY9^w=JMND22#XrIUJPxOj{ycm@_??)Z0 zkEDwQ9!l9CmLmsH);KqteHC>1@dqt*Bg%c&@~3{z{X_V-;rh(OGQdl5owBKCdT4_S zx-96in`3!|qigMPntP>=qiAvXH*!STqDulvs3nyrX?lMu&QbVASX@Nsvz7b~29*jJ z`l1W1dxmE6SSNgXDo|CpKP3v%m|wX-_omu?#V>AdW^Wu#+8k~S;5)2!QI8y&JwF>T zRo2d_IQeAM0XkAAG#g!`<}CG^I~c7~DDFMCamSpNM)6mwsw=C0NLUih%KL46u~Bdc zQwkdWkSF`$(`@6thM(ISPWariyqG%2uWC>DFfudU{xtIpEtw0$-M;%s8+2k>tg+tNLJ>VgrwSTb~J;iqn%l=y7*v3y@0e0s%` zdp04I_C}ObG4=+5n;@4MlDfy!XT9s|hE)Bxl~iI%mDwJZH|9Hrttk|Oa-_78?6|XA zfU0PSMdy*Y=cd2RI7eF~#IuNvZN`S zvXs%E{366Jge>GJIutf@4{Bt-u$EI$$CBMTl*3!<aDR|ZC;>LTZSq;7d9ZCI7U!lX44Gqe(B%KYQRArV$G%bC+YDT<9x zGEhdptFNr-^zgsO9?~AtT&L71W-j?F*mpkonAj`tXQaL^8-%Mhd0m^I!UN;8k*Vpr z4hu7f0rkBXnCi}6S}WO#N}iZag%J<{8t><&A(~W@j@@6Ti@TdHgTM|i*`T}=KA@E{ zXKabMz9YMtK6uUox?wsaMOu=uUlu;$8<`9Gg*iN}R1}DJ&t5_2r>ol51-+1gZdq zZW<2Llfn?yQmE$%pRc##7`>l7U~HAgeY@LBxHUhgvXezG91e6Qy&S@HQ&b8eKEsun zm$yy$5fNIDH&Mn4JB+V#RGZkxN2qZa`6Z?ZaP2Y^XGvHwM5SgQ4{RUsOg-; z?PaFQ!%?+j0+(S%hg%`HPc1xYb;1{s`p1u1lo2G|llsk@@A|(ci2mcee=X%WmJrKx zY&*Z#A{cS()?2c4tSlH|8mqFN5RoU+em^0je{Pa7xfloAGwZs>-a{q`Jtvc*-+y(Q zUh$!60jaf$B?xha8?$jRO$2nzAtmi?+-=c(L%Qj8+JZ<#M4ni>_w152$suOJ6PQ(8 ztEZVS(!$>ph^musauIz>inJ3X1_S^ma#%!%Ecu7eR%Yk)Q{t|J2AFnKD_BMN)Ru+R z)Rhyy+446B8Zp1Mh7F+}4byNGJ%GX_KnZ+jgH{B^kI z{cn%{i;z2s8xXrgNN*Ur``y~{xi|aoH>yBUUVrSM*-2}AZpqWzTp69e%#rXdW3QJOy2D0_WgG()z_!_%Xgfk6TaQ#jrs8W zO`6ok3E!hT%>PkQv1HAyQ{d$*s}Ve@@jV?jsyK=>&@B4QXkvfn(Aarqx3T_}#q{yF z$^5^g!;-mXTd!53DEnH64#6x=RZ{efF(g{-SWzFjJ%F6O)flwEaEesM=PG&v7&R{KwV*S-^6w5D+AyHpfNZy;8BC7c0DFa@~P+ zD&i+q0<_GewLffTFYJ19LtlcADT>~_AhjRc(LBd?aB7!0poxU-=N(4JL^oTlK5WKL z0-9gz}6Ynv{rR_u53 z`8weMiNcKpl82VHrczcY)rG|bl5otwwqLGt6DC$DTl>IoCO4eX z`*^tyqX+-CbFYZAqHTt3>@9qGun~RKyZDKv@4KGxY3yHP;GB_7g?}|}(gM9dWafm=Wr&w_4R>|RV(#$h{g-vCO;eOx zZuo-}zN@@riTy8k{M&Ff!{KtLhr;S7qH=d) zUrZkpHVxSWr>Up=(Wm3x(AainF9gzMym30097xKan))DiMEKu^_`h|LUM($?w$i_( zGxQ_Y(+e>vW2504^rY<*3$UT>GE58JPAF~n;JK-?f-A| z#wY@p(@Uy$mr!G;GNtY| z7e$QVn>2nwH*R%=N0oQ1qr-SKHFHo&&j(DJIF!;Y3_UX%(ux5R2d3uvBdhNlwl%bn zz#XAz_`9kSrK*93Pc_trs+yE=Q*{f#d^~)qTghF-f*+6b0XVhXU!AO0Q@y{J=o?ol zQktITTewtTa<003Q?%eXmjeA(Z^#w@+uX%VJu18>aC3+o7^*qJGQJ?R zY@xg}KSM>MgI6SVLsv(QV>8xHyQwy1tSQi3WIHY@e{Nx6%T$dcHFPyOqgb-YUvqXa zCB;IPIIg*|6JhHod(*>Q%=I+9v4scqB5^8gcHAJFEJ z#EgLPdYn(?yAd+`c*_Ser5SDe3oA&7kXYIB z*#DfUn><>?V(xT_@O<=s;_U^IU3YHR}K2?-}eV(pigDfns z54+FX1-pOGyjFNM z&ge-(7P@2iD7NiMXoYQI3h=6VpgBNZW)b9X2E8@U@()BdvI3Emeag=K;ZOX$XS-Jq z6nSfIPiAskGDc(H^Zg(Eb4Joq>N_dV7}tx-w}N(U4y-o#s9MkzB^gq+`JpE{MZGSx_ywrP^;55Iot!?bM!wy6(BzwXx-zc3NIkZ_aW=jl0D!bq_m|}8g-gm%Ph6+AE-S_~vPSO#IKqF1} zIb-&`o5#Qj8+);uvh<5#GD6^{LAc)FsO(hx64Lg4hwI#WxMAb5s)Sf-(^v4wn0*xm zBchO=4f^df-7;Of*dAy>e_@NWo`3Ljv3mQpIKzA;Pb}OU3-?MfzPIbHiDO3tktEtmKgk+N2%}l2#N}$nTbxK?wQ27~K zG+gad%u5E>I`6*2nAd~OH}$M`piLwLZ+5pGSdhs%lSLez(a^ww__>QT11MLYhqzc0 z?tz@o8Hlvw-o-g{Wr$)nAf*i}%}*&_&?*rpS9*u#e!K8i06B1zBWIK4FPE67e}nA? zNTZ}u@HW#ELJG)g83){{54ob%y_z-!4nxS=JgyPFf5PS zF;iZ#$)kiZLvGagfX86o7e_;ub?KqKUA6ZLheBMmh(6;Z!*;En_FPjgJ|6RtTyF4& zHtJ|wK|~+{*V2KEnF!0!o^;(VSFj4s(n7AUgZN80B6egilKJAk?&}B@K*KmYfYWqm zf}1$Bu`)DbH6m>1^%ZcROn@N+_?Mv`#dg?%c#`-V9G#9wfqi3z(KEp6h)4s#>>>!Acx1}nBF#N6v9ZPTZW@pM}KmZ9fB0Y?rd^Nz7RX2Oq*`^2P^9( z9QBQal}1AP!55|dDo1Sb!myc^g=fPXTv5e@b-QGJ0PljoTF`ibGx0^w06B~tP&=8n5FmdoAqU2#?m`D%svMDk+z+ib_N53MU1oieFSX1i;{{pL; z2q?%btCDo8{@jVu8VAvmjB{^WnaD&s4A_+z%T2F$gS7Oq{T-$}AeLv!fjErlAXE7X zzD}T{7rw(hO1Po+IZ@Dz4s*{B6RADqkmi}9M$lArEVs;Jn((iKji!u%1N21Mr1W2z z`vP_lPgTwBqCY%I&nj$bQ0GaAU4C-Gk^@PMX*+F=M=5ACid&{Ftkd;1vV3(vlQZ89 z=vN7XyIz8R$fzQ{D=u;}Z6x{BcX5jLE_zpCeAlz``TGm!9J0+#vt~ql)MCH4P_bCN zNW7vz4^?LCy%?-|AFXn81BJyIAC&k<99;+Ds*B7W{r>nRP&mTSMJ$AE4xFz>vTewT zFo$X1P+l+C$xRf-kH<s2Z*u^&>7yYGonF&&XdrId)++2BoNXQv!A@LFPT(;VJ8ncJwFhTA3% zbhJ*b0fc0UGwUr`K6HX;@ld=uvG?vfyk*RWxu!IWR(HKyr2XnzyHAUTxsrnIsh1QC zN4Ge8C$6nZEz?A!f@lW=AWiYt8dTiGt?Mq`W+8P*Kb%W6Z6svGzt*o?sJNtb|Lz3i z>9*zlT%*G69j!Z~QPY`|{-VgAooJdBiB%6yIYxkM32XtoQ;LyY1;_B+(a0Ru2XH~< zo-JJKyyiYSy~@q;`Tn~Hr*9tSHbKGkc^tf&4y9Xp)$s|)3H&Nh*?hahBwn@pl%e!p zRF?7g#$AUE!h^aCYxwQlc|Nn$gg+8S+%lf;C)_%|(L_J|n`B_BNhJT)SO5}@5oA&*;m$;3d^oW`Q<-jjKbay1`c}W2s&1O^9@<LhyCW=en10H_yp6M+g+Zd`O?c_ zVc?;dNX8eN#MqwJCO{Zfu_@V3Ev~ROjZc$MWY;sj)i}YH}_67)Vi(dE@HOhb(#p+ z3gc{cRHMV*Y~cTt^d6~;nO8oSLDpvw=QPJS7!JZ$C`MHUa#;%;tl=d7p&)|{GHg;o z)5M7iEd`38kh|ysA`(z)VrpzM_G#<|ewj5<8>W2RT#FcvCj1b6SB4Xk(Bov?1w-sb z<~a;ZXS)exc_wavq;vtQ7mu7J35T&yalN7`bh{FWPqasgefx~Jyo1xN>~#7ey(k@bVhsiR>eWZsWqg{zC$Y-WV7gAtIDoV48?9MHZ)pBFuIH)bY56+u zZ8@@4q`%xU$RXo8K~8K7z8BtpAs^J-DaqSe71`@x?nS$$Lj2R*HM6HCt6@@ZOv(P! z{C9WF((J9QI}237*VC+&Q`Td+L@~&tcC|BTlQ+A!vB1nVd35HNG-=pOceJ@##k*Cwvaz?O;M?b>+@WcAp+v*`#dK6)p3FtwbCnGE6nvg42kAT#ZB5XmVVG&M2L=DIn#3zTbdj8;`DQz}zImOY(u9cY9gih=_1 zLBK$QO}51#I3-Kw<~AaDdz`0mRL_x%tUc1sz+dK}4G9UJR??h({3Vgx{^2 zKMWdkwi)&MBNU7H5ExsjV3XopdRu&$HCPVJBFo#6?)C{ln`ZUYGNbB3=0`xn?^?R$ zZVwCqZWM$EVys6nvNcU(}9fvP!16-$` zPwpPTnix8l{du4jZG@D`^TrFG;yg&E4XLJ)I^hR(8djz!d{QC6MiNK#_(G%TY}_v? zhp9{}y};0nibb8YT`J%Y?uKn|mDQa$0j(QqbxV82yxRJO2t>eHzAlj*ItXlWbns$L4oJE-t>AtxVx&$RPt;MK1K z4OuQja?cy9@-osrUDfa=P_qmrvSe0MzmpOGq>O9z2u`coAXC~$fb&TaUTlSK;F2q( zA!_P`FTD;I?=%KB&C-SG)&gfny)C06GBVtk%2UJXg_kczkpHwGcqN_vp^{VYXj>P1 z=a=w-h2Rd(>01*_b=~CaRcTLDK*~%fs(|uk8YR1C5uhYPaHMY5>m>VZYFJFi!3T#T zlX9G_EHjd>zFcph@z2<{iZ1m!2(}mS=s8ZN8oRIwrw5G`kImmg1c4MsIiRazYH*Kl zSe@5oXW)8huAGej==fvJ``2NiM?+9IP8NfI1rD|=7gZd#uc>XH@t4E7y(l+DsSN4Y z&6Ct;e&y+N-7W(b2;xTN5^a-Ge~h|yCR4`LBMfuA{IdDy@dro4VGtxN~!-o0su@E}J(mo#;uO)&~`S2wm$3Jg(+1Zegi`$G9NcgODTQjUQ*1s>& zBgHA&RrOLc)cp!OZA&qAGaAI`RqGoMX)09-dlf4x=ArLr80% zg?l0iyP|lE2p!8!OpUrR(4PBJl0Q!ry>npDE4`BS=4+;j0#XRc<{EhQr?560Zw_rP z!Vn9ABl@-C%Yy;^af8TG-=Q4eN|@)a`Q6=!IgF2mW`9O@NUW!*5v1gkXhu5CU1_~B z$0PX2clQ#<&y(|*JkFIQiTiT1Mfal6`EXZzZ2v^?5@#v-+R_m^iC!10nuJgK)CHYD zfNr%ZL`2yuvOV2V?qLXp%{-fr!77I&psUrm`OkJ};xo!>XH_7U*3#&{Z(r;9B))WS zT+X6Da1e>|pf*-?4x7bHzt-7Bun?J%gLx0s;)w5BCwB5h7dvhT*i4kZOBp3erhXAm ze%v6?6J_%CNW+if+|4Yt^qDpUh}#j7NVnVcT)`E?UrYMt8nx#~Neu(w1xn)K2ubj= z(p|hw@58F8aKZ0<;1!CZGMY(b*R2;0W!4!QPQ#UDIR^kX9u=2niXP;A22 znI#wpkAVj`YL*~sUfZi6mjRL0GN**^79qpn!xw-t4QO;NJd;~%6W>J3U#U^9KO5u_ zulOcXkAsp&erRRZkxTfO#z*@*ogr31aK|>~?rO5~JdY?+^SooQ`$NMY3rn6n0l~D+ zB?~nIcO}5t`GF9T^GyGuP<&PUf^LzH*iEr=QQ&@hcf)N5Qg)AN%ana}6A@_mE{ui8 zH@Wc#z>ug2xO>q?EgDgh>C>|DgJIdn`lh<3cGJ`s7)Yta?D|HYLlEAQn|%vYhYtc= zb`>P3-0yan?`f{xr|ErM+RHYB%^fRGE4QZZJobt&eKJ>O&kAj@c#Ji0r-d(?X%#Qo ztM7r+l$UzL9Jfi?@p{B4f8iTOCwz)uYDSNco970pw^yQ2^)_?n_eUKSyn-!~g{VtU zmJKjkh?N*|X<39QxJ5{W`oc}IqDuiFg1znsE`FA+FcPtH2 z9GN>Gnn#Ant5uXwld!O|ryw!W|Gka2=rxCvAgbyTPrD((Tm6TWT@QPzBV9D@2ewEu7s#-C^ zG2=C~KxTxn`LJrpINh=9c(m2;W{5Y2LEgOW;5?t`FCDPHtdmxz;^X$D8A}#tAzlxb z*rs-j8uq_vMLf=VH|Qi`mA~mKOR|uc(1IoBXVukJ&_07FotXqI$ur?oZTnM&{<0+} z8)`{d5Ztt}>)FhLZDOFFpHNPIi`V`Aswb{8AF$y0`BmXl_7sR1U|G66JUUcYPi_86 z&m@XxzG_cYQBhtToU)r!0M6goIXblVu6)d5-8nw9u zXUEbd7M_f#7~+8iI7Yej({;B46eRv0)WSxvWmTFMvV!Q(b1g_GTIU>xn_h<%cZ>X5 zyEWC5l}%cyQyy!u$aCU(Al1e)s@6~VM0_Jw7FhtxIz3N+tjTQOCZOfJJzb5TPP`TIY2MU+8jFHK5}&2q_pSAK-}Stz?D zt?xmzZp$zrrE}R63u)x)_{Js!MHO}6rc7OuG(T-cN&7ir(%#-$K{###07p|@QZv>?_4TKB_ zaxe5gtNq5=Wg$jXHfo~1UILN?e(=QB#$yf#73@i(bE&NtEmy|MYmiy!w!@GQjg`dG zwK<7O=EG`g1;LbjLA8Uru(hs}wxYD|wCB@~7hw`E zXwU#8G26pSIxo#Cxc%~7W7$hRq)?guJ8-06XMpq8{{I3S`Rqf@fE`xdhqYy zXV!50pn|tLdMzRRL6>AqQAhLAsHEFt^J*$2ko{%X#$`2soYNmxS=82DM7S||y4kky zNPN@H+{sie`E*m3g_Jx@04lpLEzsNS-+#&tf%KOL1cmiATco4%P1-$XltLO(EF{;l zEknHHRzZG`RjJD&FlA%`HDSv$|86B{PC)5q_>SrDo=N!N?g^g_8Moszu6@as98XCx zFMhE7(v_Q?Ek?$tR-bO(5v!=F#re>bD4WH0iG3+f-2#0Z@iiNQU!q)oUk|+wFNWzJ zSPX4lGWR5^XA$DK}GqA(4_a^|hFj4p0{_X|(37cu_xXB*vO zUGychba=5nstlF)Y)W{*KmCG&4eR(Rr0g`sL{0F0b~rP+6(`QQ4v>_(7nv^-liTY> zO#ywJqsq{tx7Q|{QRYhnX#6DiDRpxtWpZhm&-`!y(JDX4CcKuY-`?QP^rEJD>!Aq= z)MB+&DdX{}iK}ZJ4N=eH40;bL)wLB~H)C)TK-zLaC5;h(8XIWjpRihvN8G zcHBtYvqy?4vwJtsZ5BtW24)?^#tuqZ?XsPCj6$8yjqpkf;6UzO@KdBuUx({V34;U} zO=7txQgJQm;;&N%divurWXNkFPQfnJTKjUW`(Rbr=mg_e8UlSqn*{QEDX8Nf@TO}7 zI*{16+c>1X4?>R$c65aU@cf=RX?;Y1mOKBH)g~b)UT-0hZYpRYaKoT?!oM#$&0PTM z&R=h;0h&{a4oHak%I=o9x4Ala_wEVbgz=q$u*?!)H{mLp$NF`8??^wc01@TNH1Sq$ z0*^AMV)yb;fNkJal0bZ7j>$w=^WggOTiW{zgNNuRe)2BA?~f15h^dzXtZMm*M=pmh^Kz;=$hnwH+* z6C0C1o#No4cKJctS<79Tc(K$8%Ud=xCWa?`-=FaPy&{vba6Td?rrG4)PJ&Ns+k`~^ zdCl$2Q*x9BqGnTb^M^1n>C52*T%H)cTNBO-w7S!uZ*{tIwZurI+?d5)TOGYlJ0Hq9 zCutnt^bdoM6TT8{l-oquoz@e+C5bw>F1_JtbDBly>w=Y>v)I@?vP_O2?*G>xS~? znH@+K+G^G9 zPat=F?Vm`Qn60{;q|{Qtn7Zq5<^3pb`!qV#yD zKNjt>8}(x0FzS+Ay~Q?cKi0T;Z{?p-9!I;abtlY27SD34ytZ?{Hu0p?Cx4O($<(Pn zez^0_cz6{SdlUWeAYb5^x<9h(fArG8`Dpdy@pk>%-nri0T@kB)!WjI8s^Pwe-RCGmA2pP0HlskTUBf0|4rYVzbv`u{d(PzB)#$B{rWlw9Ri;BuYbHcL|s z?b^n1(4fxfG|R6C0|{oShEwKql}jUn=C@bJ_b_2_KU&cRnn6;D7E4 zZ!=DXQN24@-RzU8%>rHf4LT=$bI)7YShN$h75sPACku#Ig;n}$nsloXMAHJl>QO>a zoLk@FB{@Tlu&q$kD ziKZx#P1Xb`ONfOMj0gc)(gc$zN*M@AL?n|GnpY z=ktxD{rj}{t{P@4=p8$zRKpdk-OET7X9 zw`uBkh-^KMte`R#Y!67;*0%~13-fse$WHVEB=zZ+7E&*-q^~$F1IL`R4-hg`=yaLz z*b5MEc0mE+Qb23*3tx-hSDw*b*FB{!NQ6310hZ-0L0iPvmTt66BzF3P`x2tY(0!mP za9a$#l7oC9vA4;*O;#iX~P5=?8aA_opFs7O5#{S(=A-S*$nSBhJW1gh!Q!32G z^VWJ$fpZ2k1`k0rDeb}@bZa7=dqmdZO)5~%oh4PGf9u`~u z1`)tXdf;}3_ui?}T?8tekRWJK_hUC<$K%8!DkHIvwwgd!zhULhTeIwiw)flpLm!+j zC+|DLq%sOBAE&;w?oFl^Q;U)_A1imF+UX__IJtoZXKiRrWOtSSK`!jwCco7R!`4E> zSx@N?c95>U28D`q`3TNeT-%1yvv=`3`R3w)Qcv73OUm@`6VPC%VVUI+(NXbS*~3$J zU@vwR+Rgp0(VjZ(WZwgtGMbCDu0-4%eqLUh<@O{zYZ)zPbW}l!`Q-N8Gsnx95?MZ? zx;isPxO3u2DoK#pEZ5daYd{ogJ-$UAi|+A?ClOd)){$UOd_>Z6EzWp+##x%K4{{e()lYrKpu!3E^&!x)UXLxRYJP zF;C`19aM2ZA=PGO)5ZhlL)qZ197m4BvrgM9Y^$=lTacuNM%seuF(0TMD!8GAdBc4ZUa0xdkqotG>v z#Jg1-0|MSNrQd(J{kPg3k{J zrfo`WPNr3#ukrGA`tN?9hEE7 Date: Tue, 12 Aug 2025 15:10:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86build-profile.js?= =?UTF-8?q?on5=E7=9A=84=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ArkWeb/LifecycleWebComp/oh-package-lock.json5 | 27 +++++++++++++++++++ .../entry/build-profile.json5 | 3 +-- 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 ArkWeb/LifecycleWebComp/oh-package-lock.json5 diff --git a/ArkWeb/LifecycleWebComp/oh-package-lock.json5 b/ArkWeb/LifecycleWebComp/oh-package-lock.json5 new file mode 100644 index 00000000..205c6cfd --- /dev/null +++ b/ArkWeb/LifecycleWebComp/oh-package-lock.json5 @@ -0,0 +1,27 @@ +{ + "meta": { + "stableOrder": true + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "@ohos/hamock@1.0.0": "@ohos/hamock@1.0.0", + "@ohos/hypium@1.0.19": "@ohos/hypium@1.0.19" + }, + "packages": { + "@ohos/hamock@1.0.0": { + "name": "@ohos/hamock", + "version": "1.0.0", + "integrity": "sha512-K6lDPYc6VkKe6ZBNQa9aoG+ZZMiwqfcR/7yAVFSUGIuOAhPvCJAo9+t1fZnpe0dBRBPxj2bxPPbKh69VuyAtDg==", + "resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/hamock/-/hamock-1.0.0.har", + "registryType": "ohpm" + }, + "@ohos/hypium@1.0.19": { + "name": "@ohos/hypium", + "version": "1.0.19", + "integrity": "sha512-cEjDgLFCm3cWZDeRXk7agBUkPqjWxUo6AQeiu0gEkb3J8ESqlduQLSIXeo3cCsm8U/asL7iKjF85ZyOuufAGSQ==", + "resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/hypium/-/hypium-1.0.19.har", + "registryType": "ohpm" + } + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/build-profile.json5 index 31862257..2d8b081b 100644 --- a/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/build-profile.json5 +++ b/CryptoArchitectureKit/KeyGenerationConversion/ConvertSpecifiedPEMAsymmetricKeyPair/entry/build-profile.json5 @@ -22,8 +22,7 @@ "cppFlags": "", "abiFilters": [ "arm64-v8a", - "x86_64", - "armeabi-v7a" + "x86_64" ] } }, -- Gitee