From 1cdb251a5cc062a26c899b0aea5640db02edc75d Mon Sep 17 00:00:00 2001 From: wangweiyuan Date: Fri, 1 Aug 2025 14:35:19 +0800 Subject: [PATCH] add KeyGenerationConversion2 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 | 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 | 46 ++++++ .../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 +++ .../project/specifyUncompressedPublicKey.cpp | 60 +++++++ .../main/ets/entryability/EntryAbility.ets | 57 +++++++ .../entrybackupability/EntryBackupAbility.ets | 27 ++++ .../main/ets/pages/CompressedPointData.ets | 55 +++++++ .../entry/src/main/ets/pages/GetKeyObject.ets | 69 ++++++++ .../entry/src/main/ets/pages/Index.ets | 66 ++++++++ .../pages/SpecifyUncompressedPublicKey.ets | 55 +++++++ .../entry/src/main/module.json5 | 66 ++++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 44 +++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 8 + .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++++ ...CompressPublicKeyFormatConversion.test.ets | 112 +++++++++++++ .../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 ++ .../ECCCompressPublicKeyFormatConversion1.png | Bin 0 -> 68318 bytes .../ECCCompressPublicKeyFormatConversion2.png | Bin 0 -> 23199 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 | 58 +++++++ .../entry/hvigorfile.ts | 21 +++ .../entry/oh-package.json5 | 26 +++ .../entry/src/main/cpp/CMakeLists.txt | 15 ++ .../entry/src/main/cpp/napi_init.cpp | 53 ++++++ .../src/main/cpp/types/libentry/Index.d.ts | 18 +++ .../main/cpp/types/libentry/oh-package.json5 | 21 +++ .../entry/src/main/cpp/types/project/file.h | 24 +++ .../entry/src/main/cpp/types/project/rsa.cpp | 55 +++++++ .../entry/src/main/cpp/types/project/sm2.cpp | 53 ++++++ .../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 ++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 +++ ...RandomlyGenerateAsymmetricKeyPair.test.ets | 72 +++++++++ .../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 ++ .../RandomlyGenerateAsymmetricKeyPair1.png | Bin 0 -> 39137 bytes .../RandomlyGenerateAsymmetricKeyPair2.png | Bin 0 -> 32255 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 ++++ .../entry/src/main/ets/pages/Index.ets | 64 ++++++++ .../entry/src/main/ets/pages/rsa/Promise.ets | 58 +++++++ .../entry/src/main/ets/pages/rsa/Sync.ets | 64 ++++++++ .../entry/src/main/ets/pages/sm2/Promise.ets | 58 +++++++ .../entry/src/main/ets/pages/sm2/Sync.ets | 64 ++++++++ .../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 ++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 +++ ...mlyGenerateAsymmetricKeyPairArkTS.test.ets | 116 ++++++++++++++ .../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 ++ ...andomlyGenerateAsymmetricKeyPairArkTS1.png | Bin 0 -> 51998 bytes ...andomlyGenerateAsymmetricKeyPairArkTS2.png | Bin 0 -> 20853 bytes .../RandomlyGenerateSymmetricKey/.gitignore | 12 ++ .../AppScope/app.json5 | 25 +++ .../resources/base/element/string.json | 8 + .../resources/base/media/app_icon.png | Bin 0 -> 2777 bytes .../RandomlyGenerateSymmetricKey/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 | 57 +++++++ .../src/main/cpp/types/libentry/Index.d.ts | 18 +++ .../main/cpp/types/libentry/oh-package.json5 | 21 +++ .../entry/src/main/cpp/types/project/aes.cpp | 44 +++++ .../entry/src/main/cpp/types/project/file.h | 23 +++ .../entry/src/main/cpp/types/project/sm4.cpp | 44 +++++ .../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 ++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 +++ .../RandomlyGenerateSymmetricKey.test.ets | 72 +++++++++ .../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 +++ .../RandomlyGenerateSymmetricKey/ohosTest.md | 9 ++ .../RandomlyGenerateSymmetricKey1.png | Bin 0 -> 36542 bytes .../RandomlyGenerateSymmetricKey2.png | Bin 0 -> 32206 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 ++++ .../entry/src/main/ets/pages/Index.ets | 64 ++++++++ .../entry/src/main/ets/pages/aes/Promise.ets | 54 +++++++ .../entry/src/main/ets/pages/aes/Sync.ets | 52 ++++++ .../entry/src/main/ets/pages/sm4/Promise.ets | 54 +++++++ .../entry/src/main/ets/pages/sm4/Sync.ets | 52 ++++++ .../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 ++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 +++ ...RandomlyGenerateSymmetricKeyArkTS.test.ets | 116 ++++++++++++++ .../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 ++ .../RandomlyGenerateSymmetricKeyArkTS1.png | Bin 0 -> 51302 bytes .../RandomlyGenerateSymmetricKeyArkTS2.png | Bin 0 -> 20765 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 | 80 ++++++++++ .../build-profile.json5 | 57 +++++++ .../code-linter.json5 | 35 ++++ .../entry/.gitignore | 6 + .../entry/build-profile.json5 | 43 +++++ .../entry/hvigorfile.ts | 21 +++ .../entry/oh-package.json5 | 25 +++ .../main/ets/entryability/EntryAbility.ets | 57 +++++++ .../entrybackupability/EntryBackupAbility.ets | 27 ++++ .../entry/src/main/ets/pages/Index.ets | 74 +++++++++ .../entry/src/main/ets/pages/ecc/Promise.ets | 144 +++++++++++++++++ .../entry/src/main/ets/pages/ecc/Sync.ets | 136 ++++++++++++++++ .../entry/src/main/ets/pages/rsa/Callback.ets | 109 +++++++++++++ .../entry/src/main/ets/pages/rsa/Sync.ets | 112 +++++++++++++ .../entry/src/main/ets/pages/sm2/Promise.ets | 65 ++++++++ .../entry/src/main/ets/pages/sm2/Sync.ets | 73 +++++++++ .../entry/src/main/module.json5 | 66 ++++++++ .../main/resources/base/element/color.json | 8 + .../main/resources/base/element/string.json | 64 ++++++++ .../main/resources/base/media/background.png | Bin 0 -> 57364 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 12430 bytes .../resources/base/media/layered_image.json | 7 + .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 11 ++ .../main/resources/dark/element/color.json | 8 + .../src/ohosTest/ets/test/Ability.test.ets | 50 ++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 22 +++ ...rametersGenerateAsymmetricKeyPair.test.ets | 151 ++++++++++++++++++ .../entry/src/ohosTest/module.json5 | 27 ++++ .../entry/src/test/List.test.ets | 20 +++ .../entry/src/test/LocalUnit.test.ets | 48 ++++++ .../hvigor/hvigor-config.json5 | 37 +++++ .../hvigorfile.ts | 21 +++ .../oh-package.json5 | 25 +++ .../ohosTest.md | 13 ++ ...edParametersGenerateAsymmetricKeyPair1.png | Bin 0 -> 68705 bytes ...edParametersGenerateAsymmetricKeyPair2.png | Bin 0 -> 21124 bytes 253 files changed, 7754 insertions(+) create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/README.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/CMakeLists.txt create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/napi_init.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/libentry/Index.d.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/project/file.h create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/project/specifyUncompressedPublicKey.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/CompressedPointData.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/GetKeyObject.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/SpecifyUncompressedPublicKey.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/ets/test/ECCCompressPublicKeyFormatConversion.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/screenshots/ECCCompressPublicKeyFormatConversion1.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/screenshots/ECCCompressPublicKeyFormatConversion2.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/README.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/napi_init.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/libentry/Index.d.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/project/file.h create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/project/sm2.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/RandomlyGenerateAsymmetricKeyPair.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/screenshots/RandomlyGenerateAsymmetricKeyPair1.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/screenshots/RandomlyGenerateAsymmetricKeyPair2.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/README.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Promise.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Promise.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/RandomlyGenerateAsymmetricKeyPairArkTS.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/screenshots/RandomlyGenerateAsymmetricKeyPairArkTS1.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/screenshots/RandomlyGenerateAsymmetricKeyPairArkTS2.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/README.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/CMakeLists.txt create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/napi_init.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/libentry/Index.d.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/project/aes.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/project/file.h create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/project/sm4.cpp create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/ets/test/RandomlyGenerateSymmetricKey.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/screenshots/RandomlyGenerateSymmetricKey1.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/screenshots/RandomlyGenerateSymmetricKey2.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/README.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/aes/Promise.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/aes/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/sm4/Promise.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/sm4/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/ets/test/RandomlyGenerateSymmetricKeyArkTS.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/screenshots/RandomlyGenerateSymmetricKeyArkTS1.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/screenshots/RandomlyGenerateSymmetricKeyArkTS2.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/AppScope/app.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/AppScope/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/AppScope/resources/base/media/app_icon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/README.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/code-linter.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/.gitignore create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/build-profile.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/ecc/Promise.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/ecc/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/rsa/Callback.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/rsa/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/sm2/Promise.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/sm2/Sync.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/string.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/background.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/foreground.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/layered_image.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/startIcon.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/SpecifiedParametersGenerateAsymmetricKeyPair.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/module.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/test/List.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/hvigor/hvigor-config.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/hvigorfile.ts create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/oh-package.json5 create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/ohosTest.md create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/screenshots/SpecifiedParametersGenerateAsymmetricKeyPair1.png create mode 100644 CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/screenshots/SpecifiedParametersGenerateAsymmetricKeyPair2.png diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/.gitignore new file mode 100644 index 0000000000..d2ff20141c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/.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/ECCCompressPublicKeyFormatConversion/AppScope/app.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/AppScope/app.json5 new file mode 100644 index 0000000000..4bd0fd9f00 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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.ecccompresspublickeyformatconversion", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000..e741108c2e --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "ECCCompressPublicKeyFormatConversion" + } + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/README.md b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/README.md new file mode 100644 index 0000000000..b0c155a414 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/README.md @@ -0,0 +1,86 @@ +# 使用ECC压缩/非压缩格式转换 + +### 介绍 + +可通过指定ECC公钥数据,生成公钥对象(PubKey);也可从公钥对象(PubKey)中,获取ECC公钥数据。当前仅支持ECC算法中,满足X509规范的压缩/非压缩格式的公钥数据。此处的公钥数据应当是完整的X509公钥,对于只使用点数据的情况. + +本示例主要展示了使用ECC压缩/非压缩公钥格式转换(ArkTS)、使用ECC压缩/非压缩公钥格式转换(C/C++)、使用ECC压缩/非压缩点格式转换场景。该工程中展示的代码详细描述可查如下链接中业务扩展场景介绍部分。 + +- [使用ECC压缩/非压缩公钥格式转换(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-convert-compressed-or-uncompressed-ECC-pubkey.md) +- [使用ECC压缩/非压缩公钥格式转换(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-convert-compressed-or-uncompressed-ECC-pubkey-ndk.md) +- [使用ECC压缩/非压缩点格式转换](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-convert-compressed-or-uncompressed-ECC-point.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例ECCCompressPublicKeyFormatConversion.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── cpp + │ │ ├── types + │ │ | ├── libentry + │ │ | ├── index.d.ts + │ │ | ├── oh-package.json5 + │ │ | ├── project + │ │ | ├── specifyUncompressedPublicKey.cpp + │ │ | ├── file.h + │ │ ├── CMakeList.txt + │ │ ├── napi_init.cpp + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 使用ECC压缩/非压缩格式转换示例代码 + │ │ ├── CompressedPointData.ets + │ │ ├── GetKeyObject.ets + │ │ ├── SpecifyUncompressedPublicKey.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── ECCCompressPublicKeyFormatConversion.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/ECCCompressPublicKeyFormatConversion > .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/ECCCompressPublicKeyFormatConversion/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/build-profile.json5 new file mode 100644 index 0000000000..fb5a1ab654 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/code-linter.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/code-linter.json5 new file mode 100644 index 0000000000..28586467ee --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/.gitignore new file mode 100644 index 0000000000..e2713a2779 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/build-profile.json5 new file mode 100644 index 0000000000..3186225747 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/hvigorfile.ts new file mode 100644 index 0000000000..e4f43d5466 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/oh-package.json5 new file mode 100644 index 0000000000..118bdd4fe7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/CMakeLists.txt b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 0000000000..99340164a1 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(ECCCompressPublicKeyFormatConversion) + +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/specifyUncompressedPublicKey.cpp) +target_link_libraries(entry PUBLIC libace_napi.z.so libohcrypto.so) \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/napi_init.cpp b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/napi_init.cpp new file mode 100644 index 0000000000..fb04405809 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/napi_init.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "napi/native_api.h" +#include "types/project/file.h" + +static napi_value NAPI_Global_doTestEccDataCovert(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, doTestEccDataCovert(), &ret); + return ret; +} + +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = {{"doTestEccDataCovert", nullptr, NAPI_Global_doTestEccDataCovert, 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/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/libentry/Index.d.ts b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/libentry/Index.d.ts new file mode 100644 index 0000000000..7ace52c4f4 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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 doTestEccDataCovert: () => number; \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/libentry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 0000000000..6abf3b7c20 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/project/file.h b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/project/file.h new file mode 100644 index 0000000000..028afbe0eb --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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 doTestEccDataCovert(); + +#endif // FILE_H \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/project/specifyUncompressedPublicKey.cpp b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/project/specifyUncompressedPublicKey.cpp new file mode 100644 index 0000000000..a7f83d5f51 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/cpp/types/project/specifyUncompressedPublicKey.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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_uncompressed_pub_keypair] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_asym_key.h" + +OH_Crypto_ErrCode doTestEccDataCovert() +{ + OH_CryptoAsymKeyGenerator *generator = nullptr; + OH_CryptoKeyPair *keyPair = nullptr; + Crypto_DataBlob returnBlob = { .data = nullptr, .len = 0 }; + OH_Crypto_ErrCode ret = CRYPTO_INVALID_PARAMS; + + ret = OH_CryptoAsymKeyGenerator_Create("ECC_BrainPoolP256r1", &generator); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + uint8_t pubKeyBlobData[] = { + 48, 90, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36, 3, 3, 2, + 8, 1, 1, 7, 3, 66, 0, 4, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, + 121, 202, 154, 21, 146, 129, 75, 76, 63, 8, 195, 157, 111, 40, 217, 215, + 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, + 228, 123, 242, 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, + 46, 163, 156, 152 + }; + Crypto_DataBlob pubKeyUncompressedBlob = { + .data = pubKeyBlobData, + .len = sizeof(pubKeyBlobData), + }; + ret = OH_CryptoAsymKeyGenerator_Convert(generator, CRYPTO_DER, &pubKeyUncompressedBlob, nullptr, &keyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(generator); + return ret; + } + + OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair); + ret = OH_CryptoPubKey_Encode(pubKey, CRYPTO_DER, "X509|COMPRESSED", &returnBlob); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(generator); + OH_CryptoKeyPair_Destroy(keyPair); + return ret; + } + OH_CryptoAsymKeyGenerator_Destroy(generator); + OH_CryptoKeyPair_Destroy(keyPair); + return ret; +} +// [End convert_ecc_uncompressed_pub_keypair] diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000..965554bb3a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 0000000000..b1e2129472 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/CompressedPointData.ets b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/CompressedPointData.ets new file mode 100644 index 0000000000..1d6385c690 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/CompressedPointData.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 convert_ecc_uncompressed_point] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function eccPointUncompressedToCompressed() { + let pkData = + new Uint8Array([4, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75, 76, 63, 8, 195, + 157, 111, 40, 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, 228, 123, 242, + 206, 200, 98, 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152]); + let returnPoint = cryptoFramework.ECCKeyUtil.convertPoint('NID_brainpoolP256r1', pkData); + console.info('convertPoint success'); + let returnData = cryptoFramework.ECCKeyUtil.getEncodedPoint('NID_brainpoolP256r1', returnPoint, 'COMPRESSED'); + console.info('returnData: ' + + returnData); // (因为y为偶数,所以压缩点数据的前缀是02)returnData: 2,143,39,57,249,145,50,63,222,35,70,178,121,202,154,21, + // 146,129,75,76,63,8,195,157,111,40,217,215,148,120,224,205,82 +} +// [End convert_ecc_uncompressed_point] + +@Entry +@Component +struct Index { + @State message: string = 'CompressedPointData'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_compressedPointData')) + .width('70%') + .onClick(() => { + try { + eccPointUncompressedToCompressed(); + this.message = 'CompressedPointData Success'; + } catch { + this.message = 'CompressedPointData Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/GetKeyObject.ets b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/GetKeyObject.ets new file mode 100644 index 0000000000..5a01bdf194 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/GetKeyObject.ets @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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_ecc_uncompressed_point_get_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +async function eccPointCompressedToPoint() { + let pkData = + new Uint8Array([2, 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75, 76, 63, 8, 195, + 157, 111, 40, 217, 215, 148, 120, 224, 205, 82]); + let returnPoint = cryptoFramework.ECCKeyUtil.convertPoint('NID_brainpoolP256r1', pkData); + console.info('convertPoint success'); + let eccCommonParamsSpec = cryptoFramework.ECCKeyUtil.genECCCommonParamsSpec('NID_brainpoolP256r1'); + let eccPubKeySpec: cryptoFramework.ECCPubKeySpec = { + algName: 'ECC', + specType: cryptoFramework.AsyKeySpecType.PUBLIC_KEY_SPEC, + params: eccCommonParamsSpec, + pk: returnPoint + }; + let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(eccPubKeySpec); + let pubKey = await generatorBySpec.generatePubKey(); + let returnData = cryptoFramework.ECCKeyUtil.getEncodedPoint('NID_brainpoolP256r1', returnPoint, 'UNCOMPRESSED'); + console.info('returnData: ' + + returnData); // 4,143,39,57,249,145,50,63,222,35,70,178,121,202,154,21,146,129,75,76,63,8,195,157,111, + // 40,217,215,148,120,224,205,82,83,92,185,21,211,184,5,19,114,33,86,85,228,123,242,206,200,98,178,184, + // 130,35,232,45,5,202,189,11,46,163,156,152 + let eccPkX = pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_X_BN); + console.info('returnPoint x data: ' + + returnPoint.x); // 64750044510792891439269945828433327517677381559622384455951527515863444933970 + console.info('ECC_PK_X_BN:' + + eccPkX); // 64750044510792891439269945828433327517677381559622384455951527515863444933970 +} +// [End specify_ecc_uncompressed_point_get_keypair] + +@Entry +@Component +struct Index { + @State message: string = 'GetKeyObject'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_getKeyObject')) + .width('70%') + .onClick(async () => { + try { + await eccPointCompressedToPoint(); + this.message = 'GetKeyObject Success'; + } catch { + this.message = 'GetKeyObject Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000..1d878bc7e0 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/Index.ets @@ -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. + */ + +import { router } from '@kit.ArkUI'; +import testNapi from 'libentry.so'; + +@Entry +@Component +struct Index { + @State message: string = 'ECCCompressPublicKeyFormatConversion'; + + 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.SpecifyUncompressedPublicKey')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.doTestEccDataCovert(); + this.message = 'doTestEccDataCovert Success Result:' + ret.toString(); + }) + Button($r('app.string.SpecifyUncompressedPublicKeyArkTS')) + .width('70%') + .onClick(() => { + this.goToSample('pages/SpecifyUncompressedPublicKey') + }) + Button($r('app.string.CompressedPointData')) + .width('70%') + .onClick(() => { + this.goToSample('pages/CompressedPointData') + }) + Button($r('app.string.GetKeyObject')) + .width('70%') + .onClick(() => { + this.goToSample('pages/GetKeyObject') + }) + } + .width('100%') + .height('100%') + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/SpecifyUncompressedPublicKey.ets b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/SpecifyUncompressedPublicKey.ets new file mode 100644 index 0000000000..b1afc4373e --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/ets/pages/SpecifyUncompressedPublicKey.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 convert_ecc_uncompressed_pub_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +async function eccPubUncompressedToCompressed() { + let pkData = + new Uint8Array([48, 90, 48, 20, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 9, 43, 36, 3, 3, 2, 8, 1, 1, 7, 3, 66, 0, 4, + 143, 39, 57, 249, 145, 50, 63, 222, 35, 70, 178, 121, 202, 154, 21, 146, 129, 75, 76, 63, 8, 195, 157, 111, 40, + 217, 215, 148, 120, 224, 205, 82, 83, 92, 185, 21, 211, 184, 5, 19, 114, 33, 86, 85, 228, 123, 242, 206, 200, 98, + 178, 184, 130, 35, 232, 45, 5, 202, 189, 11, 46, 163, 156, 152]); + let pubKeyBlob: cryptoFramework.DataBlob = { data: pkData }; + let generator = cryptoFramework.createAsyKeyGenerator('ECC_BrainPoolP256r1'); + let keyPair = await generator.convertKey(pubKeyBlob, null); + let returnBlob = keyPair.pubKey.getEncodedDer('X509|COMPRESSED'); + console.info('returnBlob data:' + returnBlob.data); +} +// [End convert_ecc_uncompressed_pub_keypair] + +@Entry +@Component +struct Index { + @State message: string = 'SpecifyUncompressedPublicKey'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_specifyUncompressedPublicKey')) + .width('70%') + .onClick(async () => { + try { + await eccPubUncompressedToCompressed(); + this.message = 'SpecifyUncompressedPublicKey Success'; + } catch { + this.message = 'SpecifyUncompressedPublicKey Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/module.json5 new file mode 100644 index 0000000000..4144486d1a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000..3c712962da --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000..0b88229013 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/element/string.json @@ -0,0 +1,44 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "ECCCompressPublicKeyFormatConversion" + }, + { + "name": "SpecifyUncompressedPublicKey", + "value": "SpecifyUncompressedPublicKey" + }, + { + "name": "SpecifyUncompressedPublicKeyArkTS", + "value": "SpecifyUncompressedPublicKeyArkTS" + }, + { + "name": "CompressedPointData", + "value": "CompressedPointData" + }, + { + "name": "GetKeyObject", + "value": "GetKeyObject" + }, + { + "name": "call_compressedPointData", + "value": "Call CompressedPointData" + }, + { + "name": "call_getKeyObject", + "value": "Call GetKeyObject" + }, + { + "name": "call_specifyUncompressedPublicKey", + "value": "Call SpecifyUncompressedPublicKey" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000..78f40ae7c4 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000..cd80674df0 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,8 @@ +{ + "src": [ + "pages/Index", + "pages/CompressedPointData", + "pages/GetKeyObject", + "pages/SpecifyUncompressedPublicKey" + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000..79b11c2747 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000..0f8ce9a2c0 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/ets/test/ECCCompressPublicKeyFormatConversion.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/ets/test/ECCCompressPublicKeyFormatConversion.test.ets new file mode 100644 index 0000000000..b5bd589ba4 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/ets/test/ECCCompressPublicKeyFormatConversion.test.ets @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 eccCompressPublicKeyFormatConversionTest() { + describe('eccCompressPublicKeyFormatConversionTest', () => { + /** + * 打开应用 + */ + 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压缩/非压缩公钥格式转换(C/C++) + */ + it('testEccCompressPublicKeyFormatConversion001', 0, async () => { + console.info('uitest: testEccCompressPublicKeyFormatConversion001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SpecifyUncompressedPublicKey')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('doTestEccDataCovert Success Result:0')); + console.info('uitest: testEccCompressPublicKeyFormatConversion001 end'); + }) + + /** + * 点击按钮,使用ECC压缩/非压缩公钥格式转换(ArkTS) + */ + it('testEccCompressPublicKeyFormatConversion002', 0, async () => { + console.info('uitest: testEccCompressPublicKeyFormatConversion002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SpecifyUncompressedPublicKeyArkTS')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SpecifyUncompressedPublicKey')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SpecifyUncompressedPublicKey Success')); + console.info('uitest: testEccCompressPublicKeyFormatConversion002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用ECC压缩/非压缩点格式转换(指定非压缩点数据转换为压缩点数据) + */ + it('testEccCompressPublicKeyFormatConversion003', 0, async () => { + console.info('uitest: testEccCompressPublicKeyFormatConversion003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('CompressedPointData')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call CompressedPointData')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('CompressedPointData Success')); + console.info('uitest: testEccCompressPublicKeyFormatConversion003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,使用ECC压缩/非压缩点格式转换(指定压缩点数据获取密钥对象) + */ + it('testEccCompressPublicKeyFormatConversion004', 0, async () => { + console.info('uitest: testEccCompressPublicKeyFormatConversion004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('GetKeyObject')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call GetKeyObject')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('GetKeyObject Success')); + console.info('uitest: testEccCompressPublicKeyFormatConversion004 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000..f42fea616a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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 eccCompressPublicKeyFormatConversionTest from './ECCCompressPublicKeyFormatConversion.test'; + +export default function testsuite() { + abilityTest(); + eccCompressPublicKeyFormatConversionTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000000..c3fd9dda30 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/test/List.test.ets new file mode 100644 index 0000000000..f1186b1f53 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/entry/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000..7fc57c77db --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000..d584c19c24 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/hvigorfile.ts new file mode 100644 index 0000000000..2a5e543f19 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/oh-package.json5 new file mode 100644 index 0000000000..e41bae026a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/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/ECCCompressPublicKeyFormatConversion/ohosTest.md b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/ohosTest.md new file mode 100644 index 0000000000..13c6e7e5a2 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/ohosTest.md @@ -0,0 +1,11 @@ +# 使用ECC压缩/非压缩格式转换测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------------------------------ | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,使用ECC压缩/非压缩公钥格式转换(C/C++) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用ECC压缩/非压缩公钥格式转换(ArkTS) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用ECC压缩/非压缩点格式转换(指定非压缩点数据转换为压缩点数据) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,使用ECC压缩/非压缩点格式转换(指定压缩点数据获取密钥对象) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/screenshots/ECCCompressPublicKeyFormatConversion1.png b/CryptoArchitectureKit/KeyGenerationConversion/ECCCompressPublicKeyFormatConversion/screenshots/ECCCompressPublicKeyFormatConversion1.png new file mode 100644 index 0000000000000000000000000000000000000000..f77b045caf659f79c761b749e1ae8e170da51677 GIT binary patch literal 68318 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

bld}TYdvn?37(S=3>ZDdS1C?m>JqJ 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 L|CPY0qi6pFn}8;* literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/.gitignore new file mode 100644 index 0000000000..d2ff20141c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/.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/RandomlyGenerateAsymmetricKeyPair/AppScope/app.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/AppScope/app.json5 new file mode 100644 index 0000000000..ec79f46166 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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.randomlygenerateasymmetrickeypair", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000..8b2697f297 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "RandomlyGenerateAsymmetricKeyPair" + } + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/README.md b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/README.md new file mode 100644 index 0000000000..0462450e8d --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/README.md @@ -0,0 +1,82 @@ +# 随机生成非对称密钥对(C/C++) + +### 介绍 + +以RSA和SM2为例,随机生成非对称密钥对(OH_CryptoKeyPair),并获得二进制数据。非对称密钥对可用于后续加解密等操作,二进制数据可用于存储或运输。 + +本示例主要展示了随机生成非对称密钥对(C/C++),随机生成RSA、SM2密钥对场景。该工程中展示的代码详细描述可查如下链接中业务扩展场景介绍部分。 + +- [随机生成非对称密钥对(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-generate-asym-key-pair-randomly-ndk.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例RandomlyGenerateAsymmetricKeyPair.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── cpp + │ │ ├── types + │ │ | ├── libentry + │ │ | ├── index.d.ts + │ │ | ├── oh-package.json5 + │ │ | ├── project + │ │ | ├── sm2.cpp + │ │ | ├── file.h + │ │ | ├── rsa.cpp + │ │ ├── CMakeList.txt + │ │ ├── napi_init.cpp + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 随机生成非对称密钥对(C/C++)示例代码 + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── RandomlyGenerateAsymmetricKeyPair.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/RandomlyGenerateAsymmetricKeyPair > .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/RandomlyGenerateAsymmetricKeyPair/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/build-profile.json5 new file mode 100644 index 0000000000..fb5a1ab654 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/code-linter.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/code-linter.json5 new file mode 100644 index 0000000000..28586467ee --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/.gitignore new file mode 100644 index 0000000000..e2713a2779 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/build-profile.json5 new file mode 100644 index 0000000000..2d8b081b61 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/hvigorfile.ts new file mode 100644 index 0000000000..e4f43d5466 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/oh-package.json5 new file mode 100644 index 0000000000..118bdd4fe7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 0000000000..ace0c9826d --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(RandomlyGenerateAsymmetricKeyPair) + +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 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/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/napi_init.cpp b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/napi_init.cpp new file mode 100644 index 0000000000..a781d77594 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/napi_init.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. + */ + +#include "napi/native_api.h" +#include "types/project/file.h" + +static napi_value NAPI_Global_randomGenerateAsymKey(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, randomGenerateAsymKey(), &ret); + return ret; +} +static napi_value NAPI_Global_randomGenerateRSA(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, randomGenerateRSA(), &ret); + return ret; +} +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = {{"randomGenerateAsymKey", nullptr, NAPI_Global_randomGenerateAsymKey, nullptr, + nullptr, nullptr, napi_default, nullptr}, + {"randomGenerateRSA", nullptr, NAPI_Global_randomGenerateRSA, 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/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/libentry/Index.d.ts b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/libentry/Index.d.ts new file mode 100644 index 0000000000..6cc44ebc55 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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 randomGenerateAsymKey: () => number; + +export const randomGenerateRSA: () => number; \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/libentry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 0000000000..6abf3b7c20 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/project/file.h b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/project/file.h new file mode 100644 index 0000000000..ef4b0f6843 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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" +#include "CryptoArchitectureKit/crypto_asym_key.h" + +OH_Crypto_ErrCode randomGenerateAsymKey(); +OH_Crypto_ErrCode randomGenerateRSA(); + +#endif // FILE_H \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.cpp b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.cpp new file mode 100644 index 0000000000..2cf7492fa3 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/project/rsa.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 generate_rsa_keypair] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_asym_key.h" +#include "file.h" + +OH_Crypto_ErrCode randomGenerateAsymKey() +{ + OH_CryptoAsymKeyGenerator *ctx = nullptr; + OH_CryptoKeyPair *keyPair = nullptr; + OH_Crypto_ErrCode ret; + + ret = OH_CryptoAsymKeyGenerator_Create("RSA1024|PRIMES_2", &ctx); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(ctx); + return ret; + } + + ret = OH_CryptoAsymKeyGenerator_Generate(ctx, &keyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(ctx); + OH_CryptoKeyPair_Destroy(keyPair); + return ret; + } + + OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(keyPair); + Crypto_DataBlob retBlob = {.data = nullptr, .len = 0}; + ret = OH_CryptoPubKey_Encode(pubKey, CRYPTO_PEM, "PKCS1", &retBlob); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(ctx); + OH_CryptoKeyPair_Destroy(keyPair); + return ret; + } + + OH_Crypto_FreeDataBlob(&retBlob); + + OH_CryptoAsymKeyGenerator_Destroy(ctx); + OH_CryptoKeyPair_Destroy(keyPair); + return ret; +} +// [End generate_rsa_keypair] diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/project/sm2.cpp b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/project/sm2.cpp new file mode 100644 index 0000000000..46d5fea4ad --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/cpp/types/project/sm2.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 generate_sm2_keypair] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_asym_key.h" +#include "file.h" + +OH_Crypto_ErrCode randomGenerateRSA() +{ + OH_CryptoAsymKeyGenerator *ctx = nullptr; + OH_CryptoKeyPair *dupKeyPair = nullptr; + OH_Crypto_ErrCode ret; + + ret = OH_CryptoAsymKeyGenerator_Create("SM2_256", &ctx); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(ctx); + return ret; + } + + ret = OH_CryptoAsymKeyGenerator_Generate(ctx, &dupKeyPair); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(ctx); + OH_CryptoKeyPair_Destroy(dupKeyPair); + return ret; + } + + OH_CryptoPubKey *pubKey = OH_CryptoKeyPair_GetPubKey(dupKeyPair); + Crypto_DataBlob retBlob = { .data = nullptr, .len = 0 }; + ret = OH_CryptoPubKey_Encode(pubKey, CRYPTO_DER, nullptr, &retBlob); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoAsymKeyGenerator_Destroy(ctx); + OH_CryptoKeyPair_Destroy(dupKeyPair); + return ret; + } + + OH_CryptoAsymKeyGenerator_Destroy(ctx); + OH_CryptoKeyPair_Destroy(dupKeyPair); + return ret; +} +// [End generate_sm2_keypair] diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000..965554bb3a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 0000000000..b1e2129472 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000..31df824f96 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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 = 'RandomlyGenerateAsymmetricKeyPair'; + + 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.randomGenerateAsymKey(); + this.message = 'Call RSA Success Result:' + ret.toString(); + }) + Button($r('app.string.call_sm2')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.randomGenerateRSA(); + this.message = 'Call SM2 Success Result:' + ret.toString(); + }) + } + .width('100%') + .height('100%') + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/module.json5 new file mode 100644 index 0000000000..4144486d1a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000..3c712962da --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000..2a8efbce3e --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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": "RandomlyGenerateAsymmetricKeyPair" + }, + { + "name": "call_rsa", + "value": "Call RSA" + }, + { + "name": "call_sm2", + "value": "Call SM2" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000..78f40ae7c4 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000..1898d94f58 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000..79b11c2747 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000..0f8ce9a2c0 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000..da163f36bb --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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 randomlyGenerateAsymmetricKeyPairTest from './RandomlyGenerateAsymmetricKeyPair.test'; + +export default function testsuite() { + abilityTest(); + randomlyGenerateAsymmetricKeyPairTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/RandomlyGenerateAsymmetricKeyPair.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/RandomlyGenerateAsymmetricKeyPair.test.ets new file mode 100644 index 0000000000..cc5008f1c4 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/RandomlyGenerateAsymmetricKeyPair.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 randomlyGenerateAsymmetricKeyPairTest() { + describe('randomlyGenerateAsymmetricKeyPairTest', () => { + /** + * 打开应用 + */ + 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('testRandomlyGenerateAsymmetricKeyPair001', 0, async () => { + console.info('uitest: testRandomlyGenerateAsymmetricKeyPair001 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: testRandomlyGenerateAsymmetricKeyPair001 end'); + }) + + /** + * 点击按钮,随机生成非对称密钥对(SM2) + */ + it('testRandomlyGenerateAsymmetricKeyPair002', 0, async () => { + console.info('uitest: testRandomlyGenerateAsymmetricKeyPair002 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: testRandomlyGenerateAsymmetricKeyPair002 end'); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000000..c3fd9dda30 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/test/List.test.ets new file mode 100644 index 0000000000..f1186b1f53 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000..7fc57c77db --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000..d584c19c24 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/hvigorfile.ts new file mode 100644 index 0000000000..2a5e543f19 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/oh-package.json5 new file mode 100644 index 0000000000..e41bae026a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/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/RandomlyGenerateAsymmetricKeyPair/ohosTest.md b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/ohosTest.md new file mode 100644 index 0000000000..6705d611b7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/ohosTest.md @@ -0,0 +1,9 @@ +# 随机生成非对称密钥对(C/C++)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ----------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,随机生成非对称密钥对(RSA) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,随机生成非对称密钥对(SM2) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/screenshots/RandomlyGenerateAsymmetricKeyPair1.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPair/screenshots/RandomlyGenerateAsymmetricKeyPair1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb08de17b80606cdeb59fa44ca8b2fd0e88f47cc GIT binary patch literal 39137 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
N`5F2Ly17=wJmh)qk{BqkvU3@#6eLT1d_P|L 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 ag}`43{Dr_@2>gY>UkLnvML_o5$o~P39XbgB literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/.gitignore new file mode 100644 index 0000000000..d2ff20141c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/.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/RandomlyGenerateAsymmetricKeyPairArkTS/AppScope/app.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/AppScope/app.json5 new file mode 100644 index 0000000000..bf9e81bc4f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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.randomlygenerateasymmetrickeypairarkts", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000..bd5ebcd46a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "RandomlyGenerateAsymmetricKeyPairArkTS" + } + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/README.md b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/README.md new file mode 100644 index 0000000000..4e639cd886 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/README.md @@ -0,0 +1,77 @@ +# 随机生成非对称密钥对(ArkTS) + +### 介绍 + +以RSA和SM2为例,随机生成非对称密钥对(KeyPair),并获得二进制数据。非对称密钥对可用于后续加解密等操作,二进制数据可用于存储或运输。 + +本示例主要展示了随机生成非对称密钥对(ArkTS),随机生成RSA、SM2密钥对场景。该工程中展示的代码详细描述可查如下链接中业务扩展场景介绍部分。 + +- [随机生成非对称密钥对(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-generate-asym-key-pair-randomly.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例RandomlyGenerateAsymmetricKeyPairArkTS.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 随机生成非对称密钥对(ArkTS)示例代码 + │ │ ├── rsa + │ │ | ├── Promise.ets + │ │ | ├── Sync.ets + │ │ ├── sm2 + │ │ | ├── Promise.ets + │ │ | ├── Sync.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── RandomlyGenerateAsymmetricKeyPairArkTS.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/RandomlyGenerateAsymmetricKeyPairArkTS > .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/RandomlyGenerateAsymmetricKeyPairArkTS/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/build-profile.json5 new file mode 100644 index 0000000000..fb5a1ab654 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/code-linter.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/code-linter.json5 new file mode 100644 index 0000000000..28586467ee --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/.gitignore new file mode 100644 index 0000000000..e2713a2779 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/build-profile.json5 new file mode 100644 index 0000000000..e7569e3056 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/hvigorfile.ts new file mode 100644 index 0000000000..e4f43d5466 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/oh-package.json5 new file mode 100644 index 0000000000..c9cb6c8174 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000..edc2839f20 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 0000000000..b1e2129472 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000..cea7e378f3 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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 = 'RandomlyGenerateAsymmetricKeyPairArkTS'; + + 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.rsa_promise')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa/Promise') + }) + Button($r('app.string.rsa_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/rsa/Sync') + }) + Button($r('app.string.sm2_promise')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm2/Promise') + }) + 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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Promise.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Promise.ets new file mode 100644 index 0000000000..7c8b11a245 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Promise.ets @@ -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. + */ + +// [Start generate_rsa_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function generateAsyKey() { + // 创建一个AsyKeyGenerator实例 + let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2'); + // 使用密钥生成器随机生成非对称密钥对 + let keyGenPromise = rsaGenerator.generateKeyPair(); + keyGenPromise.then(keyPair => { + let pubKey = keyPair.pubKey; + let priKey = keyPair.priKey; + // 获取非对称密钥对的二进制数据 + let pkBlob = pubKey.getEncoded(); + let skBlob = priKey.getEncoded(); + console.info('pk bin data' + pkBlob.data); + console.info('sk bin data' + skBlob.data); + }); +} +// [End generate_rsa_keypair] + +@Entry +@Component +struct Index { + @State message: string = 'RSA Promise'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_rsa_promise')) + .width('70%') + .onClick(() => { + try { + generateAsyKey(); + this.message = 'RSA Promise Success'; + } catch { + this.message = 'RSA Promise Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/Sync.ets new file mode 100644 index 0000000000..551fb3e5bd --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/rsa/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 generate_rsa_keypair_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function generateAsyKeySync() { + // 创建一个AsyKeyGenerator实例 + let rsaGenerator = cryptoFramework.createAsyKeyGenerator('RSA1024|PRIMES_2'); + // 使用密钥生成器随机生成非对称密钥对 + try { + let keyPair = rsaGenerator.generateKeyPairSync(); + if (keyPair != null) { + let pubKey = keyPair.pubKey; + let priKey = keyPair.priKey; + // 获取非对称密钥对的二进制数据 + let pkBlob = pubKey.getEncoded(); + let skBlob = priKey.getEncoded(); + console.info('pk bin data' + pkBlob.data); + console.info('sk bin data' + skBlob.data); + } else { + console.error('[Sync]: get key pair result fail!'); + } + } catch (e) { + console.error(`get key pair failed, ${e.code}, ${e.message}`); + } +} +// [End generate_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 { + generateAsyKeySync(); + 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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Promise.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Promise.ets new file mode 100644 index 0000000000..b687356048 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Promise.ets @@ -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. + */ + +// [Start generate_sm2_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function generateSM2Key() { + // 创建一个AsyKeyGenerator实例 + let sm2Generator = cryptoFramework.createAsyKeyGenerator('SM2_256'); + // 使用密钥生成器随机生成非对称密钥对 + let keyGenPromise = sm2Generator.generateKeyPair(); + keyGenPromise.then(keyPair => { + let pubKey = keyPair.pubKey; + let priKey = keyPair.priKey; + // 获取非对称密钥对的二进制数据 + let pkBlob = pubKey.getEncoded(); + let skBlob = priKey.getEncoded(); + console.info('pk bin data' + pkBlob.data); + console.info('sk bin data' + skBlob.data); + }); +} +// [End generate_sm2_keypair] + +@Entry +@Component +struct Index { + @State message: string = 'SM2 Promise'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm2_promise')) + .width('70%') + .onClick(() => { + try { + generateSM2Key(); + this.message = 'SM2 Promise Success'; + } catch { + this.message = 'SM2 Promise Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/Sync.ets new file mode 100644 index 0000000000..5129a8fb8d --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/ets/pages/sm2/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 generate_sm2_keypair_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function generateSM2KeySync() { + // 创建一个AsyKeyGenerator实例 + let rsaGenerator = cryptoFramework.createAsyKeyGenerator('SM2_256'); + // 使用密钥生成器随机生成非对称密钥对 + try { + let keyPair = rsaGenerator.generateKeyPairSync(); + if (keyPair != null) { + let pubKey = keyPair.pubKey; + let priKey = keyPair.priKey; + // 获取非对称密钥对的二进制数据 + let pkBlob = pubKey.getEncoded(); + let skBlob = priKey.getEncoded(); + console.info('pk bin data' + pkBlob.data); + console.info('sk bin data' + skBlob.data); + } else { + console.error('[Sync]: get key pair result fail!'); + } + } catch (e) { + console.error(`get key pair failed, ${e.code}, ${e.message}`); + } +} +// [End generate_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 { + generateSM2KeySync(); + 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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/module.json5 new file mode 100644 index 0000000000..4144486d1a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000..3c712962da --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000..0fa63bbb44 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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": "RandomlyGenerateAsymmetricKeyPairArkTS" + }, + { + "name": "rsa_promise", + "value": "RSA Promise" + }, + { + "name": "rsa_sync", + "value": "RSA Sync" + }, + { + "name": "sm2_promise", + "value": "SM2 Promise" + }, + { + "name": "sm2_sync", + "value": "SM2 Sync" + }, + { + "name": "call_rsa_promise", + "value": "Call RSA Promise" + }, + { + "name": "call_rsa_sync", + "value": "Call RSA Sync" + }, + { + "name": "call_sm2_promise", + "value": "Call SM2 Promise" + }, + { + "name": "call_sm2_sync", + "value": "Call SM2 Sync" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000..78f40ae7c4 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000..a2b5f0d7de --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,9 @@ +{ + "src": [ + "pages/Index", + "pages/sm2/Sync", + "pages/sm2/Promise", + "pages/rsa/Sync", + "pages/rsa/Promise" + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000..79b11c2747 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000..0f8ce9a2c0 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000..b1e1fa0140 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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 randomlyGenerateAsymmetricKeyPairArkTSTest from './RandomlyGenerateAsymmetricKeyPairArkTS.test'; + +export default function testsuite() { + abilityTest(); + randomlyGenerateAsymmetricKeyPairArkTSTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/RandomlyGenerateAsymmetricKeyPairArkTS.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/RandomlyGenerateAsymmetricKeyPairArkTS.test.ets new file mode 100644 index 0000000000..5a8cdfe785 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/ets/test/RandomlyGenerateAsymmetricKeyPairArkTS.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 randomlyGenerateAsymmetricKeyPairArkTSTest() { + describe('randomlyGenerateAsymmetricKeyPairArkTSTest', () => { + /** + * 打开应用 + */ + 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 Promise方式) + */ + it('testRandomlyGenerateAsymmetricKeyPairArkTS001', 0, async () => { + console.info('uitest: testRandomlyGenerateAsymmetricKeyPairArkTS001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('RSA Promise')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call RSA Promise')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('RSA Promise Success')); + console.info('uitest: testRandomlyGenerateAsymmetricKeyPairArkTS001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,随机生成非对称密钥对(RSA 同步方式) + */ + it('testRandomlyGenerateAsymmetricKeyPairArkTS002', 0, async () => { + console.info('uitest: testRandomlyGenerateAsymmetricKeyPairArkTS002 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: testRandomlyGenerateAsymmetricKeyPairArkTS002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,随机生成非对称密钥对(SM2 Promise方式) + */ + it('testRandomlyGenerateAsymmetricKeyPairArkTS003', 0, async () => { + console.info('uitest: testRandomlyGenerateAsymmetricKeyPairArkTS003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SM2 Promise')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM2 Promise')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM2 Promise Success')); + console.info('uitest: testRandomlyGenerateAsymmetricKeyPairArkTS003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,随机生成非对称密钥对(SM2 同步方式) + */ + it('testRandomlyGenerateAsymmetricKeyPairArkTS004', 0, async () => { + console.info('uitest: testRandomlyGenerateAsymmetricKeyPairArkTS004 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: testRandomlyGenerateAsymmetricKeyPairArkTS004 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000000..c3fd9dda30 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/test/List.test.ets new file mode 100644 index 0000000000..f1186b1f53 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/entry/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000..7fc57c77db --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000..d584c19c24 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/hvigorfile.ts new file mode 100644 index 0000000000..2a5e543f19 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/oh-package.json5 new file mode 100644 index 0000000000..e41bae026a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/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/RandomlyGenerateAsymmetricKeyPairArkTS/ohosTest.md b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/ohosTest.md new file mode 100644 index 0000000000..acf17e91e4 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/ohosTest.md @@ -0,0 +1,11 @@ +# 随机生成非对称密钥对(ArkTS)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ----------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,随机生成非对称密钥对(RSA Promise方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,随机生成非对称密钥对(RSA 同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,随机生成非对称密钥对(SM2 Promise方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,随机生成非对称密钥对(SM2 同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/screenshots/RandomlyGenerateAsymmetricKeyPairArkTS1.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/screenshots/RandomlyGenerateAsymmetricKeyPairArkTS1.png new file mode 100644 index 0000000000000000000000000000000000000000..ec69835f93745ca8b5835a4cda80ec36de96c27f GIT binary patch literal 51998 zcmbq)XIxWFw=a)AqDb)p1q2nO1f)yvASHo>X6RjMq4y>rSm>REKnzt%Xd(0@bd=tE z4@GIxkuC^$dC%{j`+Lua_k6jtKkPDV&nmO_f34Xw^Jn_cH?n^qATWsRufNF1{<=QM z{*cI2uJ8W;%D)=<|7+p;?LS}0Xz$zv|FwDZFLtsUw13^C{p(LV8SB5q{QJhuYf=BZ zP~5nE=k8yWH~+pxeobKV4;k65n>TLUBELgHdE+Me?Q8lQf8V;kxI;_FMsZ(Q3H5*p zY7C#Gf5^;kWaT*}qHp~nXJmY0|1JX~horJ@<=5{&fgn!q6fRLUb*~61J$rBekCBDf zO|x8E>94xVXUH-b}K=JpjYXPq7EoiS<|BLf2N?P)pw{Kk&UDyA8i`4*>nMQB>zSyS zgrwScal?cIK@O8gThDlOa$K>v3XA@SBF)9&(#gEe zgEC`8kGR(NQSD>fn>1?|YDJVh5x~|umZ6>#O$15{(*+w8PEXw0z}zhv=}pr&Fub=; zH|q9KF@I*~hAF+_N4gs3f-XXrTf?0?U(}oW_fm6BfIcGHi@FabvIYb8*P;F3ftn4M zH~vm|q1TRBaRRf7lDxJB$98t-h)4IHI5n9{CD+Fx5uAmt<1ky*EL&XdknJ8}wS|LY zy8CATO`4-@+{Jy|!)+ALNBcrp+LGD#PT9r@d6#B_;pDo@bSADrMwbWB=%7#g@}ew} zo;R{n9qQrL&skKf3$v@skL$m3_ZOW$Lrtp9Oh1xXdE|HZy{@y83n(9sM$KiP6@L|9n@ z4nI8#4`+I~Ihbd`m0n;lIg1xJaQRMw1%n)+Zc1IgJ0Y^JB$qGdm5`J+qTmS7G%U@4 zA%)wk0K<7Ao_fLMcvh?cfTO)2I=+6~=(r~nLh2`RN0w^}LeRR=nJPiB(}VfW8J8K& z1*0ZE@s?9vdK@3S#8Q?GGcFdJ0)O2r+?t~Gz??UCG#sMqBm#k~1>I3XbBl@yj%1kI zuM3TxcOetKIF3@6@B4hkH3@A=%)j&AD1T0352upWgd(EqzVRBeZ$d&wYiCsE z_Qf7ErI{-F(`rjksOoDN`JUH@#Z>@kX_?Rr9sQ>Qv2Kf4)Vt4+r2HpHklJ{V|2tud z>kj}tr+*`h6Yl1uJy*AD=DoeQH%B&?Q^@HEP9c=c7$re*>k$@f*nNWkjWg| zB2bsNCp(K{eLMfvLyHR*bBWV$oRCpUTg!+6*PM(i)LcDTB zO@?GEFJ5Boh8d# zwfyKrDUUvZF|yCv@PF}a&m=AhG|8sUFP1jtKL)S71y-i61ffKZP!q@RXsd2H4GP-zp}n`)%&)4B z-rs$HO|-zdGnBPDPg+*_aaZqMFlta*R?snn9ruh^Qtng;a~k>BcPOo0LSPy#}% zcfTH$)`UtG)pnM>QU|L`e;x>B(BgSwe~+c!BY*VsWW0z0WTHecQ$}4GiO2lyMBP9Z z{E{`3=$7uc6YDDPJonEOC*>fqhwJIeCk?HP(*mc9vACOGr9A0a1PW(* z78g0`Y2YCClOK^8>&paCg<+WQ#Puh>|Mg1(y3ZYo6V=|}czVx+{F!5msj2To{-jyh zml-z99$V<1xN+T+%xCB*OuN>7GzhmPUM$SgAyP4_&1UBS(gY>fp8j~eO_H`yD5yU` zcjzf=d{8wz)Qt`Mr5?|Hd0BjMrQa9r@Z%-YY&%H8wflC}O-4^b#nBl`RKaL$Qlb0E z?Quuw05`I<#BX5nk>!|{(Upq&+`s?{?l<>gqBLJu?aRRsB5lsmbX=u7s3O4Gl3}dW?$cHob0AA4G0D2_*>=d) zlb+#{EP6v5&izXCZp@Z8NgpX-Z~JsI$VJs2WvL2#I*yzkw*>~-uPeXQtrlfp{X<5% z!=hwcVVU!DFn@b;hLU_`OOeN9qzCN_mD~^Lg?HS!(rSFWA{Sa4QAHUt5qeZt z@{tqG&G#nxiv7n-f88PJ;w-o^oZZbLBrC#VIqBh8$rH2J)Q^qfXOhqvK~cu(swqlJ zh=P~0$Wn$`LyS^JM*5pcxM3-Ehp>rrY$P%WI`#Dr+3o85?(wreeFGryRjlP|Xrn7O zaEGwUtYtQ(`q-f3mS7LaWz}l!(=Z|q?%Y*%k+~)Lzt-kEA> zyuEN!K5A&#EYTFNr!>aN#L67~2oAqk7Rw^Jz|735>K3|<>;{_KOrvhOMMY)A!6X?x?zy(T*EM=EeV|e;q}E-qO*hpBS@L+#4`6G zf!`p*NFfq<9!I0^BmV_tQx zA|mpU-bZ_M5J)-JrK)?cwmJAJ9k@*PmwFNl;IL4yq7I8bVI;K(L?YizW`C+$v&EfG z|I&=QBscHw8wG(Z8c+`AQN5RTSJo-;G|gDYR29{EiOux9Hm$U-4W*oNDtlL3UrU+T z`XN@3*0-X#-Zk7q>=3(dwljlnh1au4pNlQk&n5Z+FY?Xv)AbBwdh+v<7FYIXjo2(r ze+@~sv6|N&s-sQM&m4boqwpDroBCF-=G zHSkcOBtm6fC@=Qu7Z?pPjk)1#CAclHs>chzjqDyWMhROQK56r`#rJfJ=QzxHA2Q_4 zj-VcxmD~+kVEFEC*+>dX|I^d(e z4KkMS{rwZzgL!D4N8z_g&N9H4g`_kpUm*F{^u}-X+AD)HVr>oW!3~`vG`Mpg-U$_# z@~K3~+S^uXv%GUgt%su{Jy7P6F8Z>E8iK1TY5rpIq=1+2t>SE$&8Y##VhM>?9u}VB zWv2L9!$N~t{|xb2HlCs)m=RE$m@gJ7iRo-&n65q#{#g5Ju;1CwUw)ZMqk*mB%1;^< zPvq~cBHonTKM>iEv7@vYBc))fW^YjSuEfOESqPh<9eS9lCw#6xpVO9q%FtPrAS4L~ zhq^g2=$-8)@H`3SyM5nwIDo~~Vu5U-1_NnKbSG@c7nrP~s1k{Lj^3}%f7i%> za(o!e`*bM8;C)h~{%p&?v#E*5&z*pO3@4`E7{IhMz_RA~GT&WDG4zmfrBW=9@wiOE z_X*zL^i`EIYJs}=7Q|ur*~ssR=dQs5->{R)ea@GHrFEk!ocofGqmWgc^USkrPKwQysYV2UzBM58DAlpyazrSAHVs;83j^bE zS$#j;ZnB;;;omuL+<%eD$z0Z*bWaOYT(mZ7X9xAl4$pTZm9Q`{kdLaIM)MY1Xngc- zx?NrZEh_re>qQga6gbX1%2=h5zg0j<^KH(1^j3O>WtMG?b8u6&J-~&}w5IKCqJ#BC zIQ!SkY%gA|Bb$q!;c6Pm|?jYa66M2wpDX7T~&QS95qr63W_YUENoi7vTn&0DC zLrAH!g(KYJPbWD<2|$;ji^IA#?W%hH<44Y$LMm_CKnw~}J*g)(9*Z$%;JJpG*r>7_D60;)7T?J)KIL#rma z0cW8{GKHQ-J$(McH=}Wn?OA#=17^T5;IoZwEE?^&bwi>X;Slr0+ASth`pyn5bxCtC zRrm-Ajk8S3iiz!`F)lB26<=SzJ=`H#riN_bcc^<7{`Kp^Kb3=a0wx*}GP`L(Qo6Km zEWC?EmTIRp@LNbh>M;-3`bM=n^ZTxO(X_dV;E}|;tU5D6)Mlw6(#^&5hO+J2+7<3$ za+qA#H@{OlmMO;thwGkU=9&m!@j$$e{=Pm|R0c_xi+JLK2F6!$GEFBMXDFo}u*++# zru0|Iw{9kL_V7v?44Rjz0<8sBL*{Cu)?4t0NPORL+vp<|`Pr9-30`AOZBJqkWFJ{H zeCn2FUT+lG#ARmK1u*f(v7!)tYT!zh65K|e9jE~k#T&zEAuIcesaoaJP)-b2KzNL) z)VKm&`+;X;_hs$07 zA54{~#f&RregNsydbNH4diU9}nYq6*jz1&2V4i|zTBgpC2 zT!voc&~m!@q>XIaBZvu4Gjlf(XyETpO0KVVMNC%OJHvleo$}+X zOq`v)dqs7VW-OcpbVWFti11QPE-1NjZWuNO_|;*f#kJk@^W&+U};oh%yFJQ}i-MFr11hLL4?^e91A} zP{Urmrdy0G=M+uop{3e$=o2JonX~upzPRORUX$JSR@?xa>M@++G_3W^cv^k-xsMHv z(y>#W=SAkWa6r$uxt=nr@j}rVBLkwd!}?Z9V02wdP@HhG8pE7dnp80)K2TV93cyq* z5uXsxz4Q5L1~$Gyy$$0)TJOqV&K;72nf2v0cUK$(F>|XvxreA$M&C9@H=P*-J+FRg z>VPBI!Y|V_HlmPCmqx~G;nOG0?I(9;B@K$9nkF(i6s`hNM<7FlFDF7&{Jv@)fVMQc z!#G+kOEuW8Mb;Tyo11i?@1PcEiYW~d=0w;UHf;y1wI9^}HoY^Rt+Fy%eGmd3J>l$= z3KAP!;#>Mr$1!h4BOJl^zOuB4AW6Npd!r+?_C6)^F0=+HdF)Ui06pe>RO`>GEmE3% z>gJ-dkcJDi+Y%CRO1>>Ke4_ZpxY^13n;c`R7r&|aJ%lTzPWbqE9*DQmDq9BbPdjO3 zJxeDXO1uZPz|<~$_g9WJd7M025GFoVB=4~@;IV~evc8mVU#NfEQ1RFeP`P_&E51Tszw%1DA;(xzUp|Qml59Upo%x?8qhYhiq)zA2^Bd zZPA6TAiN{RokO&jOSqlC^h|2lSRDTKW>C%izUNP>-q1;gtuBUDLjyhq_lGCDw)tHn z*);=GT1KYFrr^VJKsy|c=6iXe+h1xlYjz&avq7N}7*-$ttsETiy~`$7iv%Jy3L&SmVV>il;xZi@`q`IV%dd$Qj0o#(8iFz9$@I!q>`n zz`*YTvWEQ~(*qq}eP72WSU2Ulzhb1anDS_?OUCa-n+mX{nIn1*fPi@!U)E~Bt7E4z zwe!fH;OA)+6XNiM5uuOIQ$C2^Oct7$_v5&?HXfU@N{@&6wP$wso_t!yc&qrjvALcZ zit#CGq)dJ;NI>YLRo8}R*zzFJuN`#e#!KjHL2F*&Tt*R-edX}m-o z6K6`u;byZrIfHEi3ik@Oy5?)r4ob}Z4Gjd3`{mhr z64fOB+PL2;UA33m;Q6RO)OY&ivMbyU1Iu6eq|~e1$lB4QFBVK8R+)-n0t=&_-04O$ z5Pc}KxLSWY+vM>XNo(Z3yY>359p>#lCntrhqSuEKrX8~$$rbzI;Xn+(38FNRs7FMF z4^cYTHt>L&tDgR#y)6#V#>V)h+ybw7b3(O1FE3QMMyz%30aE&j=!?@9gWgV6+dCU~ zWd$I*t`#HL;MBTHKyaNqQ=5x@!l(68;WRvB$oF|M1xNA3*Md!Q-~9Y}1vY*gf>yJf ze)Njq_B_lhJe*`fJ>mwbAKWe*ilYmW#gfUf5TwBE>D|3PC}^(HcI6&oOLdMm?1 zyk2SCufoT&i*cjiMahESiDu1SL(EsK7qNyG;VNaUQ6SKf5gSgLUN68qYHOLHxTpW>n?Om zZzse2YEj%+5w`fHR5Q)$ry5-P2R|G}X}dkho0xc3 z;L1FI;j=jU)&J|{R zHt)@^d7BG+MX8D?B4B(45sCP_RIl*o|@@Vwmq~-vwB{Y z^+?XLylGWK_Q6$jDopj6n#`zCQRD+6i(ZWA^{`J3_x3bvfstsDFO-{}-~4N0A{b~D ztSZt8t=rN##HY;>Edj_vo>&oqbc^jiQ^xR$jmEfTuh+e$2KNL4K!!CwvEZn#%7_Jw zQR&02SH%yp%ci@&^P{Uy3lFT;#O904?dc1GbTh^Rh4MWk*wVR@QSwqH3DG+$krAGD zuc+sM@4iiNSYF6L$_>(eUZVL_G-r3JYGg}gY8zfK+l_S=`re6{{=u+3FE_C4theKeh{L1q)Hp&UW3K1vnR2Ut29BKBEFLOyZ zFLoaUppDN-#YoO?2N~@?iiel|T8xaMZ~XQ_1r*Uy>AvifTQnaaW`wV34&(l|tv`GFpJ^lI8TxLWWUkURcvNmF#Vpv70I@U!OQH2XS zpSbd#$V3T6u5i2-lyytKi(jTS)jIs$%rma|^1R1U6nx1$YdCU(tqHcb>KFCsBF%*F z^b{61j_@V!#Zrn{n|;)_R5-0PaII)@E}MX-+5F{VQPI=GaH!tPQ@@+)jW_O|a_~$& z1O>C6S0`<-wAUBMj#xB}b0!NA2Q?3+$J>Rva zN&aN_JkPmvG`?7{732imxr^Ju)DGk4i3K9vPT_wJHL8D{Or2z9`n~cW#*1*{G?+2DM zDkgO|wl%Y);_wBpi{vX&x+K@QZ>~2owq<`8L?K30+o}8VA-&jQtf|(tjP-bMrSB`;r#V0Ql0MdDV~TzY13b)g z3fMumWL13!YpNt>UcA$n)!L%2QW+(>yt(q*-zl)tQ z++^pE8$@^>r}ZfCiLQZZ$rf z^^IfCd@+aU{RAAhSCxnuU#}%yZ?f0s_Zk7`knv_mje-wi85Vta2QlQw52eIXUpQ># zw;7^bB*B7DC#bQpOUJS~bIw64cO*|-G(&@AzVn65HDp#}cw6&lH=E;KMQ>59#YPw` z@%FwLI2MP4a5Rm35pPEoKJSI3?J#f7PIoQd-8iM+I9aPaAb(*nWLtCPJ};DK@rs+E72O$Qw?`2924g0F6Sja=vqYA;~aI$iXVkVF$4prm2&Hr9R7Vra#>X zI@?MtVZUmy+m`XrWKRI#rwrYuWQL0MJ{S7e_|^}X=wtO4*_xD#4EG+6rE9^{C`|Z7 zEUVP}L}h6i7pAw>LS`D1FNBY65qzi^yNc?e>L0aVCohGY_^OyCYw$adB93;)v`@6g zV>zDTNY068T}if6Z{%XUWnJ1HO!)h)mi8pqY8VK@x!IS($CM2X26#Yx5>$JaBcoHJ zjL{+mh{FW8ug19p!&g;84;#F`;Ft0jv{z%br|WrD=!w#Pb7FJE1mN@mg9T&!9lX+H z!aJIgZQU#Kq$OXKt=6M}&CBu^0v7jc+r?>%)21}z5T4Ptk6-)B!3T5s7NZu93WIpR zfG6>cs}qnEl3r-31W!RBr_bGGpO5QC2GT?|d1m8k2J6Hh+AqeAcfw%RRP?e_EH4B{ z6KeJkjb#xf0Q=o_b+fQ^&6lOKdCo9pJJN(C&~SWi)QBDuw=~y>c4@R@sC?FscQGv_ zbojc@xDb;<_0wq&duJ*TCYgPLO_@`Bht8rHm6!U*Sg&;(wdBCpomIb5hh4o^<7P@U zdYT%XxU{wnnw}316XXh9f$fQqYS1~*)RZ&3}yU!aoI41>(^@{lA zSX?c&V)Zyfn)N|Sc8Rq5sXL2}bAxu`HdXa~?^nilV@zkffgHZ#1bV!%kJk#0W@CHQ-z9Fi{GfMm{#@n1K=+UVTnq>*U6P*s(ai?%^@0la? zV|EOL`zOzFl@R5OYOX`Rf`#w3Pt8@58P`KdA~n9b7mZC%x9EEMm~}@N;tybjrJAS& z9MkG z67cj8%9Og?MEFq?GdZiuwO7msNnLZSG`USQCQP@K_dk!#iMg6ulNx3&FTN8;Wh!6! zoZ)l1+>14Y-Mk%&NpP{wjRz)Bw&wVDR@#F%-Q82qE7j3$34cpOi(4SB-%>kK%jJl$ zbuL5$d&bA1^=40-N{E-Cz_QM6c~|F0@cE}6OTK0`7G?JDewx$34tZxcH9&ui0cgoe zfOAb*9r0)7)c=;lV~ArByd72WU7Uwfu(-U6hgz)g!Rn}O zuE@AtIUMcGa6R8vHCU6=rmWCkB?6|Mmyk`V-rg2Epsmguglp(gEo-CZ&H}77C9RY; z(xKXU#cJQN(oNyg$TCOL=uVZuENVQ>yoskc8r^QT4ZI=ag ztT+~rF4_1)_R{OqJuPoj$HB4T(ZtFN{+%G$?+Q}tr>HakxCPq|`rv&6k&)8&B+2s$y$CB+77hkR=+bC`@O+J#7vh_j6;W*qJ&DUg9r zWw1QsH>Xw9upghfX&iS|bm*AB5`~CN<@(aI)&?>$J&YExL3a(Aea#O4>W53APEjSB zb1@L}s#-pSC5-Or!SwI+Ku?{gOIBBexFa6){t#qJovZNR>QT63jQ35o(x13XZs~+F z$U*$-5B4d!iInEn)wFuoO|PVFIPh3{T1r*QQHh^g9Wn*MqrT4mGclybt$y6+=Scau zzE_?#Ez)mb;bq109^Z|bfbjVqDGqKAVaDSPC)q4nF5QOcZkZFTWU;S3SbbJVS1)Ot zMGm)GvkVJ!VqbUK1kk6HAUOJb38d174VTnNtv1t)?jC?kRDU;-<$`Euy~V(?x`CQ> z3(gv+Q5}8U8ME(3^<`8PDltJUiu>?*Ou#;n(8pbMZ*%r%Vwr4!0i)-rz5bGw2^3~w zQ?%CQquwo8Wj6m7Gp3aZ&kugI^@G8ff%hkV40VrYi@h@$c4fIyC8&NDwd8BrT01?U zCXqwyX;vwUXUose!@TUQiO)jmo8#Ix4JuAVbBFZL#hbiC6slz;#3n|cBzVb>2}y=l z?W)$gyy1&|IEEOVs{uEmt;ADbj-7Jvhy ziGd4Dt}pHH(~{2sC_L|q(F$;ZY?CJ-@xY*zxc)=-Ave(LnZ|~+IX&k}tp3;%6KW1& zP^oGQu7mG1@1MCEIsYLOem*%F;p3YRd2rl+jarrJPq3eoae+269 z5XeaH)8^WTyKREH#*nPKR%^MEOeDc0W4`#9|xa? zZ^B@^+z(%Q)2}&J#kt$gYki-eia6jj@;Sir3Tery=?^$FMP6j`^S!g3Db2(6&&wL_ zW>l4K-Bgp3(9Rt*h?Tu}pOjQ_%2#_Hmcpg{K{N{gdYN-WALvh?aOAV^W}#)k8(@;_ zmPm!MKT17{v(Hr9I2jI#IJBD=l@Hx@uIuD!858;$f6OQ1Zj-~LZH@xufA3dGyKSL2 z{L`T4LDKjJ-LRvK)}(d%_UGf~j)5&&;{o#}gBqf7qB|`)34us?R+UQ+67)qmEo(FQ7KLmKVQN+6Z|~Il6a=hdG0G zvV8`yHRJf#oHM30nDoZfm=Y1D>)GC>qaAe3p^-r~vp{d{JNcD|rNLe#X0OIstra;Q z9%<8$ruf>D_W5c@jUwH*^@)#K@&GKW&;tQSS=(a){VVfx1D|Y^uWSxg-ut5g0IQ>A zHNC6Rh~GKjnaRGSDnAv82Q158io4-3$tF7fOm~x~sdSW$^l7aUp~JD9S?jB2E{n|* zH9j-F57w&81`3LfR+rv_3y&UP_88NJRXf%DupfgStbMO{<~h2!>uh@2D=*Jx`Ksjoo z(AIrYV5UaBVPX=}K&Dx{lO2Vc${)-W4y(Vt!L;GO!9pW6e{R>7xTu&8UbZyI&;tY`tgz zAy=vBIAO+&gMVl0DC_O>APm=n-KgiNlJz<{%c+f{&CYWxs#v5*I0?W943h(yGz&OU z^LKYW({ggf+!btWmdWGl$Qg&5yLR{yK5Jei;0%7)zc9oUh>|BdzkdAQmL%Y?wwuz* zsKqVF(_FfFL;fh^B>JkLY|UWKw~h@`fV!poI~BJbDxfF3*YeXa{kF!UQ& zgaBjx%<9AYnM$_mjZF+gUfUR?5FJ`_CsuEG3MFz2KD@>lksWy6}zb*%oEq!DS|E99HrU~D&ab= z%j%f>>9fMYnVVzJ+eND5)usyjfa$vUB=zdo}Ci;8M6CX{* z?->#L0i7p5^4AuezQ&+cE#N;r2hG%b*&F=z7Xe~9G|yAyM#m8jqwzp)*~}#SYFS!1 zDPkauljN&KmjoQ-frxTc(&Mk!mz)uHPI_CFD^r=8@WOc+*~OMgmlBT3Dl(RDynfaR z_emI=j-@y5H_N%&4QkE`Pu)86{6i*VpX|@^9nhN_db^a?MH&lA(?w^8If{2EuIz6V zYNPMJAS^(-A5u~*8eRA~cejvRo`!H%mIW;ddkB7ZYQ?3HcSZe@Tlh2S*IWUc%S;Wxo&=YME#`0L>6cHJ`QQ<{Rjg*ogw^bO7SDcboTfV9+yu=&Z1y zCrOPfzO%*4!9yTE<=mw#vpQDO+I@zCzr0uW>35YhqrUuC9%r3gW#+=K_h2>;)z$T; zC37Z)^42SW$9_kFbs2?Li_$E*PJhUVWzh{E@m-D|2>4S&z5`;E{_9NGHh&C)h`l`Cdg z*fG=D7XgdD^JULdgQho~qAyP#ct+=;@WA~^B&Et&ivH~UH0Yq`f19P-5+BQ1tz zXxd_6-OiAW>G&&CWN?Z6=64Q~k1K)X0S}b+I*)}1N{X<&q}E-Y@&10%BvM1ma@aEP zhis_Ow-KO?W^xG?v?C6%vriK^R?G>4W~Yp7%Efw6CY~k$Z84vS3|K@QpjuPZ-Q5?> z2Qf_EfkYwAm}nDiZ|W1x8>r5^uV?4Rp33gZzMVSyL$>lpJ?WzeuLEf9dU-RQD$KsF z=tN}AX|Dgb=8)%-0R%AXAXGF8tlL|kJKbG`pVB6_uVh3zT5oBGoVN%*B!LJjRQqxw$A!YH^+-&wAP`8x(#VtDuE9+4Y68xCy0hkQZtaBsc?c%+dqp> zOkC&nG1|Xtmq+-5v@>N&WOQt-<_)maE>*=*NWR6(g2O}@jbagzcnefekI$MLy3adPPpX4qF#&Zx+JEue*r zhU&3MG*xgq~tyH3GIj`>7U?M}iZ62>Jj$lLqN4pay z9sr5I#$PSSpK-Y5&i#`0Ur`qrx=^e0HuAelP$@5QH?ME2&C-7dC^0`-sGr0zKRxiB za>a{6_v$K%`8E#$z+asDrqBZ9Hn>2oE-@aMWE%! z^eap8Z=_LWw5zV?E{&a&vQ|41GK)abOo3T}93n!@odKCq{jsml!mnOE6vvdpKX{6a zYH)s@OVP10;XdtzIakFBG3pam0v>J);3keCS{&eK-BD4g`e)2_7b^fK9mlKji0)5P zq>aKhT1!S8Sq&Ax*;kIUrsico+A$9t-Bj#)jM{tl)*bJ;rBU>U?6KFY#@xdY>iMUH zTwSr)P~F`A#2mvR{R{KneWLx`D@A(qmggTw)eZkDPt)ukw=5oWDX;Cm&_eGHCG@$U zCh$KJeK0K%B3i-rkmRQo?bbef(s)zM10NF}?x=+ff&|01Op9OUXI0@<44fvkF-}+u zNG$Yf;V6atwaYt0U(bx~DSMX<9A)X~y<2}D}H>-=rRQd6I}-v#*H%lhw< zhyHYPyaj><0>94o$`)JPtt<7P5Uo3MIc)KNT~rtHosyP;tQ>9}6;*=Vj_sIPa%(9t z+!lro%SXkaY3bCXqUEF4fJ8y?)ds_g+DyetifYS6S#XQ^<10t*?7<(0>d7Zw+fM>o z{+;LlwARO;F3U@#d^u*AU(2k)K<6v0>#WfqvTte=zr%(O?*9X~vp&{FryL96n-$U< zs3cqob7HZ+Y5j;ayZQmuY7>I zc*MtEDYxIQR@C2UI1Wq#p0-sC#U%XxLuSxY7%qF_O6q8_7phLeKyqyzXW{uhs*YlL zHcJ4ysP0n%Bm~MAqSkI3T-aji{~t|{_~~kMFmtWA#XH9-Inqwt+ZWdc=P!T1PqAX= zWHAc-HR}q0AP>0ni#mM4a}33?baL6~Bjq*oA-eY?HOD!K%b+?qckhGy2{ z0*n33c6515P&gpj(8$<=fD;JKsCZ6wlC?k-fqhLCNSN<9zWxvY?;WWiIa_;-8Gn}` zEwu1bhEvwNkooL-_xfe!+Yh=)DKEyR-%}3a{$;PFswR^bI3Xry6em*?v&ni$}9co*?H@K^hTRyJ4)KP+cA4 z?0nPw&#YH(lsFOmH>2)O)}0q?)hG1uWkFvmUU1~A$YF8L2`TXFrl&hKY0Zda2;gGhiuIs zxx_v*7(lzP&o|Af2EY3B;_x^$O3-g;0^**&=GHQD?Tv8WXqMFp+8x3Q(!DZk&1~O~ z>5x?Iv6NSreQbuchW^a+W*3Nx`$d$Gg}cwm9ESYI-ewGSW)1rOZGP&vcHP?I{{QuU zEB=-hO_giqhD5*p`m}w$WN*mL=ahp(5WHeH9bDL7=e>KB$n=Esib7Y%pYwAA9e9_0 zwH2A)K!9jeL`7Og{%_E-e1NZs4ppzZ#?(Q^p*+7+KMKKDwQ3+AfC zfgg&lAz25Z&ya5?W^FOF*#bQf!8VbbGUOnT{)sq1t@0^RS3R2R?T|M+#7|-LyFde_ zTjSz?G%>50Gb_tH+qb!s%ff4P`9-|6Oue!CJFNVj@td#{TVEM_^!N;mk?{0u)fpa6 z&Lnj(Er3(M=Nd|^IZ^*g=hy{etw|M;oLb%e-3ZXz{yr>+==R*n&I*upjWdh?F_z>U z6Fg6wS*YiKWqM!ZCd1C|9^#s>*B`Q^O7cBkJ^#(KERXHy5Hrr9uwu@5JE%GQu!IwV zEIJW%;$-6iu&jY0y5Xh&uQpqo_&Dscw9{>duIcUFBJcNYMx|Pn?(<1TXw}RP z);FDCv%^=^0vlgCBnu6E|5*t0dMv6M>{Ld*DYp0T-@3}b!!W(%xA{>@r%4dJ!b@}K zSBlFe?pn~J3XFO4&%jaebzXp`zkc$dAf#%)J;^MmKp$oU>?{=*KDk(!ZsmVN2s3#iO?Wh zy20OAtlb>gY|ok(wJi!Iiipg{H2X7jBGI0no@sTc@19K9kOiU4S*hj1=HI%D+49LP z3JX`4vF|E;*Dn4&QOenGp6J2}=3RL9gdBYMB~kO!?{3a|7;C|Dt#T|i4&IjJzxbe|2%vWAtEYIuxPD$ zM!eeW0q;Ve5f|BnxgiAvPyJGFV^-FXylee zLim{y>T%>XwU#n?o)F`yWRq5z5E48!nnBIv>ZoCtwvitDrwhzDxJvuQcJ#ykyR5z7u_x;8Io6=+HzUQ;oMOVW%1VZZ#cEh6H*Lw|NqQSYTy$r?nnhMT zTgtqk*rsl7cX#PCEg9Pv!+JdZ%#ULQ)(R;{naW`~_cD=O*)9O%a`Xn)@IR5(v* z7n)yBIQHDx`z8YYwz;v-T#xi*Az@2&Xs;+ze>DFX;883Z%{pL%0s#HRa3*-_h7#@e zTiH`I>RTa^7_Ru8ZS^m%uq@LS@E-D;DXyL4p1Xhb&+2R`by^kxEX53bF5tq5(miQ9}XriG0^dY3v)! z-?rwLve#f!^xvDkug@NN({Y!7+i$b23*vPF=!S9Ia!Nw z@^Mh|2XI=n&a+%zr^;*BL+px6o^?qz{di`FHgc;N8>;+V=;!{lO*76i3z!dRp;(_4 zn%Yps5->p=l=Y|UHFLnf49k%rA6*bHUY=*Oj#Gjr5g%MydOs&grY;MA1_f(Ltj zX=q{yh?<;gPG)2tUs{>3*A8cX;-=8i+N;mHc6EDosG07j&?J_6b%FhMH+BBm!JuWzb6J$c8@>U4Lew#-NzO{x%Oyjh|(zLw|krbpUe%pnI1 z!Ros{m>`7>16X=Ziwl3Sa*(XPfBJ|fEdIScQb=rOB2{Pq>&82>T~?`?xnH7)6XQq(Y*EUzLWuM1B>^c2aW=kIdg-1RDP9km@B?t%%n z{9HrszM`fZS#R8A9KDv6mo&Lk_e?( z(D@K2gljcPX+>sn8^Y4%Z8@PMy7s<@EFdN{2a45yu#}{Qc8Ae^*^jp+sh8iO9ED^m ziyg(u$)j1uVlavwpM~l5dd|)-a(ut(LdQ&J8#Nf(It0I@p2ky^M15}84*R-eElt%O zZzez3j6e&fB)CE}oEbihtp@mbZZ9RUr3pKGP16XIPEM+6e%E$g>UL8m?05To+@5Sb zQSOEur4w}Q7+9k&e!f7{T-+kW(_w@diF8p7)B;JbIJ`!R6+H@A+B=hh>$Hf(KN_=i z4x&7F{CGhTMz!tfBlfYbiq+>^DJOi)dITZ1z8P2E&7e5e$@p|437vhJD#dO2^!fL9P{mLRg@^&YT^tMi%1f)PRaUq&w zv#~zUDuxKx!)N85;UmtP3aXi$`6IDtOjlS~D6?SWTX^o3nrWEpXhBC+YhHyN7acER z6uBTIw>YZt=mj9B1-entB>;E0$-WY^t|ikoDu%dM_|AddRlvO9ndMD++r!oB)Z7?ZffEFz^%e3W+5)iA85$cAjB}n*uolZD`s}>3WEw`3XRYTiWBDnT zRD`tvt^D6n-0O|BfuK;WWYIAP653z0g>U;v$Kk^dTnv(w*KeEmn(nb{_J}-ylBY2N z-WNsr&pUAwW+nvk(pJ5tjCPwXjO=C2&8?UrR2yGs`np;4PQyYSdAuWis(E&#QI4z6 z@m1Mn9hr{$-O(V7{q6Kp!NH`G6xOG=&!@XRLXzJ%#tDNt;dUBS9B=4&rzg5|Gxk;HJ}mKRsy7yMDc_o;^0M*cjWx?c-QJ#>t>#|m z0{xx7urDCOjBi-qF{_O()eOEg z@!D~R=~@18QVhPO>@3@w)p4fR=UCFB+Rp;GR*SY}z0EEyvKpb;Y-Br=XU}}QbXX2- zWa9nq=8d8LR{N#lw93pR1+Xs9Ty+M>H$!nywwNcyAL_zIL$MK)qH$BGQeu)@$kKqm zwZ)^%@Wlqtd%^x;Es}UL6whp__41SZNrR~z$z|(x%lVq{x_VVI@<)~V^1qZ9aRZ>T z{x++1%SesYk{HR`8ijmnc2r|xP=rw+*4;dd^L{E%G+XtJ8~tQmQ&@?6=}_o`*tA_I zz`HnM##jdA6)+d*U?{LTtolw3DXvzNn>Wr_cD|HrgMhA0%<{v`R|emv`7~Gdt;ma9 zF4QdK@=kY16?bpNvXNSMl-f_0WAC9-U~dM>n?6qCUAHOLE0J}xQ2Z|`;(3skpq_9* zN3@dnj$E5HBs=t?fe@jqrqg;>CY##KeWoA9T%@bIv9Yw&?Ua&o>xC6v%A}W4`g7Xl zrbs*m>{;_UD9X3a#zV#|5Wi=7jg+Gc z;K^UNRwn{!)YrF)bK3%^ZNB^rtxmw>u}x zs&+Mh5Lxi(x?VTuw_>gx!LkaIeHXPf2Z!mC$HWau-;zz98f~B+t%vCj_QPLMIj+Lboive)g zeaQqu0B;9EYJ$cZW6ZatOJp(#b#z~6ehZ!r&atza~z*6^GY5m*h=AuUAP~s=CsNT#bcSo zyI%}32HuB^q*+02WqCxYTTq34qEdygaJ*PHqV6Bid!=zH#jj?0(d zdmM7V{8U_G<8zhX_1A6=(f_oULq`1}(oTtN_xRjTYJ-wIj4;WpdKosXOFw-u(Tl3y zWtw)JiA0Ae+-Y{pJM z4P~hLV7kEZdu5Jp|7$Q%2U^^JfJkPPm5l~_0>rwN-(!3_onq2r(F^8+_YNOEW-gs#kwz|Alhn0Xe{<~)z# zmQcgB+IG*`z|Z|-vu30D9do@eSao6zQ(&sgmD*KKs=v|C2!y*HxX}8w<@m_xH$9rA zgW|;avX@p9jq2toiZ#~5yOcSV2ZuJfU~(-UBXQ+n@^Lnb5!3Ipfs1oO-2e~7yxsou zPD)x^G(cOT`yn7QC?B6E)-tD)fqTb&i#bQZauCj2|7=!y;CV38DrS=&cNhPWl@hCq ziS$bX9Vf<*f4h=OX#8zcSc{ql?YIbGAuKYL+vN{#5;hQRg};2>^(9&<5sjvyN!=}! zbz`obDeu~~w&_A;cMa!|O$%~#g*vM2D4hju`TR>Ml(_)fDg zh~_w%|L$vqsdr^sQeB@JZ1$Zq`F0%gFp0F1#m{bZa_fGO$LKLG8cbywbJZp- ziIwDVucf~d{V+2#H=Jy%@+hcxfEA-s59AxKEqWz;a2pvfY=Yc|jfTMq!zy-L8-FnE zactLdQ7dxH)}kke=`F_OmoWkoh;W2#mKbuHT7E&Fr;(o5g&S4cH{r)x1hm~0`UV-~j z+SR1cuTVaH?)HqwPof_Jnb~kENtLsCBjK4Yfzzy1btCwIz^4dh`GyQ22@WvOIbtMhOAVq!j|aAhd*9}+nns5t?0N@?Q1 z5(?=|obXRv7Y`r*?HE*kCAyiSrsF#-HS=uvJn~qpwSQ?n_S1jzkHthpYmdhaDuvHS6+==H}rn=dGzcuWjfK`{>AxrR$a_^lS%Q%?Pbf=3N z;&FE^4xigU>LIjuxUCRV&;il&jB~Lp0xF7yWE+p~tqC{Df*H5G9{M+{rdj zG|aW5WSb)qd^aD$m@0OEXbx!v;3*Qdm5%ED`8}Jg!#7N_LtqMXKj*|enTAn^KP~7n zEgcZW#?SMM)v?CC9FDvJt1)`%2@ll)WgxA~Sc;xol1iKsFS(-9N@P==EKTUcl*rLW>FVc}o=^QGnP)+)98cof^ zkX&s(^PcR{`6wK@_&V4tHWp zb%BDFeYk7V_6_3rQWA<~BH1K31Hqko06`&cPP-m7TQWdpd_J!;{P`-#HLb-|(W>KY zj9jJYo^*^tj7~39jek|FMLoWO0gePa0GZ~g5ZK2I?{j0pBHoalt8EX&h>r^c`ciKP9N6O)>2Pu@a%S3 zXx4WZjtx*m25s&f$c2zk3|K+rsN&MPnL66?@u%$7%!J_2V0)c5x7VYYO@qDDf}D3^ zV&b2#cAEBGq|uXjwxIYxeNpahZstORoMzjh5JcjzS_L~sTOiEGmpravabL3@reb+t zLH7N07m{BQ^&Xnyvt<#);EFq6elb@xWOWEA$Olb&X533V5?qat*=9}^y(b2H?5SFo zhN%i4AE|z(Q@~_@?3NeoV4ktpFRocJ#a|hT(t(+x*+HU}1bTjaxW+Ich@i>=>YD`!GqM#-(=9#@#)_e0Ti4%!ajFOi5DrTlD>_V;L z;-ZtTLpPnDUn0_kA2@L$i6=~^PtJ(IQ>hjZ8-O*w+HmDUO>E7(jc~~lp?LLRME3BL z4>DN1g~qZ%tQvZQi(SoyOwTHi#$jIX(#I;K7caJm!ILbltK5Eu!@{aqx2cex5Ox#bam3a>n!(Rj?PF2zv z_mZe>pSjcaVBBc8S9*0q^F8Dg8GEwklwcU$Q4u@UcK~+d;)V$=N#f5U`a-?A*p_h~ z_1aPUO90$z#<>jE*vO?6OLaGFgBjWRj5?aL6$={Kz_xH{d??F;CYp?AZ7?xS$F<4J z%Nm4-vzS$TkR3-+TQM*Jxr2_GfV>69GtI)|>wKNL-~4YtpM}-=u#%nANhhm^#q=jF zFiyd5*gkuorz$%>%DVWQCN6om&U4=|c9?;kL0X^MeEl)i;M#!f5yx`5U?4Hy@cS=) z8}G#Omt7ylbtQ()^q301Y`G5!5CT^(;#ywsYt}q94Z4B@OG4wib9450gu0I&GdjV2 zJ0`MBU$Jvln_~GRf(!UnUEfJEdoeKD)fhoQ3hLi6%3AdjMGve=-#bR|w7SO~mZIY~ zrfkiPdAzHk$DQtzuA^-|i}?*|gzUGVs7NQy=k3I&2;|oUKe<>17-qK!Ou;7Z9wRHO z&?4&<|F9b$)lNxm1ZmdE3LdyP$?JdlADQd{itkUX9Y)$ev!t1cDU*6?m&}K5POKYsa_FqtJHB(xM=V_o+xn|?V ztaw#qCqp0aC!m0za}6|&0Yt*VuLMZkdFKS#V>ykrL7s-Era%=BVoRKBoJp0NV5*zqw|!SYL>78~i`5GuPRbinlZK?ik-1t#L{5JV>!%(KK0N=~LtxGSGpu_x9eHi9 z?p^Et8Q48_KmI+8w>7>X5}64*7DO``k+C~n-I-FTwsP8{%uLc$p28+(#j_-m6%ay4 ze)AnCNxFKlysTU^BPdPU6*F+mBv7>&?KA;$;1n84(}D&I&pn@p_zZEf#tuSSOKH%0 zTPdNyDYI*7bj{%F0s5HEDFrWY)pDVTa)~2WcUhsrcZ@wn9GctQ+K40dEKszn+$F57 zRpu)Y<{c`Bi42z&T=*jI52UI9iqmo@DSkG7>L?$wPj`uvlPfnLIWAVG+E0PxPeIo( z3%R2Lo_XMmBr#Z9wCA_X(SV3UO?WCwJ1(}`0^tD8*zPrW2)uDm5X+HY8XSUrUx>g9 z7U#&Z#Zs`;Y{0M(q##e`SS6=If!$rnWDX||SU;({g)p!XmyI0YRdLA}TL*u(YS&nY z(xK!rY0K5RahohiAw;?-JI|ajM~|+{mg%rOlmTaq~;=FJbSD zYV&OMB1FQ*EYqYpG=plfWIM2Ed-<+$D>dhj&i!mAf+f9kQ=P8M{Y&lx^15-2jZYDp zNTmMk?b5w1T^c}npdd1B{q^%OOp=v80(XsV6e~tTei@U}^bvDwXsh4U0%;!H_na_; z7Lj+y$2gi66OWQ%1?F22JNd<8G;hO#2}Oc3*!5dr=^R;4ipzfUs`|~@B{#(>_To-pGXl1oaeD z19sRV(;Th%XW8-`+*UsJTPrc#z~u^|M;2Ct3?=2XY%!Gi_hDs5PhkAeyH3 zyIkv&(Z`oGS{pdR&2lT1lN0N3l|?X=__b?m_@d5krHC%wXf2r>CvQ^BurUUtSev+G zaR#^M(!%ji!>8haTi3IW@q~1&snYUO1nWu-B&%wdBZZen$x7JF-Sa{F^R49UxmPa& z^-2@t>iWWEwFJl`+KVTXRF+d}dAS?!E>c6QRnCTs6phLUcM-PrriNBzX6Qsc@NW02 z)28?QC;wwV8^hhBz`x&KEI#tz>mJ=La?NRQ>5)A8LDaI$@GRBfd>pCUsh6|+X4Q*q zfBcH&W$|veh_@v8*hj)+&j(Y>>D8%q;^AvS8tKFRsYH05J#nz;!0!g>ZfNtV4Z}a~ zf}}}1*|p{>r{ea;IWETjsbw#6$MN3l;U`+Bstlyj9^1S!{adl!%5!4P^}Poo-d^jr zw>+B8UJdxzC7(X>^M1YWk#asS{Qdd$X?=6V;v-*CvBsm~k!nIsN;=0#H;b#^TQ~Il zyWGFGP7u4~dx|6j+i85p>M>|JXP3@!cI7NZlF+5Q(J=3wW+7SKe|cA`>G_|p(Vy>h zxGVJ!1hUSWcbax~fAMy7@!8bJ+R-`2H~zMz&}(=Y)l%Qgvhe*(c=GV*-)&s_A5uru zD$IR6UEVkutB1~st?+u?oQRBTUT1vg=Bw1Yuy0qszWMK>5%B!-AHqd88WFU4@;7Z7 z9N#Hr;PxAqxwmr}9oV`&Z-F0Ap5(&BH@Nt@#jo0*o(#|2JMj4vSO4V$(W552udlE6 z2&j_$(XiLwes$#952Ct@iz~*zHh=e+Wu@d?(a3P&@21iC-&jVFq#A#^?&|f=4D*iy z7$Q_le5@`LCDZGq|G0&od{iSy9XTv>-;elrB%0U$dn5=7v;R|le<0k%du?6$ zf>7FXx){3qgJ|df0=mQSII3m7#s1Vg`EamAl$+HNdJ<8xvwu0jK!2`X7xE`4SLxH# z7gt7qV)Q2{YR8)~KAZm}xkS*JjW6bj?yDa}`@h@W760ad#D5LRHwfmHQUcs|f53gNeSYBePlD_IW?36UHfa7m(f&78|KUv7$|I)IMkW6cs>(+~DTq?L|Xyy;>Y>NA;mAo6>w>Eax z{M((Awtt}fH_#dHEJYX0Bes>@|5=FyYrLj@e$4!bUF*+dem9Y=bI<=4=|_JO3FBX= zgFv2tvIfC1|JSTRFyvOF|El5te{|Grm;D#Bm}|E9@IQmNefH9g^iRP5KzR3W2sdv1 z=_Zh!t>3A{|KH%d&%Dcf<1;Zu`d=pc!up?Zd@1MA{my%CsFR^r%WJZr*;%^%vFlRq zi*Rm%BqS^j*1YT8kQ=+MsdwkT?!8&h3R|ljMro4X`tVjz0aF3I&K4;NDYF_we4|59 z3RcLMSNcXP<-yNmSU+^jwWsWR4uh0-^c3}naY!|$+4~?&<{6He`=m!jba=0526pt; z3LonunmXOqB_8qyz|f3j(BJ>19GA-$Y!W7B#HRWRG*d9fKrCW{zuW1RNH0vr!_% z_XQ+$a#`Xg53yx%ov?0n?jYdlQQ()2r@(Q6WFC&LuXpflbBvpmZr>Yvc^n$ z^rdpqlcb>`fp`-$ZCB^inJ0^87l?uQ*RZjqvayD@*lLwaP7$8sA_U4(A|l_J_(DLi zL}@yh@ijVwy_SAmX&(q&)t{!>m)x;9dNPvxvQ?zyuCZ9`9okP=yaR>8m{ZnhWdvem z0dxMkE{7vW=q#~jrYdfUlu(EV%Bl7; zcUab8&ayC&xgqA2f43qNQ{x*Vz6{K-|Ju_fdPq6pXGGXjb9NLg`);=uQ`3v8iCp`z zo*mRwiDhkOQligYWtdX}T8)HbDJUAd3=*@dEZ{f?@& z3-Y~X$anr;7yGnjU36kx=X9?xl4-tTSl)}lW4orN_U(ZmdVfr%c?Ah8VD&Vt)*m^~ zk64Eoud_Jj$rv{a@`?0G0wA!F5Pw-`Zl>1xhYwnyg7^GA4G|^QcCCd zhKl&*5PU5nnz0YX@0my6Mj5RVzdDkx1ahek##|&nt1qTiFLKd|n?{M{gA^^kfje>x#)gYfB=#iZf#I&O_K;Ex;gnmUvB2r zCn6$nXnvzqh8saY+I6A$b836S$rb<3qp#hB*+~8w!s-$G8vR`KL@k-Expz?HN5`LY zSca{pzem?{j3`0fL!Ao(dL1QOnP=H_cjUQWWeed61+?ItwVPzf6>DqzTFTQ$HDlEx zsdD6Sr?QA+=F;s_n#hk+_ZB@zNvA&dX}z(`w_ud#-k7k56xYGW?8sh&>#B}0I39pY zb`oV&onSa6c{XXXTwQ7dTVYQ@AP+Icx8Xdna)AME6wa9^jb`>N5R1`#mzl_Ese=d0 zqDQmg?3<*oH>Ld)ridel<<=>!GLA@o!8g$M8fZS_<`kt$`n7(XM!$`97`K1Ib&rGt zR9yMwi4G;74Gx9FW7}fm7h{tvn%@wXaD->bgh?_?>T6!MrH0z9YFkTa2;F*zRZ@19 z6#Clb5VgIehlQ}(3nj|LZ_$Vl^600!^T+(xA`HF58Div&U1VtR8Af6*uC|nR&t70p zk<~yKSW1fsHtbcKx6Dt@!uR54J<5IaC~?-YfPnmwbyP>t#~O+4Jj##o!*TRR{6@1U@&RskM|(ujb%|uM$Z>Qb%tbiJ+OWsz z&BncUKT>bys#+FpxNQMtKjwEaYjCwbJ5C5dP`t@_hqX^Wty_ALa$JP(QIGQ6C}yA%<2}Zb}dWk z2_a>Q6Mhdl*{q@O-e-F+8^#MJlFR^E8xI-RVdoOJf9_JxGd81>z9r;^%vHqVY4Rav zzeGv`mL;=5(-D;gMd2BVF0{qZf4kK)Vw^RklT3_zM^{q@NO-U3;rMlUDf50=CO1~) zbJCV*zoMQ8iGV*lc^*cZNFB#GrH3Xx~v`$H+_! z>=B*Z>Hsfm9PbUfV`HI0yj<$JlN*$3o%c&n51rrU&&yi=Q-FDSG? z+-O>BwvpepUD$eM!->2@`kkA=*gyteW(4{ba5Omrl&OQoO`2NaGDY16t8MdlFQ{J` zxDSdMT^X*2EC(j~NSIb;5A_cQ7Aiys`H%opj5w+7^r%u&i|7}k@7Ye2#fnireSF5@ z1Q66x1`OYhE^rs7hH#L5KfI9(TWayp4kd>pok6m}zzvd506KuIr%IhMvY)X{Nky!p z#{sNVNd-)GS;3}w-Ft&{ecn0>stC!Rhh;RgW)H2yHk{A>RXW3m$^HO zPKT$M;g+3)4Xd~ji14KW6Wy#4lC7c1ug^jqlpR zQ954lkKJC4)}_dI4(O7;S}kaw47{}X&kRv(yKgPruD7%+aI07%c+McY6J81 z8HC!oA*-VR9{5xqog^zWDcn@a5e^aTWWuXHvy9*oRJ=lI2A@JjYab2JMi|q8ri4Y- zhuC-#xm7hWHQ3ygIm~5U!`*FcjVe_AFo63^F=A6mZ1x3aS%Dt480U{t9)(8JUC<=j z67blPCuHa;J54+BaEE@8_h}!D%Bwb+)a&&Li;b<64gW!v8UI9Q~KaF`KF*Hd0PMwe5xD_FkLe5O}XG`xCT zwGq^$J_{q!CTt?MPXV{mY5i;{Y_@5k)T-{I8NO@%rD{i4RXa_}a%U!5q_gCCZoF!; z<{*di=UAbT?C;5<%80`uP?OU8ioAeQA8COHVn@=r>F*zU_2ng)a_datBUTVD`-Oh& zGiWfmQw(;9wU}$CYEvnymnVm`=6&q2mi;X+k``CE(aVLpz*S(70_1INN%idlworh~ zqp0&7amu2A%_@}I(#7g}0PRz`u6TQABHmoLs zG&X`9=hYLvt3b&+6~7YQ`uv=r-M{?Zh`qkoe6DsG=3SR7>(7eLj%^<_qbAPASV{Dn z@TQqsG&3_voNV*ryt}Sj=_`@u+1u4tHo9r;wI7B}y<^uUcN7Lqrj2g93XQm3Jk57p z)&jm5E^y5NamATAQE)$7pnW)5wN80VgJr>RedlK->}4zWaM{=-C71YIm)4&!G;LOe zB95}9{eHU)xL=Pj+F0cdw44cw!F`94Z4@icayYuE>)Oa_k55nbp~i=oMYKoy#0S9Ef%f_7W!aY71I{zXr zlD5uy^a{{VFI2edA6Kkir-~IvL7Zo+if66z5Xm9;r5kcnk&4*Yve{!Gs#sR3i~$uf z%gl8|96+>`}7B?;HlnB*oDKWB{nO84uKxoK6iTtt=cK2Sb{Qomn;!+ZaAqoa)b#!oBc z72LnA(83@a_UY1_y(&}s#(Apw48@@HQVEsRbb6?1ja5;S`6v4s<%$)SAu?1(CwYmS z1xPz1T-K?SaFWXiOZmgn+myzSQAQiO6z-hg@L3{bu>}Ztbu(vzA~1jY>X8r?~68wXLTCe zSnWe?L}Taz#UMoi5hM6^%<4t_gd#TiIK=yMG_!3Xum z;MSy&itK)Y4NADYpnDa>5zZ;9Ay%Z*w2>n60b`)6fJ_EWYs-{W5Rd$HT-_sOwGAJ2yq{Ha>9!11&KuSbC{#cg zCu;?(M9t)b$Bp?#xkoU;;GDJ8sQBy#`D{*GRuD?x=ceLl&(pGjdz_`J&g=ZD$`nZ+ z{co37wPo#+XEvpIRqdwBU;LywIQu#! zMP?UeI+a)iX#)5LETV{KEh4z+l_ZXCdwt3xxgm@TFAIE@2JpvhQ^{-&98r_&Obk&(i~HL<&p;L zDYUn?q!G$*FkQ0ba0)uI>=h|VgXNV3v7G#~vYd$UyU<{^ET(Q2Q~APeV}2mlkzQ|w z5@lb|K$}J4#6bI)sjP+ZyfHl?>5R|@)2g{eDVa^y%wRnR=6!+5+G2kC?(m7RRhUoq zq}QrTQj$pT_+e}>v7Bip)?h3EIX4^Tfk@oSP7c0(P>^XZ8xqzZ9Y7wf!=+g-_GE}& zVN4Sm@ixSoojB~PX;KM`DT0GV;Md64U;LmH3{yKUPs_yidj%U zw(Uc9g~i7?Suu`+RA1HT4f~WxP$&0%m-2f5MjgNn-@sF!#GE;7}D z*2*>r>1}BT5R77VA{xbaTedK)q`7SRRJ*TyQ9>9@rZ0;`^qOK6djkj~JFpCsAgjEd zd;mJhT@B621}6hsMo4HK>REZgDH&#>ACZ|`!|6vRD&{94s3FLI`mdBoec4n@sXq>1=k|ap7$yvxK?@Yn@jc;cTh5 zx7RPvk8oH4?DKFJsu*;Bpq$0if_?z(#Rov{bxQfCL zlVwq9iIOA5GyH3&0HKM$Tynro~);7hlWrFuX;$Q zN{IiurDi3@(S#gK&EqhvI?c#;nN}Ms1}(Z$ZO0q6HQh++upRpz-P{Lgl5xw$Xet30 zCs}LbsqfwGW<9unCP7^m6ju2fnaDtxm6RvHK6^l0cW&zR(P2|r@Sc3E zqw0P_9Yx=Xw54Wa(M5-yY2Iq0NGuL1F#rF4Mf`$9zY>w;0a9JbQK0TzFNm5YXIY zEOGgrj+wsHrGe}7yz9;MS9cUU3*mP6zPru-x^mw6Jtt}1yG|ab2 zt=rN-cVaYuDMYUQw1qDIxH+?bPR)OH`?}xDH#J^d!gZhVq;!~Jm)Kj<;MnJtY=HN_ zBRCylY4G5abC_rQ*!Pkl$#>8k|4>XCmmUzL8R|9ac&+E>VPds$}JBwK2Z{M5T~>)bu~?q855tSs*O z>0D^F68m|#d3$^nlb0|qaM$v0+PXvU{tz9hT{lPhb+?}A1y>o+kgiT%1gI?!@Q%z5lFIE};g1qNxgF}(cYjx#BAo1)+vq{Joq9endcM94 zQZN~^MF$-zxr*X>^G)TIOP2;~fu)-^l>-;D|FzK$=HARUVv#SB(`1r7Xm=O4{ap+d z@nfmO35PZRb*lLvL~Z(nc@V!9P0}qXg=?(~Db?lYAEg2W@P&vsLq^$Ei5g!MDTCSE zq)c?pQg?j3N-R|Y%ZeqnL#}A}q@>Xn6aQqSnvwQkez8S^qS{|9gY+-RGfxlR8s@Hz z@8BV9<^DlL`Q}>J@7l0>y7?O=dk*33EF*ZkTY_2LCbnYEEn0V#wwZiw#gvY;W=vAr^F2Jtyz{cvi$tej}MCyz6!5C;G@6AW&?UvrR>o zTI`$mx^`M~T*^f6WNHnqS2lZxz+g0MS#(S^N2&5UY1_H($5$73!|K}n|4ZU(_^$u^ zIiY>}wu704bjQ2B)F-xvTG_7%k1w|OLW`Pt42LvHFG_X^%hRtRZ|v^+lx#I-&d+}F zo^75is@dLbEOt%T_YT@p*fPvkMlp--Z`+g;DvC9xtC2BE{l%yLGfpEI-1YD7`fzut z=3kiY=9qAR_`IK7GQquyq-IM7Cw)$sBJ~@Be72ke>wCygU6$qu8~^_sA8!7WYj#@e zPj~*p4|c~!*YoOcKg~Vb^|_+jnI=%@4taJ_HHcenD3ms?j-+J8Z3`?^nRdV_3}5Y~Pt{@LG& z|Np1-fo^-G1o{6!=6CTgD$gP-PV~ArtI?#55m7&g+?5yhPs-Q-UE1HhetPF$RZ;p+ zL1q5nA3^2%dwlE4t_8kLQQFd>NvvIiY%U^jkigh#gH&0l^xOz)Mc`R$VCq4(`Uprf6F`_} z5yX_5lPy4%ZJ7kJXqg=)2#5PVA9R{jk_anHe(3xisXFRGkLN>BscHt~Ad(EaIxCAz zW-B>pz89Co$c>fQXcqfR0$`lFHu)Si(NG-eJF`F&@B0fRj_){|P4)P+S%Hgm!SBqV z9F=#bps-3W?gn$6ttru^D5QOeu=Oz9ZaqDkd=i!oc; zv$m#%bdjm3iXt$U&5OGg{ya2g3RKu}UT|yb3m_q)W`Q z0a(svl{e|S5mN-%k~p(Fdnc1kcimT4w$t@5BM8E+y-(orlf$u!tiAM%E14g{aICWXY&)vu5RDxtk@88&T#RINd7Cos_uh zd%4avcVl9Y$*U%gr;UM<y zQ+ZwsdK^#^6IKo2D-9SHdp}L1ZVeVsn@;_pl;pOsQcJ_&yX+lV?KE>G(Rfv#aK*6i zJ0!<0N6Xhzdt& zlB9@RXQvHz78EMkTB%;26`F-hQv-JGxc=Ok3u=kgPuLC7xBnsvg{c>Few+WhP0jjuIg^*mhU8a0c|%Qk%| zo&Exg?!j*SM{thF#aqI`STbf5iv>vxx4L0i9aK8t_2;ow!Mr+E#)6KFH#n9pLyg#g z$06j09(>p+6Gbp6_*S2Un95jOpU23EmWgU{S*B=AmuZXyO*e+Q-H=>9Xu~OK0pRrrYuM8{Xgfva7;3JwJV zvdu9Fu^f)-1%7FjpqM0c`H&Fln3xx*?qMhNtW0Qh`cXZaHguIMpqov$oE2^3MT^aN z^-3NWOCBDI8UTsOWMO)? zFa>VWZ67i}mMee{2pOr&;=y95u@%t5A_S|~dDw@tT=b84k|B_&?f-}`@Uf~N*{57Q zW4~jOP&nSl;m{&ORMz3#3zGp84Per{!`zKxi4WE6^Pxd6g^W=;<_K0V-{lMnu_$w~K7hO>{Q-maZ>+Eb|J zEfuoRB~-=ot8vZYMubdNeX#=Og^5ivaNPdO+OCdP=aX70yQLv%(Ka(@>^-pj=myWx zotTHWv3T8R!S#ysWNz-BSV5e3PX@3AzN&7ND<~gNuP>GxGK#p5{&*3UUFTBf5dS>G z3V{iAL6I1L6J(Ws-}-o|1hxc%isCh0qi6&YMp6aSae(F z_AeHA@XfjC#PkOy1<>m@%=e>}amB-e4HrzF}3T52$9d%%uAdjj@<4t)b zIn5l+LLXyjIDCD$1Q9taaSKsU+MJ^~^|6hV4_@jBFDs|q8erQkEc9^YKUau#e4)IOgnd7I`ESlVA=pBp)MBD1!GBO(G2;F$@zS zNaF!ru`&n98IirdY^t3 zkAHTw@!@>FJ|%OJttedrP^3L(!ZzA2+|4$K^aUIaIh%`imPWgceQ;>ciO$=Le%5Te zn3yn~(MVh%DKF7F#<#uC_Yq#Cd4kS*4W~hD4=)dtMZIfgO%yI@56r#15A=fcWWM8< z1WVw!hO}`#u@KpFYe9{u6~QFOoR)BM@qE!?R-uGF^6XmHG4(89v1X`)#-kaGy%HS> z))sblX0Kxo$mkW(!vnRr5|R#M^9-0@j$I6X2v?NDxPG=Le{61fPt#WFS&M-Vrn6%* zR7e+1EyUO^{D5_AZ{!d)5HgCorFQ~zcKD?8u(&-lRPi=Y(4f{ur`7yucyc;PVEnh} z?~bl*hqIMJ!v)02t_G^N^<#~Jg~O_J+wN=IxP9JDj(U`4(lO6ts0zN$l`p|apZU$D zH8A52$tYeOt%9n~&dUOY#dbQZnXthGd(2`61BbIfLACbbr(Ll$W18zPFraS^5AU>{ zYQ7MSoihGVE;^oI+JCx>CH<(Ri(X+8FUCEKutGHi?FZ+j7`43$cxq87sYvwTtMQwE z3C)~Z)W)uB)3tWJj)c*rc+lCCd`Ee+rrBjvFEstKpWWn?UK>YPS67kK<^%v#2?GI{ zOXoVve_N^QOs$^kM2Al1^&LeW_Q!6Am4>q+KPLIRsLYpd0xlmrNCR+>*=+{|@(>{g z@=~@%=anxC)ZOIjJK(ytwjnvq=0Eivk9~M~EYVwq%^}kotz-bczjCzZ5ncS^Y`TaX z1#x0#WR)QvR9g|Tl&rmoV0{3R=f-9pGoc`lu6+TjtLy)?_nl!)W?S1hj$M?FfPjW3 zV1kCG)S*M@p%aSI6N=KMtB7=vPN-4>gixe60i{=gB(%_^6RPx%UuNc<^Lple-)rVv z-}mRcuF1bAKi0F?z3#R5^E`X6dxh1w*~!bx^`#v@s~*#P&v_V=j&oBk$u`D2VLx~6 z+DdC-GzRB1_g$Ej45NBG_P)M{7UXcmruN`xAhr7=og9Uxmra6~aL+IBK_0#@VXS+* z*pxLm50=f%cM(ZmYkP`@fTcQp1?IsyM-q=!^(~#-(<|T6wk@U0#=K4k9G^&WoV*tr`h>hv0c*S=kmnW*_8p{#OZv9E+F} zU^rLFs&`KfeXdVOH%a39kW@i#7%ark&#S*KFKd-$NQJ$;&zLGew*{_ss`ekORm39L z1S#XO009PD2Ky3*#WJ|tjXGnF6Cf;*%tQ5(iwS6J6`_LNbXk8 zXZtp`E>@9OVeDF=^;t+9plG?AADY+nHAB6y&=3^nd}OTmnUC~Vt4E0A0V;7&L9^4p zfMCdV`AqRj(h-LBu`08%svXNtoN{?M$foc55PX~9R(zGlQ~q8qU4FI}=0PIoT#+=D zRi#p1vo zEV&bsRAaGNTfGnqGBSzRECT-?iC?ey>90cvS_i{%h=t(Q$bixU9qblV^gcmDa7(Ag z8O8?_&XuNe>vnXK_9o{bo39Iytq;r_ihK5kr{22?L=j@slR%jG9Okqel800YcGka@ ztZ=BT{xD&8f>y4V=sS^MS@NKb#R@8s;vW+B)J9Pvv$NKyl>d&twpyr^`h5;xWsfeqS3 zNM+Us%>XVKA88fg^t7cU$$2ed}yNZMRT{;263%krQha zN3&KRb;oSK04iunt=ZKMyVClTE04Es$!!l>Aw#!dDkBkPC8=)fHA62gQ*Hg>1p`w7 z8>PG1?=9WXb0y@XPWZ-Equr?O@HLMw%3Y?=$Cqy5J|Os4s0JOopBfckL#y9I=GQ?q z%TJ=R&D~;EOO*t_r1A}p5Ry$q2khGeRxwR`Wu>uSvS+qL(hR>$eXeqTQq`^l94_QF zqU^i(NI4{?!|dxUNe>*NO4?opMn^Y2Va6nZ-gh@Ax?k7j)L!}Upw}c-|8;HjJv3|` zn+-gmj8HDT=A$8Qj@HNB;&pZ2UA=Yp&R#mdOw{X;f6Spdb;i)p2m%&u=r+mL1W`9Vv9 z`^1#Z+?Wiz!5#)y(~I&k6yUg1nO?=y3)`K4ngi?%>0Jh9WAyBewAfTFHmO1{xBp7* zr_Z{pd%7KbQ|lBXNrl@{0j6@*Zh5s?YvR!CuDqi@7#Mz|IiyxLj2vvSDhY_jeXx*w zs-l#%oE8oc%ez?_`=Hvpvo???*ZgSwCsgIkQ&PtO425xR5(k91YW8AP9wVE!50Q=g zu;Pf#`NBV7YB|rn)A(f>%}@DcMOb|#nQy6UsBF@ds+v`4vqm7@G)4$#wePdxJcl25 z(xU2F^8^>`QC^cad7cLj$M8%K2;~k9I%+gtyRw$jZX;_`#r-u`(BjL44x7xE2m_4#0I5GuSp+Lw}w{Q zFU#b-@_kw;4Uz9iD>Aio&KO$Y?^1NlFYmSAVD~l$o`++u#Z}_j+NzHx5!=(`?Dla8 z);(%CkkGtgFK?*dRoymGLx3>=$AK5G7lkT=hf`!Qy4bgISx~t!@tP~F2HM7hPDBS3 zQ6oFg>-M^LclF`gh}<5f6JJ44P-OYxHZ#+B@;A13gxA3b897=asp9jQS?aKjqS$T~ z87Xl<^wu;myQ&DkZ2C*Syy4`%nAwa)iiUwgL9=W{?S#8e_v88(TI{RtK$LBErSSFK zgVg+l$L!m|>Y_KCP+F`IjbI8EX=;oR`R>$H3mA;bNSHInl{_~&{kD0iLreWbD^RH! z=!MtrT70MGW&%g#i$|$}SyuI_=F+b%xVt|~=F)A|Li>kC1L$d|bLJDB9gUp#&ktjv zk=9o8RwhclB3qroT+m2NgX7)%bK#0;_Pq+%8b5q`Ova#L`52|JDwr?Gvc~>Q-oh6< z@|{fadba|Bqv=Q>M%$e{Wy>o2P5C%HSIw2?0G+@ImkH($aY1CqUpaJG<|&at-_3c~ zO)l{^338LEO+>cX{OyyRN{!wFjIc=*CDo|*;Uzi&wKyK|f~XpN-HL~A+3ps3VLOZK z(9mqY1{vAzxmPd$uzbx$TentD34|S{jjfHF#N58B(@5%mGP1uoV!1Si+jDogt5-78 z5$U?!hbiBqXS(`M7R4U6D(_Yk*S*+Nx!SNYC3 z%wR_g4eu%E+6zxLSLfrK^t;+x<6)MgX55d zht6dMljV9uTlDNmMa=Y7>?xzr)tsdynuY9PTjz|SlIw20>}!Bp?%!;*?ZHoB|Q4bpMBv_;cz%Nj9aeZzxzV9MxTrX&-VPd$Tv@EHU$) z>@Bxub^)X(TnSKP+E$ONUNZ-P`9~}ioE~1ZFqJU!+;_Wq!L2uiL)&%$rJF=VU(40J zVo2k^kd5YHV^bm>svhY$n>3@Uu5CbiFo*W+;Y-JnqhlSd6M6es_4lcfNwhkNe!?*MweW zb5Ik^4vRF1<_ubO$Rjnz&K2$#$Ly)o%3ob>!WC$>D0%3vR0DXl!KS^Kxpkm|a%RAL z+;_5oJlA}v?($YGNvHUP)F8_CNw*)UDYwzXg1fMxNpeBq;UT;sIn}-EW8RF&Y}*jV zvJfF_cTv=08YRFO`HI;Rch_0c^d})Dw7Oq`CS$b*jJ*L+Yva0SU1QO06xy$k?E#&6 zQOd8Hq?g+>vh!W$bu{O2CBKQr3&j>XVRNmJqax$WvmX-MtUU6@2wwMP1#uvCK(o)J z17~dbMNGznamz}@pwM-bcXAxE?v?ptz-P6jW<~X_+tjw^o8!P4nyH#|3!Fpkv(>N` z?nb8z)!Y5H+eGm2x1rus0*fcPuMel;8IwVJ`dRXcM2TP4ft2`EM&Z;e_ud1N)cGX` zKFN-{aS@WZFf)B1a;&k~N_zG%xT54>oo@5$v+R5`w@*Tyjun&}XES#bK5z6{&92;E zmrP8Cu|`ZkqsTe!xcN}1Qj)o8@~-OfJ79a7ziGNseB;~7XY2hxI>F4^bY=aN+~MR} z!?Vu`EN7Q&77yu3hs4jLrZxvWyS|fo5PSlMbm>`pR0|{9pH~HG`OaPX;VyKueNx4J z+1;kiw*1?EIKN2zKVe}UZLE{|BO*^pfOs?W`9*{__ef+lI>0Wp{{X`Oj5VQ$R7#5T zQ(yWQDt1#783QMG(l+{sHa^uYoUlIgJ71PQXPiI~F`n?N%KX;&^?=o6yz*M)55YVC zg9q0f7vB#rVl9iOE0Ck4LkVZ;{XY)-m#h~*1aeAR^zoV8 znZ2E_XuwD5YJVE2d`>FLX zx6nTyb7Asvx!4Zl$&pIMiC~$ZTcEu*RQ$rAGb9jW2#t?$s`JXCi!>9sv!f zr*A?388HYwCsR99v%BZye>B|i#?AR8w7&UQX1wr7MQyM1-uiPKext#EafGzVu6io@ zUPST@^~4e5!~wncls`!PBdT zjhDuzKCRvUP6pU`PINzUF=4TOraLkE7YOkqxI$%;lBdE4K2QHhwsKPP)wlizgg47c z-{K13uH(rMEb#cRB!A`bZ=w1z50}m;)ZLeCzms8qOX)Xm5&w#tfk(oMMDv(;z+Xv^ z--C7Oe=zO-)p*w>>5%n$5)FtJ*MwVX_PyEo~|6;uVGCJC~1?pa725laD^4;|R z>f_~R@fV0TWNm$xeB}4bkMrG)@adoTecx93UYHX8dhB(;obr#zxz7%~Fx?ObxsCrN z%Ov@VUl+`Re}nvg$&R|srH_0E5*JM+w*Fs%@jHQ+`5shFHGXLQ^U(ca6-g$oBEIkc z!HPek%;!i#S<@qVn=d`T4a8G>rJ{rYeWZC&u2;E{3vpL6Hajjsb{Qp}t4a$`szC`- zShpEa26~<=UW{=pc5X1Oy1N#?OB_mg*;bIEqOJs$)`lPmGilFQ87{{SPa6#0V+x07 zsoEzf*%qiJPv?8W1yB6h?#Chc-gI>Gwhg)eMB0lr00{C3V34d=v4xS*L3_VFc{PMM($$ALL47G))>X0D=4FDAM5mYa~>)7DhZ`YcgjNSWixr_^&zH!*O<1) znvV71L!B(ON{2LC0!YM80FDZUimnPn2^G_n0kbSr9}(TJ!5!LpnJ5f;fP1t&sGg6h zveezLXS}tk71R5A^%UZj9;@;#6KQo0MGYZ3bg?#Cf?5oub^&H!B{xbpdiMp=cQc3S zkXp0BJ(|I|u;e}pqo5d0l=Pd^5x}2V#!7s6~$N?`o*Tjziu&p6V zJ3quJRq)!&u%Nyuma$`>v{!i_4TrdGDTcHnv~+j-uoFDPm{zty%g$0&Yamtcv%J_; z9U&CsyUJc(JN#&NpY?&JzRkB?4t+6VS99pwKsX{R29fLHYQWJ`7#pqX&c=1QBObyw ztaNKD8k*JwSf4YVeAR*CnOPr8$lbXb_=|!Q+qi|iF{zmIJb9GhzhT`+~5F?8tPs@t$rc;Qj&}SOp%5Ox)Ky;Q3BQl-zo_wL(>kLW`nJ#g3I7 z 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/screenshots/RandomlyGenerateAsymmetricKeyPairArkTS2.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateAsymmetricKeyPairArkTS/screenshots/RandomlyGenerateAsymmetricKeyPairArkTS2.png new file mode 100644 index 0000000000000000000000000000000000000000..936419dd069ded0f85af8f982eb6a1c077be986f GIT binary patch literal 20853 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/.gitignore new file mode 100644 index 0000000000..d2ff20141c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/.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/RandomlyGenerateSymmetricKey/AppScope/app.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/AppScope/app.json5 new file mode 100644 index 0000000000..050d254981 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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.randomlygeneratesymmetrickey", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000..e400fe91aa --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "RandomlyGenerateSymmetricKey" + } + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/README.md b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/README.md new file mode 100644 index 0000000000..ddc5eba8d6 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/README.md @@ -0,0 +1,82 @@ +# 随机生成对称密钥(C/C++) + +### 介绍 + +以AES和SM4为例,随机生成对称密钥(OH_CryptoSymKey)。对称密钥对象可用于后续加解密操作,二进制数据可用于存储或运输。 + +本示例主要展示了随机生成对称密钥(C/C++),随机生成AES、SM4密钥场景。该工程中展示的代码详细描述可查如下链接中业务扩展场景介绍部分。 + +- [随机生成对称密钥(C/C++)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-generate-sym-key-randomly-ndk.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例RandomlyGenerateSymmetricKey.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── cpp + │ │ ├── types + │ │ | ├── libentry + │ │ | ├── index.d.ts + │ │ | ├── oh-package.json5 + │ │ | ├── project + │ │ | ├── aes.cpp + │ │ | ├── file.h + │ │ | ├── sm4.cpp + │ │ ├── CMakeList.txt + │ │ ├── napi_init.cpp + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 随机生成对称密钥(C/C++)示例代码 + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── RandomlyGenerateSymmetricKey.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/RandomlyGenerateSymmetricKey > .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/RandomlyGenerateSymmetricKey/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/build-profile.json5 new file mode 100644 index 0000000000..fb5a1ab654 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/code-linter.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/code-linter.json5 new file mode 100644 index 0000000000..28586467ee --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/.gitignore new file mode 100644 index 0000000000..e2713a2779 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/build-profile.json5 new file mode 100644 index 0000000000..2d8b081b61 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/hvigorfile.ts new file mode 100644 index 0000000000..e4f43d5466 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/oh-package.json5 new file mode 100644 index 0000000000..118bdd4fe7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/main/cpp/CMakeLists.txt b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 0000000000..8f216f9500 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,15 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(RandomlyGenerateSymmetricKey) + +set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + +if(DEFINED PACKAGE_FIND_FILE) + include(${PACKAGE_FIND_FILE}) +endif() + +include_directories(${NATIVERENDER_ROOT_PATH} + ${NATIVERENDER_ROOT_PATH}/include) + +add_library(entry SHARED napi_init.cpp types/project/aes.cpp types/project/sm4.cpp) +target_link_libraries(entry PUBLIC libace_napi.z.so libohcrypto.so) \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/napi_init.cpp b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/napi_init.cpp new file mode 100644 index 0000000000..b718f5d2af --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/napi_init.cpp @@ -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. + */ + +#include "napi/native_api.h" +#include "types/project/file.h" + +static napi_value NAPI_Global_testGenerateSM4Key(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, testGenerateSymKey(), &ret); + return ret; +} + +static napi_value NAPI_Global_testGenerateSymKey(napi_env env, napi_callback_info info) +{ + napi_value ret; + napi_create_int32(env, testGenerateSM4Key(), &ret); + return ret; +} + +EXTERN_C_START +static napi_value Init(napi_env env, napi_value exports) +{ + napi_property_descriptor desc[] = { + + {"testGenerateSM4Key", nullptr, NAPI_Global_testGenerateSM4Key, nullptr, nullptr, nullptr, napi_default, + nullptr}, + {"testGenerateSymKey", nullptr, NAPI_Global_testGenerateSymKey, 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/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/libentry/Index.d.ts b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/libentry/Index.d.ts new file mode 100644 index 0000000000..b90c1af84a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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 testGenerateSymKey: () => number; + +export const testGenerateSM4Key: () => number; \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/libentry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 0000000000..6abf3b7c20 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/project/aes.cpp b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/project/aes.cpp new file mode 100644 index 0000000000..3b3832e419 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/project/aes.cpp @@ -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. + */ + +// [Start generate_aes_key] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_key.h" +#include "file.h" + +OH_Crypto_ErrCode testGenerateSymKey() +{ + OH_CryptoSymKeyGenerator *ctx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + Crypto_DataBlob out = {.data = nullptr, .len = 0}; + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("AES256", &ctx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + ret = OH_CryptoSymKeyGenerator_Generate(ctx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoSymKeyGenerator_Destroy(ctx); + return ret; + } + ret = OH_CryptoSymKey_GetKeyData(keyCtx, &out); + OH_CryptoSymKeyGenerator_Destroy(ctx); + OH_CryptoSymKey_Destroy(keyCtx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + OH_Crypto_FreeDataBlob(&out); + return ret; +} +// [End generate_aes_key] diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/project/file.h b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/project/file.h new file mode 100644 index 0000000000..31e35bb0c3 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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 testGenerateSymKey(); +OH_Crypto_ErrCode testGenerateSM4Key(); + +#endif // FILE_H \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/project/sm4.cpp b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/project/sm4.cpp new file mode 100644 index 0000000000..4e8d677505 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/cpp/types/project/sm4.cpp @@ -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. + */ + +// [Start generate_sm4_key] +#include "CryptoArchitectureKit/crypto_common.h" +#include "CryptoArchitectureKit/crypto_sym_key.h" +#include "file.h" + +OH_Crypto_ErrCode testGenerateSM4Key() +{ + OH_CryptoSymKeyGenerator *ctx = nullptr; + OH_CryptoSymKey *keyCtx = nullptr; + Crypto_DataBlob out = {.data = nullptr, .len = 0}; + OH_Crypto_ErrCode ret = OH_CryptoSymKeyGenerator_Create("SM4_128", &ctx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + ret = OH_CryptoSymKeyGenerator_Generate(ctx, &keyCtx); + if (ret != CRYPTO_SUCCESS) { + OH_CryptoSymKeyGenerator_Destroy(ctx); + return ret; + } + ret = OH_CryptoSymKey_GetKeyData(keyCtx, &out); + OH_CryptoSymKeyGenerator_Destroy(ctx); + OH_CryptoSymKey_Destroy(keyCtx); + if (ret != CRYPTO_SUCCESS) { + return ret; + } + OH_Crypto_FreeDataBlob(&out); + return ret; +} +// [End generate_sm4_key] diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000..965554bb3a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 0000000000..b1e2129472 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000..f290adcc5a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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 = 'RandomlyGenerateSymmetricKey'; + + build() { + Column({ space: 5 }) { + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testGenerateSymKey(); + this.message = 'Call AES Success Result:' + ret.toString(); + }) + Button($r('app.string.call_sm4')) + .width('70%') + .onClick(() => { + let ret: number = testNapi.testGenerateSM4Key(); + this.message = 'Call SM4 Success Result:' + ret.toString(); + }) + } + .width('100%') + .height('100%') + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/module.json5 new file mode 100644 index 0000000000..4144486d1a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000..3c712962da --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000..6574e57510 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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": "RandomlyGenerateSymmetricKey" + }, + { + "name": "call_aes", + "value": "Call AES" + }, + { + "name": "call_sm4", + "value": "Call SM4" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000..78f40ae7c4 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000..1898d94f58 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000..79b11c2747 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000..0f8ce9a2c0 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000..be5171f89b --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import abilityTest from './Ability.test'; +import encryptionDecryptionGuidanceAesTest from './RandomlyGenerateSymmetricKey.test'; + +export default function testsuite() { + abilityTest(); + encryptionDecryptionGuidanceAesTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/ets/test/RandomlyGenerateSymmetricKey.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/ets/test/RandomlyGenerateSymmetricKey.test.ets new file mode 100644 index 0000000000..a764585f42 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/ets/test/RandomlyGenerateSymmetricKey.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 encryptionDecryptionGuidanceAesTest() { + describe('encryptionDecryptionGuidanceAesTest', () => { + /** + * 打开应用 + */ + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * 点击按钮,随机生成对称密钥(AES) + */ + it('testEncryptionDecryptionGuidanceAes001', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAes001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call AES')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Call AES Success Result:0')); + console.info('uitest: testEncryptionDecryptionGuidanceAes001 end'); + }) + + /** + * 点击按钮,随机生成对称密钥(SM4) + */ + it('testEncryptionDecryptionGuidanceAes002', 0, async () => { + console.info('uitest: testEncryptionDecryptionGuidanceAes002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('Call SM4')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('Call SM4 Success Result:0')); + console.info('uitest: testEncryptionDecryptionGuidanceAes002 end'); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000000..c3fd9dda30 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/test/List.test.ets new file mode 100644 index 0000000000..f1186b1f53 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/entry/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000..7fc57c77db --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000..d584c19c24 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/hvigorfile.ts new file mode 100644 index 0000000000..2a5e543f19 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/oh-package.json5 new file mode 100644 index 0000000000..e41bae026a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/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/RandomlyGenerateSymmetricKey/ohosTest.md b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/ohosTest.md new file mode 100644 index 0000000000..a2782d5bd9 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/ohosTest.md @@ -0,0 +1,9 @@ +# 随机生成对称密钥(C/C++)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,随机生成对称密钥(AES) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,随机生成对称密钥(SM4) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/screenshots/RandomlyGenerateSymmetricKey1.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/screenshots/RandomlyGenerateSymmetricKey1.png new file mode 100644 index 0000000000000000000000000000000000000000..a43f69a8f24596fc8e61b9ccc9ae62c9cbffad15 GIT binary patch literal 36542 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/screenshots/RandomlyGenerateSymmetricKey2.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKey/screenshots/RandomlyGenerateSymmetricKey2.png new file mode 100644 index 0000000000000000000000000000000000000000..3823ca7cba7260b94816576b66282087acc19df8 GIT binary patch literal 32206 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 E0uK{S^Z)<= literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/.gitignore new file mode 100644 index 0000000000..d2ff20141c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/.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/RandomlyGenerateSymmetricKeyArkTS/AppScope/app.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/AppScope/app.json5 new file mode 100644 index 0000000000..7375775fcb --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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.randomlygeneratesymmetrickeyarkts", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/AppScope/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000..e5498d2667 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "RandomlyGenerateSymmetricKeyArkTS" + } + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/AppScope/resources/base/media/app_icon.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/README.md b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/README.md new file mode 100644 index 0000000000..b194b6b243 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/README.md @@ -0,0 +1,77 @@ +# 随机生成对称密钥(ArkTS) + +### 介绍 + +以AES和SM4为例,随机生成对称密钥(SymKey),并获得二进制数据。对称密钥对象可用于后续加解密操作,二进制数据可用于存储或运输。 + +本示例主要展示了随机生成对称密钥(ArkTS),随机生成AES、SM4密钥场景。该工程中展示的代码详细描述可查如下链接中业务扩展场景介绍部分。 + +- [随机生成对称密钥(ArkTS)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-generate-sym-key-randomly.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例RandomlyGenerateSymmetricKeyArkTS.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 随机生成对称密钥(ArkTS)示例代码 + │ │ ├── aes + │ │ | ├── Promise.ets + │ │ | ├── Sync.ets + │ │ ├── sm4 + │ │ | ├── Promise.ets + │ │ | ├── Sync.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── RandomlyGenerateSymmetricKeyArkTS.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/RandomlyGenerateSymmetricKeyArkTS > .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/RandomlyGenerateSymmetricKeyArkTS/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/build-profile.json5 new file mode 100644 index 0000000000..fb5a1ab654 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/code-linter.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/code-linter.json5 new file mode 100644 index 0000000000..28586467ee --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/.gitignore new file mode 100644 index 0000000000..e2713a2779 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/build-profile.json5 new file mode 100644 index 0000000000..e7569e3056 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/hvigorfile.ts new file mode 100644 index 0000000000..e4f43d5466 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/oh-package.json5 new file mode 100644 index 0000000000..c9cb6c8174 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000..edc2839f20 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 0000000000..b1e2129472 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000..0c7489d4b7 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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 = 'RandomlyGenerateSymmetricKeyArkTS'; + + 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(22) + .fontWeight(FontWeight.Bold) + Button($r('app.string.aes_promise')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes/Promise') + }) + Button($r('app.string.aes_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/aes/Sync') + }) + Button($r('app.string.sm4_promise')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm4/Promise') + }) + Button($r('app.string.sm4_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm4/Sync') + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/aes/Promise.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/aes/Promise.ets new file mode 100644 index 0000000000..fd0b361f88 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/aes/Promise.ets @@ -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 generate_aes_key] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function testGenerateAesKey() { + // 创建SymKeyGenerator实例 + let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256'); + // 使用密钥生成器随机生成对称密钥 + let promiseSymKey = symKeyGenerator.generateSymKey(); + promiseSymKey.then(key => { + // 获取对称密钥的二进制数据,输出256位密钥。长度为32字节 + let encodedKey = key.getEncoded(); + console.info('key hex:' + encodedKey.data); + }); +} +// [End generate_aes_key] + +@Entry +@Component +struct Index { + @State message: string = 'AES Promise'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_promise')) + .width('70%') + .onClick(() => { + try { + testGenerateAesKey(); + this.message = 'AES Promise Success'; + } catch { + this.message = 'AES Promise Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/aes/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/aes/Sync.ets new file mode 100644 index 0000000000..4ff18ccb86 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/aes/Sync.ets @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start generate_aes_key_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function testSyncGenerateAesKey() { + // 创建SymKeyGenerator实例 + let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES256'); + // 使用密钥生成器随机生成对称密钥 + let promiseSymKey = symKeyGenerator.generateSymKeySync(); + // 获取对称密钥的二进制数据,输出256位密钥。长度为32字节 + let encodedKey = promiseSymKey.getEncoded(); + console.info('key hex:' + encodedKey.data); +} +// [End generate_aes_key_sync] + +@Entry +@Component +struct Index { + @State message: string = 'AES Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_aes_sync')) + .width('70%') + .onClick(() => { + try { + testSyncGenerateAesKey(); + this.message = 'AES Sync Success'; + } catch { + this.message = 'AES Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/sm4/Promise.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/sm4/Promise.ets new file mode 100644 index 0000000000..6936f584a9 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/sm4/Promise.ets @@ -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 generate_sm4_key] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function testGenerateSM4Key() { + // 创建SymKeyGenerator实例 + let symKeyGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); + // 使用密钥生成器随机生成对称密钥 + let promiseSymKey = symKeyGenerator.generateSymKey(); + promiseSymKey.then(key => { + // 获取对称密钥的二进制数据,输出128位字节流。长度为16字节 + let encodedKey = key.getEncoded(); + console.info('key hex:' + encodedKey.data); + }); +} +// [End generate_sm4_key] + +@Entry +@Component +struct Index { + @State message: string = 'SM4 Promise'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm4_promise')) + .width('70%') + .onClick(() => { + try { + testGenerateSM4Key(); + this.message = 'SM4 Promise Success'; + } catch { + this.message = 'SM4 Promise Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/sm4/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/sm4/Sync.ets new file mode 100644 index 0000000000..bd5b0ecfe9 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/ets/pages/sm4/Sync.ets @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start generate_sm4_key_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function testSyncGenerateSm4Key() { + // 创建SymKeyGenerator实例 + let symKeyGenerator = cryptoFramework.createSymKeyGenerator('SM4_128'); + // 使用密钥生成器随机生成对称密钥 + let promiseSymKey = symKeyGenerator.generateSymKeySync(); + // 获取对称密钥的二进制数据,输出128位字节流。长度为16字节 + let encodedKey = promiseSymKey.getEncoded(); + console.info('key hex:' + encodedKey.data); +} +// [End generate_sm4_key_sync] + +@Entry +@Component +struct Index { + @State message: string = 'SM4 Sync'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm4_sync')) + .width('70%') + .onClick(() => { + try { + testSyncGenerateSm4Key(); + this.message = 'SM4 Sync Success'; + } catch { + this.message = 'SM4 Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/module.json5 new file mode 100644 index 0000000000..4144486d1a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000..3c712962da --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000..3db39e1d2f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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": "RandomlyGenerateSymmetricKeyArkTS" + }, + { + "name": "aes_promise", + "value": "AES Promise" + }, + { + "name": "aes_sync", + "value": "AES Sync" + }, + { + "name": "sm4_promise", + "value": "SM4 Promise" + }, + { + "name": "sm4_sync", + "value": "SM4 Sync" + }, + { + "name": "call_aes_promise", + "value": "Call AES Promise" + }, + { + "name": "call_aes_sync", + "value": "Call AES Sync" + }, + { + "name": "call_sm4_sync", + "value": "Call SM4 Sync" + }, + { + "name": "call_sm4_promise", + "value": "Call SM4 Promise" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000..78f40ae7c4 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000..a8c9aaf7a3 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,9 @@ +{ + "src": [ + "pages/Index", + "pages/aes/Promise", + "pages/aes/Sync", + "pages/sm4/Promise", + "pages/sm4/Sync" + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000..79b11c2747 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000..0f8ce9a2c0 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000..903137730f --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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 randomlyGenerateSymmetricKeyArkTSTest from './RandomlyGenerateSymmetricKeyArkTS.test'; + +export default function testsuite() { + abilityTest(); + randomlyGenerateSymmetricKeyArkTSTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/ets/test/RandomlyGenerateSymmetricKeyArkTS.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/ets/test/RandomlyGenerateSymmetricKeyArkTS.test.ets new file mode 100644 index 0000000000..22bd00d9ac --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/ets/test/RandomlyGenerateSymmetricKeyArkTS.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 randomlyGenerateSymmetricKeyArkTSTest() { + describe('randomlyGenerateSymmetricKeyArkTSTest', () => { + /** + * 打开应用 + */ + beforeAll(async () => { + want = { + bundleName: bundleName, + abilityName: 'EntryAbility' + }; + await delegator.startAbility(want); + const driver = Driver.create(); + await driver.delayMs(1000); + const ability: UIAbility = await delegator.getCurrentTopAbility(); + console.info('get top ability'); + await driver.delayMs(1000); + expect(ability.context.abilityInfo.name).assertEqual('EntryAbility'); + }) + + /** + * 点击按钮,随机生成对称密钥(AES Promise方式) + */ + it('testRandomlyGenerateSymmetricKeyArkTS001', 0, async () => { + console.info('uitest: testRandomlyGenerateSymmetricKeyArkTS001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('AES Promise')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES Promise')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES Promise Success')); + console.info('uitest: testRandomlyGenerateSymmetricKeyArkTS001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,随机生成对称密钥(AES 同步方式) + */ + it('testRandomlyGenerateSymmetricKeyArkTS002', 0, async () => { + console.info('uitest: testRandomlyGenerateSymmetricKeyArkTS002 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('AES Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call AES Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('AES Sync Success')); + console.info('uitest: testRandomlyGenerateSymmetricKeyArkTS002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,随机生成对称密钥(SM4 Promise方式) + */ + it('testRandomlyGenerateSymmetricKeyArkTS003', 0, async () => { + console.info('uitest: testRandomlyGenerateSymmetricKeyArkTS003 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SM4 Promise')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM4 Promise')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4 Promise Success')); + console.info('uitest: testRandomlyGenerateSymmetricKeyArkTS003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,随机生成对称密钥(SM4 同步方式) + */ + it('testRandomlyGenerateSymmetricKeyArkTS004', 0, async () => { + console.info('uitest: testRandomlyGenerateSymmetricKeyArkTS004 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SM4 Sync')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM4 Sync')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM4 Sync Success')); + console.info('uitest: testRandomlyGenerateSymmetricKeyArkTS004 end'); + await driver.pressBack(); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000000..c3fd9dda30 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/test/List.test.ets new file mode 100644 index 0000000000..f1186b1f53 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/entry/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000..7fc57c77db --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000..d584c19c24 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/hvigorfile.ts new file mode 100644 index 0000000000..2a5e543f19 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/oh-package.json5 new file mode 100644 index 0000000000..e41bae026a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/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/RandomlyGenerateSymmetricKeyArkTS/ohosTest.md b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/ohosTest.md new file mode 100644 index 0000000000..8f40868b3b --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/ohosTest.md @@ -0,0 +1,11 @@ +# 随机生成对称密钥(ArkTS)测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,随机生成对称密钥(AES Promise方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,随机生成对称密钥(AES 同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,随机生成对称密钥(SM4 Promise方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,随机生成对称密钥(SM4 同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/screenshots/RandomlyGenerateSymmetricKeyArkTS1.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/screenshots/RandomlyGenerateSymmetricKeyArkTS1.png new file mode 100644 index 0000000000000000000000000000000000000000..4ef7153a1087c49bbc807e64d20eb4c5ac0dcdfd GIT binary patch literal 51302 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 Ii(g0o3vn(-%K!iX literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/screenshots/RandomlyGenerateSymmetricKeyArkTS2.png b/CryptoArchitectureKit/KeyGenerationConversion/RandomlyGenerateSymmetricKeyArkTS/screenshots/RandomlyGenerateSymmetricKeyArkTS2.png new file mode 100644 index 0000000000000000000000000000000000000000..3696c9bac5272b5fefec28867ddd17637f46c3d5 GIT binary patch literal 20765 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 literal 0 HcmV?d00001 diff --git a/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/README.md b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/README.md new file mode 100644 index 0000000000..d18e04114b --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/README.md @@ -0,0 +1,80 @@ +# 指定密钥参数生成非对称密钥对 + +### 介绍 + +以RSA、ECC、SM2为例,根据指定的密钥参数,生成非对称密钥对(KeyPair),并获取密钥参数属性。该对象可用于后续的加解密等操作。获取的密钥参数属性可用于存储或运输。 + +本示例主要展示了指定密钥参数生成非对称密钥对,指定密钥参数生成RSA公钥、指定密钥参数生成ECC密钥对、根据椭圆曲线名生成SM2密钥对场景。该工程中展示的代码详细描述可查如下链接中业务扩展场景介绍部分。 + +- [指定密钥参数生成非对称密钥对](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/CryptoArchitectureKit/crypto-generate-asym-key-pair-from-key-spec.md) + +### 效果预览 + +| 首页效果图 | 执行结果图 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| | | + +### 使用说明 + +1. 运行Index主界面。 +2. 页面呈现上述执行结果图效果,点击不同按钮可以跳转到不同功能页面,点击跳转页面中按钮可以执行对应操作,并更新文本内容。 +3. 运行测试用例SpecifiedParametersGenerateAsymmetricKeyPair.test.ets文件对页面代码进行测试可以全部通过。 + +### 工程目录 + +``` +entry/src/ + ├── main + │ ├── ets + │ │ ├── entryability + │ │ ├── entrybackupability + │ │ ├── pages + │ │ ├── Index.ets // 指定密钥参数生成非对称密钥对示例代码 + │ │ ├── ecc + │ │ | ├── Promise.ets + │ │ | ├── Sync.ets + │ │ ├── rsa + │ │ | ├── Callback.ets + │ │ | ├── Sync.ets + │ │ ├── sm2 + │ │ | ├── Promise.ets + │ │ | ├── Sync.ets + │ ├── module.json5 + │ └── resources + ├── ohosTest + │ ├── ets + │ │ └── test + │ │ ├── Ability.test.ets + │ │ ├── SpecifiedParametersGenerateAsymmetricKeyPair.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/SpecifiedParametersGenerateAsymmetricKeyPair > .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/SpecifiedParametersGenerateAsymmetricKeyPair/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/build-profile.json5 new file mode 100644 index 0000000000..fb5a1ab654 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/code-linter.json5 b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/code-linter.json5 new file mode 100644 index 0000000000..28586467ee --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/.gitignore b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/.gitignore new file mode 100644 index 0000000000..e2713a2779 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/build-profile.json5 b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/build-profile.json5 new file mode 100644 index 0000000000..e7569e3056 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/hvigorfile.ts new file mode 100644 index 0000000000..e4f43d5466 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/oh-package.json5 new file mode 100644 index 0000000000..c9cb6c8174 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000..edc2839f20 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 0000000000..b1e2129472 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000..6dda334625 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { router } from '@kit.ArkUI'; + +@Entry +@Component +struct Index { + @State message: string = 'SpecifiedParametersGenerateAsymmetricKeyPair'; + + 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(18) + .fontWeight(FontWeight.Bold) + Button($r('app.string.ecc_promise')) + .width('70%') + .onClick(() => { + this.goToSample('pages/ecc/Promise') + }) + Button($r('app.string.ecc_sync')) + .width('70%') + .onClick(() => { + this.goToSample('pages/ecc/Sync') + }) + 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_promise')) + .width('70%') + .onClick(() => { + this.goToSample('pages/sm2/Promise') + }) + 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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/ecc/Promise.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/ecc/Promise.ets new file mode 100644 index 0000000000..69f5202462 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/ecc/Promise.ets @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// [Start specify_parameter_generate_ecc_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; +import { BusinessError } from '@kit.BasicServicesKit'; + +// 打印bigint信息 +function showBigIntInfo(bnName: string, bnValue: bigint | string | number) { + if (typeof bnValue === 'string') { + console.error('type is string'); + return; + } + if (typeof bnValue === 'number') { + console.error('type is number'); + return; + } + console.info(bnName + ':'); + console.info('. Decimal: ' + bnValue.toString()); + console.info('. Hexadecimal: ' + bnValue.toString(16)); + console.info('. Length (bits): ' + bnValue.toString(2).length); +} + +// 根据关键规范构造EccCommonSpec结构体。EccCommonSpec结构体定义了ECC私钥和公钥的公共参数 +function genEccCommonSpec(): cryptoFramework.ECCCommonParamsSpec { + let fieldFp: cryptoFramework.ECFieldFp = { + fieldType: 'Fp', + p: BigInt('0xffffffffffffffffffffffffffffffff000000000000000000000001') + } + let G: cryptoFramework.Point = { + x: BigInt('0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21'), + y: BigInt('0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34') + } + let eccCommonSpec: cryptoFramework.ECCCommonParamsSpec = { + algName: 'ECC', + specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC, + field: fieldFp, + a: BigInt('0xfffffffffffffffffffffffffffffffefffffffffffffffffffffffe'), + b: BigInt('0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4'), + g: G, + n: BigInt('0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d'), + h: 1 + } + return eccCommonSpec; +} + +// 打印ECC密钥规格 +function showEccSpecDetailInfo(key: cryptoFramework.PubKey | cryptoFramework.PriKey, keyType: string) { + console.info('show detail of ' + keyType + ':'); + try { + let p = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FP_P_BN); + showBigIntInfo('--- p', p); // length is 224, hex : ffffffffffffffffffffffffffffffff000000000000000000000001 + let a = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_A_BN); + showBigIntInfo('--- a', a); // length is 224, hex : fffffffffffffffffffffffffffffffefffffffffffffffffffffffe + let b = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_B_BN); + showBigIntInfo('--- b', b); // length is 224, hex : b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4 + let gX = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_G_X_BN); + showBigIntInfo('--- gX', gX); // length is 224, hex : b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21 + let gY = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_G_Y_BN); + showBigIntInfo('--- gY', gY); // length is 224, hex : bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34 + let n = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_N_BN); + showBigIntInfo('--- n', n); // length is 224, hex : ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d + let h = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_H_NUM); + console.warn('--- h: ' + h); // key h: 1 + let fieldType = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FIELD_TYPE_STR); + console.warn('--- field type: ' + fieldType); // key field type: Fp + let fieldSize = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FIELD_SIZE_NUM); + console.warn('--- field size: ' + fieldSize); // key field size: 224 + let curveName = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_CURVE_NAME_STR); + console.warn('--- curve name: ' + curveName); // key curve name: NID_secp224r1 + if (keyType == 'priKey') { + let sk = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_SK_BN); + showBigIntInfo('--- sk', sk); + } else if (keyType == 'pubKey') { + let pkX = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_X_BN); + showBigIntInfo('--- pkX', pkX); + let pkY = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_Y_BN); + showBigIntInfo('--- pkY', pkY); + } + } catch (error) { + console.error('getAsyKeySpec error'); + let e: BusinessError = error as BusinessError; + console.error(`getAsyKeySpec failed, ${e.code}, ${e.message}`); + } +} + +// 根据EccCommonSpec实例生成ECC密钥对,获取密钥规格 +function testEccUseCommKeySpecGet() { + try { + let commKeySpec = genEccCommonSpec(); // 使用参数属性,构造ECC公私钥公共密钥参数对象 + let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(commKeySpec); // 使用密钥参数对象创建生成器 + let keyPairPromise = generatorBySpec.generateKeyPair(); // Generate an ECC key pair. + keyPairPromise.then(keyPair => { // 使用生成器创建ECC密钥对 + showEccSpecDetailInfo(keyPair.priKey, 'priKey'); // 对私钥获取相关密钥参数属性 + showEccSpecDetailInfo(keyPair.pubKey, 'pubKey'); // 对公钥获取相关密钥参数属性 + }).catch((error: BusinessError) => { + // 逻辑错误等异步异常在此捕获 + console.error('generateComm error'); + console.error('error code: ' + error.code + ', message is: ' + error.message); + }) + } catch (error) { + // 参数错误等同步异常在此捕获 + console.error('testEccUseCommSpec error'); + let e: BusinessError = error as BusinessError; + console.error(`ecc comm spec failed, ${e.code}, ${e.message}`); + } +} +// [End specify_parameter_generate_ecc_keypair] + +@Entry +@Component +struct Index { + @State message: string = 'ECC Promise'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_ecc_promise')) + .width('70%') + .onClick(() => { + try { + testEccUseCommKeySpecGet(); + this.message = 'ECC Promise Success'; + } catch { + this.message = 'ECC Promise Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/ecc/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/ecc/Sync.ets new file mode 100644 index 0000000000..0770504c59 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/ecc/Sync.ets @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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_parameter_generate_ecc_keypair_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function showBigIntInfo(bnName: string, bnValue: bigint | string | number) { + if (typeof bnValue === 'string') { + console.error('type is string'); + return; + } + if (typeof bnValue === 'number') { + console.error('type is number'); + return; + } + console.info(bnName + ':'); + console.info('. Decimal: ' + bnValue.toString()); + console.info('. Hexadecimal: ' + bnValue.toString(16)); + console.info('. Length (bits): ' + bnValue.toString(2).length); +} + +// 根据关键规范构造EccCommonSpec结构体。EccCommonSpec结构体定义了ECC私钥和公钥的公共参数 +function genEccCommonSpec(): cryptoFramework.ECCCommonParamsSpec { + let fieldFp: cryptoFramework.ECFieldFp = { + fieldType: 'Fp', + p: BigInt('0xffffffffffffffffffffffffffffffff000000000000000000000001') + } + let G: cryptoFramework.Point = { + x: BigInt('0xb70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21'), + y: BigInt('0xbd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34') + } + let eccCommonSpec: cryptoFramework.ECCCommonParamsSpec = { + algName: 'ECC', + specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC, + field: fieldFp, + a: BigInt('0xfffffffffffffffffffffffffffffffefffffffffffffffffffffffe'), + b: BigInt('0xb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4'), + g: G, + n: BigInt('0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d'), + h: 1 + } + return eccCommonSpec; +} + +// 打印ECC密钥规格 +function showEccSpecDetailInfo(key: cryptoFramework.PubKey | cryptoFramework.PriKey, keyType: string) { + console.info('show detail of ' + keyType + ':'); + try { + let p = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FP_P_BN); + showBigIntInfo('--- p', p); // length is 224, hex : ffffffffffffffffffffffffffffffff000000000000000000000001 + let a = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_A_BN); + showBigIntInfo('--- a', a); // length is 224, hex : fffffffffffffffffffffffffffffffefffffffffffffffffffffffe + let b = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_B_BN); + showBigIntInfo('--- b', b); // length is 224, hex : b4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4 + let gX = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_G_X_BN); + showBigIntInfo('--- gX', gX); // length is 224, hex : b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21 + let gY = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_G_Y_BN); + showBigIntInfo('--- gY', gY); // length is 224, hex : bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34 + let n = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_N_BN); + showBigIntInfo('--- n', n); // length is 224, hex : ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d + let h = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_H_NUM); + console.warn('--- h: ' + h); // key h: 1 + let fieldType = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FIELD_TYPE_STR); + console.warn('--- field type: ' + fieldType); // key field type: Fp + let fieldSize = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_FIELD_SIZE_NUM); + console.warn('--- field size: ' + fieldSize); // key field size: 224 + let curveName = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_CURVE_NAME_STR); + console.warn('--- curve name: ' + curveName); // key curve name: NID_secp224r1 + if (keyType == 'priKey') { + let sk = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_SK_BN); + showBigIntInfo('--- sk', sk); + } else if (keyType == 'pubKey') { + let pkX = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_X_BN); + showBigIntInfo('--- pkX', pkX); + let pkY = key.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_Y_BN); + showBigIntInfo('--- pkY', pkY); + } + } catch (e) { + console.error(`getAsyKeySpec failed, ${e.code}, ${e.message}`); + } +} + +// 根据EccCommonSpec实例生成ECC密钥对,获取密钥规格 +function testEccUseCommKeySpecGetSync() { + try { + let commKeySpec = genEccCommonSpec(); // 使用参数属性,构造ECC公私钥公共密钥参数对象 + let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(commKeySpec); // 使用密钥参数对象创建生成器 + let keyPair = generatorBySpec.generateKeyPairSync(); // Generate an ECC key pair. + if (keyPair != null) { + showEccSpecDetailInfo(keyPair.priKey, 'priKey'); // 对私钥获取相关密钥参数属性 + showEccSpecDetailInfo(keyPair.pubKey, 'pubKey'); // 对公钥获取相关密钥参数属性 + } else { + console.error('get key pair result fail!'); + } + } catch (e) { + // 逻辑错误等异常在此捕获 + console.error(`get key pair result fail, ${e.code}, ${e.message}`); + } +} +// [End specify_parameter_generate_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 { + testEccUseCommKeySpecGetSync(); + this.message = 'ECC Sync Success'; + } catch { + this.message = 'ECC Sync Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/rsa/Callback.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/rsa/Callback.ets new file mode 100644 index 0000000000..c1bfb5e14d --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/rsa/Callback.ets @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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_parameter_generate_rsa_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +// RSA公钥密钥参数生成函数 +function genRsaPubKeySpec(nIn: bigint, eIn: bigint): cryptoFramework.RSAPubKeySpec { + let rsaCommSpec: cryptoFramework.RSACommonParamsSpec = { + n: nIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC + }; + let rsaPubKeySpec: cryptoFramework.RSAPubKeySpec = { + params: rsaCommSpec, + pk: eIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.PUBLIC_KEY_SPEC + }; + return rsaPubKeySpec; +} + +// 根据密钥参数构造RSA公钥规范对象 +function genRsa2048PubKeySpec() { + let nIn = + BigInt('0x9260d0750ae117eee55c3f3deaba74917521a262ee76007cdf8a56755ad73a1598a1408410a01434c3f5bc54a88b57fa19fc4' + + '328daea0750a4c44e88cff3b2382621b80f670464433e4336e6d003e8cd65bff211da144b88291c2259a00a72b711c116ef7686e8fee' + + '34e4d933c868187bdc26f7be071493c86f7a5941c3510806ad67b0f94d88f5cf5c02a092821d8626e8932b65c5bd8c92049c210932b7' + + 'afa7ac59c0e886ae5c1edb00d8ce2c57633db26bd6639bff73cee82be9275c402b4cf2a4388da8cf8c64eefe1c5a0f5ab8057c39fa5c' + + '0589c3e253f0960332300f94bea44877b588e1edbde97cf2360727a09b775262d7ee552b3319b9266f05a25'); + let eIn = BigInt('0x010001'); + return genRsaPubKeySpec(nIn, eIn); +} + +// 将RSA公钥规格与预期值进行比较 +function compareRsaPubKeyBySpec(rsaKeySpec: cryptoFramework.RSAPubKeySpec, n: bigint | string | number, + e: bigint | string | number) { + if (typeof n === 'string' || typeof e === 'string') { + console.error('type is string'); + return false; + } + if (typeof n === 'number' || typeof e === 'number') { + console.error('type is number'); + return false; + } + if (rsaKeySpec.params.n != n) { + return false; + } + if (rsaKeySpec.pk != e) { + return false; + } + return true; +} + +// 根据RSA公钥规格生成RSA公钥,获取密钥规格,并与预期值进行比较 +function rsaUsePubKeySpecGetCallback() { + let rsaPubKeySpec = genRsa2048PubKeySpec(); + let rsaGeneratorSpec = cryptoFramework.createAsyKeyGeneratorBySpec(rsaPubKeySpec); + rsaGeneratorSpec.generatePubKey((error, key) => { + if (error) { + console.error('generate pubKey error' + 'error code: ' + error.code + 'error message' + error.message); + } + let pubKey = key; + let nBN = pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.RSA_N_BN); + let eBN = pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.RSA_PK_BN); + if (compareRsaPubKeyBySpec(rsaPubKeySpec, nBN, eBN) != true) { + console.error('error pub key big number'); + } else { + console.info('n, e in the pubKey are same as the spec.'); + } + }); +} +// [End specify_parameter_generate_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 { + rsaUsePubKeySpecGetCallback(); + 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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/rsa/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/rsa/Sync.ets new file mode 100644 index 0000000000..e7e3cf1c5c --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/rsa/Sync.ets @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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_parameter_generate_rsa_keypair_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +// RSA公钥密钥参数生成函数 +function genRsaPubKeySpec(nIn: bigint, eIn: bigint): cryptoFramework.RSAPubKeySpec { + let rsaCommSpec: cryptoFramework.RSACommonParamsSpec = { + n: nIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.COMMON_PARAMS_SPEC + }; + let rsaPubKeySpec: cryptoFramework.RSAPubKeySpec = { + params: rsaCommSpec, + pk: eIn, + algName: 'RSA', + specType: cryptoFramework.AsyKeySpecType.PUBLIC_KEY_SPEC + }; + return rsaPubKeySpec; +} + +// 根据密钥参数构造RSA公钥规范对象 +function genRsa2048PubKeySpec() { + let nIn = + BigInt('0x9260d0750ae117eee55c3f3deaba74917521a262ee76007cdf8a56755ad73a1598a1408410a01434c3f5bc54a88b57fa19fc43' + + '28daea0750a4c44e88cff3b2382621b80f670464433e4336e6d003e8cd65bff211da144b88291c2259a00a72b711c116ef7686e8fee34' + + 'e4d933c868187bdc26f7be071493c86f7a5941c3510806ad67b0f94d88f5cf5c02a092821d8626e8932b65c5bd8c92049c210932b7afa' + + '7ac59c0e886ae5c1edb00d8ce2c57633db26bd6639bff73cee82be9275c402b4cf2a4388da8cf8c64eefe1c5a0f5ab8057c39fa5c0589' + + 'c3e253f0960332300f94bea44877b588e1edbde97cf2360727a09b775262d7ee552b3319b9266f05a25'); + let eIn = BigInt('0x010001'); + return genRsaPubKeySpec(nIn, eIn); +} + +// 将RSA公钥规格与预期值进行比较 +function compareRsaPubKeyBySpec(rsaKeySpec: cryptoFramework.RSAPubKeySpec, n: bigint | string | number, + e: bigint | string | number) { + if (typeof n === 'string' || typeof e === 'string') { + console.error('type is string'); + return false; + } + if (typeof n === 'number' || typeof e === 'number') { + console.error('type is number'); + return false; + } + if (rsaKeySpec.params.n != n) { + return false; + } + if (rsaKeySpec.pk != e) { + return false; + } + return true; +} + +// 根据RSA公钥规格生成RSA公钥,获取密钥规格,并与预期值进行比较 +function rsaUsePubKeySpecGetSync() { + let rsaPubKeySpec = genRsa2048PubKeySpec(); + let rsaGeneratorSpec = cryptoFramework.createAsyKeyGeneratorBySpec(rsaPubKeySpec); + try { + let pubKey = rsaGeneratorSpec.generatePubKeySync(); + if (pubKey != null) { + let nBN = pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.RSA_N_BN); + let eBN = pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.RSA_PK_BN); + if (compareRsaPubKeyBySpec(rsaPubKeySpec, nBN, eBN) != true) { + console.error('error pub key big number'); + } else { + console.info('n, e in the pubKey are same as the spec.'); + } + } else { + console.error('get pub key result fail!'); + } + } catch (e) { + console.error(`get pub key result fail, ${e.code}, ${e.message}`); + } +} +// [End specify_parameter_generate_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 { + rsaUsePubKeySpecGetSync(); + 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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/sm2/Promise.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/sm2/Promise.ets new file mode 100644 index 0000000000..689ee6aef9 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/sm2/Promise.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 specify_parameter_generate_sm2_keypair] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function genSM2KeyPairSpec() { + let sm2CommonParamsSpec = cryptoFramework.ECCKeyUtil.genECCCommonParamsSpec('NID_sm2'); + let sm2KeyPairSpec: cryptoFramework.ECCKeyPairSpec = { + algName: 'SM2', + specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC, + params: sm2CommonParamsSpec, + sk: BigInt('0x6330B599ECD23ABDC74B9A5B7B5E00E553005F72743101C5FAB83AEB579B7074'), + pk: { + x: BigInt('0x67F3B850BDC0BA5D3A29D8A0883C4B17612AB84F87F18E28F77D824A115C02C4'), + y: BigInt('0xD48966CE754BBBEDD6501A1385E1B205C186E926ADED44287145E8897D4B2071') + }, + }; + return sm2KeyPairSpec; +} + +async function sm2Test() { + let sm2KeyPairSpec = genSM2KeyPairSpec(); + let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(sm2KeyPairSpec); + let keyPair = await generatorBySpec.generateKeyPair(); + let sm2CurveName = keyPair.priKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_CURVE_NAME_STR); + console.info('ECC_CURVE_NAME_STR: ' + sm2CurveName); // NID_sm2 +} +// [End specify_parameter_generate_sm2_keypair] + +@Entry +@Component +struct Index { + @State message: string = 'SM2 Promise'; + + build() { + Column({ space: 12 }) { + Text(this.message).fontSize(20).fontWeight(FontWeight.Bold) + Button($r('app.string.call_sm2_promise')) + .width('70%') + .onClick(async () => { + try { + await sm2Test(); + this.message = 'SM2 Promise Success'; + } catch { + this.message = 'SM2 Promise Fail'; + } + }) + } + .height('100%') + .width('100%') + } +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/sm2/Sync.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/sm2/Sync.ets new file mode 100644 index 0000000000..a480ed6adc --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/ets/pages/sm2/Sync.ets @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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_parameter_generate_sm2_keypair_sync] +import { cryptoFramework } from '@kit.CryptoArchitectureKit'; + +function genSM2KeyPairSpec() { + let sm2CommonParamsSpec = cryptoFramework.ECCKeyUtil.genECCCommonParamsSpec('NID_sm2'); + let sm2KeyPairSpec: cryptoFramework.ECCKeyPairSpec = { + algName: 'SM2', + specType: cryptoFramework.AsyKeySpecType.KEY_PAIR_SPEC, + params: sm2CommonParamsSpec, + sk: BigInt('0x6330B599ECD23ABDC74B9A5B7B5E00E553005F72743101C5FAB83AEB579B7074'), + pk: { + x: BigInt('0x67F3B850BDC0BA5D3A29D8A0883C4B17612AB84F87F18E28F77D824A115C02C4'), + y: BigInt('0xD48966CE754BBBEDD6501A1385E1B205C186E926ADED44287145E8897D4B2071') + }, + }; + return sm2KeyPairSpec; +} + +function sm2TestSync() { + let sm2KeyPairSpec = genSM2KeyPairSpec(); + let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(sm2KeyPairSpec); + try { + let keyPair = generatorBySpec.generateKeyPairSync(); + if (keyPair != null) { + let sm2CurveName = keyPair.priKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_CURVE_NAME_STR); + console.info('ECC_CURVE_NAME_STR: ' + sm2CurveName); // NID_sm2 + } else { + console.error('get key pair result fail!'); + } + } catch (e) { + console.error(`get key pair result fail, ${e.code}, ${e.message}`); + } +} +// [End specify_parameter_generate_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 { + sm2TestSync(); + 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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/module.json5 new file mode 100644 index 0000000000..4144486d1a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000..3c712962da --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/string.json b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000..6c947e34aa --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/element/string.json @@ -0,0 +1,64 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "SpecifiedParametersGenerateAsymmetricKeyPair" + }, + { + "name": "ecc_promise", + "value": "ECC Promise" + }, + { + "name": "ecc_sync", + "value": "ECC Sync" + }, + { + "name": "rsa_callback", + "value": "RSA Callback" + }, + { + "name": "rsa_sync", + "value": "RSA Sync" + }, + { + "name": "sm2_promise", + "value": "SM2 Promise" + }, + { + "name": "sm2_sync", + "value": "SM2 Sync" + }, + { + "name": "call_ecc_promise", + "value": "Call ECC Promise" + }, + { + "name": "call_ecc_sync", + "value": "Call ECC Sync" + }, + { + "name": "call_rsa_callback", + "value": "Call RSA Callback" + }, + { + "name": "call_rsa_sync", + "value": "Call RSA Sync" + }, + { + "name": "call_sm2_promise", + "value": "Call SM2 Promise" + }, + { + "name": "call_sm2_sync", + "value": "Call SM2 Sync" + } + ] +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/background.png b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/media/foreground.png b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000..78f40ae7c4 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000..ccbeec61a1 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,11 @@ +{ + "src": [ + "pages/Index", + "pages/rsa/Callback", + "pages/ecc/Sync", + "pages/sm2/Sync", + "pages/rsa/Sync", + "pages/sm2/Promise", + "pages/ecc/Promise" + ] +} diff --git a/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000..79b11c2747 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000..0f8ce9a2c0 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000..94e4cad9e6 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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 specifiedParametersGenerateAsymmetricKeyPairTest from './SpecifiedParametersGenerateAsymmetricKeyPair.test'; + +export default function testsuite() { + abilityTest(); + specifiedParametersGenerateAsymmetricKeyPairTest(); +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/SpecifiedParametersGenerateAsymmetricKeyPair.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/SpecifiedParametersGenerateAsymmetricKeyPair.test.ets new file mode 100644 index 0000000000..970c0a23ed --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/ets/test/SpecifiedParametersGenerateAsymmetricKeyPair.test.ets @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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 specifiedParametersGenerateAsymmetricKeyPairTest() { + describe('specifiedParametersGenerateAsymmetricKeyPairTest', () => { + /** + * 打开应用 + */ + 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公钥(callback方式) + */ + it('testSpecifiedParametersGenerateAsymmetricKeyPair001', 0, async () => { + console.info('uitest: testSpecifiedParametersGenerateAsymmetricKeyPair001 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('ECC Promise')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call ECC Promise')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('ECC Promise Success')); + console.info('uitest: testSpecifiedParametersGenerateAsymmetricKeyPair001 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定密钥参数生成RSA公钥(同步方式) + */ + it('testSpecifiedParametersGenerateAsymmetricKeyPair002', 0, async () => { + console.info('uitest: testSpecifiedParametersGenerateAsymmetricKeyPair002 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: testSpecifiedParametersGenerateAsymmetricKeyPair002 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定密钥参数生成ECC密钥对(Promise方式) + */ + it('testSpecifiedParametersGenerateAsymmetricKeyPair003', 0, async () => { + console.info('uitest: testSpecifiedParametersGenerateAsymmetricKeyPair003 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: testSpecifiedParametersGenerateAsymmetricKeyPair003 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,指定密钥参数生成ECC密钥对(同步方式) + */ + it('testSpecifiedParametersGenerateAsymmetricKeyPair004', 0, async () => { + console.info('uitest: testSpecifiedParametersGenerateAsymmetricKeyPair004 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: testSpecifiedParametersGenerateAsymmetricKeyPair004 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,安根据椭圆曲线名生成SM2密钥对(Promise方式) + */ + it('testSpecifiedParametersGenerateAsymmetricKeyPair005', 0, async () => { + console.info('uitest: testSpecifiedParametersGenerateAsymmetricKeyPair005 begin'); + const driver = Driver.create(); + const button1 = await driver.findComponent(ON.text('SM2 Promise')); + await driver.delayMs(1000); + await button1.click(); + await driver.delayMs(1000); + const button2 = await driver.findComponent(ON.text('Call SM2 Promise')); + await button2.click(); + await driver.delayMs(1000); + await driver.assertComponentExist(ON.text('SM2 Promise Success')); + console.info('uitest: testSpecifiedParametersGenerateAsymmetricKeyPair005 end'); + await driver.pressBack(); + }) + + /** + * 点击按钮,根据椭圆曲线名生成SM2密钥对(同步方式) + */ + it('testSpecifiedParametersGenerateAsymmetricKeyPair006', 0, async () => { + console.info('uitest: testSpecifiedParametersGenerateAsymmetricKeyPair006 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: testSpecifiedParametersGenerateAsymmetricKeyPair006 end'); + }) + }) +} \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/module.json5 b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000000..c3fd9dda30 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/test/List.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/test/List.test.ets new file mode 100644 index 0000000000..f1186b1f53 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/entry/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000..7fc57c77db --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/hvigor/hvigor-config.json5 b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000..d584c19c24 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/hvigorfile.ts b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/hvigorfile.ts new file mode 100644 index 0000000000..2a5e543f19 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/oh-package.json5 b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/oh-package.json5 new file mode 100644 index 0000000000..e41bae026a --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/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/SpecifiedParametersGenerateAsymmetricKeyPair/ohosTest.md b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/ohosTest.md new file mode 100644 index 0000000000..67e51c6806 --- /dev/null +++ b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/ohosTest.md @@ -0,0 +1,13 @@ +# 指定密钥参数生成非对称密钥对测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +| ---------------------------------------------------- | ------------ | ---- | -------------- | -------- | -------- | +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 点击按钮,指定密钥参数生成RSA公钥(callback方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定密钥参数生成RSA公钥(同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定密钥参数生成ECC密钥对(Promise方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,指定密钥参数生成ECC密钥对(同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,安根据椭圆曲线名生成SM2密钥对(Promise方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | +| 点击按钮,根据椭圆曲线名生成SM2密钥对(同步方式) | 成功拉起应用 | | 成功并输出日志 | 是 | Pass | \ No newline at end of file diff --git a/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/screenshots/SpecifiedParametersGenerateAsymmetricKeyPair1.png b/CryptoArchitectureKit/KeyGenerationConversion/SpecifiedParametersGenerateAsymmetricKeyPair/screenshots/SpecifiedParametersGenerateAsymmetricKeyPair1.png new file mode 100644 index 0000000000000000000000000000000000000000..dc454ac1f9c5685fba527440156f4003d97f8379 GIT binary patch literal 68705 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 RhQMeDjD`Rx1myqU1OS-25taY| literal 0 HcmV?d00001 -- Gitee